cod4-sdk/raw/maps/_briefing.gsc
2008-01-19 00:00:00 +00:00

345 lines
7.4 KiB
Text

/*
MISSION BRIEFING
*/
main()
{
setsaveddvar("hud_drawhud",0);
level.script = tolower(getdvar ("mapname"));
if(!isdefined(level.tmpmsg))
level.tmpmsg = [];
player = getent("player", "classname");
setsaveddvar("g_speed",0);
player setViewmodel( "viewmodel_hands_cloth" ); //hack
precacheShader("black");
movieDefined = 0;
for( index = 0; index < level.slide.size; index++)
{
if( isdefined(level.slide[index]["movie"]) )
{
movieDefined = 1;
break;
}
}
if ( movieDefined )
{
// movie
wait 0.05;
player gotothelevel( false );
}
else
{
// slides
precacheString (&"SCRIPT_PLATFORM_FIRE_TO_SKIP");
for(i=0;i<level.slide.size;i++)
if(isdefined(level.slide[i]["image"]))
precacheshader(level.slide[i]["image"]);
player thread skipthebriefing();
player dothebriefing();
player gotothelevel(false);
}
}
// Does the initial startup for a mission briefing
// iFadeTime Is the length of time it will take to transition between images. Defaults to 500 (milliseconds) Set to 0 for instant change
start(fFadeTime)
{
level.briefing_running = true;
level.briefing_ending = false;
level.PlaceNextImage = "A";
if (isdefined (level.imageA))
level.imageA destroy();
if (isdefined (level.imageB))
level.imageB destroy();
if (isdefined (level.blackscreen))
level.blackscreen destroy();
if (isdefined (level.FiretoSkip))
level.FiretoSkip destroy();
if( !isDefined(fFadeTime) || !fFadeTime )
{
level.briefing_fadeInTime = 0.5;
level.briefing_fadeOutTime = 0.5;
}
else
{
level.briefing_fadeInTime = fFadeTime;
level.briefing_fadeOutTime = fFadeTime;
}
self endon("briefingskip");
self thread skipCheck();
// Make the screen black
level.blackscreen = newHudElem();
level.blackscreen.sort = -1;
level.blackscreen.alignX = "left";
level.blackscreen.alignY = "top";
level.blackscreen.x = 0;
level.blackscreen.y = 0;
level.blackscreen.horzAlign = "fullscreen";
level.blackscreen.vertAlign = "fullscreen";
level.blackscreen.foreground = true;
level.blackscreen.alpha = 1;
level.blackscreen setShader("black", 640, 480);
// Fire to skip text
level.FiretoSkip = newHudElem();
level.FiretoSkip.sort = 1;
level.FiretoSkip.alignX = "center";
level.FiretoSkip.alignY = "top";
level.FiretoSkip.fontScale = 2;
level.FiretoSkip.x = 0;
level.FiretoSkip.y = 60;
level.FiretoSkip.horzAlign = "center";
level.FiretoSkip.vertAlign = "fullscreen";
level.FiretoSkip.foreground = true;
level.FiretoSkip settext (&"SCRIPT_PLATFORM_FIRE_TO_SKIP");
level.FiretoSkip.alpha = 0.0;
thread fadeInFireToSkip();
//Image A
level.imageA = newHudElem();
level.imageA.alignX = "center";
level.imageA.alignY = "middle";
level.imageA.x = 320;
level.imageA.y = 240;
level.imageA.alpha = 0;
level.imageA.horzAlign = "fullscreen";
level.imageA.vertAlign = "fullscreen";
level.imageA setShader("black", 640, 360);
level.imageA.foreground = true;
//Image B
level.imageB = newHudElem();
level.imageB.alignX = "center";
level.imageB.alignY = "middle";
level.imageB.x = 320;
level.imageB.y = 240;
level.imageB.horzAlign = "fullscreen";
level.imageB.vertAlign = "fullscreen";
level.imageB.alpha = 0;
level.imageB setShader("black", 640, 360);
level.imageB.foreground = true;
self freezeControls(true);
wait .5;
for(i=0;i<level.slide.size;i++)
{
soundplaying = false;
if(isdefined(level.slide[i]["image"]))
{
if(level.script[0] != "m") //movie_ maps don't play the sound
self soundplay ("slide_advance");
wait .5;
self thread image(level.slide[i]["image"]);
}
if(isdefined(level.slide[i]["dialog_wait"]) && self.dialogplaying[level.slide[i]["dialog_wait"]])
{
self waittill (level.slide[i]["dialog_wait"]+"sounddone");
}
if(isdefined(level.slide[i]["dialog"]))
{
self soundplay(level.slide[i]["dialog"], level.slide[i]["dialog"]+"sounddone");
soundplaying = true;
}
if(isdefined(level.slide[i]["delay"]))
{
wait(level.slide[i]["delay"]);
}
else if(soundplaying)
{
self waittill (level.slide[i]["dialog"]+"sounddone");
}
}
}
fadeInFireToSkip()
{
wait(1);
thread fadeFireToSkip();
level.FiretoSkip fadeOverTime(level.briefing_fadeOutTime);
level.FiretoSkip.alpha = 1.0;
}
// fades fire to skip after 7 seconds
fadeFireToSkip()
{
wait 7;
level.FiretoSkip fadeOverTime(level.briefing_fadeOutTime);
level.FiretoSkip.alpha = 0.0;
}
// waits till the briefing is done
waitTillBriefingDone()
{
self waittill("briefingend");
}
// This ends the briefing if the player says he wants to
skipCheck()
{
self endon("briefingend");
player = getent("player", "classname" );
wait( 0.05 );
maps\_utility::set_console_status();
for(;;)
{
// we want to check if the "A" button has been pressed on xenon
// instead of FIRE.
if( level.console )
{
if(player buttonPressed( "BUTTON_A" ))
{
self notify("briefingskip");
end();
return;
}
wait(0.05);
continue;
}
if(player attackButtonPressed())
{
self notify("briefingskip");
end();
return;
}
wait(0.05);
}
}
image(sImageShader)
{
self endon("briefingskip");
if (level.PlaceNextImage == "A")
{
level.PlaceNextImage = "B";
level.imageA setShader(sImageShader, 640, 360);
thread imageFadeOut("B");
level.imageA fadeOverTime(level.briefing_fadeInTime);
level.imageA.alpha = 1;
}
else if (level.PlaceNextImage == "B")
{
level.PlaceNextImage = "A";
level.imageB setShader(sImageShader, 640, 360);
thread imageFadeOut("A");
level.imageB fadeOverTime(level.briefing_fadeInTime);
level.imageB.alpha = 1;
}
}
imageFadeOut(elem)
{
if (elem == "A")
{
level.imageA fadeOverTime(level.briefing_fadeOutTime);
level.imageA.alpha = 0;
}
else if (elem == "B")
{
level.imageB fadeOverTime(level.briefing_fadeOutTime);
level.imageB.alpha = 0;
}
}
endThread()
{
// Check for the briefing already being ended
if(!level.briefing_running)
return;
if(level.briefing_ending)
return;
self notify("briefingend");
level.briefing_ending = true;
// Make sure the briefing audio is ended on for slideshows
if(level.script[0] != "m")
{
self playsound("stop_voice");
}
// Fade the screen in
thread imageFadeOut("A");
thread imageFadeOut("B");
wait(1.5);
// self freezeControls(false);
level.briefing_ending = false;
}
end()
{
self thread endThread();
}
soundplay(dialog,msg)
{
if(isdefined(level.tmpmsg[dialog]))
iprintlnbold(level.tmpmsg[dialog]);
if(isdefined(msg))
{
thread soundplay_flag(dialog,msg);
self playsound (dialog,msg);
}
else
self playsound (dialog);
}
soundplay_flag(dialog,msg)
{
self.dialogplaying[dialog] = true;
self waittill (msg);
self.dialogplaying[dialog] = false;
}
dothebriefing()
{
self start(0.5);
if(level.script[0] != "m") //movie_ maps don't play the sound
self soundplay ("slide_advance");
wait(0.5);
end();
}
skipthebriefing()
{
self waittill("briefingskip");
gotothelevel(true);
}
gotothelevel(skipMovie)
{
if ( !skipMovie )
{
for(i=0;i<level.slide.size;i++)
{
if(isdefined(level.slide[i]["movie"]))
cinematic(level.slide[i]["movie"]);
}
}
changeLevel( level.levelToLoad, false );
}