157 lines
13 KiB
Plaintext
157 lines
13 KiB
Plaintext
#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 );
|
|
} |