#include maps/mp/zombies/_zm_unitrigger; #include maps/mp/gametypes_zm/_globallogic_score; #include maps/mp/zm_tomb_utility; #include maps/mp/zombies/_zm_weapons; #include maps/mp/zombies/_zm_utility; #include maps/mp/_utility; #include common_scripts/utility; init_level_specific_audio() { flag_init( "story_vo_playing" ); flag_init( "round_one_narrative_vo_complete" ); flag_init( "maxis_audiolog_gr0_playing" ); flag_init( "maxis_audiolog_gr1_playing" ); flag_init( "maxis_audiolog_gr2_playing" ); flag_init( "maxis_audio_log_1" ); flag_init( "maxis_audio_log_2" ); flag_init( "maxis_audio_log_3" ); flag_init( "maxis_audio_log_4" ); flag_init( "maxis_audio_log_5" ); flag_init( "maxis_audio_log_6" ); flag_init( "generator_find_vo_playing" ); flag_init( "samantha_intro_done" ); flag_init( "maxis_crafted_intro_done" ); level.oh_shit_vo_cooldown = 0; level.remove_perk_vo_delay = 1; setdvar( "zombie_kills", "5" ); setdvar( "zombie_kill_timer", "6" ); if ( is_classic() ) { level._audio_custom_response_line = ::tomb_audio_custom_response_line; level.audio_get_mod_type = ::tomb_audio_get_mod_type_override; level.custom_kill_damaged_vo = ::maps/mp/zombies/_zm_audio::custom_kill_damaged_vo; level._custom_zombie_oh_shit_vox_func = ::tomb_custom_zombie_oh_shit_vox; level.gib_on_damage = ::tomb_custom_crawler_spawned_vo; level._audio_custom_weapon_check = ::tomb_audio_custom_weapon_check; level._magic_box_used_vo = ::tomb_magic_box_used_vo; level thread start_narrative_vo(); level thread first_magic_box_seen_vo(); level thread start_samantha_intro_vo(); level.zombie_custom_craftable_built_vo = ::tomb_drone_built_vo; level thread discover_dig_site_vo(); level thread maxis_audio_logs(); level thread discover_pack_a_punch(); } tomb_add_player_dialogue( "player", "general", "no_money_weapon", "nomoney_generic", undefined ); tomb_add_player_dialogue( "player", "general", "no_money_box", "nomoney_generic", undefined ); tomb_add_player_dialogue( "player", "general", "perk_deny", "nomoney_generic", undefined ); tomb_add_player_dialogue( "player", "general", "no_money_capture", "nomoney_generic", undefined ); tomb_add_player_dialogue( "player", "perk", "specialty_armorvest", "perk_jugga", undefined ); tomb_add_player_dialogue( "player", "perk", "specialty_quickrevive", "perk_revive", undefined ); tomb_add_player_dialogue( "player", "perk", "specialty_fastreload", "perk_speed", undefined ); tomb_add_player_dialogue( "player", "perk", "specialty_longersprint", "perk_stamine", undefined ); tomb_add_player_dialogue( "player", "perk", "specialty_additionalprimaryweapon", "perk_mule", undefined ); tomb_add_player_dialogue( "player", "kill", "closekill", "kill_close", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "damage", "kill_damaged", undefined, 50 ); tomb_add_player_dialogue( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot", 25 ); tomb_add_player_dialogue( "player", "kill", "raygun", "kill_ray", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "raymk2", "kill_raymk2", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "one_inch_punch", "kill_one_inch", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "ice_staff", "kill_ice", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "ice_staff_upgrade", "kill_ice_upgrade", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "fire_staff", "kill_fire", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "fire_staff_upgrade", "kill_fire_upgrade", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "light_staff", "kill_light", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "light_staff_upgrade", "kill_light_upgrade", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "wind_staff", "kill_wind", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "wind_staff_upgrade", "kill_wind_upgrade", undefined, 15 ); tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_0_neg", "head_rspnd_to_plr_0_neg", undefined, 100 ); tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_0_pos", "head_rspnd_to_plr_0_pos", undefined, 100 ); tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_1_neg", "head_rspnd_to_plr_1_neg", undefined, 100 ); tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_1_pos", "head_rspnd_to_plr_1_pos", undefined, 100 ); tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_2_neg", "head_rspnd_to_plr_2_neg", undefined, 100 ); tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_2_pos", "head_rspnd_to_plr_2_pos", undefined, 100 ); tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_3_neg", "head_rspnd_to_plr_3_neg", undefined, 100 ); tomb_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_3_pos", "head_rspnd_to_plr_3_pos", undefined, 100 ); tomb_add_player_dialogue( "player", "powerup", "zombie_blood", "powerup_zombie_blood", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "revive_up", "revive_player", "revive_player", 100 ); tomb_add_player_dialogue( "player", "general", "heal_revived_pos", "heal_revived_pos", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "heal_revived_neg", "heal_revived_neg", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "exert_sigh", "exert_sigh", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "exert_laugh", "exert_laugh", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "pain_high", "pain_high", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "build_dd_pickup", "build_dd_pickup", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "build_dd_brain_pickup", "pickup_brain", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "build_dd_final", "build_dd_final", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "build_dd_plc", "build_dd_take", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "build_zs_pickup", "build_zs_pickup", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "build_zs_final", "build_zs_final", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "build_zs_plc", "build_zs_take", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "record_pickup", "pickup_record", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "gramophone_pickup", "pickup_gramophone", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "place_gramophone", "place_gramophone", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "staff_part_pickup", "pickup_staff_part", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "crystal_pickup", "pickup_crystal", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "pickup_fire", "pickup_fire", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "pickup_ice", "pickup_ice", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "pickup_light", "pickup_light", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "pickup_wind", "pickup_wind", undefined, 100 ); tomb_add_player_dialogue( "player", "puzzle", "try_puzzle", "activate_generic", undefined ); tomb_add_player_dialogue( "player", "puzzle", "puzzle_confused", "confusion_generic", undefined ); tomb_add_player_dialogue( "player", "puzzle", "puzzle_good", "outcome_yes_generic", undefined ); tomb_add_player_dialogue( "player", "puzzle", "puzzle_bad", "outcome_no_generic", undefined ); tomb_add_player_dialogue( "player", "puzzle", "berate_respond", "generic_chastise", undefined ); tomb_add_player_dialogue( "player", "puzzle", "encourage_respond", "generic_encourage", undefined ); tomb_add_player_dialogue( "player", "staff", "first_piece", "1st_staff_found", undefined ); tomb_add_player_dialogue( "player", "general", "build_pickup", "pickup_generic", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "reboard", "rebuild_boards", undefined, 100 ); tomb_add_player_dialogue( "player", "weapon_pickup", "explo", "wpck_explo", undefined, 100 ); tomb_add_player_dialogue( "player", "weapon_pickup", "raygun_mark2_zm", "wpck_raymk2", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "use_box_intro", "use_box_intro", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "use_box_2nd_time", "use_box_2nd_time", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "take_weapon_intro", "take_weapon_intro", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "take_weapon_2nd_time", "take_weapon_2nd_time", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "discover_wall_buy", "discover_wall_buy", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "generic_wall_buy", "generic_wall_buy", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "pap_arm", "pap_arm", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "pap_discovered", "capture_zones", undefined, 100 ); tomb_add_player_dialogue( "player", "tank", "discover_tank", "discover_tank", undefined ); tomb_add_player_dialogue( "player", "tank", "tank_flame_zombie", "kill_tank", undefined ); tomb_add_player_dialogue( "player", "tank", "tank_buy", "buy_tank", undefined ); tomb_add_player_dialogue( "player", "tank", "tank_leave", "exit_tank", undefined ); tomb_add_player_dialogue( "player", "tank", "tank_cooling", "cool_tank", undefined ); tomb_add_player_dialogue( "player", "tank", "tank_left_behind", "miss_tank", undefined ); tomb_add_player_dialogue( "player", "general", "siren_1st_time", "siren_1st_time", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "siren_generic", "siren_generic", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "multiple_mechs", "multiple_mechs", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "discover_mech", "discover_mech", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "mech_defeated", "mech_defeated", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "mech_grab", "rspnd_mech_grab", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "shoot_mech_arm", "shoot_mech_arm", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "shoot_mech_head", "shoot_mech_head", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "shoot_mech_power", "shoot_mech_power", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "rspnd_mech_jump", "rspnd_mech_jump", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "enter_robot", "enter_robot", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "purge_robot", "purge_robot", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "exit_robot", "exit_robot", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "air_chute_landing", "air_chute_landing", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "robot_crush_golden", "robot_crush_golden", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "robot_crush_player", "robot_crush_player", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "discover_robot", "discover_robot", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "see_robots", "see_robots", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "robot_crush_zombie", "robot_crush_zombie", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "robot_crush_mech", "robot_crush_mech", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "shoot_robot", "shoot_robot", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "warn_robot_foot", "warn_robot_foot", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "warn_robot", "warn_robot", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "use_beacon", "use_beacon", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_0_neg", "srnd_rspnd_to_plr_0_neg", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_1_neg", "srnd_rspnd_to_plr_1_neg", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_2_neg", "srnd_rspnd_to_plr_2_neg", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_3_neg", "srnd_rspnd_to_plr_3_neg", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_0_pos", "srnd_rspnd_to_plr_0_pos", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_1_pos", "srnd_rspnd_to_plr_1_pos", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_2_pos", "srnd_rspnd_to_plr_2_pos", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "srnd_rspnd_to_plr_3_pos", "srnd_rspnd_to_plr_3_pos", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "achievement", "earn_acheivement", undefined, 100 ); tomb_add_player_dialogue( "player", "quest", "find_secret", "find_secret", undefined, 100 ); tomb_add_player_dialogue( "player", "perk", "one_inch", "perk_one_inch", undefined, 100 ); tomb_add_player_dialogue( "player", "digging", "pickup_shovel", "pickup_shovel", undefined, 100 ); tomb_add_player_dialogue( "player", "digging", "dig_gun", "dig_gun", undefined, 15 ); tomb_add_player_dialogue( "player", "digging", "dig_grenade", "dig_grenade", undefined, 15 ); tomb_add_player_dialogue( "player", "digging", "dig_zombie", "dig_zombie", undefined, 15 ); tomb_add_player_dialogue( "player", "digging", "dig_staff_part", "dig_staff_part", undefined, 100 ); tomb_add_player_dialogue( "player", "digging", "dig_powerup", "dig_powerup", undefined, 15 ); tomb_add_player_dialogue( "player", "digging", "dig_cash", "dig_cash", undefined, 15 ); tomb_add_player_dialogue( "player", "soul_box", "zm_box_encourage", "zm_box_encourage", undefined, 100 ); tomb_add_player_dialogue( "player", "zone_capture", "capture_started", "capture_zombies", undefined, 100 ); tomb_add_player_dialogue( "player", "zone_capture", "recapture_started", "roaming_zombies", undefined, 100 ); tomb_add_player_dialogue( "player", "zone_capture", "recapture_generator_attacked", "recapture_initiated", undefined, 100 ); tomb_add_player_dialogue( "player", "zone_capture", "recapture_prevented", "recapture_prevented", undefined, 100 ); tomb_add_player_dialogue( "player", "zone_capture", "all_generators_captured", "zones_held", undefined, 100 ); tomb_add_player_dialogue( "player", "lockdown", "power_off", "lockdown_generic", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "struggle_mud", "struggle_mud", undefined, 100 ); tomb_add_player_dialogue( "player", "general", "discover_dig_site", "discover_dig_site", undefined, 100 ); tomb_add_player_dialogue( "player", "quadrotor", "kill_drone", "kill_drone", undefined, 100 ); tomb_add_player_dialogue( "player", "quadrotor", "rspnd_drone_revive", "rspnd_drone_revive", undefined, 100 ); tomb_add_player_dialogue( "player", "wunderfizz", "perk_wonder", "perk_wonder", undefined, 100 ); tomb_add_player_dialogue( "player", "samantha", "hear_samantha_1", "hear_samantha_1", undefined, 100 ); tomb_add_player_dialogue( "player", "samantha", "heroes_confer", "heroes_confer", undefined, 100 ); tomb_add_player_dialogue( "player", "samantha", "hear_samantha_3", "hear_samantha_3", undefined, 100 ); init_sam_promises(); } tomb_add_player_dialogue( speaker, category, type, alias, response, chance ) { level.vox zmbvoxadd( speaker, category, type, alias, response ); if ( isDefined( chance ) ) { add_vox_response_chance( type, chance ); } } tomb_audio_get_mod_type_override( impact, mod, weapon, zombie, instakill, dist, player ) { close_dist = 4096; med_dist = 15376; far_dist = 75625; a_str_mod = []; if ( isDefined( zombie.staff_dmg ) ) { weapon = zombie.staff_dmg; } else { if ( isDefined( zombie ) && isDefined( zombie.damageweapon ) ) { weapon = zombie.damageweapon; } } if ( weapon == "staff_water_zm" || weapon == "staff_water_upgraded_zm" ) { a_str_mod[ a_str_mod.size ] = "ice_staff"; } if ( weapon == "staff_water_upgraded2_zm" || weapon == "staff_water_upgraded3_zm" ) { a_str_mod[ a_str_mod.size ] = "ice_staff_upgrade"; } if ( weapon == "staff_fire_zm" || weapon == "staff_fire_upgraded_zm" ) { a_str_mod[ a_str_mod.size ] = "fire_staff"; } if ( weapon == "staff_fire_upgraded2_zm" || weapon == "staff_fire_upgraded3_zm" ) { a_str_mod[ a_str_mod.size ] = "fire_staff_upgrade"; } if ( weapon == "staff_lightning_zm" || weapon == "staff_lightning_upgraded_zm" ) { a_str_mod[ a_str_mod.size ] = "light_staff"; } if ( weapon == "staff_lightning_upgraded2_zm" || weapon == "staff_lightning_upgraded3_zm" ) { a_str_mod[ a_str_mod.size ] = "light_staff_upgrade"; } if ( weapon == "staff_air_zm" || weapon == "staff_air_upgraded_zm" ) { a_str_mod[ a_str_mod.size ] = "wind_staff"; } if ( weapon == "staff_air_upgraded2_zm" || weapon == "staff_air_upgraded3_zm" ) { a_str_mod[ a_str_mod.size ] = "wind_staff_upgrade"; } if ( is_headshot( weapon, impact, mod ) && dist >= far_dist ) { a_str_mod[ a_str_mod.size ] = "headshot"; } if ( weapon == "ray_gun_zm" || weapon == "ray_gun_upgraded_zm" ) { if ( dist > far_dist ) { if ( !instakill ) { a_str_mod[ a_str_mod.size ] = "raygun"; } else { a_str_mod[ a_str_mod.size ] = "weapon_instakill"; } } } if ( weapon == "raygun_mark2_zm" || weapon == "raygun_mark2_upgraded_zm" ) { if ( dist > far_dist ) { if ( !instakill ) { a_str_mod[ a_str_mod.size ] = "raymk2"; } else { a_str_mod[ a_str_mod.size ] = "weapon_instakill"; } } } if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && weapon != "ray_gun_upgraded_zm" && weapon != "raygun_mark2_zm" && weapon != "raygun_mark2_upgraded_zm" && isDefined( zombie.is_on_fire ) && !zombie.is_on_fire ) { if ( !issubstr( weapon, "staff" ) ) { if ( !instakill ) { a_str_mod[ a_str_mod.size ] = "explosive"; } else { a_str_mod[ a_str_mod.size ] = "weapon_instakill"; } } } if ( instakill ) { if ( mod == "MOD_MELEE" ) { a_str_mod[ a_str_mod.size ] = "melee_instakill"; } else { a_str_mod[ a_str_mod.size ] = "weapon_instakill"; } } if ( mod != "MOD_MELEE" && !zombie.has_legs ) { a_str_mod[ a_str_mod.size ] = "crawler"; } if ( mod != "MOD_BURNED" && dist < close_dist ) { a_str_mod[ a_str_mod.size ] = "closekill"; } if ( a_str_mod.size == 0 ) { str_mod_final = "default"; } else if ( a_str_mod.size == 1 ) { str_mod_final = a_str_mod[ 0 ]; } else { i = 0; while ( i < a_str_mod.size ) { if ( cointoss() ) { str_mod_final = a_str_mod[ i ]; } i++; } str_mod_final = a_str_mod[ randomint( a_str_mod.size ) ]; } return str_mod_final; } tomb_custom_zombie_oh_shit_vox() { self endon( "death_or_disconnect" ); while ( 1 ) { wait 1; if ( isDefined( self.oh_shit_vo_cooldown ) && self.oh_shit_vo_cooldown ) { continue; } players = get_players(); zombs = get_round_enemy_array(); if ( players.size <= 1 ) { n_distance = 250; n_zombies = 5; n_chance = 30; n_cooldown_time = 20; } else { n_distance = 250; n_zombies = 5; n_chance = 30; n_cooldown_time = 15; } close_zombs = 0; i = 0; while ( i < zombs.size ) { if ( isDefined( zombs[ i ].favoriteenemy ) || zombs[ i ].favoriteenemy == self && !isDefined( zombs[ i ].favoriteenemy ) ) { if ( distancesquared( zombs[ i ].origin, self.origin ) < ( n_distance * n_distance ) ) { close_zombs++; } } i++; } if ( close_zombs >= n_zombies ) { if ( randomint( 100 ) < n_chance && isDefined( self.giant_robot_transition ) && !self.giant_robot_transition && !isDefined( self.in_giant_robot_head ) ) { self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "oh_shit" ); self thread global_oh_shit_cooldown_timer( n_cooldown_time ); wait n_cooldown_time; } } } } global_oh_shit_cooldown_timer( n_cooldown_time ) { self endon( "disconnect" ); self.oh_shit_vo_cooldown = 1; wait n_cooldown_time; self.oh_shit_vo_cooldown = 0; } tomb_custom_crawler_spawned_vo() { self endon( "death" ); if ( isDefined( self.a.gib_ref ) && isalive( self ) ) { if ( self.a.gib_ref != "no_legs" || self.a.gib_ref == "right_leg" && self.a.gib_ref == "left_leg" ) { if ( isDefined( self.attacker ) && isplayer( self.attacker ) ) { if ( isDefined( self.attacker.crawler_created_vo_cooldown ) && self.attacker.crawler_created_vo_cooldown ) { return; } rand = randomintrange( 0, 100 ); if ( rand < 15 ) { self.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "crawl_spawn" ); self.attacker thread crawler_created_vo_cooldown(); } } } } } crawler_created_vo_cooldown() { self endon( "disconnect" ); self.crawler_created_vo_cooldown = 1; wait 30; self.crawler_created_vo_cooldown = 0; } tomb_audio_custom_weapon_check( weapon, magic_box ) { self endon( "death" ); self endon( "disconnect" ); if ( isDefined( magic_box ) && magic_box ) { if ( isDefined( self.magic_box_uses ) && self.magic_box_uses == 1 ) { self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "take_weapon_intro" ); } else { if ( isDefined( self.magic_box_uses ) && self.magic_box_uses == 2 ) { self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "take_weapon_2nd_time" ); } else { type = self maps/mp/zombies/_zm_weapons::weapon_type_check( weapon ); return type; } } } else { if ( issubstr( weapon, "staff" ) ) { if ( weapon == "staff_fire_zm" ) { self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pickup_fire" ); level notify( "staff_crafted_vo" ); } else if ( weapon == "staff_water_zm" ) { self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pickup_ice" ); level notify( "staff_crafted_vo" ); } else if ( weapon == "staff_air_zm" ) { self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pickup_wind" ); level notify( "staff_crafted_vo" ); } else { if ( weapon == "staff_lightning_zm" ) { self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "pickup_light" ); level notify( "staff_crafted_vo" ); } } } else if ( !isDefined( self.wallbuys_purchased ) ) { self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_wall_buy" ); self.wallbuys_purchased = 1; } else if ( weapon == "sticky_grenade_zm" || weapon == "claymore_zm" ) { self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "explo" ); } else { self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "generic_wall_buy" ); } } return "crappy"; } tomb_magic_box_used_vo() { if ( !isDefined( self.magic_box_uses ) ) { self.magic_box_uses = 1; } else { self.magic_box_uses++; } if ( self.magic_box_uses == 1 ) { self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "use_box_intro" ); } else { if ( self.magic_box_uses == 2 ) { self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "use_box_2nd_time" ); } } } easter_egg_song_vo( player ) { wait 3,5; if ( isalive( player ) ) { player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" ); } else { while ( 1 ) { a_players = getplayers(); _a643 = a_players; _k643 = getFirstArrayKey( _a643 ); while ( isDefined( _k643 ) ) { player = _a643[ _k643 ]; if ( isalive( player ) ) { if ( isDefined( player.dontspeak ) && !player.dontspeak ) { player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" ); } } _k643 = getNextArrayKey( _a643, _k643 ); } } wait 0,1; } } play_gramophone_place_vo() { if ( isDefined( self.dontspeak ) && !self.dontspeak ) { if ( isDefined( self.gramophone_place_vo ) && !self.gramophone_place_vo ) { self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "place_gramophone" ); self.gramophone_place_vo = 1; } } } setup_personality_character_exerts() { level.exert_sounds[ 1 ][ "burp" ][ 0 ] = "vox_plr_0_exert_burp_0"; level.exert_sounds[ 1 ][ "burp" ][ 1 ] = "vox_plr_0_exert_burp_1"; level.exert_sounds[ 1 ][ "burp" ][ 2 ] = "vox_plr_0_exert_burp_2"; level.exert_sounds[ 1 ][ "burp" ][ 3 ] = "vox_plr_0_exert_burp_3"; level.exert_sounds[ 1 ][ "burp" ][ 4 ] = "vox_plr_0_exert_burp_4"; level.exert_sounds[ 1 ][ "burp" ][ 5 ] = "vox_plr_0_exert_burp_5"; level.exert_sounds[ 1 ][ "burp" ][ 6 ] = "vox_plr_0_exert_burp_6"; level.exert_sounds[ 2 ][ "burp" ][ 0 ] = "vox_plr_1_exert_burp_0"; level.exert_sounds[ 2 ][ "burp" ][ 1 ] = "vox_plr_1_exert_burp_1"; level.exert_sounds[ 2 ][ "burp" ][ 2 ] = "vox_plr_1_exert_burp_2"; level.exert_sounds[ 2 ][ "burp" ][ 3 ] = "vox_plr_1_exert_burp_3"; level.exert_sounds[ 3 ][ "burp" ][ 0 ] = "vox_plr_2_exert_burp_0"; level.exert_sounds[ 3 ][ "burp" ][ 1 ] = "vox_plr_2_exert_burp_1"; level.exert_sounds[ 3 ][ "burp" ][ 2 ] = "vox_plr_2_exert_burp_2"; level.exert_sounds[ 3 ][ "burp" ][ 3 ] = "vox_plr_2_exert_burp_3"; level.exert_sounds[ 3 ][ "burp" ][ 4 ] = "vox_plr_2_exert_burp_4"; level.exert_sounds[ 3 ][ "burp" ][ 5 ] = "vox_plr_2_exert_burp_5"; level.exert_sounds[ 3 ][ "burp" ][ 6 ] = "vox_plr_2_exert_burp_6"; level.exert_sounds[ 4 ][ "burp" ][ 0 ] = "vox_plr_3_exert_burp_0"; level.exert_sounds[ 4 ][ "burp" ][ 1 ] = "vox_plr_3_exert_burp_1"; level.exert_sounds[ 4 ][ "burp" ][ 2 ] = "vox_plr_3_exert_burp_2"; level.exert_sounds[ 4 ][ "burp" ][ 3 ] = "vox_plr_3_exert_burp_3"; level.exert_sounds[ 4 ][ "burp" ][ 4 ] = "vox_plr_3_exert_burp_4"; level.exert_sounds[ 4 ][ "burp" ][ 5 ] = "vox_plr_3_exert_burp_5"; level.exert_sounds[ 4 ][ "burp" ][ 6 ] = "vox_plr_3_exert_burp_6"; level.exert_sounds[ 1 ][ "hitmed" ][ 0 ] = "vox_plr_0_exert_pain_medium_0"; level.exert_sounds[ 1 ][ "hitmed" ][ 1 ] = "vox_plr_0_exert_pain_medium_1"; level.exert_sounds[ 1 ][ "hitmed" ][ 2 ] = "vox_plr_0_exert_pain_medium_2"; level.exert_sounds[ 1 ][ "hitmed" ][ 3 ] = "vox_plr_0_exert_pain_medium_3"; level.exert_sounds[ 2 ][ "hitmed" ][ 0 ] = "vox_plr_1_exert_pain_medium_0"; level.exert_sounds[ 2 ][ "hitmed" ][ 1 ] = "vox_plr_1_exert_pain_medium_1"; level.exert_sounds[ 2 ][ "hitmed" ][ 2 ] = "vox_plr_1_exert_pain_medium_2"; level.exert_sounds[ 2 ][ "hitmed" ][ 3 ] = "vox_plr_1_exert_pain_medium_3"; level.exert_sounds[ 3 ][ "hitmed" ][ 0 ] = "vox_plr_2_exert_pain_medium_0"; level.exert_sounds[ 3 ][ "hitmed" ][ 1 ] = "vox_plr_2_exert_pain_medium_1"; level.exert_sounds[ 3 ][ "hitmed" ][ 2 ] = "vox_plr_2_exert_pain_medium_2"; level.exert_sounds[ 3 ][ "hitmed" ][ 3 ] = "vox_plr_2_exert_pain_medium_3"; level.exert_sounds[ 4 ][ "hitmed" ][ 0 ] = "vox_plr_3_exert_pain_medium_0"; level.exert_sounds[ 4 ][ "hitmed" ][ 1 ] = "vox_plr_3_exert_pain_medium_1"; level.exert_sounds[ 4 ][ "hitmed" ][ 2 ] = "vox_plr_3_exert_pain_medium_2"; level.exert_sounds[ 4 ][ "hitmed" ][ 3 ] = "vox_plr_3_exert_pain_medium_3"; level.exert_sounds[ 1 ][ "hitlrg" ][ 0 ] = "vox_plr_0_exert_pain_high_0"; level.exert_sounds[ 1 ][ "hitlrg" ][ 1 ] = "vox_plr_0_exert_pain_high_1"; level.exert_sounds[ 1 ][ "hitlrg" ][ 2 ] = "vox_plr_0_exert_pain_high_2"; level.exert_sounds[ 1 ][ "hitlrg" ][ 3 ] = "vox_plr_0_exert_pain_high_3"; level.exert_sounds[ 2 ][ "hitlrg" ][ 0 ] = "vox_plr_1_exert_pain_high_0"; level.exert_sounds[ 2 ][ "hitlrg" ][ 1 ] = "vox_plr_1_exert_pain_high_1"; level.exert_sounds[ 2 ][ "hitlrg" ][ 2 ] = "vox_plr_1_exert_pain_high_2"; level.exert_sounds[ 2 ][ "hitlrg" ][ 3 ] = "vox_plr_1_exert_pain_high_3"; level.exert_sounds[ 3 ][ "hitlrg" ][ 0 ] = "vox_plr_2_exert_pain_high_0"; level.exert_sounds[ 3 ][ "hitlrg" ][ 1 ] = "vox_plr_2_exert_pain_high_1"; level.exert_sounds[ 3 ][ "hitlrg" ][ 2 ] = "vox_plr_2_exert_pain_high_2"; level.exert_sounds[ 3 ][ "hitlrg" ][ 3 ] = "vox_plr_2_exert_pain_high_3"; level.exert_sounds[ 4 ][ "hitlrg" ][ 0 ] = "vox_plr_3_exert_pain_high_0"; level.exert_sounds[ 4 ][ "hitlrg" ][ 1 ] = "vox_plr_3_exert_pain_high_1"; level.exert_sounds[ 4 ][ "hitlrg" ][ 2 ] = "vox_plr_3_exert_pain_high_2"; level.exert_sounds[ 4 ][ "hitlrg" ][ 3 ] = "vox_plr_3_exert_pain_high_3"; } tomb_audio_custom_response_line( player, index, category, type ) { if ( type == "revive_up" ) { player thread play_pos_neg_response_on_closest_player( "general", "heal_revived", "kills" ); } else if ( type == "headshot" ) { player thread play_pos_neg_response_on_closest_player( "kill", "headshot_respond_to_plr_" + player.characterindex, "kills" ); } else { if ( type == "oh_shit" ) { player thread play_pos_neg_response_on_closest_player( "general", "srnd_rspnd_to_plr_" + player.characterindex, "kills" ); player thread global_oh_shit_cooldown_timer( 15 ); } } } play_vo_category_on_closest_player( category, type ) { a_players = getplayers(); if ( a_players.size <= 1 ) { return; } arrayremovevalue( a_players, self ); a_closest = arraysort( a_players, self.origin, 1 ); if ( distancesquared( self.origin, a_closest[ 0 ].origin ) <= 250000 ) { if ( isalive( a_closest[ 0 ] ) ) { a_closest[ 0 ] maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type ); } } } play_pos_neg_response_on_closest_player( category, type, str_stat ) { a_players = getplayers(); if ( a_players.size <= 1 ) { return; } arrayremovevalue( a_players, self ); a_closest = arraysort( a_players, self.origin, 1 ); _a801 = a_closest; _k801 = getFirstArrayKey( _a801 ); while ( isDefined( _k801 ) ) { player = _a801[ _k801 ]; if ( distancesquared( self.origin, player.origin ) <= 250000 ) { if ( isalive( player ) ) { str_suffix = get_positive_or_negative_suffix( self, player, str_stat ); if ( isDefined( str_suffix ) ) { type += str_suffix; } player maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type ); return; } } else { _k801 = getNextArrayKey( _a801, _k801 ); } } } get_positive_or_negative_suffix( e_player1, e_player2, str_stat ) { n_player1_stat = e_player1 maps/mp/gametypes_zm/_globallogic_score::getpersstat( str_stat ); n_player2_stat = e_player2 maps/mp/gametypes_zm/_globallogic_score::getpersstat( str_stat ); if ( !isDefined( n_player1_stat ) || !isDefined( n_player2_stat ) ) { return undefined; } if ( n_player1_stat >= n_player2_stat ) { str_result = "_pos"; } else { str_result = "_neg"; } return str_result; } struggle_mud_vo() { self endon( "disconnect" ); self.played_mud_vo = 1; self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "struggle_mud" ); self waittill( "mud_slowdown_cleared" ); self thread struggle_mud_vo_cooldown(); } struggle_mud_vo_cooldown() { self endon( "disconnect" ); wait 600; self.played_mud_vo = 0; } discover_dig_site_vo() { flag_wait( "activate_zone_nml" ); s_origin = getstruct( "discover_dig_site_vo_trigger", "targetname" ); s_origin.unitrigger_stub = spawnstruct(); s_origin.unitrigger_stub.origin = s_origin.origin; s_origin.unitrigger_stub.script_width = 320; s_origin.unitrigger_stub.script_length = 88; s_origin.unitrigger_stub.script_height = 256; s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_box"; s_origin.unitrigger_stub.angles = ( 0, 0, 0 ); maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::discover_dig_site_trigger_touch ); } discover_dig_site_trigger_touch() { while ( 1 ) { self waittill( "trigger", player ); if ( isplayer( player ) ) { if ( isDefined( player.dontspeak ) && !player.dontspeak ) { player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_dig_site" ); maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); return; } } else { } } } maxis_audio_logs() { a_s_radios = getstructarray( "maxis_audio_log", "targetname" ); _a912 = a_s_radios; _k912 = getFirstArrayKey( _a912 ); while ( isDefined( _k912 ) ) { s_origin = _a912[ _k912 ]; s_origin.unitrigger_stub = spawnstruct(); s_origin.unitrigger_stub.origin = s_origin.origin; s_origin.unitrigger_stub.radius = 36; s_origin.unitrigger_stub.height = 256; s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; s_origin.unitrigger_stub.hint_string = &"ZM_TOMB_MAXIS_AUDIOLOG"; s_origin.unitrigger_stub.cursor_hint = "HINT_NOICON"; s_origin.unitrigger_stub.require_look_at = 1; s_origin.unitrigger_stub.script_int = s_origin.script_int; maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::maxis_audio_log_think ); _k912 = getNextArrayKey( _a912, _k912 ); } } discover_pack_a_punch() { t_pap_intro = getent( "pack_a_punch_intro_trigger", "targetname" ); if ( !isDefined( t_pap_intro ) ) { return; } s_lookat = getstruct( t_pap_intro.target, "targetname" ); while ( 1 ) { t_pap_intro waittill( "trigger", e_player ); if ( !isDefined( e_player.discover_pap_vo_played ) ) { e_player.discover_pap_vo_played = 0; } while ( !e_player.discover_pap_vo_played ) { while ( vectordot( anglesToForward( e_player getplayerangles() ), vectornormalize( s_lookat.origin - e_player.origin ) ) > 0,8 && e_player can_player_speak() ) { e_player.discover_pap_vo_played = 1; e_player create_and_play_dialog( "general", "pap_discovered" ); _a955 = get_players(); _k955 = getFirstArrayKey( _a955 ); while ( isDefined( _k955 ) ) { player = _a955[ _k955 ]; if ( distance( player.origin, e_player.origin ) < 800 ) { player.discover_pap_vo_played = 1; } _k955 = getNextArrayKey( _a955, _k955 ); } } } } } can_player_speak() { if ( isplayer( self ) && isDefined( self.dontspeak ) && !self.dontspeak ) { return self getclientfieldtoplayer( "isspeaking" ) == 0; } } maxis_audio_log_think() { self waittill( "trigger", player ); if ( !isplayer( player ) || !is_player_valid( player ) ) { return; } level thread play_maxis_audio_log( self.stub.origin, self.stub.script_int ); } play_maxis_audio_log( v_trigger_origin, n_audiolog_id ) { a_audiolog = get_audiolog_vo(); a_audiolog_to_play = a_audiolog[ n_audiolog_id ]; if ( n_audiolog_id == 4 ) { flag_set( "maxis_audiolog_gr0_playing" ); } else if ( n_audiolog_id == 5 ) { flag_set( "maxis_audiolog_gr1_playing" ); } else { if ( n_audiolog_id == 6 ) { flag_set( "maxis_audiolog_gr2_playing" ); } } e_vo_origin = spawn( "script_origin", v_trigger_origin ); flag_set( "maxis_audio_log_" + n_audiolog_id ); a_s_triggers = getstructarray( "maxis_audio_log", "targetname" ); _a1009 = a_s_triggers; _k1009 = getFirstArrayKey( _a1009 ); while ( isDefined( _k1009 ) ) { s_trigger = _a1009[ _k1009 ]; if ( s_trigger.script_int == n_audiolog_id ) { break; } else { _k1009 = getNextArrayKey( _a1009, _k1009 ); } } level thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( s_trigger.unitrigger_stub ); i = 0; while ( i < a_audiolog_to_play.size ) { e_vo_origin playsoundwithnotify( a_audiolog_to_play[ i ], a_audiolog_to_play[ i ] + "_done" ); e_vo_origin waittill( a_audiolog_to_play[ i ] + "_done" ); i++; } e_vo_origin delete(); if ( n_audiolog_id == 4 ) { flag_clear( "maxis_audiolog_gr0_playing" ); } else if ( n_audiolog_id == 5 ) { flag_clear( "maxis_audiolog_gr1_playing" ); } else { if ( n_audiolog_id == 6 ) { flag_clear( "maxis_audiolog_gr2_playing" ); } } level thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_trigger.unitrigger_stub, ::maxis_audio_log_think ); } reset_maxis_audiolog_unitrigger( n_robot_id ) { if ( n_robot_id == 0 ) { n_script_int = 4; } else if ( n_robot_id == 1 ) { n_script_int = 5; } else { if ( n_robot_id == 2 ) { n_script_int = 6; } } if ( flag( "maxis_audio_log_" + n_script_int ) ) { return; } a_s_radios = getstructarray( "maxis_audio_log", "targetname" ); _a1065 = a_s_radios; _k1065 = getFirstArrayKey( _a1065 ); while ( isDefined( _k1065 ) ) { s_origin = _a1065[ _k1065 ]; if ( s_origin.script_int == n_script_int ) { if ( isDefined( s_origin.unitrigger_stub ) ) { maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( s_origin.unitrigger_stub ); } } _k1065 = getNextArrayKey( _a1065, _k1065 ); } } restart_maxis_audiolog_unitrigger( n_robot_id ) { if ( n_robot_id == 0 ) { n_script_int = 4; } else if ( n_robot_id == 1 ) { n_script_int = 5; } else { if ( n_robot_id == 2 ) { n_script_int = 6; } } a_s_radios = getstructarray( "maxis_audio_log", "targetname" ); _a1094 = a_s_radios; _k1094 = getFirstArrayKey( _a1094 ); while ( isDefined( _k1094 ) ) { s_origin = _a1094[ _k1094 ]; if ( s_origin.script_int == n_script_int ) { if ( isDefined( s_origin.unitrigger_stub ) ) { maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::maxis_audio_log_think ); } } _k1094 = getNextArrayKey( _a1094, _k1094 ); } } get_audiolog_vo() { a_audiologs = []; a_audiologs[ 1 ] = []; a_audiologs[ 1 ][ 0 ] = "vox_maxi_audio_log_1_1_0"; a_audiologs[ 1 ][ 1 ] = "vox_maxi_audio_log_1_2_0"; a_audiologs[ 1 ][ 2 ] = "vox_maxi_audio_log_1_3_0"; a_audiologs[ 2 ] = []; a_audiologs[ 2 ][ 0 ] = "vox_maxi_audio_log_2_1_0"; a_audiologs[ 2 ][ 1 ] = "vox_maxi_audio_log_2_2_0"; a_audiologs[ 3 ] = []; a_audiologs[ 3 ][ 0 ] = "vox_maxi_audio_log_3_1_0"; a_audiologs[ 3 ][ 1 ] = "vox_maxi_audio_log_3_2_0"; a_audiologs[ 3 ][ 2 ] = "vox_maxi_audio_log_3_3_0"; a_audiologs[ 4 ] = []; a_audiologs[ 4 ][ 0 ] = "vox_maxi_audio_log_4_1_0"; a_audiologs[ 4 ][ 1 ] = "vox_maxi_audio_log_4_2_0"; a_audiologs[ 4 ][ 2 ] = "vox_maxi_audio_log_4_3_0"; a_audiologs[ 5 ] = []; a_audiologs[ 5 ][ 0 ] = "vox_maxi_audio_log_5_1_0"; a_audiologs[ 5 ][ 1 ] = "vox_maxi_audio_log_5_2_0"; a_audiologs[ 5 ][ 2 ] = "vox_maxi_audio_log_5_3_0"; a_audiologs[ 6 ] = []; a_audiologs[ 6 ][ 0 ] = "vox_maxi_audio_log_6_1_0"; a_audiologs[ 6 ][ 1 ] = "vox_maxi_audio_log_6_2_0"; return a_audiologs; } start_narrative_vo() { flag_wait( "start_zombie_round_logic" ); set_players_dontspeak( 1 ); wait 10; if ( is_game_solo() ) { game_start_solo_vo(); } else { game_start_vo(); } level waittill( "end_of_round" ); level thread round_two_end_narrative_vo(); if ( is_game_solo() ) { round_one_end_solo_vo(); } else { round_one_end_vo(); } flag_set( "round_one_narrative_vo_complete" ); } start_samantha_intro_vo() { while ( 1 ) { level waittill( "start_of_round" ); if ( level.round_number == 5 ) { samantha_intro_1(); continue; } else if ( level.round_number == 6 ) { samantha_intro_2(); continue; } else { if ( level.round_number == 7 ) { samantha_intro_3(); flag_set( "samantha_intro_done" ); return; } } else { } } } samantha_intro_1() { /# iprintln( "samantha_intro_1" ); #/ players = getplayers(); if ( !isDefined( players[ 0 ] ) ) { return; } flag_waitopen( "story_vo_playing" ); flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); samanthasay( "vox_sam_sam_help_5_0", players[ 0 ], 1, 1 ); players = getplayers(); _a1221 = players; _k1221 = getFirstArrayKey( _a1221 ); while ( isDefined( _k1221 ) ) { player = _a1221[ _k1221 ]; if ( player.character_name != "Richtofen" ) { player play_category_on_player_character_if_present( "hear_samantha_1", player.character_name ); wait 1; play_line_on_player_character_if_present( "vox_plr_2_hear_samantha_1_0", "Richtofen" ); break; } else { _k1221 = getNextArrayKey( _a1221, _k1221 ); } } set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } samantha_intro_2() { /# iprintln( "samantha_intro_2" ); #/ player_richtofen = get_player_character_if_present( "Richtofen" ); if ( !isDefined( player_richtofen ) ) { return; } flag_waitopen( "story_vo_playing" ); flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); if ( isDefined( player_richtofen ) ) { nearest_friend = get_nearest_friend_within_speaking_distance( player_richtofen ); if ( isDefined( nearest_friend ) ) { nearest_friend play_category_on_player_character_if_present( "heroes_confer", nearest_friend.character_name ); wait 1; play_line_on_player_character_if_present( "vox_plr_2_heroes_confer_0", "Richtofen" ); } } set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } samantha_intro_3() { /# iprintln( "samantha_intro_3" ); #/ players = getplayers(); if ( !isDefined( players[ 0 ] ) ) { return; } flag_waitopen( "story_vo_playing" ); flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); samanthasay( "vox_sam_hear_samantha_3_0", players[ 0 ], 1, 1 ); players = getplayers(); player = players[ randomintrange( 0, players.size ) ]; if ( isDefined( player ) ) { player play_category_on_player_character_if_present( "hear_samantha_3", player.character_name ); } set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } play_category_on_player_character_if_present( category, character_name ) { vox_line_prefix = undefined; switch( character_name ) { case "Dempsey": vox_line_prefix = "vox_plr_0_"; break; case "Nikolai": vox_line_prefix = "vox_plr_1_"; break; case "Richtofen": vox_line_prefix = "vox_plr_2_"; break; case "Takeo": vox_line_prefix = "vox_plr_3_"; break; } vox_line = vox_line_prefix + category + "_0"; play_line_on_player_character_if_present( vox_line, character_name ); } get_nearest_friend_within_speaking_distance( other_player ) { distance_nearest = 800; nearest_friend = undefined; players = getplayers(); _a1326 = players; _k1326 = getFirstArrayKey( _a1326 ); while ( isDefined( _k1326 ) ) { player = _a1326[ _k1326 ]; distance_between_players = distance( player.origin, other_player.origin ); if ( player != other_player && distance_between_players < distance_nearest ) { nearest_friend = player; distance_nearest = distance_between_players; } _k1326 = getNextArrayKey( _a1326, _k1326 ); } if ( isDefined( nearest_friend ) ) { return nearest_friend; } else { return undefined; } } play_line_on_player_character_if_present( vox_line, character_name ) { player_character = get_player_character_if_present( character_name ); if ( isDefined( player_character ) ) { /# iprintln( "" + character_name + " says " + vox_line ); #/ player_character playsoundwithnotify( vox_line, "sound_done" + vox_line ); player_character waittill( "sound_done" + vox_line ); return 1; } else { return 0; } } get_player_character_if_present( character_name ) { players = getplayers(); _a1366 = players; _k1366 = getFirstArrayKey( _a1366 ); while ( isDefined( _k1366 ) ) { player = _a1366[ _k1366 ]; if ( player.character_name == character_name ) { return player; } _k1366 = getNextArrayKey( _a1366, _k1366 ); } return undefined; } round_two_end_narrative_vo() { level waittill( "end_of_round" ); flag_wait( "round_one_narrative_vo_complete" ); if ( flag( "generator_find_vo_playing" ) ) { flag_waitopen( "generator_find_vo_playing" ); wait 3; } if ( is_game_solo() ) { round_two_end_solo_vo(); } } game_start_solo_vo() { if ( flag( "story_vo_playing" ) ) { return; } players = getplayers(); e_speaker = players[ 0 ]; if ( !isDefined( e_speaker ) ) { return; } a_convo = build_game_start_solo_convo(); flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); lines = a_convo[ e_speaker.character_name ]; if ( isarray( lines ) ) { i = 0; while ( i < lines.size ) { e_speaker playsoundwithnotify( lines[ i ], "sound_done" + lines[ i ] ); e_speaker waittill( "sound_done" + lines[ i ] ); wait 1; i++; } } else e_speaker playsoundwithnotify( a_convo[ e_speaker.character_name ], "sound_done" + a_convo[ e_speaker.character_name ] ); e_speaker waittill( "sound_done" + a_convo[ e_speaker.character_name ] ); set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } build_game_start_solo_convo() { a_game_start_solo_convo = []; a_game_start_solo_convo[ "Dempsey" ] = "vox_plr_0_game_start_0"; a_game_start_solo_convo[ "Nikolai" ] = "vox_plr_1_game_start_0"; a_game_start_solo_convo[ "Richtofen" ] = []; a_game_start_solo_convo[ "Richtofen" ][ 0 ] = "vox_plr_2_game_start_0"; a_game_start_solo_convo[ "Richtofen" ][ 1 ] = "vox_plr_2_game_start_1"; a_game_start_solo_convo[ "Takeo" ] = "vox_plr_3_game_start_0"; return a_game_start_solo_convo; } game_start_vo() { players = getplayers(); if ( players.size <= 1 ) { return; } if ( flag( "story_vo_playing" ) ) { return; } a_game_start_convo = build_game_start_convo(); flag_set( "story_vo_playing" ); e_dempsey = undefined; e_nikolai = undefined; e_richtofen = undefined; e_takeo = undefined; _a1477 = players; _k1477 = getFirstArrayKey( _a1477 ); while ( isDefined( _k1477 ) ) { player = _a1477[ _k1477 ]; if ( isDefined( player ) ) { switch( player.character_name ) { case "Dempsey": e_dempsey = player; break; break; case "Nikolai": e_nikolai = player; break; break; case "Richtofen": e_richtofen = player; break; break; case "Takeo": e_takeo = player; break; break; } } _k1477 = getNextArrayKey( _a1477, _k1477 ); } set_players_dontspeak( 1 ); i = 0; while ( i < a_game_start_convo.size ) { players = getplayers(); if ( players.size <= 1 ) { set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); return; } if ( !isDefined( e_richtofen ) ) { i++; continue; } else line_number = i + 1; if ( line_number == 2 ) { a_richtofen_lines = a_game_start_convo[ "line_" + line_number ]; j = 0; while ( j < a_richtofen_lines.size ) { e_richtofen playsoundwithnotify( a_richtofen_lines[ j ], "sound_done" + a_richtofen_lines[ j ] ); e_richtofen waittill( "sound_done" + a_richtofen_lines[ j ] ); j++; } } else arrayremovevalue( players, e_richtofen ); players = get_array_of_closest( e_richtofen.origin, players ); e_speaker = players[ 0 ]; if ( !isDefined( e_speaker ) ) { i++; continue; } else { e_speaker playsoundwithnotify( a_game_start_convo[ "line_" + line_number ][ e_speaker.character_name ], "sound_done" + a_game_start_convo[ "line_" + line_number ][ e_speaker.character_name ] ); e_speaker waittill( "sound_done" + a_game_start_convo[ "line_" + line_number ][ e_speaker.character_name ] ); } i++; } set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } build_game_start_convo() { a_game_start_convo = []; a_game_start_convo[ "line_1" ] = []; a_game_start_convo[ "line_1" ][ "Dempsey" ] = "vox_plr_0_game_start_meet_2_0"; a_game_start_convo[ "line_1" ][ "Nikolai" ] = "vox_plr_1_game_start_meet_1_0"; a_game_start_convo[ "line_1" ][ "Takeo" ] = "vox_plr_3_game_start_meet_3_0"; a_game_start_convo[ "line_2" ] = []; a_game_start_convo[ "line_2" ][ 0 ] = "vox_plr_2_game_start_meet_4_0"; a_game_start_convo[ "line_2" ][ 1 ] = "vox_plr_2_generator_find_0"; a_game_start_convo[ "line_3" ] = []; a_game_start_convo[ "line_3" ][ "Dempsey" ] = "vox_plr_0_generator_find_0"; a_game_start_convo[ "line_3" ][ "Nikolai" ] = "vox_plr_1_generator_find_0"; a_game_start_convo[ "line_3" ][ "Takeo" ] = "vox_plr_3_generator_find_0"; return a_game_start_convo; } run_staff_crafted_vo( str_sam_line ) { wait 1; while ( isDefined( self.isspeaking ) && self.isspeaking ) { wait_network_frame(); } if ( level.n_staffs_crafted == 4 ) { all_staffs_crafted_vo(); } else { if ( isDefined( str_sam_line ) ) { flag_waitopen( "story_vo_playing" ); flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); samanthasay( str_sam_line, self, 1 ); set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } } } staff_craft_vo() { staff_crafted = []; lines = array( "vox_sam_1st_staff_crafted_0", "vox_sam_2nd_staff_crafted_0", "vox_sam_3rd_staff_crafted_0" ); while ( staff_crafted.size < 4 ) { level waittill( "staff_crafted_vo", e_crafter, n_element ); if ( isDefined( staff_crafted[ n_element ] ) && !staff_crafted[ n_element ] ) { staff_crafted[ n_element ] = 1; line = lines[ level.n_staffs_crafted - 1 ]; e_crafter thread run_staff_crafted_vo( line ); } } } all_staffs_crafted_vo() { while ( flag( "story_vo_playing" ) ) { wait_network_frame(); } a_convo = build_all_staffs_crafted_vo(); flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); i = 0; while ( i < a_convo.size ) { line_number = i + 1; index = "line_" + line_number; if ( isDefined( a_convo[ index ][ "Sam" ] ) ) { samanthasay( a_convo[ index ][ "Sam" ], self ); i++; continue; } else { line = a_convo[ index ][ self.character_name ]; self playsoundwithnotify( line, "sound_done" + line ); self waittill( "sound_done" + line ); } i++; } set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } build_all_staffs_crafted_vo() { a_staff_convo = []; a_staff_convo[ "line_1" ] = []; a_staff_convo[ "line_1" ][ "Sam" ] = "vox_sam_4th_staff_crafted_0"; a_staff_convo[ "line_2" ] = []; a_staff_convo[ "line_2" ][ "Dempsey" ] = "vox_plr_0_4th_staff_crafted_0"; a_staff_convo[ "line_2" ][ "Nikolai" ] = "vox_plr_1_4th_staff_crafted_0"; a_staff_convo[ "line_2" ][ "Richtofen" ] = "vox_plr_2_4th_staff_crafted_0"; a_staff_convo[ "line_2" ][ "Takeo" ] = "vox_plr_3_4th_staff_crafted_0"; a_staff_convo[ "line_3" ] = []; a_staff_convo[ "line_3" ][ "Sam" ] = "vox_sam_4th_staff_crafted_1"; a_staff_convo[ "line_4" ] = []; a_staff_convo[ "line_4" ][ "Dempsey" ] = "vox_plr_0_4th_staff_crafted_1"; a_staff_convo[ "line_4" ][ "Nikolai" ] = "vox_plr_1_4th_staff_crafted_1"; a_staff_convo[ "line_4" ][ "Richtofen" ] = "vox_plr_2_4th_staff_crafted_1"; a_staff_convo[ "line_4" ][ "Takeo" ] = "vox_plr_3_4th_staff_crafted_1"; a_staff_convo[ "line_5" ] = []; a_staff_convo[ "line_5" ][ "Sam" ] = "vox_sam_generic_encourage_6"; return a_staff_convo; } get_left_behind_plea() { pl_num = 0; if ( self.character_name == "Nikolai" ) { pl_num = 1; } else if ( self.character_name == "Richtofen" ) { pl_num = 2; } else { if ( self.character_name == "Takeo" ) { pl_num = 3; } } return "vox_plr_" + pl_num + "_miss_tank_" + randomint( 3 ); } get_left_behind_response( e_victim ) { if ( self.character_name == "Dempsey" ) { if ( cointoss() ) { return "vox_plr_0_tank_rspnd_generic_0"; } else { if ( e_victim.character_name == "Nikolai" ) { return "vox_plr_0_tank_rspnd_to_plr_1_0"; } else { if ( e_victim.character_name == "Richtofen" ) { return "vox_plr_0_tank_rspnd_to_plr_2_0"; } else { if ( e_victim.character_name == "Takeo" ) { return "vox_plr_0_tank_rspnd_to_plr_3_0"; } } } } } else { if ( self.character_name == "Nikolai" ) { if ( cointoss() ) { return "vox_plr_1_tank_rspnd_generic_0"; } else { if ( e_victim.character_name == "Dempsey" ) { return "vox_plr_1_tank_rspnd_to_plr_0_0"; } else { if ( e_victim.character_name == "Richtofen" ) { return "vox_plr_1_tank_rspnd_to_plr_2_0"; } else { if ( e_victim.character_name == "Takeo" ) { return "vox_plr_1_tank_rspnd_to_plr_3_0"; } } } } } else { if ( self.character_name == "Richtofen" ) { if ( cointoss() ) { return "vox_plr_2_tank_rspnd_generic_0"; } else { if ( e_victim.character_name == "Dempsey" ) { return "vox_plr_2_tank_rspnd_to_plr_0_0"; } else { if ( e_victim.character_name == "Nikolai" ) { return "vox_plr_2_tank_rspnd_to_plr_1_0"; } else { if ( e_victim.character_name == "Takeo" ) { return "vox_plr_2_tank_rspnd_to_plr_3_0"; } } } } } else { if ( self.character_name == "Takeo" ) { if ( cointoss() ) { return "vox_plr_3_tank_rspnd_generic_0"; } else { if ( e_victim.character_name == "Dempsey" ) { return "vox_plr_3_tank_rspnd_to_plr_0_0"; } else { if ( e_victim.character_name == "Nikolai" ) { return "vox_plr_3_tank_rspnd_to_plr_1_0"; } else { if ( e_victim.character_name == "Richtofen" ) { return "vox_plr_3_tank_rspnd_to_plr_2_0"; } } } } } } } } return undefined; } tank_left_behind_vo( e_victim, e_rider ) { if ( !isDefined( e_victim ) || !isDefined( e_rider ) ) { return; } if ( flag( "story_vo_playing" ) ) { return; } flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); e_victim.isspeaking = 1; e_rider.isspeaking = 1; str_plea_line = e_victim get_left_behind_plea(); e_victim playsoundwithnotify( str_plea_line, "sound_done" + str_plea_line ); e_victim waittill( "sound_done" + str_plea_line ); str_rider_line = e_rider get_left_behind_response( e_victim ); e_victim playsoundwithnotify( str_rider_line, "sound_done" + str_rider_line ); e_victim waittill( "sound_done" + str_rider_line ); e_victim.isspeaking = 0; e_rider.isspeaking = 0; set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } round_one_end_solo_vo() { if ( flag( "story_vo_playing" ) ) { return; } players = getplayers(); e_speaker = players[ 0 ]; if ( !isDefined( e_speaker ) ) { return; } a_convo = build_round_one_end_solo_convo(); flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); lines = a_convo[ e_speaker.character_name ]; if ( isarray( lines ) ) { i = 0; while ( i < lines.size ) { e_speaker playsoundwithnotify( lines[ i ], "sound_done" + lines[ i ] ); e_speaker waittill( "sound_done" + lines[ i ] ); wait 1; i++; } } else e_speaker playsoundwithnotify( a_convo[ e_speaker.character_name ], "sound_done" + a_convo[ e_speaker.character_name ] ); e_speaker waittill( "sound_done" + a_convo[ e_speaker.character_name ] ); set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } build_round_one_end_solo_convo() { a_round_one_end_solo_convo = []; a_round_one_end_solo_convo[ "Dempsey" ] = []; a_round_one_end_solo_convo[ "Dempsey" ][ 0 ] = "vox_plr_0_end_round_1_5_0"; a_round_one_end_solo_convo[ "Dempsey" ][ 1 ] = "vox_plr_0_end_round_1_6_1"; a_round_one_end_solo_convo[ "Nikolai" ] = "vox_plr_1_end_round_1_9_0"; a_round_one_end_solo_convo[ "Richtofen" ] = "vox_plr_2_end_round_1_7_0"; a_round_one_end_solo_convo[ "Takeo" ] = "vox_plr_3_end_round_1_8_0"; return a_round_one_end_solo_convo; } round_one_end_vo() { players = getplayers(); if ( players.size <= 1 ) { return; } if ( flag( "story_vo_playing" ) ) { return; } a_convo = build_round_one_end_convo(); flag_set( "story_vo_playing" ); e_dempsey = undefined; e_nikolai = undefined; e_richtofen = undefined; e_takeo = undefined; _a1894 = players; _k1894 = getFirstArrayKey( _a1894 ); while ( isDefined( _k1894 ) ) { player = _a1894[ _k1894 ]; if ( isDefined( player ) ) { switch( player.character_name ) { case "Dempsey": e_dempsey = player; break; break; case "Nikolai": e_nikolai = player; break; break; case "Richtofen": e_richtofen = player; break; break; case "Takeo": e_takeo = player; break; break; } } _k1894 = getNextArrayKey( _a1894, _k1894 ); } set_players_dontspeak( 1 ); i = 0; while ( i < a_convo.size ) { players = getplayers(); if ( players.size <= 1 ) { set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); return; } if ( !isDefined( e_richtofen ) ) { i++; continue; } else line_number = i + 1; if ( line_number == 2 ) { a_richtofen_lines = a_convo[ "line_" + line_number ]; j = 0; while ( j < a_richtofen_lines.size ) { e_richtofen playsoundwithnotify( a_richtofen_lines[ j ], "sound_done" + a_richtofen_lines[ j ] ); e_richtofen waittill( "sound_done" + a_richtofen_lines[ j ] ); j++; } } else arrayremovevalue( players, e_richtofen ); players = get_array_of_closest( e_richtofen.origin, players ); e_speaker = players[ 0 ]; if ( !isDefined( e_speaker ) ) { i++; continue; } else { e_speaker playsoundwithnotify( a_convo[ "line_" + line_number ][ e_speaker.character_name ], "sound_done" + a_convo[ "line_" + line_number ][ e_speaker.character_name ] ); e_speaker waittill( "sound_done" + a_convo[ "line_" + line_number ][ e_speaker.character_name ] ); } i++; } set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } build_round_one_end_convo() { a_round_one_end_convo = []; a_round_one_end_convo[ "line_1" ] = []; a_round_one_end_convo[ "line_1" ][ "Dempsey" ] = "vox_plr_0_end_round_1_1_0"; a_round_one_end_convo[ "line_1" ][ "Nikolai" ] = "vox_plr_1_end_round_1_3_0"; a_round_one_end_convo[ "line_1" ][ "Takeo" ] = "vox_plr_3_end_round_1_2_0"; a_round_one_end_convo[ "line_2" ] = []; a_round_one_end_convo[ "line_2" ][ 0 ] = "vox_plr_2_story_exposition_4_0"; a_round_one_end_convo[ "line_3" ] = []; a_round_one_end_convo[ "line_3" ][ "Dempsey" ] = "vox_plr_0_during_round_1_0"; a_round_one_end_convo[ "line_3" ][ "Nikolai" ] = "vox_plr_1_during_round_2_0"; a_round_one_end_convo[ "line_3" ][ "Takeo" ] = "vox_plr_3_during_round_2_0"; return a_round_one_end_convo; } round_two_end_solo_vo() { if ( flag( "story_vo_playing" ) ) { return; } players = getplayers(); e_speaker = players[ 0 ]; if ( !isDefined( e_speaker ) ) { return; } a_convo = build_round_two_end_solo_convo(); flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); lines = a_convo[ e_speaker.character_name ]; if ( isarray( lines ) ) { i = 0; while ( i < lines.size ) { e_speaker playsoundwithnotify( lines[ i ], "sound_done" + lines[ i ] ); e_speaker waittill( "sound_done" + lines[ i ] ); wait 1; i++; } } else e_speaker playsoundwithnotify( a_convo[ e_speaker.character_name ], "sound_done" + a_convo[ e_speaker.character_name ] ); e_speaker waittill( "sound_done" + a_convo[ e_speaker.character_name ] ); set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } build_round_two_end_solo_convo() { a_round_two_end_solo_convo = []; a_round_two_end_solo_convo[ "Dempsey" ] = "vox_plr_0_end_round_2_1_0"; a_round_two_end_solo_convo[ "Nikolai" ] = "vox_plr_1_end_round_2_5_0"; a_round_two_end_solo_convo[ "Richtofen" ] = []; a_round_two_end_solo_convo[ "Richtofen" ][ 0 ] = "vox_plr_2_end_round_2_2_0"; a_round_two_end_solo_convo[ "Richtofen" ][ 1 ] = "vox_plr_2_end_round_2_3_1"; a_round_two_end_solo_convo[ "Takeo" ] = "vox_plr_3_end_round_2_4_0"; return a_round_two_end_solo_convo; } first_magic_box_seen_vo() { flag_wait( "start_zombie_round_logic" ); magicbox = level.chests[ level.chest_index ]; a_players = getplayers(); _a2048 = a_players; _k2048 = getFirstArrayKey( _a2048 ); while ( isDefined( _k2048 ) ) { player = _a2048[ _k2048 ]; player thread wait_and_play_first_magic_box_seen_vo( magicbox.unitrigger_stub ); _k2048 = getNextArrayKey( _a2048, _k2048 ); } } wait_and_play_first_magic_box_seen_vo( struct ) { self endon( "disconnect" ); level endon( "first_maigc_box_discovered" ); while ( 1 ) { if ( distancesquared( self.origin, struct.origin ) < 40000 ) { if ( self is_player_looking_at( struct.origin, 0,75 ) ) { if ( isDefined( self.dontspeak ) && !self.dontspeak ) { while ( flag( "story_vo_playing" ) ) { wait 0,1; } players = getplayers(); a_speakers = []; _a2077 = players; _k2077 = getFirstArrayKey( _a2077 ); while ( isDefined( _k2077 ) ) { player = _a2077[ _k2077 ]; if ( isDefined( player ) && distance2dsquared( player.origin, self.origin ) <= 1000000 ) { switch( player.character_name ) { case "Dempsey": e_dempsey = player; a_speakers[ a_speakers.size ] = e_dempsey; break; break; case "Nikolai": e_nikolai = player; a_speakers[ a_speakers.size ] = e_nikolai; break; break; case "Richtofen": e_richtofen = player; a_speakers[ a_speakers.size ] = e_richtofen; break; break; case "Takeo": e_takeo = player; a_speakers[ a_speakers.size ] = e_takeo; break; break; } } _k2077 = getNextArrayKey( _a2077, _k2077 ); } while ( !isDefined( e_richtofen ) ) { wait 0,1; } while ( a_speakers.size < 2 ) { wait 0,1; } flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); a_convo = build_first_magic_box_seen_vo(); if ( isDefined( e_richtofen ) ) { e_richtofen playsoundwithnotify( a_convo[ 0 ][ e_richtofen.character_name ], "sound_done" + a_convo[ 0 ][ e_richtofen.character_name ] ); e_richtofen waittill( "sound_done" + a_convo[ 0 ][ e_richtofen.character_name ] ); } if ( isDefined( struct.trigger_target ) && isDefined( struct.trigger_target.is_locked ) ) { arrayremovevalue( a_speakers, e_richtofen ); a_speakers = get_array_of_closest( e_richtofen.origin, a_speakers ); e_speaker = a_speakers[ 0 ]; if ( distancesquared( e_speaker.origin, e_richtofen.origin ) < 2250000 ) { if ( isDefined( e_speaker ) ) { e_speaker playsoundwithnotify( a_convo[ 1 ][ e_speaker.character_name ], "sound_done" + a_convo[ 1 ][ e_speaker.character_name ] ); e_speaker waittill( "sound_done" + a_convo[ 1 ][ e_speaker.character_name ] ); } } } if ( isDefined( struct.trigger_target ) && isDefined( struct.trigger_target.is_locked ) ) { if ( struct.trigger_target.is_locked == 1 ) { if ( isDefined( e_richtofen ) ) { e_richtofen playsoundwithnotify( a_convo[ 2 ][ e_richtofen.character_name ], "sound_done" + a_convo[ 2 ][ e_richtofen.character_name ] ); e_richtofen waittill( "sound_done" + a_convo[ 2 ][ e_richtofen.character_name ] ); } } } set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); level notify( "first_maigc_box_discovered" ); return; } } } else { wait 0,1; } } } build_first_magic_box_seen_vo() { a_first_magic_box_seen_convo = []; a_first_magic_box_seen_convo[ 0 ] = []; a_first_magic_box_seen_convo[ 0 ][ "Richtofen" ] = "vox_plr_2_respond_maxis_1_0"; a_first_magic_box_seen_convo[ 1 ] = []; a_first_magic_box_seen_convo[ 1 ][ "Dempsey" ] = "vox_plr_0_respond_maxis_2_0"; a_first_magic_box_seen_convo[ 1 ][ "Takeo" ] = "vox_plr_3_respond_maxis_3_0"; a_first_magic_box_seen_convo[ 1 ][ "Nikolai" ] = "vox_plr_1_respond_maxis_4_0"; a_first_magic_box_seen_convo[ 2 ] = []; a_first_magic_box_seen_convo[ 2 ][ "Richtofen" ] = "vox_plr_2_respond_maxis_5_0"; return a_first_magic_box_seen_convo; } tomb_drone_built_vo( s_craftable ) { if ( s_craftable.weaponname != "equip_dieseldrone_zm" ) { return; } flag_waitopen( "story_vo_playing" ); flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); wait 1; e_vo_origin = get_speaking_location_maxis_drone( self, s_craftable ); vox_line = "vox_maxi_maxis_drone_1_0"; e_vo_origin playsoundwithnotify( vox_line, "sound_done" + vox_line ); /# iprintln( "Maxis says " + vox_line ); #/ e_vo_origin waittill( "sound_done" + vox_line ); e_vo_origin delete(); wait 1; e_vo_origin = get_speaking_location_maxis_drone( self, s_craftable ); vox_line = "vox_maxi_maxis_drone_4_0"; e_vo_origin playsoundwithnotify( vox_line, "sound_done" + vox_line ); /# iprintln( "Maxis says " + vox_line ); #/ e_vo_origin waittill( "sound_done" + vox_line ); e_vo_origin delete(); wait 1; if ( isDefined( self ) && self.character_name == "Richtofen" ) { vox_line = "vox_plr_2_maxis_drone_5_0"; /# iprintln( "" + self.character_name + " says " + vox_line ); #/ self playsoundwithnotify( vox_line, "sound_done" + vox_line ); self waittill( "sound_done" + vox_line ); } set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); flag_set( "maxis_crafted_intro_done" ); } get_speaking_location_maxis_drone( player, s_craftable ) { e_vo_origin = undefined; if ( isDefined( level.maxis_quadrotor ) ) { e_vo_origin = spawn( "script_origin", level.maxis_quadrotor.origin ); e_vo_origin linkto( level.maxis_quadrotor ); } else player = b_player_has_dieseldrone_weapon(); if ( isDefined( player ) ) { e_vo_origin = spawn( "script_origin", player.origin ); e_vo_origin linkto( player ); } else { e_vo_origin = spawn( "script_origin", s_craftable.origin ); } return e_vo_origin; } b_player_has_dieseldrone_weapon() { a_players = getplayers(); _a2268 = a_players; _k2268 = getFirstArrayKey( _a2268 ); while ( isDefined( _k2268 ) ) { player = _a2268[ _k2268 ]; if ( player hasweapon( "equip_dieseldrone_zm" ) ) { return player; } _k2268 = getNextArrayKey( _a2268, _k2268 ); } return undefined; } set_players_dontspeak( bool ) { players = getplayers(); if ( bool ) { _a2289 = players; _k2289 = getFirstArrayKey( _a2289 ); while ( isDefined( _k2289 ) ) { player = _a2289[ _k2289 ]; if ( isDefined( player ) ) { player.dontspeak = 1; player setclientfieldtoplayer( "isspeaking", 1 ); } _k2289 = getNextArrayKey( _a2289, _k2289 ); } _a2298 = players; _k2298 = getFirstArrayKey( _a2298 ); while ( isDefined( _k2298 ) ) { player = _a2298[ _k2298 ]; while ( isDefined( player ) && isDefined( player.isspeaking ) && player.isspeaking ) { wait 0,1; } _k2298 = getNextArrayKey( _a2298, _k2298 ); } } else _a2308 = players; _k2308 = getFirstArrayKey( _a2308 ); while ( isDefined( _k2308 ) ) { player = _a2308[ _k2308 ]; if ( isDefined( player ) ) { player.dontspeak = 0; player setclientfieldtoplayer( "isspeaking", 0 ); } _k2308 = getNextArrayKey( _a2308, _k2308 ); } } set_player_dontspeak( bool ) { if ( bool ) { self.dontspeak = 1; self setclientfieldtoplayer( "isspeaking", 1 ); while ( isDefined( self ) && isDefined( self.isspeaking ) && self.isspeaking ) { wait 0,1; } } else self.dontspeak = 0; self setclientfieldtoplayer( "isspeaking", 0 ); } is_game_solo() { players = getplayers(); if ( players.size == 1 ) { return 1; } else { return 0; } } add_puzzle_completion_line( n_element_enum, str_line ) { if ( !isDefined( level.puzzle_completion_lines ) ) { level.puzzle_completion_lines = []; level.puzzle_completion_lines_count = []; } if ( !isDefined( level.puzzle_completion_lines[ n_element_enum ] ) ) { level.puzzle_completion_lines[ n_element_enum ] = []; level.puzzle_completion_lines_count[ n_element_enum ] = 0; } level.puzzle_completion_lines[ n_element_enum ][ level.puzzle_completion_lines[ n_element_enum ].size ] = str_line; } say_puzzle_completion_line( n_element_enum ) { level notify( "quest_progressed" ); wait 4; if ( level.puzzle_completion_lines_count[ n_element_enum ] >= level.puzzle_completion_lines[ n_element_enum ].size ) { /# iprintlnbold( "Out of puzzle completion lines for element " + n_element_enum ); #/ return; } str_line = level.puzzle_completion_lines[ n_element_enum ][ level.puzzle_completion_lines_count[ n_element_enum ] ]; level.puzzle_completion_lines_count[ n_element_enum ]++; set_players_dontspeak( 1 ); level samanthasay( str_line, self ); set_players_dontspeak( 0 ); } watch_occasional_line( str_category, str_line, str_notify, n_time_between, n_times_to_play ) { if ( !isDefined( n_time_between ) ) { n_time_between = 30; } if ( !isDefined( n_times_to_play ) ) { n_times_to_play = 100; } i = 0; while ( i < n_times_to_play ) { level waittill( str_notify, e_player ); if ( isDefined( e_player ) ) { e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( str_category, str_line ); wait n_time_between; } i++; } } watch_one_shot_line( str_category, str_line, str_notify ) { while ( 1 ) { level waittill( str_notify, e_player ); if ( isDefined( e_player ) ) { e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( str_category, str_line ); return; } } } watch_one_shot_samantha_line( str_line, str_notify ) { while ( 1 ) { level waittill( str_notify, e_play_on ); if ( isDefined( e_play_on ) ) { set_players_dontspeak( 1 ); if ( samanthasay( str_line, e_play_on ) ) { set_players_dontspeak( 0 ); return; } set_players_dontspeak( 0 ); } } } watch_one_shot_samantha_clue( str_line, str_notify, str_endon ) { if ( isDefined( str_endon ) ) { level endon( str_endon ); } if ( !isDefined( level.next_samantha_clue_time ) ) { level.next_samantha_clue_time = getTime(); } while ( 1 ) { level waittill( str_notify, e_player ); wait 10; if ( isDefined( e_player ) && isDefined( e_player.vo_promises_playing ) && e_player.vo_promises_playing ) { continue; } while ( isDefined( level.sam_talking ) && level.sam_talking ) { wait_network_frame(); } while ( level.next_samantha_clue_time > getTime() ) { continue; } while ( !isplayer( e_player ) ) { a_players = getplayers(); _a2486 = a_players; _k2486 = getFirstArrayKey( _a2486 ); while ( isDefined( _k2486 ) ) { player = _a2486[ _k2486 ]; if ( player.zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) { e_player = player; break; } else { _k2486 = getNextArrayKey( _a2486, _k2486 ); } } } if ( isDefined( e_player ) && isplayer( e_player ) && e_player.zombie_vars[ "zombie_powerup_zombie_blood_on" ] && flag( "samantha_intro_done" ) ) { flag_waitopen( "story_vo_playing" ); flag_set( "story_vo_playing" ); while ( isDefined( e_player.isspeaking ) && e_player.isspeaking ) { wait_network_frame(); } while ( !is_player_valid( e_player ) ) { continue; } set_players_dontspeak( 1 ); level.sam_talking = 1; e_player playsoundtoplayer( str_line, e_player ); n_duration = soundgetplaybacktime( str_line ); wait ( n_duration / 1000 ); level.sam_talking = 0; level.next_samantha_clue_time = getTime() + 300000; flag_clear( "story_vo_playing" ); set_players_dontspeak( 0 ); return; } } } samantha_discourage_reset() { n_min_time = 60000 * 5; n_max_time = 60000 * 10; level.sam_next_beratement = getTime() + randomintrange( n_min_time, n_max_time ); } samantha_encourage_watch_good_lines() { while ( 1 ) { level waittill( "vo_puzzle_good", e_player ); wait 1; level notify( "quest_progressed" ); } } samantha_encourage_think() { original_list = array( "vox_sam_generic_encourage_0", "vox_sam_generic_encourage_1", "vox_sam_generic_encourage_2", "vox_sam_generic_encourage_3", "vox_sam_generic_encourage_4", "vox_sam_generic_encourage_5" ); available_list = []; n_min_time = 60000 * 5; n_max_time = 60000 * 10; next_encouragement = 0; level thread samantha_encourage_watch_good_lines(); while ( 1 ) { if ( available_list.size == 0 ) { available_list = arraycopy( original_list ); } e_player = undefined; say_something = 0; level waittill( "quest_progressed", e_player, say_something ); samantha_discourage_reset(); while ( getTime() < next_encouragement ) { continue; } if ( isDefined( say_something ) && !say_something ) { continue; } while ( !isDefined( e_player ) ) { continue; } while ( !is_player_valid( e_player ) ) { continue; } if ( isDefined( level.sam_talking ) && level.sam_talking ) { continue; } while ( flag( "story_vo_playing" ) || isDefined( e_player.isspeaking ) && e_player.isspeaking ) { wait_network_frame(); } line = random( available_list ); arrayremovevalue( available_list, line ); set_players_dontspeak( 1 ); if ( samanthasay( line, e_player, 1 ) ) { set_players_dontspeak( 0 ); e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( "puzzle", "encourage_respond" ); next_encouragement = getTime() + randomintrange( n_min_time, n_max_time ); } set_players_dontspeak( 0 ); } } samantha_discourage_think() { level endon( "ee_all_staffs_upgraded" ); original_list = array( "vox_sam_generic_chastise_0", "vox_sam_generic_chastise_1", "vox_sam_generic_chastise_2", "vox_sam_generic_chastise_3", "vox_sam_generic_chastise_4", "vox_sam_generic_chastise_5", "vox_sam_generic_chastise_6" ); available_list = []; flag_wait( "samantha_intro_done" ); while ( 1 ) { if ( available_list.size == 0 ) { available_list = arraycopy( original_list ); } samantha_discourage_reset(); while ( getTime() < level.sam_next_beratement ) { wait 1; } line = random( available_list ); arrayremovevalue( available_list, line ); a_players = getplayers(); while ( a_players.size > 0 ) { e_player = random( a_players ); arrayremovevalue( a_players, e_player ); if ( is_player_valid( e_player ) ) { samanthasay( line, e_player, 1 ); e_player maps/mp/zombies/_zm_audio::create_and_play_dialog( "puzzle", "berate_respond" ); break; } else { } } } } samanthasay( vox_line, e_source, b_wait_for_nearby_speakers, intro_line ) { if ( !isDefined( b_wait_for_nearby_speakers ) ) { b_wait_for_nearby_speakers = 0; } if ( !isDefined( intro_line ) ) { intro_line = 0; } level endon( "end_game" ); if ( !intro_line && !flag( "samantha_intro_done" ) ) { return 0; } else { if ( intro_line && flag( "samantha_intro_done" ) ) { return 0; } } while ( isDefined( level.sam_talking ) && level.sam_talking ) { wait_network_frame(); } level.sam_talking = 1; while ( b_wait_for_nearby_speakers ) { nearbyplayers = get_array_of_closest( e_source.origin, get_players(), undefined, undefined, 256 ); while ( isDefined( nearbyplayers ) && nearbyplayers.size > 0 ) { _a2717 = nearbyplayers; _k2717 = getFirstArrayKey( _a2717 ); while ( isDefined( _k2717 ) ) { player = _a2717[ _k2717 ]; while ( isDefined( player ) && isDefined( player.isspeaking ) && player.isspeaking ) { wait 0,05; } _k2717 = getNextArrayKey( _a2717, _k2717 ); } } } level thread samanthasayvoplay( e_source, vox_line ); level waittill( "SamanthaSay_vo_finished" ); return 1; } samanthasayvoplay( e_source, vox_line ) { e_source playsoundwithnotify( vox_line, "sound_done" + vox_line ); e_source waittill( "sound_done" + vox_line ); level.sam_talking = 0; level notify( "SamanthaSay_vo_finished" ); } maxissay( vox_line, m_spot_override, b_wait_for_nearby_speakers ) { level endon( "end_game" ); level endon( "intermission" ); if ( isDefined( level.intermission ) && level.intermission ) { return; } if ( !flag( "maxis_crafted_intro_done" ) ) { return; } while ( isDefined( level.maxis_talking ) && level.maxis_talking ) { wait 0,05; } level.maxis_talking = 1; /# iprintlnbold( "Maxis Says: " + vox_line ); #/ if ( isDefined( m_spot_override ) ) { m_vo_spot = m_spot_override; } while ( isDefined( b_wait_for_nearby_speakers ) && b_wait_for_nearby_speakers ) { nearbyplayers = get_array_of_closest( m_vo_spot.origin, get_players(), undefined, undefined, 256 ); while ( isDefined( nearbyplayers ) && nearbyplayers.size > 0 ) { _a2793 = nearbyplayers; _k2793 = getFirstArrayKey( _a2793 ); while ( isDefined( _k2793 ) ) { player = _a2793[ _k2793 ]; while ( isDefined( player ) && isDefined( player.isspeaking ) && player.isspeaking ) { wait 0,05; } _k2793 = getNextArrayKey( _a2793, _k2793 ); } } } level thread maxissayvoplay( m_vo_spot, vox_line ); level waittill( "MaxisSay_vo_finished" ); } maxissayvoplay( m_vo_spot, vox_line ) { m_vo_spot playsoundwithnotify( vox_line, "sound_done" + vox_line ); m_vo_spot waittill_either( "sound_done" + vox_line, "death" ); level.maxis_talking = 0; level notify( "MaxisSay_vo_finished" ); } richtofenrespondvoplay( vox_category, b_richtofen_first, str_flag ) { if ( !isDefined( b_richtofen_first ) ) { b_richtofen_first = 0; } if ( flag( "story_vo_playing" ) ) { return; } flag_set( "story_vo_playing" ); set_players_dontspeak( 1 ); if ( b_richtofen_first ) { if ( self.character_name == "Richtofen" ) { str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; self playsoundwithnotify( str_vox_line, "rich_done" ); self waittill( "rich_done" ); wait 0,5; _a2846 = getplayers(); _k2846 = getFirstArrayKey( _a2846 ); while ( isDefined( _k2846 ) ) { player = _a2846[ _k2846 ]; if ( player.character_name != "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) { str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; player playsoundwithnotify( str_vox_line, "rich_done" ); player waittill( "rich_done" ); } _k2846 = getNextArrayKey( _a2846, _k2846 ); } } else _a2859 = getplayers(); _k2859 = getFirstArrayKey( _a2859 ); while ( isDefined( _k2859 ) ) { player = _a2859[ _k2859 ]; if ( player.character_name == "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) { str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; player playsoundwithnotify( str_vox_line, "rich_done" ); player waittill( "rich_done" ); wait 0,5; } _k2859 = getNextArrayKey( _a2859, _k2859 ); } if ( isDefined( self ) ) { str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; self playsoundwithnotify( str_vox_line, "rich_response" ); self waittill( "rich_response" ); } } else if ( self.character_name == "Richtofen" ) { _a2886 = getplayers(); _k2886 = getFirstArrayKey( _a2886 ); while ( isDefined( _k2886 ) ) { player = _a2886[ _k2886 ]; if ( player.character_name != "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) { str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; player playsoundwithnotify( str_vox_line, "rich_done" ); player waittill( "rich_done" ); wait 0,5; } _k2886 = getNextArrayKey( _a2886, _k2886 ); } if ( isDefined( self ) ) { str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; self playsoundwithnotify( str_vox_line, "rich_done" ); self waittill( "rich_done" ); } } else { str_vox_line = "vox_plr_" + self.characterindex + "_" + vox_category + "_0"; self playsoundwithnotify( str_vox_line, "rich_response" ); self waittill( "rich_response" ); wait 0,5; _a2916 = getplayers(); _k2916 = getFirstArrayKey( _a2916 ); while ( isDefined( _k2916 ) ) { player = _a2916[ _k2916 ]; if ( player.character_name == "Richtofen" && distance2d( player.origin, self.origin ) < 800 ) { str_vox_line = "vox_plr_" + player.characterindex + "_" + vox_category + "_0"; player playsoundwithnotify( str_vox_line, "rich_done" ); player waittill( "rich_done" ); } _k2916 = getNextArrayKey( _a2916, _k2916 ); } } if ( isDefined( str_flag ) ) { flag_set( str_flag ); } set_players_dontspeak( 0 ); flag_clear( "story_vo_playing" ); } wunderfizz_used_vo() { self endon( "death" ); self endon( "disconnect" ); if ( isDefined( self.has_used_perk_random ) && self.has_used_perk_random ) { return; } if ( isDefined( self.character_name ) && self.character_name != "Richtofen" ) { return; } if ( flag( "story_vo_playing" ) ) { return; } if ( isDefined( self.dontspeak ) && self.dontspeak ) { return; } set_players_dontspeak( 1 ); self.has_used_perk_random = 1; i = 1; while ( i < 4 ) { vox_line = "vox_plr_2_discover_wonder_" + i + "_0"; self playsoundwithnotify( vox_line, "sound_done" + vox_line ); self waittill( "sound_done" + vox_line ); wait 0,1; i++; } set_players_dontspeak( 0 ); } init_sam_promises() { level.vo_promises[ "Richtofen_1" ][ 0 ] = "vox_sam_hear_samantha_2_plr_2_0"; level.vo_promises[ "Richtofen_1" ][ 1 ] = "vox_plr_2_hear_samantha_2_0"; level.vo_promises[ "Richtofen_2" ][ 0 ] = "vox_sam_sam_richtofen_1_0"; level.vo_promises[ "Richtofen_2" ][ 1 ] = "vox_sam_sam_richtofen_2_0"; level.vo_promises[ "Richtofen_2" ][ 2 ] = "vox_plr_2_sam_richtofen_3_0"; level.vo_promises[ "Richtofen_3" ][ 0 ] = "vox_sam_sam_richtofen_4_0"; level.vo_promises[ "Richtofen_3" ][ 1 ] = "vox_plr_2_sam_richtofen_5_0"; level.vo_promises[ "Richtofen_3" ][ 2 ] = "vox_plr_2_sam_richtofen_6_0"; level.vo_promises[ "Dempsey_1" ][ 0 ] = "vox_sam_hear_samantha_2_plr_0_0"; level.vo_promises[ "Dempsey_1" ][ 1 ] = "vox_plr_0_hear_samantha_2_0"; level.vo_promises[ "Dempsey_2" ][ 0 ] = "vox_sam_sam_dempsey_1_0"; level.vo_promises[ "Dempsey_2" ][ 1 ] = "vox_sam_sam_dempsey_1_1"; level.vo_promises[ "Dempsey_2" ][ 2 ] = "vox_plr_0_sam_dempsey_1_0"; level.vo_promises[ "Dempsey_3" ][ 0 ] = "vox_sam_sam_dempsey_2_0"; level.vo_promises[ "Dempsey_3" ][ 1 ] = "vox_sam_sam_dempsey_2_1"; level.vo_promises[ "Dempsey_3" ][ 2 ] = "vox_plr_0_sam_dempsey_2_0"; level.vo_promises[ "Nikolai_1" ][ 0 ] = "vox_sam_hear_samantha_2_plr_1_0"; level.vo_promises[ "Nikolai_1" ][ 1 ] = "vox_plr_1_hear_samantha_2_0"; level.vo_promises[ "Nikolai_2" ][ 0 ] = "vox_sam_sam_nikolai_1_0"; level.vo_promises[ "Nikolai_2" ][ 1 ] = "vox_sam_sam_nikolai_1_1"; level.vo_promises[ "Nikolai_2" ][ 2 ] = "vox_plr_1_sam_nikolai_1_0"; level.vo_promises[ "Nikolai_3" ][ 0 ] = "vox_sam_sam_nikolai_2_0"; level.vo_promises[ "Nikolai_3" ][ 1 ] = "vox_sam_sam_nikolai_2_1"; level.vo_promises[ "Nikolai_3" ][ 2 ] = "vox_plr_1_sam_nikolai_2_0"; level.vo_promises[ "Takeo_1" ][ 0 ] = "vox_sam_hear_samantha_2_plr_3_0"; level.vo_promises[ "Takeo_1" ][ 1 ] = "vox_plr_3_hear_samantha_2_0"; level.vo_promises[ "Takeo_2" ][ 0 ] = "vox_sam_sam_takeo_1_0"; level.vo_promises[ "Takeo_2" ][ 1 ] = "vox_sam_sam_takeo_1_1"; level.vo_promises[ "Takeo_2" ][ 2 ] = "vox_plr_3_sam_takeo_1_0"; level.vo_promises[ "Takeo_3" ][ 0 ] = "vox_sam_sam_takeo_2_0"; level.vo_promises[ "Takeo_3" ][ 1 ] = "vox_sam_sam_takeo_2_1"; level.vo_promises[ "Takeo_3" ][ 2 ] = "vox_plr_3_sam_takeo_2_0"; level thread sam_promises_watch(); } sam_promises_watch() { flag_wait( "samantha_intro_done" ); while ( 1 ) { level waittill( "player_zombie_blood", e_player ); a_players = get_players(); if ( randomint( 100 ) < 20 ) { e_player thread sam_promises_conversation(); } } } sam_promises_conversation() { self endon( "disconnect" ); self.vo_promises_playing = 1; wait 3; if ( !isDefined( self.n_vo_promises ) ) { self.n_vo_promises = 1; } if ( self.n_vo_promises > 3 && isDefined( self.b_promise_cooldown ) || self.b_promise_cooldown && flag( "story_vo_playing" ) ) { self.vo_promises_playing = undefined; return; } a_promises = level.vo_promises[ ( self.character_name + "_" ) + self.n_vo_promises ]; self.n_vo_promises++; self thread sam_promises_cooldown(); level.sam_talking = 1; self set_player_dontspeak( 1 ); flag_set( "story_vo_playing" ); self play_sam_promises_conversation( a_promises ); level.sam_talking = 0; self set_player_dontspeak( 0 ); flag_clear( "story_vo_playing" ); self.vo_promises_playing = undefined; } play_sam_promises_conversation( a_promises ) { i = 0; while ( i < a_promises.size ) { self endon( "zombie_blood_over" ); self endon( "disconnect" ); if ( issubstr( a_promises[ i ], "sam_sam" ) || issubstr( a_promises[ i ], "samantha" ) ) { self thread sam_promises_conversation_ended_early( a_promises[ i ] ); self playsoundtoplayer( a_promises[ i ], self ); n_duration = soundgetplaybacktime( a_promises[ i ] ); wait ( n_duration / 1000 ); self notify( "promises_VO_end_early" ); } else { self playsoundwithnotify( a_promises[ i ], "player_done" ); self waittill( "player_done" ); } wait 0,3; i++; } } sam_promises_conversation_ended_early( str_alias ) { self notify( "promises_VO_end_early" ); self endon( "promises_VO_end_early" ); while ( self.zombie_vars[ "zombie_powerup_zombie_blood_on" ] ) { wait 0,05; } self stoplocalsound( str_alias ); } sam_promises_cooldown() { self endon( "disconnect" ); self.b_promise_cooldown = 1; level waittill( "end_of_round" ); self.b_promise_cooldown = undefined; }