1 #using scripts\codescripts\struct;
3 #using scripts\shared\audio_shared;
4 #using scripts\shared\music_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\util_shared;
8 #using scripts\shared\clientfield_shared;
10 #insert scripts\shared\shared.gsh;
11 #insert scripts\shared\version.gsh;
13 #using scripts\mp\_helicopter_sounds;
14 #using scripts\mp\_util;
34 #namespace helicopter_sounds;
45 level.heliSoundValues = [];
78 /# println(
"vehicle is firing : " + newVal); #/
82 self.isFiring =
false;
92 function init_heli_sound_values( heli_type, part_type, max_speed_vol, min_vol, max_vol, max_speed_pitch, min_pitch, max_pitch )
94 if ( !isdefined( level.heliSoundValues[heli_type] ) )
96 level.heliSoundValues[heli_type] = [];
98 if ( !isdefined( level.heliSoundValues[heli_type][part_type] ) )
100 level.heliSoundValues[heli_type][part_type] = spawnStruct();
103 level.heliSoundValues[heli_type][part_type].speedVolumeMax = max_speed_vol;
104 level.heliSoundValues[heli_type][part_type].speedPitchMax = max_speed_pitch;
105 level.heliSoundValues[heli_type][part_type].volumeMin = min_vol;
106 level.heliSoundValues[heli_type][part_type].volumeMax = max_vol;
107 level.heliSoundValues[heli_type][part_type].pitchMin = min_pitch;
108 level.heliSoundValues[heli_type][part_type].pitchMax = max_pitch;
122 self.warning_tag =
"snd_cockpit";
131 self.warning_tag =
"snd_cockpit";
139 self.warning_tag = undefined;
149 self.warning_tag = undefined;
154 setup_heli_sounds(
"turbine_idle",
"engine",
"tag_body",
"veh_qrdrone_turbine_idle" );
155 setup_heli_sounds(
"turbine_moving",
"engine",
"tag_body",
"veh_qrdrone_turbine_moving" );
157 self.warning_tag = undefined;
165 self.warning_tag = undefined;
171 if( isdefined( tag ) )
172 self linkto( parent, tag );
174 self linkto( parent,
"tag_body" );
179 self.heli[bone_location] = spawnStruct();
180 self.heli[bone_location].sound_type = type;
182 self.heli[bone_location].run =
spawn( 0,
self.origin,
"script_origin" );
184 self.heli[bone_location].run.alias = run;
188 if( isdefined( dmg1 ) )
190 self.heli[bone_location].idle =
spawn( 0,
self.origin,
"script_origin" );
192 self.heli[bone_location].idle.alias = dmg1;
196 if( isdefined( dmg2 ) )
198 self.heli[bone_location].idle =
spawn( 0,
self.origin,
"script_origin" );
200 self.heli[bone_location].idle.alias = dmg2;
204 if( isdefined( dmg3 ) )
206 self.heli[bone_location].idle =
spawn( 0,
self.origin,
"script_origin" );
208 self.heli[bone_location].idle.alias = dmg3;
216 self.surface_type = [];
218 self.surface_type[
"default"] =
"dirt";
219 self.surface_type[
"metal"] =
"dirt";
220 self.surface_type[
"concrete"] =
"dirt";
221 self.surface_type[
"wood"] =
"dirt";
222 self.surface_type[
"dirt"] =
"dirt";
223 self.surface_type[
"gravel"] =
"dirt";
224 self.surface_type[
"grass"] =
"dirt";
225 self.surface_type[
"mud"] =
"dirt";
226 self.surface_type[
"snow"] =
"dirt";
227 self.surface_type[
"asphalt"] =
"dirt";
228 self.surface_type[
"brick"] =
"dirt";
229 self.surface_type[
"glass"] =
"dirt";
230 self.surface_type[
"plaster"] =
"dirt";
231 self.surface_type[
"sand"] =
"dirt";
232 self.surface_type[
"rock"] =
"dirt";
234 self.surface_type[
"water"] =
"water";
236 self.surface_type[
"foliage"] =
"dirt";
247 self.terrain_ent_array[surface_type] =
spawn( 0,
self.origin,
"script_origin" );
248 self.terrain_ent_array[surface_type].alias = alias;
254 self.terrain_brass_ent_array[surface_type] =
spawn( 0,
self.origin,
"script_origin" );
255 self.terrain_brass_ent_array[surface_type].alias = alias;
263 if( isdefined(
self.sounddef ) )
267 self.sound_ents = [];
269 self.mph_to_inches_per_sec = 17.6;
270 self.speed_of_wind = 20;
271 self.idle_run_trans_speed = 5;
273 switch(
self.sounddef )
276 case "veh_heli_ai_mp":
282 case "veh_heli_guard_mp":
288 case "veh_heli_supplydrop_mp":
294 case "veh_heli_gunner_mp":
300 case "veh_heli_player_gunner_mp":
305 case "veh_drn_qrdrone_mp":
311 /# printLn(
"^5helicopter type: " +
self.vehicletype +
" vehicletype; playing no helicopter sounds" ); #/
319 /# printLn(
"^6start_helicopter_sounds(): helicopter type not defined" ); #/
325 self waittill(
"entityshutdown" );
328 real_ent StopAllLoopSounds( 4 );
334 entity notify(
"entityshutdown" );
339 switch( heli_bone.sound_type )
342 heli_bone.run playloopsound( heli_bone.run.alias, 2 );
347 /# printLn(
"^6 unknown helicopter type: " + heli_bone.type +
" expecting \"wind\" or \"engine\""); #/
441 self endon(
"entityshutdown" );
443 heli_bone =
self.heli[heli_part];
445 run_id = heli_bone.run playloopsound( heli_bone.run.alias, 0.5 );
447 if (!isdefined( wait_time ) )
450 while( isdefined(
self ) )
453 if( !isdefined( level.heliSoundValues[heli_type] ) || !isdefined( level.heliSoundValues[heli_type][heli_part] ) )
455 /# printLn(
"^5a speed vol/pitch parameter was not defined." ); #/
459 max_speed_vol = level.heliSoundValues[heli_type][heli_part].speedVolumeMax;
460 min_vol = level.heliSoundValues[heli_type][heli_part].volumeMin;
461 max_vol = level.heliSoundValues[heli_type][heli_part].volumeMax;
462 max_speed_pitch = level.heliSoundValues[heli_type][heli_part].speedPitchMax;
463 min_pitch = level.heliSoundValues[heli_type][heli_part].pitchMin;
464 max_pitch = level.heliSoundValues[heli_type][heli_part].pitchMax;
470 plr_vel =
self getvelocity();
471 self.cur_speed = abs (sqrt (VectorDot (plr_vel,plr_vel)) ) /
self.mph_to_inches_per_sec;
474 run_volume =
audio::scale_speed(
self.idle_run_trans_speed, max_speed_vol, min_vol, max_vol,
self.cur_speed );
475 run_pitch =
audio::scale_speed(
self.idle_run_trans_speed, max_speed_pitch, min_pitch, max_pitch,
self.cur_speed );
479 if (isdefined(updown))
481 if (!isdefined (
self.qrdrone_z_difference))
483 self.qrdrone_z_difference = 0;
488 run_volume = run_volume - run_volume_vertical;
493 if( isdefined( run_volume ) && isdefined( run_pitch ) )
501 heli_bone.run setloopstate(heli_bone.run.alias, run_volume, run_pitch, 1, .15);
512 self endon(
"entityshutdown" );
517 self.isFiring =
false;
522 pre_terrain = undefined;
523 next_terrain = undefined;
525 pre_trace_real_ent = undefined;
526 trace_real_ent = undefined;
527 pre_origin = ( 100000, 100000, 100000 );
529 while( isdefined(
self ) )
531 wait( 1 + RandomFloatRange( 0.0, 0.2) );
534 if( DistanceSquared( pre_origin, trace_ent.origin ) < 144 )
539 pre_origin = trace_ent.origin;
541 trace = tracepoint( trace_ent.origin, trace_ent.origin - ( 0, 0, 100000 ) );
543 trace_surface_type =
trace[
"surfacetype"];
545 if( !isdefined(
trace ) )
548 pre_terrain = next_terrain;
549 next_terrain = trace_surface_type;
550 if( !isdefined( pre_terrain ) || !isdefined( next_terrain ) )
556 if( !isdefined(
self.surface_type[next_terrain] ) || !isdefined(
self.surface_type[pre_terrain] ) )
561 surf_type =
self.surface_type[next_terrain];
562 trace_real_ent =
self.terrain_brass_ent_array[surf_type];
564 pre_surf_type =
self.surface_type[pre_terrain];
565 pre_trace_real_ent =
self.terrain_brass_ent_array[pre_surf_type];
567 if( !isdefined(
trace[
"position"] ) )
569 if( isdefined( pre_trace_real_ent ) )
571 pre_trace_real_ent StopAllLoopSounds( 0.5 );
578 pre_trace_real_ent StopAllLoopSounds( 0.5 );
581 trace_real_ent.origin =
trace[
"position"];
582 pre_trace_real_ent.origin =
trace[
"position"];
583 if( isdefined( surf_type ) &&
self.isFiring )
585 if( ( surf_type == pre_surf_type ) && ( pre_trace_real_ent IsPlayingLoopSound() ) )
589 pre_trace_real_ent StopAllLoopSounds( 0.5 );
592 trace_real_ent PlayLoopSound( trace_real_ent.alias, 0.75 );
602 self endon(
"entityshutdown" );
607 pre_terrain = undefined;
608 next_terrain = undefined;
610 pre_trace_real_ent = undefined;
611 trace_real_ent = undefined;
612 pre_origin = ( 100000, 100000, 100000 );
614 while( isdefined(
self ) )
616 wait( 1 + RandomFloatRange( 0.0, 0.2) );
619 if( DistanceSquared( pre_origin, trace_ent.origin ) < 144 )
624 pre_origin = trace_ent.origin;
626 trace = tracepoint( trace_ent.origin, trace_ent.origin - ( 0, 0, 100000 ) );
628 trace_surface_type =
trace[
"surfacetype"];
630 if( !isdefined(
trace ) )
633 pre_terrain = next_terrain;
634 next_terrain = trace_surface_type;
635 if( !isdefined( pre_terrain ) || !isdefined( next_terrain ) )
641 if( !isdefined(
self.surface_type[next_terrain] ) || !isdefined(
self.surface_type[pre_terrain] ) )
646 surf_type =
self.surface_type[next_terrain];
647 trace_real_ent =
self.terrain_ent_array[surf_type];
649 pre_surf_type =
self.surface_type[pre_terrain];
650 pre_trace_real_ent =
self.terrain_ent_array[pre_surf_type];
652 if( !isdefined(
trace[
"position"] ) )
654 if( isdefined( pre_trace_real_ent ) )
656 pre_trace_real_ent StopAllLoopSounds( 0.5 );
663 trace_real_ent.origin =
trace[
"position"];
664 pre_trace_real_ent.origin =
trace[
"position"];
665 if( isdefined( surf_type ) )
667 if( ( surf_type == pre_surf_type ) && ( pre_trace_real_ent IsPlayingLoopSound() ) )
671 pre_trace_real_ent StopAllLoopSounds( 0.5 );
674 trace_real_ent PlayLoopSound( trace_real_ent.alias, 0.5 );
682 /# printLn(
"^stated aircraft_dustkick" ); #/
683 self endon(
"entityshutdown" );
688 if (
self.vehicletype ==
"qrdrone_mp" )
694 slowestRepeatWait = 0.15;
695 fastestRepeatWait = 0.05;
697 numFramesPerTrace = 3;
698 doTraceThisFrame = numFramesPerTrace;
700 defaultRepeatRate = 1.0;
701 repeatRate = defaultRepeatRate;
708 while( isdefined(
self ) )
710 if( repeatRate <= 0 )
712 repeatRate = defaultRepeatRate;
720 if( !isdefined(
self ) )
725 doTraceThisFrame -- ;
728 if( doTraceThisFrame <= 0 )
730 doTraceThisFrame = numFramesPerTrace;
732 trace = bullettrace( trace_ent.origin, trace_ent.origin -( 0, 0, 100000 ),
false, trace_ent );
741 d = distance( trace_ent.origin,
trace[
"position"] );
743 repeatRate = ( ( d - minHeight ) /( maxHeight - minHeight ) ) *( slowestRepeatWait - fastestRepeatWait ) + fastestRepeatWait;
746 if( !isdefined(
trace ) )
751 assert( isdefined( d ) );
755 repeatRate = defaultRepeatRate;
759 if( isdefined(
trace[
"entity"] ) )
761 repeatRate = defaultRepeatRate;
765 if( !isdefined(
trace[
"position"] ) )
767 repeatRate = defaultRepeatRate;
771 if( !isdefined(
trace[
"surfacetype"] ) )
773 trace[
"surfacetype"] =
"dirt";
777 if ( !IsDefined(
self.treadfxnamearray ) || !isdefined(
self.treadfxnamearray[
trace[
"surfacetype"]] ) )
780 if ( isdefined(
self.vehicletype ) )
782 println(
"SCRIPT PRINT: Unknown surface type " +
trace[
"surfacetype"] +
" for vehicle type " +
self.vehicletype);
786 println(
"SCRIPT PRINT: Unknown surface type " +
trace[
"surfacetype"] +
" for vehicle of undefined vehicletype" );
794 if( isdefined(
self.treadfxnamearray[
trace[
"surfacetype"]] ) )
798 playfx( localClientNum,
self.treadfxnamearray[
trace[
"surfacetype"]],
trace[
"position"] );
809 return sound_ent PlayLoopSound ( sound );
811 else if ( isdefined(handle) )
813 sound_ent StopAllLoopSounds( 0.1 );
838 self.leavingBattlefieldSound = sound_ent PlayLoopSound (
"veh_helicopter_alarm" );
840 else if ( isdefined(
self.leavingBattlefieldSound) &&
self.leavingBattlefieldSound )
842 sound_ent StopAllLoopSounds( 0.1 );
848 if ( !isdefined(sound_ent))
851 if ( isdefined(
self.warning_tag) )
853 tag =
self.warning_tag;
855 sound_ent =
spawn( 0,
self GetTagOrigin( tag ),
"script_origin" );
856 sound_ent linkto(
self, tag );
868 return self.lock_sound_ent;
875 return self.leaving_sound_ent;
880 self waittill(
"entityshutdown" );
881 real_ent StopAllLoopSounds( 0.1 );
889 self endon(
"entityshutdown" );
893 qr_ent_up =
spawn( 0,
self.origin,
"script_origin" );
894 qr_ent_down =
spawn( 0,
self.origin,
"script_origin" );
895 qr_ent_either =
spawn( 0,
self.origin,
"script_origin" );
901 self.qrdrone_z_difference = 0;
903 down = qr_ent_down playloopsound (
"veh_qrdrone_move_down");
905 qr_ent_down setloopstate(
"veh_qrdrone_move_down", 0, 0);
908 up = qr_ent_up playloopsound (
"veh_qrdrone_move_up");
910 qr_ent_up setloopstate(
"veh_qrdrone_move_up", 0, 0);
913 either = qr_ent_either playloopsound (
"veh_qrdrone_vertical");
915 qr_ent_either setloopstate(
"veh_qrdrone_vertical", 0, 0);
919 qr_ent_up linkto (
self, tag);
920 qr_ent_down linkto (
self, tag);
921 qr_ent_either linkto (
self, tag);
929 last_pos =
self.origin[2];
933 self.qrdrone_z_difference = (last_pos -
self.origin[2]);
935 if (
self.qrdrone_z_difference < 0)
937 up_difference =
self.qrdrone_z_difference * -1;
970 qr_ent_down setloopstate(
"veh_qrdrone_move_down", run_volume_down, run_pitch_down, volumerate);
972 qr_ent_up setloopstate(
"veh_qrdrone_move_up", run_volume_up, run_pitch_up, volumerate);
974 qr_ent_either setloopstate(
"veh_qrdrone_vertical", run_volume_either, run_pitch_either, volumerate);
982 veh_ent waittill (
"entityshutdown");
989 self endon(
"entityshutdown" );
990 level endon(
"save_restore" );
994 qr_ent_angle =
spawn( 0,
self.origin,
"script_origin" );
997 angle = qr_ent_angle playloopsound (
"veh_qrdrone_idle_rotate");
998 setSoundVolume( angle, 0 );
1001 qr_ent_angle linkto (
self, tag);
1007 last_angle = abs(
self.angles[1] );
1011 turning_speed = last_angle - abs(
self.angles[1] );
1013 abs_turning_speed = abs(turning_speed);
1024 qr_ent_angle setloopstate(
"veh_qrdrone_idle_rotate", jet_stick_vol, jet_stick_pitch, volumerate);
1032 self endon(
"entityshutdown" );
1034 player = getlocalplayers()[0];
1035 return_to_zero=
true;
1039 if ( abs (
self.qrdrone_z_difference) > 5 && return_to_zero)
1041 self playsound (0,
"veh_qrdrone_move_start");
1042 return_to_zero =
false;
1060 else if (abs (
self.qrdrone_z_difference) < 5 && !return_to_zero )
1062 return_to_zero =
true;