Files
IL-GSC/BO1/PC/ZM/clientscripts/_helicopter_sounds.csc
2024-02-18 17:32:07 -05:00

621 lines
25 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include clientscripts\_utility;
#include clientscripts\_music;
#include clientscripts\_audio;
init()
{
level._entityShutDownCBFunc = clientscripts\_helicopter_sounds::heli_linkto_sound_ents_delete;
level.heliSoundValues = [];
init_heli_sound_values( "huey", "cockpit", 65, 0.6, 0.8, 65, 1, 1.1 );
init_heli_sound_values( "huey", "cockpit2", 45, 0.5, 1, 45, 0.95, 1.1);
init_heli_sound_values( "huey", "int_eng", 45, 0.5, 1, 45, 0.95, 1.1);
init_heli_sound_values( "huey", "int_eng2", 45, 0.5, 1, 45, 0.95, 1.1);
init_heli_sound_values( "huey", "int_eng3", 45, 0.5, 1, 45, 0.95, 1.1);
init_heli_sound_values( "huey", "ext_rotor", 45, 0.5, 1, 45, 0.95, 1.1);
init_heli_sound_values( "huey", "tail_rotor", 45, 0.5, 1, 45, 0.95, 1.1);
init_heli_sound_values( "huey", "tail_rotor", 45, 0.5, 1, 45, 0.95, 1.1);
init_heli_sound_values( "hind", "cockpit", 95, 0.6, 0.8, 95, 1, 1.1 );
init_heli_sound_values( "hind", "cockpit2", 95, 0.5, 0.8, 95, 1, 1.2 );
init_heli_sound_values( "hind", "int_eng", 65, 0.5, 0.8, 65, 1, 1.1 );
init_heli_sound_values( "hind", "int_eng2", 65, 0.4, 0.9, 65, 1, 1.1 );
init_heli_sound_values( "hind", "eng_dmg", 40, 0.3, 0.5, 65, 1, 1.1 );
init_heli_sound_values( "hind", "ext_rotor", 70, 0.5, 1, 70, 0.95, 1.1 );
init_heli_sound_values( "hip", "turbine", 15, 0.85, 1, 20, 1, 1.0 );
init_heli_sound_values( "hip", "top_rotor", 15, 0.85, 1, 20, 0.95, 1);
init_heli_sound_values( "hip", "tail_rotor", 15, 0.85, 1, 20, 0.95, 1.1);
init_heli_sound_values( "hind_enemy", "turbine", 45, 0.6, 0.8, 65, 1, 1.0 );
init_heli_sound_values( "hind_enemy", "top_rotor", 15, 0.5, 1, 25, 0.95, 1.0);
init_heli_sound_values( "hind_enemy", "tail_rotor", 45, 0.5, 1, 45, 0.95, 1.0);
init_heli_sound_values( "huey_toda", "turbine", 25, 0.75, 0.8, 65, 1, 1);
init_heli_sound_values( "huey_toda", "top_rotor", 15, 0.85, 1, 25, 0.95, 1);
init_heli_sound_values( "huey_toda", "tail_rotor", 25, 0.95, 1, 35, 0.95, 1);
init_heli_sound_values( "heli_chinook", "turbine", 15, 0.80, 1, 35, 0.95, 1.05);
init_heli_sound_values( "heli_chinook", "top_rotor", 15, 0.80, 1, 35, 0.95, 1.05);
init_heli_sound_values( "huey_player", "turbine", 65, 0.6, 0.8, 65, 1, 1.1 );
init_heli_sound_values( "huey_player", "top_rotor", 45, 0.5, 1, 45, 0.95, 1.1);
init_heli_sound_values( "huey_player", "tail_rotor", 45, 0.5, 1, 45, 0.95, 1.0);
init_heli_sound_values( "huey_player", "wind_rt", 45, 0.5, 1, 45, 0.95, 1.0);
init_heli_sound_values( "huey_player", "wind_lft", 45, 0.5, 1, 45, 0.95, 1.0);
}
init_heli_sound_values( heli_type, part_type, max_speed_vol, min_vol, max_vol, max_speed_pitch, min_pitch, max_pitch )
{
if( !IsDefined( level.heliSoundValues[heli_type] ) )
{
level.heliSoundValues[heli_type] = [];
}
if( !IsDefined( level.heliSoundValues[heli_type][part_type] ) )
{
level.heliSoundValues[heli_type][part_type] = spawnStruct();
}
level.heliSoundValues[heli_type][part_type].speedVolumeMax = max_speed_vol;
level.heliSoundValues[heli_type][part_type].speedPitchMax = max_speed_pitch;
level.heliSoundValues[heli_type][part_type].volumeMin = min_vol;
level.heliSoundValues[heli_type][part_type].volumeMax = max_vol;
level.heliSoundValues[heli_type][part_type].pitchMin = min_pitch;
level.heliSoundValues[heli_type][part_type].pitchMax = max_pitch;
if( getdvarint( #"debug_heli" ) > 0 )
{
println("Init Heli Sounds heli_type: " + heli_type );
println("Init Heli Sounds part_type: " + part_type );
println("Init Heli Sounds max_speed_vol: " + max_speed_vol );
println("Init Heli Sounds min_vol: " + min_vol );
println("Init Heli Sounds max_vol: " + max_vol );
println("Init Heli Sounds max_speed_pitch: " + max_speed_pitch );
println("Init Heli Sounds min_pitch: " + min_pitch );
println("Init Heli Sounds max_pitch: " + max_pitch );
}
}
init_heli_sounds_huey_toda()
{
self setup_heli_sounds( "turbine", "engine", "snd_rotor", "veh_hind_turbine" );
self setup_heli_sounds( "top_rotor", "engine", "snd_rotor", "veh_hind_rotor" );
self setup_heli_sounds( "tail_rotor", "engine", "snd_tail_rotor", "veh_hind_tail" );
self setup_heli_sounds( "lfe", "engine", "snd_rotor", "veh_hind_rotor_lfe" );
}
init_heli_sounds_huey()
{
self setup_heli_sounds( "cockpit", "engine", "snd_cockpit", "veh_huey_whine_int_idle" );
self setup_heli_sounds( "cockpit2", "engine", "snd_rotor", "veh_huey_hf_int_idle" );
self setup_heli_sounds( "int_eng", "engine", "snd_rotor", "veh_huey_lf_int_idle" );
self setup_heli_sounds( "int_eng2", "engine", "snd_tail_rotor", "veh_huey_dist_idle" );
self setup_heli_sounds( "int_eng3", "engine", "snd_wind_right", "veh_huey_ringing_dist" );
self setup_heli_sounds( "ext_rotor", "engine", "snd_wind_left", "veh_huey_rotor_idle" );
}
init_heli_sounds_hind()
{
self setup_heli_sounds( "cockpit", "engine", "snd_cockpit", "veh_hind_whine_int_idle" );
self setup_heli_sounds( "cockpit2", "engine", "snd_cockpit", "veh_hind_hf_int_idle" );
self setup_heli_sounds( "int_eng", "engine", "snd_int_rotor", "veh_hind_lf_int_idle" );
self setup_heli_sounds( "int_eng2", "engine", "snd_int_rotor", "veh_hind_dist_idle1" );
self setup_heli_sounds( "ext_rotor", "engine", "snd_rotor", "veh_hind_rotor_idle" );
self setup_heli_sounds( "eng_dmg", "engine", "snd_int_rotor", "veh_hind_sputter" );
self setup_heli_sounds( "eng_dmg_alarm","engine", "snd_cockpit", "veh_hind_alarm_damage_high_loop" );
}
init_heli_sounds_hip()
{
self setup_heli_sounds( "turbine", "engine", "snd_rotor", "veh_hip_turbine" );
self setup_heli_sounds( "top_rotor", "engine", "snd_rotor", "veh_hip_rotor" );
self setup_heli_sounds( "tail_rotor", "engine", "snd_rotor", "veh_hip_tail" );
self setup_heli_sounds( "lfe", "engine", "snd_rotor", "veh_hip_rotor_lfe" );
}
init_heli_sounds_chinook()
{
self setup_heli_sounds( "turbine", "engine", "tag_origin", "veh_chinook_turbine" );
self setup_heli_sounds( "top_rotor", "engine", "main_rotor_jnt", "veh_chinook_rotor" );
self setup_heli_sounds( "top_rotor", "engine", "tail_rotor_jnt", "veh_chinook_rotor" );
self setup_heli_sounds( "lfe", "engine", "tag_origin", "veh_chinook_rotor_lfe" );
}
init_heli_sounds_hind_enemy()
{
self setup_heli_sounds( "lfe", "engine", "snd_cockpit", "veh_hind_epow_rotor_lfe" );
self setup_heli_sounds( "turbine", "engine", "snd_rotor", "veh_hind_epow_turbine" );
self setup_heli_sounds( "top_rotor", "engine", "snd_rotor", "veh_hind_epow_rotor" );
self setup_heli_sounds( "tail_rotor", "engine", "snd_tail_rotor", "veh_hind_epow_tail" );
}
init_heli_sounds_hind_vorkuta()
{
self setup_heli_sounds( "lfe", "engine", "snd_cockpit", "veh_hind_rotor_lfe" );
self setup_heli_sounds( "turbine", "engine", "snd_rotor", "veh_hind_turbine" );
self setup_heli_sounds( "top_rotor", "engine", "snd_rotor", "veh_hind_rotor" );
self setup_heli_sounds( "tail_rotor", "engine", "snd_tail_rotor", "veh_hind_tail" );
}
init_heli_sounds_huey_player()
{
setup_heli_sounds( "lfe", "engine", "snd_cockpit", "veh_huey_rotor_lfe" );
setup_heli_sounds( "turbine", "engine", "snd_rotor", "veh_huey_turbine" );
setup_heli_sounds( "top_rotor", "engine", "snd_rotor", "veh_huey_rotor" );
setup_heli_sounds( "tail_rotor", "engine", "snd_tail_rotor", "veh_huey_tail" );
setup_heli_sounds( "wind_rt", "engine", "snd_wind_right", "veh_huey_door_wind");
setup_heli_sounds( "wind_lft", "engine", "snd_wind_left", "veh_huey_door_wind");
setup_heli_sounds( "radio", "engine", "snd_cockpit", "veh_huey_radio");
}
init_heli_sounds_zombietron()
{
self setup_heli_sounds( "turbine", "engine", "snd_rotor", "veh_hind_turbine_zt" );
self setup_heli_sounds( "top_rotor", "engine", "snd_rotor", "veh_hind_rotor_zt" );
}
setup_heli_sounds( bone_location, type, tag, run, dmg1, dmg2, dmg3 )
{
self.heli[bone_location] = spawnStruct();
self.heli[bone_location].sound_type = type;
self.heli[bone_location].run = spawn( 0, self.origin, "script_origin" );
self.heli[bone_location].run linkto( self, tag );
self.heli[bone_location].run.alias = run;
self.sound_ents[self.sound_ents.size] = self.heli[bone_location].run;
self thread delete_loop_sound_save_restore( self.heli[bone_location].run );
if( IsDefined( dmg1 ) )
{
self.heli[bone_location].dmg1 = spawn( 0, self.origin, "script_origin" );
self.heli[bone_location].dmg1 linkto( self, tag );
self.heli[bone_location].dmg1.alias = dmg1;
self.sound_ents[self.sound_ents.size] = self.heli[bone_location].dmg1;
self thread delete_loop_sound_save_restore( self.heli[bone_location].dmg1 );
}
if( IsDefined( dmg2 ) )
{
self.heli[bone_location].idle = spawn( 0, self.origin, "script_origin" );
self.heli[bone_location].idle linkto( self, tag );
self.heli[bone_location].idle.alias = dmg2;
self.sound_ents[self.sound_ents.size] = self.heli[bone_location].dmg2;
self thread delete_loop_sound_save_restore( self.heli[bone_location].dmg2 );
}
if( IsDefined( dmg3 ) )
{
self.heli[bone_location].idle = spawn( 0, self.origin, "script_origin" );
self.heli[bone_location].idle linkto( self, tag );
self.heli[bone_location].idle.alias = dmg3;
self.sound_ents[self.sound_ents.size] = self.heli[bone_location].dmg3;
self thread delete_loop_sound_save_restore( self.heli[bone_location].dmg3 );
}
}
init_terrain_sounds()
{
self.surface_type = [];
self.surface_type["default"] = "dirt";
self.surface_type["metal"] = "dirt";
self.surface_type["concrete"] = "dirt";
self.surface_type["wood"] = "dirt";
self.surface_type["dirt"] = "dirt";
self.surface_type["gravel"] = "dirt";
self.surface_type["grass"] = "dirt";
self.surface_type["mud"] = "dirt";
self.surface_type["snow"] = "dirt";
self.surface_type["asphalt"] = "dirt";
self.surface_type["brick"] = "dirt";
self.surface_type["glass"] = "dirt";
self.surface_type["plaster"] = "dirt";
self.surface_type["sand"] = "dirt";
self.surface_type["rock"] = "dirt";
self.surface_type["water"] = "water";
self.surface_type["foliage"] = "dirt";
self setup_terrain_sounds( "dirt", "veh_chopper_prop_wash_dirt" );
self setup_terrain_sounds( "water", "veh_chopper_prop_wash_water" );
}
setup_terrain_sounds( surface_type, alias )
{
self.terrain_ent_array[surface_type] = spawn( 0, self.origin, "script_origin" );
self.terrain_ent_array[surface_type].alias = alias;
self thread terrain_loop_sound_delete( self.terrain_ent_array[surface_type] );
}
start_helicopter_sounds( localClientNum )
{
if( IsDefined( self.vehicletype ) )
{
self.heli = [];
self.terrain = [];
self.sound_ents = [];
self.cur_speed = 0;
self.idle_run_trans_speed = 5;
play_terrain_sounds = true;
switch( self.vehicletype )
{
case "zombie_cobra":
self init_heli_sounds_huey();
self play_huey_sounds();
printLn( "helicopter type: " + self.vehicletype + " found; playing helicopter sounds" );
break;
case "heli_huey_small":
case "heli_huey_gunship":
self init_heli_sounds_huey();
self play_huey_sounds();
printLn( "helicopter type: " + self.vehicletype + " found; playing helicopter sounds" );
break;
case "heli_hind_player":
self init_heli_sounds_hind();
self play_hind_sounds();
printLn( "helicopter type: " + self.vehicletype + " found; playing helicopter sounds" );
break;
case "heli_hind":
case "heli_hind_doublesize":
case "heli_hind_doublesize_uwb":
case "heli_hind_river":
self init_heli_sounds_hind_enemy();
self play_hind_enemy_sounds();
printLn( "helicopter type: " + self.vehicletype + " found; playing helicopter sounds" );
break;
case "heli_hip":
case "rebirth_heli_hip_sidegun_spotlight":
case "heli_hip_sidegun_spotlight":
case "heli_hip_noseturret":
case "heli_cobra":
case "heli_cobra_khesanh":
case "heli_hip_sidegun_uwb":
self init_heli_sounds_hip();
self play_hip_sounds();
printLn( "helicopter type: " + self.vehicletype + " found; playing helicopter sounds" );
break;
case "heli_huey_assault":
case "heli_huey":
case "heli_huey_usmc_heavyhog":
case "heli_huey_usmc":
case "heli_huey_usmc_khesanh":
case "heli_huey_side_minigun":
case "heli_huey_player":
case "heli_huey_player_uwb":
case "heli_huey_heavyhog_river":
case "heli_huey_assault_river":
case "heli_huey_gunship_river":
case "heli_huey_usmc_khesanh_std":
case "heli_huey_medivac_khesanh":
case "heli_huey_usmc_heavyhog_khesanh":
case "heli_huey_medivac_river":
case "heli_huey_side_minigun_uwb":
case "heli_huey_vista":
self init_heli_sounds_huey_toda();
self play_huey_toda_sounds();
printLn( "helicopter type: " + self.vehicletype + " found; playing helicopter sounds" );
break;
case "heli_chinook":
case "heli_seaknight":
self init_heli_sounds_chinook();
self play_chinook_sounds();
printLn( "helicopter type: " + self.vehicletype + " found; playing helicopter sounds" );
break;
case "heli_huey_heavyhog_creek":
case "heli_huey_heavyhog":
case "heli_hip_sidegun":
case "heli_hip_spotlight":
self init_heli_sounds_hind_vorkuta();
self play_hind_sounds_vorkuta();
printLn( "helicopter type: " + self.vehicletype + " found; playing helicopter sounds" );
break;
case "heli_mini_zt":
self init_heli_sounds_zombietron();
self play_hind_sounds_zombietron();
printLn( "helicopter type: " + self.vehicletype + " found; playing helicopter sounds" );
break;
default:
play_terrain_sounds = false;
printLn( "^5helicopter type: " + self.vehicletype + " NOT FOUND; playing NO helicopter sounds" );
break;
}
if( play_terrain_sounds )
{
self init_terrain_sounds();
self thread terrain_trace();
}
}
else
{
printLn( "^6helicopter type: " + self.vehicletype + " not defined" );
}
}
delete_loop_sound_save_restore( real_ent )
{
self endon( "heli_entityshutdown" );
level waittill( "save_restore" );
PrintLn( "heli_script: got save restoring" );
if( IsDefined( real_ent ) )
{
PrintLn( "heli_script: killing helicopter sound ent" );
real_ent StopLoopSound( 0 );
real_ent Delete();
}
}
terrain_loop_sound_delete( real_ent )
{
self thread delete_loop_sound_save_restore( real_ent );
level endon( "save_restore" );
self waittill( "entityshutdown" );
self notify( "heli_entityshutdown" );
PrintLn( "heli_script: deleting terrain ents" );
if( IsDefined( real_ent) )
{
real_ent StopLoopSound( 4 );
real_ent Delete();
}
}
heli_linkto_sound_ents_delete( localClientNum, entity )
{
entity notify( "heli_entityshutdown" );
array_thread( entity.sound_ents, ::heli_delete_sound_loops );
}
heli_delete_sound_loops()
{
PrintLn( "heli_script: deleting linkto ents" );
if( IsDefined( self ) )
{
self StopLoopSound( 4 );
self Delete();
}
}
play_hind_sounds()
{
self thread heli_idle_run_transition( "hind", "cockpit" );
self thread heli_idle_run_transition( "hind", "cockpit2");
self thread heli_idle_run_transition( "hind", "int_eng");
self thread heli_idle_run_transition( "hind", "int_eng2" );
self thread heli_idle_run_transition( "hind", "ext_rotor");
}
play_hind_enemy_sounds()
{
self thread heli_sound_play( self.heli["lfe"] );
self thread heli_idle_run_transition( "hind_enemy", "turbine" );
self thread heli_idle_run_transition( "hind_enemy", "top_rotor");
self thread heli_idle_run_transition( "hind_enemy", "tail_rotor");
}
play_huey_sounds()
{
self thread heli_sound_play( self.heli["lfe"] );
self thread heli_idle_run_transition( "huey", "cockpit" );
self thread heli_idle_run_transition( "huey", "cockpit2");
self thread heli_idle_run_transition( "huey", "int_eng");
self thread heli_idle_run_transition( "huey", "int_eng2" );
self thread heli_idle_run_transition( "huey", "int_eng3");
self thread heli_idle_run_transition( "huey", "ext_rotor" );
}
play_hip_sounds()
{
self thread heli_sound_play( self.heli["lfe"] );
self thread heli_idle_run_transition( "hip", "turbine" );
self thread heli_idle_run_transition( "hip", "top_rotor");
self thread heli_idle_run_transition( "hip", "tail_rotor");
}
play_huey_toda_sounds()
{
self thread heli_sound_play( self.heli["lfe"] );
self thread heli_idle_run_transition( "huey_toda", "turbine" );
self thread heli_idle_run_transition( "huey_toda", "top_rotor");
self thread heli_idle_run_transition( "huey_toda", "tail_rotor");
}
play_chinook_sounds()
{
self thread heli_idle_run_transition( "heli_chinook", "top_rotor");
self thread heli_idle_run_transition( "heli_chinook", "turbine");
self thread heli_sound_play( self.heli["lfe"] );
}
play_hind_sounds_vorkuta()
{
self thread heli_idle_run_transition( "hip", "turbine" );
self thread heli_idle_run_transition( "hip", "top_rotor");
self thread heli_idle_run_transition( "hip", "tail_rotor");
}
play_hind_sounds_zombietron()
{
self thread heli_idle_run_transition( "hip", "turbine" );
self thread heli_idle_run_transition( "hip", "top_rotor");
}
play_heli_sounds_huey_player()
{
self heli_sound_play( self.heli["lfe"] );
self heli_sound_play( self.heli["radio"] );
self thread heli_idle_run_transition( "huey_player", "turbine" );
self thread heli_idle_run_transition( "huey_player", "top_rotor");
self thread heli_idle_run_transition( "huey_player", "tail_rotor");
self thread heli_idle_run_transition( "huey_player", "wind_rt" );
self thread heli_idle_run_transition( "huey_player", "wind_lft");
}
heli_sound_play( heli_bone )
{
self endon( "entityshutdown" );
level endon( "save_restore" );
while( 1 )
{
if( IsDefined( self.should_not_play_sounds ) && self.should_not_play_sounds )
{
heli_bone.run StopLoopSound( 0.5 );
self waittill( "play_heli_sounds" );
}
heli_bone.run PlayLoopSound( heli_bone.run.alias, 2 );
self waittill( "stop_heli_sounds" );
}
}
heli_idle_run_transition( heli_type, heli_part )
{
self endon( "entityshutdown" );
level endon( "save_restore" );
MPH_TO_INCHES_PER_SEC = 17.6;
heli_bone = self.heli[heli_part];
run_id = undefined;
heli_damage = "none";
if( !IsDefined( level.heliSoundValues[heli_type] ) )
{
printLn( "^5a speed vol/pitch parameter was not defined for heli_type '" + heli_type + "'." );
return;
}
if( !IsDefined( level.heliSoundValues[heli_type][heli_part] ) )
{
printLn( "^5a speed vol/pitch parameter was not defined for heli_type '" + heli_type + "' and heli_part '" + heli_part + "'." );
return;
}
while( IsDefined( self ) )
{
wait( 0.5 );
if( IsDefined( self.should_not_play_sounds ) && self.should_not_play_sounds )
{
heli_bone.run StopLoopSound( 0.5 );
run_id = undefined;
self waittill( "play_heli_sounds" );
continue;
}
if( !IsDefined( run_id ) )
run_id = heli_bone.run PlayLoopSound( heli_bone.run.alias, 0.5 );
max_speed_vol = level.heliSoundValues[heli_type][heli_part].speedVolumeMax;
min_vol = level.heliSoundValues[heli_type][heli_part].volumeMin;
max_vol = level.heliSoundValues[heli_type][heli_part].volumeMax;
max_speed_pitch = level.heliSoundValues[heli_type][heli_part].speedPitchMax;
min_pitch = level.heliSoundValues[heli_type][heli_part].pitchMin;
max_pitch = level.heliSoundValues[heli_type][heli_part].pitchMax;
self.cur_speed = self getspeed() / MPH_TO_INCHES_PER_SEC;
run_volume = scale_speed( self.idle_run_trans_speed, max_speed_vol, min_vol, max_vol, self.cur_speed );
run_pitch = scale_speed( self.idle_run_trans_speed, max_speed_pitch, min_pitch, max_pitch, self.cur_speed );
if( IsDefined( run_volume ) && IsDefined( run_pitch ) )
{
setSoundVolume( run_id, run_volume );
setSoundPitch( run_id, run_pitch );
setSoundPitchRate( run_id, 0.25 );
if( IsDefined ( self.isdamaged ) && ( heli_damage == "none" ))
{
return;
}
if( getdvarint( #"debug_heli" ) > 0 )
{
printLn( "^5a self.cur_speed = " + self.cur_speed );
printLn( "^5a run_pitch . " + run_pitch );
printLn( "^5a self.cur_speed = " + self.cur_speed );
printLn( "^5a run_volume. " + run_volume );
}
}
}
}
terrain_trace()
{
self endon( "entityshutdown" );
level endon( "save_restore" );
trace = undefined;
trace_ent = self;
pre_terrain = undefined;
next_terrain = undefined;
pre_trace_real_ent = undefined;
trace_real_ent = undefined;
pre_origin = ( 100000, 100000, 100000 );
while( IsDefined( self ) )
{
wait( 1 + RandomFloatRange( 0.0, 0.2) );
if( IsDefined( self.should_not_play_sounds ) && self.should_not_play_sounds )
{
if( IsDefined( pre_trace_real_ent ) )
pre_trace_real_ent StopLoopSound();
if( IsDefined( trace_real_ent ) )
trace_real_ent StopLoopSound();
self waittill( "play_heli_sounds" );
continue;
}
if( DistanceSquared( pre_origin, trace_ent.origin ) < 144 )
{
continue;
}
pre_origin = trace_ent.origin;
trace = tracepoint( trace_ent.origin, trace_ent.origin - ( 0, 0, 100000 ) );
trace_surface_type = trace["surfacetype"];
if( !IsDefined( trace ) )
continue;
pre_terrain = next_terrain;
next_terrain = trace_surface_type;
if( !IsDefined( pre_terrain ) || !IsDefined( next_terrain ) )
{
continue;
}
if( !IsDefined( self.surface_type[next_terrain] ) || !IsDefined( self.surface_type[pre_terrain] ) )
{
continue;
}
surf_type = self.surface_type[next_terrain];
trace_real_ent = self.terrain_ent_array[surf_type];
pre_surf_type = self.surface_type[pre_terrain];
pre_trace_real_ent = self.terrain_ent_array[pre_surf_type];
if( !IsDefined( trace["position"] ) )
{
if( IsDefined( pre_trace_real_ent ) )
{
pre_trace_real_ent StopLoopSound( 0.5 );
}
continue;
}
trace_real_ent.origin = trace["position"];
pre_trace_real_ent.origin = trace["position"];
if( IsDefined( surf_type ) )
{
if( ( surf_type == pre_surf_type ) && ( pre_trace_real_ent IsPlayingLoopSound() ) )
continue;
pre_trace_real_ent StopLoopSound( 0.5 );
trace_real_ent PlayLoopSound( trace_real_ent.alias, 0.5 );
}
}
}
update_helicopter_sounds()
{
if( IsDefined( self.engine_damage_low ) && self.engine_damage_low )
{
switch( self.vehicletype )
{
case "heli_hind_player":
if( !IsDefined( self.low_dmg ) )
{
self thread heli_idle_run_transition( "hind", "eng_dmg" );
}
self.low_dmg = true;
playsound( 0, "veh_hind_alarm_damage_high", (0,0,0) );
level.heliSoundValues["hind"]["cockpit"].volumeMax = 1;
level.heliSoundValues["hind"]["ext_rotor"].pitchMax = 1.3;
printLn( "^5a activating heli sound damage stage 1");
break;
default:
printLn( "^5helicopter type: " + self.vehicletype + " vehicletype; has no helicopter damage sounds" );
break;
}
}
if( IsDefined( self.engine_damage_high ) && self.engine_damage_high && IsDefined( self.engine_damage_low ) && !self.engine_damage_low )
{
switch( self.vehicletype )
{
case "heli_hind_player":
level.heliSoundValues["hind"]["eng_dmg"].volumeMax = 1;
level.heliSoundValues["hind"]["ext_rotor"].pitchMax = 1.5;
wait( 0.1 );
level.heliSoundValues["hind"]["eng_dmg"].volumeMin = 1;
printLn( "^5a activating heli sound damage stage 2");
break;
default:
printLn( "^5helicopter type: " + self.vehicletype + " vehicletype; has no helicopter damage sounds" );
break;
}
}
if( IsDefined( self.engine_damage_high ) && self.engine_damage_high && IsDefined( self.engine_damage_low ) && self.engine_damage_low )
{
switch( self.vehicletype )
{
case "heli_hind_player":
playsound( 0, "veh_hind_alarm_damage_high", (0,0,0) );
level.heliSoundValues["hind"]["eng_dmg"].volumeMax = 1;
level.heliSoundValues["hind"]["ext_rotor"].pitchMax = 1.5;
wait( 0.1 );
level.heliSoundValues["hind"]["eng_dmg"].volumeMin = 1;
printLn( "^5a activating heli sound damage stage 3");
break;
default:
printLn( "^5helicopter type: " + self.vehicletype + " vehicletype; has no helicopter damage sounds" );
break;
}
}
if( IsDefined( self.engine_damage_low ) && !self.engine_damage_low && IsDefined( self.engine_damage_high ) && !self.engine_damage_high )
{
printLn( "^5helicopter type: " + self.vehicletype + " vehicletype; Atempting to reset Defaults" );
switch( self.vehicletype )
{
case "heli_hind_player":
init_heli_sound_values( "hind", "cockpit", 95, 0.6, 0.8, 95, 1, 1.1 );
init_heli_sound_values( "hind", "cockpit2", 95, 0.5, 0.8, 95, 1, 1.2);
init_heli_sound_values( "hind", "int_eng", 65, 0.5, 0.8, 65, 1, 1.1 );
init_heli_sound_values( "hind", "int_eng2", 65, 0.4, 0.9, 65, 1, 1.3 );
init_heli_sound_values( "hind", "eng_dmg", 40, 0.2, 0.4, 65, 1, 1.1 );
init_heli_sound_values( "hind", "ext_rotor", 70, 0.5, 1, 70, 0.95, 1.1);
printLn( "^5a Setting Defaults ");
break;
default:
printLn( "^5helicopter type: " + self.vehicletype + " vehicletype; has no helicopter damage sounds" );
break;
}
}
}