695 lines
22 KiB
Plaintext

/****************************************************************************
Changes:
Added training logic from Call of Duty: Modern Warfare Remastered. It means that you can run other courses or just running to the Captain Price.
Changed objective logic for Sgt. Newcastle and Mac: one visible objective.
If player skip the Mac course then add line if player have bad time 'letyouskip'
Change the M203 and C4 hint for PC.
****************************************************************************/
#include common_scripts\utility;
#include maps\_utility;
main()
{
precachestring( &"IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING" );
precachestring( &"IW3SP_MOD_LOC_KILLHOUSE_RUN_THE_OBSTACLE_COURSE" );
flag_init("cargoshipTutoDone");
level.player_completed_demolitions_training = false;
level.player_completed_obstacle_course_training = false;
level.player_skipped_obstacle_course = false;
car = getent ( "destructible", "targetname" );
car thread do_in_order( ::waittill_msg, "destroyed", ::flag_set, "car_destroyed" );
car destructible_disable_explosion();
ReplaceFunc(maps\killhouse::melee_training, ::melee_training);
}
melee_training()
{
//while( !flag( "melee_entered" ) )
// wait ( 0.05 );
level notify ( "melee_training" );
maps\killhouse_code::registerObjective( "obj_melee", &"KILLHOUSE_MELEE_THE_WATERMELON", getEnt( "scr_watermelon", "targetname" ) );
maps\killhouse_code::setObjectiveState( "obj_melee", "current" );
if ( !flag ( "melee_complete" ) )
thread maps\killhouse_code::generic_compass_hint_reminder( "melee_complete", 12 );
//level.waters thread walk_to ( getnode ( "melon_node", "script_noteworthy" ) );
if ( !flag ( "near_melee" ) && !flag ( "melee_complete" ) )
{
thread maps\killhouse_code::hint( &"KILLHOUSE_HINT_APPROACH_MELEE", 9999 );
//All right Soap, come this way.
level.waters maps\killhouse_code::execDialog( "comethisway" );
}
thread maps\killhouse::melee_run_dialog();
if ( !flag ( "melee_complete" ) )
flag_wait ( "near_melee" );
while ( !flag ( "melee_complete" ) )
maps\killhouse_code::keyHint( "melee" );
flag_wait ( "melee_complete" );
maps\killhouse_code::clear_hints();
thread maps\killhouse::open_firing_range_door();
flag_wait ( "melee_run_dialog" );
wait .5;
flag_set ( "spawn_frags" );
//Lovely. Your fruit killing skills are remarkable.
thread maps\killhouse_code::gaz_animation( "killhouse_gaz_talk_side" );
level.waters maps\killhouse_code::execDialog( "fruitkilling" );
maps\killhouse_code::setObjectiveState( "obj_melee", "done" );
level notify ( "meleeTraining_end" );
flag_clear ( "aa_sidearm_melee" );
autosave_by_name( "melee_complete" );
if ( level.short_training )
{
level.waters maps\killhouse_code::execDialog( "wantstosee" );
//thread add_dialogue_line( "GAZ", "Captain Price wants to see you." );
thread player_skipped_the_optional_objectives();
thread maps\killhouse::report_to_price();
wait 1;
thread frag_training();
thread obstacle_training();
//KILLHOUSE_DEMOLITIONS_TRAINING
//KILLHOUSE_RUN_THE_OBSTACLE_COURSE
if(AssetIsExisting(22, "IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING"))
objectiveText = &"IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING";
else
objectiveText = &"KILLHOUSE_GO_OUTSIDE_AND_REPORT";
if(AssetIsExisting(22, "IW3SP_MOD_LOC_KILLHOUSE_RUN_THE_OBSTACLE_COURSE"))
objectiveCourse = &"IW3SP_MOD_LOC_KILLHOUSE_RUN_THE_OBSTACLE_COURSE";
else
objectiveCourse = &"KILLHOUSE_RUN_THE_OBSTACLE_COURSE";
maps\killhouse_code::registerobjective( "obj_demolitions", objectiveText, getent( "obj_frag_ammo", "targetname" ) );
maps\killhouse_code::setobjectivestate( "obj_demolitions", "active" );
maps\killhouse_code::registerobjective( "obj_obstacle", objectiveCourse, getent( "obstacleTraining_objective", "targetname" ) );
maps\killhouse_code::setobjectivestate( "obj_obstacle", "active" );
}
else
{
level.waters maps\killhouse_code::execDialog( "allgoodhere" );
//level.waters thread walk_to ( getnode ( "door_node", "script_noteworthy" ) );
thread maps\killhouse::frag_Training();
}
}
frag_Training()
{
level endon ( "PlayerSkipTheOptionalCourses" );
if( flag( "cargoshipTutoDone" ) )
return;
flag_set ( "aa_frag" );
level notify ( "fragTraining_begin" );
autosave_by_name( "frag_training" );
flag_set ( "start_frag_training" );
//thread generic_compass_hint_reminder( "got_frags", 7 );
// maps\killhouse_code::registerObjective( "obj_demolitions", &"KILLHOUSE_GO_OUTSIDE_AND_REPORT", getEnt( "obj_frag_ammo", "targetname" ) );
// maps\killhouse_code::setObjectiveState( "obj_demolitions", "current" );
flag_wait ( "near_grenade_area" );
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_PICK_UP_THE_FRAG_GRENADES" );
maps\killhouse_code::setObjectiveState( "obj_demolitions", "current" );
//It's time for some fun mate. Let's blow some shit up...
level.newcastle maps\killhouse_code::execDialog( "timeforfun" );
if ( !( level.player GetWeaponAmmoStock( "fraggrenade" ) ) && (!( maps\killhouse_code::in_pit() ) ) )
{
//Pick up those frag grenades and get in the safety pit.
level.newcastle maps\killhouse_code::execDialog( "pickupfrag" );
}
while ( level.player GetWeaponAmmoStock( "fraggrenade" ) < 3 )
wait ( 0.05 );
flag_set ( "got_frags" );
getEnt( "grenade_too_low", "targetname" ) thread maps\killhouse_code::frag_too_low_hint();
thread maps\killhouse_code::frag_trigger_think( "frag_target_1", getEnt( "grenade_damage_trigger1", "targetname" ) );
thread maps\killhouse_code::frag_trigger_think( "frag_target_2", getEnt( "grenade_damage_trigger2", "targetname" ) );
thread maps\killhouse_code::frag_trigger_think( "frag_target_3", getEnt( "grenade_damage_trigger3", "targetname" ) );
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "safety_pit", "targetname" ) );
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_ENTER_THE_SAFETY_PIT" );
thread maps\killhouse_code::dialog_nag_till_in_pit();
getEnt( "safety_pit", "targetname" ) waittill ( "trigger" );
flag_set ( "in_pit_with_frags" );
//level.newcastle thread walk_to( getnode ( "watch_pit_node", "script_noteworthy" ) );
level.newcastle setgoalnode ( getnode ( "watch_pit_node", "script_noteworthy" ) );
//Now throw a grenade into windows two, three and four.
level.newcastle thread maps\killhouse_code::execDialog( "throwgrenade" );
thread maps\killhouse_code::keyHint( "frag" );
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_THROW_A_GRENADE_INTO" );
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "safety_pit", "targetname" ) );
wait ( 0.1 );
numRemaining = 0;
for ( index = 1; index < 4; index++ )
{
if ( flag( "frag_target_" + index ) )
continue;
numRemaining++;
}
//level.marine4 execDialog( "firstwindow" );
//level.marine4.lastNagTime = getTime();
while( numRemaining )
{
curRemaining = 0;
nextTarget = "";
if ( !flag( "frag_target_1" ) )
{
curRemaining++;
nextTarget = "firstwindow";
}
if ( !flag( "frag_target_2" ) )
{
curRemaining++;
if ( nextTarget == "" )
nextTarget = "secondwindow";
}
if ( !flag( "frag_target_3" ) )
{
curRemaining++;
if ( nextTarget == "" )
nextTarget = "dumpster";
}
if ( !curRemaining )
break;
if ( curRemaining != numRemaining )
{
//level.marine4 execDialog( nextTarget );
//level.marine4.lastNagTime = getTime();
}
else
{
//level.marine4 nagPlayer( nextTarget + "again", 10.0 );
}
numRemaining = curRemaining;
wait ( 0.05 );
}
//maps\killhouse_code::setObjectiveState( "obj_demolitions", "done" );
wait ( 1.0 );
//level.marine4 thread execDialog( "gotorange" );
flag_set ( "fragTraining_end" );
thread launcherTraining();
flag_clear ( "aa_frag" );
}
launcherTraining()
{
level endon ( "PlayerSkipTheOptionalCourses" );
if( flag( "cargoshipTutoDone" ) )
return;
flag_set ( "aa_launcher" );
level notify ( "launcherTraining_begin" );
autosave_by_name( "launcher_training" );
flag_set ( "spawn_launcher" );
level.newcastle setgoalnode ( getnode ( "watch_table_node", "script_noteworthy" ) );
//level.newcastle thread walk_to ( getnode ( "watch_table_node", "script_noteworthy" ) );
//Now let's try something with a little more 'mojo'. I don't know how much experience you've got with demolitions, so just do as I say, all right?
//level.newcastle execDialog( "moremojo" );
if ( !level.player hasWeapon( "m203_m4" ) )
{
//Come back here and pick up this grenade launcher.
level.newcastle maps\killhouse_code::execDialog( "pickuplauncher" );
}
flag_trigger_init( "launcher_wall_target", getEnt( "launcher_wall_trigger", "script_noteworthy" ) );
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_PICK_UP_THE_RIFLE_WITH" );
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "obj_frag_ammo", "targetname" ) );
thread maps\killhouse_code::keyHint( "swap_launcher" );
while ( !level.player hasWeapon( "m203_m4" ) )
wait ( 0.05 );
maps\killhouse_code::clear_hints();
thread scripts\killhouse\hint::M203_icon_hint();
RefreshHudAmmoCounter();
level.player giveMaxAmmo( "m203_m4" );
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_RETURN_TO_THE_SAFETY" );
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "safety_pit", "targetname" ) );
//Notice you now have an icon of a grenade launcher on your HUD.
//level.newcastle execDialog( "icononhud" );
if ( !( level.player istouching( getEnt( "safety_pit", "targetname" ) ) ) )
{
//Now get back into the safety pit.
level.newcastle maps\killhouse_code::execDialog( "nowbacktopit" );
}
getEnt( "safety_pit", "targetname" ) waittill ( "trigger" );
//level.newcastle thread walk_to( getnode ( "watch_pit_node", "script_noteworthy" ) );
level.newcastle setgoalnode ( getnode ( "watch_pit_node", "script_noteworthy" ) );
if ( !(level.player getCurrentWeapon() == "m203_m4") )
{
//Equip the grenade launcher.
level.newcastle maps\killhouse_code::execDialog( "equiplauncher" );
thread maps\killhouse_code::keyHint( "firemode" );
RefreshHudAmmoCounter();
}
while ( !(level.player getCurrentWeapon() == "m203_m4") )
{
thread maps\killhouse_code::keyHint( "firemode" );
wait ( 1.0 );
}
maps\killhouse_code::clear_hints();
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_FIRE_AT_THE_WALL_WITH" );
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "safety_pit", "targetname" ) );
wait ( 0.1 );
//Fire at the wall with the number one on it.
level.newcastle maps\killhouse_code::execDialog( "firewall1" );
if ( level.xenon )
thread maps\killhouse_code::keyHint( "attack" );
else
thread maps\killhouse_code::keyHint( "pc_attack" );//PC and PS3 are both press
while ( !flag( "launcher_wall_target" ) )
{
//level.player giveMaxAmmo( "m203_m4" );
wait ( 0.05 );
}
maps\killhouse_code::clear_hints();
wait ( 0.1 );
//Notice it didn't explode.
level.newcastle maps\killhouse_code::execDialog( "didntexplode" );
//As you know, all grenade launchers have a minimum safe arming distance.
level.newcastle maps\killhouse_code::execDialog( "safearming" );
//The grenade wont explode unless it travels that distance.
//level.newcastle execDialog( "wontexplode" );
//Right. Now pop a grenade in each window, five, six and seven.
level.newcastle thread maps\killhouse_code::execDialog( "56and7" );
array_thread ( getEntArray( "gl_too_low", "targetname" ), maps\killhouse::gl_too_low_hint );
thread maps\killhouse::launcher_trigger_think( "launcher_target_1", getEnt( "launcher_damage_trigger1", "targetname" ) );
thread maps\killhouse::launcher_trigger_think( "launcher_target_2", getEnt( "launcher_damage_trigger2", "targetname" ) );
thread maps\killhouse::launcher_trigger_think( "launcher_target_3", getEnt( "launcher_damage_trigger3", "targetname" ) );
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_FIRE_YOUR_GRENADE_LAUNCHER" );
numRemaining = 0;
for ( index = 1; index < 4; index++ )
{
if ( flag( "launcher_target_" + index ) )
continue;
numRemaining++;
}
//level.marine5.lastNagTime = getTime();
while( numRemaining )
{
curRemaining = 0;
nextTarget = "";
if ( !flag( "launcher_target_1" ) )
{
curRemaining++;
nextTarget = "hittwo";
}
if ( !flag( "launcher_target_2" ) )
{
curRemaining++;
if ( nextTarget == "" )
nextTarget = "hitthree";
}
if ( !flag( "launcher_target_3" ) )
{
curRemaining++;
if ( nextTarget == "" )
nextTarget = "hitfour";
}
if ( !curRemaining )
break;
//level.player giveMaxAmmo( "m203_m4" );
if ( curRemaining != numRemaining )
{
//level.marine5.lastNagTime = getTime();
}
else
{
//level.marine5 nagPlayer( nextTarget, 8.0 );
}
numRemaining = curRemaining;
wait ( 0.05 );
}
level notify ( "launcherTraining_end" );
//maps\killhouse_code::setObjectiveState( "obj_demolitions", "done" );
wait ( 1.0 );
//level.marine5 execDialog( "oorah" );
wait ( 1.0 );
flag_clear ( "aa_launcher" );
thread c4_Training();
}
c4_Training()
{
level endon ( "PlayerSkipTheOptionalCourses" );
if( flag( "cargoshipTutoDone" ) )
return;
flag_set ( "aa_c4" );
level notify ( "explosivesTraining_begin" );
autosave_by_name( "c4_training" );
pickupTrigger = flag_trigger_init( "explosives_pickup", getEnt( "c4_pickup", "targetname" ) );
C4_models = getEntArray( pickupTrigger.target, "targetname" );
pickupTrigger setHintString (&"KILLHOUSE_C4_PICKUP");
pickupTrigger trigger_on();
for ( i = 0; i < C4_models.size; i++ )
C4_models[ i ] show();
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", pickupTrigger );
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_PICK_UP_THE_C4_EXPLOSIVE" );
//Come back around and pick up some C4 off the table.
level.newcastle thread maps\killhouse_code::execDialog( "c4offtable" );
//level.newcastle thread walk_to ( getnode ( "watch_c4_node", "script_noteworthy" ) );
level.newcastle setgoalnode ( getnode ( "watch_c4_node", "script_noteworthy" ) );
thread maps\killhouse_code::keyHint( "swap_explosives" );
while ( !flag( "explosives_pickup" ) )
wait ( 0.05 );
level.player playsound ( "detpack_pickup" );
for ( i = 0; i < C4_models.size; i++ )
C4_models[ i ] hide();
pickupTrigger trigger_off();
old_weapon = level.player GetCurrentWeapon ();
level.player giveWeapon("c4");
level.player SetWeaponAmmoClip( "c4", 1 );
level.player SetActionSlot( 2, "weapon" , "c4" );
thread scripts\killhouse\hint::C4_icon_hint();
RefreshHudAmmoCounter();
thread maps\killhouse::flag_when_c4_thrown();
wait .5;
if ( !(level.player getCurrentWeapon() == "c4") )
{
level.newcastle maps\killhouse_code::execDialog( "equipc4" ); //Equip the C4, Soap.
//thread keyHint( "equip_C4" );
level notify ( "c4_equiped" );
level.hintElem setText( &"KILLHOUSE_HINT_EQUIP_C4" );
RefreshHudAmmoCounter();
}
while ( !(level.player getCurrentWeapon() == "c4") )
{
wait ( 1.0 );
}
flag_set ( "c4_equiped" );
level.hintbackground destroy();
double_line = true;
maps\killhouse_code::add_hint_background( double_line );
level.hintElem setText( &"KILLHOUSE_HINT_HUD_CHANGES" );
RefreshHudAmmoCounter();
//thread hint( &"KILLHOUSE_HINT_HUD_CHANGES", 9999 );
//It seems my ex-wife was kind enough to donate her car to furthering your education Soap.
level.newcastle maps\killhouse_code::execDialog( "exwifecar" );
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", getEnt( "c4_target", "targetname" ) );
level notify ( "C4_the_car" );
if ( !flag ( "c4_thrown" ) )
level.newcastle maps\killhouse_code::execDialog( "throwc4car" ); //Throw some C4 on the car.
if ( ( !flag ( "near_car" ) ) && ( !flag ( "c4_thrown" ) ) )
{
//thread hint( &"KILLHOUSE_HINT_APPROACH_C4_THROW", 9999 );
level.hintbackground destroy();
maps\killhouse_code::add_hint_background();
level.hintElem setText( &"KILLHOUSE_HINT_APPROACH_C4_THROW" );
flag_wait ( "near_car" );
}
if ( !flag ( "c4_thrown" ) )
maps\killhouse_code::keyHint( "throw_C4" );
flag_wait ( "c4_thrown" );
wait .5;
//Sgt Newcastle - When planting C4 is your objective, you will see a glowing marker in the world that indicates where to plant it.
//thread add_dialogue_line( "newcastle", "When planting C4 is your objective, you will see a glowing marker in the world that indicates where to plant it." );
double_line = true;
thread maps\killhouse_code::hint( &"KILLHOUSE_C4_OBJECTIVE", 9999, double_line );
wait 4;
//Place the C4 on the indicated spot.
level.newcastle thread maps\killhouse_code::execDialog( "placec4" );
c4_target = getent( "c4_target", "targetname" );
c4_target maps\_c4::c4_location( undefined, undefined, undefined, c4_target.origin );
level thread do_in_order( ::waittill_msg, "c4_in_place", ::flag_set, "C4_planted" );
wait ( 1.0 );
maps\killhouse_code::setObjectiveString( "obj_demolitions", &"KILLHOUSE_PLANT_THE_C4_EXPLOSIVE" );
maps\killhouse_code::setObjectiveLocation( "obj_demolitions", c4_target );
thread maps\killhouse_code::keyhint( "plant_explosives", 9999, 1 );
flag_wait ( "C4_planted" );
c4_target thread maps\killhouse::force_detonation();
maps\killhouse_code::clear_hints();
// maps\killhouse_code::setObjectiveState( "obj_demolitions", "done" );
//level.newcastle execDialog( "morec4" ); //Go get some more C4 from the table.
//level.newcastle execDialog( "behindwall" ); //Now come over here behind the safety wall.
if( !flag( "car_destroyed" ) )
level.newcastle maps\killhouse_code::execDialog( "safedistance" ); //Now get to a safe distance from the explosives.
while ( ( distance( c4_target.origin, level.player.origin ) <= 256 ) && !flag( "car_destroyed" ) )
wait 0.05;
if( !flag( "car_destroyed" ) )
{
level.newcastle maps\killhouse_code::execDialog( "fireinhole" ); //Fire in the hole!
thread maps\killhouse_code::keyHint( "detonate_C4", 9999 );
}
flag_wait ( "car_destroyed" );
thread maps\killhouse::switch_in_two( old_weapon );
maps\killhouse_code::clear_hints();
if(AssetIsExisting(22, "IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING"))
objectiveText = &"IW3SP_MOD_LOC_KILLHOUSE_DEMOLITIONS_TRAINING";
else
objectiveText = &"KILLHOUSE_GO_OUTSIDE_AND_REPORT";
maps\killhouse_code::setObjectiveString( "obj_demolitions", objectiveText );
maps\killhouse_code::setObjectiveState( "obj_demolitions", "done" );
level.player_completed_demolitions_training = true;
thread C4_complete_dialog();
level notify ( "explosivesTraining_end" );
flag_clear ( "aa_c4" );
}
C4_complete_dialog()
{
level.newcastle maps\killhouse_code::execDialog( "chuckle" ); //< satisfied chuckling >
level.newcastle maps\killhouse_code::execDialog( "muchimproved" ); //Much improved.
//if ( !flag( "start_obstacle" ) )
level.newcastle maps\killhouse_code::execDialog( "passedeval" ); //All right Soap, you passed the weapons evaluation.
}
obstacle_Training()
{
level endon ( "PlayerSkipTheOptionalCourses" );
if( flag( "cargoshipTutoDone" ) )
return;
flag_set ( "aa_obstacle" );
level notify ( "obstacleTraining_start" );
// maps\killhouse_code::registerObjective( "obj_obstacle", &"KILLHOUSE_RUN_THE_OBSTACLE_COURSE", getEnt( "obstacleTraining_objective", "targetname" ) );
// maps\killhouse_code::setObjectiveState( "obj_obstacle", "current" );
//thread generic_compass_hint_reminder( "start_obstacle", 7 );
getEnt( "obstacle_course_start", "targetname" ) waittill ( "trigger" );
flag_set ( "start_obstacle" );
flag_trigger_init( "prone_entered", getEnt( "obstacleTraining_prone", "targetname" ) );
thread maps\killhouse_code::obstacleTraining_buddies();
thread maps\killhouse::obstacleTraining_dialog();
flag_wait( "start_course" );
maps\killhouse_code::setObjectiveLocation( "obj_obstacle", getEnt( "obj_course_end", "targetname" ) );
move_mac_triggers = getentarray( "move_mac", "targetname" );
array_thread( move_mac_triggers, maps\killhouse_code::move_mac );
getEnt( "obstacleTraining_mantle", "targetname" ) waittill ( "trigger" );
thread maps\killhouse_code::keyHint( "mantle", 5.0 );
flag_wait( "obstacleTraining_crouch" );
thread maps\killhouse_code::keyHint( "crouch" );
flag_wait( "obstacleTraining_mantle2" );
thread maps\killhouse_code::keyHint( "mantle", 5.0 );
flag_wait( "prone_entered" );
thread maps\killhouse_code::keyHint( "prone" );
getEnt( "obstacleTraining_Standup", "targetname" ) waittill ( "trigger" );
thread maps\killhouse_code::keyHint( "stand", 5.0 );
maps\killhouse_code::clear_hints_on_stand();
wait .1;
//player must sprint
if ( level.xenon )// ghetto but PS3 requires "Press X" and 360 requires "Click X"
maps\killhouse_code::keyHint( "sprint" );
else
maps\killhouse_code::keyHint( "sprint_pc" );
flag_set ( "player_sprinted" );
if( !flag( "obstacle_course_end" ) )
thread maps\killhouse_code::second_sprint_hint();
flag_wait( "obstacle_course_end" );
level notify ( "kill_sprint_hint" );
maps\killhouse_code::clear_hints();
maps\killhouse_code::setObjectiveState( "obj_obstacle", "done" );
level.player_completed_obstacle_course_training = true;
flag_clear ( "aa_obstacle" );
}
player_skipped_the_optional_objectives()
{
while( true )
{
if(flag( "open_ship_hanger" ) )
{
if(!level.player_completed_demolitions_training)
maps\killhouse_code::setObjectiveState( "obj_demolitions", "empty" );
if(!level.player_completed_obstacle_course_training)
{
level.player_skipped_obstacle_course = true;
maps\killhouse_code::setObjectiveState( "obj_obstacle", "empty" );
}
flag_set( "cargoshipTutoDone" );
level notify("in_pit_with_frags");
level notify("PlayerSkipTheOptionalCourses");
level notify("obstacleTraining_end"); //for skip the Mac dialog
break;
}
wait (0.05);
}
}