1 #using scripts\codescripts\struct;
3 #using scripts\shared\array_shared;
4 #using scripts\shared\callbacks_shared;
5 #using scripts\shared\debug_shared;
6 #using scripts\shared\flag_shared;
7 #using scripts\shared\hud_util_shared;
8 #using scripts\shared\math_shared;
9 #using scripts\shared\spawner_shared;
10 #using scripts\shared\system_shared;
11 #using scripts\shared\trigger_shared;
12 #using scripts\shared\util_shared;
15 #using scripts\shared\doors_shared;
16 #using scripts\shared\duplicaterender_mgr;
17 #using scripts\shared\exploder_shared;
18 #using scripts\shared\fx_shared;
19 #using scripts\shared\visionset_mgr_shared;
20 #using scripts\shared\player_shared;
21 #using scripts\shared\drown;
23 #using scripts\shared\vehicles\_raps;
25 #insert scripts\shared\shared.gsh;
33 level.first_frame =
true;
35 level.first_frame = undefined;
40 if ( SessionModeIsCampaignGame() )
42 level.game_mode_suffix =
"_cp";
44 else if ( SessionModeIsZombiesGame() )
46 level.game_mode_suffix =
"_zm";
50 level.game_mode_suffix =
"_mp";
53 level.script = Tolower( GetDvarString(
"mapname" ) );
55 level.clientscripts = ( GetDvarString(
"cg_usingClientScripts") !=
"" );
57 level.campaign =
"american";
60 level.clientscripts = ( GetDvarString(
"cg_usingClientScripts" ) !=
"" );
68 if ( GetDvarString(
"scr_RequiredMapAspectratio" ) ==
"" )
70 SetDvar(
"scr_RequiredMapAspectratio",
"1" );
74 SetDvar(
"r_waterFogTest", 0 );
75 SetDvar(
"tu6_player_shallowWaterHeight",
"0.0" );
88 array::thread_all( GetEntArray(
"water",
"targetname" ), &
water_think );
89 array::thread_all_ents( GetEntArray(
"badplace",
"targetname" ), &
badplace_think );
98 level.network_frame = 0;
103 level.network_frame++;
111 level.time = GetTime();
118 ents = GetEntArray();
119 for( i = 0; i < ents.size; i ++ )
121 if( ( isdefined( ents[i].classname ) ) &&( GetSubStr( ents[i].classname, 0, 7 ) ==
"weapon_" ) )
128 if( isdefined( weap.script_ammo_clip ) )
130 clip = weap.script_ammo_clip;
134 if( isdefined( weap.script_ammo_extra ) )
136 extra = weap.script_ammo_extra;
142 if( !isdefined( clip ) )
144 assertmsg(
"weapon: " + weap.classname +
" " + weap.origin +
" sets script_ammo_extra but not script_ammo_clip" );
147 if( !isdefined( extra ) )
149 assertmsg(
"weapon: " + weap.classname +
" " + weap.origin +
" sets script_ammo_clip but not script_ammo_extra" );
151 weap ItemWeaponSetAmmo( clip, extra );
152 weap ItemWeaponSetAmmo( clip, extra, 1 );
161 if( !isdefined( level.badPlaces ) )
168 badplace_box(
"badplace" + level.badPlaces, -1, badplace.origin, badplace.radius,
"all" );
175 self waittill(
"damage", amount );
177 if( isdefined(
self.specialDamage ) )
182 self PlayRumbleOnEntity(
"damage_heavy" );
188 return IS_TRUE( level.early_level[level.script] );
193 self endon(
"death" );
194 self endon(
"disconnect" );
196 self.lastgrenadetime = 0;
200 while( !
self IsThroWingGrenade() )
205 self.lastgrenadetime = GetTime();
207 while(
self IsThroWingGrenade() )
217 self endon(
"disconnect" );
227 self waittill(
"death", attacker, cause, weapon, inflicter );
229 if( cause !=
"MOD_GAS" && cause !=
"MOD_GRENADE" && cause !=
"MOD_GRENADE_SPLASH" && cause !=
"MOD_SUICIDE" && cause !=
"MOD_EXPLOSIVE" && cause !=
"MOD_PROJECTILE" && cause !=
"MOD_PROJECTILE_SPLASH" )
235 if ( level.gameskill >= 2 )
241 if( cause ==
"MOD_EXPLOSIVE" )
244 if( isdefined( attacker ) && ( attacker.classname ==
"script_vehicle" || isdefined( attacker.create_fake_vehicle_damage ) ) )
246 level notify(
"new_quote_string" );
249 SetDvar(
"ui_deadquote",
"@SCRIPT_EXPLODING_VEHICLE_DEATH" );
257 if( isdefined( inflicter ) && isdefined( inflicter.destructibledef ) )
260 if( IsSubStr( inflicter.destructibledef,
"barrel_explosive" ) )
262 level notify(
"new_quote_string" );
265 SetDvar(
"ui_deadquote",
"@SCRIPT_EXPLODING_BARREL_DEATH" );
271 if( isdefined( inflicter.destructiblecar ) && inflicter.destructiblecar )
273 level notify(
"new_quote_string" );
276 SetDvar(
"ui_deadquote",
"@SCRIPT_EXPLODING_VEHICLE_DEATH" );
284 if( cause ==
"MOD_GRENADE" || cause ==
"MOD_GRENADE_SPLASH" )
286 if( !weapon.isTimedDetonation || !weapon.isGrenadeWeapon )
291 level notify(
"new_quote_string" );
293 if (weapon.name ==
"explosive_bolt" )
296 SetDvar(
"ui_deadquote",
"@SCRIPT_EXPLOSIVE_BOLT_DEATH" );
302 SetDvar(
"ui_deadquote",
"@SCRIPT_GRENADE_DEATH" );
312 self.failingMission =
true;
314 SetDvar(
"ui_deadquote",
"" );
318 fontElem = NewHudElem();
319 fontElem.elemType =
"font";
320 fontElem.font =
"default";
321 fontElem.fontscale = 1.5;
325 fontElem.alignX =
"center";
326 fontElem.alignY =
"middle";
327 fontElem.horzAlign =
"center";
328 fontElem.vertAlign =
"middle";
329 fontElem SetText( textLine1 );
330 fontElem.foreground =
true;
332 fontElem FadeOverTime( 1 );
334 fontElem.hidewheninmenu =
true;
336 if( isdefined( textLine2 ) )
338 fontElem = NewHudElem();
339 fontElem.elemType =
"font";
340 fontElem.font =
"default";
341 fontElem.fontscale = 1.5;
343 fontElem.y = -60 + level.fontHeight * fontElem.fontscale;
345 fontElem.alignX =
"center";
346 fontElem.alignY =
"middle";
347 fontElem.horzAlign =
"center";
348 fontElem.vertAlign =
"middle";
349 fontElem SetText( textLine2 );
350 fontElem.foreground =
true;
352 fontElem FadeOverTime( 1 );
354 fontElem.hidewheninmenu =
true;
361 self endon(
"disconnect" );
363 overlayIcon = NewClientHudElem(
self );
366 overlayIcon SetShader(
"hud_grenadeicon_256", 50, 50 );
367 overlayIcon.alignX =
"center";
368 overlayIcon.alignY =
"middle";
369 overlayIcon.horzAlign =
"center";
370 overlayIcon.vertAlign =
"middle";
371 overlayIcon.foreground =
true;
372 overlayIcon.alpha = 0;
373 overlayIcon FadeOverTime( 1 );
374 overlayIcon.alpha = 1;
375 overlayIcon.hidewheninmenu =
true;
377 overlayPointer = NewClientHudElem(
self );
378 overlayPointer.x = 0;
379 overlayPointer.y = 25;
380 overlayPointer SetShader(
"hud_grenadepointer", 50, 25 );
381 overlayPointer.alignX =
"center";
382 overlayPointer.alignY =
"middle";
383 overlayPointer.horzAlign =
"center";
384 overlayPointer.vertAlign =
"middle";
385 overlayPointer.foreground =
true;
386 overlayPointer.alpha = 0;
387 overlayPointer FadeOverTime( 1 );
388 overlayPointer.alpha = 1;
389 overlayPointer.hidewheninmenu =
true;
397 self endon(
"disconnect" );
399 overlayIcon = NewClientHudElem(
self );
402 overlayIcon SetShader(
"hud_explosive_arrow_icon", 50, 50 );
403 overlayIcon.alignX =
"center";
404 overlayIcon.alignY =
"middle";
405 overlayIcon.horzAlign =
"center";
406 overlayIcon.vertAlign =
"middle";
407 overlayIcon.foreground =
true;
408 overlayIcon.alpha = 0;
409 overlayIcon FadeOverTime( 1 );
410 overlayIcon.alpha = 1;
411 overlayIcon.hidewheninmenu =
true;
413 overlayPointer = NewClientHudElem(
self );
414 overlayPointer.x = 0;
415 overlayPointer.y = 25;
416 overlayPointer SetShader(
"hud_grenadepointer", 50, 25 );
417 overlayPointer.alignX =
"center";
418 overlayPointer.alignY =
"middle";
419 overlayPointer.horzAlign =
"center";
420 overlayPointer.vertAlign =
"middle";
421 overlayPointer.foreground =
true;
422 overlayPointer.alpha = 0;
423 overlayPointer FadeOverTime( 1 );
424 overlayPointer.alpha = 1;
425 overlayPointer.hidewheninmenu =
true;
432 self endon(
"disconnect" );
434 overlayIcon = NewClientHudElem(
self );
437 overlayIcon SetShader(
"hud_monsoon_titus_arrow", 50, 50 );
438 overlayIcon.alignX =
"center";
439 overlayIcon.alignY =
"middle";
440 overlayIcon.horzAlign =
"center";
441 overlayIcon.vertAlign =
"middle";
442 overlayIcon.foreground =
true;
443 overlayIcon.alpha = 0;
444 overlayIcon FadeOverTime( 1 );
445 overlayIcon.alpha = 1;
446 overlayIcon.hidewheninmenu =
true;
448 overlayPointer = NewClientHudElem(
self );
449 overlayPointer.x = 0;
450 overlayPointer.y = 25;
451 overlayPointer SetShader(
"hud_grenadepointer", 50, 25 );
452 overlayPointer.alignX =
"center";
453 overlayPointer.alignY =
"middle";
454 overlayPointer.horzAlign =
"center";
455 overlayPointer.vertAlign =
"middle";
456 overlayPointer.foreground =
true;
457 overlayPointer.alpha = 0;
458 overlayPointer FadeOverTime( 1 );
459 overlayPointer.alpha = 1;
460 overlayPointer.hidewheninmenu =
true;
467 self endon(
"disconnect" );
469 overlayIcon = NewClientHudElem(
self );
472 overlayIcon SetShader(
"hud_monsoon_nitrogen_barrel", 50, 50 );
473 overlayIcon.alignX =
"center";
474 overlayIcon.alignY =
"middle";
475 overlayIcon.horzAlign =
"center";
476 overlayIcon.vertAlign =
"middle";
477 overlayIcon.foreground =
true;
478 overlayIcon.alpha = 0;
479 overlayIcon FadeOverTime( 1 );
480 overlayIcon.alpha = 1;
481 overlayIcon.hidewheninmenu =
true;
483 overlayPointer = NewClientHudElem(
self );
484 overlayPointer.x = 0;
485 overlayPointer.y = 25;
486 overlayPointer SetShader(
"hud_grenadepointer", 50, 25 );
487 overlayPointer.alignX =
"center";
488 overlayPointer.alignY =
"middle";
489 overlayPointer.horzAlign =
"center";
490 overlayPointer.vertAlign =
"middle";
491 overlayPointer.foreground =
true;
492 overlayPointer.alpha = 0;
493 overlayPointer FadeOverTime( 1 );
494 overlayPointer.alpha = 1;
495 overlayPointer.hidewheninmenu =
true;
502 self endon(
"disconnect" );
504 overlayIcon = NewClientHudElem(
self );
507 overlayIcon SetShader(
"hud_exploding_vehicles", 50, 50 );
508 overlayIcon.alignX =
"center";
509 overlayIcon.alignY =
"middle";
510 overlayIcon.horzAlign =
"center";
511 overlayIcon.vertAlign =
"middle";
512 overlayIcon.foreground =
true;
513 overlayIcon.alpha = 0;
514 overlayIcon FadeOverTime( 1 );
515 overlayIcon.alpha = 1;
516 overlayIcon.hidewheninmenu =
true;
518 overlayPointer = NewClientHudElem(
self );
538 self endon(
"disconnect" );
539 self waittill(
"spawned" );
541 hudElemIcon Destroy();
542 hudElemPointer Destroy();
547 if( !isdefined( fDelay ) )
553 overlay = NewClientHudElem(
self );
565 overlay SetShader( shader, iWidth, iHeight );
566 overlay.alignX =
"center";
567 overlay.alignY =
"middle";
568 overlay.horzAlign =
"center";
569 overlay.vertAlign =
"middle";
570 overlay.foreground =
true;
572 overlay FadeOverTime( 1 );
574 overlay.hidewheninmenu =
true;
581 self endon(
"disconnect" );
582 self waittill(
"spawned" );
592 assert( isdefined(
self.target ) );
593 targeted = GetEnt(
self.target,
"targetname" );
594 assert( isdefined( targeted ) );
595 waterHeight = targeted.origin[2];
596 targeted = undefined;
598 level.depth_allow_prone = 8;
599 level.depth_allow_crouch = 33;
600 level.depth_allow_stand = 50;
607 players = GetPlayers();
608 for( i = 0; i < players.size; i++ )
610 if( players[i].inWater )
612 players[i] AllowProne(
true );
613 players[i] AllowCrouch(
true );
614 players[i] AllowStand(
true );
620 self waittill(
"trigger", other );
622 if( !IsPlayer( other ) )
629 players = GetPlayers();
631 players_in_water_count = 0;
632 for( i = 0; i < players.size; i++ )
634 if( players[i] IsTouching(
self ) )
636 players_in_water_count++;
637 players[i].inWater =
true;
638 playerOrg = players[i] GetOrigin();
639 d = ( playerOrg[2] - waterHeight );
646 newSpeed = Int( level.default_run_speed - abs( d * 5 ) );
651 assert( newSpeed <= 190 );
655 if( abs( d ) > level.depth_allow_crouch )
657 players[i] AllowCrouch(
false );
661 players[i] AllowCrouch(
true );
664 if( abs( d ) > level.depth_allow_prone )
666 players[i] AllowProne(
false );
670 players[i] AllowProne(
true );
675 if( players[i].inWater )
677 players[i].inWater =
false;
682 if( players_in_water_count == 0 )
697 hudelem = NewHudElem();
698 hudelem.alignX =
"left";
699 hudelem.alignY =
"middle";
703 hudelem.label = start;
705 hudelem.fontScale = 3;
707 hudelem FadeOverTime( 1 );
710 hudelem FadeOverTime( 1 );
719 if ( !isdefined( level.mapCenter ) )
724 nodes = GetAllNodes();
726 if ( isdefined( nodes[ 0 ] ) )
728 level.nodesMins = nodes[ 0 ].origin;
729 level.nodesMaxs = nodes[ 0 ].origin;
733 level.nodesMins = ( 0, 0, 0 );
734 level.nodesMaxs = ( 0, 0, 0 );
737 for ( index = 0; index < nodes.size; index++ )
739 if ( nodes[ index ].type ==
"BAD NODE" )
742 println(
"Level has BAD NODE(s) - not included in map center calculations: ", nodes[ index ].origin );
747 origin = nodes[ index ].origin;
756 println(
"map center: ", level.mapCenter );
759 SetMapCenter( level.mapCenter );
769 MY_TEXTBRIGHTNESS_DEFAULT =
"1.0 1.0 1.0";
770 MY_TEXTBRIGHTNESS_90 =
"0.9 0.9 0.9";
771 MY_TEXTBRIGHTNESS_85 =
"0.85 0.85 0.85";
773 if( level.script ==
"armada" )
775 SetSavedDvar(
"con_typewriterColorBase", MY_TEXTBRIGHTNESS_90 );
779 SetSavedDvar(
"con_typewriterColorBase", MY_TEXTBRIGHTNESS_DEFAULT );
784 trigger.lerping_dvar[dvar] =
true;
786 curr_value = GetDvarFloat( dvar );
787 diff = ( curr_value - value ) / steps;
789 for( i = 0; i < steps; i++ )
791 curr_value = curr_value - diff;
792 SetSavedDvar( dvar, curr_value );
796 SetSavedDvar( dvar, value );
797 trigger.lerping_dvar[dvar] =
false;
802 anti_progress = 1 - progress;
803 startdist =
self.script_start_dist * anti_progress +
self.script_start_dist * progress;
804 halfwayDist =
self.script_halfway_dist * anti_progress +
self.script_halfway_dist * progress;
805 color =
self.script_color * anti_progress +
self.script_color * progress;
807 SetVolFog( startdist, halfwaydist,
self.script_halfway_height,
self.script_base_height, color[0], color[1], color[2], 0.4 );
815 level.host = util::gethostplayer();
819 if ( GetNumConnectedPlayers() == 0 )
828 players = GetPlayers();
831 for( i = 0; i < players.size; i++ )
833 if( players[i].sessionstate ==
"playing" )
846 if ( count == players.size )
857 self endon(
"death" );
858 self endon(
"disconnect" );
859 self endon(
"killOnPainMonitor");
862 if( GetDvarString(
"blurpain" ) ==
"" )
864 SetDvar(
"blurpain",
"on" );
869 oldhealth =
self.health;
870 self waittill(
"damage",
damage, attacker, direction_vec, point, mod );
872 if( isdefined( level.shock_onpain ) && !level.shock_onpain )
882 if(
self.health < 1 )
887 if( mod ==
"MOD_PROJECTILE" )
891 else if( mod ==
"MOD_GRENADE_SPLASH" || mod ==
"MOD_GRENADE" || mod ==
"MOD_EXPLOSIVE" || mod ==
"MOD_PROJECTILE_SPLASH" )
897 if( GetDvarString(
"blurpain" ) ==
"on" )
899 self ShellShock(
"pain", 0.5 );
909 multiplier =
self.maxhealth / 100;
910 scaled_damage =
damage * multiplier;
912 if( scaled_damage >= 90 )
916 else if( scaled_damage >= 50 )
920 else if( scaled_damage >= 25 )
924 else if( scaled_damage > 10 )
937 self waittill(
"death" );
939 if( isdefined( level.shock_ondeath ) && !level.shock_ondeath )
949 if( isdefined(
self.specialDeath ) )
954 if( GetDvarString(
"r_texturebits" ) ==
"16" )
963 if( !isdefined(
self.player_inited ) || !
self.player_inited )
965 if( SessionModeIsCampaignGame() )
978 if ( isdefined(
self ) )
980 self.player_inited =
true;
988 foreach ( ent
in GetEntArray() )
990 if ( isdefined( ent.linkto ) )
992 e_link = GetEnt( ent.linkto,
"linkname" );
994 if ( isdefined( e_link ) )
997 ent LinkTo( e_link );