// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool

main()
{
    generic_human();
    script_model();
    player();
    vehicles();
    dialog();
}

#using_animtree("generic_human");

generic_human()
{
    level.scr_anim["generic"]["traverse_inverted_192"] = %space_traversal_jump_180_u;
    level.scr_animtree["generic"] = #animtree;
    level.scr_anim["generic"]["odin_intro_suit_sway"][0] = %odin_intro_suit_sway;
    level.scr_animtree["decomp_legs"] = #animtree;
    level.scr_anim["decomp_legs"]["odin_escape_spin_room_player_body"] = %odin_escape_spin_room_player_body;
    level.scr_model["decomp_legs"] = "fullbody_us_space_kyra";
    level.scr_anim["odin_ally"]["odin_hall_escape_turn01_ally"] = %odin_hallway_escape_turn01_ally01;
    level.scr_anim["odin_ally"]["odin_hallway_escape_turn01_loop_ally01"][0] = %odin_hallway_escape_turn01_loop_ally01;
    level.scr_anim["odin_ally"]["odin_hall_escape_turn02_ally"] = %odin_hallway_escape_turn02_ally01;
    level.scr_anim["odin_ally"]["space_pain_1"] = %space_pain_1;
    level.scr_anim["odin_ally"]["odin_intro_kyra_satellite_idle"] = %odin_intro_kyra_satellite_idle;
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_kyr_budyoushouldbe", maps\odin_intro::intro_vin_ln_1 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_cub_iseeittoo", maps\odin_intro::intro_vin_ln_2 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_kyr_okbudcomeon", maps\odin_intro::intro_vin_ln_3 );
    level.scr_anim["odin_ally"]["odin_intro_kyra_turn"] = %odin_intro_kyra_turn;
    level.scr_anim["odin_ally"]["intro_exterior_scene"] = %odin_intro_kyra;
    level.scr_anim["odin_ally"]["odin_intro_kyra_idle"][0] = %odin_intro_kyra_idle;
    level.scr_anim["odin_ally"]["odin_intro_kyra_wait_idle"][0] = %odin_intro_kyra_wait_idle;
    level.scr_anim["odin_ally"]["odin_infiltrate_kyra_entrance"] = %odin_infiltrate_kyra_entrance;
    level.scr_anim["odin_ally"]["odin_infiltrate_kyra_midpoint_idle"][0] = %odin_infiltrate_kyra_midpoint_idle;
    level.scr_anim["odin_ally"]["odin_infiltrate_kyra_to_door"] = %odin_infiltrate_kyra_to_door;
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_ast1_pressurizingairlock", maps\odin_intro::mosley_airlock_ln_1 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_ast1_reallylookingforwardto", maps\odin_intro::mosley_airlock_ln_2 );
    level.scr_anim["odin_ally"]["odin_infiltrate_kyra_door_idle"][0] = %odin_infiltrate_kyra_door_idle;
    level.scr_anim["odin_ally"]["odin_infiltrate_kyra_start"] = %odin_infiltrate_kyra_start;
    level.scr_anim["odin_ally"]["odin_infiltrate_kyra"] = %odin_infiltrate_kyra;
    maps\_anim::addnotetrack_customfunction( "odin_ally", "odin_infiltrate_round_door", maps\odin_ally::invasion_door_shut );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "odin_infiltrate_escape_door", maps\odin_ally::shut_post_infil_door_flag );
    level.scr_anim["odin_ally"]["odin_infiltrate_kyra_no_push"] = %odin_infiltrate_kyra_no_push;
    maps\_anim::addnotetrack_customfunction( "odin_ally", "odin_infiltrate_round_door", maps\odin_ally::invasion_door_shut );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "odin_infiltrate_escape_door", maps\odin_ally::shut_post_infil_door_flag );
    level.scr_anim["odin_ally"]["odin_infiltrate_kyra_escape_idle"][0] = %odin_infiltrate_kyra_escape_idle;
    level.scr_anim["odin_invader_01"]["odin_infiltrate"] = %odin_infiltrate_baddy_01;
    level.scr_anim["odin_invader_02"]["odin_infiltrate"] = %odin_infiltrate_baddy_02;
    level.scr_anim["odin_invader_03"]["odin_infiltrate"] = %odin_infiltrate_baddy_06;
    level.scr_anim["odin_invader_04"]["odin_infiltrate"] = %odin_infiltrate_baddy_04;
    level.scr_anim["odin_invader_05"]["odin_infiltrate"] = %odin_infiltrate_baddy_05;
    level.scr_anim["odin_victim_01"]["odin_infiltrate"] = %odin_infiltrate_red_shirt_01;
    maps\_anim::addnotetrack_customfunction( "odin_victim_01", "fx_infil_red_shirt_die", maps\odin_fx::fx_infil_red_shirt_die );
    level.scr_anim["odin_victim_02"]["odin_infiltrate"] = %odin_infiltrate_red_shirt_02;
    maps\_anim::addnotetrack_customfunction( "odin_victim_02", "fx_infil_red_shirt_die", maps\odin_fx::fx_infil_red_shirt_die );
    level.scr_anim["odin_victim_01"]["odin_infiltrate_idle"][0] = %odin_infiltrate_red_shirt_01_idle;
    level.scr_anim["odin_victim_02"]["odin_infiltrate_idle"][0] = %odin_infiltrate_red_shirt_02_idle;
    maps\_anim::addnotetrack_customfunction( "odin_victim_02", "odin_infiltrate_enemy_door", maps\odin_ally::open_enemy_infiltration_door_flag );
    level.scr_anim["odin_victim_02"]["odin_infiltrate_wave"][0] = %odin_infiltrate_red_shirt_02_wave;
    level.scr_anim["odin_victim_03"]["odin_infiltrate_idle"][0] = %odin_infiltrate_red_shirt_03_idle;
    level.scr_anim["odin_victim_03"]["odin_infiltrate"] = %odin_infiltrate_red_shirt_03;
    maps\_anim::addnotetrack_customfunction( "odin_victim_03", "fx_infil_red_shirt_die", maps\odin_fx::fx_infil_red_shirt_die );
    level.scr_animtree["odin_opfor"] = #animtree;
    level.scr_anim["odin_opfor"]["gun_struggle_intro_throw"] = %odin_intro_to_weapon_begin_struggle_opfor;
    level.scr_model["odin_opfor"] = "body_fed_space_assault_b";
    level.scr_anim["odin_ally"]["gun_struggle_intro"] = %odin_intro_to_weapon_struggle_ally;
    level.scr_anim["odin_opfor"]["gun_struggle_intro"] = %odin_intro_to_weapon_struggle_opfor;
    level.scr_anim["odin_redshirt"]["gun_struggle_intro"] = %odin_intro_to_weapon_struggle_redshirt;
    level.scr_anim["odin_ally"]["gun_struggle_intro_loop"][0] = %odin_intro_to_weapon_struggle_loop_ally;
    level.scr_anim["odin_opfor"]["gun_struggle_intro_loop"][0] = %odin_intro_to_weapon_struggle_loop_opfor;
    level.scr_anim["odin_ally"]["gun_struggle_intro_throw"] = %odin_intro_to_weapon_begin_struggle_ally;
    maps\_anim::addnotetrack_customfunction( "odin_ally", "door_opens", maps\odin_ally::struggle_door_opens );
    level.scr_anim["odin_opfor"]["gun_struggle_intro_throw"] = %odin_intro_to_weapon_begin_struggle_opfor;
    maps\_anim::addnotetrack_customfunction( "odin_opfor", "start_player_knock_anim", maps\odin_ally::set_player_anim_flag );
    maps\_anim::addnotetrack_customfunction( "odin_opfor", "start_spin", maps\odin_ally::start_struggle_spin );
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_range_opfor"] = %odin_hallway_weapon_struggle_range_opfor;
    level.scr_anim["odin_opfor"]["odin_pyl_translatednostopno"] = %odin_hallway_weapon_struggle_range_opfor_face;
    maps\_anim::addnotetrack_customfunction( "odin_opfor", "YOLO_odin_pyl_translatednostopno", maps\odin_ally::struggle_guy_line );
    level.scr_anim["odin_ally"]["odin_hallway_weapon_struggle_down_ally01"] = %odin_hallway_weapon_struggle_down_ally01;
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_down_opfor"] = %odin_hallway_weapon_struggle_down_opfor;
    level.scr_anim["odin_ally"]["odin_hallway_weapon_struggle_up_ally01"] = %odin_hallway_weapon_struggle_up_ally01;
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_up_opfor"] = %odin_hallway_weapon_struggle_up_opfor;
    level.scr_anim["odin_ally"]["odin_hallway_weapon_struggle_left_ally01"] = %odin_hallway_weapon_struggle_left_ally01;
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_left_opfor"] = %odin_hallway_weapon_struggle_left_opfor;
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_left_opfor_add"] = %odin_hallway_weapon_struggle_left_opfor_add;
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_right_opfor_add"] = %odin_hallway_weapon_struggle_right_opfor_add;
    level.scr_anim["odin_ally"]["odin_hallway_weapon_struggle_right_ally01"] = %odin_hallway_weapon_struggle_right_ally01;
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_right_opfor"] = %odin_hallway_weapon_struggle_right_opfor;
    level.scr_anim["odin_ally"]["odin_hallway_weapon_struggle_center_ally01"] = %odin_hallway_weapon_struggle_center_ally01;
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_center_opfor"] = %odin_hallway_weapon_struggle_center_opfor;
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_fail"] = %odin_hallway_weapon_struggle_fail_opfor;
    level.scr_anim["odin_opfor"]["odin_hallway_weapon_struggle_shoot"] = %odin_hallway_weapon_struggle_shoot_opfor;
    level.scr_anim["odin_opfor"]["odin_escape_first_encounter_opfor"] = %odin_escape_first_encounter_opfor;
    level.scr_anim["odin_redshirt"]["odin_escape_first_encounter_redshirt"] = %odin_escape_first_encounter_redshirt;
    level.scr_anim["odin_opfor"]["odin_escape_first_encounter_opfor02"] = %odin_escape_first_encounter_opfor02;
    level.scr_anim["odin_redshirt"]["odin_escape_first_encounter_redshirt02"] = %odin_escape_first_encounter_redshirt02;
    level.scr_anim["odin_ally"]["odin_escape_first_encounter_loop_ally01"][0] = %odin_escape_first_encounter_loop_ally01;
    level.scr_anim["odin_ally"]["odin_escape_first_encounter_end_ally01"] = %odin_escape_first_encounter_end_ally01;
    level.scr_anim["odin_ally"]["odin_escape_start_first_encounter_loop_ally01"][0] = %odin_escape_start_first_encounter_loop_ally01;
    level.scr_anim["odin_ally"]["odin_escape_first_encounter_ally01"] = %odin_escape_first_encounter_ally01;
    level.scr_anim["odin_ally"]["odin_escape_first_encounter_end_loop_ally01"][0] = %odin_escape_first_encounter_end_loop_ally01;
    level.scr_anim["odin_ally"]["odin_escape_zigzag_start_ally01"] = %odin_escape_zigzag_start_ally01;
    level.scr_anim["odin_ally"]["odin_escape_zigzag_start_loop_ally01"][0] = %odin_escape_zigzag_start_loop_ally01;
    level.scr_anim["odin_ally"]["odin_escape_open_door_player"] = %odin_escape_zigzag_door_ally01;
    level.scr_anim["odin_ally"]["odin_escape_zigzag_second_ally01"] = %odin_escape_zigzag_second_ally01;
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_ast1_ohnoodinis", maps\odin_escape::window_vo_01 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_kyr_theyreuploadingmore", maps\odin_escape::window_vo_02 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_ast1_houstonwhatdowe", maps\odin_escape::window_vo_03 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_ho2_odincontrolwehave", maps\odin_escape::window_vo_04 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_ho2_imsorrymosley", maps\odin_escape::window_vo_05 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_ast1_copyhouston", maps\odin_escape::window_vo_06 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_kyr_budweneedto_2", maps\odin_escape::window_vo_07 );
    level.scr_anim["odin_ally"]["odin_escape_zigzag_second_loop_ally01"][0] = %odin_escape_zigzag_second_loop_ally01;
    level.scr_anim["odin_ally"]["odin_escape_zigzag_third_ally01"] = %odin_escape_zigzag_third_ally01;
    level.scr_anim["odin_ally"]["odin_escape_zigzag_third_loop_ally01"][0] = %odin_escape_zigzag_third_loop_ally01;
    level.scr_anim["odin_ally"]["odin_escape_zigzag_fourth_ally01"] = %odin_escape_zigzag_fourth_ally01;
    level.scr_anim["odin_ally"]["odin_escape_zigzag_fourth_loop_ally01"][0] = %odin_escape_zigzag_fourth_loop_ally01;
    level.scr_anim["odin_ally"]["odin_escape_zigzag_to_spin_ally01"] = %odin_escape_zigzag_to_spin_ally01;
    level.scr_anim["odin_ally"]["odin_escape_zigzag_to_spin_loop_ally01"][0] = %odin_escape_zigzag_to_spin_loop_ally01;
    level.scr_anim["odin_ally"]["odin_escape_spin_room_ally01"] = %odin_escape_spin_room_ally01;
    maps\_anim::addnotetrack_customfunction( "odin_ally", "start_odin_escape_spin_room_player", ::decomp_explosion_anim_player );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "fx_solar_panel_collision_kyra", maps\odin_fx::fx_solar_panel_collision_kyra );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_kyr_houston", maps\odin_spin::decomp_anim_line_1 );
    maps\_anim::addnotetrack_customfunction( "odin_ally", "YOLO_odin_kyr_houstonbudandi", maps\odin_spin::decomp_anim_line_2 );
    level.scr_anim["odin_ally"]["odin_escape_zigzag_to_spin_ally01"] = %odin_escape_zigzag_to_spin_ally01;
    level.scr_anim["generic"]["odin_escape_spin_room_opfor01"] = %odin_escape_spin_room_opfor01;
    level.scr_anim["generic"]["odin_escape_spin_room_opfor02"] = %odin_escape_spin_room_opfor02;
    level.scr_anim["generic"]["odin_spin_struggling_enemy_01_loop"][0] = %odin_spin_struggling_enemy_01;
    level.scr_anim["generic"]["odin_spin_struggling_enemy_02_loop"][0] = %odin_spin_struggling_enemy_02;
    level.scr_anim["generic"]["odin_escape_spin_opfor_death_01"] = %odin_escape_spin_opfor_death_01;
    level.scr_anim["generic"]["odin_escape_spin_opfor_death_02"] = %odin_escape_spin_opfor_death_02;
    level.scr_anim["generic"]["odin_escape_spin_opfor_death_03"] = %odin_escape_spin_opfor_death_03;
    level.scr_anim["generic"]["odin_escape_spin_opfor_death_04"] = %odin_escape_spin_opfor_death_04;
    level.scr_anim["generic"]["odin_escape_spin_opfor_death_05"] = %odin_escape_spin_opfor_death_05;
    level.scr_anim["odin_ally"]["satellite_end_start_loop"][0] = %odin_satellite_end_start_kyra_loop;
    level.scr_anim["odin_ally"]["satellite_end_cover_lift"] = %odin_satellite_end_cover_lift_kyra;
    maps\_anim::addnotetrack_customfunction( "odin_ally", "show_kyra_gun", maps\odin_satellite::ally_gun_hide );
    level.scr_anim["odin_ally"]["satellite_end_explosion_01"] = %odin_satellite_end_explosion_01_kyra;
    level.scr_anim["odin_ally"]["satellite_end_explosion_02"] = %odin_satellite_end_explosion_02_kyra;
    level.scr_anim["odin_ally"]["satellite_end_shoot_01"][0] = %odin_satellite_end_shoot_01_kyra;
    level.scr_anim["odin_ally"]["satellite_end_shoot_02"][0] = %odin_satellite_end_shoot_02_kyra;
    level.scr_anim["odin_ally"]["satellite_end_start"] = %odin_satellite_end_start_kyra;
    maps\_anim::addnotetrack_customfunction( "odin_ally", "hide_kyra_gun", maps\odin_satellite::ally_gun_show );
}

#using_animtree("script_model");

script_model()
{
    level.scr_animtree["space_escape_pack"] = #animtree;
    level.scr_anim["space_escape_pack"]["odin_escape_zigzag_bag_01"] = %odin_escape_zigzag_bag_01;
    level.scr_model["space_escape_pack"] = "space_interior_pack_round";
    level.scr_anim["space_escape_pack"]["odin_escape_zigzag_bag_02"] = %odin_escape_zigzag_bag_02;
    level.scr_animtree["space_storage_container_01"] = #animtree;
    level.scr_anim["space_storage_container_01"]["decompression_props"] = %odin_escape_spin_room_opfor01_crate;
    level.scr_model["space_storage_container_01"] = "space_storage_container_01";
    level.scr_animtree["space_ata_box"] = #animtree;
    level.scr_anim["space_ata_box"]["decompression_props"] = %odin_escape_spin_room_opfor02_crate;
    level.scr_model["space_ata_box"] = "space_ata_box";
    level.scr_animtree["decomp_crate_01"] = #animtree;
    level.scr_anim["decomp_crate_01"]["decompression_props"] = %odin_escape_spin_room_anim_crate01;
    level.scr_animtree["decomp_crate_02"] = #animtree;
    level.scr_anim["decomp_crate_02"]["decompression_props"] = %odin_escape_spin_room_anim_crate02;
    level.scr_animtree["decomp_crate_03"] = #animtree;
    level.scr_anim["decomp_crate_03"]["decompression_props"] = %odin_escape_spin_room_anim_crate03;
    level.scr_animtree["decomp_pannel_01"] = #animtree;
    level.scr_anim["decomp_pannel_01"]["decompression_props"] = %odin_escape_spin_room_back_pannel01;
    level.scr_model["decomp_pannel_01"] = "tag_origin";
    level.scr_animtree["decomp_pannel_02"] = #animtree;
    level.scr_anim["decomp_pannel_02"]["decompression_props"] = %odin_escape_spin_room_back_pannel02;
    level.scr_model["decomp_pannel_02"] = "tag_origin";
    level.scr_animtree["decomp_pannel_03"] = #animtree;
    level.scr_anim["decomp_pannel_03"]["decompression_props"] = %odin_escape_spin_room_back_pannel03;
    level.scr_model["decomp_pannel_03"] = "tag_origin";
    level.scr_animtree["decomp_pannel_04"] = #animtree;
    level.scr_anim["decomp_pannel_04"]["decompression_props"] = %odin_escape_spin_room_back_pannel04;
    level.scr_model["decomp_pannel_04"] = "tag_origin";
    level.scr_animtree["decomp_pannel_05"] = #animtree;
    level.scr_anim["decomp_pannel_05"]["decompression_props"] = %odin_escape_spin_room_back_pannel05;
    level.scr_model["decomp_pannel_05"] = "tag_origin";
    level.scr_animtree["decomp_pannel_06"] = #animtree;
    level.scr_anim["decomp_pannel_06"]["decompression_props"] = %odin_escape_spin_room_back_pannel06;
    level.scr_model["decomp_pannel_06"] = "tag_origin";
    level.scr_animtree["opfor01_crate"] = #animtree;
    level.scr_anim["opfor01_crate"]["decompression_props"] = %odin_escape_spin_room_opfor01_crate;
    level.scr_model["opfor01_crate"] = "tag_origin";
    level.scr_animtree["opfor02_crate"] = #animtree;
    level.scr_anim["opfor02_crate"]["decompression_props"] = %odin_escape_spin_room_opfor02_crate;
    level.scr_model["opfor02_crate"] = "tag_origin";
    level.scr_animtree["decomp_solar_panel"] = #animtree;
    level.scr_anim["decomp_solar_panel"]["decompression_props"] = %odin_escape_spin_room_solar_panel;
    level.scr_model["decomp_solar_panel"] = "space_debris_solar_panel_01_anim";
    maps\_anim::addnotetrack_customfunction( "decomp_solar_panel", "fx_solar_panel_collision_01", maps\odin_fx::fx_spin_solar_panel_collision_01 );
    maps\_anim::addnotetrack_customfunction( "decomp_solar_panel", "fx_solar_panel_collision_02", maps\odin_fx::fx_spin_solar_panel_collision_02 );
    level.scr_animtree["shuttle"] = #animtree;
    level.scr_anim["shuttle"]["odin_intro_shuttle"] = %odin_intro_shuttle;
    level.scr_model["shuttle"] = "vehicle_space_shuttle";
    level.scr_animtree["wires"] = #animtree;
    level.scr_anim["wires"]["satellite_end_explosion_01"] = %odin_satellite_end_explosion_01_wire;
    level.scr_model["wires"] = "odin_sat_wire";
    level.scr_anim["wires"]["satellite_end_explosion_02"] = %odin_satellite_end_explosion_02_wire;
    level.scr_anim["wires"]["satellite_end_shoot_01"][0] = %odin_satellite_end_shoot_01_wire;
    level.scr_anim["wires"]["satellite_end_shoot_02"][0] = %odin_satellite_end_shoot_02_wire;
    level.scr_animtree["wires2"] = #animtree;
    level.scr_anim["wires2"]["satellite_end_explosion_01"] = %odin_satellite_end_explosion_01_wire_02;
    level.scr_model["wires2"] = "odin_sat_wire";
    level.scr_anim["wires2"]["satellite_end_shoot_02"][0] = %odin_satellite_end_shoot_02_wire_02;
    level.scr_anim["wires2"]["satellite_end_explosion_02"] = %odin_satellite_end_explosion_02_wire_02;
    level.scr_animtree["wires3"] = #animtree;
    level.scr_anim["wires3"]["satellite_end_explosion_01"] = %odin_satellite_end_explosion_01_wire_03;
    level.scr_model["wires3"] = "odin_sat_wire";
    level.scr_anim["wires3"]["satellite_end_shoot_02"][0] = %odin_satellite_end_shoot_02_wire_03;
    level.scr_anim["wires3"]["satellite_end_explosion_02"] = %odin_satellite_end_explosion_02_wire_03;
    level.scr_animtree["wires4"] = #animtree;
    level.scr_anim["wires4"]["satellite_end_explosion_01"] = %odin_satellite_end_explosion_01_wire_04;
    level.scr_model["wires4"] = "odin_sat_wire";
    level.scr_anim["wires4"]["satellite_end_shoot_02"][0] = %odin_satellite_end_shoot_02_wire_04;
    level.scr_anim["wires4"]["satellite_end_explosion_02"] = %odin_satellite_end_explosion_02_wire_04;
    level.scr_animtree["wires5"] = #animtree;
    level.scr_anim["wires5"]["satellite_end_explosion_01"] = %odin_satellite_end_explosion_01_wire_05;
    level.scr_model["wires5"] = "odin_sat_wire";
    level.scr_anim["wires5"]["satellite_end_shoot_02"][0] = %odin_satellite_end_shoot_02_wire_05;
    level.scr_anim["wires5"]["satellite_end_explosion_02"] = %odin_satellite_end_explosion_02_wire_05;
    level.scr_animtree["finale_gun"] = #animtree;
    level.scr_anim["finale_gun"]["satellite_end_explosion_01_gun"] = %odin_satellite_end_explosion_01_gun;
    level.scr_model["finale_gun"] = "viewmodel_space_tar21";
    level.scr_animtree["kyra_gun"] = #animtree;
    level.scr_anim["kyra_gun"]["odin_escape_first_encounter_end_tar21"] = %odin_escape_first_encounter_end_tar21;
    level.scr_model["kyra_gun"] = "weapon_tar21_space";
    level.scr_anim["finale_gun"]["satellite_end_explosion_02_gun"] = %odin_satellite_end_explosion_02_gun;
    level.scr_animtree["sat_body"] = #animtree;
    level.scr_anim["sat_body"]["satellite_end_explosion_02_Sat"] = %odin_satellite_end_explosion_02_sat_body;
    level.scr_model["sat_body"] = "odin_satellite_body";
    level.scr_anim["sat_body"]["satellite_end_explosion_loop_sat"] = %odin_satellite_end_loop_sat_body;
    level.scr_animtree["space_round_hatch"] = #animtree;
    level.scr_anim["space_round_hatch"]["odin_infiltrate_hatch"] = %odin_infiltrate_round_door;
    level.scr_model["space_round_hatch"] = "space_exterior_round_hatch_01";
    level.scr_anim["space_round_hatch"]["odin_infiltrate_exterior_door_close"] = %odin_infiltrate_exterior_door_close;
    level.scr_anim["space_round_hatch"]["odin_intro_exterior_door_open"] = %odin_intro_exterior_door_open;
    level.scr_animtree["space_square_hatch"] = #animtree;
    level.scr_anim["space_square_hatch"]["odin_infiltrate_door_open"] = %odin_infiltrate_door_open;
    level.scr_model["space_square_hatch"] = "module_door_01_animate";
    level.scr_anim["space_square_hatch"]["odin_infiltrate_escape_door"] = %odin_infiltrate_escape_door;
    level.scr_anim["space_square_hatch"]["odin_infiltrate_enemy_door"] = %odin_infiltrate_enemy_door;
    level.scr_anim["space_square_hatch"]["odin_escape_open_door_player"] = %odin_escape_zigzag_door;
    level.scr_anim["space_square_hatch"]["odin_escape_zigzag_start_door"] = %odin_escape_zigzag_start_door;
    level.scr_animtree["odin_sat_section_01"] = #animtree;
    level.scr_anim["odin_sat_section_01"]["satellite_end_start"] = %odin_satellite_end_sat_top_start;
    level.scr_model["odin_sat_section_01"] = "odin_sat_section_01";
    level.scr_anim["odin_sat_section_01"]["satellite_end_cover_lift"] = %odin_satellite_end_sat_top_cover_lift;
    level.scr_anim["odin_sat_section_01"]["satellite_end_shoot_01"][0] = %odin_satellite_end_sat_top_shoot_01;
    level.scr_anim["odin_sat_section_01"]["satellite_end_shoot_02"][0] = %odin_satellite_end_sat_top_shoot_02;
    level.scr_anim["odin_sat_section_01"]["satellite_end_explosion_01"] = %odin_satellite_end_sat_top_explostion_01;
    level.scr_anim["odin_sat_section_01"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_top_explosion_02;
    level.scr_animtree["odin_sat_cover_01"] = #animtree;
    level.scr_anim["odin_sat_cover_01"]["satellite_end_cover_lift"] = %odin_satellite_end_sat_top_cover_cover_lift;
    level.scr_model["odin_sat_cover_01"] = "odin_sat_cover_01";
    level.scr_anim["odin_sat_cover_01"]["satellite_end_start"] = %odin_satellite_end_sat_top_cover_start;
    level.scr_anim["odin_sat_cover_01"]["satellite_end_shoot_01"][0] = %odin_satellite_end_sat_top_cover_shoot_01;
    level.scr_anim["odin_sat_cover_01"]["satellite_end_shoot_02"][0] = %odin_satellite_end_sat_top_cover_shoot_02;
    level.scr_anim["odin_sat_cover_01"]["satellite_end_explosion_01"] = %odin_satellite_end_sat_top_cover_explostion_01;
    level.scr_anim["odin_sat_cover_01"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_top_cover_explosion_02;
    level.scr_animtree["finale_gun"] = #animtree;
    level.scr_anim["finale_gun"]["satellite_end_start"] = %odin_satellite_end_start_gun;
    level.scr_model["finale_gun"] = "viewmodel_space_tar21";
    level.scr_anim["finale_gun"]["satellite_end_start_gun_loop"][0] = %odin_satellite_end_start_gun_loop;
    level.scr_animtree["odin_sat_section_04_base"] = #animtree;
    level.scr_anim["odin_sat_section_04_base"]["sat_blossom_close"] = %odin_sat_blossom_close_base;
    level.scr_model["odin_sat_section_04_base"] = "odin_sat_section_04_base";
    level.scr_anim["odin_sat_section_04_base"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_base_explosion_02;
    level.scr_animtree["odin_sat_cover_01"] = #animtree;
    level.scr_anim["odin_sat_cover_01"]["sat_blossom_close"] = %odin_sat_blossom_close_cover;
    level.scr_model["odin_sat_cover_01"] = "odin_sat_cover_01";
    level.scr_animtree["odin_sat_section_02_breakup"] = #animtree;
    level.scr_anim["odin_sat_section_02_breakup"]["sat_blossom_close"] = %odin_sat_blossom_close_mid;
    level.scr_model["odin_sat_section_02_breakup"] = "odin_sat_section_02_breakup";
    level.scr_anim["odin_sat_section_02_breakup"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_mid_explosion_02;
    level.scr_animtree["odin_sat_section_03_rot"] = #animtree;
    level.scr_anim["odin_sat_section_03_rot"]["odin_sat_blossom_close_spin"][0] = %odin_sat_blossom_close_spin;
    level.scr_model["odin_sat_section_03_rot"] = "odin_sat_section_03_rot";
    level.scr_anim["odin_sat_section_03_rot"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_rot_explosion_02;
    level.scr_animtree["odin_sat_section_01"] = #animtree;
    level.scr_anim["odin_sat_section_01"]["sat_blossom_close"] = %odin_sat_blossom_close_top;
    level.scr_model["odin_sat_section_01"] = "odin_sat_section_01";
    level.scr_anim["odin_sat_section_01"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_top_explosion_02;
    level.scr_animtree["odin_sat_section_02_solar_wing_01"] = #animtree;
    level.scr_anim["odin_sat_section_02_solar_wing_01"]["sat_blossom_close"] = %odin_sat_blossom_close_blade01;
    level.scr_model["odin_sat_section_02_solar_wing_01"] = "odin_sat_section_02_solar_wing_01";
    level.scr_anim["odin_sat_section_02_solar_wing_01"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_blade01_explosion_02;
    level.scr_animtree["odin_sat_section_02_solar_wing_02"] = #animtree;
    level.scr_anim["odin_sat_section_02_solar_wing_02"]["sat_blossom_close"] = %odin_sat_blossom_close_blade02;
    level.scr_model["odin_sat_section_02_solar_wing_02"] = "odin_sat_section_02_solar_wing_01";
    level.scr_anim["odin_sat_section_02_solar_wing_02"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_blade02_explosion_02;
    level.scr_animtree["odin_sat_section_02_solar_wing_03"] = #animtree;
    level.scr_anim["odin_sat_section_02_solar_wing_03"]["sat_blossom_close"] = %odin_sat_blossom_close_blade03;
    level.scr_model["odin_sat_section_02_solar_wing_03"] = "odin_sat_section_02_solar_wing_01";
    level.scr_anim["odin_sat_section_02_solar_wing_03"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_blade03_explosion_02;
    level.scr_animtree["odin_sat_section_02_solar_wing_04"] = #animtree;
    level.scr_anim["odin_sat_section_02_solar_wing_04"]["sat_blossom_close"] = %odin_sat_blossom_close_blade04;
    level.scr_model["odin_sat_section_02_solar_wing_04"] = "odin_sat_section_02_solar_wing_01";
    level.scr_anim["odin_sat_section_02_solar_wing_04"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_blade04_explosion_02;
    level.scr_animtree["odin_sat_section_04_pod_doorL_01"] = #animtree;
    level.scr_anim["odin_sat_section_04_pod_doorL_01"]["sat_blossom_close"] = %odin_sat_blossom_close_doorl_01;
    level.scr_model["odin_sat_section_04_pod_doorL_01"] = "odin_sat_section_04_pod_door_01";
    level.scr_anim["odin_sat_section_04_pod_doorL_01"]["sat_blossom_open"] = %odin_sat_blossom_open_doorl_01;
    level.scr_anim["odin_sat_section_04_pod_doorL_01"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_doorl01_explosion_02;
    level.scr_animtree["odin_sat_section_04_pod_doorL_02"] = #animtree;
    level.scr_anim["odin_sat_section_04_pod_doorL_02"]["sat_blossom_close"] = %odin_sat_blossom_close_doorl_02;
    level.scr_model["odin_sat_section_04_pod_doorL_02"] = "odin_sat_section_04_pod_door_01";
    level.scr_anim["odin_sat_section_04_pod_doorL_02"]["sat_blossom_open"] = %odin_sat_blossom_open_doorl_02;
    level.scr_anim["odin_sat_section_04_pod_doorL_02"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_doorl02_explosion_02;
    level.scr_animtree["odin_sat_section_04_pod_doorL_03"] = #animtree;
    level.scr_anim["odin_sat_section_04_pod_doorL_03"]["sat_blossom_close"] = %odin_sat_blossom_close_doorl_03;
    level.scr_model["odin_sat_section_04_pod_doorL_03"] = "odin_sat_section_04_pod_door_01";
    level.scr_anim["odin_sat_section_04_pod_doorL_03"]["sat_blossom_open"] = %odin_sat_blossom_open_doorl_03;
    level.scr_anim["odin_sat_section_04_pod_doorL_03"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_doorl03_explosion_02;
    level.scr_animtree["odin_sat_section_04_pod_doorL_04"] = #animtree;
    level.scr_anim["odin_sat_section_04_pod_doorL_04"]["sat_blossom_close"] = %odin_sat_blossom_close_doorl_04;
    level.scr_model["odin_sat_section_04_pod_doorL_04"] = "odin_sat_section_04_pod_door_01";
    level.scr_anim["odin_sat_section_04_pod_doorL_04"]["sat_blossom_open"] = %odin_sat_blossom_open_doorl_04;
    level.scr_anim["odin_sat_section_04_pod_doorL_04"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_doorl04_explosion_02;
    level.scr_animtree["odin_sat_section_04_pod_doorR_01"] = #animtree;
    level.scr_anim["odin_sat_section_04_pod_doorR_01"]["sat_blossom_close"] = %odin_sat_blossom_close_doorr_01;
    level.scr_model["odin_sat_section_04_pod_doorR_01"] = "odin_sat_section_04_pod_door_02";
    level.scr_anim["odin_sat_section_04_pod_doorR_01"]["sat_blossom_open"] = %odin_sat_blossom_open_doorr_01;
    level.scr_anim["odin_sat_section_04_pod_doorR_01"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_doorr01_explosion_02;
    level.scr_animtree["odin_sat_section_04_pod_doorR_02"] = #animtree;
    level.scr_anim["odin_sat_section_04_pod_doorR_02"]["sat_blossom_close"] = %odin_sat_blossom_close_doorr_02;
    level.scr_model["odin_sat_section_04_pod_doorR_02"] = "odin_sat_section_04_pod_door_02";
    level.scr_anim["odin_sat_section_04_pod_doorR_02"]["sat_blossom_open"] = %odin_sat_blossom_open_doorr_02;
    level.scr_anim["odin_sat_section_04_pod_doorR_02"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_doorr02_explosion_02;
    level.scr_animtree["odin_sat_section_04_pod_doorR_03"] = #animtree;
    level.scr_anim["odin_sat_section_04_pod_doorR_03"]["sat_blossom_close"] = %odin_sat_blossom_close_doorr_03;
    level.scr_model["odin_sat_section_04_pod_doorR_03"] = "odin_sat_section_04_pod_door_02";
    level.scr_anim["odin_sat_section_04_pod_doorR_03"]["sat_blossom_open"] = %odin_sat_blossom_open_doorr_03;
    level.scr_anim["odin_sat_section_04_pod_doorR_03"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_doorr03_explosion_02;
    level.scr_animtree["odin_sat_section_04_pod_doorR_04"] = #animtree;
    level.scr_anim["odin_sat_section_04_pod_doorR_04"]["sat_blossom_close"] = %odin_sat_blossom_close_doorr_04;
    level.scr_model["odin_sat_section_04_pod_doorR_04"] = "odin_sat_section_04_pod_door_02";
    level.scr_anim["odin_sat_section_04_pod_doorR_04"]["sat_blossom_open"] = %odin_sat_blossom_open_doorr_04;
    level.scr_anim["odin_sat_section_04_pod_doorR_04"]["satellite_end_explosion_02"] = %odin_satellite_end_sat_doorr04_explosion_02;
    level.scr_animtree["space_crate_01_burned"] = #animtree;
    level.scr_anim["space_crate_01_burned"]["sat_colliders_go"] = %odin_escape_spin_room_collide_01;
    level.scr_model["space_crate_01_burned"] = "space_crate_01_burned";
    level.scr_animtree["space_debris_01"] = #animtree;
    level.scr_anim["space_debris_01"]["sat_colliders_go"] = %odin_escape_spin_room_collide_02;
    level.scr_model["space_debris_01"] = "space_debris_01";
    level.scr_animtree["space_debris_02"] = #animtree;
    level.scr_anim["space_debris_02"]["sat_colliders_go"] = %odin_escape_spin_room_collide_03;
    level.scr_model["space_debris_02"] = "space_debris_01";
    level.scr_animtree["airplane_debris_destroyed_03_iw6a"] = #animtree;
    level.scr_anim["airplane_debris_destroyed_03_iw6a"]["sat_colliders_go"] = %odin_escape_spin_room_collide_04;
    level.scr_model["airplane_debris_destroyed_03_iw6a"] = "airplane_debris_destroyed_03_iw6";
    level.scr_animtree["airplane_debris_destroyed_03_iw6b"] = #animtree;
    level.scr_anim["airplane_debris_destroyed_03_iw6b"]["sat_colliders_go"] = %odin_escape_spin_room_collide_05;
    level.scr_model["airplane_debris_destroyed_03_iw6b"] = "airplane_debris_destroyed_03_iw6";
}

#using_animtree("player");

player()
{
    level.scr_animtree["player_rig"] = #animtree;
    level.scr_anim["player_rig"]["intro_exterior_scene"] = %odin_intro_player;
    level.scr_model["player_rig"] = "viewhands_player_us_space";
    level.scr_anim["player_rig"]["odin_infiltrate_player"] = %odin_infiltrate_player;
    level.scr_anim["player_rig"]["odin_infiltrate_player_wipe"] = %odin_infiltrate_player_wipe;
    level.scr_anim["player_rig"]["odin_hall_escape_turn01_player"] = %odin_hallway_escape_turn01_player;
    level.scr_anim["player_rig"]["odin_hall_escape_turn02_player"] = %odin_hallway_escape_turn02_player;
    level.scr_anim["alt_player_rig"]["odin_hall_escape_turn01_player"] = %odin_hallway_escape_turn01_player;
    level.scr_anim["alt_player_rig"]["odin_hall_escape_turn02_player"] = %odin_hallway_escape_turn02_player;
    level.scr_anim["player_rig"]["viewmodel_space_l_arm_sidepush"] = %viewmodel_space_l_arm_sidepush;
    level.scr_anim["player_rig"]["viewmodel_space_l_arm_downpush"] = %viewmodel_space_l_arm_downpush;
    level.scr_anim["player_rig"]["gun_struggle_intro_throw"] = %odin_intro_to_weapon_begin_struggle_player;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_range_player"] = %odin_hallway_weapon_struggle_range_player;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_left_player"] = %odin_hallway_weapon_struggle_left_player;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_left_player_add"] = %odin_hallway_weapon_struggle_left_player_add;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_right_player_add"] = %odin_hallway_weapon_struggle_right_player_add;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_right_player"] = %odin_hallway_weapon_struggle_right_player;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_center_player"] = %odin_hallway_weapon_struggle_center_player;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_up_player"] = %odin_hallway_weapon_struggle_up_player;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_down_player"] = %odin_hallway_weapon_struggle_down_player;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_shoot"] = %odin_hallway_weapon_struggle_shoot_player;
    level.scr_anim["player_rig"]["odin_hallway_weapon_struggle_fail"] = %odin_hallway_weapon_struggle_fail_player;
    level.scr_anim["player_rig"]["odin_escape_open_door_player"] = %odin_escape_open_door_player;
    maps\_anim::addnotetrack_customfunction( "player_rig", "odin_escape_zigzag_door", maps\odin_escape::escape_door_open_flag );
    maps\_anim::addnotetrack_customfunction( "player_rig", "rumble_light", maps\odin_escape::escape_door_open_rumble );
    level.scr_anim["player_rig"]["odin_escape_spin_room_player"] = %odin_escape_spin_room_player;
    maps\_anim::addnotetrack_customfunction( "player_rig", "player_link", ::decomp_anim_notify_player_link );
    maps\_anim::addnotetrack_customfunction( "player_rig", "start_slomo", ::decomp_anim_notify_slomo );
    maps\_anim::addnotetrack_customfunction( "player_rig", "stop_slomo", ::decomp_anim_notify_end_slomo );
    maps\_anim::addnotetrack_customfunction( "player_rig", "anim_done", ::decomp_anim_notify_done );
    maps\_anim::addnotetrack_customfunction( "player_rig", "fx_solar_panel_collision_player", maps\odin_fx::fx_solar_panel_collision_player );
    maps\_anim::addnotetrack_customfunction( "player_rig", "light_rumble", ::decomp_light_rumble );
    maps\_anim::addnotetrack_customfunction( "player_rig", "heavy_rumble", ::decomp_heavy_rumble );
    level.scr_anim["player_rig"]["satellite_end_explosion_01"] = %odin_satellite_end_explosion_01_player;
    level.scr_anim["player_rig"]["satellite_end_explosion_02"] = %odin_satellite_end_explosion_02_player;
    level.scr_anim["player_rig"]["satellite_end_shoot_01"][0] = %odin_satellite_end_shoot_01_player;
    level.scr_anim["player_rig"]["satellite_end_shoot_02"][0] = %odin_satellite_end_shoot_02_player;
    level.scr_anim["player_rig"]["satellite_end_start"] = %odin_satellite_end_start_player;
    level.scr_anim["player_rig"]["satellite_end_start_loop"][0] = %odin_satellite_end_start_loop_player;
    level.scr_anim["player_rig"]["satellite_end_cover_lift"] = %odin_satellite_end_cover_lift_player;
    maps\_anim::addnotetrack_customfunction( "player_rig", "cover_lift_latch", maps\odin_satellite::cover_lift_rumble_1 );
    maps\_anim::addnotetrack_customfunction( "player_rig", "cover_lift_lever", maps\odin_satellite::cover_lift_rumble_2 );
}

vehicles()
{

}

#using_animtree("generic_human");

dialog()
{
    level.scr_sound["odin_ally"]["odin_kyr_comeonbud"] = "space_face_null";
    level.scr_sound["odin_ally"]["odin_kyr_whatthehellare"] = "space_face_null";
    level.scr_sound["odin_ally"]["odin_kyr_budineedyour"] = "space_face_null";
    level.scr_sound["odin_ally"]["odin_kyr_hurryandhelpme"] = "space_face_null";
    level.scr_sound["odin_ally"]["odin_kyr_youheardhimbud"] = "space_face_null";
    level.scr_sound["odin_victim_02"]["odin_gs1_budgivemea"] = "space_face_null";
    level.scr_sound["odin_ally"]["odin_kyr_weneedanopsstation"] = "space_face_null";
    level.scr_face["odin_ally"]["odin_kyr_comeonbud"] = %odin_satellite_end_start_kyra_loop_face_01;
    level.scr_face["odin_ally"]["odin_kyr_whatthehellare"] = %odin_satellite_end_start_kyra_loop_face_02;
    level.scr_face["odin_ally"]["odin_kyr_budineedyour"] = %odin_satellite_end_start_kyra_loop_face_03;
    level.scr_face["odin_ally"]["odin_kyr_hurryandhelpme"] = %odin_satellite_end_start_kyra_loop_face_04;
    level.scr_face["odin_victim_02"]["odin_gs1_budgivemea"] = %odin_infiltrate_red_shirt_02_face;
    level.scr_face["odin_ally"]["odin_kyr_youheardhimbud"] = %odin_satellite_end_cover_lift_kyra_face;
    level.scr_face["odin_ally"]["odin_kyr_weneedanopsstation"] = %odin_kyr_weneedanopsstation;
}

vignettes()
{
    maps\_vignette_util::vignette_register( ::odin_hall_escape_turn01_ally_spawn, "odin_hall_ally_turn01" );
    maps\_vignette_util::vignette_register( ::odin_hall_escape_turn01_player_spawn, "odin_hall_player_turn01" );
    maps\_vignette_util::vignette_register( ::odin_hall_escape_turn02_ally_spawn, "odin_hall_ally_turn02" );
    maps\_vignette_util::vignette_register( ::odin_hall_escape_turn02_player_spawn, "odin_hall_player_turn02" );
}

odin_hall_escape_turn01_ally_spawn()
{
    var_0 = maps\_vignette_util::vignette_actor_spawn( "ally_turn01", "hall_escape_turn01_ally" );
    odin_hall_escape_turn01_ally( var_0 );
    var_0 maps\_vignette_util::vignette_actor_delete();
}

odin_hall_escape_turn01_ally( var_0 )
{
    var_1 = common_scripts\utility::getstruct( "odin_hall_escape_turn01", "script_noteworthy" );
    var_2 = [];
    var_2["hall_escape_turn01_ally"] = var_0;
    var_1 maps\_anim::anim_first_frame( var_2, "odin_hall_escape_turn01_ally" );
    var_1 maps\_anim::anim_single( var_2, "odin_hall_escape_turn01_ally" );
}

odin_hall_escape_turn01_player_spawn()
{
    odin_hall_escape_turn01_player();
}

odin_hall_escape_turn01_player()
{
    var_0 = common_scripts\utility::getstruct( "odin_hall_escape_turn01", "script_noteworthy" );
    level.player freezecontrols( 1 );
    level.player allowprone( 0 );
    level.player allowcrouch( 0 );
    var_1 = maps\_utility::spawn_anim_model( "player_rig" );
    var_1 hide();
    var_2 = [];
    var_2["player_rig"] = var_1;
    var_0 maps\_anim::anim_first_frame( var_2, "odin_hall_escape_turn01_player" );
    var_3 = 0;
    level.player playerlinktoblend( var_1, "tag_player", 0.5, 0.15, 0.15 );
    wait 0.5;
    level.player playerlinktodelta( var_1, "tag_player", 1, var_3, var_3, var_3, var_3, 1 );
    var_1 show();
    var_0 maps\_anim::anim_single( var_2, "odin_hall_escape_turn01_player" );
    level.player unlink();
    var_1 delete();
    level.player freezecontrols( 0 );
    level.player allowprone( 1 );
    level.player allowcrouch( 1 );
}

odin_hall_escape_turn02_ally_spawn()
{
    var_0 = maps\_vignette_util::vignette_actor_spawn( "ally_turn02", "hall_escape_turn02_ally" );
    odin_hall_escape_turn02_ally( var_0 );
    var_0 maps\_vignette_util::vignette_actor_delete();
}

odin_hall_escape_turn02_ally( var_0 )
{
    var_1 = common_scripts\utility::getstruct( "odin_hall_escape_turn02", "script_noteworthy" );
    var_2 = [];
    var_2["hall_escape_turn02_ally"] = var_0;
    var_1 maps\_anim::anim_first_frame( var_2, "odin_hall_escape_turn02_ally" );
    var_1 maps\_anim::anim_single( var_2, "odin_hall_escape_turn02_ally" );
}

odin_hall_escape_turn02_player_spawn()
{
    odin_hall_escape_turn02_player();
}

odin_hall_escape_turn02_player()
{
    var_0 = common_scripts\utility::getstruct( "odin_hall_escape_turn02", "script_noteworthy" );
    level.player freezecontrols( 1 );
    level.player allowprone( 0 );
    level.player allowcrouch( 0 );
    var_1 = maps\_utility::spawn_anim_model( "player_rig" );
    var_1 hide();
    var_2 = [];
    var_2["player_rig"] = var_1;
    var_0 maps\_anim::anim_first_frame( var_2, "odin_hall_escape_turn02_player" );
    var_3 = 0;
    level.player playerlinktoblend( var_1, "tag_player", 0.5, 0.15, 0.15 );
    wait 0.5;
    level.player playerlinktodelta( var_1, "tag_player", 1, var_3, var_3, var_3, var_3, 1 );
    var_1 show();
    var_0 maps\_anim::anim_single( var_2, "odin_hall_escape_turn02_player" );
    level.player unlink();
    var_1 delete();
    level.player freezecontrols( 0 );
    level.player allowprone( 1 );
    level.player allowcrouch( 1 );
}

decomp_explosion_anim_ally()
{
    var_0 = getent( "odin_decomp_anim", "targetname" );
    var_0 maps\_anim::anim_first_frame_solo( level.ally, "odin_escape_spin_room_ally01" );
    var_0 maps\_anim::anim_single_solo( level.ally, "odin_escape_spin_room_ally01" );
    level notify( "decomp_ally_anim_done" );
}

decomp_explosion_anim_enemies( var_0 )
{
    var_1 = getent( "odin_decomp_anim", "targetname" );
    var_1 maps\_anim::anim_first_frame_solo( var_0[0], "odin_escape_spin_room_opfor01" );
    var_1 maps\_anim::anim_first_frame_solo( var_0[1], "odin_escape_spin_room_opfor02" );
    var_1 thread maps\_anim::anim_single_solo( var_0[0], "odin_escape_spin_room_opfor01" );
    var_1 thread maps\_anim::anim_single_solo( var_0[1], "odin_escape_spin_room_opfor02" );
    level waittill( "decomp_player_anim_done" );

    foreach ( var_3 in var_0 )
    {
        if ( isalive( var_3 ) )
        {
            var_3.diequietly = 1;
            var_3 delete();
        }
    }
}

decomp_explosion_anim_player_legs( var_0 )
{
    common_scripts\utility::flag_wait( "player_is_decompressing" );
    var_1 = getent( "odin_decomp_anim", "targetname" );
    var_1 maps\_anim::anim_first_frame_solo( var_0, "odin_escape_spin_room_player_body" );
    var_1 thread maps\_anim::anim_single_solo( var_0, "odin_escape_spin_room_player_body" );
    common_scripts\utility::flag_wait( "player_linked_with_legs" );
    wait 0.5;
    var_0 show();
    level waittill( "decomp_player_anim_done" );
    var_0 delete();
}

decomp_explosion_anim_props( var_0, var_1 )
{
    var_2 = getent( "odin_decomp_anim", "targetname" );
    var_3 = [];
    var_3[0] = maps\_utility::spawn_anim_model( "decomp_solar_panel" );
    var_3 = common_scripts\utility::array_combine( var_3, var_0 );
    var_2 thread maps\_anim::anim_single( var_3, "decompression_props" );
    wait 1.75;
    var_4 = getentarray( "decomp_explode_wall", "targetname" );

    foreach ( var_6 in var_4 )
        var_6 delete();

    var_8 = getentarray( "spin_decomp_delete", "script_noteworthy" );

    foreach ( var_6 in var_8 )
        var_6 delete();
}

decomp_explosion_anim_player( var_0 )
{
    common_scripts\utility::flag_set( "player_is_decompressing" );
    setsaveddvar( "ammoCounterHide", "1" );
    var_1 = getent( "odin_decomp_anim", "targetname" );
    var_2 = maps\_utility::spawn_anim_model( "player_rig" );
    var_2.animname = "player_rig";
    var_2 hide();
    var_3 = [];
    var_3["player_rig"] = var_2;
    var_1 maps\_anim::anim_first_frame( var_3, "odin_escape_spin_room_player" );
    var_1 thread maps\_anim::anim_single( var_3, "odin_escape_spin_room_player" );
    level.player freezecontrols( 1 );
    level.player allowprone( 0 );
    level.player allowcrouch( 0 );
    level.player disableweapons();
    common_scripts\utility::flag_clear( "clear_to_tweak_player" );
    level.player playersetgroundreferenceent( undefined );
    var_4 = 15;
    level.player playerlinktoblend( var_2, "tag_player", 1, 0.15, 0.15 );
    wait 1;
    level.player playerlinktodelta( var_2, "tag_player", 1, var_4, var_4, var_4, var_4, 1 );
    var_2 show();
    common_scripts\utility::flag_set( "player_linked_with_legs" );
    level.player waittill( "anim_done" );
    level.player unlink();
    var_2 delete();
    var_5 = level.player getweaponammoclip( level.player.weapon_interior );
    level.player takeweapon( level.player.weapon_interior );
    level.player giveweapon( level.player.weapon_exterior );
    level.player setweaponammoclip( level.player.weapon_exterior, var_5 );
    level.player switchtoweapon( level.player.weapon_exterior );
    setsaveddvar( "ammoCounterHide", "0" );
    level.player freezecontrols( 0 );
    level.player allowprone( 1 );
    level.player allowcrouch( 1 );
    level.player enableweapons();
    level.ally maps\_utility::gun_recall();
    level notify( "decomp_player_anim_done" );
    common_scripts\utility::flag_set( "player_spin_decomp_anim_done" );
    common_scripts\utility::flag_set( "clear_to_tweak_player" );
}

decomp_anim_notify_player_link( var_0 )
{
    level.player notify( "player_link" );
}

decomp_anim_notify_slomo( var_0 )
{
    maps\_utility::slowmo_setspeed_slow( 0.35 );
    maps\_utility::slowmo_setlerptime_in( 0.6 );
    thread maps\_utility::slowmo_lerp_in();
}

decomp_anim_notify_end_slomo( var_0 )
{
    wait 0.2;
    level.player notify( "end_slomo" );
    maps\_utility::slowmo_setlerptime_out( 1.0 );
    thread maps\_utility::slowmo_lerp_out();
}

decomp_light_rumble( var_0 )
{
    level.player playrumbleonentity( "light_1s" );
}

decomp_heavy_rumble( var_0 )
{
    level.player playrumbleonentity( "heavy_1s" );
}

decomp_anim_notify_done( var_0 )
{
    level.player notify( "anim_done" );
}

spin_deadguys()
{
    var_0 = getent( "spin_deadguy_01_node", "targetname" );
    var_1 = maps\odin_util::spawn_odin_actor_single( "spin_deadguy_1", 1 );
    var_1.dontevershoot = 1;
    var_1.ignoreall = 1;
    var_1.ignoreme = 1;
    var_1.animname = "generic";
    var_1.allowdeath = 1;
    var_1.diequietly = 1;
    var_1 thread maps\odin_util::odin_drop_weapon();
    var_0 thread maps\_anim::anim_loop_solo( var_1, "odin_spin_struggling_enemy_01_loop", "stop_spin_deadguy_loops" );
    var_1 thread move_and_spin_and_animate_spin_dead_guy( ( -500, -600, 100 ), 0, 25, 0, undefined, "odin_spin_struggling_enemy_01_loop", var_0 );
    var_0 = getent( "spin_deadguy_02_node", "targetname" );
    var_1 = maps\odin_util::spawn_odin_actor_single( "spin_deadguy_2", 1 );
    var_1.dontevershoot = 1;
    var_1.ignoreall = 1;
    var_1.ignoreme = 1;
    var_1.animname = "generic";
    var_1.allowdeath = 1;
    var_1.diequietly = 1;
    var_1 thread maps\odin_util::odin_drop_weapon();
    var_0 thread maps\_anim::anim_loop_solo( var_1, "odin_spin_struggling_enemy_02_loop", "stop_spin_deadguy_loops" );
    var_1 thread move_and_spin_and_animate_spin_dead_guy( ( -1000, 200, -200 ), 0, 80, 0, undefined, "odin_spin_struggling_enemy_02_loop", var_0 );
    var_0 = getent( "spin_deadguy_static_node_01", "targetname" );
    var_1 = maps\odin_util::spawn_odin_actor_single( "spin_deadguy_static_1", 1 );
    var_1.dontevershoot = 1;
    var_1.ignoreall = 1;
    var_1.ignoreme = 1;
    var_1.animname = "generic";
    var_1.allowdeath = 1;
    var_1.diequietly = 1;
    var_1 thread maps\odin_util::odin_drop_weapon();
    var_0 maps\_anim::anim_first_frame_solo( var_1, "odin_escape_spin_opfor_death_01" );
    var_1 thread move_and_spin_and_animate_spin_dead_guy( ( -12000, 2400, 2400 ), 0, 120, 0.1, undefined, "odin_spin_struggling_enemy_02_loop" );
    var_0 = getent( "spin_deadguy_static_node_02", "targetname" );
    var_1 = maps\odin_util::spawn_odin_actor_single( "spin_deadguy_static_2", 1 );
    var_1.dontevershoot = 1;
    var_1.ignoreall = 1;
    var_1.ignoreme = 1;
    var_1.animname = "generic";
    var_1.allowdeath = 1;
    var_1.diequietly = 1;
    var_1 thread maps\odin_util::odin_drop_weapon();
    var_0 maps\_anim::anim_first_frame_solo( var_1, "odin_escape_spin_opfor_death_02" );
    var_1 thread move_and_spin_and_animate_spin_dead_guy( ( 400, 800, 100 ), 0, 20, 0.2, undefined, "odin_spin_struggling_enemy_01_loop" );
    var_0 = getent( "spin_deadguy_static_node_03", "targetname" );
    var_1 = maps\odin_util::spawn_odin_actor_single( "spin_deadguy_static_3", 1 );
    var_1.dontevershoot = 1;
    var_1.ignoreall = 1;
    var_1.ignoreme = 1;
    var_1.animname = "generic";
    var_1.allowdeath = 1;
    var_1.diequietly = 1;
    var_1 thread maps\odin_util::odin_drop_weapon();
    var_0 maps\_anim::anim_first_frame_solo( var_1, "odin_escape_spin_opfor_death_03" );
    var_1 thread move_and_spin_and_animate_spin_dead_guy( ( 1000, 500, 800 ), 0, 30, 0.4, undefined, "odin_spin_struggling_enemy_02_loop" );
    var_0 = getent( "spin_deadguy_static_node_04", "targetname" );
    var_1 = maps\odin_util::spawn_odin_actor_single( "spin_deadguy_static_4", 1 );
    var_1.dontevershoot = 1;
    var_1.ignoreall = 1;
    var_1.ignoreme = 1;
    var_1.animname = "generic";
    var_1.allowdeath = 1;
    var_1.diequietly = 1;
    var_1 thread maps\odin_util::odin_drop_weapon();
    var_0 maps\_anim::anim_first_frame_solo( var_1, "odin_escape_spin_opfor_death_04" );
    var_1 thread move_and_spin_and_animate_spin_dead_guy( ( 1200, -800, -210 ), 0, 25, 0.8, undefined, "odin_spin_struggling_enemy_01_loop" );
    var_0 = getent( "spin_deadguy_static_node_05", "targetname" );
    var_1 = maps\odin_util::spawn_odin_actor_single( "spin_deadguy_static_5", 1 );
    var_1.dontevershoot = 1;
    var_1.ignoreall = 1;
    var_1.ignoreme = 1;
    var_1.animname = "generic";
    var_1.allowdeath = 1;
    var_1.diequietly = 1;
    var_1 thread maps\odin_util::odin_drop_weapon();
    var_0 maps\_anim::anim_first_frame_solo( var_1, "odin_escape_spin_opfor_death_02" );
    var_1 thread move_and_spin_and_animate_spin_dead_guy( ( -1000, 1000, 100 ), 0, 30, 0.8, undefined, "odin_spin_struggling_enemy_02_loop" );
    var_0 = getent( "spin_deadguy_03_node", "targetname" );
    var_1 = maps\odin_util::spawn_odin_actor_single( "spin_deadguy_3", 1 );
    var_1.dontevershoot = 1;
    var_1.ignoreall = 1;
    var_1.ignoreme = 1;
    var_1.animname = "generic";
    var_1.allowdeath = 1;
    var_1.diequietly = 1;
    var_1 thread maps\odin_util::odin_drop_weapon();
    var_0 maps\_anim::anim_first_frame_solo( var_1, "odin_escape_spin_opfor_death_05" );
    var_1 thread move_and_spin_and_animate_spin_dead_guy( ( -500, 0, 700 ), 0, 40, 0, "odin_escape_spin_opfor_death_05" );
}

move_and_spin_and_animate_spin_dead_guy( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
{
    self endon( "death" );
    var_1 = var_1 + 14.15;
    wait( var_1 );

    if ( !isdefined( var_3 ) )
        var_3 = 0;

    var_8 = self;
    wait 0.1;
    var_9 = common_scripts\utility::spawn_tag_origin();
    var_9.origin = var_8.origin;
    var_9.angles = var_8.angles;
    var_8 linkto( var_9 );

    if ( isdefined( var_6 ) )
    {
        var_6 notify( "stop_spin_deadguy_loops" );
        wait 0.1;
    }

    var_9 moveto( var_9.origin + var_0, var_2, var_2 * var_3, 0 );

    if ( isdefined( var_7 ) )
        playfxontag( level._effect["spc_fire_puff_bigger_light"], var_9, "tag_origin" );

    if ( isdefined( var_4 ) )
        var_9 maps\_anim::anim_single_solo( var_8, var_4, "tag_origin" );
    else
    {
        if ( distance( var_9.origin + var_0, var_9.origin ) / var_2 < 70 )
            var_9 rotateto( ( randomfloatrange( -180, 180 ), randomfloatrange( -180, 180 ), randomfloatrange( -180, 180 ) ), var_2 );
        else
            var_9 rotatepitch( 6000, var_2 );

        if ( isdefined( var_5 ) )
            var_9 thread maps\_anim::anim_loop_solo( var_8, var_5, "stop_spin_deadguy_loops" );

        var_8 waittill( "movedone" );
    }

    var_8 kill();
}

satellite_traversal_props()
{
    var_0 = common_scripts\utility::getstruct( "satellite_traversal_top", "script_noteworthy" );
    var_1 = maps\_utility::spawn_anim_model( "satellite_traversal_solar_panels" );
    var_2 = [];
    var_2["satellite_traversal_solar_panels"] = var_1;
    var_0 maps\_anim::anim_single( var_2, "satellite_traversal_props" );
}

empty_suit_animation()
{
    wait 2;
    var_0 = getentarray( "suit_room_empty_suit", "targetname" );

    foreach ( var_2 in var_0 )
    {
        var_3 = var_2 common_scripts\utility::get_target_ent();
        var_2.animname = "generic";
        var_2 maps\_utility::assign_animtree( "generic" );
        var_3 thread maps\_anim::anim_loop_solo( var_2, "odin_intro_suit_sway", "stop_suit_loops" );
        thread stop_suit_loops( var_3, var_2 );
        wait 0.32;
        thread mark_suits_for_delete( var_2, var_3 );
    }
}

mark_suits_for_delete( var_0, var_1 )
{
    wait 10;

    if ( isdefined( level.intro_ent_del ) )
    {
        level.intro_ent_del[level.intro_ent_del.size] = var_0;
        level.intro_ent_del[level.intro_ent_del.size] = var_1;
    }
}

stop_suit_loops( var_0, var_1 )
{
    common_scripts\utility::flag_wait( "lock_post_infil_auto_door" );
    var_0 notify( "stop_suit_loops" );
}
