snake5 icon

SGScript saves the day | LD33 level script

snake5 | PRO | 08/24/15 07:25:08 PM UTC | 0 ⭐ | 805 👁️ | Never ⏰ | []
JavaScript |

4.88 KB

|

None

|

0 👍

/

0 👎

global MSGTIME = 5.0;
global MONEY_TARGET = 500.0;
global MONEY_TARGET_STR = "50 000";
 
function GET_TOTAL_MONEY()
{
    return string_format( "{1:f.2}", 950000 + money_total );
}
 
function onLevelStart()
{
    global money_total = 0.0;
    global donations = [];
    global cur_donation = 0;
    global goal_reached = false;
    global mission_failed = false;
    global hackcount = 0;
    
    for( i = 0; i < 5; ++i )
        donations.push( ( i + 1 ) * 3.4 * 1000 );
    donations.shuffle();
    
    ObjectiveAdd( "Discover a computer", OS_Open );
    ObjectiveAdd( "Steal $" $ MONEY_TARGET_STR, OS_Open );
    ObjectiveAdd( "Get out", OS_Hidden );
    
    EntitySetProperties( "walker1", "patrol_path",
    [
        { type = "move", target = GetNamedPosition("center") },
        { type = "wait", time = 1.0 },
        { type = "move", target = GetNamedPosition("ew_elev") },
        { type = "move", target = GetNamedPosition("ew_desk1") },
        { type = "look", target = GetNamedPosition("ew_desk1in") },
        { type = "wait", time = 2.0 },
        { type = "move", target = GetNamedPosition("ew_cnr1") },
        { type = "move", target = GetNamedPosition("ew_elev") }, // TODO
    ]);
    
    EntitySetProperties( "walker_fw", "patrol_path",
    [
        { type = "move", target = GetNamedPosition("farwall") },
        { type = "wait", time = 1.0 },
        { type = "move", target = GetNamedPosition("ww_cnr1") },
        { type = "move", target = GetNamedPosition("ww_desk1") },
        { type = "look", target = GetNamedPosition("ww_desk1in") },
        { type = "wait", time = 2.0 },
        { type = "move", target = GetNamedPosition("ww_wall") },
        { type = "wait", time = 1.0 },
        { type = "move", target = GetNamedPosition("ww_desk1") },
        { type = "look", target = GetNamedPosition("ww_desk1in") },
        { type = "wait", time = 1.0 },
        { type = "move", target = GetNamedPosition("ww_cnr1") },
    ]);
    
    SetMusic( "/intro_music" );
    SetCutsceneFunc(function(t)
    {
        if( t < 5 ) SetCameraPosDir( vec3(5-t*2,-5,1), vec3(0,1,0) );
        else if( t < 15 )
        {
            a = t*0.5;
            s = sin(a);
            c = cos(a);
            SetCameraPosDir( vec3(c*5,s*5,2.5), -vec3(c,s,0.5) );
        }
        else if( t < 30 )
        {
            b = pow( t - 15, 0.5 ) * 2;
            SetCameraPosDir( vec3(-3.5-b*0.2,-5+b*0.5,0.5+b*0.2), vec3(-0.1-b*0.04,1,0.4-b*0.15) );
        }
        
        if( t < 1 ) SetCutsceneSubtitle( "" );
        else if( t < 3 ) SetCutsceneSubtitle( "His name is Jack" );
        else if( t < 5 ) SetCutsceneSubtitle( "and he wants to buy a yacht." );
        else if( t < 7 ) SetCutsceneSubtitle( "He needs $ 1 000 000 to do that" );
        else if( t < 9 ) SetCutsceneSubtitle( "so he steals money from charities." );
        else if( t < 11 ) SetCutsceneSubtitle( "He is a monster..." );
        else if( t < 13 ) SetCutsceneSubtitle( "...and, for the moment, you are him." );
        else if( t < 15 ) SetCutsceneSubtitle( "" );
        else if( t < 17 ) SetCutsceneSubtitle( "Hack computers to get the remaining $ 50 000" );
        else if( t < 19 ) SetCutsceneSubtitle( "but don't do it while somebody's watching!" );
        else SetCutsceneSubtitle( "" );
        
        if( t > 20 )
        {
            SetMusic( "/game_music" );
            return true;
        }
    }, 0);
    
    SetShowMoney( true, 950000 + money_total );
    SetShowSuspicion( true );
}
 
function HackState( add )
{
    global hackcount;
    hackcount += add;
    SetMusicVar( "stealing", hackcount > 0 );
}
 
function OnMissionFailed( pos )
{
    global mission_failed;
    if( mission_failed )
        return;
    mission_failed = true;
    
    EndGame( "Failed!", false );
}
 
function OnMoneyStolen()
{
    global money_total, donations, cur_donation;
    stolen_money = donations[ cur_donation++ % donations.size ] + rand() % 500;
    money_total += stolen_money;
    println( "Stolen: ", stolen_money, ", total now: ", money_total );
    SendMessage( MT_Info, "Stolen: " $ stolen_money $ ", total now: " $ GET_TOTAL_MONEY() );
    SendMessage( MT_Warning, "Hacking done, hide your tracks!", MSGTIME );
    
    SetShowMoney( true, 950000 + money_total );
}
 
function OnHackingStarted( cold )
{
    HackState( 1 );
    if( cold )
    {
        SendMessage( MT_Warning, "Hacking started! Watch out for employees!", MSGTIME );
    }
}
 
function OnHackingStopped( done )
{
    if( done )
    {
        if( money_total >= MONEY_TARGET && goal_reached == false )
        {
            global goal_reached = true;
            SendMessage( MT_Info, "Successfully stolen $" $ MONEY_TARGET_STR $ ". Time to get out.", MSGTIME );
            ObjectiveSetState( 1, OS_Done );
        //  ObjectiveSetState( 2, OS_Open );
            SetCutsceneFunc(function(t)
            {
                b = pow( t * 0.2, 0.5 ) * 5;
                if( b > 6 )
                    b = 6;
                SetCameraPosDir( vec3(-2.5+b,-5,2.5), vec3(1,-0.4+b*0.15,-0.4) );
            });
            EndGame( "Success!", true );
            return;
        }
        else
        {
            SendMessage( MT_Info, "Well done! Now look for another PC to hack...", MSGTIME );
            SendMessage( MT_Continued, "...or wait for the next donation!", MSGTIME );
        }
    }
    HackState( -1 );
}
 
function OnDiscoveredComputer()
{
    SendMessage( MT_Info, "Computer discovered", MSGTIME );
    ObjectiveSetState( 0, OS_Done );
}

Comments