5 #using scripts\codescripts\struct;
7 #using scripts\shared\ai_shared;
8 #using scripts\shared\animation_shared;
9 #using scripts\shared\array_shared;
10 #using scripts\shared\callbacks_shared;
11 #using scripts\shared\clientfield_shared;
12 #using scripts\shared\flag_shared;
13 #using scripts\shared\flagsys_shared;
14 #using scripts\shared\laststand_shared;
15 #using scripts\shared\player_shared;
16 #using scripts\shared\scene_debug_shared;
17 #using scripts\shared\scriptbundle_shared;
18 #using scripts\shared\spawner_shared;
19 #using scripts\shared\system_shared;
20 #using scripts\shared\trigger_shared;
21 #using scripts\shared\util_shared;
22 #using scripts\shared\lui_shared;
24 #insert scripts\shared\shared.gsh;
25 #insert scripts\shared\version.gsh;
27 #precache( "lui_menu", "CPSkipSceneMenu" );
28 #precache( "lui_menu_data", "showSkipButton" );
29 #precache( "lui_menu_data", "hostIsSkipping" );
30 #precache( "lui_menu_data", "sceneSkipEndTime" );
34 #using_animtree( "all_player" );
37 if ( !
IS_EQUAL( ent.animtree,
"all_player" ) )
39 ent UseAnimTree( #animtree );
40 ent.animtree =
"all_player";
44 #using_animtree( "generic" );
47 if ( !
IS_EQUAL( ent.animtree,
"generic" ) )
49 ent UseAnimTree( #animtree );
50 ent.animtree =
"generic";
54 #define TEST_SCENES array()
56 #define NEW_STATE(__state) flagsys::clear( "ready" );\
57 flagsys::clear( "done" );\
58 flagsys::clear( "main_done" );\
59 _str_state = __state;\
60 self notify( "new_state" );\
61 self endon( "new_state" );\
62 self notify(__state);\
66 #define DAMAGE_STR(dmg) ( !isdefined( dmg ) || dmg == "none" ? "" : dmg )
70 #define WEAP_FIRST_RAISE 31
72 #define DEFAULT_ACTOR_WEAPON GetWeapon( "ar_standard" )
125 if (
IS_TRUE(
_s.firstframe ) || b_force_first_frame )
127 if ( !
error( !isdefined(
_s.mainanim ),
"No animation defined for first frame." ) )
135 else if ( isdefined(
_s.initanim ) )
144 if ( isdefined(
_s.initanimloop ) )
153 else if ( isdefined(
_s.initanimloop ) )
178 _spawn( undefined,
false,
false );
189 if( !isdefined(
_s.MainBlend ) ||
_s.MainBlend == 0 )
193 else if(
_s.MainBlend == 0.001)
205 if ( Distance2DSquared(
_e.origin,
_e.scene_orig_origin ) > 4 )
207 _e DisconnectPaths( 2,
false );
213 if ( !isdefined(
_s.EndBlend ) ||
_s.EndBlend == 0 )
218 if ( isdefined(
_s.endanim ) )
227 if ( isdefined(
_s.endanimloop ) )
236 else if ( isdefined(
_s.endanimloop ) )
249 function stop( b_clear =
false, b_dont_clear_anim =
false, b_finished =
false )
251 if ( IsAlive(
_e ) )
255 foreach ( player
in level.players )
257 player StopAnimScripted( .2 );
260 else if ( !
IS_TRUE(
_s.DieWhenFinished ) || !b_finished )
262 if ( !b_dont_clear_anim || IsPlayer(
_e ) )
264 _e StopAnimScripted( .2 );
269 finish( b_clear, !b_finished );
279 if ( isdefined( a_scene_ents[
_s.aligntarget ] ) )
281 e_align = a_scene_ents[
_s.aligntarget ];
288 if ( !isdefined( e_align ) )
290 str_msg =
"Align target '" +
STR(
_s.aligntarget ) +
"' doesn't exist for scene object.";
294 error( GetDvarInt(
"scene_align_errors", 1 ), str_msg );
299 if ( !isdefined( e_align ) )
301 e_align = [[
scene()]]->get_align_ent();
309 if ( isdefined(
_s.AlignTargetTag ) )
311 return _s.AlignTargetTag;
315 if ( isdefined(
_o_bundle._e_root.e_scene_link ) )
337 self endon(
"play" );
338 self endon(
"done" );
342 if ( str_damage_types !=
"" )
346 while ( !b_run_scene )
348 _e waittill(
"damage", n_amount, e_attacker, v_org, v_dir, str_mod );
352 case "MOD_PISTOL_BULLET":
353 case "MOD_RIFLE_BULLET":
355 if ( IsSubStr( str_damage_types,
"bullet" ) )
363 case "MOD_GRENADE_SPLASH":
364 case "MOD_EXPLOSIVE":
366 if ( IsSubStr( str_damage_types,
"explosive" ) )
373 case "MOD_PROJECTILE":
374 case "MOD_PROJECTILE_SPLASH":
376 if ( IsSubStr( str_damage_types,
"projectile" ) )
385 if ( IsSubStr( str_damage_types,
"melee" ) )
394 if ( IsSubStr( str_damage_types,
"all" ) )
401 thread [[
scene()]]->play();
415 if ( isdefined(
_s.name ) )
424 level.scene_object_id++;
428 if ( isdefined(
_s.name ) )
450 function _spawn( e_spawner, b_hide =
true, b_set_ready_when_spawned =
true )
452 if ( isdefined( e_spawner ) )
464 if ( IsPlayer(
_e ) )
470 n_player = GetDvarInt(
"scene_debug_player", 0 );
475 if ( n_player ==
_s.player )
477 _player = level.activeplayers[ 0 ];
501 else if ( !isdefined(
_e ) || IsSpawner(
_e ) )
503 b_allows_multiple = [[
scene()]]->allows_multiple();
506 error( b_allows_multiple &&
IS_TRUE(
_s.nospawn ),
"Scene that allow multiple instances must be allowed to spawn (uncheck 'Do Not Spawn')." ) )
511 if ( !IsSpawner(
_e ) )
515 if ( !isdefined( e ) && isdefined(
_s.name ) )
538 if ( isdefined( e_spawned ) )
545 e_spawned DontInterpolate();
549 if ( !isdefined( e_spawned.targetname ) )
551 e_spawned.targetname =
_s.name;
560 _e = ( isdefined( e_spawned ) ? e_spawned : e );
571 if ( isdefined(
_e ) && !IsSpawner(
_e ) )
573 [[
self]]->_prepare();
575 if ( b_set_ready_when_spawned )
597 _e.scene_orig_origin =
_e.origin;
609 _e endon(
"death" );
611 if ( !
IS_TRUE(
_s.IgnoreAliveCheck ) &&
error( IsAI(
_e ) && !IsAlive(
_e ),
"Trying to play a scene on a dead AI." ) )
617 if ( isdefined(
_e._o_scene ) )
619 foreach ( obj
in _e._o_scene._a_objects )
621 if ( obj._e ===
_e )
629 if ( !IsAI(
_e ) && !IsPlayer(
_e ) )
646 if ( !isdefined(
_e._scene_old_takedamage ) )
648 _e._scene_old_takedamage =
_e.takedamage;
651 if ( IsSentient(
_e ) )
664 _e SetModel(
_s.model );
669 _e.health = (
_e.health > 0 ?
_e.health : 1 );
671 if (
_s.type ===
"actor" )
690 _e DisconnectPaths( 2,
false );
704 if ( IsPlayer(
_e ) )
715 _e._scene_old_gun_removed =
true;
722 _e.anim_debug_name =
_s.name;
727 _e.finished_scene = undefined;
739 if ( IsActor(
_e ) )
751 if ( !IsPlayer(
_e ) )
753 _e SetHighDetail(
true );
762 if (
IS_TRUE( player.play_scene_transition_effect ) )
764 player.play_scene_transition_effect = undefined;
771 [[
_o_bundle]]->trigger_scene_sequence_started(
self, player );
776 player SetHighDetail(
true );
782 player CloseMenu(
"ChooseClass_InGame" );
783 player notify(
"menuresponse",
"ChooseClass_InGame",
"cancel" );
793 if( GetDvarInt(
"scene_hide_player") > 0 )
798 player.current_player_scene =
_o_bundle._str_name;
800 if ( !
IS_TRUE( player.magic_bullet_shield ) )
805 player.scene_takedamage =
IS_TRUE(
_s.takedamage );
807 if ( isdefined( player.hijacked_vehicle_entity ) )
809 player.hijacked_vehicle_entity Delete();
811 else if ( player IsInVehicle() )
813 vh_occupied = player GetVehicleOccupied();
814 n_seat = vh_occupied GetOccupantSeat( player );
816 vh_occupied UseVehicle( player, n_seat );
828 player.player_anim_look_enabled = !
IS_TRUE(
_s.LockView );
829 player.player_anim_clamp_right =
VAL(
_s.viewClampRight, 0 );
830 player.player_anim_clamp_left =
VAL(
_s.viewClampLeft, 0 );
831 player.player_anim_clamp_top =
VAL(
_s.viewClampBottom, 0 );
832 player.player_anim_clamp_bottom =
VAL(
_s.viewClampBottom, 0 );
844 if ( player.sessionstate ===
"spectator" )
846 player thread [[ level.spawnPlayer ]]();
850 player notify(
"auto_revive" );
856 if (
_s.PlayerStance ===
"crouch" )
858 player AllowStand(
false );
859 player AllowCrouch(
true );
860 player AllowProne(
false );
862 else if (
_s.PlayerStance ===
"prone" )
864 player AllowStand(
false );
865 player AllowCrouch(
false );
866 player AllowProne(
true );
870 player AllowStand(
true );
871 player AllowCrouch(
false );
872 player AllowProne(
false );
876 function finish( b_clear =
false, b_canceled =
false )
881 self notify(
"new_state" );
894 if ( isdefined(
_e._scene_old_takedamage ) )
896 _e.takedamage =
_e._scene_old_takedamage;
901 _e.allowdeath =
true;
904 _e._scene_old_takedamage = undefined;
905 _e._scene_old_gun_removed = undefined;
911 foreach ( player
in level.players )
928 if ( IsPlayer(
_e ) )
938 if ( !IsPlayer(
_e ) )
940 if ( isdefined(
_e ) )
942 _e SetHighDetail(
false );
950 if ( isdefined(
_e ) )
960 _e.skipdeath =
true;
961 _e.allowdeath =
true;
962 _e.skipscenedeath =
true;
968 if ( IsActor(
_e ) && IsAlive(
_e ) )
972 _e PathMode(
"move delayed",
true, RandomFloatRange( 2, 3 ) );
976 _e PathMode(
"move allowed" );
992 player.scene_set_visible_time = level.time;
993 player SetVisibleToAll();
997 if ( !
IS_TRUE( player.magic_bullet_shield ) )
999 player.allowdeath =
true;
1002 player.current_player_scene = undefined;
1004 player.scene_takedamage = undefined;
1005 player._scene_old_gun_removed = undefined;
1017 [[
_o_bundle]]->init_scene_sequence_started(
false);
1028 if ( n_camera_tween_out > 0 )
1030 player StartCameraTween( n_camera_tween_out );
1038 player AllowStand(
true );
1039 player AllowCrouch(
true );
1040 player AllowProne(
true );
1042 player SetHighDetail(
false );
1047 if ( !isdefined(
_e.script_objective ) )
1049 if ( isdefined(
_o_bundle._e_root.script_objective ) )
1053 else if ( isdefined(
_o_bundle._s.script_objective ) )
1062 self endon(
"cleanup" );
1063 _e waittill(
"death" );
1077 ent StopAnimScripted();
1079 if ( IsActor( ent ) )
1087 ent.skipdeath =
true;
1093 ent.skipdeath =
true;
1100 if ( isdefined(
_e ) && isdefined(
_e.current_scene ) )
1109 _e.current_scene = undefined;
1110 _e._o_scene = undefined;
1120 _e.animname = undefined;
1125 self notify(
"death" );
1126 self endon(
"new_state" );
1130 self notify(
"cleanup" );
1147 if ( !isdefined(
_e.script_forcecolor ) )
1151 if ( isdefined(
_e.scenegoal ) )
1153 _e SetGoal(
_e.scenegoal );
1154 _e.scenegoal = undefined;
1158 _e SetGoal(
_e.origin );
1169 self endon(
"cleanup" );
1170 _e endon(
"death" );
1171 _e waittill(
"goal_changed" );
1175 function _play_anim( animation, n_delay_min = 0, n_delay_max = 0, n_rate = 1, n_blend = 0.2, n_time = 0 )
1184 n_time = [[
_o_bundle ]]->get_anim_relative_start_time( animation, n_time );
1187 n_delay = n_delay_min;
1188 if ( n_delay_max > n_delay_min )
1190 n_delay = RandomFloatRange( n_delay_min, n_delay_max );
1193 do_reach = ( ( n_time == 0 ) && (
IS_TRUE(
_s.doreach ) && ( !
IS_TRUE(
_o_bundle._testing ) || GetDvarInt(
"scene_test_with_reach", 0 ) ) ) );
1195 _spawn( undefined, !do_reach, !do_reach );
1197 if ( !IsActor(
_e ) )
1212 [[
scene()]]->wait_till_scene_ready(
self );
1225 else if ( n_rate > 0 )
1227 [[
scene()]]->wait_till_scene_ready();
1229 else if ( isdefined(
_s.aligntarget ) )
1234 if ( o_obj._str_name ==
_s.aligntarget )
1247 if ( align == level )
1249 align = ( 0, 0, 0 );
1267 _e DontInterpolate();
1277 if ( n_camera_tween > 0 )
1279 _e StartCameraTween( n_camera_tween );
1286 n_blend_out = ( IsAI(
_e ) ? .2 : 0 );
1298 self.current_playing_anim = animation;
1306 _e animation::play( animation, align, tag, n_rate, n_blend, n_blend_out, n_lerp, n_time,
_s.ShowWeaponInFirstPerson );
1308 if ( !isdefined(
_e ) || !
_e IsPlayingAnimScripted() )
1310 self.current_playing_anim = undefined;
1316 /#
log(
"No entity for animation '" + animation +
"' so not playing it." ); #/
1332 else if ( isdefined( e ) )
1334 if ( IsSpawner( e ) )
1336 if ( !
error( e.count < 1,
"Trying to spawn AI for scene with spawner count < 1" ) )
1338 return e
spawner::spawn(
true, undefined, undefined, undefined, b_disable_throttle );
1342 else if ( isdefined(
_s.model ) )
1344 new_model = undefined;
1361 self.player_animation = animation;
1362 self.player_animation_notify = animation +
"_notify";
1363 self.player_animation_length = GetAnimLength( animation );
1364 self.player_align = align;
1365 self.player_tag = tag;
1366 self.player_rate = n_rate;
1367 self.player_time_frac = n_time;
1368 self.player_start_time = GetTime();
1372 foreach ( player
in level.players )
1374 if ( player
flagsys::get(
"loadout_given" ) && ( player.sessionstate !==
"spectator" ) )
1378 else if(
IS_TRUE(player.initialLoadoutGiven) )
1389 a_players = ArrayCopy( level.activeplayers );
1391 foreach ( player
in a_players )
1393 if ( isdefined( player ) && player
flagsys::get(
self.player_animation_notify ) )
1401 while ( b_playing );
1405 thread [[
_o_bundle]]->_call_state_funcs(
"players_done" );
1410 player endon(
"death" );
1420 player
flagsys::set(
self.player_animation_notify +
"_skip_init_clear" );
1425 if ( isdefined( player GetLinkedEnt() ) )
1432 if ( ( player !=
_player ) || GetDvarInt(
"scr_player1_postfx", 0 ) )
1434 if ( !isdefined( player.screen_fade_menus ) )
1436 if ( !
IS_TRUE( level.chyron_text_active ) )
1438 if ( !
IS_TRUE( player.fullscreen_black_active ) )
1440 player.play_scene_transition_effect =
true;
1448 player SetInvisibleToAll();
1452 n_time_passed = ( GetTime() -
self.player_start_time ) / 1000;
1453 n_start_time =
self.player_time_frac *
self.player_animation_length;
1454 n_time_left =
self.player_animation_length - n_time_passed - n_start_time;
1456 n_time_frac = 1 - ( n_time_left /
self.player_animation_length );
1458 if ( isdefined(
_e ) && ( player !=
_e ) )
1462 player DontInterpolate();
1463 player SetOrigin(
_e.origin );
1464 player SetPlayerAngles(
_e GetPlayerAngles() );
1472 if ( n_camera_tween > 0 )
1474 player StartCameraTween( n_camera_tween );
1479 if ( n_time_frac < 1 )
1481 str_animation =
self.player_animation;
1486 if ( isdefined(
_o_bundle._s.s_female_bundle ) )
1493 if ( isdefined(
_o_bundle._s.s_male_bundle ) )
1499 if ( isdefined( s_bundle ) )
1501 foreach ( s_object
in s_bundle.objects )
1503 if ( isdefined( s_object ) &&
IS_EQUAL( s_object.type,
"player" ) )
1505 str_animation = s_object.mainanim;
1511 player_num = player GetEntityNumber();
1513 if(!isdefined(
self.current_playing_anim))
1515 self.current_playing_anim = [];
1518 self.current_playing_anim[player_num] = str_animation;
1528 player
animation::play( str_animation,
self.player_align,
self.player_tag,
self.player_rate, 0, 0, n_lerp, n_time_frac,
_s.ShowWeaponInFirstPerson );
1530 if( !(player
flagsys::get(
self.player_animation_notify +
"_skip_init_clear" )) )
1536 player
flagsys::clear(
self.player_animation_notify +
"_skip_init_clear" );
1539 if ( !player IsPlayingAnimScripted() )
1541 self.current_playing_anim[player_num] = undefined;
1549 v_origin = align.origin;
1550 v_angles = align.angles;
1553 if ( isdefined( tag ) )
1555 v_origin = align GetTagOrigin( tag );
1556 v_angles = align GetTagAngles( tag );
1559 v_start = GetStartOrigin( v_origin, v_angles,
_s.mainanim );
1560 n_dist_sq = DistanceSquared( e_player.origin, v_start );
1562 if ( ( n_dist_sq > 500 * 500 || isdefined( e_player.hijacked_vehicle_entity ) ) && ( !
IS_TRUE( e_player.force_short_scene_transition_effect ) ) )
1577 e_player endon(
"disconnect" );
1579 e_player.ignoreme =
true;
1580 e_player.b_teleport_invulnerability =
true;
1584 e_player.ignoreme =
false;
1585 e_player.b_teleport_invulnerability = undefined;
1590 if ( IsPlayer(
_e ) )
1592 return ( isdefined(
_s.LerpTime ) ?
_s.LerpTime : 0 );
1596 return ( isdefined(
_s.EntityLerpTime ) ?
_s.EntityLerpTime : 0 );
1602 return ( isdefined(
_s.CameraTween ) ?
_s.CameraTween : 0 );
1607 return ( isdefined(
_s.CameraTweenOut ) ?
_s.CameraTweenOut : 0 );
1612 self endon(
"done" );
1619 e_linked = player GetLinkedEnt();
1620 if ( isdefined( e_linked ) && ( e_linked ==
_e ) )
1626 player PlayerLinkToAbsolute(
_e,
"tag_player" );
1630 player LerpViewAngleClamp( .2, .1, .1,
VAL(
_s.viewclampright, 0),
VAL(
_s.viewclampleft, 0),
VAL(
_s.viewclamptop, 0),
VAL(
_s.viewclampbottom, 0) );
1636 player DisableUsability();
1637 player DisableOffhandWeapons();
1639 player DisableWeapons();
1643 if (
_s.cameratween > 0 )
1648 player notify(
"scene_link" );
1653 player PlayerLinkToAbsolute(
_e,
"tag_player" );
1657 player PlayerLinkToDelta(
_e,
"tag_player", 1,
VAL(
_s.viewclampright, 0),
VAL(
_s.viewclampleft, 0),
VAL(
_s.viewclamptop, 0),
VAL(
_s.viewclampbottom, 0), 1, 1 );
1661 wait (
_s.cameratween > .2 ?
_s.cameratween : .2 );
1676 player EnableUsability();
1677 player EnableOffhandWeapons();
1678 player EnableWeapons();
1690 return ( isdefined(
_e ) && (
_e.health > 0 ||
_s.IgnoreAliveCheck ===
true ) );
1695 return ( IsDefined(
_s.player ) );
1700 return _s.type ===
"player model";
1710 return ( isdefined(
_e ) && isdefined(
_e.current_scene ) && (
_e.current_scene !=
_o_bundle._str_name ) );
1717 if( !AnimHasImportantNotifies(animation) )
1719 if ( !IsSpawner(
_e ) )
1721 b_allows_multiple = [[
scene()]]->allows_multiple();
1741 if( isdefined(
_s.initanim) && AnimHasImportantNotifies(
_s.initanim) )
1746 if( isdefined(
_s.mainanim) && AnimHasImportantNotifies(
_s.mainanim) )
1751 if( isdefined(
_s.endanim) && AnimHasImportantNotifies(
_s.endanim) )
1756 if ( !IsSpawner(
_e ) )
1758 b_allows_multiple = [[
scene()]]->allows_multiple();
1775 if(!isdefined(anim_name))
1778 if(!isdefined(entity))
1781 if(!( entity IsPlayingAnimScripted()))
1794 if(!isdefined(anim_name))
1797 if(!isdefined(entity))
1801 <br/>ToDo :
change this to check on the anim_name
1802 if(!( entity IsPlayingAnimScripted()))
1813 entity SetAnimTimebyName(anim_name, 1);
1816 entity stopsounds();
1821 if(isdefined(
self.current_playing_anim))
1825 foreach ( player
in level.players )
1843 if(isdefined(
self.current_playing_anim))
1847 foreach ( player
in level.players )
1861 if(isdefined(b_wait_one_frame))
1883 class cScene : cScriptBundleBase
1908 if( isdefined( s_scenedef.streamerhint ) && s_scenedef.streamerhint !=
"" && !
is_skipping_scene())
1917 if ( !
error(
a_ents.size >
_s.objects.size,
"Trying to use more entities than scene supports." ) )
1926 foreach ( s_obj
in a_objs )
1943 DEFAULT( level.scene_sync_list, [] );
1950 if ( isdefined(level.scene_sync_list) && isdefined( level.scene_sync_list[
_n_request_time ] ) )
1969 foreach ( s_obj
in _s.objects )
1971 if (
_s.vmtype ==
"server" || s_obj.vmtype ==
"server" )
1973 if ( isdefined( s_obj.name ) || isdefined( s_obj.model ) || isdefined( s_obj.initanim ) || isdefined( s_obj.mainanim ) )
1987 self notify(
"new_state" );
1988 self endon(
"new_state" );
2001 thread [[o_obj]]->initialize();
2029 self endon(
"new_state" );
2037 switch ( str_state )
2052 switch ( str_state )
2088 if ( !
error( !isdefined( obj ),
"No scene object to assign entity too. You might have passed in more than the scene supports." ) )
2104 foreach ( str_name, e_ent
in ArrayCopy(
a_ents ) )
2106 foreach ( i, o_obj
in ArrayCopy(
a_objects ) )
2108 if ( isdefined( o_obj._s.name ) && (
STR( o_obj._s.name ) == ToLower(
STR( str_name ) ) ) )
2112 ArrayRemoveIndex(
a_ents, str_name,
true );
2124 error( IsString( i ),
"No scene object with name '" + i +
"'." );
2138 if ( a_objects_of_type.size )
2140 foreach ( ent
in ArrayCopy(
a_ents ) )
2142 if ( isdefined( func_test ) && [[ func_test ]]( ent ) )
2144 obj = array::pop_front( a_objects_of_type );
2145 if ( isdefined( obj ) )
2149 ArrayRemoveValue(
a_ents, ent,
true );
2166 return ( IsPlayer( ent ) );
2171 return ( IsActor( ent ) || IsActorSpawner( ent ) );
2176 return ( IsVehicle( ent ) || IsVehicleSpawner( ent ) );
2184 if ( obj._s.type == str_type )
2194 if(!isdefined(
self.n_start_time) ||
self.n_start_time == 0 || !isdefined(
self.longest_anim_length) ||
self.longest_anim_length == 0)
2197 anim_length = GetAnimLength(animation);
2200 n_time =
self.longest_anim_length / anim_length * n_time;
2218 max_anim_length = -1;
2219 player_anim_length = -1;
2223 if(isdefined(obj._s.MainAnim))
2225 anim_length = GetAnimLength( obj._s.MainAnim );
2228 if (
IS_EQUAL( obj._s.type,
"player" ) )
2230 player_anim_length = anim_length;
2233 if(anim_length > max_anim_length)
2235 max_anim_length = anim_length;
2239 return player_anim_length < max_anim_length;
2242 function play( str_state =
"play",
a_ents, b_testing =
false, str_mode =
"" )
2244 self notify(
"new_state" );
2245 self endon(
"new_state" );
2247 if(str_mode ==
"skip_scene")
2251 else if(str_mode ==
"skip_scene_player")
2253 self.b_player_scene =
true;
2268 level.scene_should_spectate_on_hot_join =
true;
2273 if ( StrStartsWith(
_str_mode,
"capture" ) )
2281 thread [[o_obj]]->initialize(
true );
2289 capture_player = level.players[ 0 ];
2293 if ( !isdefined( capture_player.e_capture_link ) )
2296 capture_player SetOrigin( v_origin );
2297 capture_player Linkto( level.players[ 0 ].e_capture_link );
2301 capture_player.e_capture_link.origin = v_origin;
2313 self.n_start_time = 0;
2314 if ( IsSubStr( str_mode,
"skipto" ) )
2316 args = StrTok( str_mode,
":" );
2317 if ( isdefined( args[1] ) )
2319 self.n_start_time = Float( args[1] );
2324 self.n_start_time = .95;
2327 self.longest_anim_length = 0;
2331 if ( isdefined( s_obj._s.MainAnim ) )
2333 anim_length = GetAnimLength( s_obj._s.MainAnim );
2335 if ( anim_length >
self.longest_anim_length )
2337 self.longest_anim_length = anim_length;
2352 thread [[o_obj]]->play();
2359 if (
self.n_start_time == 0 )
2366 streamerRequest(
"play",
_s.streamerhint );
2378 if ( IsString(
_s.cameraswitcher ) )
2382 else if ( IsString(
_s.extraCamSwitcher1 ) )
2386 else if ( IsString(
_s.extraCamSwitcher2 ) )
2390 else if ( IsString(
_s.extraCamSwitcher3 ) )
2394 else if ( IsString(
_s.extraCamSwitcher4 ) )
2401 thread [[o_obj]]->stop(
false,
IS_TRUE( o_obj._s.DontClamp ),
true );
2409 level.scene_should_spectate_on_hot_join = undefined;
2414 array::flagsys_wait_any_flag(
_a_objects,
"done",
"main_done" );
2425 level.scene_should_spectate_on_hot_join = undefined;
2443 thread
play( str_state, undefined, b_testing, str_mode );
2461 else if(isdefined(level.linked_scenes))
2463 ArrayRemoveValue(level.linked_scenes,
_s.name );
2473 thread
stop(
false,
true );
2479 thread
stop(
false,
true );
2485 n_len = ( n_time - ( n_time * n_start_time ) );
2486 n_len = n_len / .05;
2488 n_len_int = Int( n_len );
2489 if ( n_len_int != n_len )
2491 n_len = Floor( n_len );
2494 n_server_length = n_len * .05;
2496 wait n_server_length;
2501 self endon(
"skip_camera_anims" );
2503 if ( IsCamAnimLooping( str_cam ) )
2505 level waittill(
"forever" );
2515 level endon(
"stop_camera_anims" );
2520 v_origin = ( isdefined( e_align.origin ) ? e_align.origin : ( 0, 0, 0 ) );
2521 v_angles = ( isdefined( e_align.angles ) ? e_align.angles : ( 0, 0, 0 ) );
2529 if( isdefined(o_obj) && [[o_obj]]->is_player() && ![[o_obj]]->is_shared_player() )
2535 if(xcam_players.size == 0)
2537 xcam_players = level.players;
2541 self.a_xcam_players = xcam_players;
2546 xcam_players = level.players;
2549 if ( IsString(
_s.cameraswitcher ) )
2556 self.camera_v_origin = v_origin;
2557 self.camera_v_angles = v_angles;
2558 self.camera_start_time = GetTime();
2563 if ( IsString(
_s.extraCamSwitcher1 ) )
2568 if ( IsString(
_s.extraCamSwitcher2 ) )
2573 if ( IsString(
_s.extraCamSwitcher3 ) )
2578 if ( IsString(
_s.extraCamSwitcher4 ) )
2591 player notify(
"new_camera_switcher" );
2592 player DontInterpolate();
2595 self.played_camera_anims =
true;
2597 n_start_time =
self.camera_start_time;
2599 if(!isdefined(
_s.cameraSwitcherGraphicContents) || IsMature( player ))
2602 <br/>ToDo - Enable once the
new exe populated (8/14/2015)
2603 CamAnimScripted( player,
_s.cameraswitcher, n_start_time, v_origin, v_angles );
2609 <br/>ToDo - Enable once the
new exe populated (8/14/2015)
2610 CamAnimScripted( player,
_s.cameraSwitcherGraphicContents, n_start_time, v_origin, v_angles );
2617 level endon(
"stop_camera_anims" );
2628 self.played_camera_anims =
true;
2629 ExtraCamAnimScripted( player, n_index, str_camera_anim, GetTime(), v_origin, v_angles );
2634 if(!
IS_TRUE(
self.played_camera_anims))
2639 level notify(
"stop_camera_anims" );
2643 if(isdefined(
self.a_xcam_players))
2645 xcam_players =
self.a_xcam_players;
2649 xcam_players = GetPlayers();
2652 foreach ( player
in xcam_players )
2654 if ( isdefined( player ) )
2665 player endon(
"disconnect" );
2666 if ( IsString(
_s.cameraswitcher ) )
2668 player endon(
"new_camera_switcher" );
2670 player DontInterpolate();
2671 EndCamAnimScripted( player );
2682 if ( IsString(
_s.extraCamSwitcher1 ) )
2684 EndExtraCamAnimScripted( player, 0 );
2687 if ( IsString(
_s.extraCamSwitcher2 ) )
2689 EndExtraCamAnimScripted( player, 1 );
2692 if ( IsString(
_s.extraCamSwitcher3 ) )
2694 EndExtraCamAnimScripted( player, 2 );
2697 if ( IsString(
_s.extraCamSwitcher4 ) )
2699 EndExtraCamAnimScripted( player, 3 );
2713 if(
_s.name ==
"cin_ram_02_04_interview_part04" )
2723 return (
IS_TRUE(
self.b_player_scene) ||
self.
_str_mode ==
"skip_scene_player") && !array::contains(level.linked_scenes,
_s.name);
2728 return isdefined(
_s.nextscenebundle);
2733 b_run_next_scene =
false;
2735 if ( isdefined(
_s.nextscenebundle ) )
2737 self waittill(
"stopped", b_finished );
2748 if (
_s.scenetype ==
"fxanim" &&
IS_EQUAL(
_s.nextscenemode,
"init" ) )
2750 if ( !
error( !
has_init_state(),
"Scene can't init next scene '" +
_s.nextscenebundle +
"' because it doesn't have an init state." ) )
2777 b_run_next_scene =
true;
2801 else if(isdefined(level.linked_scenes))
2803 ArrayRemoveValue(level.linked_scenes,
_s.name );
2812 if( IsString(
_s._endStreamerHint ) )
2814 if( GetDvarInt(
"scene_hide_player") > 0 )
2816 foreach(player
in level.players)
2822 streamerRequest(
"clear",
_s._endStreamerHint );
2826 function stop( b_clear =
false, b_finished =
false )
2848 self notify(
"new_state" );
2849 self notify(
"death" );
2856 self.scene_stopping =
true;
2862 if ( isdefined( o_obj ) && ![[ o_obj ]]->in_a_different_scene() )
2864 thread [[o_obj]]->stop( b_clear );
2871 self.scene_stopped =
true;
2872 self notify(
"stopped", b_finished );
2878 if ( level.active_scenes[
_str_name ].size == 0 )
2880 level.active_scenes[
_str_name ] = undefined;
2885 ArrayRemoveValue(
_e_root.scenes,
self );
2899 level.scene_should_spectate_on_hot_join = undefined;
2911 o_obj._o_bundle = undefined;
2917 b_has_init_state =
false;
2923 b_has_init_state =
true;
2928 return b_has_init_state;
2933 self endon(
"stopped" );
2937 if ( str_state ==
"play" )
2953 switch ( args.size )
2956 _e_root thread [[ func ]](
a_ents, args[0], args[1], args[2], args[3], args[4], args[5] );
2959 _e_root thread [[ func ]](
a_ents, args[0], args[1], args[2], args[3], args[4] );
2962 _e_root thread [[ func ]](
a_ents, args[0], args[1], args[2], args[3] );
2976 default: AssertMsg(
"Too many args passed to scene func." );
2987 ent = [[o_obj]]->get_ent();
2989 if ( isdefined( o_obj._s.name ) )
2991 a_ents[ o_obj._s.name ] = ent;
3011 if ( isdefined(
_s.aligntarget ) )
3015 if ( isdefined( e_gdt_align ) )
3017 e_align = e_gdt_align;
3020 if ( !isdefined( e_gdt_align ) )
3022 str_msg =
"Align target '" +
STR(
_s.aligntarget ) +
"' doesn't exist for scene.";
3026 error( GetDvarInt(
"scene_align_errors", 1 ), str_msg );
3030 else if ( isdefined(
_e_root.e_scene_link ) )
3052 if ( isdefined( o_exclude ) )
3065 if ( !b_ignore_streamer )
3067 if ( isdefined( level.wait_for_streamer_hint_scenes ) )
3069 if ( IsInArray( level.wait_for_streamer_hint_scenes,
_s.name ) )
3085 function wait_till_objects_ready( &
array )
3091 foreach ( ent
in array )
3119 if ( obj._is_valid )
3144 if ( o_scene_object._is_valid && [[o_scene_object]]->is_shared_player())
3146 b_shared_player =
true;
3150 if(!isdefined(b_shared_player))
3152 self notify(
"scene_skip_completed");
3181 b_skip_fading =
false;
3185 foreach(player
in level.players)
3187 player FreezeControls(
true );
3190 level.suspend_scene_skip_until_fade =
true;
3193 level.suspend_scene_skip_until_fade = undefined;
3196 SetPauseWorld(
false );
3199 while(
IS_TRUE(level.suspend_scene_skip_until_fade))
3205 if(isdefined(
_s.nextscenebundle ))
3207 bNextSceneExist =
true;
3211 bNextSceneExist =
false;
3222 scene_skip_timeout = GetTime() + 4000;
3224 while( !
IS_TRUE(
self.scene_stopped) && GetTime() < scene_skip_timeout )
3230 self notify(
"scene_skip_completed");
3232 if(!bNextSceneExist)
3236 if(isdefined(level.linked_scenes))
3238 linked_scenes_timeout = GetTime() + 4000;
3239 while(level.linked_scenes.size > 0 && GetTime() < linked_scenes_timeout)
3247 else if(
IS_TRUE(
self.skipping_scene))
3249 self.skipping_scene = undefined;
3251 if(isdefined(level.linked_scenes))
3254 ArrayRemoveValue(level.linked_scenes,
_s.name );
3264 foreach(player
in level.players)
3266 player stopsounds();
3275 if(isdefined(level.player_skipping_scene))
3278 foreach(player
in level.players)
3281 player FreezeControls(
false );
3284 player stopsounds();
3287 self.b_player_scene = undefined;
3288 self.skipping_scene = undefined;
3289 level.player_skipping_scene = undefined;
3290 level.linked_scenes = undefined;
3292 level notify(
"scene_skip_sequence_ended");
3296 b_skip_fading =
false;
3299 if ( !
IS_TRUE( level.level_ending ) )
3309 self endon(
"stopped" );
3316 if ( o_scene_object._is_valid )
3318 [[o_scene_object]]->skip_scene_on_client();
3327 if ( o_scene_object._is_valid )
3329 [[o_scene_object]]->skip_scene_on_server();
3333 self notify(
"skip_camera_anims" );
3338 if(isdefined(level.player_skipping_scene) && !
IS_TRUE(
_s.DisableSceneSkipping) && array::contains(level.linked_scenes,
_s.name))
3348 return isdefined(level.shared_scene_sequence_started) && isdefined(
_s.shared_scene_sequence);
3353 if(isdefined(
_s.shared_scene_sequence))
3355 if(isdefined(level.shared_scene_sequence_started))
3357 level.shared_scene_sequence_name =
_s.name;
3361 level.shared_scene_sequence_name = undefined;
3372 if(isdefined(level.shared_scene_sequence_started))
3377 _s.shared_scene_sequence =
true;
3379 if(isdefined(
_s.s_female_bundle))
3381 _s.s_female_bundle.shared_scene_sequence =
_s.shared_scene_sequence;
3384 if ( IsString(
_s.nextscenebundle ) )
3389 s_cur_bundle.shared_scene_sequence =
_s.shared_scene_sequence;
3391 if(isdefined(s_cur_bundle.s_female_bundle))
3393 s_cur_bundle.s_female_bundle.shared_scene_sequence =
_s.shared_scene_sequence;
3396 if ( IsString( s_cur_bundle.nextscenebundle ) )
3407 level.shared_scene_sequence_started =
true;
3409 level notify(
"scene_sequence_started");
3413 if(!isdefined(level.shared_scene_sequence_started))
3418 if(isdefined(
_s.shared_scene_sequence))
3420 level.shared_scene_sequence_started = undefined;
3422 level notify(
"scene_sequence_ended",
_s.name);
3429 if(
self === scene_object)
3439 if ( IsPlayer( entity ) )
3445 if(
_str_state !=
"init" || (isdefined(scene_object._s.initanim) || isdefined(scene_object._s.initanimloop)))
3458 if (
IS_EQUAL( obj._s.type,
"player" ) )
3482 switch ( str_alert_state )
3485 log(
"LOW ALERT" );
3486 if ( isdefined(
_s.LowAlertAnim ) )
3495 log(
"HIGH ALERT" );
3496 if ( isdefined(
_s.HighAlertAnim ) )
3505 log(
"COMBAT ALERT" );
3506 if ( isdefined(
_s.CombatAlertAnim ) )
3514 default:
error( 1,
"Unsupported alert state" );
3533 self endon(
"play" );
3534 self endon(
"done" );
3536 _e waittill(
"alert", str_alert_state );
3538 thread [[
scene()]]->play( str_alert_state );
3550 class cAwarenessScene : cScene
3557 function init( str_scenedef, s_scenedef, e_align,
a_ents, b_test_run )
3562 function play( str_awareness_state =
"low_alert" )
3564 self notify(
"new_state" );
3565 self endon(
"new_state" );
3571 thread [[o_obj]]->play( str_awareness_state );
3581 array::flagsys_wait_any_flag(
_a_objects,
"done",
"main_done" );
3599 thread
stop(
false,
true );
3616 if ( b_spawner_only )
3618 e_array = GetSpawnerArray( str_name,
"script_animname" );
3619 if ( e_array.size == 0 )
3621 e_array = GetSpawnerArray( str_name,
"targetname" );
3624 Assert( e_array.size <= 1,
"Multiple spawners found." );
3626 foreach ( ent
in e_array )
3628 if ( !isdefined( ent.isDying ) )
3637 e = GetEnt( str_name,
"animname",
false );
3640 e = GetEnt( str_name,
"script_animname" );
3643 e = GetEnt( str_name +
"_ai",
"targetname",
true );
3646 e = GetEnt( str_name +
"_vh",
"targetname",
true );
3649 e = GetEnt( str_name,
"targetname",
true );
3652 e = GetEnt( str_name,
"targetname" );
3655 e = GetNode( str_name,
"targetname" );
3678 return ( isdefined( ent ) && ( ( !isdefined( ent.isDying ) && !ent
ai::is_dead_sentient() ) ||
self._s.IgnoreAliveCheck ===
true ) );
3683 self endon(
"death" );
3685 self.isDying =
true;
3687 if ( isdefined(
self.targetname ) )
3689 self.targetname =
self.targetname +
"_sync_deleting";
3692 if ( isdefined(
self.animname ) )
3694 self.animname =
self.animname +
"_sync_deleting";
3697 if ( isdefined(
self.script_animname ) )
3699 self.script_animname =
self.script_animname +
"_sync_deleting";
3704 SetHideonClientWhenScriptedAnimCompleted(
self );
3705 self StopAnimScripted();
3717 if(isSentient(
self ))
3719 self.ignoreall =
true;
3724 self PathMode(
"dont move");
3747 level.scene_object_id = 0;
3748 level.active_scenes = [];
3749 level.sceneSkippedCount = 0;
3750 level.wait_for_streamer_hint_scenes = [];
3751 streamerRequest(
"clear" );
3755 s_scenedef.editaction = undefined;
3756 s_scenedef.newobject = undefined;
3758 if ( IsString( s_scenedef.FemaleBundle ) )
3762 s_female_bundle.MaleBundle = s_scenedef.name;
3764 s_scenedef.s_female_bundle = s_female_bundle;
3765 s_female_bundle.s_male_bundle = s_scenedef;
3768 if ( IsString( s_scenedef.NextSceneBundle ) )
3771 foreach ( i, s_object
in s_scenedef.objects )
3774 if (
IS_EQUAL( s_object.type,
"player" ) )
3776 s_object.DisableTransitionOut =
true;
3782 s_next_bundle.DontSync =
true;
3784 foreach ( i, s_object
in s_next_bundle.objects )
3787 if (
IS_EQUAL( s_object.type,
"player" ) )
3789 s_object.DisableTransitionIn =
true;
3793 s_object.isCutScene =
true;
3798 if ( isdefined( s_next_bundle.FemaleBundle ) )
3802 if ( isdefined( s_next_female_bundle ) )
3804 s_next_female_bundle.DontSync =
true;
3806 foreach ( i, s_object
in s_next_female_bundle.objects )
3809 if (
IS_EQUAL( s_object.type,
"player" ) )
3811 s_object.DisableTransitionIn =
true;
3815 s_object.isCutScene =
true;
3823 if ( IsString( s_scenedef.streamerHint ) )
3825 s_cur_bundle = s_scenedef;
3828 s_cur_bundle._endStreamerHint = s_scenedef.streamerHint;
3829 if ( IsString( s_cur_bundle.NextSceneBundle ) )
3840 foreach ( i, s_object
in s_scenedef.objects )
3842 if (
IS_EQUAL( s_object.type,
"player" ) )
3844 DEFAULT( s_object.cameratween, 0 );
3846 if ( isdefined( s_object.player ) )
3852 s_object.player = 0;
3855 s_object.name =
"player " + ( s_object.player + 1 );
3856 s_object.NewPlayerMethod =
true;
3860 s_object.player = undefined;
3864 if ( s_scenedef.vmtype ==
"both" && !s_scenedef
is_igc() )
3866 n_clientbits = GetMinBitCountForNum( 3 );
3888 a_invalid_object_indexes = [];
3890 foreach ( i, s_object
in s_scenedef.objects )
3892 if ( !isdefined( s_object.name ) && !isdefined( s_object.model ) && !
IS_EQUAL( s_object.type,
"player" ) )
3898 for ( i = a_invalid_object_indexes.size - 1; i >= 0 ; i-- )
3900 ArrayRemoveIndex( s_scenedef.objects, a_invalid_object_indexes[i] );
3910 a_instances = ArrayCombine(
3916 foreach ( s_instance
in a_instances )
3918 if ( isdefined( s_instance.linkto ) )
3923 if ( isdefined( s_instance.script_flag_set ) )
3928 if ( isdefined( s_instance.scriptgroup_initscenes ) )
3930 foreach ( trig
in GetEntArray( s_instance.scriptgroup_initscenes,
"scriptgroup_initscenes" ) )
3936 if ( isdefined( s_instance.scriptgroup_playscenes ) )
3938 foreach ( trig
in GetEntArray( s_instance.scriptgroup_playscenes,
"scriptgroup_playscenes" ) )
3944 if ( isdefined( s_instance.scriptgroup_stopscenes ) )
3946 foreach ( trig
in GetEntArray( s_instance.scriptgroup_stopscenes,
"scriptgroup_stopscenes" ) )
3961 e_linkto = GetEnt(
self.linkto,
"linkname" );
3962 self.e_scene_link LinkTo( e_linkto );
3966 self.e_scene_link Delete();
3983 s_instance thread
play();
3987 s_instance thread
init();
3994 trig endon(
"death" );
4001 if ( IsPlayer( trig.who ) )
4012 trig endon(
"death" );
4021 if ( IsPlayer( trig.who ) )
4034 trig endon(
"death" );
4036 self thread
stop();
4055 Assert( isdefined(
get_scenedef( str_scenedef ) ),
"Trying to add a scene function for scene '" + str_scenedef +
"' that doesn't exist." );
4059 DEFAULT( level.scene_funcs[ str_scenedef ], [] );
4060 DEFAULT( level.scene_funcs[ str_scenedef ][ str_state ], [] );
4062 array::add( level.scene_funcs[ str_scenedef ][ str_state ], Array( func, vararg ),
false );
4081 Assert( isdefined(
get_scenedef( str_scenedef ) ),
"Trying to remove a scene function for scene '" + str_scenedef +
"' that doesn't exist." );
4086 if ( isdefined( level.scene_funcs[ str_scenedef ] ) && isdefined( level.scene_funcs[ str_scenedef ][ str_state ] ) )
4088 for ( i = level.scene_funcs[ str_scenedef ][ str_state ].size - 1; i >= 0; i-- )
4090 if ( level.scene_funcs[ str_scenedef ][ str_state ][ i ][ 0 ] == func )
4092 ArrayRemoveIndex( level.scene_funcs[ str_scenedef ][ str_state ], i );
4109 if ( s_scenedef.sceneType == str_type )
4141 function spawn( arg1, arg2, arg3, arg4, b_test_run )
4143 str_scenedef = arg1;
4145 Assert( isdefined( str_scenedef ),
"Cannot create a scene without a scene def." );
4147 if ( IsVec( arg2 ) )
4160 s_instance = SpawnStruct();
4161 s_instance.origin = ( isdefined( v_origin ) ? v_origin : (0, 0, 0) );
4162 s_instance.angles = ( isdefined( v_angles ) ? v_angles : (0, 0, 0) );
4163 s_instance.classname =
"scriptbundle_scene";
4164 s_instance.scriptbundlename = str_scenedef;
4206 function init( arg1, arg2, arg3, b_test_run )
4208 if (
self == level )
4210 if ( IsString( arg1 ) )
4212 if ( IsString( arg2 ) )
4224 if ( isdefined( str_key ) )
4229 Assert( a_instances.size,
"No scene instances with KVP '" + str_key +
"'/'" + str_value +
"'." );
4235 if ( !a_instances.size )
4241 if ( !a_instances.size )
4247 foreach ( s_instance
in a_instances )
4249 if ( isdefined( s_instance ) )
4259 if ( IsString( arg1 ) )
4276 DEFAULT( str_scenedef,
self.scriptbundlename );
4282 Assert( isdefined( str_scenedef ),
"Scene at (" + ( isdefined(
self.origin ) ?
self.origin :
"level" ) +
") is missing its scene def." );
4283 Assert( isdefined( s_bundle ),
"Scene at (" + ( isdefined(
self.origin ) ?
self.origin :
"level" ) +
") is using a scene name '" + str_scenedef +
"' that doesn't exist." );
4289 if ( !isdefined( o_scene ) )
4291 if ( s_bundle.scenetype ==
"awareness" )
4293 o_scene =
new cAwarenessScene();
4297 o_scene =
new cScene();
4302 [[o_scene]]->init( s_bundle.name, s_bundle,
self,
a_ents, b_test_run );
4306 thread [[o_scene]]->initialize(
a_ents,
true );
4316 b_has_player =
false;
4317 foreach ( s_object
in s_bundle.objects )
4319 if ( !isDefined( s_object ) )
4322 if (
IS_EQUAL( s_object.type,
"player" ) )
4324 b_has_player =
true;
4333 e_player = undefined;
4338 else if ( IsArray(
a_ents ) )
4342 if ( IsPlayer( ent ) )
4352 if ( !isdefined( e_player ) )
4354 e_player = level.activeplayers[0];
4359 if ( isdefined( s_bundle.FemaleBundle ) )
4362 if ( isdefined( s_female_bundle ) )
4364 return s_female_bundle;
4407 function play( arg1, arg2, arg3, b_test_run =
false, str_state, str_mode =
"" )
4409 if(isdefined(arg1) && IsString(arg1) && arg1 ==
"p7_fxanim_zm_castle_rocket_bell_tower_bundle")
4415 s_tracker = SpawnStruct();
4416 s_tracker.n_scene_count = 1;
4418 if (
self == level )
4420 if ( IsString( arg1 ) )
4422 if ( IsString( arg2 ) )
4434 str_scenedef = str_value;
4436 if ( isdefined( str_key ) )
4440 str_scenedef = undefined;
4443 Assert( a_instances.size,
"No scene instances with KVP '" + str_key +
"'/'" + str_value +
"'." );
4449 if ( !a_instances.size )
4455 str_scenedef = undefined;
4459 if ( isdefined( str_scenedef ) )
4462 a_instances = ArrayCombine( a_active_instances, a_instances,
false,
false );
4465 if ( !a_instances.size )
4471 s_tracker.n_scene_count = a_instances.size;
4473 foreach ( s_instance
in a_instances )
4475 if ( isdefined( s_instance ) )
4485 if ( IsString( arg1 ) )
4487 self thread
_play_instance( s_tracker, arg1, arg2, b_test_run, str_state, str_mode );
4491 self thread
_play_instance( s_tracker, arg2, arg1, b_test_run, str_state, str_mode );
4495 for ( i = 0; i < s_tracker.n_scene_count; i++ )
4497 s_tracker waittill(
"scene_done" );
4503 DEFAULT( str_scenedef,
self.scriptbundlename );
4505 if (
self.scriptbundlename === str_scenedef )
4507 if ( !
IS_TRUE(
self.script_play_multiple ) )
4509 if (
IS_TRUE(
self.scene_played ) && !b_test_run )
4517 s_tracker notify(
"scene_done" );
4522 self.scene_played =
true;
4527 if ( IsDefined(o_scene) )
4532 skip_scene( o_scene._s.name,
false,
false,
true);
4535 thread [[o_scene]]->play( str_state,
a_ents, b_test_run, str_mode );
4538 self waittillmatch(
"scene_done", str_scenedef );
4540 if ( isdefined(
self ) )
4542 if ( isdefined(
self.scriptbundlename ) &&
IS_TRUE(
get_scenedef(
self.scriptbundlename ).looping ) )
4544 self.scene_played =
false;
4547 if ( isdefined(
self.script_flag_set ) )
4553 s_tracker notify(
"scene_done" );
4563 function skipto_end( arg1, arg2, arg3, n_time, b_include_players =
false )
4565 str_mode =
"skipto";
4567 if ( !b_include_players )
4569 str_mode +=
"_noplayers";
4572 if ( isdefined( n_time ) )
4574 str_mode +=
":" + n_time;
4577 play( arg1, arg2, arg3,
false, undefined, str_mode );
4589 str_mode =
"skipto_noai_noplayers";
4590 if ( isdefined( n_time ) )
4592 str_mode +=
":" + n_time;
4595 play( arg1, arg2, arg3,
false, undefined, str_mode );
4634 if (
self == level )
4636 if ( IsString( arg1 ) )
4638 if ( IsString( arg2 ) )
4650 if ( isdefined( str_key ) )
4655 Assert( a_instances.size,
"No scene instances with KVP '" + str_key +
"'/'" + str_value +
"'." );
4658 str_value = undefined;
4663 if ( !a_instances.size )
4669 str_value = undefined;
4673 foreach ( s_instance
in ArrayCopy( a_instances ) )
4675 if ( isdefined( s_instance ) )
4684 if ( IsString( arg1 ) )
4697 if ( isdefined(
self.scenes ) )
4699 foreach ( o_scene
in ArrayCopy(
self.scenes ) )
4701 str_scene_name = [[o_scene]]->get_name();
4703 if ( !isdefined( str_scenedef ) || ( str_scene_name == str_scenedef ) )
4705 thread [[o_scene]]->stop( b_clear );
4714 foreach ( s_obj
in s_scenedef.objects )
4727 return (
IS_TRUE(
self.spawnoninit ) || isdefined(
self.initanim ) || isdefined(
self.initanimloop ) ||
IS_TRUE(
self.firstframe ) );
4819 foreach ( s_obj
in s_scenedef.objects )
4821 if ( isdefined( s_obj.type ) )
4823 if ( ToLower( s_obj.type ) == ToLower( str_type ) )
4846 if (
self == level )
4868 if (
self == level )
4870 return ( level
flagsys::get( str_scenedef +
"_playing" ) );
4874 DEFAULT( str_scenedef,
self.scriptbundlename );
4877 if ( isdefined( o_scene ) )
4879 return (
IS_EQUAL( o_scene._str_state,
"play" ) );
4898 if (
self == level )
4904 DEFAULT( str_scenedef,
self.scriptbundlename );
4907 if ( isdefined( o_scene ) )
4918 DEFAULT( level.active_scenes, [] );
4920 if ( isdefined( str_scenedef ) )
4922 return ( isdefined( level.active_scenes[ str_scenedef ] ) ? level.active_scenes[ str_scenedef ] : [] );
4926 a_active_scenes = [];
4927 foreach ( str_scenedef, _
in level.active_scenes )
4929 a_active_scenes = ArrayCombine( a_active_scenes, level.active_scenes[ str_scenedef ],
false,
false );
4932 return a_active_scenes;
4938 if ( isdefined( str_scenedef ) && isdefined(
self.scenes ) )
4940 foreach ( o_scene
in self.scenes )
4942 if ( [[o_scene]]->
get_name() == str_scenedef )
4954 if(IsDefined( level.scriptbundles[
"scene"][str_scenename] ))
4956 level.scriptbundles[
"scene"][str_scenename] = undefined;
4962 return ( IsString(
self.cameraswitcher )
4963 || IsString(
self.extraCamSwitcher1 )
4964 || IsString(
self.extraCamSwitcher2 )
4965 || IsString(
self.extraCamSwitcher3 )
4966 || IsString(
self.extraCamSwitcher4 ) );
4971 self notify(
"scene_disable_player_stuff" );
4973 self notify(
"kill_hint_text" );
4975 self DisableOffhandWeapons();
4981 level notify(
"disable_cybercom",
self,
true );
4985 self notify(
"delete_weapon_objects" );
4991 self endon(
"scene_disable_player_stuff" );
4992 self endon(
"disconnect" );
4996 self EnableOffhandWeapons();
5001 level notify(
"enable_cybercom",
self );
5002 self notify(
"scene_enable_cybercom" );
5009 if (b_in_igc && !isDefined(level.igcStartTime))
5011 level.igcStartTime = GetTime();
5013 else if (!b_in_igc && isDefined(level.igcStartTime))
5015 igcViewtimeSec = GetTime() - level.igcStartTime;
5016 level.igcStartTime = undefined;
5017 foreach (player
in level.players)
5019 if (!isDefined(player.totalIGCViewtime))
5021 player.totalIGCViewtime = 0;
5023 player.totalIGCViewtime += int(igcViewtimeSec / 1000);
5030 n_ent_num =
self GetEntityNumber();
5035 n_players_in_igc_field |= ( 1 << n_ent_num );
5039 n_players_in_igc_field &= ~( 1 << n_ent_num );
5048 n_entnum =
self GetEntityNumber();
5049 return ( n_players_in_igc & ( 1 << n_entnum ) );
5054 str_mode = GetDvarString(
"scene_menu_mode",
"default" );
5056 if ( IsSubStr( str_mode,
"capture" ) )
5068 return IS_TRUE(level.scene_should_spectate_on_hot_join);
5073 while(
IS_TRUE(level.scene_should_spectate_on_hot_join))
5081 function skip_scene( scene_name, b_sequence, b_player_scene, b_check_linked_scene )
5083 if(!isdefined(scene_name))
5085 if(isdefined(level.shared_scene_sequence_name))
5087 scene_name = level.shared_scene_sequence_name;
5090 if(!isdefined(scene_name))
5092 if(isdefined(level.players) && isdefined(level.players[0].current_scene))
5094 scene_name = level.players[0].current_scene;
5097 if(!isdefined(scene_name))
5099 foreach(player
in level.players)
5101 if(isdefined(player.current_scene))
5103 scene_name = player.current_scene;
5112 if(!
IS_TRUE(b_sequence) && !isdefined(b_player_scene) )
5114 foreach(player
in level.players)
5116 if(isdefined(player.current_scene) && player.current_scene == scene_name)
5118 b_player_scene =
true;
5130 b_can_skip_player_scene =
false;
5132 foreach ( s_instance
in ArrayCopy( a_instances ) )
5134 if ( isdefined( s_instance ) )
5136 b_shared_scene = (s_instance
_skip_scene( scene_name, b_sequence,
true,
false ));
5138 if(b_shared_scene == 2)
5141 if(b_shared_scene == 1)
5143 b_can_skip_player_scene =
true;
5150 if(
IS_TRUE(b_can_skip_player_scene) )
5154 foreach ( s_instance
in ArrayCopy( a_instances ) )
5156 if ( isdefined( s_instance ) )
5158 s_instance
_skip_scene( scene_name, b_sequence,
false,
true );
5164 level.shared_scene_sequence_started = undefined;
5165 level.shared_scene_sequence_name = undefined;
5174 if ( !a_instances.size )
5179 foreach ( s_instance
in ArrayCopy( a_instances ) )
5181 if ( isdefined( s_instance ) )
5183 s_instance
_skip_scene( scene_name, b_sequence, b_player_scene, b_check_linked_scene );
5188 function _skip_scene( skipped_scene_name, b_sequence, b_player_scene, b_check_linked_scene )
5192 if ( isdefined(
self.scenes ) )
5194 foreach ( o_scene
in ArrayCopy(
self.scenes ) )
5197 if(
IS_TRUE(o_scene.skipping_scene) )
5203 if(o_scene._s.name === skipped_scene_name)
5205 if(
IS_TRUE(o_scene._s.DisableSceneSkipping))
5211 if(o_scene._str_state ===
"init")
5217 else if(!isdefined(skipped_scene_name))
5221 if(
IS_TRUE(o_scene._s.DisableSceneSkipping))
5227 if(o_scene._str_state ===
"init")
5244 str_scene_name = [[o_scene]]->get_name();
5248 b_linked_scene = array::contains(level.linked_scenes, str_scene_name);
5251 if(
IS_TRUE(b_check_linked_scene) && (!b_linked_scene ||
IS_TRUE(o_scene._s.DisableSceneSkipping)) )
5256 if( !b_linked_scene && o_scene._str_state ===
"init" )
5261 if ( ( !isdefined(skipped_scene_name) || str_scene_name == skipped_scene_name ) || (b_linked_scene && !
IS_TRUE(o_scene._s.DisableSceneSkipping)) )
5263 if( ( !isdefined(skipped_scene_name) || str_scene_name == skipped_scene_name) &&
IS_TRUE(b_player_scene) && !
IS_TRUE(b_check_linked_scene) && !b_linked_scene)
5266 o_scene.b_player_scene =
true;
5267 level.player_skipping_scene = str_scene_name;
5270 o_scene.skipping_scene =
true;
5271 thread [[o_scene]]->skip_scene( b_sequence );
5276 o_scene.b_player_scene = b_player_scene;
5277 o_scene.skipping_scene =
true;
5278 thread [[o_scene]]->skip_scene( b_sequence);
5283 return b_shared_scene;
5288 DEFAULT( level.linked_scenes, [] );
5290 array::add(level.linked_scenes, linked_scene_str);
5295 if(isdefined(level.linked_scenes))
5297 ArrayRemoveValue( level.linked_scenes, linked_scene_str );
5304 while(isdefined(level.player_skipping_scene))
5312 return isdefined(level.player_skipping_scene);
5317 self endon(
"disconnect" );
5321 level waittill(
"scene_sequence_started");
5327 level waittill(
"scene_sequence_ended" );
5333 level endon(
"scene_sequence_started");
5335 if(isdefined(
self.scene_skip_timer))
5338 self.scene_skip_timer = undefined;
5341 if(isdefined(
self.scene_skip_start_time))
5343 self.scene_skip_start_time = undefined;
5346 foreach(player
in level.players)
5348 if(isdefined(player.skip_scene_menu_handle))
5350 player CloseLuiMenu( player.skip_scene_menu_handle );
5351 player.skip_scene_menu_handle = undefined;
5358 self endon(
"disconnect" );
5359 self endon(
"scene_being_skipped");
5361 level waittill(
"scene_sequence_ended" );
5368 self endon(
"disconnect" );
5369 level endon(
"scene_sequence_ended");
5371 self waittill(
"scene_being_skipped");
5372 level.sceneSkippedCount++;
5378 self endon(
"disconnect" );
5379 level endon(
"scene_sequence_ended" );
5381 b_skip_scene =
false;
5386 foreach(player
in level.players)
5388 if(isdefined(player.skip_scene_menu_handle))
5390 player CloseLuiMenu( player.skip_scene_menu_handle );
5394 player.skip_scene_menu_handle = player OpenLuiMenu(
"CPSkipSceneMenu" );
5396 player SetLUIMenuData( player.skip_scene_menu_handle,
"showSkipButton", 0 );
5397 player SetLUIMenuData( player.skip_scene_menu_handle,
"hostIsSkipping", 0 );
5398 player SetLUIMenuData( player.skip_scene_menu_handle,
"sceneSkipEndTime", 0 );
5405 if(!isdefined(
self.scene_skip_timer))
5407 self SetLUIMenuData(
self.skip_scene_menu_handle,
"showSkipButton", 1 );
5410 self.scene_skip_timer = GetTime();
5412 else if(isdefined(
self.scene_skip_timer))
5414 if((GetTime() -
self.scene_skip_timer) > 3000)
5416 self SetLUIMenuData(
self.skip_scene_menu_handle,
"showSkipButton", 2 );
5418 self.scene_skip_timer = undefined;
5422 if((
self PrimaryButtonPressedLocal()) && !
IS_TRUE(level.chyron_text_active))
5424 if( !isdefined(
self.scene_skip_start_time) )
5426 foreach(player
in level.players)
5430 player SetLUIMenuData( player.skip_scene_menu_handle,
"sceneSkipEndTime", GetTime() + 2500 );
5434 if(isdefined(player.skip_scene_menu_handle))
5436 player SetLUIMenuData( player.skip_scene_menu_handle,
"hostIsSkipping", 1 );
5441 self.scene_skip_start_time = GetTime();
5443 else if((GetTime() -
self.scene_skip_start_time) > 2500)
5445 b_skip_scene =
true;
5449 else if( isdefined(
self.scene_skip_start_time) )
5451 foreach(player
in level.players)
5455 player SetLUIMenuData( player.skip_scene_menu_handle,
"sceneSkipEndTime", 0 );
5459 if(isdefined(player.skip_scene_menu_handle))
5461 player SetLUIMenuData( player.skip_scene_menu_handle,
"hostIsSkipping", 2 );
5465 self.scene_skip_start_time = undefined;
5468 if(
IS_TRUE(level.chyron_text_active))
5470 while(
IS_TRUE(level.chyron_text_active))
5485 self playsound(
"uin_igc_skip" );
5487 self notify(
"scene_being_skipped");
5488 level notify(
"scene_skip_sequence_started");
5497 if(
self ActionSlotOneButtonPressed() )
5501 else if(
self ActionSlotTwoButtonPressed() )
5505 else if(
self ActionSlotThreeButtonPressed() )
5509 else if(
self ActionSlotFourButtonPressed() )
5515 else if(
self JumpButtonPressed() )
5519 else if(
self StanceButtonPressed() )
5523 else if(
self WeaponSwitchButtonPressed() )
5527 else if(
self ReloadButtonPressed() )
5533 else if(
self fragbuttonpressed() )
5537 else if(
self throwbuttonpressed() )
5541 else if(
self AttackButtonPressed())
5545 else if(
self secondaryoffhandbuttonpressed() )
5551 else if(
self meleebuttonpressed() )
5578 DEFAULT( level.scene_ordered_notetracks, [] );
5580 group_obj = level.scene_ordered_notetracks[group_name];
5582 if(!isdefined( group_obj ))
5584 group_obj = SpawnStruct();
5585 group_obj.count = 0;
5586 group_obj.current_count = 0;
5588 level.scene_ordered_notetracks[group_name] = group_obj;
5598 self waittill(str_note);
5600 if( group_obj.current_count ==
id )
5602 group_obj.current_count++;
5603 self notify(
"scene_" + str_note);
5607 if(group_obj.current_count == group_obj.count)
5609 group_obj.pending_notifies = undefined;
5610 level.scene_ordered_notetracks[group_name] = undefined;
5612 else if( isdefined(group_obj.pending_notifies) && ((group_obj.current_count + group_obj.pending_notifies.size) == group_obj.count) )
5619 if( !isdefined(group_obj.pending_notifies) )
5621 group_obj.pending_notifies = [];
5625 notetrack = SpawnStruct();
5627 notetrack.str_note = str_note;
5630 while(i < group_obj.pending_notifies.size && group_obj.pending_notifies[i].id <
id)
5635 ArrayInsert(group_obj.pending_notifies, notetrack, i);
5637 if( (group_obj.current_count + group_obj.pending_notifies.size) == group_obj.count )
5646 if( isdefined(group_obj.pending_notifies) )
5648 while( group_obj.pending_notifies.size > 0)
5650 self notify(
"scene_" + group_obj.pending_notifies[0].str_note);
5651 ArrayRemoveIndex(group_obj.pending_notifies, 0);
5656 group_obj.pending_notifies = undefined;
5657 level.scene_ordered_notetracks[group_name] = undefined;
5662 DEFAULT( level.wait_for_streamer_hint_scenes, [] );
5663 array::add( level.wait_for_streamer_hint_scenes, str_scene_name );