IL-GSC/AW/PC/vehicle_scripts/_diveboat.gsc
InfinityLoader b2389dbcb9 Full AW Dump
2024-04-22 02:38:24 -04:00

793 lines
23 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: _diveboat.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 36
* Decompile Time: 580 ms
* Timestamp: 4/22/2024 2:04:48 AM
*******************************************************************/
//Function Number: 1
main(param_00,param_01,param_02)
{
setup_fx();
maps\_vehicle::build_template("diveboat",param_00,param_01,param_02);
maps\_vehicle::build_localinit(::init_local);
maps\_vehicle::build_deathmodel("vehicle_mil_atlas_speedboat_ai","vehicle_mil_atlas_speedboat_dstrypv",0);
maps\_vehicle::build_deathfx("vfx/explosion/vehicle_diveboat_explosion",undefined,"fin_npc_boat_exp");
maps\_vehicle::build_life(999,500,1500);
maps\_vehicle::build_aianims(::setanims,::set_vehicle_anims);
maps\_vehicle::build_team("allies");
maps\_vehicle::build_death_jolt_delay(9999);
if(!isdefined(level.diveboat_anims_initialized))
{
setup_worldhands_anims();
setup_player_driving_anims();
level.diveboat_anims_initialized = 1;
}
precachemodel("vehicle_mil_hoverbike_vm");
precachemodel("vehicle_mil_hoverbike_ai");
precachemodel("vehicle_mil_atlas_speedboat_ai");
precacherumble("steady_rumble");
init_diveboat_weapon();
init_diveboat_weapon_gauge();
maps\_vehicle::build_missile_launcher("diveboat_missile_launcher","hatchL","projectile_rpg7","rpg_guided",::missile_door_open,::missile_door_close,0.2,0.2,0.75,3,5,1);
maps\_vehicle::build_missile_launcher("diveboat_missile_launcher","hatchR","projectile_rpg7","rpg_guided",::missile_door_open,::missile_door_close,0.2,0.2,0.75,3,5,1);
}
//Function Number: 2
setup_fx()
{
level._effect["boat_wake_diveboat_splash_fast"] = loadfx("vfx/treadfx/boat_wake_diveboat_splash_fast");
level._effect["boat_wake_diveboat_splash_slow"] = loadfx("vfx/treadfx/boat_wake_diveboat_splash_slow");
level._effect["diveboat_submerge_splash"] = loadfx("vfx/water/diveboat_submerge_splash");
level._effect["diveboat_submerge_trail"] = loadfx("vfx/water/diveboat_submerge_trail");
level._effect["diveboat_emerge_splash"] = loadfx("vfx/water/diveboat_emerge_splash");
level._effect["boat_wake_diveboat_foam_trail"] = loadfx("vfx/treadfx/boat_wake_diveboat_foam_trail");
level._effect["vehicle_diveboat_death_water_ring"] = loadfx("vfx/explosion/vehicle_diveboat_death_water_ring");
}
//Function Number: 3
init_local()
{
if(self.vehicletype != "diveboat_player")
{
self.playermech_rocket_targeting_allowed = 1;
self enableaimassist();
thread modifydamage();
thread vehicle_death_add();
thread ai_diveboats_chase_trail();
soundscripts\_snd::snd_message("find_npc_dive_boat_handler");
self.script_crashtypeoverride = "diveboat";
}
}
//Function Number: 4
setanims()
{
var_00[0] = spawnstruct();
var_00[0].sittag = "tag_driver";
var_00[0].getin = %hoverbike_mount_driver_dir1;
var_00[0].getout = %hoverbike_dismount_driver;
var_00[0].idle = %hoverbike_driving_idle_guy1;
var_00[0].aianim_simple["hoverbike_driving_flashlight_left_guy1"] = %hoverbike_driving_flashlight_left_guy1;
var_00[0].aianim_simple["hoverbike_driving_flashlight_right_guy1"] = %hoverbike_driving_flashlight_right_guy1;
var_00[0].aianim_simple["hoverbike_driving_gesture_lft_guy1"] = %hoverbike_driving_gesture_lft_guy1;
var_00[0].aianim_simple["hoverbike_driving_gesture_rt_guy1"] = %hoverbike_driving_gesture_rt_guy1;
var_00[0].aianim_simple["hoverbike_driving_idle_guy1"] = %hoverbike_driving_idle_guy1;
var_00[0].aianim_simple["hoverbike_driving_lean_left_idle_guy1"] = %hoverbike_driving_lean_left_idle_guy1;
var_00[0].aianim_simple["hoverbike_driving_lean_left_into_guy1"] = %hoverbike_driving_lean_left_into_guy1;
var_00[0].aianim_simple["hoverbike_driving_lean_left_out_guy1"] = %hoverbike_driving_lean_left_out_guy1;
var_00[0].aianim_simple["hoverbike_driving_lean_right_idle_guy1"] = %hoverbike_driving_lean_right_idle_guy1;
var_00[0].aianim_simple["hoverbike_driving_lean_right_into_guy1"] = %hoverbike_driving_lean_right_into_guy1;
var_00[0].aianim_simple["hoverbike_driving_lean_right_out_guy1"] = %hoverbike_driving_lean_right_out_guy1;
var_00[0].aianim_simple["hoverbike_driving_look_over_lft_shoulder_guy1"] = %hoverbike_driving_look_over_lft_shoulder_guy1;
var_00[0].aianim_simple["hoverbike_driving_look_over_rt_shoulder_guy1"] = %hoverbike_driving_look_over_rt_shoulder_guy1;
return var_00;
}
//Function Number: 5
set_vehicle_anims(param_00)
{
param_00[0].vehicle_idle = %hoverbike_driving_idle_vehicle1;
return param_00;
}
//Function Number: 6
setup_worldhands_anims()
{
level.scr_anim["world_body"]["jetbike_drive_idle"] = %hoverbike_drive_idle_vm;
level.scr_anim["world_body"]["jetbike_casual_drive_idle"] = %hoverbike_casual_vm;
level.scr_anim["world_body"]["mount_jetbike"] = %det_exfil_droponbike_drop_vm;
maps\_anim::addnotetrack_customfunction("world_body","bike_swap",::level_diveboat_to_vm_model,"mount_jetbike");
maps\_anim::addnotetrack_notify("world_body","fov_start","exit_drive_FOV_start","mount_jetbike");
maps\_anim::addnotetrack_notify("world_body","fov_end","exit_drive_FOV_end","mount_jetbike");
}
//Function Number: 7
setup_player_driving_anims()
{
level.scr_anim["frankenbike_jetbike"]["jetbike_casual_drive_idle"] = %hoverbike_casual_vehicle;
level.scr_anim["frankenbike_worldbody"]["jetbike_casual_drive_idle"] = %hoverbike_casual_vm;
level.scr_anim["frankenbike_jetbike"]["idle_branch"] = %hoverbike_vehicle_idle_branch;
level.scr_anim["frankenbike_jetbike"]["idle_slow_branch"] = %hoverbike_vehicle_idle_slow_branch;
level.scr_anim["frankenbike_jetbike"]["idle_slow"] = %hoverbike_drive_idle_vehicle;
level.scr_anim["frankenbike_jetbike"]["idle_slow_lt"] = %hoverbike_drive_idle_lt_vehicle;
level.scr_anim["frankenbike_jetbike"]["idle_slow_rt"] = %hoverbike_drive_idle_rt_vehicle;
level.scr_anim["frankenbike_jetbike"]["idle_fast_branch"] = %hoverbike_vehicle_idle_fast_branch;
level.scr_anim["frankenbike_jetbike"]["idle_fast_throttle"] = %hoverbike_drive_idle_throttle_vehicle;
level.scr_anim["frankenbike_jetbike"]["idle_fast_direction_branch"] = %hoverbike_vehicle_idle_fast_direction_branch;
level.scr_anim["frankenbike_jetbike"]["idle_fast"] = %hoverbike_drive_fast_idle_vehicle;
level.scr_anim["frankenbike_jetbike"]["idle_fast_lt"] = %hoverbike_drive_fast_idle_lt_vehicle;
level.scr_anim["frankenbike_jetbike"]["idle_fast_rt"] = %hoverbike_drive_fast_idle_rt_vehicle;
level.scr_anim["frankenbike_jetbike"]["jump_st"] = %hoverbike_drive_jump_st_vehicle;
level.scr_anim["frankenbike_jetbike"]["jump_loop"] = %hoverbike_drive_jump_loop_vehicle;
level.scr_anim["frankenbike_jetbike"]["jump_end"] = %hoverbike_drive_jump_end_vehicle;
level.scr_anim["frankenbike_worldbody"]["idle_branch"] = %hoverbike_vm_idle_branch;
level.scr_anim["frankenbike_worldbody"]["idle_slow_branch"] = %hoverbike_vm_idle_slow_branch;
level.scr_anim["frankenbike_worldbody"]["idle_slow"] = %hoverbike_drive_idle_vm;
level.scr_anim["frankenbike_worldbody"]["idle_slow_lt"] = %hoverbike_drive_idle_lt_vm;
level.scr_anim["frankenbike_worldbody"]["idle_slow_rt"] = %hoverbike_drive_idle_rt_vm;
level.scr_anim["frankenbike_worldbody"]["idle_fast_branch"] = %hoverbike_vm_idle_fast_branch;
level.scr_anim["frankenbike_worldbody"]["idle_fast_throttle"] = %hoverbike_drive_idle_throttle_vm;
level.scr_anim["frankenbike_worldbody"]["idle_fast_direction_branch"] = %hoverbike_vm_idle_fast_direction_branch;
level.scr_anim["frankenbike_worldbody"]["idle_fast"] = %hoverbike_drive_fast_idle_vm;
level.scr_anim["frankenbike_worldbody"]["idle_fast_lt"] = %hoverbike_drive_fast_idle_lt_vm;
level.scr_anim["frankenbike_worldbody"]["idle_fast_rt"] = %hoverbike_drive_fast_idle_rt_vm;
level.scr_anim["frankenbike_worldbody"]["jump_st"] = %hoverbike_drive_jump_st_vm;
level.scr_anim["frankenbike_worldbody"]["jump_loop"] = %hoverbike_drive_jump_loop_vm;
level.scr_anim["frankenbike_worldbody"]["jump_end"] = %hoverbike_drive_jump_end_vm;
level.scr_anim["player_bike"]["jetbike_drive_idle"] = %hoverbike_drive_idle_vehicle;
level.scr_anim["player_bike"]["jetbike_casual_drive_idle"] = %hoverbike_casual_vehicle;
level.scr_anim["player_bike"]["mount_jetbike"] = %det_exfil_droponbike_drop_vmbike;
}
//Function Number: 8
modifydamage()
{
self endon("death");
for(;;)
{
self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09);
if(var_04 == "MOD_PROJECTILE")
{
var_00 = self.maxhealth * 0.5;
self dodamage(var_00,var_03,var_01,var_01,var_04);
}
}
}
//Function Number: 9
level_diveboat_to_vm_model(param_00)
{
level.diveboat setmodel("vehicle_mil_hoverbike_vm");
}
//Function Number: 10
do_diveboat_threads()
{
thread rumble_thread();
thread handle_diveboat_collisions();
}
//Function Number: 11
stop_diveboat_threads()
{
self notify("stop_diveboat_thread");
self.rumble_entity.intensity = 0;
}
//Function Number: 12
handle_diveboat_collisions()
{
self endon("death");
self endon("stop_diveboat_thread");
for(;;)
{
self waittill("veh_contact",var_00,var_01,var_02,var_03,var_04);
if(isdefined(self.last_collision_time) && self.last_collision_time == gettime())
{
continue;
}
self.last_collision_time = gettime();
var_05 = [];
var_05["vehicle"] = self;
var_05["hit_entity"] = var_00;
var_05["pos"] = var_01;
var_05["impulse"] = var_02;
var_05["relativeVel"] = var_03;
var_05["surface"] = var_04;
soundscripts\_snd::snd_message("aud_impact_system_diveboat",var_05);
}
}
//Function Number: 13
rumble_thread()
{
level.player endon("death");
self endon("stop_diveboat_thread");
var_00 = 40;
var_01 = 0.1;
var_02 = 0.001;
var_03 = 8;
var_04 = 0.1;
var_05 = 0;
self.rumble_entity = maps\_utility::get_rumble_ent("steady_rumble");
self.rumble_entity.intensity = 0;
for(;;)
{
var_06 = var_05;
var_05 = self vehicle_getspeed();
if(self vehicle_diveboatissubmerged())
{
self.rumble_entity.intensity = 0;
}
else
{
var_07 = var_01 * clamp(var_05 / var_00,0,1);
var_07 = var_07 * randomfloat(1);
var_08 = 0;
if(level.player attackbuttonpressed())
{
var_09 = var_05 - var_06;
if(var_09 > 0)
{
var_08 = var_03 * clamp(1 - var_06 / var_05,var_02,1) - var_02;
}
}
var_0A = 0;
var_0B = abs(level.player getnormalizedmovement()[1]);
if(var_0B > 0.3)
{
var_0A = var_0B * var_04;
}
self.rumble_entity.intensity = clamp(var_07 + var_08 + var_0A,0,1);
}
wait(0.1);
}
}
//Function Number: 14
init_diveboat_weapon()
{
precacheitem("diveboat_missile");
precacheshader("veh_hud_friendly");
precacheshader("uav_vehicle_target");
precacheshader("hud_fofbox_hostile");
level.diveboat_weapon_ammo_count = 4;
}
//Function Number: 15
diveboat_weapon_auto_targetting()
{
self.team = "allies";
if(isdefined(level.diveboat_weapon_target))
{
if(isai(level.diveboat_weapon_target))
{
self missile_settargetent(level.diveboat_weapon_target,(0,0,45));
}
else
{
self missile_settargetent(level.diveboat_weapon_target);
}
target_setshader(level.diveboat_weapon_target,"hud_fofbox_hostile");
var_00 = level.diveboat_weapon_target;
level.diveboat_weapon_target.diveboat_weapon_attacked = 1;
level.diveboat_weapon_target = undefined;
var_00 endon("death");
var_00 common_scripts\utility::waittill_notify_or_timeout("damage",2.5);
var_00.diveboat_weapon_attacked = undefined;
target_setshader(var_00,"veh_hud_friendly");
}
}
//Function Number: 16
get_npc_center_offset()
{
if(isai(self) && isalive(self))
{
var_00 = self geteye()[2];
var_01 = self.origin[2];
var_02 = var_00 - var_01 / 2;
return (0,0,var_02);
}
return (0,0,0);
}
//Function Number: 17
set_up_target()
{
if(isdefined(self) && isdefined(self.script_parameters) && self.script_parameters == "diveboat_weapon_target")
{
target_set(self,get_npc_center_offset());
}
}
//Function Number: 18
give_diveboat_weapons()
{
maps\_utility::add_global_spawn_function("axis",::set_up_target);
thread diveboat_weapon_targetting_system();
thread diveboat_weapon_reloading_system();
thread diveboat_weapon_fire_notify();
thread diveboat_weapon_fire_system();
}
//Function Number: 19
remove_diveboat_weapons()
{
maps\_utility::remove_global_spawn_function("axis",::set_up_target);
level notify("remove_diveboat_weapon");
}
//Function Number: 20
diveboat_weapon_targetting_system()
{
level endon("remove_diveboat_weapon");
for(;;)
{
var_00 = target_getarray();
var_01 = [];
foreach(var_03 in var_00)
{
if(isdefined(var_03.ignore_target))
{
target_hidefromplayer(var_03,level.player);
var_03.is_shown_to_player = undefined;
continue;
}
if(isdefined(var_03.diveboat_weapon_attacked))
{
if(sighttracepassed(level.player.origin,var_03.origin,0,var_03,self))
{
if(!isdefined(var_03.is_shown_to_player))
{
target_showtoplayer(var_03,level.player);
var_03.is_shown_to_player = 1;
}
target_setshader(var_03,"hud_fofbox_hostile");
}
else if(isdefined(var_03.is_shown_to_player))
{
target_hidefromplayer(var_03,level.player);
var_03.is_shown_to_player = undefined;
}
continue;
}
if(target_isincircle(var_03,level.player,75,360) && sighttracepassed(level.player.origin,var_03.origin,0,var_03,self))
{
var_01[var_01.size] = var_03;
if(!isdefined(var_03.is_shown_to_player))
{
target_showtoplayer(var_03,level.player);
var_03.is_shown_to_player = 1;
}
target_setshader(var_03,"veh_hud_friendly");
continue;
}
if(isdefined(var_03.is_shown_to_player))
{
target_hidefromplayer(var_03,level.player);
var_03.is_shown_to_player = undefined;
}
}
if(var_01.size > 0)
{
var_05 = var_01[0];
var_06 = distance2dsquared(level.player.origin,var_05.origin);
for(var_07 = 1;var_07 < var_01.size;var_07++)
{
var_08 = distance2dsquared(level.player.origin,var_01[var_07].origin);
if(var_08 < var_06)
{
var_06 = var_08;
var_05 = var_01[var_07];
}
}
level.diveboat_weapon_target = var_05;
target_setshader(var_05,"uav_vehicle_target");
}
wait(0.05);
}
}
//Function Number: 21
diveboat_weapon_reloading_system()
{
level endon("remove_diveboat_weapon");
for(;;)
{
if(!isdefined(level.diveboat_weapon_firing) && level.diveboat_weapon_ammo_count < 4)
{
level.diveboat_weapon_ammo_count++;
var_00 = level.diveboat_weapon_ammo_count / 4;
level.diveboat_weapon_gauge_level = clamp(var_00,0.04,1);
}
wait(0.5);
}
}
//Function Number: 22
diveboat_attack_button_pressed()
{
var_00 = getdvarint("vehDiveboatControlScheme");
if(var_00 == 1)
{
return self buttonpressed("BUTTON_LTRIG");
}
if(var_00 == 2)
{
return self buttonpressed("BUTTON_A");
}
return self buttonpressed("BUTTON_RTRIG");
}
//Function Number: 23
diveboat_weapon_fire_notify()
{
level endon("remove_diveboat_weapon");
for(;;)
{
if(level.player diveboat_attack_button_pressed() && level.diveboat_weapon_ammo_count > 0 && !self vehicle_diveboatissubmerged())
{
level.diveboat_weapon_firing = 1;
level.player notify("LISTEN_attack_button_pressed");
var_00 = 0;
var_01 = 0;
while(var_00 < 0.1)
{
if(!level.player diveboat_attack_button_pressed())
{
var_01 = 1;
}
var_00 = var_00 + 0.05;
wait(0.05);
}
level.diveboat_weapon_firing = undefined;
if(!var_01)
{
while(level.player diveboat_attack_button_pressed())
{
wait(0.05);
}
}
continue;
}
wait(0.05);
}
}
//Function Number: 24
diveboat_weapon_fire_system()
{
level endon("remove_diveboat_weapon");
for(;;)
{
level.player waittill("LISTEN_attack_button_pressed");
level.diveboat_weapon_ammo_count--;
var_00 = level.diveboat_weapon_ammo_count / 4;
level.diveboat_weapon_gauge_level = clamp(var_00,0.04,1);
var_01 = level.player getplayerangles();
var_02 = level.player geteye() + 50 * anglestoup(var_01);
var_03 = level.player geteye() + 500 * anglestoforward(var_01) + 80 * anglestoup(var_01);
var_04 = magicbullet("diveboat_missile",var_02,var_03,level.player);
var_04 thread diveboat_weapon_auto_targetting();
}
}
//Function Number: 25
init_diveboat_weapon_gauge()
{
level.diveboat_weapon_gauge_level = 1;
if(isdefined(0) && 0)
{
precacheshader("hud_temperature_gauge");
thread temp_diveboat_weapon_gauge();
}
}
//Function Number: 26
setup_missile_launchers()
{
self.missiletags = [];
self.missiletagsready = [];
self.missiletags[0] = "TAG_MISSILE1";
self.missiletags[1] = "TAG_MISSILE2";
self.missiletags[2] = "TAG_MISSILE3";
self.missiletags[3] = "TAG_MISSILE4";
self.missiletags[4] = "TAG_MISSILE5";
self.missiletags[5] = "TAG_MISSILE6";
self.missiledooropen = 0;
thread vehicle_scripts\_vehicle_missile_launcher_ai::reload_launchers();
}
//Function Number: 27
missile_door_open()
{
self setanimknobrestart(%atlas_speedboat_hatch_l_open,0.9,0);
self setanimlimited(%atlas_speedboat_hatch_l_root,1,0);
self setanimknobrestart(%atlas_speedboat_hatch_r_open,0.9,0);
self setanimlimited(%atlas_speedboat_hatch_r_root,1,0);
wait(getanimlength(%atlas_speedboat_hatch_l_open));
}
//Function Number: 28
missile_door_close()
{
self setanimlimited(%atlas_speedboat_hatch_l_root,0.01,0.5);
self setanimlimited(%atlas_speedboat_hatch_r_root,0.01,0.5);
wait(getanimlength(%atlas_speedboat_hatch_l_open));
}
//Function Number: 29
fire_missles_at_target_array(param_00,param_01,param_02)
{
vehicle_scripts\_vehicle_missile_launcher_ai::fire_missles_at_target_array(param_00,param_01,undefined,param_02);
}
//Function Number: 30
setup_and_fire_missles_at_guys_repeated(param_00,param_01)
{
self endon("death");
if(self.vehicletype != "diveboat_player")
{
setup_missile_launchers();
self.missile_auto_reload = 1;
self useanimtree(#animtree);
self setanim(%atlas_speedboat_idle,1,0,1);
}
if(!isdefined(param_01))
{
param_01 = 2;
}
vehicle_scripts\_vehicle_missile_launcher_ai::fire_missles_at_target_array_repeated(param_00,::missile_door_open,1,1,1,"diveboats",1,param_01);
}
//Function Number: 31
temp_diveboat_weapon_gauge()
{
var_00 = 610;
var_01 = 250;
var_02 = 156;
var_03 = int(15);
var_04 = newhudelem();
var_04.x = var_00 - 0.5 * 30 - var_03;
var_04.y = var_01 - int(40);
var_04.alignx = "right";
var_04.aligny = "bottom";
var_04.horzalign = "fullscreen";
var_04.vertalign = "fullscreen";
var_04.color = (0.1,0.6,0.1);
var_04 setshader("white",var_03,int(var_02 * level.diveboat_weapon_gauge_level));
var_05 = newhudelem();
var_05.x = var_00;
var_05.y = var_01;
var_05.alignx = var_04.alignx;
var_05.aligny = var_04.aligny;
var_05.horzalign = var_04.horzalign;
var_05.vertalign = var_04.vertalign;
var_05.color = (1,1,1);
var_05 setshader("hud_temperature_gauge",30,200);
var_06 = 0.05;
for(;;)
{
if(isdefined(level.player.drivingvehicle))
{
var_04.alpha = 1;
var_05.alpha = 1;
var_07 = level.diveboat_weapon_gauge_level;
var_04 scaleovertime(var_06,var_03,int(var_02 * var_07));
if(var_07 > 0.5)
{
var_04.color = (0.1,0.6,0.1);
}
else if(var_07 > 0.2)
{
var_04.color = (1,1,0.1);
}
else
{
var_04.color = (1,0.1,0.1);
}
}
else
{
var_04.alpha = 0;
var_05.alpha = 0;
}
wait(var_06);
}
}
//Function Number: 32
vehicle_death_add()
{
var_00 = undefined;
var_01 = undefined;
while(isalive(self) && !issubstr(self.model,"dstrypv"))
{
var_00 = self.origin;
wait 0.05;
}
thread vehicle_death_add_remove_carcass();
var_02 = bullettrace(var_00 + (0,0,500),var_00 + (0,0,-100),0,self,0,0,0,0,0);
if(isdefined(var_02["surfacetype"]) && issubstr(var_02["surfacetype"],"water"))
{
var_03 = var_02["position"];
}
else
{
return;
}
var_04 = common_scripts\utility::spawn_tag_origin();
var_04.origin = (var_00[0],var_00[1],var_03[2]);
var_04.angles = (270,0,0);
playfxontag(common_scripts\utility::getfx("vehicle_diveboat_death_water_ring"),var_04,"tag_origin");
wait(3);
stopfxontag(common_scripts\utility::getfx("vehicle_diveboat_death_water_ring"),var_04,"tag_origin");
var_04 delete();
}
//Function Number: 33
vehicle_death_add_remove_carcass()
{
wait(0.25);
if(isremovedentity(self))
{
return;
}
if(isdefined(level.player.underwater) && level.player.underwater)
{
var_00 = getdvarint("cg_fov");
while(level.player worldpointinreticle_circle(self.origin,var_00,350))
{
wait 0.05;
if(isremovedentity(self))
{
return;
}
}
self delete();
return;
}
self delete();
}
//Function Number: 34
ai_diveboats_chase_trail()
{
self endon("death");
var_00 = bullettrace(self.origin + (0,0,500),self.origin + (0,0,-100),0,self,0,0,0,0,0);
if(isdefined(var_00["surfacetype"]) && issubstr(var_00["surfacetype"],"water"))
{
var_01 = var_00["position"];
}
else
{
var_01 = self.origin;
}
thread ai_diveboat_foam_trail(var_01[2]);
while(isdefined(self) && isalive(self) && !issubstr(self.model,"dstrypv"))
{
var_02 = self vehicle_getspeed();
if(self vehicle_diveboatissubmerged())
{
continue;
}
var_03 = self.origin[2] - var_01[2];
if(var_03 <= 15)
{
if(var_02 > 35)
{
playfxontag(common_scripts\utility::getfx("boat_wake_diveboat_splash_fast"),self,"tag_origin");
}
else if(var_02 <= 35 && var_02 >= 10)
{
playfxontag(common_scripts\utility::getfx("boat_wake_diveboat_splash_slow"),self,"tag_origin");
}
else if(var_02 < 10)
{
}
}
wait(0.3);
}
self notify("boat_dead");
}
//Function Number: 35
ai_diveboat_foam_trail(param_00)
{
self endon("boat_dead");
var_01 = self vehicle_diveboatissubmerged();
var_02 = 0;
var_03 = common_scripts\utility::spawn_tag_origin();
playfxontag(common_scripts\utility::getfx("boat_wake_diveboat_foam_trail"),var_03,"tag_origin");
while(isdefined(self) && isalive(self) && !issubstr(self.model,"dstrypv"))
{
var_03.origin = (self.origin[0],self.origin[1],param_00);
var_03.angles = (0,self.angles[1],0);
if(isdefined(self))
{
var_01 = self vehicle_diveboatissubmerged();
if(var_01 != var_02)
{
if(var_01)
{
playfxontag(common_scripts\utility::getfx("diveboat_submerge_splash"),var_03,"tag_origin");
playfxontag(common_scripts\utility::getfx("diveboat_submerge_trail"),self,"tag_origin");
stopfxontag(common_scripts\utility::getfx("boat_wake_diveboat_foam_trail"),var_03,"tag_origin");
}
else
{
playfxontag(common_scripts\utility::getfx("diveboat_emerge_splash"),var_03,"tag_origin");
playfxontag(common_scripts\utility::getfx("boat_wake_diveboat_foam_trail"),var_03,"tag_origin");
stopfxontag(common_scripts\utility::getfx("diveboat_submerge_splash"),var_03,"tag_origin");
}
var_02 = var_01;
wait(0.05);
}
}
wait(0.05);
}
wait(0.05);
stopfxontag(common_scripts\utility::getfx("boat_wake_diveboat_foam_trail"),var_03,"tag_origin");
var_03 delete();
}
//Function Number: 36
diveboat_audio()
{
self endon("death");
var_00 = spawnstruct();
var_00.player_mode = 1;
var_00.preset_name = "diveboat";
var_01 = ::vehicle_scripts\_diveboat_aud::diveboat_constructor;
soundscripts\_snd::snd_message("snd_register_vehicle",var_00.preset_name,var_01);
if(var_00.player_mode == 1)
{
soundscripts\_snd::snd_message("snd_start_vehicle",var_00);
}
common_scripts\utility::flag_wait("flag_objective_boat_chase_complete");
maps\_utility::delaythread(5,::soundscripts\_snd::snd_message,"snd_stop_vehicle");
}