XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > StarCraft (только чтение)> StarCraft 2 inside
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

» Огромнейшее количество букв

Цитата:
Сообщение от Preveder
Не успели счастливчики наиграться в свежевышедшую бета-версию ожидаемой стратегии в реальном времени от компании Blizzard, как ставший доступным игровой общественности клиент был разобран мной практически на запчасти. :)

Если вам интересны некоторые технические подробности устройства StarCraft II - эта новость/статья как раз для вас. Здесь собраны все основные результаты вскрытия в более литературном и понятном читателю виде.

1. Общее устройство игры

Игра построена по модульному принципу. Игровые данные расположены в отдельных "модулях" - папках .SC2Mod.

На основе имеющихся материалов беты, сделан следующий вывод о порядке загрузки:

1. Core.SC2Mod - основной модуль, базовое содержимое (контент) самого движка игры. Загружается вперёд всех остальных SC2Mod.

2. Liberty.SC2Mod - содержимое первой части игры, Wings of Liberty.

3. LibertyMulti.SC2Mod - здесь должно, предположительно, располагаться содержимое многопользовательского режима первой части, но на деле только полупустые файлы.

Для мододелов, при условии, что можно будет создавать свои собственные .SC2Mod, такая система сильно облегчит задачу создания глобальных полноценных модов, полностью преображающих игру.

Напомню, в предыдущей RTS от Blizzard, Warcraft III, для этого необходимо было либо модифицировать оригинальные архивы, либо пользоваться сторонним загрузчиком для подключения дополнительного MPQ-архива к игре, либо просто вываливать файлы в кучу в папку с игрой. Ни то, ни другое, ни третье удобности этому процессу не добавляло ни капли.

2. Основные форматы файлов

  1. Архивы MPQ


    Ключевым форматом, как всегда, является старый знакомый всех мододелов - фирменный архив от Blizzard - *.MPQ.

    В StarCraft II beta он обзавёлся новыми именами. Архивы формата MPQ здесь могут иметь следующие расширения:

    • *.SC2Assets - файлы игровых данных, в основном, графика и аудио
    • *.SC2Data - файлы игровых данных, в основном, тексты, конфигурация и скрипты
    • *.SC2Map - игровые карты
    • *.SC2Campaign - игровые кампании

    Возможно, к релизу, узнаем некоторые дополнительные разновидности и детали относительно применения архивов MPQ в игре.

  2. Файлы разметки XML

    Роман Blizzard с разметкой XML, набиравший обороты в World of Warcraft, разгорелся не на шутку.

    Напомню, в World of Warcraft с помощью XML пользователи могли конструировать интерфейс для игрока практически любой сложности. Это породило бесконечный дождь из пользовательских модификаций интерфейса (т.н. "AddOns").

    Здесь, в StarCraft II beta на файлах разметки XML построено... да практически ВСЁ!

    Если вас не устраивает формулировка "ВСЁ!", рассмотрим повнимательнее:

    - Файлы игровых объектов и конфигурации имеют расширение *.XML и содержат характеристики боевых единиц, улучшений, объектов и прочего. Естественно, в виде XML-разметки.

    - Файлы игрового интерфейса имеют расширение *.SC2Layout и содержат информацию в виде XML-разметки об элементах графического пользовательского интерфейса: фреймов, кнопок и т.д.

    - Файлы с расширением *.SC2Locale содержат список названий локализаций для разных языков в виде XML-разметки.

    - Возможны некоторые другие применения XML-разметки, не описанные здесь.

  3. Графика и интерфейс

    Текстуры имеют формат DirectDrawSurface (расширение *.dds).

    Модели в игре имеют расширение *.m3. Чем их можно редактировать, просматривать и конвертировать - пока неизвестно. К некоторым из моделей идёт файл *.m3h, содержащий точки приложений в xml.
    » Пример содержимого такого файла.

    Код:
    <?xml version="1.0" encoding="us-ascii"?>
    <Bank>
        <Section name="Attachments">
            <Key name="Ref_Origin">
                <Position value="0.006471,-0.016297,-0.041484"></Position>
                <Rotation value="0.000000,0.000000,0.000000,1.000000"></Rotation>
            </Key>
            <Key name="Ref_Overhead">
                <Position value="0.006471,0.086403,0.598125"></Position>
                <Rotation value="0.000000,0.000000,0.000000,1.000000"></Rotation>
            </Key>
            <Key name="Ref_Target">
                <Position value="0.006883,-0.097757,0.008489"></Position>
                <Rotation value="0.000000,-0.000000,0.000000,1.000000"></Rotation>
            </Key>
            <Key name="Ref_Center">
                <Position value="0.006471,0.005491,-0.007119"></Position>
                <Rotation value="0.000000,0.000000,0.000000,1.000000"></Rotation>
            </Key>
        </Section>
    </Bank>
    А это значит, что для создания точек приложения для модели не надо редактировать саму модель, а только крохотный файлик!


    Кстати говоря, StarCraft II использует много "фишек" графического API Direct3D из комплекта DirectX 9. Одной из них, стало применение шейдеров, написанных на языке HLSL (не потверждено!).

    Шейдеры имеют расширение *.fx. Ознакомится с кодом можно на примере шейдера
    » HDR.fx
    Код:
    //================================================================================  ==================
    //
    // Copyright Blizzard Entertainment 2003-2005
    //
    // This is the shader code for HDR post-processing.
    //================================================================================  ==================
    
    #include "ShaderSystem.fx"
    
    struct VertexOutput {
        float4  vPosition        : POSITION;
        float2  vUV0            : TEXCOORD0;
    };
    
    #ifdef VERTEX_SHADER
    
    struct Input {
        float3  vPosition        : POSITION_;
        float2  vUV             : TEXCOORD0_;
    };
    
    //--------------------------------------------------------------------------------------------------
    VertexOutput HDRVertexMain( Input input ) {
        InitShader();
        VertexOutput output;
    #ifdef COMPILING_SHADER_FOR_OPENGL
        output.vPosition = half4( input.vPosition.x, -input.vPosition.y, (input.vPosition.z * 2.0) - 1.0, 1.0f );
    #else
        output.vPosition = half4( input.vPosition, 1.0f );
    #endif    
        output.vUV0 = input.vUV;
        return output;
    }
    
    #endif  // VERTEX_SHADER
    
    #ifdef PIXEL_SHADER
    
    #include "PSTonemap.fx"
    
    #define MODE_DOWNSAMPLE_LUM_LOG     0
    #define MODE_DOWNSCALE_LUM          1
    #define MODE_DOWNSAMPLE_LUM_EXP     2
    #define MODE_TONEMAP                3
    
    sampler2D p_sSrcMap;
    sampler2D p_sBloomMap;
    sampler2D p_sLuminanceMap;
    sampler2D p_sAccumulationBuffer;
    sampler3D p_sColorMap;
    
    HALF    p_fSaturation;
    HALF    p_fBloomThreshold;
    
    static const half3 c_vLuminanceWeights = half3(0.27f, 0.67f, 0.06f);
    static const float c_fEpsilon = 0.0001f;
    
    
    //--------------------------------------------------------------------------------------------------
    float3 ConvertRGBToYUV( float3 cRGB ) {
        float3 vYUV;
        vYUV.r = dot( half3( 0.299f, 0.587f, 0.114f ), cRGB );
        vYUV.g = ( cRGB.b - vYUV.r ) * 0.565f;
        vYUV.b = ( cRGB.r - vYUV.r ) * 0.713f;
        return vYUV;
    }
    
    //--------------------------------------------------------------------------------------------------
    float3 ConvertYUVToRGB( float3 vYUV ) {
        float3 cRGB;
        cRGB.r = vYUV.r + 1.403f * vYUV.b;
        cRGB.g = vYUV.r - 0.344f * vYUV.g - 0.714f * vYUV.b;
        cRGB.b = vYUV.r + 1.770f * vYUV.g;
        return cRGB;
    }
    
    //--------------------------------------------------------------------------------------------------
    half4 HDRPixelMain( VertexOutput input ) : COLOR {
        InitShader();
        /*
          else if ( b_iHDRPass == MODE_DOWNSAMPLE_LUM_LOG ) {
            // Convert to luminance, take log (for geometric average) and 4x4 bilinear downscale.
            float fLuminance = ( log( dot( tex2D( p_sSrcMap, input.vUV0.xy ).rgb, c_vLuminanceWeights ) + c_fEpsilon ) +
                                log( dot( tex2D( p_sSrcMap, input.vUV0.zw ).rgb, c_vLuminanceWeights ) + c_fEpsilon ) +
                                log( dot( tex2D( p_sSrcMap, input.vUV1.xy ).rgb, c_vLuminanceWeights ) + c_fEpsilon ) +
                                log( dot( tex2D( p_sSrcMap, input.vUV1.zw ).rgb, c_vLuminanceWeights ) + c_fEpsilon ) ) * 0.25f;
            return float4( fLuminance, 0.0f, 0.0f, 0.0f );
            
        } else if ( b_iHDRPass == MODE_DOWNSCALE_LUM ) {
            // 4x4 bilinear downscale of fLuminance.
            return( tex2D( p_sSrcMap, input.vUV0.xy ).r + tex2D( p_sSrcMap, input.vUV0.zw ).r +
                    tex2D( p_sSrcMap, input.vUV1.xy ).r + tex2D( p_sSrcMap, input.vUV1.zw ).r ) * 0.25f;
                    
        } else if ( b_iHDRPass == MODE_DOWNSAMPLE_LUM_EXP ) {
            // 4x4 bilinear downscale and conversion back to non-logarithmic space.
            float fLuminance = ( tex2D( p_sSrcMap, input.vUV0.xy ).r + tex2D( p_sSrcMap, input.vUV0.zw ).r +
                                tex2D( p_sSrcMap, input.vUV1.xy ).r + tex2D( p_sSrcMap, input.vUV1.zw ).r ) * 0.25f;
            return exp( fLuminance );
        
        } */
        if ( b_iHDRPass == MODE_TONEMAP ) {
            // Tonemapping step.
            half3 cColor  = tex2D(p_sSrcMap, input.vUV0.xy ).rgb;
            if ( b_iUse8BitHDRPostProcess )
                cColor.rgb *= 2.0f;
            if ( b_useBloom ) {
                float3 bloom = tex2D( p_sBloomMap, input.vUV0.xy ).rgb;
                if ( b_iUse8BitHDRPostProcess )
                    bloom *= 2.0f;  // Exaggerate bloom to compensate for capped HDR.
               cColor += bloom;
            }
    
            /*
            if ( b_addMotionBlur ) {
                // Add accumulation and blur it a bit.
                cColor +=   (   tex2D( p_sAccumulationBuffer, input.vUV1.xy ) + tex2D( p_sAccumulationBuffer, input.vUV1.zw ) +
                                tex2D( p_sAccumulationBuffer, input.vUV2.xy ) + tex2D( p_sAccumulationBuffer, input.vUV2.zw ) ) * 0.25f;
            }
            */
            
            float fSrcL = dot( c_vLuminanceWeights, cColor );
    
            // White shift.
            if ( b_useWhiteShift && b_iOperator != REINHARD_OPERATOR ) {
                half fRatio = saturate( ( fSrcL - 1.5f ) / fSrcL );
                cColor = lerp( cColor, half3( fSrcL, fSrcL, fSrcL ), fRatio );
            }
    
            float fToneMappedL = Tonemap( fSrcL );
    
            // Saturation removed for now.
            // cColor = fToneMappedL * pow( cColor / fSrcL, p_fSaturation );
            cColor = fToneMappedL * cColor / fSrcL;
    
            if ( b_useColorMapping ) {
                cColor.rgb += 0.5f / b_iColorMapSize;
                cColor.rgb = tex3D( p_sColorMap, saturate( cColor.rgb ) );
            }
    
            return float4( cColor, 1.0f );
        }
    }
    
    #endif  // PIXEL_SHADER
    .

    Пользовательский интерфейс построен с широким применением технологий flash. Файлы *.swf и *.gfx могут исполняют роль как "игровых окон" с содержимым, так и некоторых элементов интерфейса (кнопки и т.п.).

    В игре используются шрифты EuroStyle, имеется полноценная поддержка кириллицы и некоторых спецсимволов.

  4. Музыка, звуковое сопровождение, видео

    Звуковые файлы в StarCraft II beta были замечены в 2-ух форматах: Vorbis и WaveOut. Расширения, соответственно, *.ogg и *.wav.

    Видео в игре будет закодировано в формате Theora c расширением *.ogv.

    Роликов из кампании в бета-версии нет, зато есть саундтрек. Для желающих ознакомится с игровыми композициями, заготовлены ссылки на .

3. Новый язык программирования - Galaxy

Как и было обещано, для StarCraft II был разработан новый С-подобный язык для написания сценариев - Galaxy.

Файлы скриптов имеют расширение *.galaxy.

Синтаксис очень сильно напоминает C/C++ и Java. К сожалению, элементов объектно-ориентированного программирования в тех скриптах, что присутствуют в бета-версии, обнаружить не удалось.

Ознакомится с синтаксисом можно на примере кода стандартного скрипта
» BuildAI.galaxy
Код:
//--------------------------------------------------------------------------------------------------
//  AI Building Functions
//--------------------------------------------------------------------------------------------------

//--------------------------------------------------------------------------------------------------
//  Build Flags
//--------------------------------------------------------------------------------------------------

const int c_makeNoFlags             = 0x00000000;

const int c_avoidClosePowerOrCreep  = 0x00000001;
const int c_avoidCloseFactory       = 0x00000002;
const int c_avoidCloseDefense       = 0x00000004;
const int c_avoidCloseDropoff       = 0x00000008;

const int c_avoidFarPowerOrCreep    = 0x00000010;
const int c_avoidFarFactory         = 0x00000020;
const int c_avoidFarDefense         = 0x00000040;
const int c_avoidFarDropoff         = 0x00000080;

const int c_nearClosePowerOrCreep   = 0x00000100;
const int c_nearCloseFactory        = 0x00000200;
const int c_nearCloseDefense        = 0x00000400;
const int c_nearCloseDropoff        = 0x00000800;

const int c_nearFarPowerOrCreep     = 0x00001000;
const int c_nearFarFactory          = 0x00002000;
const int c_nearFarDefense          = 0x00004000;
const int c_nearFarDropoff          = 0x00008000;

const int c_avoidResource           = 0x00010000;
const int c_avoidChokePoint         = 0x00020000;
const int c_nearResource            = 0x00040000;
const int c_nearChokePoint          = 0x00080000;

const int c_valueSpaceMinor         = 0x00100000;
const int c_valueSpaceMajor         = 0x00200000;

const int c_canLower                = 0x08000000;
const int c_onVespeneGas            = 0x10000000;
const int c_onlyHere                = 0x20000000;
const int c_ignoreDanger            = 0x40000000;

const int c_avoidPowerOrCreep       = c_avoidClosePowerOrCreep | c_avoidFarPowerOrCreep;
const int c_avoidFactory            = c_avoidCloseFactory | c_avoidFarFactory;
const int c_avoidDefense            = c_avoidCloseDefense | c_avoidFarDefense;
const int c_avoidDropoff            = c_avoidCloseDropoff | c_avoidFarDropoff;

const int c_nearPowerOrCreep        = c_nearClosePowerOrCreep | c_nearFarPowerOrCreep;
const int c_nearFactory             = c_nearCloseFactory | c_nearFarFactory;
const int c_nearDefense             = c_nearCloseDefense | c_nearFarDefense;
const int c_nearDropoff             = c_nearCloseDropoff | c_nearFarDropoff;

const int c_makeStandard            = c_makeNoFlags;
const int c_makeCenter              = c_nearResource;
const int c_makeCreep               = c_valueSpaceMajor | c_avoidPowerOrCreep;
const int c_makePower               = c_valueSpaceMajor | c_avoidPowerOrCreep;
const int c_makeExpanPower          = c_nearResource | c_nearDropoff | c_avoidClosePowerOrCreep;
const int c_makeDarkPower           = c_nearResource | c_nearDropoff;
const int c_makeCollector           = c_onVespeneGas | c_nearDropoff;
const int c_makeDefense             = c_avoidCloseDefense | c_nearResource | c_nearFarDropoff | c_nearFarFactory | c_nearFarPowerOrCreep | c_nearChokePoint;
const int c_makeResourceDefense     = c_avoidCloseDefense | c_nearResource;
const int c_makeLowerable           = c_makeStandard | c_canLower;

const int c_makeDefault = -1;

//--------------------------------------------------------------------------------------------------
//  AI Get Default Build Flags Functions
//--------------------------------------------------------------------------------------------------
int AIGetDefaultBuildFlags (int player, string objType) {

    // special protoss units
    if (objType == c_PB_Nexus) {
        return c_makeCenter;
    }
    if (objType == c_PB_Pylon) {
        return c_makePower;
    }
    if (objType == c_PB_Obelisk) {
        return c_makeDarkPower;
    }
    if (objType == c_PB_PhotonCannon) {
        return c_makeDefense;
    }
    if (objType == c_PB_Assimilator) {
        return c_makeCollector;
    }
    
    // special terran units
    if (objType == c_TB_CommandCenter) {
        return c_makeCenter;
    }
    if (objType == c_TB_Bunker) {
        return c_makeDefense;
    }
    if (objType == c_TB_MissileTurret) {
        return c_makeResourceDefense;
    }
    if (objType == c_TB_SensorTower) {
        return c_nearChokePoint;
    }
    if (objType == c_TB_PlanetaryFortress) {
        return c_makeDefense;
    }
    if (objType == c_TB_Refinery) {
        return c_makeCollector;
    }
    if (objType == c_TB_SupplyDepot) {
        return c_makeLowerable;
    }
    
    // special zerg units
    if (objType == c_ZB_Hatchery) {
        return c_makeCenter;
    }
    if (objType == c_ZB_Lair) {
        return c_makeCenter;
    }
    if (objType == c_ZB_Hive) {
        return c_makeCenter;
    }
    if (objType == c_ZB_CreepTumor) {
        return c_makeCreep;
    }
    if (objType == c_ZB_SpineCrawler) {
        return c_makeDefense;
    }
    if (objType == c_ZB_SporeCrawler) {
        return c_makeResourceDefense;
    }
    if (objType == c_ZB_Extractor) {
        return c_makeCollector;
    }
    
    // default
    return c_makeStandard;
}
.

4. Карты, кампании, импорт.

Закончу эту статью/новость своими собственными размышлениями на тему создания карт, модов и кампаний.

Как уже было упомянуто выше, карты будут иметь расширение *.SC2Map, кампании - *.SC2Campaign. И то, и другое, будет представлять собой MPQ-архивы.

Сейчас основным вопросом является то, как много файлов нам дадут "перекрывать" из "Core.SC2Mod" и обычных ".SC2Mod". А заодно и то, как именно будут привязываться карты к определённому ".SC2Mod".

Скорее всего, привязка будет опциональна, в зависимости от игровых данных из какого-либо модуля, которые будут использованы в карте.

Есть предположение, что можно будет создавать свои собственные ".SC2Mod"ы, со своими кампаниями, картами (в т.ч. многопользовательскими - главное, чтобы у всех стоял один мод!) даже без привязки к какому-либо стандартному ".SC2Mod"у. То есть, послать оригинальный контент от Blizzard куда подальше и создать свою игру на движке StarCraft II с блэкджэком и... ну, вы поняли.

Как я и говорил уже раньше, в таком случае всплывает на поверхность вероятная возможность "варкрафтизации" - создать целый мод, набитый контентом из вселенной WarCraft. И к нему уже делать кампании, многопользовательские карты... Просто сказка, если всё будет именно так.

Пока это только мои догадки, но не думаю, что очень уж далеко ушёл от истины.

5. Интересности.

Помимо прочего,
» весьма интересные тексты
Код:
<e id="GENERAL_SHOWDESKTOPTOOLTIP" uid="3019">Свернуть все окна чата.</e>
  <e id="GENERAL_RESTORETOOLTIP" uid="3020">Развернуть все окна чата.</e>

  <e id="GENERAL_MAP_NEEDS_DOWNLOAD" uid="3030">Для игры требуется загрузка нового контента.</e>

  <e id="GENERAL_MORE_INFORMATION" uid="3054">Пожалуйста, укажите более подробные данные:</e>
  <e id="GENERAL_SEND_REPORT" uid="3055">ЖАЛОБА</e>
  <e id="GENERAL_REPORT_REASON" uid="3056">Причина жалобы:</e>
  <e id="GENERAL_NAME_OF_PLAYER" uid="3057">Имя игрока:</e>
  <e id="GENERAL_NAME_OF_MAP" uid="3058">Имя:</e>
  <e id="GENERAL_TOON_SPAM" uid="3059">Спам</e>
  <e id="GENERAL_TOON_HARASSMENT" uid="3060">Оскорбление</e>
  <e id="GENERAL_TOON_REAL_LIFE_THREAT" uid="3061">Угрозы в реальной жизни</e>
  <e id="GENERAL_TOON_INAPPROPRIATE_NAME" uid="3062">Некорректное имя</e>
  <e id="GENERAL_MAP_INAPPROPRIATE_CONTENT" uid="3063">Некорректный контент</e>
  <e id="GENERAL_MAP_INAPPROPRIATE_NAME" uid="3064">Некорректное имя</e>
  <e id="GENERAL_REPORT_A_PLAYER" uid="3065">ЖАЛОБА НА ИГРОКА</e>
  <e id="GENERAL_REPORT_A_MAP" uid="3066">ЖАЛОБА НА КОНТЕНТ</e>
  <e id="GENERAL_NOT_AVAILABLE" uid="3067">Недоступно</e>
  <e id="GENERAL_REPORT_THIS_MAP" uid="3068">ЖАЛОБА НА ЭТОТ КОНТЕНТ</e>

  <e id="PARTY_NO_INVITE" uid="700">Вы не приглашены в эту группу</e>
  <e id="PARTY_INTERNAL_ERROR" uid="701">Произошла внутренняя ошибка.</e>
  <e id="PARTY_FROZEN" uid="702">В данный момент это действие невозможно.</e>
  <e id="PARTY_DISBANDED" uid="703">Группа распущена.</e>
  <e id="PARTY_FULL" uid="704">В группе нет мест.</e>
  <e id="PARTY_TARGET_CANT_LOCATE" uid="705">Игрок не найден.</e>
  <e id="PARTY_TARGET_IN_PARTY" uid="706">Игрок уже состоит в группе.</e>
  <e id="PARTY_TARGET_FROZEN" uid="707">Игрок находится в очереди на подбор соперников и не может присоединиться к группе.</e>
  <e id="PARTY_TARGET_IN_GAME" uid="708">Игрок уже находится в игре и не может присоединиться к группе.</e>
  <e id="PARTY_TARGET_CHANNELS_FULL" uid="709">Игрок не может присоединиться к каналу, поскольку подключен к максимальному числу каналов.</e>
  <e id="PARTY_TARGET_BLOCKING" uid="710">Вы находитесь в черном списке этого игрока.</e>
  <e id="PARTY_NO_PROXY" uid="711">При попытке связи с другим игроком произошла ошибка.</e>
  <e id="PARTY_JOINED_ANOTHER_PARTY" uid="712">В другой группе.</e>
  <e id="PARTY_MEMBER_LEFT" uid="713">Игрок покинул группу.</e>
  <e id="PARTY_PENDING_JOIN_GAME" uid="714">Игрок готовится вступить в игру или только что получил приглашение, поэтому не может добавить игроков в свою группу.</e>
  <e id="PARTY_KICKED" uid="715">Лидер исключил вас из группы.</e>
были найдены мной в файлах русского интерфейса battle.net (они оказались включены в enUS-версию). О каких "пати" здесь говорится - пока остаётся только догадываться.


Preveder добавил:
Цитата:
Сообщение от Preveder
Про содержимое файлов из кэша.

Файлы с расширением "*.s2ql" содержат XML-разметку примерно
» такого содержания.

Код:
<?xml version="1.0" encoding="utf-8"?>
<Locale region="enUS">
<e id="0">Novice: Three Vs Three</e>
<e id="1">Do not show this for an inactive queue!</e>
</Locale>
То есть, мелкий текст пропорционально включённому языку. Грузится прямо с battle.net.

А вот файлы "*.s2qh" и "*.s2mh" содержат некие технические параметры.
» Примерно вот такое у "*.s2qh"

Цитата:
{"m_handle":{"m_id":11,"m_region":1,"m_version":0,"m_program":"S2"},"m_icon":{"m_height":4,"m_width":4,"m_visualFileIndex":0,"m_top":1,"m_left":0},"m_version":1,"m_definitionHandleList":[{"m_id":3001,"m_nameSpace":999}],"m_teamSize":1,"m_visualFiles":[],"m_active":true,"m_magicUINumber":0,"m_maps":[{"m_deltas":[{"NewInstance":{"m_address":{"m_scope":0,"m_definitionHandle":{"m_id":500,"m_nameSpace":999}},"m_code":"Humn"}},{"NewInstance":{"m_address":{"m_scope":1,"m_definitionHandle":{"m_id":500,"m_nameSpace":999}},"m_code":"Humn"}}],"m_link":{"m_entries":[{"m_handle":{"m_id":21,"m_version":2},"m_type":0}],"m_variantIndex":1,"m_speed":" 2"}},{"m_deltas":[{"NewInstance":{"m_address":{"m_scope":0,"m_definitionHandle":{"m_id":500,"m_nameSpace":999}},"m_code":"Humn"}},{"NewInstance":{"m_address":{"m_scope":1,"m_definitionHandle":{"m_id":500,"m_nameSpace":999}},"m_code":"Humn"}}],"m_link":{"m_entries":[{"m_handle":{"m_id":26,"m_version":2},"m_type":0}],"m_variantIndex":1,"m_speed":" 2"}},{"m_deltas":[{"NewInstance":{"m_address":{"m_scope":0,"m_definitionHandle":{"m_id":500,"m_nameSpace":999}},"m_code":"Humn"}},{"NewInstance":{"m_address":{"m_scope":1,"m_definitionHandle":{"m_id":500,"m_nameSpace":999}},"m_code":"Humn"}}],"m_link":{"m_entries":[{"m_handle":{"m_id":23,"m_version":2},"m_type":0}],"m_variantIndex":1,"m_speed":" 2"}},{"m_deltas":[{"NewInstance":{"m_address":{"m_scope":0,"m_definitionHandle":{"m_id":500,"m_nameSpace":999}},"m_code":"Humn"}},{"NewInstance":{"m_address":{"m_scope":1,"m_definitionHandle":{"m_id":500,"m_nameSpace":999}},"m_code":"Humn"}}],"m_link":{"m_entries":[{"m_handle":{"m_id":28,"m_version":2},"m_type":0}],"m_variantIndex":1,"m_speed":" 2"}}],"m_computerTeamCount":0,"m_locales":[{"m_stringFileTable":["5332514c0055534230eb45da414bbc45ca06dc9e93f514a1b6da5c79769a004885e6e730d3cbbb48 "],"m_locale":"enUS"}],"m_premadeTeamsAttribute":"1v1","m_description":{"m_id":1,"m_fileIndex":0},"m_tags":["Comp","Tadp"],"m_teamCount":2,"m_name":{"m_id":0,"m_fileIndex":0}}
и
» такое у "*.s2mh"
Цитата:
{"m_version":12576,"m_bnet":{"m_handle":{"m_id":21,"m_version":2},"m_name":"(2)BlisteringSandsNovice.SC2Map","m_authorName":{"m_region":1,"m_program":"S2","m_realm":1337,"m_name":"blizzmaps#blizzmaps"},"m_archiveCacheHandle":"73326D61005553423ED3F460AB7FEF463FA11F9957758FF81CD9A9FF858BD09E5B6B6DB09BDE3237 ","m_workingSet":{"m_name":{"m_colorHint":null,"m_fileIndex":0,"m_id":1},"m_description":{"m_colorHint":null,"m_fileIndex":0,"m_id":2},"m_thumbnail":{"m_visualFileIndex":0,"m_top":0,"m_left":0,"m_height":110,"m_width":138},"m_bigMap":{"m_visualFileIndex":1,"m_top":0,"m_left":0,"m_height":408,"m_width":512},"m_maxPlayers":2,"m_specialScope":"NONE","m_instances":[{"m_definitionHandle":{"m_nameSpace":999,"m_id":500},"m_data":{"slot":[{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":0,"m_baked":false}]}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":3007},"m_data":{"slot":[{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false}]}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":3001},"m_data":{"slot":[{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false}]}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":3002},"m_data":{"slot":[{"m_index":0,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false}]}}],"m_visualFiles":["73326D7600555342195C5649C71CBC74FD96CFA6752E953166B9A36418711C34341746ACBD952803 ","73326D760055534247B8EB18B45190C42EFE28789F3FA2DEC1F1F67607D58398ABC72E43CEFE6885 ","73326D76005553425D80547C59D08F662D7C4B1568FFB2B89D265B69BCD2A9BE3E116CBFBC231680 ","73326D7600555342F8CF533C21208FCBF545B36598E529A8E2750ECF278274230BBF2C2FDDBFF948 ","73326D7600555342109DEF4E75975AC1500B7648CD19EF0F7E1EBED9764461051E1E00222554C492 ","73326D7600555342F5CB2A7790086BCE0870DEF4FC2B2EBC01F83E68A93B63E500A8206A5955DE6E "],"m_locales":[{"m_locale":"enUS","m_stringFileTable":["73326D6C00555342747411E1D1DA9A3FC1CCE354594938470E0B66A5D45F64D61B9A51CF9B5BF8C2 "]},{"m_locale":"frFR","m_stringFileTable":["73326D6C005553424DD6E23536A55190A4203E11666AA548A3DC7AC3D568A75141A6DD71DA6CA96E "]},{"m_locale":"deDE","m_stringFileTable":["73326D6C00555342D733BF78D02ABD08EDDC7454C0CFEB74A6FBFF416BCAC7CC15CCE91EB5728F50 "]},{"m_locale":"esES","m_stringFileTable":["73326D6C005553424506D3B7EBFEFE61EF883DDE7BE7544B493670472CC3DBC4C84C1A476D385BB5 "]},{"m_locale":"esMX","m_stringFileTable":["73326D6C00555342513DA314BEE7612A5A5AD862E42F49253BDD6E03A39436B09ED8740AEA59747F "]},{"m_locale":"ruRU","m_stringFileTable":["73326D6C00555342F32368F59E4121482A2718CEE4881F9739EB61DADE031633830C468D339B81BA "]},{"m_locale":"koKR","m_stringFileTable":["73326D6C0055534263EAAAD98DB9C64D3EEB0CBBD020E857325F6760A252008016DEF1EC3B50D18A "]},{"m_locale":"zhCN","m_stringFileTable":["73326D6C005553429A0B15667765DB4CD7CC755E3F34D7B184A190894C4FAA5F07F81618724BDEA3 "]},{"m_locale":"zhTW","m_stringFileTable":["73326D6C00555342F0363AED781C73E171FDD7166674599F3FFBC08E7B0B6EA85CA2B641DD3171E8 "]},{"m_locale":"plPL","m_stringFileTable":["73326D6C00555342156BD918C80D6D184BC0E65658A46A2DC45E63874D6CDF7AA406ED65DEE6D11A "]},{"m_locale":"itIT","m_stringFileTable":["73326D6C005553428D7E5CF4D814AF4ECDEBC0DE622D05ABE3F76E57E04B8FFCF98466B44BD15AAE "]},{"m_locale":"ptBR","m_stringFileTable":["73326D6C00555342627EDE8C46B7117EBF915E9D2A3B6EF149E8EC1C2C4F2E20AEE697B2953A1ABD "]}]},"m_definitions":[],"m_dependencies":[{"m_id":1,"m_version":0},{"m_id":4,"m_version":0},{"m_id":2,"m_version":0},{"m_id":19,"m_version":0}],"m_resultDefinitions":{"trunk":[]},"m_locales":[{"m_locale":"enUS","m_stringFileTable":["73326D6C00555342747411E1D1DA9A3FC1CCE354594938470E0B66A5D45F64D61B9A51CF9B5BF8C2 "]},{"m_locale":"frFR","m_stringFileTable":["73326D6C005553424DD6E23536A55190A4203E11666AA548A3DC7AC3D568A75141A6DD71DA6CA96E "]},{"m_locale":"deDE","m_stringFileTable":["73326D6C00555342D733BF78D02ABD08EDDC7454C0CFEB74A6FBFF416BCAC7CC15CCE91EB5728F50 "]},{"m_locale":"esES","m_stringFileTable":["73326D6C005553424506D3B7EBFEFE61EF883DDE7BE7544B493670472CC3DBC4C84C1A476D385BB5 "]},{"m_locale":"esMX","m_stringFileTable":["73326D6C00555342513DA314BEE7612A5A5AD862E42F49253BDD6E03A39436B09ED8740AEA59747F "]},{"m_locale":"ruRU","m_stringFileTable":["73326D6C00555342F32368F59E4121482A2718CEE4881F9739EB61DADE031633830C468D339B81BA "]},{"m_locale":"koKR","m_stringFileTable":["73326D6C0055534263EAAAD98DB9C64D3EEB0CBBD020E857325F6760A252008016DEF1EC3B50D18A "]},{"m_locale":"zhCN","m_stringFileTable":["73326D6C005553429A0B15667765DB4CD7CC755E3F34D7B184A190894C4FAA5F07F81618724BDEA3 "]},{"m_locale":"zhTW","m_stringFileTable":["73326D6C00555342F0363AED781C73E171FDD7166674599F3FFBC08E7B0B6EA85CA2B641DD3171E8 "]},{"m_locale":"plPL","m_stringFileTable":["73326D6C00555342156BD918C80D6D184BC0E65658A46A2DC45E63874D6CDF7AA406ED65DEE6D11A "]},{"m_locale":"itIT","m_stringFileTable":["73326D6C005553428D7E5CF4D814AF4ECDEBC0DE622D05ABE3F76E57E04B8FFCF98466B44BD15AAE "]},{"m_locale":"ptBR","m_stringFileTable":["73326D6C00555342627EDE8C46B7117EBF915E9D2A3B6EF149E8EC1C2C4F2E20AEE697B2953A1ABD "]}],"m_size":{"m_horizontal":138,"m_vertical":110},"m_tileset":{"m_colorHint":null,"m_fileIndex":0,"m_id":3},"m_label":"BLIZ","m_defaultVariantIndex":1,"m_variants":[{"m_variantId":{"Other":{"Custom":{"m_genre":{"m_colorHint":null,"m_fileIndex":0,"m_id":14125}}}},"m_visual":{"m_text":{"m_colorHint":null,"m_fileIndex":0,"m_id":4},"m_tip":{"m_colorHint":null,"m_fileIndex":0,"m_id":5},"m_art":null},"m_instances":[{"m_definitionHandle":{"m_nameSpace":999,"m_id":3010},"m_data":{"game":{"m_index":1,"m_baked":false}}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":3000},"m_data":{"game":{"m_index":4,"m_baked":false}}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":1001},"m_data":{"game":{"m_index":0,"m_baked":false}}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":2000},"m_data":{"game":{"m_index":1,"m_baked":false}}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":3007},"m_data":{"slot":[{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false}]}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":2018},"m_data":{"slot":[{"m_index":0,"m_baked":false},{"m_index":2,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false}]}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":500},"m_data":{"slot":[{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false}]}}],"m_lockedAttributes":[{"m_nameSpace":999,"m_id":1001},{"m_nameSpace":999,"m_id":2000}],"m_maxTeamSize":2,"m_genreDescription":null,"m_variantDescription":{"m_colorHint":null,"m_fileIndex":0,"m_id":5}},{"m_variantId":{"Melee":{"Melee1v1":null}},"m_visual":{"m_text":{"m_colorHint":null,"m_fileIndex":0,"m_id":6},"m_tip":{"m_colorHint":null,"m_fileIndex":0,"m_id":7},"m_art":null},"m_instances":[{"m_definitionHandle":{"m_nameSpace":999,"m_id":3010},"m_data":{"game":{"m_index":1,"m_baked":false}}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":3000},"m_data":{"game":{"m_index":4,"m_baked":false}}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":1001},"m_data":{"game":{"m_index":1,"m_baked":false}}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":2001},"m_data":{"game":{"m_index":0,"m_baked":false}}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":3007},"m_data":{"slot":[{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false}]}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":2002},"m_data":{"slot":[{"m_index":0,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false},{"m_index":0,"m_baked":false}]}},{"m_definitionHandle":{"m_nameSpace":999,"m_id":500},"m_data":{"slot":[{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false},{"m_index":1,"m_baked":false}]}}],"m_lockedAttributes":[{"m_nameSpace":999,"m_id":3010},{"m_nameSpace":999,"m_id":1001},{"m_nameSpace":999,"m_id":2001}],"m_maxTeamSize":1,"m_genreDescription":null,"m_variantDescription":{"m_colorHint":null,"m_fileIndex":0,"m_id":7}}]},"m_game":{}}
Из последнего можно выудить оригинальное название одной карты - "(2)BlisteringSandsNovice.SC2Map".

Файлы "*.s2ml" тоже содержат мелкий
» локализированный текст.

Код:
<?xml version="1.0" encoding="utf-8"?>
<Locale region="enUS">
    <e id="1">Shakuras Plateau</e>
    <e id="2">Team play map, your ally is nearby. One central path to your enemy. Destroy rocks to open surprise attack routes.</e>
    <e id="3">Shakuras (Wasteland)</e>
    <e id="4">Custom</e>
    <e id="5">All settings may be customized.</e>
    <e id="6">1 v 1</e>
    <e id="7">Two players fight to the death.</e>
    <e id="8">2 v 2</e>
    <e id="9">Two teams of two vie for dominance.</e>
    <e id="10">Free For All</e>
    <e id="11">All players fight until only one remains.</e>
</Locale>


Файлы "*.s2mv" являются бинарными, прочесть их стандартными средставами не удалось.
Однако в конце файлов обнаружилась запись "TRUEVISION-XFILE", что подразумевает то, что файл является изображением Truevision Targa! Копируем файл, переименовываем расширение копии файла из ".s2mv" в ".tga", смотрим графическим редактором. Я вот, например, нашёл .
А ну-ка, бета-тестеры, признавайтесь, что за карта? :)

Файлы "*.agre" содержат
» лицензионное соглашение бета-тестирования.

Цитата:
STARCRAFT® II BETA TEST AGREEMENT
PRE-RELEASE TESTING AGREEMENT

YOU SHOULD CAREFULLY READ THE FOLLOWING BETA TEST END USER LICENSE AGREEMENT (THE “AGREEMENT”) BEFORE INSTALLING THIS SOFTWARE PROGRAM. IF YOU DO NOT AGREE WITH ALL OF THE TERMS OF THIS AGREEMENT, YOU MAY NOT INSTALL THE SOFTWARE.
This pre-release version of the “STARCRAFT® II” software program and any accompanying materials or documentation (collectively, the "Game") is the copyrighted work of Blizzard Entertainment, Inc. (“Blizzard”), or its suppliers. All use of the Game is governed by the terms of this Agreement. The Game may be used only by individuals designated by Blizzard solely for the purpose of testing the Game in accordance with the terms of this Agreement. Any use, reproduction, public display, sale or redistribution of the Game not in accordance with the terms of the Agreement is strictly and expressly prohibited.
STARCRAFT® II BETA TEST AGREEMENT
The “StarCraft® II Beta Test” (the “Beta Test”), provides a limited opportunity during which certain designated people (“Beta Testers”) are given the opportunity to test the pre-release version of the “Game.” If you are designated by Blizzard as a Beta Tester, and you agree to the terms and conditions of this Agreement, then you will be given the opportunity to test the Game.
1. Eligibility.* Your eligibility to participate in this StarCraft® II Beta Test is cutject to the following conditions: (i) You must have registered a Battle.net® account which is in good standing (the “Account”); (ii) you must be an adult in your country of residence; (iii) you must agree to the terms of this Beta Test Agreement; and (iv) the computer system that you will use to take part in the Beta Test (the “System”) meets the specifications which Blizzard determines are required for the Beta Test, noting that Blizzard has the right to change the required system specifications at any time during the Beta Test, and if at any time during the Beta Test your System does not meet the requirements, Blizzard may determine that you are ineligible to continue to participate in the Beta Test. In order to determine your eligibility for the Beta Test, you specifically agree to allow Blizzard to obtain hardware and software information from the System prior to registration for the *Beta Test in order for Blizzard to determine if you are eligible to participate.
2. Grant of License. Cutject to the terms and conditions contained herein, Blizzard hereby grants, and by installing or using the Game you thereby accept, a limited, revocable, non-exclusive license and right to install and use one (1) copy of the Game for your use on one (1) computer which you own or control at your place of residence for the purpose of testing the Game. Use of the Game is also cutject to your acceptance of the Battle.net Terms of Use Agreement (the “Terms of Use”). Your participation in the Beta Test is strictly conditioned upon your compliance with the terms, conditions and restrictions contained herein, and the terms, conditions and restrictions of the Battle.net Terms of Use Agreement. In the event of a conflict between the terms of this Agreement and the Battle.net Terms of Use, this Agreement shall govern and supersede the Battle.net Terms of Use Agreement. Blizzard reserves the right to update, modify or change this Agreement at any time during the Term of the Agreement upon providing reasonable notice to you as stated herein.
3. Distribution of the Game. Blizzard may choose to distribute the Game through the use of the “Blizzard Downloader” utility which utilizes the ‘upload’ capability of your computer to distribute the Game to other participants of the Beta Test. In such an event, you agree that Blizzard may distribute the Game by using your home computer to ‘upload’ all or part of the Game to other participants of the Beta Test.
4. Map Editor. As part of the Beta Test, Blizzard may allow Beta Testers to test the StarCraft II Map Editor (the “Map Editor”) that allows you to create custom levels, maps, scenarios or other materials for your personal use in connection with the Game ("New Materials"). The use of the Map Editor will be cutject to an End User License Agreement that you will be required to accept prior to installing and using the Map Editor.

5. Confidentiality. All elements of the Game, how the Game interacts with Blizzard’s Battle.net® On-line Gaming Service (“Battle.net), any functions of Battle.net not available to the public at large, and this Agreement are confidential. You agree to maintain the secrecy associated with the Beta and the Battle.net Service during the Term (as defined in Section 9 below), and after the expiration of the Term of this Agreement. In the event of a breach of this Section 5 of the Agreement, Blizzard reserves the right to any and all actions available to Blizzard under the law to protect its rights hereunder.
6. Ownership. All title, ownership rights and intellectual property rights in and to the Game and all copies thereof (including without limitation any titles, computer code, themes, objects, characters, character names, stories, dialog, catch phrases, locations, concepts, artwork, character inventories, structural or landscape designs, animations, sounds, musical compositions and recordings, audio-visual effects, storylines, character likenesses, methods of operation, moral rights, and any related documentation) are owned or licensed by Blizzard. The Game is protected by the copyright laws of the United States, international treaties and conventions, and other laws. The Game may contain materials licensed by third parties, and the licensors of those materials may enforce their rights in the event of any violation of this Agreement.
7. Responsibilities of Beta Tester
A. Cutject to the license granted hereunder, you may not, in whole or in part, copy, photocopy, reproduce, translate, reverse engineer, derive source code from, modify, disassemble, decompile, or create derivative works based on the Game, or remove any proprietary notices or labels from the Game. Failure to comply with the restrictions and limitations contained in this Section 7 shall result in the immediate, automatic termination of the license granted hereunder and may cutject you to potential civil and/or criminal liability.
B. Without limiting Blizzard’s rights hereunder, you agree that you shall not, under any circumstances:
(i) sell, rent, lease, lend, license the Game to others, grant a security interest in, or transfer reproductions of, the Game and/or the Account to other parties in any way not expressly authorized herein, or let any third person use the Game and/or the Account;
(ii) Exploit the Game or any of its parts for any commercial purpose, including without limitation use at a cyber café, computer gaming center or any other commercial establishment without the express written consent of Blizzard;
(iii) host, provide or develop matchmaking services for the Game or intercept, emulate or redirect the communication protocols used by Blizzard in any way, including without limitation through protocol emulation, tunneling, packet sniffing, modifying or adding components to the Game, use of a utility program or any other techniques now known or hereafter developed, for any purpose, including without limitation unauthorized network play over the Internet, network play utilizing commercial or non-commercial gaming networks, or as part of content aggregation networks;
(iv) Facilitate, create or maintain any unauthorized connection to the Game, including without limitation any connection to any unauthorized server that emulates, or attempts to emulate, the Game. All connections by or to the Game may only be made through methods and means approved by Blizzard. Under no circumstances may you connect, or create tools that allow you or others to connect, to the Game other than those expressly provided by Blizzard for use by Beta Testers; or
(v) Create, reproduce, distribute, display or otherwise make available screen shots depicting the Game or any element thereof without the prior written consent of Blizzard.
8. Consent to Monitor. WHEN RUNNING, THE GAME MAY MONITOR YOUR COMPUTER'S RANDOM ACCESS MEMORY (RAM) FOR UNAUTHORIZED THIRD PARTY PROGRAMS RUNNING CONCURRENTLY WITH THE GAME. AN “UNAUTHORIZED THIRD PARTY PROGRAM” AS USED HEREIN SHALL BE DEFINED AS ANY THIRD PARTY SOFTWARE, INCLUDING WITHOUT LIMITATION ANY “ADDON,” “MOD,” “HACK,” “TRAINER,” OR “CHEAT,” THAT IN BLIZZARD'S SOLE DETERMINATION: (i) ENABLES OR FACILITATES CHEATING OF ANY TYPE; (ii) ALLOWS USERS TO MODIFY OR HACK THE GAME INTERFACE, ENVIRONMENT, AND/OR EXPERIENCE IN ANY WAY NOT EXPRESSLY AUTHORIZED BY BLIZZARD; OR (iii) INTERCEPTS, “MINES,” OR OTHERWISE COLLECTS INFORMATION FROM OR THROUGH THE GAME. IN THE EVENT THAT THE GAME DETECTS AN UNAUTHORIZED THIRD PARTY PROGRAM, THE GAME MAY (a) COMMUNICATE INFORMATION BACK TO BLIZZARD, INCLUDING WITHOUT LIMITATION YOUR ACCOUNT NAME, DETAILS ABOUT THE UNAUTHORIZED THIRD PARTY PROGRAM DETECTED, AND THE TIME AND DATE THE UNAUTHORIZED THIRD PARTY PROGRAM WAS DETECTED; AND/OR (b) EXERCISE ANY OR ALL OF ITS RIGHTS UNDER THIS AGREEMENT, WITH OR WITHOUT PRIOR NOTICE TO THE USER.
9. Term and Termination. Your use of the Game shall be limited to the Term of the Beta Test, which will begin upon your installation of the Game, and last until terminated by Blizzard at its sole and absolute discretion (the “Term”). This Agreement will terminate automatically without notice upon the termination of the Beta Test. Blizzard shall have the right to terminate this Agreement at any time, for any reason, or for no reason. Upon termination of the Agreement, you must destroy the Game and all documents and materials you received from Blizzard in connection with the Beta Test, and you must remove any elements of the Game from any hard drives on which the Game has been installed.
10. Feedback. At the termination of the Beta Test, and during the Term as requested by Blizzard, you agree to provide Blizzard with comments, suggestions and impressions of the Game by using the in-program mechanisms provided to supply feedback and bug reports, the Game Beta Test internal website and forums, and such other methods are provided by Blizzard. Additionally, the Game may include a tool that will allow your system to forward system and driver information to Blizzard in the event of a crash. This tool will collect data on the system during the crash, and forward a report to Blizzard via electronic mail, after allowing you to see and approve of the information contained in the electronic mail message.
11. Acknowledgments. You hereby acknowledge: (i) that the Game is a work in progress and may contain bugs which may cause loss of data and/or damage to your computer system; (ii) that you have, or will, back-up your hard drive prior to installation of the Game; (iii) that you have the resources necessary to easily reinstall your operating system and restore any and all data that may be lost; (iv) that Blizzard is not be liable in any way for the loss or damage to players, accounts, statistics, or user profile information stored by the Game; (v) that Blizzard may monitor and record any and all communications, electronic or otherwise, pertaining to the Game including, without limitation, Program packets, chat, email, message board postings, etc.; (vi) Blizzard may delete or modify the information stored on the Game for any reason at any time during the duration of the Beta Test, including the modification or deletion of player characters, statistics, and rankings; and (vii) that as part of the Beta Test registration process, Blizzard may transfer software program files to your computer system, including without limitation, a program that will collect and send Blizzard CPU, RAM, operating system, video card, and sound card information from your computer.
12. DISCLAIMER OF WARRANTIES. THE PROGRAM AND ACCOMPANYING DOCUMENTATION IS BEING PROVIDED TO YOU "AS IS" WITHOUT WARRANTY OF ANY KIND. BLIZZARD DOES NOT WARRANT THAT THE PROGRAM WILL BE UNINTERRUPTED OR ERROR FREE. BLIZZARD DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED INCLUDING BUT NOT LIMITED TO ANY AND ALL IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
13. LIMITATION OF LIABILITY. BLIZZARD SHALL NOT BE LIABLE TO YOU FOR ANY DAMAGES OF ANY KIND INCLUDING BUT NOT LIMITED TO DIRECT, INDIRECT, COMPENSATORY, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT. I UNDERSTAND AND ACKNOWLEDGE THAT BLIZZARD CANNOT AND WILL NOT BE RESPONSIBLE FOR ANY INTERRUPTIONS OF SERVICE INCLUDING, BUT NOT LIMITED TO ISP DISRUPTIONS, SOFTWARE OR HARDWARE FAILURES OR ANY OTHER EVENT WHICH MAY RESULT IN A LOSS OF DATA OR DISRUPTION OF SERVICE.
14. Equitable Remedies. You hereby agree that Blizzard would be irreparably damaged if the terms of this Agreement were not specifically enforced, and therefore you agree that Blizzard shall be entitled, without bond, other security, or proof of damages, to appropriate equitable remedies with respect to breaches of this Agreement, in addition to such other remedies as Blizzard may otherwise have available to it under applicable laws. In the event any litigation is brought by either party in connection with this Agreement, the prevailing party in such litigation shall be entitled to recover from the other party all the costs, attorneys' fees and other expenses incurred by such prevailing party in the litigation.
15. Miscellaneous. This Agreement shall be deemed to have been made and executed in the State of California, and any dispute arising hereunder shall be resolved in accordance with the law of California. You agree that any claim asserted in any legal proceeding by one of the parties against the other shall be commenced and maintained in any state or federal court located in the State of California, County of Los Angeles, having cutject matter jurisdiction with respect to the dispute between the parties. In the event that any provision of this Agreement shall be held by a court or other tribunal of competent jurisdiction to be unenforceable, such provision will be enforced to the maximum extent permissible and the remaining portions of this Agreement shall remain in full force and effect. This Agreement constitutes and contains the entire agreement between the parties with respect to the cutject matter hereof and supersedes any prior oral or written agreements.
I hereby acknowledge that I have read and understand the foregoing Agreement and agree that by clicking “agree” or installing the Game I am acknowledging my agreement to be bound by the terms and conditions of this License Agreement.
© 2009 Blizzard Entertainment, Inc. All rights reserved. StarCraft and Blizzard Entertainment are registered trademarks of Blizzard Entertainment, Inc., in the U.S. and/or other countries.
SCIIBetaTest2000128


Preveder добавил:
Цитата:
Сообщение от Preveder
Итак, увлекательное (надеюсь, вам не скучно читать мои "breaking news" из недр ресурсов StarCraft II beta) игровскрытие продолжается!

На этот раз в моих руках благодаря нашим и чужим бета-тестерам оказался бесценный подарок - кэш из Battle.net.

Первым делом, конечно, самолеты. Точнее, карты.

Карты из кэша имеют краткое расширение "*.s2ma" Сделано это, по-видимому, в целях совместимости. Расширения, состоящие более чем из 4-ёх символов издавна не в почёте. Не могу сказать, какое из расширений будет окончательно использовано в релизе ("*.SC2Map" или "*.s2ma"). Впрочем, нас это не особенно волнует, ибо эта часть "вскрытия", пожалуй, наиболее интересная из всех. Отложим мелкие споры о расширениях на потом.

На этот раз в наши руки попала карта "Shakuras Plateau Novice" или "Плато Шакураса (уч.)" на великом и могучем.

» Сперва, как водится, заглянем в listfile.

Код:
Build.txt
ComponentList.SC2Components
DocumentInfo
DocumentInfo.version
DocumentPrefs
GameData.version
GameText.version
MapInfo
MapInfo.version
MapScript.galaxy
Minimap.tga
Objects
Objects.version
PaintedPathingLayer
Preload.xml
Triggers
Triggers.version
deDE.SC2Data\LocalizedData\GameStrings.txt
enUS.SC2Data\LocalizedData\GameStrings.txt
enUS.SC2Data\LocalizedData\TriggerStrings.txt
esES.SC2Data\LocalizedData\GameStrings.txt
esMX.SC2Data\LocalizedData\GameStrings.txt
frFR.SC2Data\LocalizedData\GameStrings.txt
itIT.SC2Data\LocalizedData\GameStrings.txt
koKR.SC2Data\LocalizedData\GameStrings.txt
plPL.SC2Data\LocalizedData\GameStrings.txt
ptBR.SC2Data\LocalizedData\GameStrings.txt
ruRU.SC2Data\LocalizedData\GameStrings.txt
t3CellFlags
t3FluffDoodad
t3HardTile
t3HeightMap
t3SyncCliffLevel
t3SyncHeightMap
t3SyncPathingInfo
t3Terrain.version
t3Terrain.xml
t3TextureMasks
t3VertCol
t3Water
zhCN.SC2Data\LocalizedData\GameStrings.txt
zhTW.SC2Data\LocalizedData\GameStrings.txt


Первое, что бросается в глаза - Blizzard сделали встроенную простую поддержку мультиязычности для карт! Никакой больше возни с MPQ-атрибутом Locale! Просто "перекрываем" оригинальные файлы из SC2Data для каждой локализации.

А также, судя по всему, нам позволят редактировать любые внутриигровые тексты в карте. Заметили
» вот эти
Код:
enUS.SC2Data\LocalizedData\GameStrings.txt
enUS.SC2Data\LocalizedData\TriggerStrings.txt
строчки? Триггеры, кстати говоря, в разных языках можно называть по-разному.

Вот тут же всплывает ещё одна подробность: равкод триггеру присваивается уже при создании в редакторе, судя по
» способу "обзывания" триггера в TriggerStrings.txt.
Код:
Trigger/Name/DA585CDF=Melee Initialization


Ладно, с локализациями и игровыми текстами всё стало ясно, двигаемся далее.

Как видим из
» вот этой строки
Код:
Base.SC2Data\GameData\WaterData.xml
в списке файлов, в карте используются нестандартные параметры воды. Если вы помните, в Warcraft III нам позволяли редактировать только цвет. Ну что же, не будем тянуть кота за хвост, взглянем на содержимое
» WaterData.xml
Код:
<?xml version="1.0" encoding="us-ascii"?>
<Catalog>
    <CWater id="Shakuras">
        <State index="0" CausticsFallOff="0.393000"/>
    </CWater>
    <CWater id="Template 1">
        <State index="0">
            <Height value="7.350000"/>
            <Color value="0.313726,0.188235,0.752941,0.076000"/>
            <ColorFallOff value="0.038000"/>
            <Specularity value="1000.000000"/>
            <SpecularScaler value="2.000000"/>
            <UvRate value="-0.000000,-0.001000,0.000000,0.000000"/>
            <MeshRoughness value="0.579000"/>
            <TextureRoughness value="0.579000"/>
            <ReflectionDistortion value="0.015000"/>
            <RefractionDistortion value="0.010000"/>
            <ShadowDistortion value="1.000000"/>
            <MinReflection value="0.251000"/>
        </State>
    </CWater>
</Catalog>
!

Ну как, ландшафтники, уже облизываетесь? :) Цвет - только цветочки. Можно настраивать параметры отражения мира в воде! Здесь представлен далеко не полный список из того, что нам дадут править, полный
» список параметров из Base.SC2Data вот здесь.

Код:
<Catalog>
    <CWater default="1">
        <TextureKey value="Assets/Textures/DefaultWater.dds"/>
        <TilingFreq value="0.125000,0.125000,0.125000,0.125000"/>
        <!--this controls the 2 normal maps (for faking the waves) scrooling rate and direction-->
        <ScrollVectors value="0.03,0.03,-0.03,-0.03"/>
        <CausticsTilingFreq value="0.225000,0.225000"/>
        <CausticsFPS value="15.000000"/>
        <!--FramesPerSec only used by cheap flip book animated water-->
        <FramesPerSec value="15.000000"/>
        <BeachShoreline value=""/>
        <CliffShoreline value=""/>
        <LavaModel value="DefaultLava"/>
        <!--<Sound value="Emitter_WaterfallMedium"/>-->
        <ReceiveShadows value="0"/>
        <IsLava value="0"/>
        <State>
            <Name value="[Default]"/>
            <Height value="9"/>
            <Color value="0.100000,0.350000,0.500000,0.300000"/>
            <UvRate value="0.000000,-1.000000,0.000000,0.000000"/>
            <Specularity value="100.0f"/>
            <ColorFallOff value="0.1f"/>
            <SpecularScaler value="2.45f"/>
            <MinReflection value="0.3f"/>
            <ReflectivityPower value="8.0f"/>
            <TextureRoughness value="0.0f"/>
            <MeshRoughness value="0.0f"/>
            <ReflectionDistortion value="0.012f"/>
            <RefractionDistortion value="0.025f"/>
        </State>
    </CWater>
    <CWater id="Default"/>
</Catalog>
Догадываюсь, что слюнки ландшафтеров превратились в настоящий ручей! Судя по параметру <State>, могу сделать вывод, что можно будет делать определённые состояния для воды. Будет весьма интересно, если их можно будет включать триггерно в игре.

Теперь перейдём к миникарте. В нашем случае размер составил 256х128, сохранена в виде файла формата Targa (*.tga). Естественно, вместо изображения миникарты, наверняка можно плюхнуть какое душе угодно изображение. Об использовании миникарты других форматов (например, в Warcraft III можно было ставить миникарту в формате *.blp) пока ничего не известно. Саму миникарту без пережиманий я приложил к этому посту.

Теперь перейдём к
» файлу Attributes.

Код:
<?xml version="1.0" encoding="utf-8"?>
<Attributes>
    <Variant>
        <Id Value="1"/>
        <Genre Value="1"/>
        <GameType Value="2"/>
        <MaxTeamSize Value="1"/>
        <Name Value="Variant001/Name"/>
        <Description Value="Variant001/Desc"/>
        <Attribute Id="3010">
            <Locked/>
            <Default>
                <Slot Id="Global"/>
                <Value Id="7955827"/>
            </Default>
        </Attribute>
        <Attribute Id="3000">
            <Default>
                <Slot Id="Global"/>
                <Value Id="538976308"/>
            </Default>
        </Attribute>
        <Attribute Id="1001">
            <Locked/>
            <Default>
                <Slot Id="Global"/>
                <Value Id="7955827"/>
            </Default>
        </Attribute>
        <Attribute Id="2001">
            <Locked/>
            <Default>
                <Slot Id="Global"/>
                <Value Id="3241521"/>
            </Default>
        </Attribute>
        <Attribute Id="3007">
            <Default>
                <Slot Id="0"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="1"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="2"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="3"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="4"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="5"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="6"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="7"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="8"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="9"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="10"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="11"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="12"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="13"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="14"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="15"/>
                <Value Id="1466004579"/>
            </Default>
        </Attribute>
        <Attribute Id="2002">
            <Default>
                <Slot Id="0"/>
                <Value Id="21553"/>
            </Default>
            <Default>
                <Slot Id="1"/>
                <Value Id="21554"/>
            </Default>
        </Attribute>
        <Attribute Id="500">
            <Default>
                <Slot Id="0"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="1"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="2"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="3"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="4"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="5"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="6"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="7"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="8"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="9"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="10"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="11"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="12"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="13"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="14"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="15"/>
                <Value Id="1332766062"/>
            </Default>
        </Attribute>
    </Variant>
    <Variant>
        <Id Value="2"/>
        <Genre Value="1"/>
        <GameType Value="3"/>
        <MaxTeamSize Value="2"/>
        <Name Value="Variant002/Name"/>
        <Description Value="Variant002/Desc"/>
        <IsDefault/>
        <Attribute Id="3010">
            <Locked/>
            <Default>
                <Slot Id="Global"/>
                <Value Id="7955827"/>
            </Default>
        </Attribute>
        <Attribute Id="3000">
            <Default>
                <Slot Id="Global"/>
                <Value Id="538976308"/>
            </Default>
        </Attribute>
        <Attribute Id="1001">
            <Locked/>
            <Default>
                <Slot Id="Global"/>
                <Value Id="7955827"/>
            </Default>
        </Attribute>
        <Attribute Id="2001">
            <Locked/>
            <Default>
                <Slot Id="Global"/>
                <Value Id="3307058"/>
            </Default>
        </Attribute>
        <Attribute Id="3007">
            <Default>
                <Slot Id="0"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="1"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="2"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="3"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="4"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="5"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="6"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="7"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="8"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="9"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="10"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="11"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="12"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="13"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="14"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="15"/>
                <Value Id="1466004579"/>
            </Default>
        </Attribute>
        <Attribute Id="2003">
            <Default>
                <Slot Id="0"/>
                <Value Id="21553"/>
            </Default>
            <Default>
                <Slot Id="1"/>
                <Value Id="21553" Index="1"/>
            </Default>
            <Default>
                <Slot Id="2"/>
                <Value Id="21554"/>
            </Default>
            <Default>
                <Slot Id="3"/>
                <Value Id="21554" Index="1"/>
            </Default>
        </Attribute>
        <Attribute Id="500">
            <Default>
                <Slot Id="0"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="1"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="2"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="3"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="4"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="5"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="6"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="7"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="8"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="9"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="10"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="11"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="12"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="13"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="14"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="15"/>
                <Value Id="1332766062"/>
            </Default>
        </Attribute>
    </Variant>
    <Variant>
        <Id Value="3"/>
        <Genre Value="1"/>
        <GameType Value="6"/>
        <MaxTeamSize Value="1"/>
        <Name Value="Variant003/Name"/>
        <Description Value="Variant003/Desc"/>
        <Attribute Id="3010">
            <Locked/>
            <Default>
                <Slot Id="Global"/>
                <Value Id="7955827"/>
            </Default>
        </Attribute>
        <Attribute Id="3000">
            <Default>
                <Slot Id="Global"/>
                <Value Id="538976308"/>
            </Default>
        </Attribute>
        <Attribute Id="1001">
            <Locked/>
            <Default>
                <Slot Id="Global"/>
                <Value Id="7955827"/>
            </Default>
        </Attribute>
        <Attribute Id="2001">
            <Locked/>
            <Default>
                <Slot Id="Global"/>
                <Value Id="4605505"/>
            </Default>
        </Attribute>
        <Attribute Id="3007">
            <Default>
                <Slot Id="0"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="1"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="2"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="3"/>
                <Value Id="1348563572"/>
            </Default>
            <Default>
                <Slot Id="4"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="5"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="6"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="7"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="8"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="9"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="10"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="11"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="12"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="13"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="14"/>
                <Value Id="1466004579"/>
            </Default>
            <Default>
                <Slot Id="15"/>
                <Value Id="1466004579"/>
            </Default>
        </Attribute>
        <Attribute Id="2006">
            <Default>
                <Slot Id="0"/>
                <Value Id="21553"/>
            </Default>
            <Default>
                <Slot Id="1"/>
                <Value Id="21554"/>
            </Default>
            <Default>
                <Slot Id="2"/>
                <Value Id="21555"/>
            </Default>
            <Default>
                <Slot Id="3"/>
                <Value Id="21556"/>
            </Default>
        </Attribute>
        <Attribute Id="500">
            <Default>
                <Slot Id="0"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="1"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="2"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="3"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="4"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="5"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="6"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="7"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="8"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="9"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="10"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="11"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="12"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="13"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="14"/>
                <Value Id="1332766062"/>
            </Default>
            <Default>
                <Slot Id="15"/>
                <Value Id="1332766062"/>
            </Default>
        </Attribute>
    </Variant>
</Attributes>


Как видим из содержимого, для разных режимов игры (FFA, 1x1, 2x2) некоторые параметры различаются. Например, из интуитивно понятного - количество игроков на клан. Что конкретно всё это означает, узнаем, когда появится редактор.

Неподалёку лежит файл Build.txt
» занятного содержания.
Код:
Map Came From Build Server
Для чего конкретно этот файл предназначен, не совсем ясно. Скорее всего, для комментариев.

Весьма значим следующий файл -
» DocumentInfo.

Код:
<?xml version="1.0" encoding="utf-8"?>
<DocInfo>
    <Dependencies>
        <Value>bnet:blizzmaps#blizzmaps/Liberty.SC2Mod,file:Mods/Liberty.SC2Mod</Value>
        <Value>bnet:blizzmaps#blizzmaps/LibertyMulti.SC2Mod,file:Mods/LibertyMulti.SC2Mod</Value>
    </Dependencies>
</DocInfo>
Ага, попался!!! Если вы помните, я размышлял о зависимостях карты от конкретного SC2Mod. Вот и официальный ответ в чистом виде. Здесь указано, в зависимости от контента каких SC2Mod находится карта.

Далее двигаемся к файлу
» DocumentPrefs.
Код:
<?xml version="1.0" encoding="utf-8"?>
<DocumentPrefs>
    <BrushOptions>
        <TexNoRemove>
            <Value>0</Value>
        </TexNoRemove>
        <TexPrioCustom>
            <Value>0</Value>
        </TexPrioCustom>
        <TexSameCliffOnly>
            <Value>0</Value>
        </TexSameCliffOnly>
        <CliffMerge>
            <Value>1</Value>
        </CliffMerge>
        <AddRampTiles>
            <Value>0</Value>
        </AddRampTiles>
        <EdgeSmoothType>
            <Value>0</Value>
        </EdgeSmoothType>
        <EdgeSmoothDist>
            <Value>1.000000</Value>
        </EdgeSmoothDist>
    </BrushOptions>
</DocumentPrefs>
Судя по параметрам, он используется только редактором и содержит настройки кисти, тайлов, склонов, cглаживания краёв склонов (уклоны?).

Далее пред нами предстаёт
» файл MapInfo.
Код:
IpaM   °   ˜          Dark Shakuras 
      ¦   ?    Ђ      Assets\Textures\loading-shakuras.dds    яяяя           X                                      яяяя                 яяяя                 яяяя                 яяяя                                
   -                                           @
Как видите, стандартными средствами не читается, но можно различить, что в нём указаны тип ландшафта (Dark Shakuras) и текстура загрузочного экрана (Assets\Textures\loading-shakuras.dds).

Очередь подошла к
» файлу MapScript.galaxy.
Код:
//================================================================================  ==================
// 
// Generated Map Script
// 
// Name:   Just Another StarCraft II Map
// Author: Unknown Author
// 
//================================================================================  ==================
include "TriggerLibs/NativeLib"

//--------------------------------------------------------------------------------------------------
// Library Initialization
//--------------------------------------------------------------------------------------------------
void InitLibs () {
    libNtve_InitLib();
}

//--------------------------------------------------------------------------------------------------
// Trigger Variables
//--------------------------------------------------------------------------------------------------
trigger gt_MeleeInitialization;

//--------------------------------------------------------------------------------------------------
// Trigger: Melee Initialization
//--------------------------------------------------------------------------------------------------
bool gt_MeleeInitialization_Func (bool testConds, bool runActions) {
    // Actions
    if (runActions) {
        MeleeInitResources();
        MeleeInitUnits();
        MeleeInitAI();
        MeleeInitOptions();
    }

    return true;
}

//--------------------------------------------------------------------------------------------------
void gt_MeleeInitialization_Init () {
    gt_MeleeInitialization = TriggerCreate("gt_MeleeInitialization_Func");
    TriggerAddEventMapInit(gt_MeleeInitialization);
}

//--------------------------------------------------------------------------------------------------
// Trigger Initialization
//--------------------------------------------------------------------------------------------------
void InitTriggers () {
    gt_MeleeInitialization_Init();
}

//--------------------------------------------------------------------------------------------------
// Map Initialization
//--------------------------------------------------------------------------------------------------
void InitMap () {
    InitLibs();
    InitTriggers();
}
Так как карта у нас является стандартным сражением, в нём перечислены только функции инициализации стандартных скриптов сражения и native's.

Следующим открываем
» файл Objects.

Код:
<?xml version="1.0" encoding="utf-8"?>
<PlacedObjects version="26">
    <Unit id="693" position="40,54,0" rotation="3.0446" scale="1,1,1" unitType="DestructibleRock6x6"/>
    <Doodad id="1381" variation="4" position="106.9848,11.9155,8.0197" rotation="3.0603" scale="1.1618,1.1618,1.1618" type="PlantMixShakuras">
        <Flag index="HeightAbsolute" value="1"/>
    </Doodad>
    <Point id="1" position="41.5,21.5,0" scale="1,1,1" type="StartLoc" name="Start Location 001" color="0,0,0,0"/>
    <Point id="661" position="47.3457,130.0532,0" scale="1,1,1" type="BlockPathing" name="Pathing Cliff Fill 063" color="0,0,0,0" pathingSoftRadius="2" pathingHardRadius="1"/>
</PlacedObjects>
Так как его содержимое не влезает в этот пост на форуме, я лишь скопировал сюда по одному объекту каждого типа из него, для наглядности. Файл содержит данные и размещённых на карте объектах - юнитах, декорациях, точках различного назначения.

Далее идёт файл PaintedPathingLayer. Его стандартными средствами прочитать не удалось. Предполагаю, что там находится так называемая визуальная "карта путей", отображаемая в редакторе.

Рассмотрим следующий файл -
» Preload.xml.

Код:
<?xml version="1.0" encoding="us-ascii"?>
<Preload>
    <Actor id="WindEmitterMedium"/>
    <Actor id="ShakurasTempleWall"/>
    <Actor id="ShakurasTempleBuildings"/>
    <Actor id="Rock"/>
    <Actor id="RockLarge"/>
    <Actor id="ShakurasCliffGapFiller"/>
    <Actor id="ShakurasTree"/>
    <Actor id="ShakurasRockColumn"/>
    <Actor id="PlantMixShakuras"/>
    <Actor id="TempleDebris"/>
    <Actor id="ShakurasFoliage"/>
    <Actor id="TempleColumn"/>
    <Actor id="ShakurasCurtain"/>
    <Actor id="ShakurasArchway"/>
    <Terrain id="Shakuras"/>
    <Unit id="VespeneGeyser"/>
    <Unit id="DestructibleRock6x6"/>
    <Unit id="Observatory"/>
    <Unit id="MineralField"/>
</Preload>
Предположительно, он содержит объекты, загружаемые прямо перед началом игры на стороне клиента, дабы не вызывать задержек в начале игры.

Далее идёт пачка бинарных файлов, связанных с ландшафтом, прочитать которые мне не удалось. Это t3CellFlags, t3FluffDoodad, t3HardFile, t3HeightMap, t3SyncCliffLevel, t3SyncHeightMap, t3SyncPathingInfo, t3Water, t3TextureMasks. Рядом с ними находится файл, прочесть который не составило труда -
» Terrain.xml.

Код:
<?xml version="1.0" encoding="us-ascii"?>
<terrain version="112">
    <heightMap tileSet="Shakuras" uvtiling="16.500000 14.250000 " dim="177 153 " offset="0.000000 0.000000 0.000000 " scale="1.000000e+000 1.000000e+000 1.000000e+000 ">
        <cliffSetList num="2">
            <cliffSet i="0" name="ShakurasCliff0"/>
            <cliffSet i="1" name="ShakurasCliff1"/>
        </cliffSetList>
        <rampList num="12">
            <ramp dir="6" hi="3" lo="2" leftLo="u(-1.000000e+000, 0.000000e+000) r(0.000000e+000, 1.000000e+000) c=(6.000000e+001, 1.800000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(-1.000000e+000, 0.000000e+000) r(0.000000e+000, 1.000000e+000) c=(6.200000e+001, 2.000000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(-7.071068e-001, 7.071068e-001) r(7.071068e-001, 7.071068e-001) c=(5.900000e+001, 2.100000e+001) w=1.414214e+000 h=0.000000e+000" mid="u(-7.071068e-001, 7.071068e-001) r(7.071068e-001, 7.071068e-001) c=(6.100000e+001, 1.900000e+001) w=1.414214e+000 h=2.828427e+000" cid="1" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="7" hi="3" lo="2" leftLo="u(0.000000e+000, 1.000000e+000) r(1.000000e+000, 0.000000e+000) c=(1.060000e+002, 2.000000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(0.000000e+000, 1.000000e+000) r(1.000000e+000, 0.000000e+000) c=(1.080000e+002, 1.800000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(7.071068e-001, 7.071068e-001) r(7.071068e-001, -7.071068e-001) c=(1.090000e+002, 2.100000e+001) w=1.414214e+000 h=0.000000e+000" mid="u(7.071068e-001, 7.071068e-001) r(7.071068e-001, -7.071068e-001) c=(1.070000e+002, 1.900000e+001) w=1.414214e+000 h=2.828427e+000" cid="1" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="5" hi="3" lo="2" leftLo="u(1.000000e+000, 0.000000e+000) r(0.000000e+000, -1.000000e+000) c=(3.400000e+001, 4.200000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(1.000000e+000, 0.000000e+000) r(0.000000e+000, -1.000000e+000) c=(3.200000e+001, 4.000000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(7.071068e-001, -7.071068e-001) r(-7.071068e-001, -7.071068e-001) c=(3.500000e+001, 3.900000e+001) w=1.414214e+000 h=0.000000e+000" mid="u(7.071068e-001, -7.071068e-001) r(-7.071068e-001, -7.071068e-001) c=(3.300000e+001, 4.100000e+001) w=1.414214e+000 h=2.828427e+000" cid="1" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="4" hi="3" lo="2" leftLo="u(0.000000e+000, -1.000000e+000) r(-1.000000e+000, 0.000000e+000) c=(1.360000e+002, 4.000000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(0.000000e+000, -1.000000e+000) r(-1.000000e+000, 0.000000e+000) c=(1.340000e+002, 4.200000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(-7.071068e-001, -7.071068e-001) r(-7.071068e-001, 7.071068e-001) c=(1.330000e+002, 3.900000e+001) w=1.414214e+000 h=0.000000e+000" mid="u(-7.071068e-001, -7.071068e-001) r(-7.071068e-001, 7.071068e-001) c=(1.350000e+002, 4.100000e+001) w=1.414214e+000 h=2.828427e+000" cid="1" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="4" hi="2" lo="1" leftLo="u(0.000000e+000, -1.000000e+000) r(-1.000000e+000, 0.000000e+000) c=(4.200000e+001, 5.200000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(0.000000e+000, -1.000000e+000) r(-1.000000e+000, 0.000000e+000) c=(3.800000e+001, 5.600000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(-2.000000e+000, 2.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(-7.071068e-001, -7.071068e-001) r(-7.071068e-001, 7.071068e-001) c=(3.800000e+001, 5.200000e+001) w=2.828427e+000 h=0.000000e+000" mid="u(-7.071068e-001, -7.071068e-001) r(-7.071068e-001, 7.071068e-001) c=(4.000000e+001, 5.400000e+001) w=2.828427e+000 h=2.828427e+000" cid="0" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="5" hi="2" lo="1" leftLo="u(1.000000e+000, 0.000000e+000) r(0.000000e+000, -1.000000e+000) c=(1.300000e+002, 5.600000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(9.600000e+001, -8.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(1.000000e+000, 0.000000e+000) r(0.000000e+000, -1.000000e+000) c=(1.260000e+002, 5.200000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(9.800000e+001, -6.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(7.071068e-001, -7.071068e-001) r(-7.071068e-001, -7.071068e-001) c=(1.300000e+002, 5.200000e+001) w=2.828427e+000 h=0.000000e+000" mid="u(7.071068e-001, -7.071068e-001) r(-7.071068e-001, -7.071068e-001) c=(1.280000e+002, 5.400000e+001) w=2.828427e+000 h=2.828427e+000" cid="0" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="6" hi="2" lo="1" leftLo="u(-1.000000e+000, 0.000000e+000) r(0.000000e+000, 1.000000e+000) c=(4.600000e+001, 8.000000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(-2.000000e+000, -2.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(-1.000000e+000, 0.000000e+000) r(0.000000e+000, 1.000000e+000) c=(5.000000e+001, 8.400000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(-7.071068e-001, 7.071068e-001) r(7.071068e-001, 7.071068e-001) c=(4.600000e+001, 8.400000e+001) w=2.828427e+000 h=0.000000e+000" mid="u(-7.071068e-001, 7.071068e-001) r(7.071068e-001, 7.071068e-001) c=(4.800000e+001, 8.200000e+001) w=2.828427e+000 h=2.828427e+000" cid="0" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="7" hi="2" lo="1" leftLo="u(0.000000e+000, 1.000000e+000) r(1.000000e+000, 0.000000e+000) c=(1.340000e+002, 8.400000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(-2.000000e+000, 2.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(0.000000e+000, 1.000000e+000) r(1.000000e+000, 0.000000e+000) c=(1.380000e+002, 8.000000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(7.071068e-001, 7.071068e-001) r(7.071068e-001, -7.071068e-001) c=(1.380000e+002, 8.400000e+001) w=2.828427e+000 h=0.000000e+000" mid="u(7.071068e-001, 7.071068e-001) r(7.071068e-001, -7.071068e-001) c=(1.360000e+002, 8.200000e+001) w=2.828427e+000 h=2.828427e+000" cid="0" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="7" hi="3" lo="2" leftLo="u(0.000000e+000, 1.000000e+000) r(1.000000e+000, 0.000000e+000) c=(4.000000e+001, 9.600000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(0.000000e+000, 1.000000e+000) r(1.000000e+000, 0.000000e+000) c=(4.200000e+001, 9.400000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(7.071068e-001, 7.071068e-001) r(7.071068e-001, -7.071068e-001) c=(4.300000e+001, 9.700000e+001) w=1.414214e+000 h=0.000000e+000" mid="u(7.071068e-001, 7.071068e-001) r(7.071068e-001, -7.071068e-001) c=(4.100000e+001, 9.500000e+001) w=1.414214e+000 h=2.828427e+000" cid="1" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="6" hi="3" lo="2" leftLo="u(-1.000000e+000, 0.000000e+000) r(0.000000e+000, 1.000000e+000) c=(1.420000e+002, 9.400000e+001) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(-1.000000e+000, 0.000000e+000) r(0.000000e+000, 1.000000e+000) c=(1.440000e+002, 9.600000e+001) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(-7.071068e-001, 7.071068e-001) r(7.071068e-001, 7.071068e-001) c=(1.410000e+002, 9.700000e+001) w=1.414214e+000 h=0.000000e+000" mid="u(-7.071068e-001, 7.071068e-001) r(7.071068e-001, 7.071068e-001) c=(1.430000e+002, 9.500000e+001) w=1.414214e+000 h=2.828427e+000" cid="1" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="4" hi="3" lo="2" leftLo="u(0.000000e+000, -1.000000e+000) r(-1.000000e+000, 0.000000e+000) c=(7.000000e+001, 1.160000e+002) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(0.000000e+000, -1.000000e+000) r(-1.000000e+000, 0.000000e+000) c=(6.800000e+001, 1.180000e+002) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(-7.071068e-001, -7.071068e-001) r(-7.071068e-001, 7.071068e-001) c=(6.700000e+001, 1.150000e+002) w=1.414214e+000 h=0.000000e+000" mid="u(-7.071068e-001, -7.071068e-001) r(-7.071068e-001, 7.071068e-001) c=(6.900000e+001, 1.170000e+002) w=1.414214e+000 h=2.828427e+000" cid="1" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
            <ramp dir="5" hi="3" lo="2" leftLo="u(1.000000e+000, 0.000000e+000) r(0.000000e+000, -1.000000e+000) c=(1.160000e+002, 1.180000e+002) w=2.000000e+000 h=2.000000e+000" leftHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" rightLo="u(1.000000e+000, 0.000000e+000) r(0.000000e+000, -1.000000e+000) c=(1.140000e+002, 1.160000e+002) w=2.000000e+000 h=2.000000e+000" rightHi="u(0.000000e+000, 0.000000e+000) r(0.000000e+000, 0.000000e+000) c=(0.000000e+000, 0.000000e+000) w=0.000000e+000 h=0.000000e+000" base="u(7.071068e-001, -7.071068e-001) r(-7.071068e-001, -7.071068e-001) c=(1.170000e+002, 1.150000e+002) w=1.414214e+000 h=0.000000e+000" mid="u(7.071068e-001, -7.071068e-001) r(-7.071068e-001, -7.071068e-001) c=(1.150000e+002, 1.170000e+002) w=1.414214e+000 h=2.828427e+000" cid="1" leftLoVar="0" leftHiVar="4294967295" rightLoVar="0" rightHiVar="4294967295"/>
        </rampList>
        <vertData quantizeBias="9.002303e+000" quantizeScale="2.874812e-004" standardHeight="7.999705e+000" name="t3HeightMap"/>
        <masks name="t3TextureMasks"/>
        <textureList num="8">
            <texture i="0" name="ShakurasSandDark"/>
            <texture i="1" name="ShakurasRockCracked"/>
            <texture i="2" name="ShakurasStone"/>
            <texture i="3" name="ShakurasDirtCracked"/>
            <texture i="4" name="ShakurasSand"/>
            <texture i="5" name="ShakurasRockRough"/>
            <texture i="6" name="ShakurasBricks"/>
            <texture i="7" name="ShakurasHextiles"/>
        </textureList>
        <cliffCellList num="6688" numOccupied="3074">
            <cc i="89" f="1" cid="0" cvar="1"/>
            <cc i="90" f="1" cid="0" cvar="3"/>
        </cliffCellList>
    </heightMap>
</terrain>
Я скопировал только его часть, чтобы уместить в этот пост. Как видите, содержит список тайлов, типы склонов, уклоны.

Следующее -
» файл Triggers.

Код:
<?xml version="1.0" encoding="utf-8"?>
<TriggerData>
    <root>
        <item type="Trigger" id="DA585CDF"/>
    </root>
    <element type="Trigger" id="DA585CDF">
        <event type="FunctionCall" id="9FD28024"/>
        <action type="FunctionCall" id="D8249E80"/>
        <action type="FunctionCall" id="879D3981"/>
        <action type="FunctionCall" id="BB0E3A48"/>
        <action type="FunctionCall" id="C749188F"/>
    </element>
    <element type="FunctionCall" id="879D3981">
        <function type="FunctionDef" library="Ntve" id="00000145"/>
    </element>
    <element type="FunctionCall" id="9FD28024">
        <function type="FunctionDef" library="Ntve" id="00000120"/>
    </element>
    <element type="FunctionCall" id="BB0E3A48">
        <function type="FunctionDef" library="Ntve" id="00000150"/>
    </element>
    <element type="FunctionCall" id="C749188F">
        <function type="FunctionDef" library="Ntve" id="00000148"/>
    </element>
    <element type="FunctionCall" id="D8249E80">
        <function type="FunctionDef" library="Ntve" id="00000143"/>
    </element>
</TriggerData>
Как видите, теперь имеется корневой элемент - предполагаю, подобие функции main() из Warcraft III и куда записывается то, что содержит действия, необходимые для инициализации карты. В данном случае - триггер. Но, наверняка, можно вписать и функцию. Помимо этого, триггеры и вызовы функций - отдельные элементы и у каждого - свой равкод.

Для некоторых файлов в архиве карты имеется дополнительный файл с точно таким же названием, но с расширением Version. Прочитать его стандартными средствами не удалось. Конкретное и точное назначение файла определить не удалось.

Далее по спику идёт, судя по всему, святая святых карты -
» список компонентов из файла ComponentList.SC2Components.

Код:
<?xml version="1.0" encoding="us-ascii"?>
<Components>
    <component type="info">DocumentInfo</component>
    <component type="mapi">MapInfo</component>
    <component type="trig">Triggers</component>
    <component type="terr">t3Terrain.xml</component>
    <component type="text" locale="enUS">GameText</component>
    <component type="plob">Objects</component>
    <component type="attr">Attributes</component>
    <component type="text" locale="koKR">GameText</component>
    <component type="text" locale="esES">GameText</component>
    <component type="text" locale="deDE">GameText</component>
    <component type="text" locale="frFR">GameText</component>
    <component type="text" locale="ruRU">GameText</component>
    <component type="text" locale="zhCN">GameText</component>
    <component type="text" locale="zhTW">GameText</component>
    <component type="gada">GameData</component>
    <component type="text" locale="ptBR">GameText</component>
    <component type="text" locale="plPL">GameText</component>
    <component type="text" locale="esMX">GameText</component>
    <component type="text" locale="itIT">GameText</component>
</Components>


Здесь перечислены все компоненты карты:
А) Информация о файле с описанием карты ( файл MapInfo )
Б) Информация о файле с описанием зависимостей карты от модов ( файл DocumentInfo )
В) Информация о файле c триггерами ( файл Triggers )
Г) Информация о файле с параметрами ландшафта ( файл t3Terrain.xml )
Д) Информация о файле с параметрами размещения на карте игровых объектов ( файл Objects )
Е) Информация о файле с параметрами игровых данных и объектов ( файл GameData - в данном случае, стандартный из SC2Mod )
Ж) Информация о файле с игровыми параметрами ( файл Attributes )
З) Информация о файле с настройками текстов для разных языков ( файл GameText - в данном случае, стандартный из SC2Mod ).

Собственно, по моим догадкам, этот файл и образует саму карту. Одназначно то, что редактор с вероятностью 100% будет ориентироваться по этому файлу. Насчёт самой игры - неизвестно.

Ну вот и завершилось первое вскрытие карты для SC II. Надеюсь, вам было интересно. :)

- Ваш игровой патологоанатом Preveder.


Preveder добавил:
Цитата:
Сообщение от Preveder
Про локализации.

Как сделать из enUS полную ruRU.

Для полной русской версии надо:
а) /Mods/Core.SC2Mod/ruRU.SC2Data
б) /Mods/Liberty.SC2Mod/ruRU.SC2Data
в) /Mods/Liberty.SC2Mod/ruRU.SC2Assets
г) /Mods/LibertyMulti.SC2Mod/ruRU.SC2Data (больше для галочки, но пригодится всё равно)
д) Поменять в файле /Mods/Core.SC2Mod/Index.SC2Locale локаль на ruRU.

Ну-с, кто имеет русский клиент и создаст раздачу с файлами а)-г) ?

Вообще, можно создать вполне себе дистрибутив мультиязычного клиента. Прибавится порядка 500-600 МБ всего, язык можно будет менять через Index.SC2Locale. Не удивлюсь, если скоро появится волна русификаторов, англофикаторов и т.д. Хотя работы тут на 10 секунд ручками, главное - файлы бы раздобыть.


 
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
В StarCraft II любой юнит может наследовать параметры любого юнита. Иначе говоря, в StarCraft II можно создавать любой «нестандартный» юнит на основе любого юнита, в т.ч. такого же «нестандартного».

близзы полностью не туда тратят усилия =(

Цитата:
Например, для каждого частного класса юнитов можно указывать персональную «таблицу» кнопок со способностями. Для каждой кнопки можно задать отдельные «требования» для отображения её как активной и так далее.
тут тока появляетса вопрос как на лету добавлять способности =О ... есть конечно разные возможности ну увидим.
Старый 10.03.2010, 15:43
YellowStar
poon
offline
Опыт: 15,144
Активность:
Вероятно создавать через код способности ну никак нельзя. Добавлять лишь уже созданные и с параметрами.
Старый 15.03.2010, 12:24
Asgard

offline
Опыт: 4,474
Активность:
Орк:
этот движок жрет слишком много для себя, в этом главный минус.
Я бы не сказал, что графика УГ, графика хороша, причём что на максе, что на минимуме - отвращений не вызывает.
Но пока что движок ведёт себя весьма неоптимально, каковы причины - может потому что бета, может ещё какая-то причина, а может руки кривые (во что ясный пень верится слабо).
Старый 05.04.2010, 12:30
ASSSTRAL

offline
Опыт: 14
Активность:
У меня БЕТА версия (0.3.0.14093). Скажу так - практически мало сходств с тем, что рекламировала blizzard. Я ожидал лучшего. Болше всего меня разочаровал материнский корабль Протоса (оставили только одну способность SC2 - черная дыра, а другие две - спеллы орбитора из первого старика.
Буду надеяться что лицензионная полная версия развеет мои дурные сомнения об этой игре.
Старый 13.04.2010, 18:20
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
Буду надеяться что лицензионная полная версия развеет мои дурные сомнения об этой игре.

надейся xD (ололололо тип еще не понял как всё работает...)
Старый 13.04.2010, 20:45

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 15:54.