#using scripts\codescripts\struct; #using scripts\shared\util_shared; #using scripts\shared\clientfield_shared; #using scripts\shared\scene_shared; #using scripts\mp\_load; #using scripts\mp\_util; #using scripts\mp\mp_city_fx; #using scripts\mp\mp_city_sound; #using scripts\mp\vehicles\_quadtank; #using scripts\mp\vehicles\_siegebot; #using scripts\mp\vehicles\_siegebot_theia; #precache( "client_fx", "ui/fx_dom_cap_indicator_neutral_r120" ); #precache( "client_fx", "ui/fx_dom_cap_indicator_team_r120" ); #precache( "client_fx", "ui/fx_dom_marker_neutral_r120" ); #precache( "client_fx", "ui/fx_dom_marker_team_r120" ); function main() { clientfield::register( "scriptmover", "ring_state", 15000, 2, "int", &ring_state_changed, !true, !true); push_out_threshold = GetDvarFloat( "tu16_physicsPushOutThreshold", -1.0 ); if ( push_out_threshold != -1.0 ) SetDvar( "tu16_physicsPushOutThreshold", 10.0 ); mp_city_fx::main(); mp_city_sound::main(); load::main(); level.domFlagBaseFxOverride = &dom_flag_base_fx_override; level.domFlagCapFxOverride = &dom_flag_cap_fx_override; util::waitforclient( 0 ); // This needs to be called after all systems have been registered. level.endGameXCamName = "ui_cam_endgame_mp_city"; level scene::play( "p7_fxanim_gp_light_emergency_military_01_bundle" ); } function dom_flag_base_fx_override( flag, team ) { switch ( flag.name ) { case "a": if ( team == "neutral" ) { return "ui/fx_dom_marker_neutral_r120"; } else { return "ui/fx_dom_marker_team_r120"; } break; case "b": break; case "c": if ( team == "neutral" ) { return "ui/fx_dom_marker_neutral_r120"; } else { return "ui/fx_dom_marker_team_r120"; } break; }; } function dom_flag_cap_fx_override( flag, team ) { switch ( flag.name ) { case "a": if ( team == "neutral" ) { return "ui/fx_dom_cap_indicator_neutral_r120"; } else { return "ui/fx_dom_cap_indicator_team_r120"; } break; case "b": break; case "c": if ( team == "neutral" ) { return "ui/fx_dom_cap_indicator_neutral_r120"; } else { return "ui/fx_dom_cap_indicator_team_r120"; } break; }; } function ring_state_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) { self notify ( "state_switched" ); if( !isDefined( self.emissiveLevel ) ) { self.emissiveLevel = 0; } switch( newVal ) { case 0: self ring_state_ramp( localClientNum ); break; case 1: self ring_state_on( localClientNum ); break; case 2: self ring_state_flicker( localClientNum ); break; case 3: self thread ring_state_base( localClientNum ); break; } } function ramp_shader( localClientNum, time, lowIntensity, highIntensity, ramp_type, goalIntensity ) { self endon ( "state_switched" ); self endon ( "entityshutdown" ); starttime = GetServerTime( localClientNum ); currTime = starttime; ramp_shader_single( localClientNum, time, goalIntensity, 0 ); while( true ) { amount = ( currTime - starttime ) % time; percent = float( amount ) / time; up = int( ( currTime - starttime ) / time ) % 2; if( up ) { percent = 1 - percent; } if( ramp_type == 1 ) { percent *= percent; } self.emissiveLevel = LerpFloat( lowIntensity, highIntensity, percent ); self MapShaderConstant( localClientNum, 0, "scriptVector2", 0, Pow( self.emissiveLevel, 4 ), 0, 0 ); {wait(.016);}; currTime = GetServerTime( localClientNum ); } } function ramp_shader_random( localClientNum, time, lowIntensity, highIntensity, ramp_type, goalIntensity, total_time ) { self endon ( "state_switched" ); self endon ( "entityshutdown" ); starttime = GetServerTime( localClientNum ); currTime = starttime; ramp_shader_single( localClientNum, time, goalIntensity, 0 ); direction = 0; startIntensity = lowintensity; finalIntensity = highIntensity; while( true ) { percent_total = ( currTime - starttime ) / total_time; percent_total *= percent_total; percent_total = 1 - percent_total; if( percent_total < 0 ) { percent_total = 0; } amount = ( currTime - starttime ) % time; percent = float( amount ) / time; up = int( ( currTime - starttime ) / time ) % 2; if( direction != up ) { startIntensity = finalIntensity; finalIntensity = RandomFloatRange( 0, 1 * percent_total ); } if( ramp_type == 1 ) { percent *= percent; } self.emissiveLevel = LerpFloat( startIntensity, finalIntensity, percent ); self MapShaderConstant( localClientNum, 0, "scriptVector2", 0, Pow( self.emissiveLevel, 4 ), 0, 0 ); {wait(.016);}; currTime = GetServerTime( localClientNum ); } } function ramp_shader_single( localClientNum, time, goalIntensity, ramp_type ) { self endon ( "entityshutdown" ); starttime = GetServerTime( localClientNum ); currTime = starttime; startIntensity = self.emissiveLevel; while( self.emissiveLevel != goalIntensity ) { percent = float( currTime - starttime ) / time; if( percent > 1 ) { percent = 1; } if( ramp_type == 1 ) { percent *= percent; } self.emissiveLevel = LerpFloat( startIntensity, goalIntensity, percent ); self MapShaderConstant( localClientNum, 0, "scriptVector2", 0, Pow( self.emissiveLevel, 4 ), 0, 0 ); {wait(.016);}; currTime = GetServerTime( localClientNum ); } {wait(.016);}; self notify( "ramp_shader_single_finished" ); } function ring_state_base( localClientNum ) { self endon ( "entityshutdown" ); self thread ramp_shader_single( localClientNum, 90, self.emissiveLevel / 2, 1 ); self waittill( "ramp_shader_single_finished" ); self thread ramp_shader_single( localClientNum, 4000, 0, 1 ); self waittill( "ramp_shader_single_finished" ); self thread ramp_shader( localClientNum, 2000, .15, .25, 1, .15 ); } function ring_state_ramp( localClientNum ) { self thread ramp_shader_single( localClientNum, 2000, 1, 0 ); } function ring_state_on( localClientNum ) { self thread ramp_shader( localClientNum, 2000, .25, .5, 0, .25 ); } function ring_state_flicker( localClientNum ) { self thread ramp_shader_random( localClientNum, 90, 0, 1, 1, 0, 4200 ); }