#using scripts\codescripts\struct; #using scripts\shared\clientfield_shared; #using scripts\shared\array_shared; function main() { clientfield::register( "world", "arena_announcer_line", 12000, 4, "int", &announcer_line_changed, false, false ); clientfield::register( "world", "arena_fighter", 12000, 2, "int", &fighter_changed, false, false ); clientfield::register( "world", "arena_fighter_line", 12000, 3, "int", &fighter_line_changed, false, false ); clientfield::register( "world", "arena_event", 12000, 3, "int", &event_changed, false, false ); level.arenaAnnouncerLine = 0; level.arenaFighter = 0; level.arenaFighterLine = 0; level.arenaAncrIntro = []; level.arenaAncrIntro[0] = "vox_ancr_introduce_yellow"; level.arenaAncrIntro[1] = "vox_ancr_introduce_blue"; level.arenaAncrIntro[2] = "vox_ancr_introduce_red"; level.arenaAncrLoser = []; level.arenaAncrLoser[0] = "vox_ancr_loser_yellow"; level.arenaAncrLoser[1] = "vox_ancr_loser_blue"; level.arenaAncrLoser[2] = "vox_ancr_loser_red"; level.arenaAncrWinner = []; level.arenaAncrWinner[0] = "vox_ancr_winner_yellow"; level.arenaAncrWinner[1] = "vox_ancr_winner_blue"; level.arenaAncrWinner[2] = "vox_ancr_winner_red"; level.arenaFighterIntro = []; level.arenaFighterIntro[0] = "vox_ymec_introduce_yellow_resp"; level.arenaFighterIntro[1] = "vox_bmec_introduce_blue_resp"; level.arenaFighterIntro[2] = "vox_rmec_introduce_red_resp"; level.arenaFighterLoser = []; level.arenaFighterLoser[0] = "vox_ymec_loser_yellow_resp"; level.arenaFighterLoser[1] = "vox_bmec_loser_blue_resp"; level.arenaFighterLoser[2] = "vox_rmec_loser_red_resp"; level.arenaFighterWinner = []; level.arenaFighterWinner[0] = "vox_ymec_winner_yellow_resp"; level.arenaFighterWinner[1] = "vox_bmec_winner_blue_resp"; level.arenaFighterWinner[2] = "vox_rmec_winner_red_resp"; } function announcer_line_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) { level.arenaAnnouncerLine = newVal; } function fighter_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) { level.arenaFighter = newVal; } function fighter_line_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) { level.arenaFighterLine = newVal; } function event_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) { // Don't trigger every time the clientfield changes, just when we advance // This only works because we always play these events in this order if ( newVal <= oldVal ) { return; } {wait(.016);}; // Make sure the fighter fields are set switch( newVal ) { case 1: play_line( localClientNum, "vox_ancr_welcome_welcome", level.arenaAnnouncerLine ); break; case 2: play_line( localClientNum, level.arenaAncrIntro[level.arenaFighter], level.arenaAnnouncerLine ); wait( 0.8 ); play_line( localClientNum, level.arenaFighterIntro[level.arenaFighter], level.arenaFighterLine ); break; case 3: play_line( localClientNum, level.arenaAncrLoser[level.arenaFighter], level.arenaAnnouncerLine ); wait( 0.8 ); play_line( localClientNum, level.arenaFighterLoser[level.arenaFighter], level.arenaFighterLine ); break; case 4: play_line( localClientNum, level.arenaAncrWinner[level.arenaFighter], level.arenaAnnouncerLine ); wait( 0.8 ); play_line( localClientNum, level.arenaFighterWinner[level.arenaFighter], level.arenaFighterLine ); break; } } function play_line( localClientNum, alias, line ) { fullAlias = alias + "_" + line; playbackId = PlaySound( localClientNum, fullAlias, (1128,0,934) ); thread play_line_delayed_sfx( fullAlias, localClientNum ); if ( !isdefined( playbackId) || playbackId == 0 ) { return; } length = GetKnownLength( playbackId ); while ( SoundPlaying( playbackId ) && !length ) { wait 0.05; length = GetKnownLength( playbackId ); } playLength = MAX( 0, length - ( 3 * 1000 ) ); while ( SoundPlaying( playbackId ) && GetPlaybackTime( playbackId ) < playLength ) { wait 0.05; } } function play_line_delayed_sfx( fullAlias, localClientNum ) { a_delayed_speaker [0] = spawn( localClientNum, (3100,1000,934) ); a_delayed_speaker [1] = spawn( localClientNum, (3100,-1000,934) ); a_delayed_speaker [2] = spawn( localClientNum, (-780,-2163,1300) ); a_delayed_speaker [3] = spawn( localClientNum, (-477,1760,1300) ); player = GetLocalPlayer( localClientNum ); a_delayed_speaker_sorted_distance = array::get_all_closest( player.origin, a_delayed_speaker ); wait 0.3; PlaySound( localClientNum, fullAlias, a_delayed_speaker_sorted_distance[0].origin ); PlaySound( localClientNum, fullAlias, a_delayed_speaker_sorted_distance[2].origin ); wait 0.3; PlaySound( localClientNum, fullAlias, a_delayed_speaker_sorted_distance[1].origin ); lastSoundPlayed = PlaySound( localClientNum, fullAlias, a_delayed_speaker_sorted_distance[3].origin ); while ( SoundPlaying( lastSoundPlayed ) ) { wait 0.05; } array::thread_all( a_delayed_speaker, &struct::delete ); }