#include maps\_utility; #include common_scripts\utility; /# mainDebug() { level.animsound_hudlimit = 14; thread lastSightPosWatch(); if ( level.script != "background" ) thread camera(); if ( GetDebugDvar( "debug_corner" ) == "" ) SetDvar( "debug_corner", "off" ); else if ( GetDebugDvar( "debug_corner" ) == "on" ) debug_corner(); if ( GetDvar( "chain" ) == "1" ) thread debugchains(); thread debugDvars(); PreCacheShader( "white" ); thread debugColorFriendlies(); thread watchMinimap(); if ( GetDvar( "level_transition_test" ) != "off" ) thread complete_me(); if ( GetDvar( "level_completeall" ) != "off" ) maps\_endmission::force_all_complete(); if ( GetDvar( "level_clear_all" ) != "off" ) maps\_endmission::clearall(); // thread playerNode(); // thread colordebug(); // thread debuggoalpos(); } #/ debugchains() { nodes = GetAllNodes(); fnodenum = 0; fnodes = []; for ( i = 0; i < nodes.size; i++ ) { if ( ( !( nodes[ i ].spawnflags & 2 ) ) && ( ( ( IsDefined( nodes[ i ].target ) ) && ( ( GetNodeArray( nodes[ i ].target, "targetname" ) ).size > 0 ) ) || ( ( IsDefined( nodes[ i ].targetname ) ) && ( ( GetNodeArray( nodes[ i ].targetname, "target" ) ).size > 0 ) ) ) ) { fnodes[ fnodenum ] = nodes[ i ]; fnodenum++; } } count = 0; while ( 1 ) { if ( GetDvar( "chain" ) == "1" ) { for ( i = 0; i < fnodes.size; i++ ) { if ( Distance( level.player GetOrigin(), fnodes[ i ].origin ) < 1500 ) { Print3d( fnodes[ i ].origin, "yo", ( 0.2, 0.8, 0.5 ), 0.45 ); /* count++; if( count > 25 ) { count = 0; waitframe(); } */ } } friends = GetAIArray( "allies" ); for ( i = 0; i < friends.size; i++ ) { node = friends[ i ] animscripts\utility::GetClaimedNode(); if ( IsDefined( node ) ) Line( friends[ i ].origin + ( 0, 0, 35 ), node.origin, ( 0.2, 0.5, 0.8 ), 0.5 ); } } waitframe(); } } debug_enemyPos( num ) { ai = GetAIArray(); for ( i = 0; i < ai.size; i++ ) { if ( ai[ i ] GetEntityNumber() != num ) continue; ai[ i ] thread debug_enemyPosProc(); break; } } debug_stopEnemyPos( num ) { ai = GetAIArray(); for ( i = 0; i < ai.size; i++ ) { if ( ai[ i ] GetEntityNumber() != num ) continue; ai[ i ] notify( "stop_drawing_enemy_pos" ); break; } } debug_enemyPosProc() { self endon( "death" ); self endon( "stop_drawing_enemy_pos" ); for ( ;; ) { wait( 0.05 ); if ( IsAlive( self.enemy ) ) Line( self.origin + ( 0, 0, 70 ), self.enemy.origin + ( 0, 0, 70 ), ( 0.8, 0.2, 0.0 ), 0.5 ); if ( !self animscripts\utility::hasEnemySightPos() ) continue; pos = animscripts\utility::getEnemySightPos(); Line( self.origin + ( 0, 0, 70 ), pos, ( 0.9, 0.5, 0.3 ), 0.5 ); } } debug_enemyPosReplay() { ai = GetAIArray(); guy = undefined; for ( i = 0; i < ai.size; i++ ) { // if( ai[ i ] GetEntityNumber() != num ) // continue; guy = ai[ i ]; if ( !isalive( guy ) ) continue; if ( IsDefined( guy.lastEnemySightPos ) ) Line( guy.origin + ( 0, 0, 65 ), guy.lastEnemySightPos, ( 1, 0, 1 ), 0.5 ); if ( IsDefined( guy.goodShootPos ) ) { if ( guy IsBadGuy() ) color = ( 1, 0, 0 ); else color = ( 0, 0, 1 ); // nodeOffset = guy GetEye(); nodeOffset = guy.origin + ( 0, 0, 54 ); if ( IsDefined( guy.node ) ) { if ( guy.node.type == "Cover Left" ) { cornerNode = true; nodeOffset = AnglesToRight( guy.node.angles ); nodeOffset = vector_multiply( nodeOffset, -32 ); nodeOffset = ( nodeOffset[ 0 ], nodeOffset[ 1 ], 64 ); nodeOffset = guy.node.origin + nodeOffset; } else if ( guy.node.type == "Cover Right" ) { cornerNode = true; nodeOffset = AnglesToRight( guy.node.angles ); nodeOffset = vector_multiply( nodeOffset, 32 ); nodeOffset = ( nodeOffset[ 0 ], nodeOffset[ 1 ], 64 ); nodeOffset = guy.node.origin + nodeOffset; } } draw_arrow( nodeOffset, guy.goodShootPos, color ); } // break; } if ( 1 ) return; if ( !isalive( guy ) ) return; if ( IsAlive( guy.enemy ) ) Line( guy.origin + ( 0, 0, 70 ), guy.enemy.origin + ( 0, 0, 70 ), ( 0.6, 0.2, 0.2 ), 0.5 ); if ( IsDefined( guy.lastEnemySightPos ) ) Line( guy.origin + ( 0, 0, 65 ), guy.lastEnemySightPos, ( 0, 0, 1 ), 0.5 ); if ( IsAlive( guy.goodEnemy ) ) Line( guy.origin + ( 0, 0, 50 ), guy.goodEnemy.origin, ( 1, 0, 0 ), 0.5 ); if ( !guy animscripts\utility::hasEnemySightPos() ) return; pos = guy animscripts\utility::getEnemySightPos(); Line( guy.origin + ( 0, 0, 55 ), pos, ( 0.2, 0.2, 0.6 ), 0.5 ); if ( IsDefined( guy.goodShootPos ) ) Line( guy.origin + ( 0, 0, 45 ), guy.goodShootPos, ( 0.2, 0.6, 0.2 ), 0.5 ); } drawEntTag( num ) { /# ai = GetAIArray(); for ( i = 0; i < ai.size; i++ ) { if ( ai[ i ] GetEntNum() != num ) continue; ai[ i ] thread dragTagUntilDeath( GetDebugDvar( "debug_tag" ) ); } SetDvar( "debug_enttag", "" ); #/ } drawTag( tag, opcolor, drawtime ) { org = self GetTagOrigin( tag ); ang = self GetTagAngles( tag ); drawArrow( org, ang, opcolor, drawtime ); } drawOrgForever( opcolor ) { org = undefined; ang = undefined; for ( ;; ) { if ( IsDefined( self ) ) { org = self.origin; ang = self.angles; } drawArrow( org, ang, opcolor ); wait( 0.05 ); } } /* ============= ///ScriptDocBegin "Name: drawArrowForever( , )" "Summary: " "Module: Entity" "CallOn: An entity" "MandatoryArg: : " "OptionalArg: : " "Example: " "SPMP: singleplayer" ///ScriptDocEnd ============= */ drawArrowForever( org, ang ) { for ( ;; ) { drawArrow( org, ang ); wait( 0.05 ); } } drawOriginForever() { while ( IsDefined( self ) ) { drawArrow( self.origin, self.angles ); wait( 0.05 ); } } /* ============= ///ScriptDocBegin "Name: drawArrow( , , , )" "Summary: " "Module: Entity" "CallOn: An entity" "MandatoryArg: : " "OptionalArg: : " "Example: " "SPMP: singleplayer" ///ScriptDocEnd ============= */ drawArrow( org, ang, opcolor, drawtime ) { scale = 10; forward = AnglesToForward( ang ); forwardFar = vector_multiply( forward, scale ); forwardClose = vector_multiply( forward, ( scale * 0.8 ) ); right = AnglesToRight( ang ); leftdraw = vector_multiply( right, ( scale * -0.2 ) ); rightdraw = vector_multiply( right, ( scale * 0.2 ) ); up = AnglesToUp( ang ); right = vector_multiply( right, scale ); up = vector_multiply( up, scale ); red = ( 0.9, 0.2, 0.2 ); green = ( 0.2, 0.9, 0.2 ); blue = ( 0.2, 0.2, 0.9 ); if ( IsDefined( opcolor ) ) { red = opcolor; green = opcolor; blue = opcolor; } if ( !isdefined( drawtime ) ) drawtime = 1; Line( org, org + forwardFar, red, 0.9, 0, drawtime ); Line( org + forwardFar, org + forwardClose + rightdraw, red, 0.9, 0, drawtime ); Line( org + forwardFar, org + forwardClose + leftdraw, red, 0.9, 0, drawtime ); Line( org, org + right, blue, 0.9, 0, drawtime ); Line( org, org + up, green, 0.9, 0, drawtime ); } /* ============= ///ScriptDocBegin "Name: drawForwardForever( , )" "Summary: " "Module: Entity" "CallOn: An entity" "MandatoryArg: : " "OptionalArg: : " "Example: " "SPMP: singleplayer" ///ScriptDocEnd ============= */ drawForwardForever( scale, color ) { if ( !isdefined( scale ) ) scale = 100; if ( !isdefined( color ) ) color = ( 0, 1, 0 ); for ( ;; ) { if ( !isdefined( self ) ) return; forward = AnglesToForward( self.angles ); Line( self.origin, self.origin + forward * scale, color ); wait( 0.05 ); } } drawPlayerViewForever() { for ( ;; ) { drawArrow( level.player.origin, level.player GetPlayerAngles(), ( 1, 1, 1 ) ); wait( 0.05 ); } } /* ============= ///ScriptDocBegin "Name: drawTagForever( , )" "Summary: " "Module: Entity" "CallOn: An entity" "MandatoryArg: : " "OptionalArg: : " "Example: " "SPMP: singleplayer" ///ScriptDocEnd ============= */ drawTagForever( tag, opcolor ) { for ( ;; ) { if ( !isdefined( self ) ) return; drawTag( tag, opcolor ); wait( 0.05 ); } } drawTagTrails( tag, opcolor ) { for ( ;; ) { if ( !isdefined( self.origin ) ) break; drawTag( tag, opcolor, 1000 ); wait( 0.05 ); } } dragTagUntilDeath( tag, opcolor ) { self endon( "death" ); for ( ;; ) { if ( !isdefined( self ) ) break; if ( !isdefined( self.origin ) ) break; drawTag( tag, opcolor ); wait( 0.05 ); } } viewTag( type, tag ) { if ( type == "ai" ) { ai = GetAIArray(); for ( i = 0; i < ai.size; i++ ) ai[ i ] drawTag( tag ); } } debug_corner() { level.player.ignoreme = true; nodes = GetAllNodes(); corners = []; for ( i = 0; i < nodes.size; i++ ) { if ( nodes[ i ].type == "Cover Left" ) corners[ corners.size ] = nodes[ i ]; if ( nodes[ i ].type == "Cover Right" ) corners[ corners.size ] = nodes[ i ]; } ai = GetAIArray(); for ( i = 0; i < ai.size; i++ ) ai[ i ] Delete(); level.debugspawners = GetSpawnerArray(); level.activeNodes = []; level.completedNodes = []; for ( i = 0; i < level.debugspawners.size; i++ ) level.debugspawners[ i ].targetname = "blah"; covered = 0; for ( i = 0; i < 30; i++ ) { if ( i >= corners.size ) break; corners[ i ] thread coverTest(); covered++; } if ( corners.size <= 30 ) return; for ( ;; ) { level waittill( "debug_next_corner" ); if ( covered >= corners.size ) covered = 0; corners[ covered ] thread coverTest(); covered++; } } coverTest() { coverSetupAnim(); } #using_animtree( "generic_human" ); coverSetupAnim() { spawn = undefined; spawner = undefined; for ( ;; ) { for ( i = 0; i < level.debugspawners.size; i++ ) { wait( 0.05 ); spawner = level.debugspawners[ i ]; nearActive = false; for ( p = 0; p < level.activeNodes.size; p++ ) { if ( Distance( level.activeNodes[ p ].origin, self.origin ) > 250 ) continue; nearActive = true; break; } if ( nearActive ) continue; completed = false; for ( p = 0; p < level.completedNodes.size; p++ ) { if ( level.completedNodes[ p ] != self ) continue; completed = true; break; } if ( completed ) continue; level.activeNodes[ level.activeNodes.size ] = self; spawner.origin = self.origin; spawner.angles = self.angles; spawner.count = 1; spawn = spawner StalingradSpawn(); if ( spawn_failed( spawn ) ) { removeActiveSpawner( self ); continue; } break; } if ( IsAlive( spawn ) ) break; } wait( 1 ); if ( IsAlive( spawn ) ) { spawn.ignoreme = true; spawn.team = "neutral"; spawn SetGoalPos( spawn.origin ); thread createLine( self.origin ); spawn thread debugorigin(); thread createLineConstantly( spawn ); spawn waittill( "death" ); } removeActiveSpawner( self ); level.completedNodes[ level.completedNodes.size ] = self; } removeActiveSpawner( spawner ) { newSpawners = []; for ( p = 0; p < level.activeNodes.size; p++ ) { if ( level.activeNodes[ p ] == spawner ) continue; newSpawners[ newSpawners.size ] = level.activeNodes[ p ]; } level.activeNodes = newSpawners; } createLine( org ) { for ( ;; ) { Line( org + ( 0, 0, 35 ), org, ( 0.2, 0.5, 0.8 ), 0.5 ); wait( 0.05 ); } } createLineConstantly( ent ) { org = undefined; while ( IsAlive( ent ) ) { org = ent.origin; wait( 0.05 ); } for ( ;; ) { Line( org + ( 0, 0, 35 ), org, ( 1.0, 0.2, 0.1 ), 0.5 ); wait( 0.05 ); } } debugMisstime() { self notify( "stopdebugmisstime" ); self endon( "stopdebugmisstime" ); self endon( "death" ); for ( ;; ) { if ( self.a.misstime <= 0 ) Print3d( self GetTagOrigin( "TAG_EYE" ) + ( 0, 0, 15 ), "hit", ( 0.3, 1, 1 ), 1 ); else Print3d( self GetTagOrigin( "TAG_EYE" ) + ( 0, 0, 15 ), self.a.misstime / 20, ( 0.3, 1, 1 ), 1 ); wait( 0.05 ); } } debugMisstimeOff() { self notify( "stopdebugmisstime" ); } setEmptyDvar( dvar, setting ) { /# if ( GetDebugDvar( dvar ) == "" ) SetDvar( dvar, setting ); #/ } debugJump( num ) { /# ai = GetAIArray(); for ( i = 0; i < ai.size; i++ ) { if ( ai[ i ] GetEntNum() != num ) continue; Line( level.player.origin, ai[ i ].origin, ( 0.2, 0.3, 1.0 ) ); return; } #/ } debugDvars() { /# create_dvar( "chasecam", "0" ); create_dvar( "viewfx", "" ); create_dvar( "debug_badpath_time", 5000 ); create_dvar( "debug_hud", "" ); create_dvar( "vehicle_info", 0 ); create_dvar( "getdot", 0 ); if ( GetDvar( "level_transition_test" ) == "" ) SetDvar( "level_transition_test", "off" ); if ( GetDvar( "level_completeall" ) == "" ) SetDvar( "level_completeall", "off" ); if ( GetDvar( "level_clear_all" ) == "" ) SetDvar( "level_clear_all", "off" ); waittillframeend;// for vars to get init'd elsewhere setEmptyDvar( "debug_accuracypreview", "off" ); if ( GetDebugDvar( "debug_lookangle" ) == "" ) SetDvar( "debug_lookangle", "off" ); if ( GetDebugDvar( "debug_grenademiss" ) == "" ) SetDvar( "debug_grenademiss", "off" ); if ( GetDebugDvar( "debug_enemypos" ) == "" ) SetDvar( "debug_enemypos", "-1" ); if ( GetDebugDvar( "debug_dotshow" ) == "" ) SetDvar( "debug_dotshow", "-1" ); if ( GetDebugDvar( "debug_stopenemypos" ) == "" ) SetDvar( "debug_stopenemypos", "-1" ); if ( GetDebugDvar( "debug_replayenemypos" ) == "" ) SetDvar( "debug_replayenemypos", "-1" ); if ( GetDebugDvar( "debug_tag" ) == "" ) SetDvar( "debug_tag", "" ); if ( GetDebugDvar( "debug_arrivals" ) == "" ) SetDvar( "debug_arrivals", "" ); if ( GetDebugDvar( "debug_chatlook" ) == "" ) SetDvar( "debug_chatlook", "" ); if ( GetDebugDvar( "debug_vehicletag" ) == "" ) SetDvar( "debug_vehicletag", "" ); if ( GetDebugDvar( "debug_colorfriendlies" ) == "" ) SetDvar( "debug_colorfriendlies", "off" ); if ( GetDebugDvar( "debug_animreach" ) == "" ) SetDvar( "debug_animreach", "off" ); if ( GetDebugDvar( "debug_hatmodel" ) == "" ) SetDvar( "debug_hatmodel", "on" ); if ( GetDebugDvar( "debug_trace" ) == "" ) SetDvar( "debug_trace", "off" ); level.debug_badpath = false; if ( GetDebugDvar( "debug_badpath" ) == "" ) SetDvar( "debug_badpath", "off" ); if ( GetDebugDvar( "anim_lastsightpos" ) == "" ) SetDvar( "debug_lastsightpos", "off" ); if ( GetDebugDvar( "debug_dog_sound" ) == "" ) SetDvar( "debug_dog_sound", "" ); if ( GetDvar( "debug_nuke" ) == "" ) SetDvar( "debug_nuke", "off" ); if ( GetDebugDvar( "debug_deathents" ) == "on" ) SetDvar( "debug_deathents", "off" ); if ( GetDvar( "debug_jump" ) == "" ) SetDvar( "debug_jump", "" ); if ( GetDvar( "debug_hurt" ) == "" ) SetDvar( "debug_hurt", "" ); if ( GetDebugDvar( "animsound" ) == "" ) SetDvar( "animsound", "off" ); if ( GetDvar( "tag" ) == "" ) SetDvar( "tag", "" ); for ( i = 1; i <= level.animsound_hudlimit; i++ ) { if ( GetDvar( "tag" + i ) == "" ) SetDvar( "tag" + i, "" ); } if ( GetDebugDvar( "animsound_save" ) == "" ) SetDvar( "animsound_save", "" ); if ( GetDebugDvar( "debug_depth" ) == "" ) SetDvar( "debug_depth", "" ); if ( GetDebugDvar( "debug_colornodes" ) == "" ) SetDvar( "debug_colornodes", "" ); if ( GetDebugDvar( "debug_reflection" ) == "" ) SetDvar( "debug_reflection", "0" ); if ( GetDebugDvar( "debug_fxlighting" ) == "" ) SetDvar( "debug_fxlighting", "0" ); level.last_threat_debug = -23430; if ( GetDebugDvar( "debug_threat" ) == "" ) SetDvar( "debug_threat", "-1" ); PreCacheModel( "test_sphere_silver" ); level._effect[ "lighting_fraction" ] = LoadFX( "test/lighting_fraction" ); red = ( 1, 0, 0 ); blue = ( 0, 0, 1 ); yellow = ( 1, 1, 0 ); cyan = ( 0, 1, 1 ); green = ( 0, 1, 0 ); purple = ( 1, 0, 1 ); orange = ( 1, 0.5, 0 ); level.color_debug[ "r" ] = red; level.color_debug[ "b" ] = blue; level.color_debug[ "y" ] = yellow; level.color_debug[ "c" ] = cyan; level.color_debug[ "g" ] = green; level.color_debug[ "p" ] = purple; level.color_debug[ "o" ] = orange; level.debug_reflection = 0; level.debug_fxlighting = 0; //if( GetDvar( "debug_character_count" ) == "" ) // SetDvar( "debug_character_count", "off" ); // thread hatmodel(); //thread debug_character_count(); noAnimscripts = GetDvar( "debug_noanimscripts" ) == "on"; for ( ;; ) { if ( GetDebugDvarInt( "getdot" ) > 0 ) { draw_dot_for_ent( GetDebugDvarInt( "getdot" ) ); } if ( GetDvarInt( "viewfx" ) ) { viewfx(); SetDvar( "viewfx", "" ); } if ( GetDvar( "debug_hud" ) != "" ) { if ( IsDefined( level.amb_hud ) ) { foreach ( hud_array in level.amb_hud ) { foreach ( hud in hud_array ) { hud Destroy(); } } level.amb_hud = undefined; } if ( IsDefined( level.bcs_hud ) ) { level.bcs_hud Destroy(); level.bcs_hud = undefined; } } if ( GetDebugDvar( "debug_jump" ) != "" ) debugJump( GetDebugDvarInt( "debug_jump" ) ); if ( GetDvarInt( "chasecam" ) ) chaseCam( GetDvarInt( "chasecam" ) ); if ( GetDebugDvar( "debug_tag" ) != "" ) { thread viewTag( "ai", GetDebugDvar( "debug_tag" ) ); if ( GetDebugDvarInt( "debug_enttag" ) > 0 ) thread drawEntTag( GetDebugDvarInt( "debug_enttag" ) ); } if ( GetDebugDvar( "debug_colornodes" ) == "on" ) thread debug_colornodes(); if ( GetDebugDvar( "debug_replayenemypos" ) == "on" ) thread debug_enemyPosReplay(); thread debug_animSound(); if ( GetDvar( "tag" ) != "" ) thread debug_animSoundTagSelected(); for ( i = 1; i <= level.animsound_hudlimit; i++ ) { if ( GetDvar( "tag" + i ) != "" ) thread debug_animSoundTag( i ); } if ( GetDebugDvar( "animsound_save" ) != "" ) thread debug_animSoundSave(); if ( GetDvar( "debug_nuke" ) != "off" ) { thread debug_nuke(); } if ( GetDebugDvar( "debug_misstime" ) == "on" ) { SetDvar( "debug_misstime", "start" ); array_thread( GetAIArray(), ::debugMisstime ); } else if ( GetDebugDvar( "debug_misstime" ) == "off" ) { SetDvar( "debug_misstime", "start" ); array_thread( GetAIArray(), ::debugMisstimeOff ); } if ( GetDebugDvar( "debug_deathents" ) == "on" ) thread deathspawnerPreview(); if ( GetDvar( "debug_hurt" ) == "on" ) { SetDvar( "debug_hurt", "off" ); level.player DoDamage( 50, ( 324234, 3423423, 2323 ) ); } if ( GetDvar( "debug_hurt" ) == "on" ) { SetDvar( "debug_hurt", "off" ); level.player DoDamage( 50, ( 324234, 3423423, 2323 ) ); } if ( GetDvar( "debug_depth" ) == "on" ) { thread fogcheck(); } if ( GetDebugDvarInt( "vehicle_info" ) ) { random_noteworthy = RandomInt( 34234 ) + "_" + RandomInt( 23423 ); SetDvar( "vehicle_info", 0 ); vehicles = GetEntArray( "script_vehicle", "code_classname" ); foreach ( vehicle in vehicles ) { if ( !isdefined( vehicle ) ) continue; if ( IsSpawner( vehicle ) ) continue; vehicle print_vehicle_info( random_noteworthy ); } } if ( GetDebugDvar( "debug_threat" ) != "-1" ) { debugThreat(); } level.debug_badpath = GetDebugDvar( "debug_badpath" ) == "on"; if ( GetDebugDvarInt( "debug_enemypos" ) != -1 ) { thread debug_enemypos( GetDebugDvarInt( "debug_enemypos" ) ); SetDvar( "debug_enemypos", "-1" ); } if ( GetDebugDvarInt( "debug_stopenemypos" ) != -1 ) { thread debug_stopenemypos( GetDebugDvarInt( "debug_stopenemypos" ) ); SetDvar( "debug_stopenemypos", "-1" ); } if ( !noAnimscripts && GetDvar( "debug_noanimscripts" ) == "on" ) { anim.defaultException = animscripts\init::infiniteLoop; noAnimscripts = true; } if ( noAnimscripts && GetDvar( "debug_noanimscripts" ) == "off" ) { anim.defaultException = animscripts\init::empty; anim notify( "new exceptions" ); noAnimscripts = false; } if ( GetDebugDvar( "debug_trace" ) == "on" ) { if ( !isdefined( level.traceStart ) ) thread showDebugTrace(); level.traceStart = level.player GetEye(); SetDvar( "debug_trace", "off" ); } debug_reflection(); debug_fxlighting(); wait( 0.05 ); } #/ } remove_reflection_objects() { /# if ( ( level.debug_reflection == 2 || level.debug_reflection == 3 ) && IsDefined( level.debug_reflection_objects ) ) { for ( i = 0; i < level.debug_reflection_objects.size; i++ ) { level.debug_reflection_objects[ i ] Delete(); } level.debug_reflection_objects = undefined; } if ( level.debug_reflection == 1 || level.debug_reflection == 3 ) { level.debug_reflectionobject Delete(); } #/ } create_reflection_objects() { /# reflection_locs = GetReflectionLocs(); for ( i = 0; i < reflection_locs.size; i++ ) { level.debug_reflection_objects[ i ] = Spawn( "script_model", reflection_locs[ i ] ); level.debug_reflection_objects[ i ] SetModel( "test_sphere_silver" ); } #/ } create_reflection_object() { /# level.debug_reflectionobject = Spawn( "script_model", level.player GetEye() + ( vector_multiply( AnglesToForward( level.player.angles ), 100 ) ) ); level.debug_reflectionobject SetModel( "test_sphere_silver" ); level.debug_reflectionobject.origin = level.player GetEye() + ( vector_multiply( AnglesToForward( level.player GetPlayerAngles() ), 100 ) ); level.debug_reflectionobject LinkTo( level.player ); thread debug_reflection_buttons(); #/ } debug_reflection() { /# if ( ( GetDebugDvar( "debug_reflection" ) == "2" && level.debug_reflection != 2 ) || ( GetDebugDvar( "debug_reflection" ) == "3" && level.debug_reflection != 3 ) ) { remove_reflection_objects(); if ( GetDebugDvar( "debug_reflection" ) == "2" ) { create_reflection_objects(); level.debug_reflection = 2; } else { create_reflection_objects(); create_reflection_object(); level.debug_reflection = 3; } } else if ( GetDebugDvar( "debug_reflection" ) == "1" && level.debug_reflection != 1 ) { remove_reflection_objects(); create_reflection_object(); level.debug_reflection = 1; } else if ( GetDebugDvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 ) { remove_reflection_objects(); level.debug_reflection = 0; } #/ } debug_reflection_buttons() { /# offset = 100; lastoffset = offset; offsetinc = 50; while ( GetDebugDvar( "debug_reflection" ) == "1" || GetDebugDvar( "debug_reflection" ) == "3" ) { if ( level.player ButtonPressed( "BUTTON_X" ) ) offset += offsetinc; if ( level.player ButtonPressed( "BUTTON_Y" ) ) offset -= offsetinc; if ( offset > 1000 ) offset = 1000; if ( offset < 64 ) offset = 64; // if( offset!=lastoffset ) // { level.debug_reflectionobject Unlink(); level.debug_reflectionobject.origin = level.player GetEye() + ( vector_multiply( AnglesToForward( level.player GetPlayerAngles() ), offset ) ); lastoffset = offset; level.debug_reflectionobject LinkTo( level.player ); // } wait .05; } #/ } remove_fxlighting_object() { /# if ( level.debug_fxlighting == 1 ) { level.debug_fxlightingobject Delete(); } #/ } create_fxlighting_object() { /# level.debug_fxlightingobject = Spawn( "script_model", level.player GetEye() + ( vector_multiply( AnglesToForward( level.player.angles ), 100 ) ) ); level.debug_fxlightingobject SetModel( "tag_origin" ); level.debug_fxlightingobject.origin = level.player GetEye() + ( vector_multiply( AnglesToForward( level.player GetPlayerAngles() ), 100 ) ); level.debug_fxlightingobject LinkTo( level.player ); level.debug_fxlightingobject thread play_fxlighting_fx(); thread debug_fxlighting_buttons(); #/ } play_fxlighting_fx() { self endon( "death" ); while ( true ) { PlayFXOnTag( getfx( "lighting_fraction" ), self, "tag_origin" ); wait( 0.1 ); } } debug_fxlighting() { /# if ( GetDebugDvar( "debug_fxlighting" ) == "1" && level.debug_fxlighting != 1 ) { create_fxlighting_object(); level.debug_fxlighting = 1; } else if ( GetDebugDvar( "debug_fxlighting" ) == "0" && level.debug_fxlighting != 0 ) { remove_fxlighting_object(); level.debug_fxlighting = 0; } #/ } debug_fxlighting_buttons() { /# offset = 100; lastoffset = offset; offsetinc = 50; while ( GetDebugDvar( "debug_fxlighting" ) == "1" || GetDebugDvar( "debug_fxlighting" ) == "3" ) { if ( level.player ButtonPressed( "BUTTON_X" ) ) offset += offsetinc; if ( level.player ButtonPressed( "BUTTON_Y" ) ) offset -= offsetinc; if ( offset > 1000 ) offset = 1000; if ( offset < 64 ) offset = 64; level.debug_fxlightingobject Unlink(); level.debug_fxlightingobject.origin = level.player GetEye() + ( vector_multiply( AnglesToForward( level.player GetPlayerAngles() ), offset ) ); lastoffset = offset; level.debug_fxlightingobject LinkTo( level.player ); wait .05; } #/ } showDebugTrace() { startOverride = undefined; endOverride = undefined; startOverride = ( 15.1859, -12.2822, 4.071 ); endOverride = ( 947.2, -10918, 64.9514 ); Assert( !isdefined( level.traceEnd ) ); for ( ;; ) { wait( 0.05 ); start = startOverride; end = endOverride; if ( !isdefined( startOverride ) ) start = level.traceStart; if ( !isdefined( endOverride ) ) end = level.player GetEye(); trace = BulletTrace( start, end, false, undefined ); Line( start, trace[ "position" ], ( 0.9, 0.5, 0.8 ), 0.5 ); } } hatmodel() { /# for ( ;; ) { if ( GetDebugDvar( "debug_hatmodel" ) == "off" ) return; noHat = []; ai = GetAIArray(); for ( i = 0; i < ai.size; i++ ) { if ( IsDefined( ai[ i ].hatmodel ) ) continue; alreadyKnown = false; for ( p = 0; p < noHat.size; p++ ) { if ( noHat[ p ] != ai[ i ].classname ) continue; alreadyKnown = true; break; } if ( !alreadyKnown ) noHat[ noHat.size ] = ai[ i ].classname; } if ( noHat.size ) { PrintLn( " " ); PrintLn( "The following AI have no Hatmodel, so helmets can not pop off on head-shot death:" ); for ( i = 0; i < noHat.size; i++ ) PrintLn( "Classname: ", noHat[ i ] ); PrintLn( "To disable hatModel spam, type debug_hatmodel off" ); } wait( 15 ); } #/ } debug_character_count() { //drones drones = NewHudElem(); drones.alignX = "left"; drones.alignY = "middle"; drones.x = 10; drones.y = 100; // drones: [&&1] drones.label = &"DEBUG_DRONES"; drones.alpha = 0; //allies allies = NewHudElem(); allies.alignX = "left"; allies.alignY = "middle"; allies.x = 10; allies.y = 115; // allies: [&&1] allies.label = &"DEBUG_ALLIES"; allies.alpha = 0; //allies axis = NewHudElem(); axis.alignX = "left"; axis.alignY = "middle"; axis.x = 10; axis.y = 130; // axis: [&&1] axis.label = &"DEBUG_AXIS"; axis.alpha = 0; //vehicles vehicles = NewHudElem(); vehicles.alignX = "left"; vehicles.alignY = "middle"; vehicles.x = 10; vehicles.y = 145; // drones: [&&1] vehicles.label = &"DEBUG_VEHICLES"; vehicles.alpha = 0; //total total = NewHudElem(); total.alignX = "left"; total.alignY = "middle"; total.x = 10; total.y = 160; // total: [&&1] total.label = &"DEBUG_TOTAL"; total.alpha = 0; lastdvar = "off"; for ( ;; ) { dvar = GetDvar( "debug_character_count" ); if ( dvar == "off" ) { if ( dvar != lastdvar ) { drones.alpha = 0; allies.alpha = 0; axis.alpha = 0; vehicles.alpha = 0; total.alpha = 0; lastdvar = dvar; } wait .25; continue; } else { if ( dvar != lastdvar ) { drones.alpha = 1; allies.alpha = 1; axis.alpha = 1; vehicles.alpha = 1; total.alpha = 1; lastdvar = dvar; } } //drones count_drones = GetEntArray( "drone", "targetname" ).size; drones SetValue( count_drones ); //allies count_allies = GetAIArray( "allies" ).size; allies SetValue( count_allies ); //axis count_axis = GetAIArray( "bad_guys" ).size; axis SetValue( count_axis ); vehicles SetValue( GetEntArray( "script_vehicle", "classname" ).size ); //total total SetValue( count_drones + count_allies + count_axis ); wait 0.25; } } nuke() { if ( !self.damageshield ) self Kill( ( 0, 0, -500 ), level.player, level.player ); } debug_nuke() { /# dvar = GetDvar( "debug_nuke" ); if ( dvar == "on" ) { ai = GetAISpeciesArray( "bad_guys", "all" ); for ( i = 0; i < ai.size; i++ ) ai[ i ] nuke(); } else if ( dvar == "ai" ) { ai = GetAIArray( "bad_guys" ); for ( i = 0; i < ai.size; i++ ) ai[ i ] nuke(); } else if ( dvar == "dogs" ) { ai = GetAISpeciesArray( "bad_guys", "dog" ); for ( i = 0; i < ai.size; i++ ) ai[ i ] nuke(); } SetDvar( "debug_nuke", "off" ); #/ } debug_missTime() { } camera() { wait( 0.05 ); cameras = GetEntArray( "camera", "targetname" ); for ( i = 0; i < cameras.size; i++ ) { ent = GetEnt( cameras[ i ].target, "targetname" ); cameras[ i ].origin2 = ent.origin; cameras[ i ].angles = VectorToAngles( ent.origin - cameras[ i ].origin ); } for ( ;; ) { /# if ( GetDebugDvar( "camera" ) != "on" ) { if ( GetDebugDvar( "camera" ) != "off" ) SetDvar( "camera", "off" ); wait( 1 ); continue; } #/ ai = GetAIArray( "axis" ); if ( !ai.size ) { freePlayer(); wait( 0.5 ); continue; } cameraWithEnemy = []; for ( i = 0; i < cameras.size; i++ ) { for ( p = 0; p < ai.size; p++ ) { if ( Distance( cameras[ i ].origin, ai[ p ].origin ) > 256 ) continue; cameraWithEnemy[ cameraWithEnemy.size ] = cameras[ i ]; break; } } if ( !cameraWithEnemy.size ) { freePlayer(); wait( 0.5 ); continue; } cameraWithPlayer = []; for ( i = 0; i < cameraWithEnemy.size; i++ ) { camera = cameraWithEnemy[ i ]; start = camera.origin2; end = camera.origin; difference = VectorToAngles( ( end[ 0 ], end[ 1 ], end[ 2 ] ) - ( start[ 0 ], start[ 1 ], start[ 2 ] ) ); angles = ( 0, difference[ 1 ], 0 ); forward = AnglesToForward( angles ); difference = VectorNormalize( end - level.player.origin ); dot = VectorDot( forward, difference ); if ( dot < 0.85 ) continue; cameraWithPlayer[ cameraWithPlayer.size ] = camera; } if ( !cameraWithPlayer.size ) { freePlayer(); wait( 0.5 ); continue; } dist = Distance( level.player.origin, cameraWithPlayer[ 0 ].origin ); newcam = cameraWithPlayer[ 0 ]; for ( i = 1; i < cameraWithPlayer.size; i++ ) { newdist = Distance( level.player.origin, cameraWithPlayer[ i ].origin ); if ( newdist > dist ) continue; newcam = cameraWithPlayer[ i ]; dist = newdist; } setPlayerToCamera( newcam ); wait( 3 ); } } freePlayer() { SetDvar( "cl_freemove", "0" ); } setPlayerToCamera( camera ) { SetDvar( "cl_freemove", "2" ); SetDebugAngles( camera.angles ); SetDebugOrigin( camera.origin + ( 0, 0, -60 ) ); } /* waitframe(); thread anglescheck(); if( !isdefined( level.camera ) ) return; // wait( 1 ); mintime = 0; linker = false; while( GetDvar( "camera" ) == "on" ) { for( i=0;i timer - 8000 ) if(( GetTime() > mintime ) &&( Distance( level.player GetOrigin(), oldorigin ) > 128 ) ) { mintime = GetTime() + 500000; timer = mintime; } if( GetDvar( "camera" ) != "on" ) break; if( GetDvar( "nextcamera" ) == "1" ) break; if( GetDvar( "lastcamera" ) == "1" ) { i-=2; if( i < 0 ) i+=level.camera.size; break; } waitframe(); } if(( GetDvar( "nextcamera" ) == "1" ) ||( GetDvar( "lastcamera" ) == "1" ) ) mintime = GetTime() + 500000; } } if( linker ) level.player Unlink(); } */ anglescheck() { while ( 1 ) { if ( GetDvar( "angles", "0" ) == "1" ) { PrintLn( "origin " + level.player GetOrigin() ); PrintLn( "angles " + level.player.angles ); SetDvar( "angles", "0" ); } wait( 1 ); } } dolly() { if ( !isdefined( level.dollyTime ) ) level.dollyTime = 5; SetDvar( "dolly", "" ); thread dollyStart(); thread dollyEnd(); thread dollyGo(); } dollyStart() { while ( 1 ) { if ( GetDvar( "dolly" ) == "start" ) { level.dollystart = level.player.origin; SetDvar( "dolly", "" ); } wait( 1 ); } } dollyEnd() { while ( 1 ) { if ( GetDvar( "dolly" ) == "end" ) { level.dollyend = level.player.origin; SetDvar( "dolly", "" ); } wait( 1 ); } } dollyGo() { while ( 1 ) { wait( 1 ); if ( GetDvar( "dolly" ) == "go" ) { SetDvar( "dolly", "" ); if ( !isdefined( level.dollystart ) ) { PrintLn( "NO Dolly Start!" ); continue; } if ( !isdefined( level.dollyend ) ) { PrintLn( "NO Dolly End!" ); continue; } org = Spawn( "script_origin", ( 0, 0, 0 ) ); org.origin = level.dollystart; level.player SetOrigin( org.origin ); level.player LinkTo( org ); org MoveTo( level.dollyend, level.dollyTime ); wait( level.dollyTime ); org Delete(); } } } deathspawnerPreview() { waittillframeend; for ( i = 0; i < 50; i++ ) { if ( !isdefined( level.deathspawnerents[ i ] ) ) continue; array = level.deathspawnerents[ i ]; for ( p = 0; p < array.size; p++ ) { ent = array[ p ]; if ( IsDefined( ent.truecount ) ) Print3d( ent.origin, i + ": " + ent.truecount, ( 0, 0.8, 0.6 ), 5 ); else Print3d( ent.origin, i + ": " + ".", ( 0, 0.8, 0.6 ), 5 ); } } } lastSightPosWatch() { /# for ( ;; ) { wait( 0.05 ); num = GetDvarInt( "lastsightpos" ); if ( !num ) continue; guy = undefined; ai = GetAIArray(); for ( i = 0; i < ai.size; i++ ) { if ( ai[ i ] GetEntNum() != num ) continue; guy = ai[ i ]; break; } if ( !isalive( guy ) ) continue; if ( guy animscripts\utility::hasEnemySightPos() ) org = guy animscripts\utility::getEnemySightPos(); else org = undefined; for ( ;; ) { newnum = GetDvarInt( "lastsightpos" ); if ( num != newnum ) break; if ( ( IsAlive( guy ) ) && ( guy animscripts\utility::hasEnemySightPos() ) ) org = guy animscripts\utility::getEnemySightPos(); if ( !isdefined( org ) ) { wait( 0.05 ); continue; } range = 10; color = ( 0.2, 0.9, 0.8 ); Line( org + ( 0, 0, range ), org + ( 0, 0, range * -1 ), color, 1.0 ); Line( org + ( range, 0, 0 ), org + ( range * -1, 0, 0 ), color, 1.0 ); Line( org + ( 0, range, 0 ), org + ( 0, range * -1, 0 ), color, 1.0 ); wait( 0.05 ); } } #/ } watchMinimap() { PreCacheItem( "defaultweapon" ); while ( 1 ) { updateMinimapSetting(); wait .25; } } updateMinimapSetting() { // use 0 for no required map aspect ratio. requiredMapAspectRatio = GetDvarFloat( "scr_requiredMapAspectRatio", 1 ); if ( !isdefined( level.minimapheight ) ) { SetDvar( "scr_minimap_height", "0" ); level.minimapheight = 0; } minimapheight = GetDvarFloat( "scr_minimap_height" ); if ( minimapheight != level.minimapheight ) { if ( IsDefined( level.minimaporigin ) ) { level.minimapplayer Unlink(); level.minimaporigin Delete(); level notify( "end_draw_map_bounds" ); } if ( minimapheight > 0 ) { level.minimapheight = minimapheight; player = level.player; corners = GetEntArray( "minimap_corner", "targetname" ); if ( corners.size == 2 ) { viewpos = ( corners[ 0 ].origin + corners[ 1 ].origin ); viewpos = ( viewpos[ 0 ] * .5, viewpos[ 1 ] * .5, viewpos[ 2 ] * .5 ); maxcorner = ( corners[ 0 ].origin[ 0 ], corners[ 0 ].origin[ 1 ], viewpos[ 2 ] ); mincorner = ( corners[ 0 ].origin[ 0 ], corners[ 0 ].origin[ 1 ], viewpos[ 2 ] ); if ( corners[ 1 ].origin[ 0 ] > corners[ 0 ].origin[ 0 ] ) maxcorner = ( corners[ 1 ].origin[ 0 ], maxcorner[ 1 ], maxcorner[ 2 ] ); else mincorner = ( corners[ 1 ].origin[ 0 ], mincorner[ 1 ], mincorner[ 2 ] ); if ( corners[ 1 ].origin[ 1 ] > corners[ 0 ].origin[ 1 ] ) maxcorner = ( maxcorner[ 0 ], corners[ 1 ].origin[ 1 ], maxcorner[ 2 ] ); else mincorner = ( mincorner[ 0 ], corners[ 1 ].origin[ 1 ], mincorner[ 2 ] ); viewpostocorner = maxcorner - viewpos; viewpos = ( viewpos[ 0 ], viewpos[ 1 ], viewpos[ 2 ] + minimapheight ); origin = Spawn( "script_origin", player.origin ); northvector = ( Cos( GetNorthYaw() ), Sin( GetNorthYaw() ), 0 ); eastvector = ( northvector[ 1 ], 0 - northvector[ 0 ], 0 ); disttotop = VectorDot( northvector, viewpostocorner ); if ( disttotop < 0 ) disttotop = 0 - disttotop; disttoside = VectorDot( eastvector, viewpostocorner ); if ( disttoside < 0 ) disttoside = 0 - disttoside; // extend map bounds to meet the required aspect ratio if ( requiredMapAspectRatio > 0 ) { mapAspectRatio = disttoside / disttotop; if ( mapAspectRatio < requiredMapAspectRatio ) { incr = requiredMapAspectRatio / mapAspectRatio; disttoside *= incr; addvec = vecscale( eastvector, VectorDot( eastvector, maxcorner - viewpos ) * ( incr - 1 ) ); mincorner -= addvec; maxcorner += addvec; } else { incr = mapAspectRatio / requiredMapAspectRatio; disttotop *= incr; addvec = vecscale( northvector, VectorDot( northvector, maxcorner - viewpos ) * ( incr - 1 ) ); mincorner -= addvec; maxcorner += addvec; } } if ( level.console ) { aspectratioguess = 16.0 / 9.0; // .8 would be .75 but it needs to be bigger because of safe area angleside = 2 * ATan( disttoside * .8 / minimapheight ); angletop = 2 * ATan( disttotop * aspectratioguess * .8 / minimapheight ); } else { aspectratioguess = 4.0 / 3.0; // multiply by 1.05 to give some margin to work with angleside = 2 * ATan( disttoside * 1.05 / minimapheight ); angletop = 2 * ATan( disttotop * aspectratioguess * 1.05 / minimapheight ); } if ( angleside > angletop ) angle = angleside; else angle = angletop; znear = minimapheight - 1000; if ( znear < 16 ) znear = 16; if ( znear > 10000 ) znear = 10000; player PlayerLinkToAbsolute( origin ); origin.origin = viewpos + ( 0, 0, -62 ); origin.angles = ( 90, GetNorthYaw(), 0 ); // because some guns can mess up the field of view, require default weapon player GiveWeapon( "defaultweapon" ); SetSavedDvar( "cg_fov", angle ); // Internal Dvar set: cg_drawgun - Internal Dvars cannot be changed by script. Use 'setsaveddvar' to alter SAVED internal dvars // setsaveddvar can only be called on dvars with the SAVED flag set // Error: "cg_drawgun" is not a valid dvar to set using setclientdvar level.minimapplayer = player; level.minimaporigin = origin; thread drawMiniMapBounds( viewpos, mincorner, maxcorner ); } else PrintLn( "^1Error: There are not exactly 2 \"minimap_corner\" entities in the level." ); } } } getchains() { chainarray = []; chainarray = GetEntArray( "minimap_line", "script_noteworthy" ); array = []; for ( i = 0; i < chainarray.size; i++ ) { array[ i ] = chainarray[ i ] getchain(); } return array; } getchain() { array = []; ent = self; while ( IsDefined( ent ) ) { array[ array.size ] = ent; if ( !isdefined( ent ) || !isdefined( ent.target ) ) break; ent = GetEnt( ent.target, "targetname" ); if ( IsDefined( ent ) && ent == array[ 0 ] ) { array[ array.size ] = ent; break; } } originarray = []; for ( i = 0; i < array.size; i++ ) originarray[ i ] = array[ i ].origin; return originarray; } vecscale( vec, scalar ) { return( vec[ 0 ] * scalar, vec[ 1 ] * scalar, vec[ 2 ] * scalar ); } drawMiniMapBounds( viewpos, mincorner, maxcorner ) { level notify( "end_draw_map_bounds" ); level endon( "end_draw_map_bounds" ); viewheight = ( viewpos[ 2 ] - maxcorner[ 2 ] ); diaglen = Length( mincorner - maxcorner ); mincorneroffset = ( mincorner - viewpos ); mincorneroffset = VectorNormalize( ( mincorneroffset[ 0 ], mincorneroffset[ 1 ], 0 ) ); mincorner = mincorner + vecscale( mincorneroffset, diaglen * 1 / 800 * 0 ); maxcorneroffset = ( maxcorner - viewpos ); maxcorneroffset = VectorNormalize( ( maxcorneroffset[ 0 ], maxcorneroffset[ 1 ], 0 ) ); maxcorner = maxcorner + vecscale( maxcorneroffset, diaglen * 1 / 800 * 0 ); north = ( Cos( GetNorthYaw() ), Sin( GetNorthYaw() ), 0 ); diagonal = maxcorner - mincorner; side = vecscale( north, VectorDot( diagonal, north ) ); sidenorth = vecscale( north, abs( VectorDot( diagonal, north ) ) ); corner0 = mincorner; corner1 = mincorner + side; corner2 = maxcorner; corner3 = maxcorner - side; toppos = vecscale( mincorner + maxcorner, .5 ) + vecscale( sidenorth, .51 ); textscale = diaglen * .003; chains = getchains(); while ( 1 ) { Line( corner0, corner1 ); Line( corner1, corner2 ); Line( corner2, corner3 ); Line( corner3, corner0 ); array_levelthread( chains, ::plot_points ); Print3d( toppos, "This Side Up", ( 1, 1, 1 ), 1, textscale ); wait .05; } } islookingatorigin( origin ) { normalvec = VectorNormalize( origin - self GetShootAtPos() ); veccomp = VectorNormalize( ( origin - ( 0, 0, 24 ) ) - self GetShootAtPos() ); insidedot = VectorDot( normalvec, veccomp ); anglevec = AnglesToForward( self GetPlayerAngles() ); vectordot = VectorDot( anglevec, normalvec ); if ( vectordot > insidedot ) return true; else return false; } debug_colornodes() { wait( 0.05 ); ai = GetAIArray(); array = []; array[ "axis" ] = []; array[ "allies" ] = []; array[ "neutral" ] = []; for ( i = 0; i < ai.size; i++ ) { guy = ai[ i ]; if ( !isdefined( guy.currentColorCode ) ) continue; array[ guy.team ][ guy.currentColorCode ] = true; color = ( 1, 1, 1 ); if ( IsDefined( guy.script_forcecolor ) ) color = level.color_debug[ guy.script_forcecolor ]; Print3d( guy.origin + ( 0, 0, 50 ), guy.currentColorCode, color, 1, 1 ); // axis dont do forcecolor behavior, they do follow the leader for force color if ( guy.team == "axis" ) continue; guy try_to_draw_line_to_node(); } draw_colorNodes( array, "allies" ); draw_colorNodes( array, "axis" ); } draw_colorNodes( array, team ) { keys = GetArrayKeys( array[ team ] ); for ( i = 0; i < keys.size; i++ ) { color = ( 1, 1, 1 ); // use the first letter of the key as the color color = level.color_debug[ GetSubStr( keys[ i ], 0, 1 ) ]; if ( IsDefined( level.colorNodes_debug_array[ team ][ keys[ i ] ] ) ) { teamArray = level.colorNodes_debug_array[ team ][ keys[ i ] ]; for ( p = 0; p < teamArray.size; p++ ) { Print3d( teamArray[ p ].origin, "N-" + keys[ i ], color, 1, 1 ); } } } } get_team_substr() { if ( self.team == "allies" ) { if ( !isdefined( self.node.script_color_allies ) ) return; return self.node.script_color_allies; } if ( self.team == "axis" ) { if ( !isdefined( self.node.script_color_axis ) ) return; return self.node.script_color_axis; } } try_to_draw_line_to_node() { if ( !isdefined( self.node ) ) return; if ( !isdefined( self.script_forcecolor ) ) return; substr = get_team_substr(); if ( !isdefined( substr ) ) return; if ( !issubstr( substr, self.script_forcecolor ) ) return; Line( self.origin + ( 0, 0, 64 ), self.node.origin, level.color_debug[ self.script_forcecolor ] ); } fogcheck() { if ( GetDvar( "depth_close" ) == "" ) SetDvar( "depth_close", "0" ); if ( GetDvar( "depth_far" ) == "" ) SetDvar( "depth_far", "1500" ); close = GetDvarInt( "depth_close" ); far = GetDvarInt( "depth_far" ); SetExpFog( close, far, 1, 1, 1, 1, 0 ); } debugThreat() { // if( GetTime() > level.last_threat_debug + 1000 ) { level.last_threat_debug = GetTime(); thread debugThreatCalc(); } } debugThreatCalc() { // debug the threatbias from entities towards the specified ent /# ai = GetAIArray(); entnum = GetDebugDvarInt( "debug_threat" ); entity = undefined; if ( entnum == 0 ) { entity = level.player; } else { for ( i = 0; i < ai.size; i++ ) { if ( entnum != ai[ i ] GetEntNum() ) continue; entity = ai[ i ]; break; } } if ( !isalive( entity ) ) return; entityGroup = entity GetThreatBiasGroup(); array_thread( ai, ::displayThreat, entity, entityGroup ); level.player thread displayThreat( entity, entityGroup ); #/ } displayThreat( entity, entityGroup ) { if ( self.team == entity.team ) return; selfthreat = 0; selfthreat += self.threatBias; threat = 0; threat += entity.threatBias; myGroup = undefined; if ( IsDefined( entityGroup ) ) { myGroup = self GetThreatBiasGroup(); if ( IsDefined( myGroup ) ) { threat += GetThreatBias( entityGroup, myGroup ); selfThreat += GetThreatBias( myGroup, entityGroup ); } } if ( entity.ignoreme || threat < -900000 ) threat = "Ignore"; if ( self.ignoreme || selfthreat < -900000 ) selfthreat = "Ignore"; timer = 1 * 20; col = ( 1, 0.5, 0.2 ); col2 = ( 0.2, 0.5, 1 ); pacifist = !isplayer( self ) && self.pacifist; for ( i = 0; i <= timer; i++ ) { Print3d( self.origin + ( 0, 0, 65 ), "Him to Me:", col, 3 ); Print3d( self.origin + ( 0, 0, 50 ), threat, col, 5 ); if ( IsDefined( entityGroup ) ) { Print3d( self.origin + ( 0, 0, 35 ), entityGroup, col, 2 ); } Print3d( self.origin + ( 0, 0, 15 ), "Me to Him:", col2, 3 ); Print3d( self.origin + ( 0, 0, 0 ), selfThreat, col2, 5 ); if ( IsDefined( mygroup ) ) { Print3d( self.origin + ( 0, 0, -15 ), mygroup, col2, 2 ); } if ( pacifist ) { Print3d( self.origin + ( 0, 0, 25 ), "( Pacifist )", col2, 5 ); } wait( 0.05 ); } } debugColorFriendlies() { level.debug_color_friendlies = []; level.debug_color_huds = []; for ( ;; ) { level waittill( "updated_color_friendlies" ); draw_color_friendlies(); } } draw_color_friendlies() { level endon( "updated_color_friendlies" ); keys = GetArrayKeys( level.debug_color_friendlies ); colored_friendlies = []; colors = []; colors[ colors.size ] = "r"; colors[ colors.size ] = "o"; colors[ colors.size ] = "y"; colors[ colors.size ] = "g"; colors[ colors.size ] = "c"; colors[ colors.size ] = "b"; colors[ colors.size ] = "p"; rgb = get_script_palette(); for ( i = 0; i < colors.size; i++ ) { colored_friendlies[ colors[ i ] ] = 0; } for ( i = 0; i < keys.size; i++ ) { color = level.debug_color_friendlies[ keys[ i ] ]; colored_friendlies[ color ]++; } for ( i = 0; i < level.debug_color_huds.size; i++ ) { level.debug_color_huds[ i ] Destroy(); } level.debug_color_huds = []; /# if ( GetDebugDvar( "debug_colorfriendlies" ) != "on" ) return; #/ x = 15; y = 365; offset_x = 25; offset_y = 25; for ( i = 0; i < colors.size; i++ ) { if ( colored_friendlies[ colors[ i ] ] <= 0 ) continue; for ( p = 0; p < colored_friendlies[ colors[ i ] ]; p++ ) { overlay = NewHudElem(); overlay.x = x + 25 * p; overlay.y = y; overlay SetShader( "white", 16, 16 ); overlay.alignX = "left"; overlay.alignY = "bottom"; overlay.alpha = 1; overlay.color = rgb[ colors[ i ] ]; level.debug_color_huds[ level.debug_color_huds.size ] = overlay; } y += offset_y; } } playerNode() { for ( ;; ) { if ( IsDefined( level.player.node ) ) Print3d( level.player.node.origin + ( 0, 0, 25 ), "P-Node", ( 0.3, 1, 1 ), 1 ); wait( 0.05 ); } } drawUsers() { if ( IsAlive( self.color_user ) ) { Line( self.origin + ( 0, 0, 35 ), self.color_user.origin + ( 0, 0, 35 ), ( 1, 1, 1 ), 1.0 ); Print3d( self.origin + ( 0, 0, -25 ), "in-use", ( 1, 1, 1 ), 1, 1 ); } } debuggoalpos() { for ( ;; ) { ai = GetAIArray(); array_thread( ai, ::view_goal_pos ); wait( 0.05 ); } } view_goal_pos() { if ( !isdefined( self.goalpos ) ) return; Line( self.origin + ( 0, 0, 35 ), self.goalpos + ( 0, 0, 35 ), ( 1, 1, 1 ), 1.0 ); } colordebug() { wait( 0.5 ); col = []; col[ col.size ] = "r"; col[ col.size ] = "g"; col[ col.size ] = "b"; col[ col.size ] = "y"; col[ col.size ] = "o"; col[ col.size ] = "p"; col[ col.size ] = "c"; for ( ;; ) { for ( i = 0; i < col.size; i++ ) { color = level.currentColorForced[ "allies" ][ col[ i ] ]; if ( IsDefined( color ) ) draw_colored_nodes( color ); } wait( 0.05 ); } } draw_colored_nodes( color ) { nodes = level.arrays_of_colorCoded_nodes[ "allies" ][ color ]; array_thread( nodes, ::drawUsers ); } init_animSounds() { level.animSounds = []; level.animSound_aliases = []; waittillframeend;// now we know _load has run and the level.scr_notetracks have been defined waittillframeend;// wait one extra frameend because _audio.gso files waittillframeend and we have to start after them animnames = GetArrayKeys( level.scr_notetrack ); for ( i = 0; i < animnames.size; i++ ) { init_notetracks_for_animname( animnames[ i ] ); } animnames = GetArrayKeys( level.scr_animSound ); for ( i = 0; i < animnames.size; i++ ) { init_animSounds_for_animname( animnames[ i ] ); } } init_notetracks_for_animname( animname ) { // copy all the scr_notetracks into animsound_aliases so they show up properly // level.scr_notetrack[ animname ][ anime ][ notetrack ][ index ][ "dialog" ] = soundalias; foreach ( anime, anime_array in level.scr_notetrack[ animname ] ) { foreach ( notetrack, notetrack_array in anime_array ) { foreach ( scr_notetrack in notetrack_array ) { soundAlias = scr_notetrack[ "sound" ]; if ( !isdefined( soundAlias ) ) continue; level.animSound_aliases[ animname ][ anime ][ notetrack ][ "soundalias" ] = soundalias; if ( IsDefined( scr_notetrack[ "created_by_animSound" ] ) ) { level.animSound_aliases[ animname ][ anime ][ notetrack ][ "created_by_animSound" ] = true; } } } } } init_animSounds_for_animname( animname ) { // copy all the scr_animSounds into animsound_aliases so they show up properly animes = GetArrayKeys( level.scr_animSound[ animname ] ); for ( i = 0; i < animes.size; i++ ) { anime = animes[ i ]; soundalias = level.scr_animSound[ animname ][ anime ]; level.animSound_aliases[ animname ][ anime ][ "#" + anime ][ "soundalias" ] = soundalias; level.animSound_aliases[ animname ][ anime ][ "#" + anime ][ "created_by_animSound" ] = true; } } add_hud_line( x, y, msg ) { hudelm = NewHudElem(); hudelm.alignX = "left"; hudelm.alignY = "middle"; hudelm.x = x; hudelm.y = y; hudelm.alpha = 1; hudelm.fontScale = 1; hudelm.label = msg; level.animsound_hud_extralines[ level.animsound_hud_extralines.size ] = hudelm; return hudelm; } debug_animSound() { /# enabled = GetDebugDvar( "animsound" ) == "on"; if ( !isdefined( level.animsound_hud ) ) { if ( !enabled ) return; // init the related variables level.animsound_selected = 0; level.animsound_input = "none"; level.animsound_hud = []; level.animsound_hud_timer = []; level.animsound_hud_alias = []; level.animsound_hud_extralines = []; level.animsound_locked = false; level.animsound_locked_pressed = false; level.animsound_hud_animname = add_hud_line( -30, 180, "Actor: " ); level.animsound_hud_anime = add_hud_line( 100, 180, "Anim: " ); add_hud_line( 10, 190, "Notetrack or label" ); add_hud_line( -30, 190, "Elapsed" ); add_hud_line( -30, 160, "Del: Delete selected soundalias" ); add_hud_line( -30, 150, "F12: Lock selection" ); add_hud_line( -30, 140, "Add a soundalias with /tag alias or /tag# alias" ); level.animsound_hud_locked = add_hud_line( -30, 170, "*LOCKED*" ); level.animsound_hud_locked.alpha = 0; for ( i = 0; i < level.animsound_hudlimit; i++ ) { hudelm = NewHudElem(); hudelm.alignX = "left"; hudelm.alignY = "middle"; hudelm.x = 10; hudelm.y = 200 + i * 10; hudelm.alpha = 1; hudelm.fontScale = 1; hudelm.label = ""; level.animsound_hud[ level.animsound_hud.size ] = hudelm; hudelm = NewHudElem(); hudelm.alignX = "right"; hudelm.alignY = "middle"; hudelm.x = -10; hudelm.y = 200 + i * 10; hudelm.alpha = 1; hudelm.fontScale = 1; hudelm.label = ""; level.animsound_hud_timer[ level.animsound_hud_timer.size ] = hudelm; hudelm = NewHudElem(); hudelm.alignX = "right"; hudelm.alignY = "middle"; hudelm.x = 210; hudelm.y = 200 + i * 10; hudelm.alpha = 1; hudelm.fontScale = 1; hudelm.label = ""; level.animsound_hud_alias[ level.animsound_hud_alias.size ] = hudelm; } // selected is yellow level.animsound_hud[ 0 ].color = ( 1, 1, 0 ); level.animsound_hud_timer[ 0 ].color = ( 1, 1, 0 ); } else if ( !enabled ) { // animsound got turned off so delete the hud stuff for ( i = 0; i < level.animsound_hudlimit; i++ ) { level.animsound_hud[ i ] Destroy(); level.animsound_hud_timer[ i ] Destroy(); level.animsound_hud_alias[ i ] Destroy(); } for ( i = 0; i < level.animsound_hud_extralines.size; i++ ) { level.animsound_hud_extralines[ i ] Destroy(); } level.animsound_hud = undefined; level.animsound_hud_timer = undefined; level.animsound_hud_alias = undefined; level.animsound_hud_extralines = undefined; level.animSounds = undefined; return; } if ( !isdefined( level.animsound_tagged ) ) level.animsound_locked = false; if ( level.animsound_locked ) level.animsound_hud_locked.alpha = 1; else level.animsound_hud_locked.alpha = 0; if ( !isdefined( level.animSounds ) ) init_animSounds(); /* if( !isdefined( level.anim_sound_was_opened ) ) { thread test_animsound_file(); } */ level.animSounds_thisframe = []; level.animSounds = remove_undefined_from_array( level.animSounds ); array_thread( level.animSounds, ::display_animSound ); if ( level.animsound_locked ) { for ( i = 0; i < level.animSounds_thisframe.size; i++ ) { animSound = level.animSounds_thisframe[ i ]; animSound.animsound_color = ( 0.5, 0.5, 0.5 ); } } else { dot = 0.85; forward = AnglesToForward( level.player GetPlayerAngles() ); for ( i = 0; i < level.animSounds_thisframe.size; i++ ) { animSound = level.animSounds_thisframe[ i ]; animSound.animsound_color = ( 0.25, 1.0, 0.5 ); difference = VectorNormalize( ( animSound.origin + ( 0, 0, 40 ) ) - ( level.player.origin + ( 0, 0, 55 ) ) ); newdot = VectorDot( forward, difference ); if ( newdot < dot ) continue; dot = newdot; level.animsound_tagged = animSound; } } if ( IsDefined( level.animsound_tagged ) ) { level.animsound_tagged.animsound_color = ( 1.0, 1.0, 0.0 ); } is_tagged = IsDefined( level.animsound_tagged ); for ( i = 0; i < level.animSounds_thisframe.size; i++ ) { animSound = level.animSounds_thisframe[ i ]; scale = 1; /* soundalias = get_alias_from_stored( animSound ); scale = 0.9; if( is_tagged && level.animsound_tagged == animSound ) scale = 1; if( IsDefined( soundalias ) ) { if( is_from_animsound( animSound.animname, animSound.anime, animSound.notetrack ) ) { Print3d( animSound.origin, animSound.notetrack + " " + soundalias, animSound.color, 1, scale ); } else { // put in a * so they know its unchangeable Print3d( animSound.origin, animSound.notetrack + " *" + soundalias, animSound.color, 1, scale ); } } else { Print3d( animSound.origin, animSound.notetrack, animSound.color, 1, scale ); } */ msg = "*"; if ( level.animsound_locked ) msg = "*LOCK"; Print3d( animSound.origin + ( 0, 0, 40 ), msg + animSound.animsounds.size, animSound.animsound_color, 1, scale ); } if ( is_tagged ) { draw_animsounds_in_hud(); } #/ } draw_animsounds_in_hud() { guy = level.animsound_tagged; animsounds = guy.animSounds; animname = "generic"; if ( IsDefined( guy.animname ) ) animname = guy.animname; level.animsound_hud_animname.label = "Actor: " + animname; if ( level.player ButtonPressed( "f12" ) ) { if ( !level.animsound_locked_pressed ) { level.animsound_locked = !level.animsound_locked; level.animsound_locked_pressed = true; } } else { level.animsound_locked_pressed = false; } if ( level.player ButtonPressed( "UPARROW" ) ) { if ( level.animsound_input != "up" ) { level.animsound_selected--; } level.animsound_input = "up"; } else if ( level.player ButtonPressed( "DOWNARROW" ) ) { if ( level.animsound_input != "down" ) { level.animsound_selected++; } level.animsound_input = "down"; } else level.animsound_input = "none"; // clear out the hudelems for ( i = 0; i < level.animsound_hudlimit; i++ ) { hudelm = level.animsound_hud[ i ]; hudelm.label = ""; hudelm.color = ( 1, 1, 1 ); hudelm = level.animsound_hud_timer[ i ]; hudelm.label = ""; hudelm.color = ( 1, 1, 1 ); hudelm = level.animsound_hud_alias[ i ]; hudelm.label = ""; hudelm.color = ( 1, 1, 1 ); } // get the highest existing animsound on the guy keys = GetArrayKeys( animsounds ); highest = -1; for ( i = 0; i < keys.size; i++ ) { if ( keys[ i ] > highest ) highest = keys[ i ]; } if ( highest == -1 ) return; if ( level.animsound_selected > highest ) level.animsound_selected = highest; if ( level.animsound_selected < 0 ) level.animsound_selected = 0; // make sure the selected one exists for ( ;; ) { if ( IsDefined( animsounds[ level.animsound_selected ] ) ) break; level.animsound_selected--; if ( level.animsound_selected < 0 ) level.animsound_selected = highest; } level.animsound_hud_anime.label = "Anim: " + animsounds[ level.animsound_selected ].anime; level.animsound_hud[ level.animsound_selected ].color = ( 1, 1, 0 ); level.animsound_hud_timer[ level.animsound_selected ].color = ( 1, 1, 0 ); level.animsound_hud_alias[ level.animsound_selected ].color = ( 1, 1, 0 ); time = GetTime(); for ( i = 0; i < keys.size; i++ ) { key = keys[ i ]; animsound = animsounds[ key ]; hudelm = level.animsound_hud[ key ]; soundalias = get_alias_from_stored( animSound ); hudelm.label = ( key + 1 ) + ". " + animsound.notetrack; hudelm = level.animsound_hud_timer[ key ]; hudelm.label = Int( ( time - ( animsound.end_time - 60000 ) ) * 0.001 ); if ( IsDefined( soundalias ) ) { hudelm = level.animsound_hud_alias[ key ]; hudelm.label = soundalias; if ( !is_from_animsound( animSound.animname, animSound.anime, animSound.notetrack ) ) { hudelm.color = ( 0.7, 0.7, 0.7 ); } } } if ( level.player ButtonPressed( "del" ) ) { // delete a sound on a guy animsound = animsounds[ level.animsound_selected ]; soundalias = get_alias_from_stored( animsound ); if ( !isdefined( soundalias ) ) return; if ( !is_from_animsound( animSound.animname, animSound.anime, animSound.notetrack ) ) return; level.animSound_aliases[ animSound.animname ][ animSound.anime ][ animSound.notetrack ] = undefined; debug_animSoundSave(); } } get_alias_from_stored( animSound ) { if ( !isdefined( level.animSound_aliases[ animSound.animname ] ) ) return; if ( !isdefined( level.animSound_aliases[ animSound.animname ][ animSound.anime ] ) ) return; if ( !isdefined( level.animSound_aliases[ animSound.animname ][ animSound.anime ][ animSound.notetrack ] ) ) return; return level.animSound_aliases[ animSound.animname ][ animSound.anime ][ animSound.notetrack ][ "soundalias" ]; } is_from_animsound( animname, anime, notetrack ) { return IsDefined( level.animSound_aliases[ animname ][ anime ][ notetrack ][ "created_by_animSound" ] ); } /* test_animsound_file() { level.anim_sound_was_opened = true; /# filename = "createfx/" + level.script + "_audio.gsc"; for( ;; ) { warning = NewHudElem(); warning.alignX = "left"; warning.alignY = "middle"; warning.x = 10; warning.y = 150; warning.alpha = 0; warning.fontScale = 2; warning.label = filename + " is not open for edit, so you can not save your work. "; for( ;; ) { file = OpenFile( filename, "write" ); if( file != -1 ) break; wait( 5 ); } warning Destroy(); break; } CloseFile( file ); #/ } */ display_animSound() { if ( Distance( level.player.origin, self.origin ) > 1500 ) return; level.animSounds_thisframe[ level.animSounds_thisframe.size ] = self; /* timer = GetTime(); keys = GetArrayKeys( self.animSounds ); for( i=0; i < keys.size; i++ ) { key = keys[ i ]; animSound = self.animSounds[ key ]; if( !isdefined( animSound ) ) continue; if( timer > animSound.end_time ) { self.animSounds[ key ] = undefined; continue; } animSound.origin = self.origin +( 0, 0, 50 + 10 * key ); level.animSounds_thisframe[ level.animSounds_thisframe.size ] = animSound; } */ } debug_animSoundTag( tagnum ) { /# tag = GetDvar( "tag" + tagnum ); if ( tag == "" ) { IPrintLnBold( "Enter the soundalias with /tag# aliasname" ); return; } tag_sound( tag, tagnum - 1 ); SetDvar( "tag" + tagnum, "" ); #/ } debug_animSoundTagSelected() { /# tag = GetDvar( "tag" ); if ( tag == "" ) { IPrintLnBold( "Enter the soundalias with /tag aliasname" ); return; } tag_sound( tag, level.animsound_selected ); SetDvar( "tag", "" ); #/ } tag_sound( tag, tagnum ) { if ( !isdefined( level.animsound_tagged ) ) return; if ( !isdefined( level.animsound_tagged.animsounds[ tagnum ] ) ) return; animSound = level.animsound_tagged.animsounds[ tagnum ]; // store the alias to the array of aliases soundalias = get_alias_from_stored( animSound ); if ( !isdefined( soundalias ) || is_from_animsound( animSound.animname, animSound.anime, animSound.notetrack ) ) { level.animSound_aliases[ animSound.animname ][ animSound.anime ][ animSound.notetrack ][ "soundalias" ] = tag; level.animSound_aliases[ animSound.animname ][ animSound.anime ][ animSound.notetrack ][ "created_by_animSound" ] = true; debug_animSoundSave(); } } debug_animSoundSave() { /* tab = " "; filename = "createfx/"+level.script+"_fx.gsc"; file = OpenFile( filename, "write" ); AssertEx( file != -1, "File not writeable( maybe you should check it out ): " + filename ); cfxprintln( file, "//_createfx generated. Do not touch!!" ); cfxprintln( file, "main()" ); cfxprintln( file, "{" ); */ /# filename = "createfx/" + level.script + "_audio.gsc"; file = OpenFile( filename, "write" ); if ( file == -1 ) { IPrintLnBold( "Couldn't write to " + filename + ", make sure it is open for edit." ); return; } IPrintLnBold( "Saved to " + filename ); print_aliases_to_file( file ); saved = CloseFile( file ); SetDvar( "animsound_save", "" ); #/ } print_aliases_to_file( file ) { tab = " "; FPrintLn( file, "#include maps\\_anim;" ); FPrintLn( file, "main()" ); FPrintLn( file, "{" ); FPrintLn( file, tab + "// Autogenerated by AnimSounds. Threaded off so that it can be placed before _load( has to create level.scr_notetrack first )." ); FPrintLn( file, tab + "thread init_animsounds();" ); FPrintLn( file, "}" ); FPrintLn( file, "" ); FPrintLn( file, "init_animsounds()" ); FPrintLn( file, "{" ); FPrintLn( file, tab + "waittillframeend;" ); animnames = GetArrayKeys( level.animSound_aliases ); for ( i = 0; i < animnames.size; i++ ) { animes = GetArrayKeys( level.animSound_aliases[ animnames[ i ] ] ); for ( p = 0; p < animes.size; p++ ) { anime = animes[ p ]; notetracks = GetArrayKeys( level.animSound_aliases[ animnames[ i ] ][ anime ] ); for ( z = 0; z < notetracks.size; z++ ) { notetrack = notetracks[ z ]; if ( !is_from_animsound( animnames[ i ], anime, notetrack ) ) continue; alias = level.animSound_aliases[ animnames[ i ] ][ anime ][ notetrack ][ "soundalias" ]; if ( notetrack == "#" + anime ) { // this isn't really a notetrack, its from the _anim call. FPrintLn( file, tab + "addOnStart_animSound( " + tostr( animnames[ i ] ) + ", " + tostr( anime ) + ", " + tostr( alias ) + " ); " ); } else { // this is attached to a notetrack FPrintLn( file, tab + "addNotetrack_animSound( " + tostr( animnames[ i ] ) + ", " + tostr( anime ) + ", " + tostr( notetrack ) + ", " + tostr( alias ) + " ); " ); } PrintLn( "^1Saved alias ^4" + alias + "^1 to notetrack ^4" + notetrack ); } } } FPrintLn( file, "}" ); } tostr( str ) { newstr = "\""; for ( i = 0; i < str.size; i++ ) { if ( str[ i ] == "\"" ) { newstr += "\\"; newstr += "\""; continue; } newstr += str[ i ]; } newstr += "\""; return newstr; } linedraw( start, end, color, alpha, depth, timer ) { if ( !isdefined( color ) ) color = ( 1, 1, 1 ); if ( IsDefined( timer ) ) { timer *= 20; for ( i = 0; i < timer; i++ ) { Line( start, end, color, alpha, depth ); wait( 0.05 ); } } else { for ( ;; ) { Line( start, end, color, alpha, depth ); wait( 0.05 ); } } } print3ddraw( org, text, color ) { for ( ;; ) { Print3d( org, text, color ); wait( 0.05 ); } } complete_me() { if ( GetDvar( "credits_active" ) == "1" ) { wait 7; SetDvar( "credits_active", "0" ); maps\_endmission::credits_end(); return; } wait 7; nextmission(); } find_new_chase_target( ent_num ) { /# ai = GetAIArray(); foreach ( guy in ai ) { if ( guy GetEntNum() == ent_num ) { level.chase_cam_target = guy; return; } } vehicles = GetEntArray( "script_vehicle", "code_classname" ); foreach ( vehicle in vehicles ) { if ( vehicle GetEntNum() == ent_num ) { level.chase_cam_target = vehicle; return; } } #/ } chaseCam( ent_num ) { if ( !isdefined( level.chase_cam_last_num ) ) { level.chase_cam_last_num = -1; } if ( level.chase_cam_last_num == ent_num ) return; find_new_chase_target( ent_num ); if ( !isdefined( level.chase_cam_target ) ) return; level.chase_cam_last_num = ent_num; if ( !isdefined( level.chase_cam_ent ) ) { level.chase_cam_ent = level.chase_cam_target spawn_tag_origin(); } thread chaseCam_onEnt( level.chase_cam_target ); } chaseCam_onEnt( ent ) { level notify( "new_chasecam" ); level endon( "new_chasecam" ); ent endon( "death" ); level.player Unlink(); level.player PlayerLinkToBlend( level.chase_cam_ent, "tag_origin", 2, 0.5, 0.5 ); wait( 2 ); level.player PlayerLinkToDelta( level.chase_cam_ent, "tag_origin", 1, 180, 180, 180, 180 ); for ( ;; ) { wait( 0.2 ); if ( !isdefined( level.chase_cam_target ) ) return; start = level.chase_cam_target.origin; angles = level.chase_cam_target.angles; forward = AnglesToForward( angles ); forward *= 200; start += forward; angles = level.player GetPlayerAngles(); forward = AnglesToForward( angles ); forward *= -200; level.chase_cam_ent MoveTo( start + forward, 0.2 ); } } viewfx() { foreach ( fx in level.createfxent ) { if ( IsDefined( fx.looper ) ) Print3d( fx.v[ "origin" ], ".", ( 1, 1, 0 ), 1, 1.5, 200 ); } } add_key( key, val ) { PrintLn( " \"" + key + "\" \"" + val + "\"" ); } print_vehicle_info( noteworthy ) { if ( !isdefined( level.vnum ) ) level.vnum = 9500; level.vnum++; layer = "bridge_helpers"; PrintLn( "entity " + level.vnum ); PrintLn( "{" ); add_key( "origin", self.origin[ 0 ] + " " + self.origin[ 1 ] + " " + self.origin[ 2 ] ); add_key( "angles", self.angles[ 0 ] + " " + self.angles[ 1 ] + " " + self.angles[ 2 ] ); add_key( "targetname", "helper_model" ); add_key( "model", self.model ); add_key( "classname", "script_model" ); add_key( "spawnflags", "4" ); add_key( "_color", "0.443137 0.443137 1.000000" ); PrintLn( " layer \"" + layer + "\"" ); if ( IsDefined( noteworthy ) ) add_key( "script_noteworthy", noteworthy ); PrintLn( "}" ); } draw_dot_for_ent( entnum ) { /# ai = GetAIArray(); foreach ( guy in ai ) { if ( guy GetEntNum() != entnum ) continue; guy draw_dot_for_guy(); } #/ } draw_dot_for_guy() { player_angles = level.player GetPlayerAngles(); player_forward = AnglesToForward( player_angles ); end = level.player GetEye(); start = self GetEye(); angles = VectorToAngles( start - end ); forward = AnglesToForward( angles ); dot = VectorDot( forward, player_forward ); Print3d( start, dot, ( 1, 0.5, 0 ) ); }