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 секунд ручками, главное - файлы бы раздобыть.


 
ScorpioT1000
Работаем
offline
Опыт: отключен
в направлении "посри на форуме и ничего не сделай за десять лет" ?)
Старый 24.02.2010, 15:20
YellowStar
poon
offline
Опыт: 15,144
Активность:
Не мои способ не будет схож с твоим. Буду делать для себя. Модмеикинг - хобби, отвлекаюсь им от серых буднеи.
Старый 24.02.2010, 21:17
Alan

offline
Опыт: 1,033
Активность:
Вытащить геометрию можно. Но врятли кто то согласиться анимировать это чудо
Старый 25.02.2010, 14:59
XOR

offline
Опыт: 38,159
Активность:
Чем открывал?
Старый 25.02.2010, 15:30
iZucken
ШТО
offline
Опыт: 17,960
Активность:
Не так уж и много поликов :\
Старый 25.02.2010, 15:42
KotoBog
Meow
offline
Опыт: 36,046
Активность:
Чё-то как-то оно слишком уж марика из Вар3 напоминает по геометрии =\
Старый 25.02.2010, 15:52
Arty3ooo
...
offline
Опыт: 3,125
Активность:
Шейдеры и битмэпы сделают свое дело...
Старый 25.02.2010, 16:10
Alan

offline
Опыт: 1,033
Активность:
Старый 26.02.2010, 14:12
ScorpioT1000
Работаем
offline
Опыт: отключен
Alan, это уг. покажи рендеренный вариант)
Старый 26.02.2010, 14:53
Preveder
StarCraft II® Inside
offline
Опыт: 1,927
Активность:
Про патчи на StarCraft II Beta.

На этот раз выпуск "новостей вскрытия" посвящён первой "заплатке" для бета-версии ожидаемой всеми нами новой RTS от Blizzard.

Рассказывать о вносимых изменениях не буду - все итак уже прочитали. Перейдём к просмотру структурных изменений игры на платформе Windows. Клиента для MacOS пока что, к сожалению, нет.

Сам процесс закачки патча уже выверен Blizzard несколькими годами ранее - распространение патчей по принципу сетей BitTorrent через специализированный для этих целей торрент-клиент от Blizzard - Blizzard Downloader.

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

» Этап №1

При обновлении версии создаётся отдельный каталог, именуемый номером версии по следующему пути
Код:
Каталог_игры/Versions/BaseXXXXX

где XXXXX - номер версии.

В него сохраняются:
а) Все основные бинарники новой версии (SC2.exe, msvcp80.dll, msvcr80.dll)
б) MPQ-архивы, содержащие файлы, затронутые конкретным обновлением. Они имеют расширения *.SC2Archive. Архивов может быть несколько.
Один, обязательный, называется patch.SC2Archive и несёт в себе изменения во всех затронутых обновлением игровых данных в SC2Mod'ах - изменения в файлах Base.SC2Data и Base.SC2Assets, возможны изменения в Base.MPQ корня движка - Core.SC2Mod.
Остальные (их может быть несколько или не быть вообще), несут в себе изменения данных языкового перевода (обычно тексты, звуки). Архивы, содержащие обновления переводов, имеют имена вида
Код:
patch-aaBB.SC2Archive

где aaBB - языковой код локализированной версии. Например, ruRU - русская, enUS - английская, deDE - немецкая и т.д.

Изменения, которые несёт с собой обновление, НЕ ЗАПИСЫВАЮТСЯ в оригинальные SC2Mod'ы в каталоге /Mods/.


» Этап №2

Обновлённые бинарники новой версии (SC2.exe, msvcp80.dll, msvcr80.dll и последний файл манифеста - *.manifest) записываются в Backup.MPQ на случай необходимости восстановления повреждённых оригинальных файлов.


» Запуск обновлённой версии и просмотр роликов из разных версий

При запуске через стандартный launcher (прим. - файл StarCraft II.exe в корневом каталоге игры) игра сверяет текущую последнюю версию с сервером (именно поэтому без подключения к интернету вы не сможете её запустить обычным способом - будет просто вечно висеть логотип в центре экрана).

Получив номер текущей версии, игра, собственно, использует для загрузки основные бинарники по следующему пути
Код:
Каталог_игры/Versions/BaseXXXXX

где XXXXX - полученный номер версии. Затем, происходит загрузка всех SC2Mod's, располагающихся в каталоге /Mods/. Закончив эту процедуру, игра "цепляет" все архивы *.SC2Archive в папке загруженной версии, которые имеют указанные в Этапе №1 названия. Таким образом, изменения как бы "накатываются" на оригинальные файлы в процессе загрузки игры. Сами же файлы данных в каталоге /Mods/ остаются неизменными. Аналогичные схемы были использованы и в WarCraft III и в WoW.

Как вы уже узнали, в каталоге /Versions/ будут находится необходимые данные для любой из обновлённых версий игры. Таким образом, можно будет просматривать любой реплей - игра сама загрузит для ролика игровые данные той версии, на которой он записан.
Старый 26.02.2010, 16:11
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
омг, геометрия убога
Старый 27.02.2010, 00:24
Preveder
StarCraft II® Inside
offline
Опыт: 1,927
Активность:
Вышел первый "кряк" для StarCraft II beta.

LazyTown Loader aka lazylaunch.exe (спрашиваем гугль, ссылок не даю). Загружает выбранную карту без AI, инстант-вин, сиди стройся до посинения. И, да, поаккуратней с этой хренью. Запускал из-под обычного юзера форточек, без нета, с максимальным контролем антивирусного сканера. Мало ли, что там наложили в довесок.
Старый 27.02.2010, 00:54
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
Вышли также несколько AI для StarCraft II beta. Проверен пока только слабый. Кому надо ссылки - пишем в личку. Все отлично работает
Старый 28.02.2010, 17:37
Орк
Silenced by Орк
offline
Опыт: 14,899
Активность:
Цитата:
Сообщение от XiMiKs
Чем открывал?

3D Ripper.
Цитата:
Сообщение от Arty3ooo
Шейдеры и битмэпы сделают свое дело...

Нихрена они не сделают. Графа в ск2 убога и это факт, ну по крайней мере в стандартной сборке(т.к. технологии позволяют, можно использовать крутые, не казенные модельки с кучей прибамбасов).
Alan, и да, это реально уг, нет смутгруп, ничего нет, тупо для варика сойдет.
Старый 28.02.2010, 17:51
ScorpioT1000
Работаем
offline
Опыт: отключен
смотрите соседнюю тему Sc2 beta там всё расписал
ScorpioT1001 добавил:
Нихрена они не сделают. Графа в ск2 убога и это факт, ну по крайней мере в стандартной сборке(т.к. технологии позволяют, можно использовать крутые, не казенные модельки с кучей прибамбасов).
лол? поиграй на максимуме. этот движок может охрененно много. они сделали своё дело
Старый 28.02.2010, 18:12
Орк
Silenced by Орк
offline
Опыт: 14,899
Активность:
Цитата:
Сообщение от ScorpioT1001
лол? поиграй на максимуме. этот движок может охрененно много. они сделали своё дело

этот движок жрет слишком много для себя, в этом главный минус.
Старый 28.02.2010, 18:21
WebSter
Товарищ Mechanicus
offline
Опыт: 86,111
Активность:
Орк:
нет смутгруп
они вырубаются при конверте, с варовскими моделями тоже так.
И геометрия нифига не убога, т. к. без всяких карт и норм рендеринга - сравните хоть с этим(второй кат), да и плюс вид с игровой камеры будет.
Старый 01.03.2010, 12:55
Alan

offline
Опыт: 1,033
Активность:
Орк, наверно думаешь у тебя ума палата? Смотри на смутгруп в игре, я показал геометрию такая какая она есть без наворотов и да я не собирался ничего никуда портать, попробуй хоть что нибудь портнуть из старкравта в вар посмотрим как у тебя это получиться
Старый 01.03.2010, 17:21
ScorpioT1000
Работаем
offline
Опыт: отключен
Alan, мы уже пробуем :)
Старый 02.03.2010, 01:16
Preveder
StarCraft II® Inside
offline
Опыт: 1,927
Активность:
Про параметры юнитов


На этот раз наше «вскрытие» будет посвящено игровым юнитам. Как вы уже знаете благодаря предыдущим выпускам «вскрытия», все объекты в StarCraft II описаны в более читабельном, по сравнению с Warcraft III, виде – XML-разметка.

Если вы не знаете, что это такое – можете прочитать, например, на википедии. Мы же перейдём прямо к делу – разбору содержимого UnitData.xml.

Из прошлых выпусков «вскрытия» вы уже знаете, что игровые данные в StarCraft II имеют модульную структуру. Поэтому, нас интересует содержимое, как минимум, двух файлов:
Код:
Core.SC2Mod\Base.SC2Data\GameData\UnitData.xml
Liberty.SC2Mod\Base.SC2Data\GameData\UnitData.xml


В UnitData.xml, если быть более точным технически, записаны не описания юнитов, а описания классов юнитов. Классы юнитов могут быть как общими, так и частными.

Общих классов немного. Они записаны в UnitData.xml из Core.SC2Mod:

Код:
<const id="Burrow" path="CUnit.Collide.index" value="Land1"/>
<const id="Swarm" path="CUnit.Collide.index" value="Land4"/>
<const id="Structure" path="CUnit.Collide.index" value="Land6"/>
<const id="FlyingImmobile" path="CUnit.Collide.index" value="Air2"/>
<const id="FlyingEscorts" path="CUnit.Collide.index" value="Air3"/>
<const id="Ground" path="CUnit.Collide.index" value="Land2"/>
<const id="Flying" path="CUnit.Collide.index" value="Air1"/>
<const id="Colossus" path="CUnit.Collide.index" value="Land5"/>
<const id="Larva" path="CUnit.Collide.index" value="Land3"/>


Как видите, общий класс юнитов задаётся тегом <const> и равносилен параметру «Тип»/«Классификация» из Warcraft III. Его назначение - определение взаимодействия юнитов между собой. Он не описывает всех параметров юнитов, которые мы привыкли видеть.

Вот примерный перевод названий данных классов на русский язык:
Код:
Нора/зарытый
Стая/рой
Здание
Летающий недвижимый
Летающий сопровождающий
Наземный
Летающий
Колосс
Личинка

Более точный и окончательный увидим в русской версии редактора.

Частные же классы юнитов – это все остальные. Ранее, в Warcraft III, мы говорили «вид юнитов» или «юнит», когда имели в виду «Рыцаря» или «Пехотинца». Теперь же, я предлагаю говорить «класс юнитов». Ниже, по ходу повествования, вы поймёте, почему я ввожу такое понятие.

Частный класс юнитов задаётся тегом <CUnit> (возможно, как раз-таки сокращение от “Class.Unit”).

У тега <CUnit> был замечен 1 опциональный параметр – “default”. Этот параметр, как несложно догадаться, означает, является ли данный частный класс юнитов «классом по умолчанию».

В Wings Of Liberty имеется всего один частный класс юнитов, обладающий таким параметром – BroodlingDefault.

Зато в «ядре» движка их несколько:
Код:
BEACON
PATHINGBLOCKER
PLACEHOLDER
PLACEHOLDER_AIR
MISSILE_INVULNERABLE
MISSILE_HALFLIFE
MISSILE
SMSET
STARMAP
SMCAMERA
POWERUP
ITEM
DESTRUCTIBLE

Об их назначении узнаем далее по тексту.

Теперь мы знаем, что параметры частного класса юнитов описаны промежутке между тегами <CUnit></CUnit>.

Стандартное негласное правило XML «один тег – один параметр» тут не действует, потому, как вполне встречаются такие конструкции:
Код:
<Fidget DelayMax="30" DelayMin="10" TurnAngle="90" TurningRate="90">
<ChanceArray index="Idle" value="100"/>
</Fidget>


Поэтому, чтобы получить примерный список параметров частных классов юнитов в виде, приближённом к тому, в каком он будет представлен в редакторе, пришлось немного пошаманить через Excel.

Вот то, что получилось в итоге:
» Нажмите, чтобы раскрыть длинный текст
Код:
Default
Unit ID
Parent Unit
Name
Description
Race
Flag Index
Flag Value
AIEvalFactor
Attributes Index
Attributes Value
LifeStart
LifeMax    
LifeRegenRate
LifeArmorName
Sight
AttackTargetPriority
DamageDealtXP
DamageTakenXP
KillXP
Radius
SeparationRadius
SubGroupPriority
MinimapRadius
EditorCategories
TacticalAI
LeaderAlias
SelectAlias
AIEvaluateAlias
ReviveType
Mover
SubGroupAlias
Mob
EditorFlags Index
EditorFlags value
PlaneArray Index
PlaneArray Value
Collide Index
Collide Value
Speed
Acceleration
LateralAcceleration
StationaryTurningRate
TurningRate
AbilArray Link
AbilArray Index
AbilArray Removed
CardLayouts Id
CardLayouts Index
LayoutButtons Face
LayoutButtons Type
LayoutButtons AbilCmd
LayoutButtons Row
LayoutButtons Column
LayoutButtons SubmenuCardId
LayoutButtons Requirements
LayoutButtons Index
LayoutButtons removed
LayoutButtons Behavior
LayoutButtons SubmenuFullSubCmdValidation
BehaviorArray Link    
Behavior Index    
Fidget DelayMax    
Fidget DelayMin    
Fidget ChanceArray Index
Fidget ChanceArray    
Height    
EnergyStart    
EnergyMax    
EnergyRegenRate    
VisionHeight    
CostResource Index    
CostResource Value
RepairTime
ScoreMake
ScoreKill
GlossaryPriority
GlossaryCategory
WeaponArray Link
WeaponArray Turret
KillDisplay
LifeArmor
InnerRadius
DefaultAcquireLevel
Response
AIOverrideTargetPriority
Facing    
FogVisibility
FootPrint
PlacementFootprint
ScoreResult
TechTreeUnlockedUnitArray
ResourceState
ResourceType
ShieldsStart
ShieldsMax
ShieldRegenRate
ShieldArmorName    
Food
CargoSize
ShieldRegenDelay
GlossaryStrongArray Value
GlossaryStrongArray Index
GlossaryStrongArray removed
GlossaryWeakArray Value
GlossaryWeakArray Index
GlossaryWeakArray removed    
Deceleration    
TacticalAIRange    
TacticalAIThink    
Mass    
EquipmentArray 
Weapon    
StrafeRadius    
BuiltOn    
ResourceDropOff Index    
ResourceDropOff Value    
TechAliasArray    
TauntDuration Index    
TauntDuration Value    
GlossaryAllias    
AddOnOffsetX    
AddOnOffsetY    
AddedOnArray UnitLink    
AddedOnArray BehaviorLink    
SpeedMultiplierCreep    
DeadFootPrint    
DeathTime
DeathRevealValue    
DeathRevealDuration


К сожалению, на момент написания поста, не могу выложить разъяснения по поводу всех параметров (банальная нехватка места в постах и времени на написание), но опишу парочку.
  • Unit ID.
    Помните т.н. «равкоды» из Warcraft III? Числа в 256-ричной системе счисления, которыми «технически» назывались все типы юнитов, например, ‘hfoot’, ’uacl’. Отныне идентификаторы частных классов юнитов будут записываться в виде строк.

  • Parent Unit
    Вот здесь-то мы и подошли к разгадке тайны, почему я называю «юниты» «классами».

    Если вы помните, в Warcraft III мы лепили нестандартные юниты на основе каких-либо стандартных. Нестандартный юнит сначала приобретал все характеристики стандартного. Так называемое, «наследование». Некоторые характеристики нестандартного юнита мы изменяли под наши нужды.

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

    Пример.

    Мы создаём Tower Defence. У нас имеется несколько башенок, которые мало чем друг от друга отличаются.

    Мы создаём один нестандартный юнит, назовём его “Tower”. В нём мы перечисляем все параметры, свойственные башням. То, что они здания и т.д.

    Затем, создаём на основе “Tower” несколько других башен, например, “IceTower”, “ArrowTower”, “SiegeTower”. Для каждого из новых типов башен, «родительским» будет “Tower”, новый тип башни наследует все параметры из “Tower”.

    Нам остаётся всего лишь поменять атаку, модель, тексты для каждого нового типа башен. Это даст огромный выигрыш в «весе» карты при наличии множества однотипных объектов и экономит ваше время. А если уж будет дан доступ ко всем этим параметрам прямо из триггерного API Galaxy, это будет сказочный подарок всем мододелам.

    Теперь, я думаю, суть всем стала полностью ясна. Теперь взглянем на примеры наследования одними частными классами юнитов параметров других из самой игры:

    Код:
    ID        Parent
    Critter
    Lyote        Critter
    Iguana        Critter
    GlowLizard    Critter
    ThornLizard    Critter
    Chazbat        Critter
    Dog        Critter
    ZukarGiantEel    Critter
    ZukarGiantEel    Critter


    Имеется класс нейтральной живности “Critter”. В нем перечислены основные свойства, характерные всей этой фауне. Ниже представлены сами животные – собака, игуана, ящеры и прочие. Они наследуют все параметры из класса “Critter”, при этом меняя только имя, модель, скорость и так далее, по мелочи, в зависимости от зверя.

    Собственно, теперь вы уже догадались о назначении вышеописанных классов из «ядра»:
    Код:
    BEACON
    PATHINGBLOCKER
    PLACEHOLDER
    PLACEHOLDER_AIR
    MISSILE_INVULNERABLE
    MISSILE_HALFLIFE
    MISSILE
    SMSET
    STARMAP
    SMCAMERA
    POWERUP
    ITEM
    DESTRUCTIBLE


    Да, «снаряды», судя по всему, теперь тоже являются «юнитами».

На этом эта часть «вскрытия» подходит к концу. Множество параметров частных классов юнитов из списка имеют свои аналоги в Warcraft III и StarCraft, прибавилось некоторое количество новых. Для товарищей, знакомых с английским, определить их назначение не будет трудной задачей. :)

Например, для каждого частного класса юнитов можно указывать персональную «таблицу» кнопок со способностями. Для каждой кнопки можно задать отдельные «требования» для отображения её как активной и так далее.

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

Для любителей покопаться самим предоставляю UnitData.xml из «ядра» и из Liberty.SC2Mod. Последний укомплектован таблицами Excel для более наглядного отображения данных, чем в XML. Книги Excel представлены как в формате MS Office 2007, так и в классическом.

http://depositfiles.com/files/w34475cmm (1.27 Мбайт, 7-zip archive)
Старый 07.03.2010, 13:26

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

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

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

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



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