Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - mcneb10

#1
QuoteMay I ask why you are not bothering to extend/fork swbf-unmunge? From what I have seen, it already supports a lot of formats that are used in the Zero Engine.

I'm writing it from scratch because of a few reasons but the main one is that swbf-unmunge only works on windows due to relying on some DirectX stuff (am Linux user). The coding style also bothers me a bit and libzeroengine is specifically designed to be used as a library, so other programs can build on top of it to make something cool.

QuoteDo you want to support Lua 5.1 exclusively, or do you plan to support older versions too?
SWBF 1 uses Lua 4.0 which implements a stack-based VM. I think in Lua 5.0 the switch to a register-based VM was made.

I'm using this extremely niche library called lunify whose sole purpose is to convert lua 5.0 to 5.1. It has a nice framework in place to implement other versions of lua so once libzeroengine becomes more mature maybe I'll make a pull request for lunify to support lua 4.

QuoteHave you already compiled a list of Zero Engine games? I would be interested to see that.   ;)

On Wikipedia there is a list of every pandemic game. It also mentions the game engines they use. Heres a link: Pandemic Wikipedia page
#2
I had lots of fun playing the Christmas in Jinglin' Town map. Heres a link to a remastered version: https://www.moddb.com/mods/return-to-jinglin-town
#3
Star Wars Battlefront 2 (2005 Original) / libzeroengine
January 15, 2024, 08:30:05 PM
Hello!

I would like to announce a new rust library libzeroengine that I am developing to extract data from the assets of Star Wars Battlefront II and hopefully any other game that uses Pandemic's ZeroEngine and convert it to a format that's actually usable.

This library can currently parse ucfb containers (the format the game uses to store everything) and extract scripts, cutscenes and levels. I plan to support all asset/chunk types contained within the games files.

The library includes a program called ucfbextract which is an extremely barebones wrapper around the library that will try to extract any file you put into it. It currently "works" with .mvs and .script files.

So far this tool has allowed me to extract all of the cutscenes from the game files, and I'm not sure if this has been done before.

Due to some major tomfoolery on Pandemic's part :wall:, the script extraction does not fully work yet, but the plan is to convert the extracted lua bytecode to lua 5.1 bytecode so it can be fully decompiled.

I plan to use this library one day create a site like Unreal Archive but for ZeroEngine based games.

I would also like to thank the developers of swbf-unmunge, which helped me tremendously in figuring out how to parse these ancient file formats :cheers:.

Also, if anyone has a detailed description of the chunk formats used by this game, please let me know, as it would be tremendously helpful in helping me develop this library.
#4
I have not asked the creator. I'll ask them if they know what the track is, and if they are OK with me extracting it.
#5
SWBF2 Modding / How to extract audio from mod map
July 19, 2022, 07:29:06 PM
I recently have been trying to extract the music track from the rathia designated days map 5 (factory). I tried shazaming it first (no results). Then, I unmunged the lvl files from the sound directory. Inside of one of the lvl files was a .mus file, so that lvl file has the music in it. In the munged directory, there are 3 files. 2 are 24k, one is 113MB. The 113MB one most likely has the audio in it. I haven't been able to find a WAV header in the file, and when I raw imported it into audacity, I got a horrible, ear damaging sound. Any ideas?
#6
they need to be in the odfs folder in world1
#7
What folder are you putting the ODFs in? They should be in the ODF folder in world1. But odfs rely on MSH files for models which go in the MSH folder. Without msh files the odfs wont work
#8
SWBF2 Modding / Bink Cutscene tool for modders
May 14, 2020, 12:08:54 PM
Bink is a great tool for modders to make cutscenes for SWBF2 maps. Attached to this post are the RAD video tools, which includes Bink. Here is a tutorial on how to use bink to make a custom cutscene: http://www.gametoast.com/viewtopic.php?f=27&t=12622. The attachment is an encrypted 7z file and you will need to use the password RAD to open it.
#9
There seems to be traces in the imperial, republic and alliance sides This may just be the explosions but i haven't checked
#10
I think i saw the assets for one buried deep in a side folder. Ill check
#11
SWBF2 Modding / Custom Ingame music?
May 01, 2020, 05:37:15 PM
Does anyone know how to add custom music to a swbf2 map and the compression involved? The documentation on https://sites.google.com/site/swbf2modtoolsdocumentation/ is kinda :confused:
#12
SWBF2 Modding / How to add custom music to map?
January 19, 2020, 05:10:45 AM
Does anyone know of any good tutorials for adding custom music to a swbf2 map?
#13
I fixed the typo but the game  still gives me FATAL Could not open MISSION\YAPc_con.lvl. I found something in the log file that might help.
[spoiler]ifs_saveop_DoOps     LoadFileList
ifs_saveop_DoOps     LoadFileList
ifs_saveop_DoOps     LoadProfile
ifs_saveop_DoOps     LoadProfile
ifs_sp_campaign: Input_Accept(): Entered:     _tab_instant
missionlist_ExpandMapList()
ifs_missionselect_pcMulti_fnSetMapPreview(): Defaulting index to 1
this.CurButton =    check_mode1
cur_button =    nil
Checkbox for check_era3 clicked
this.CurButton =    check_era3
cur_button =    nil
custom_AddMapNew()
custom_printTable():    table: 068FAF5C
The key, value is:    era_c    1
The key, value is:    era_g    1
The key, value is:    mode_con_c    1
The key is mapluafile, the formated value is:    YAP<A>_<B>
The key, value is:    mode_con_g    1
The key, value is:    bSelected    1
The key, value is:    isModLevel    1
custom_printTable(): Returning
custom_printTable():    table: 064DBE0C
The key, value is:    key    mode_con
The key, value is:    subst    con
The key, value is:    showstr    modename.name.con
The key, value is:    descstr    modename.description.con
The key, value is:    icon    mode_icon_con
custom_printTable(): Returning
gMapEras.key =    era_c     Era =    era_c     subst =    c
Adding map:     YAPc_con     idx:     1
this.CurButton =    _map_add
cur_button =    nil
this.CurButton =    nil
cur_button =    nil
this.CurButton =    Launch
cur_button =    nil

Message Severity: 3
C:\Battlefront2\main\Battlefront2\Source\LoadUtil.cpp(1019)
Unable to find level chunk  in MISSION.lvl


Message Severity: 3
C:\Battlefront2\main\Battlefront2\Source\LuaHelper.cpp(112)
OpenScript(YAPc_con): script (f052726d) not found

Message Severity: 5
C:\Battlefront2\main\Battlefront2\Source\GameState.cpp(1283)
Could not open MISSION\YAPc_con.lvl
[/spoiler]
#14
After editing of the script it gave me an error about a .req file.
[spoiler]
C:\BF2_ModTools\data_YAP\_BUILD\Common\..\..\..\ToolsFL\Bin\luac.exe: ..\..\common\scripts\YAP\YAPc_con.lua:210: unexpected symbol near `,'
ERROR[scriptmunge scripts\YAP\YAPc_con.lua]:Could not read input file.ERROR[scriptmunge scripts\YAP\YAPc_con.lua]:Could not read input file. [continuing]
   2 Errors    0 Warnings

ERROR[levelpack mission\YAPc_con.req]:Expecting bracket, but none was found.
File : munged\pc\yapc_con.script.req(1)...

ucft <--
ERROR[levelpack mission\YAPc_con.req]:Expecting bracket, but none was found.
File : munged\pc\yapc_con.script.req(1)...

ucft <--

   2 Errors    0 Warnings

[/spoiler]
After fixing it it gave me the same error again. Maybe it has to do with the req file. Here it is:
[spoiler]
ucft {
   REQN
       {

        "config"
        "cor_movies"   

       }

   REQN
   {
      "script"
      "YAPc_con"
   }
}
[/spoiler]
#15
[spoiler]
--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--

-- load the gametype script
ScriptCB_DoFile("ObjectiveConquest")
ScriptCB_DoFile("setup_teams")
   
   --  REP Attacking (attacker is always #1)
    REP = 1;
    CIS = 2;
    --  These variables do not change
    ATT = REP;
    DEF = CIS;


function ScriptPostLoad()      
   
   
    --This defines the CPs.  These need to happen first
    cp1 = CommandPost:New{name = "cp1"}
    cp2 = CommandPost:New{name = "cp2"}
    cp3 = CommandPost:New{name = "cp3"}
    cp4 = CommandPost:New{name = "cp4"}
   
   
   
    --This sets up the actual objective.  This needs to happen after cp's are defined
    conquest = ObjectiveConquest:New{teamATT = ATT, teamDEF = DEF,
                                     textATT = "game.modes.con",
                                     textDEF = "game.modes.con2",
                                     multiplayerRules = true}
   
    --This adds the CPs to the objective.  This needs to happen after the objective is set up
    conquest:AddCommandPost(cp1)
    conquest:AddCommandPost(cp2)
    conquest:AddCommandPost(cp3)
    conquest:AddCommandPost(cp4)   
   
    conquest:Start()

    EnableSPHeroRules()
   
end


---------------------------------------------------------------------------
-- FUNCTION:    ScriptInit
-- PURPOSE:     This function is only run once
-- INPUT:
-- OUTPUT:
-- NOTES:       The name, 'ScriptInit' is a chosen convention, and each
--              mission script must contain a version of this function, as
--              it is called from C to start the mission.
---------------------------------------------------------------------------
function ScriptInit()
   
    ReadDataFile("ingame.lvl")
   
   
    SetMaxFlyHeight(30)
    SetMaxPlayerFlyHeight (30)
   
    SetMemoryPoolSize ("ClothData",20)
    SetMemoryPoolSize ("Combo",50)              -- should be ~ 2x number of jedi classes
    SetMemoryPoolSize ("Combo::State",650)      -- should be ~12x #Combo
    SetMemoryPoolSize ("Combo::Transition",650) -- should be a bit bigger than #Combo::State
    SetMemoryPoolSize ("Combo::Condition",650)  -- should be a bit bigger than #Combo::State
    SetMemoryPoolSize ("Combo::Attack",550)     -- should be ~8-12x #Combo
    SetMemoryPoolSize ("Combo::DamageSample",6000)  -- should be ~8-12x #Combo::Attack
    SetMemoryPoolSize ("Combo::Deflect",100)     -- should be ~1x #combo 
   
    ReadDataFile("sound\\yav.lvl;yav1cw")
    ReadDataFile("SIDE\\rep.lvl",
                             "rep_inf_ep3_rifleman",
                             "rep_inf_ep3_rocketeer",
                             "rep_inf_ep3_engineer",
                             "rep_inf_ep3_sniper",
                             "rep_inf_ep3_officer",
                             "rep_inf_ep3_jettrooper",
                             "rep_hover_fightertank",
                             "rep_hero_anakin",
                             "rep_hover_barcspeeder")
    ReadDataFile("SIDE\\cis.lvl",
                             "cis_inf_rifleman",
                             "cis_inf_rocketeer",
                             "cis_inf_engineer",
                             "cis_inf_sniper",
                             "cis_inf_officer",
                             "cis_inf_droideka",
                             "cis_hero_darthmaul",
                             "cis_hover_aat")
                       
                             
    ReadDataFile("SIDE\\tur.lvl",
             "tur_bldg_laser",
             "tur_bldg_tower")         
    ReadDataFile("SIDE\\geo.lvl",
                 "gen_inf_geonosian")
   ReadDataFile("SIDE\\wok.lvl",
             "wok_inf_basic")
    ReadDataFile("SIDE\\all.lvl",
            "all_inf_rifleman")
   ReadDataFile("SIDE\\des.lvl",
            "tat_inf_jawa")
   ReadDataFile("SIDE\\ewk.lvl",
            "ewk_inf_basic")
   ReadDataFile("SIDE\\gam.lvl",
            "gam_inf_gamorreanguard")
   ReadDataFile("SIDE\\gar.lvl",
            "gar_inf_vanguard")
   ReadDataFile("SIDE\\gun.lvl",
            "gun_inf_soldier")
   ReadDataFile("SIDE\\snw.lvl",
            "snw_inf_wampa")
   ReadDataFile("SIDE\\imp.lvl",
            "imp_inf_rifleman")
   ReadDataFile("SIDE\\jed.lvl",
            "jed_knight_01")
   
    SetHeroClass(CIS, "cis_hero_darthmaul")
    SetHeroClass(REP, "rep_hero_anakin")
   --Republic
   SetTeamAsEnemy(3,ATT)
   SetTeamAsEnemy(4,ATT)
   SetTeamAsEnemy(5,ATT)
   SetTeamAsEnemy(6,ATT)
   SetTeamAsEnemy(7,ATT)
   SetTeamAsEnemy(8,ATT)
   SetTeamAsEnemy(9,ATT)
   SetTeamAsEnemy(10,ATT)
   SetTeamAsEnemy(11,ATT)
   SetTeamAsEnemy(12,ATT)
   SetTeamAsEnemy(13,ATT)
   --CIS
   SetTeamAsEnemy(3,DEF)
   SetTeamAsEnemy(4,DEF)
   SetTeamAsEnemy(5,DEF)
   SetTeamAsEnemy(6,DEF)
   SetTeamAsEnemy(7,DEF)
   SetTeamAsEnemy(8,DEF)
   SetTeamAsEnemy(9,DEF)
   SetTeamAsEnemy(10,DEF)
   SetTeamAsEnemy(11,DEF)
   SetTeamAsEnemy(12,DEF)
   SetTeamAsEnemy(13,DEF)
   --Geonosians
   SetTeamAsEnemy(ATT,3)   
    SetTeamAsEnemy(DEF,3)
   SetTeamAsEnemy(4,3)
   SetTeamAsEnemy(5,3)
   SetTeamAsEnemy(6,3)
   SetTeamAsEnemy(7,3)
   SetTeamAsEnemy(8,3)
   SetTeamAsEnemy(9,3)
   SetTeamAsEnemy(10,3)
   SetTeamAsEnemy(11,3)
   SetTeamAsEnemy(12,3)
   SetTeamAsEnemy(13,3)    
   SetTeamName(3, "geo")
    AddUnitClass(3, "gen_inf_geonosian", 4)
   SetUnitCount(3, 6)
   SetReinforcementCount(3, -1)
   
   --Wookies
   SetTeamAsEnemy(ATT,4)   
    SetTeamAsEnemy(DEF,4)
   SetTeamAsEnemy(3,4)
   SetTeamAsEnemy(5,4)
   SetTeamAsEnemy(6,4)
   SetTeamAsEnemy(7,4)
   SetTeamAsEnemy(8,4)
   SetTeamAsEnemy(9,4)
   SetTeamAsEnemy(10,4)
   SetTeamAsEnemy(11,4)
   SetTeamAsEnemy(12,4)
   SetTeamAsEnemy(13,4)    
   SetTeamName(4, "wok")
    AddUnitClass(4, "wok_inf_basic", 4)
   SetUnitCount(4, 6)
   SetReinforcementCount(4, -1)
   
   --Alliance
   SetTeamAsEnemy(ATT,5)   
    SetTeamAsEnemy(DEF,5)
   SetTeamAsEnemy(3,5)
   SetTeamAsEnemy(4,5)
   SetTeamAsEnemy(6,5)
   SetTeamAsEnemy(7,5)
   SetTeamAsEnemy(8,5)
   SetTeamAsEnemy(9,5)
   SetTeamAsEnemy(10,5)
   SetTeamAsEnemy(11,5)
   SetTeamAsEnemy(12,5)
   SetTeamAsEnemy(13,5)    
   SetTeamName(5, "all")
    AddUnitClass(5, "all_inf_rifleman", 4)
   SetUnitCount(5, 6)
   SetReinforcementCount(5, -1)
   
   --Desert People
   SetTeamAsEnemy(ATT,6)   
    SetTeamAsEnemy(DEF,6)
   SetTeamAsEnemy(3,6)
   SetTeamAsEnemy(4,6)
   SetTeamAsEnemy(5,6)
   SetTeamAsEnemy(7,6)
   SetTeamAsEnemy(8,6)
   SetTeamAsEnemy(9,6)
   SetTeamAsEnemy(10,6)
   SetTeamAsEnemy(11,6)
   SetTeamAsEnemy(12,6)
   SetTeamAsEnemy(13,6)    
   SetTeamName(6, "des")
    AddUnitClass(6, "tat_inf_jawa", 4)
   SetUnitCount(6, 6)
   SetReinforcementCount(6, -1)
      
   --Ewoks
   SetTeamAsEnemy(ATT,7)   
    SetTeamAsEnemy(DEF,7)
   SetTeamAsEnemy(3,7)
   SetTeamAsEnemy(4,7)
   SetTeamAsEnemy(6,7)
   SetTeamAsEnemy(5,7)
   SetTeamAsEnemy(8,7)
   SetTeamAsEnemy(9,7)
   SetTeamAsEnemy(10,7)
   SetTeamAsEnemy(11,7)
   SetTeamAsEnemy(12,7)
   SetTeamAsEnemy(13,7)    
   SetTeamName(7, "ewk")
    AddUnitClass(7, "ewk_inf_basic", 4)
   SetUnitCount(7, 6)
   SetReinforcementCount(7, -1)
      
   --Gammoreans
   SetTeamAsEnemy(ATT,8)   
    SetTeamAsEnemy(DEF,8)
   SetTeamAsEnemy(3,8)
   SetTeamAsEnemy(4,8)
   SetTeamAsEnemy(6,8)
   SetTeamAsEnemy(5,8)
   SetTeamAsEnemy(7,8)
   SetTeamAsEnemy(9,8)
   SetTeamAsEnemy(10,8)
   SetTeamAsEnemy(11,8)
   SetTeamAsEnemy(12,8)
   SetTeamAsEnemy(13,8)    
   SetTeamName(8, "gam")
    AddUnitClass(8, "gam_inf_gamorreanguard", 4)
   SetUnitCount(8, 6)
   SetReinforcementCount(8, -1)
      
   --Naboo Guard
   SetTeamAsEnemy(ATT,9)   
    SetTeamAsEnemy(DEF,9)
   SetTeamAsEnemy(3,9)
   SetTeamAsEnemy(4,9)
   SetTeamAsEnemy(6,9)
   SetTeamAsEnemy(5,9)
   SetTeamAsEnemy(7,9)
   SetTeamAsEnemy(8,9)
   SetTeamAsEnemy(10,9)
   SetTeamAsEnemy(11,9)
   SetTeamAsEnemy(12,9)
   SetTeamAsEnemy(13,9)    
   SetTeamName(9, "gar")
    AddUnitClass(9, "gar_inf_vanguard", 4)
   SetUnitCount(9, 6)
   SetReinforcementCount(9, -1)
      
   --Gungans
   SetTeamAsEnemy(ATT,10)   
    SetTeamAsEnemy(DEF,10)
   SetTeamAsEnemy(3,10)
   SetTeamAsEnemy(4,10)
   SetTeamAsEnemy(6,10)
   SetTeamAsEnemy(5,10)
   SetTeamAsEnemy(7,10)
   SetTeamAsEnemy(8,10)
   SetTeamAsEnemy(9,10)
   SetTeamAsEnemy(11,10)
   SetTeamAsEnemy(12,10)
   SetTeamAsEnemy(13,10)    
   SetTeamName(10, "gun")
    AddUnitClass(10, "gun_inf_soldier", 4)
   SetUnitCount(10, 6)
   SetReinforcementCount(10, -1)
      
      --Wampa
   SetTeamAsEnemy(ATT,11)   
    SetTeamAsEnemy(DEF,11)
   SetTeamAsEnemy(3,11)
   SetTeamAsEnemy(4,11)
   SetTeamAsEnemy(6,11)
   SetTeamAsEnemy(5,11)
   SetTeamAsEnemy(7,11)
   SetTeamAsEnemy(8,11)
   SetTeamAsEnemy(9,11)
   SetTeamAsEnemy(10,11)
   SetTeamAsEnemy(12,11)
   SetTeamAsEnemy(13,11)    
   SetTeamName(11, "snw")
    AddUnitClass(11, "snw_inf_wampa", 4)
   SetUnitCount(11, 6)
   SetReinforcementCount(11, -1)
      
   --Imperials
   SetTeamAsEnemy(ATT,12)   
    SetTeamAsEnemy(DEF,12)
   SetTeamAsEnemy(3,12)
   SetTeamAsEnemy(4,12)
   SetTeamAsEnemy(6,12)
   SetTeamAsEnemy(5,12)
   SetTeamAsEnemy(7,12)
   SetTeamAsEnemy(8,12)
   SetTeamAsEnemy(9,12)
   SetTeamAsEnemy(10,12)
   SetTeamAsEnemy(11,12)
   SetTeamAsEnemy(13,12)    
   SetTeamName(12, "imp")
    AddUnitClass(12, "imp_inf_rifleman", 4)
   SetUnitCount(12, 6)
   SetReinforcementCount(12, -1)
      
      --Jedi
   SetTeamAsEnemy(ATT,13)   
    SetTeamAsEnemy(DEF,13)
   SetTeamAsEnemy(3,13)
   SetTeamAsEnemy(4,13)
   SetTeamAsEnemy(6,13)
   SetTeamAsEnemy(5,13)
   SetTeamAsEnemy(7,13)
   SetTeamAsEnemy(8,13)
   SetTeamAsEnemy(9,13)
   SetTeamAsEnemy(10,13)
   SetTeamAsEnemy(11,13)
   SetTeamAsEnemy(12,13)    
   SetTeamName(13, "jed")
    AddUnitClass(13, "jed_knight_01", 4)
   SetUnitCount(13, 6)
   SetReinforcementCount(13, -1)
     
   SetupTeams{
      rep = {
         team = REP,
         units = 20,
         reinforcements = 150,
         soldier  = { "rep_inf_ep3_rifleman",9, 25},
         assault  = { "rep_inf_ep3_rocketeer",1, 4},
         engineer = { "rep_inf_ep3_engineer",1, 4},
         sniper   = { "rep_inf_ep3_sniper",1, 4},
         officer = {"rep_inf_ep3_officer",1, 4},
         special = { "rep_inf_ep3_jettrooper",1, 4},
          
      },
      cis = {
         team = CIS,
         units = 20,
         reinforcements = 150,
         soldier  = { "cis_inf_rifleman",9, 25},
         assault  = { "cis_inf_rocketeer",1, 4},
         engineer = { "cis_inf_engineer",1, 4},
         sniper   = { "cis_inf_sniper",1, 4},
         officer = {"cis_inf_officer",1, 4},
         special = { "cis_inf_droideka",1, 4},
      }
   }
   
    --  Level Stats
    --  ClearWalkers()
    AddWalkerType(0, 4) -- special -> droidekas
    AddWalkerType(1, 0) -- 1x2 (1 pair of legs)
    AddWalkerType(2, 0) -- 2x2 (2 pairs of legs)
    AddWalkerType(3, 0) -- 3x2 (3 pairs of legs)
    local weaponCnt = 1024
    SetMemoryPoolSize("Aimer", 75)
    SetMemoryPoolSize("AmmoCounter", weaponCnt)
    SetMemoryPoolSize("BaseHint", 1024)
    SetMemoryPoolSize("EnergyBar", weaponCnt)
   SetMemoryPoolSize("EntityCloth", 32)
   SetMemoryPoolSize("EntityFlyer", 32)
    SetMemoryPoolSize("EntityHover", 32)
    SetMemoryPoolSize("EntityLight", 200)
    SetMemoryPoolSize("EntitySoundStream", 4)
    SetMemoryPoolSize("EntitySoundStatic", 32)
    SetMemoryPoolSize("MountedTurret", 32)
   SetMemoryPoolSize("Navigator", 128)
    SetMemoryPoolSize("Obstacle", 1024)
   SetMemoryPoolSize("PathNode", 1024)
    SetMemoryPoolSize("SoundSpaceRegion", 64)
    SetMemoryPoolSize("TreeGridStack", 1024)
   SetMemoryPoolSize("UnitAgent", 128)
   SetMemoryPoolSize("UnitController", 128)
   SetMemoryPoolSize("Weapon", weaponCnt)
   
    SetSpawnDelay(10.0, 0.25)
    --ReadDataFile("dc:YAP\\YAP.lvl", "YAP_conquest")
    ReadDataFile("dc:YAP\\YAP.lvl", "YAP_conquest")
    SetDenseEnvironment("false")




    --  Sound
   
    SetSoundEffect("ScopeDisplayZoomIn",  "binocularzoomin")
    SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")

    voiceSlow = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_slow")
    AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_slow", voiceSlow)
    AudioStreamAppendSegments("sound\\global.lvl", "global_vo_slow", voiceSlow)
   
    voiceQuick = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_quick")
    AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_quick", voiceQuick)
   
    OpenAudioStream("sound\\global.lvl",  "cw_music")
    -- OpenAudioStream("sound\\global.lvl",  "global_vo_quick")
    -- OpenAudioStream("sound\\global.lvl",  "global_vo_slow")
    OpenAudioStream("sound\\yav.lvl",  "yav1")
    OpenAudioStream("sound\\yav.lvl",  "yav1")
    OpenAudioStream("sound\\yav.lvl",  "yav1_emt")

    SetBleedingVoiceOver(REP, REP, "rep_off_com_report_us_overwhelmed", 1)
    SetBleedingVoiceOver(REP, CIS, "rep_off_com_report_enemy_losing",   1)
    SetBleedingVoiceOver(CIS, REP, "cis_off_com_report_enemy_losing",   1)
    SetBleedingVoiceOver(CIS, CIS, "cis_off_com_report_us_overwhelmed", 1)

    SetOutOfBoundsVoiceOver(2, "cisleaving")
    SetOutOfBoundsVoiceOver(1, "repleaving")

    SetAmbientMusic(REP, 1.0, "rep_yav_amb_start",  0,1)
    SetAmbientMusic(REP, 0.8, "rep_yav_amb_middle", 1,1)
    SetAmbientMusic(REP, 0.2, "rep_yav_amb_end",    2,1)
    SetAmbientMusic(CIS, 1.0, "cis_yav_amb_start",  0,1)
    SetAmbientMusic(CIS, 0.8, "cis_yav_amb_middle", 1,1)
    SetAmbientMusic(CIS, 0.2, "cis_yav_amb_end",    2,1)

    SetVictoryMusic(REP, "rep_yav_amb_victory")
    SetDefeatMusic (REP, "rep_yav_amb_defeat")
    SetVictoryMusic(CIS, "cis_yav_amb_victory")
    SetDefeatMusic (CIS, "cis_yav_amb_defeat")

    SetSoundEffect("ScopeDisplayZoomIn",      "binocularzoomin")
    SetSoundEffect("ScopeDisplayZoomOut",     "binocularzoomout")
    --SetSoundEffect("BirdScatter",             "birdsFlySeq1")
    --SetSoundEffect("WeaponUnableSelect",      "com_weap_inf_weaponchange_null")
    --SetSoundEffect("WeaponModeUnableSelect",  "com_weap_inf_modechange_null")
    SetSoundEffect("SpawnDisplayUnitChange",       "shell_select_unit")
    SetSoundEffect("SpawnDisplayUnitAccept",       "shell_menu_enter")
    SetSoundEffect("SpawnDisplaySpawnPointChange", "shell_select_change")
    SetSoundEffect("SpawnDisplaySpawnPointAccept", "shell_menu_enter")
    SetSoundEffect("SpawnDisplayBack",             "shell_menu_exit")


--OpeningSateliteShot
    AddCameraShot(0.908386, -0.209095, -0.352873, -0.081226, -45.922508, -19.114113, 77.022636);

    AddCameraShot(-0.481173, 0.024248, -0.875181, -0.044103, 14.767292, -30.602322, -144.506851);
    AddCameraShot(0.999914, -0.012495, -0.004416, -0.000055, 1.143253, -33.602314, -76.884430);
    AddCameraShot(0.839161, 0.012048, -0.543698, 0.007806, 19.152437, -49.802273, 24.337317);
    AddCameraShot(0.467324, 0.006709, -0.883972, 0.012691, 11.825212, -49.802273, -7.000720);
    AddCameraShot(0.861797, 0.001786, -0.507253, 0.001051, -11.986043, -59.702248, 23.263165);
    AddCameraShot(0.628546, -0.042609, -0.774831, -0.052525, 20.429928, -48.302277, 9.771714);
    AddCameraShot(0.765213, -0.051873, 0.640215, 0.043400, 57.692474, -48.302277, 16.540724);
    AddCameraShot(0.264032, -0.015285, -0.962782, -0.055734, -16.681797, -42.902290, 129.553268);
    AddCameraShot(-0.382320, 0.022132, -0.922222, -0.053386, 20.670977, -42.902290, 135.513001);
end
[/spoiler]