Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вскрытие ресурсов Метро 2033
GAMEINATOR forums > Общие разделы > Создание и модификация игр. Геймдев.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
vpr922
Цитата(refuse @ 27.01.2013, 15:10) *
vpr922, нужно распаковать каждый архив вот этим распаковщиком: http://code.google.com/p/metro2033-tools/d...mp;can=2&q=

Спасибо, попробую.
upd: нормально портируется. Спасибо.
abramcumner
Готовлюсь к ЛЛ, сделал модик smile.gif
http://rusfolder.com/35488290
Описание: Артем попробовал на базаре кальяну. То ли 3 то ли 4 раза и теперь его никак не отпустит. Все время slowmo.
Установка: скопировать content.upk9 в папку с метро к остальным content.upk*
autistic
чувствую оживление в разделе, а раз так, то и я не могу оставаться в стороне:
<ссылка временно недоступна, забыл кой-чего>

требуется достаточно мощное android-устройство и ос не ниже версии 2.3.3 (тестировалось на samsung galaxy s3 и android 4.0)

+
NatteFrost
Вскрытие bin-файлов http://www.gameru.net/forum/index.php?s=&a...t&p=1504857
NatteFrost
Программа-вьюер уровней/моделей Metro 2033 для Windows (на основе OpenGL). https://yadi.sk/d/--Ml9pPjcwthd ( m2033_view-20110126.zip ), автор - vertur. Предварительно необходимо распаковать ресурсы игры.
Как запускать
Использование: m2033_view.exe [ОПЦИИ]


Опции запуска:
-w, --width=ШИРИНА Задать ШИРИНУ (в пикселах)
графического окна.
-h, --height=ВЫСОТА Задать ВЫСОТУ (в пикселах)
графического окна.
-b, --bpp=РАЗМЕР Задать РАЗМЕР (глубину) пиксела в
битах (кол-во бит на пиксел).
-d, --depth=ГЛУБИНА Задать ГЛУБИНу z-буфера в битах.
--fullscreen Использовать полноэкранный режим.
--no-vsync Отключить вертикальную синхронизацию.
--force-gl-ext Не завершать работу при отсутсвии
нужных расширений OpenGL.
-?, --help Показать краткую справку и выйти.
-v, --version Показать информацию о версии и выйти.

Дополнительные параметры:
-d, --vfs=ИМЯ Задать ИМЯ виртуальной файловой
системы (имя архивного файла, либо имя
директории).
-l, --level=ИМЯ Задать ИМЯ игрового уровня.
-m, --model=ИМЯ Задать ИМЯ модельки.
-x, --pos-x=X Задать координату X начальной позиции.
-y, --pos-y=Y Задать координату Y начальной позиции.
-z, --pos-z=Z Задать координату Z начальной позиции.
--disable-texture-marks Запретить маркировку текстур по их
именам.
--textures-resolution=РАЗРЕШЕНИЕ Установить РАЗРЕШЕНИЕ текстур (`shit',
`low', `medium', `high').
--disable-spawn Запретить чтение и разбор
spawn-конфига игрового уровня.
--dump-spawn=ФАЙЛ Сохранить в ФАЙЛ разобранный
spawn-конфиг игрового уровня.

По всем вопросам можно обращаться по адресу <for.vertur@gmail.com>.

Версия для linux x86_64 - https://yadi.sk/d/nKIA9ib5cwtgx ( m2033_view-20140120-linux.tar.gz ), умеет M2033+MLL.
P.S. полных исходников нет, пинайте автора.
Modera
Захотелось на днях покодить на делфи, и стал я думать какую бы крутую мега прогу написать. Вспомнил что я лет пять назад хотел замутить самодельный СДК для метро, но тогда я столкнулся с тем что не знаю что такое индексы в 3Д моделях и эту идею пришлось отложить до лучших времен. Воот.

Ну ладно, модели это сложно. У метро даже конфиг толком не вскрыли, куда там модели заменять.
Хотя формат конфигов вроде был разобран. Поэтому я решил написать преобразователь конфигов в текстовый формат.
Написал, значит, декомпилировал level.bin, а там...
+
Код
    vs_mainmenu = begin
        version u16 = 16;
        class stringz = 'VISUALSCRIPT';
        static_data_key stringz = '_G.config.entity.vs';
        id u16 = 8205;
        parent_id u16 = 65535;
        att_bone_id locator_str;
        att_bone_id stringz = '';
        att_offset pose, matrix = [ 1.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  1.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  1.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  1.00000000000000E+0000];
        oflags bool8 = 139;
         pose, matrix = [ 1.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  1.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000,  1.00000000000000E+0000,  0.00000000000000E+0000, -2.76464074850082E-0001,  0.00000000000000E+0000, -6.81849479675293E+0000,  1.00000000000000E+0000];
        name name;
        name stringz = 'vs_mainmenu';
        visual ref_model;
        visual stringz = '';
        dao_val fp32 =  0.00000000000000E+0000;
        vss_ver_6 array;
        vss_ver_6 = begin
            count u32 = 1;
            rec_0000 = begin
                groups array;
                groups = begin
                    count u32 = 0;
                end;
                blocks = begin
                    block_count u32 = 4294967295;
                    array with no key array;
                    count u32 = 115;
                    block_0000 = begin
                        clsid stringz = 'triggers/game/main_menu';
                        posx u16 = 92;
                        posy u16 = 37;
                        active bool = TRUE;
                        new_game_entity entity_link, uobject_link = 257;
                        continue_game_entity entity_link, uobject_link = 261;
                        load_game_entity entity_link, uobject_link = 28417;
                        options_entity entity_link, uobject_link = 56320;
                        credits_entity entity_link, uobject_link = 62720;
                        exit_entity entity_link, uobject_link = 58880;
                    end;
                    block_0001 = begin
                        clsid stringz = 'actions/play motion';
                        posx u16 = 202;
                        posy u16 = 64444;
                        dbg_model ref_model;
                        dbg_model stringz = 'dynamic\objects\ui\ui_typewriter';
                        dbg_skel stringz = 'dynamic\objects\ui\ui_typewriter_01';
                        initial_offset fp32 =  0.00000000000000E+0000;
                        animation animation_str;
                        animation stringz = 'phase_2';
                        bone_part part_id;
                        bone_part stringz = 'default';
                        force_looped u8 = 0;
                        overlay bool = FALSE;
                    end;
                    block_0002 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 157;
                        posy u16 = 64444;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0003 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 377;
                        posy u16 = 64444;
                        target entity_link, uobject_link = 257;
                    end;
                    block_0004 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 157;
                        posy u16 = 64489;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0005 = begin
                        clsid stringz = 'actions/play motion';
                        posx u16 = 202;
                        posy u16 = 64489;
                        dbg_model ref_model;
                        dbg_model stringz = 'dynamic\objects\ui\ui_typewriter';
                        dbg_skel stringz = 'dynamic\objects\ui\ui_typewriter_01';
                        initial_offset fp32 =  0.00000000000000E+0000;
                        animation animation_str;
                        animation stringz = 'phase_1';
                        bone_part part_id;
                        bone_part stringz = 'default';
                        force_looped u8 = 0;
                        overlay bool = FALSE;
                    end;
                    block_0006 = begin
                        clsid stringz = 'actions/play motion';
                        posx u16 = 242;
                        posy u16 = 64814;
                        dbg_model ref_model;
                        dbg_model stringz = 'dynamic\objects\ui\televisor_01';
                        dbg_skel stringz = 'dynamic\objects\ui\televisor_01';
                        initial_offset fp32 =  0.00000000000000E+0000;
                        animation animation_str;
                        animation stringz = 'start_01';
                        bone_part part_id;
                        bone_part stringz = 'default';
                        force_looped u8 = 0;
                        overlay bool = FALSE;
                    end;
                    block_0007 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 197;
                        posy u16 = 64814;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0008 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 302;
                        posy u16 = 64814;
                        target entity_link, uobject_link = 261;
                    end;
                    block_0009 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 197;
                        posy u16 = 64859;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0010 = begin
                        clsid stringz = 'actions/play motion';
                        posx u16 = 242;
                        posy u16 = 64859;
                        dbg_model ref_model;
                        dbg_model stringz = 'dynamic\objects\ui\televisor_01';
                        dbg_skel stringz = 'dynamic\objects\ui\televisor_01';
                        initial_offset fp32 =  0.00000000000000E+0000;
                        animation animation_str;
                        animation stringz = 'finish_01';
                        bone_part part_id;
                        bone_part stringz = 'default';
                        force_looped u8 = 0;
                        overlay bool = FALSE;
                    end;
                    block_0011 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 237;
                        posy u16 = 64349;
                        sound sound;
                        sound stringz = 'interface\typing_return_0';
                        volume fp32 =  1.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0012 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 202;
                        posy u16 = 64349;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0013 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 152;
                        posy u16 = 64574;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0014 = begin
                        clsid stringz = 'actions/play motion';
                        posx u16 = 197;
                        posy u16 = 64574;
                        dbg_model ref_model;
                        dbg_model stringz = 'dynamic\objects\ui\ui_typewriter';
                        dbg_skel stringz = 'dynamic\objects\ui\ui_typewriter_01';
                        initial_offset fp32 =  0.00000000000000E+0000;
                        animation animation_str;
                        animation stringz = 'phase_4';
                        bone_part part_id;
                        bone_part stringz = 'default';
                        force_looped u8 = 0;
                        overlay bool = FALSE;
                    end;
                    block_0015 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 272;
                        posy u16 = 64544;
                        target entity_link, uobject_link = 257;
                    end;
                    block_0016 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 232;
                        posy u16 = 64614;
                        sound sound;
                        sound stringz = 'interface\typing_return_1';
                        volume fp32 =  2.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0017 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 197;
                        posy u16 = 64614;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0018 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 302;
                        posy u16 = 64919;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$continue_menu';
                        size fp32 =  6.50000000000000E+0001;
                        h_alignment u8 = 2;
                        v_alignment u8 = 2;
                        color color, vec4f = [ 1.00000000000000E+0000,  2.43137270212173E-0001,  4.43137288093567E-0001,  9.96078491210938E-0001];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0019 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 342;
                        posy u16 = 64919;
                        target entity_link, uobject_link = 65024;
                    end;
                    block_0020 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 277;
                        posy u16 = 64309;
                        target entity_link, uobject_link = 62976;
                    end;
                    block_0021 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 237;
                        posy u16 = 64309;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$new_game';
                        size fp32 =  7.00000000000000E+0001;
                        h_alignment u8 = 2;
                        v_alignment u8 = 0;
                        color color, vec4f = [ 1.00000000000000E+0000,  8.27451050281525E-0001,  9.64705944061279E-0001,  1.00000000000000E+0000];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0022 = begin
                        clsid stringz = 'actions/play motion';
                        posx u16 = 237;
                        posy u16 = 65339;
                        dbg_model ref_model;
                        dbg_model stringz = 'dynamic\objects\ui\planshet_01';
                        dbg_skel stringz = 'dynamic\objects\ui\planshet_01';
                        initial_offset fp32 =  0.00000000000000E+0000;
                        animation animation_str;
                        animation stringz = 'start_01';
                        bone_part part_id;
                        bone_part stringz = 'default';
                        force_looped u8 = 0;
                        overlay bool = FALSE;
                    end;
                    block_0023 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 192;
                        posy u16 = 65339;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0024 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 297;
                        posy u16 = 65339;
                        target entity_link, uobject_link = 28417;
                    end;
                    block_0025 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 192;
                        posy u16 = 65384;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0026 = begin
                        clsid stringz = 'actions/play motion';
                        posx u16 = 237;
                        posy u16 = 65384;
                        dbg_model ref_model;
                        dbg_model stringz = 'dynamic\objects\ui\planshet_01';
                        dbg_skel stringz = 'dynamic\objects\ui\planshet_01';
                        initial_offset fp32 =  0.00000000000000E+0000;
                        animation animation_str;
                        animation stringz = 'finish_01';
                        bone_part part_id;
                        bone_part stringz = 'default';
                        force_looped u8 = 0;
                        overlay bool = FALSE;
                    end;
                    block_0027 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 222;
                        posy u16 = 65479;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$load_game_short';
                        size fp32 =  6.00000000000000E+0001;
                        h_alignment u8 = 2;
                        v_alignment u8 = 2;
                        color color, vec4f = [ 9.01960849761963E-0001,  7.49019622802734E-0001,  9.41176533699036E-0001,  9.96078491210938E-0001];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0028 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 262;
                        posy u16 = 65479;
                        target entity_link, uobject_link = 55808;
                    end;
                    block_0029 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 182;
                        posy u16 = 88;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0030 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 182;
                        posy u16 = 133;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0031 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 212;
                        posy u16 = 228;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$options';
                        size fp32 =  6.50000000000000E+0001;
                        h_alignment u8 = 2;
                        v_alignment u8 = 2;
                        color color, vec4f = [ 1.00000000000000E+0000,  1.00000000000000E+0000,  9.64705944061279E-0001,  9.25490260124207E-0001];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0032 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 252;
                        posy u16 = 228;
                        target entity_link, uobject_link = 54016;
                    end;
                    block_0033 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 257;
                        posy u16 = 2;
                        sound sound;
                        sound stringz = 'objects\radio\radio_draft_0';
                        volume fp32 =  1.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0034 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 222;
                        posy u16 = 2;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0035 = begin
                        clsid stringz = 'actions/play motion';
                        posx u16 = 437;
                        posy u16 = 378;
                        dbg_model ref_model;
                        dbg_model stringz = 'dynamic\objects\ui\ui_door';
                        dbg_skel stringz = 'dynamic\objects\ui\ui_door';
                        initial_offset fp32 =  0.00000000000000E+0000;
                        animation animation_str;
                        animation stringz = 'open_1';
                        bone_part part_id;
                        bone_part stringz = 'default';
                        force_looped u8 = 0;
                        overlay bool = FALSE;
                    end;
                    block_0036 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 392;
                        posy u16 = 378;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0037 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 562;
                        posy u16 = 377;
                        target entity_link, uobject_link = 58880;
                    end;
                    block_0038 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 392;
                        posy u16 = 423;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0039 = begin
                        clsid stringz = 'actions/play motion';
                        posx u16 = 437;
                        posy u16 = 423;
                        dbg_model ref_model;
                        dbg_model stringz = 'dynamic\objects\ui\ui_door';
                        dbg_skel stringz = 'dynamic\objects\ui\ui_door';
                        initial_offset fp32 =  0.00000000000000E+0000;
                        animation animation_str;
                        animation stringz = 'close_1';
                        bone_part part_id;
                        bone_part stringz = 'default';
                        force_looped u8 = 0;
                        overlay bool = FALSE;
                    end;
                    block_0040 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 437;
                        posy u16 = 468;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$quit';
                        size fp32 =  2.00000000000000E+0002;
                        h_alignment u8 = 2;
                        v_alignment u8 = 2;
                        color color, vec4f = [ 1.00000000000000E+0000,  1.00000000000000E+0000,  1.00000000000000E+0000,  1.00000000000000E+0000];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0041 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 477;
                        posy u16 = 468;
                        target entity_link, uobject_link = 53504;
                    end;
                    block_0042 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 162;
                        posy u16 = 843;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0043 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 162;
                        posy u16 = 888;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0044 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 337;
                        posy u16 = 803;
                        target entity_link, uobject_link = 52992;
                    end;
                    block_0045 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 337;
                        posy u16 = 827;
                        target entity_link, uobject_link = 52992;
                    end;
                    block_0046 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 202;
                        posy u16 = 887;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$credits';
                        size fp32 =  1.75000000000000E+0002;
                        h_alignment u8 = 0;
                        v_alignment u8 = 0;
                        color color, vec4f = [ 8.00000071525574E-0001,  9.96078491210938E-0001,  9.96078491210938E-0001,  9.96078491210938E-0001];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0047 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 242;
                        posy u16 = 888;
                        target entity_link, uobject_link = 62721;
                    end;
                    block_0048 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 237;
                        posy u16 = 788;
                        sound sound;
                        sound stringz = 'material_new\footsteps\rubber_toy';
                        volume fp32 =  2.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0049 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 202;
                        posy u16 = 788;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0050 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 387;
                        posy u16 = 563;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0051 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 507;
                        posy u16 = 563;
                        target entity_link, uobject_link = 58880;
                    end;
                    block_0052 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 467;
                        posy u16 = 602;
                        sound sound;
                        sound stringz = 'objects\door\close_door_01';
                        volume fp32 =  2.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0053 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 427;
                        posy u16 = 603;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0054 = begin
                        clsid stringz = 'actions/console command';
                        posx u16 = 467;
                        posy u16 = 647;
                        cmd stringz = 'mainmenu quit_main_menu';
                    end;
                    block_0055 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 202;
                        posy u16 = 65009;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0056 = begin
                        clsid stringz = 'actions/console command';
                        posx u16 = 257;
                        posy u16 = 87;
                        cmd stringz = 'mainmenu load_game_menu';
                    end;
                    block_0057 = begin
                        clsid stringz = 'actions/console command';
                        posx u16 = 257;
                        posy u16 = 122;
                        cmd stringz = 'mainmenu options_menu';
                    end;
                    block_0058 = begin
                        clsid stringz = 'actions/console command';
                        posx u16 = 122;
                        posy u16 = 197;
                        cmd stringz = 'mainmenu credits_menu';
                    end;
                    block_0059 = begin
                        clsid stringz = 'triggers/startgame';
                        posx u16 = 65534;
                        posy u16 = 37;
                        active bool = TRUE;
                        trigger_on_game_load bool = FALSE;
                    end;
                    block_0060 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 412;
                        posy u16 = 64529;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$new_game';
                        size fp32 =  7.00000000000000E+0001;
                        h_alignment u8 = 2;
                        v_alignment u8 = 0;
                        color color, vec4f = [ 4.03921604156494E-0001,  3.37254911661148E-0001,  2.74509817361832E-0001,  2.90196090936661E-0001];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0061 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 452;
                        posy u16 = 64529;
                        target entity_link, uobject_link = 62976;
                    end;
                    block_0062 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 432;
                        posy u16 = 64919;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$continue_menu';
                        size fp32 =  6.50000000000000E+0001;
                        h_alignment u8 = 2;
                        v_alignment u8 = 2;
                        color color, vec4f = [ 1.00000000000000E+0000,  1.96078449487686E-0001,  7.05882385373116E-0002,  7.84313753247261E-0002];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0063 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 472;
                        posy u16 = 64919;
                        target entity_link, uobject_link = 65024;
                    end;
                    block_0064 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 602;
                        posy u16 = 64164;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$options';
                        size fp32 =  6.50000000000000E+0001;
                        h_alignment u8 = 2;
                        v_alignment u8 = 2;
                        color color, vec4f = [ 3.01960796117783E-0001,  2.74509817361832E-0001,  1.96078449487686E-0001,  1.17647066712379E-0001];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0065 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 642;
                        posy u16 = 64164;
                        target entity_link, uobject_link = 54016;
                    end;
                    block_0066 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 647;
                        posy u16 = 64259;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$quit';
                        size fp32 =  2.00000000000000E+0002;
                        h_alignment u8 = 2;
                        v_alignment u8 = 2;
                        color color, vec4f = [ 6.00000023841858E-0001,  2.74509817361832E-0001,  1.96078449487686E-0001,  1.17647066712379E-0001];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0067 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 687;
                        posy u16 = 64259;
                        target entity_link, uobject_link = 53504;
                    end;
                    block_0068 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 602;
                        posy u16 = 64208;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$credits';
                        size fp32 =  1.75000000000000E+0002;
                        h_alignment u8 = 0;
                        v_alignment u8 = 0;
                        color color, vec4f = [ 7.01960802078247E-0001,  3.13725501298904E-0001,  4.78431403636932E-0001,  6.50980412960052E-0001];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0069 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 642;
                        posy u16 = 64209;
                        target entity_link, uobject_link = 62721;
                    end;
                    block_0070 = begin
                        clsid stringz = 'triggers/startgame';
                        posx u16 = 422;
                        posy u16 = 64364;
                        active bool = TRUE;
                        trigger_on_game_load bool = FALSE;
                    end;
                    block_0071 = begin
                        clsid stringz = 'actions/engine/3d_text';
                        posx u16 = 417;
                        posy u16 = 65324;
                        offset vec3f = [ 0.00000000000000E+0000,  0.00000000000000E+0000,  0.00000000000000E+0000];
                        rotation fp32 =  0.00000000000000E+0000;
                        key stringz = '$load_game_short';
                        size fp32 =  6.00000000000000E+0001;
                        h_alignment u8 = 2;
                        v_alignment u8 = 2;
                        color color, vec4f = [ 5.01960813999176E-0001,  1.17647066712379E-0001,  1.96078449487686E-0001,  2.74509817361832E-0001];
                        bone bone_str;
                        bone stringz = 'joint1';
                    end;
                    block_0072 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 462;
                        posy u16 = 65324;
                        target entity_link, uobject_link = 55808;
                    end;
                    block_0073 = begin
                        clsid stringz = 'actions/turn light';
                        posx u16 = 277;
                        posy u16 = 64459;
                        onoff u8 = 2;
                        on_or_off bool = FALSE;
                    end;
                    block_0074 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 377;
                        posy u16 = 64469;
                        target entity_link, uobject_link = 61184;
                    end;
                    block_0075 = begin
                        clsid stringz = 'actions/turn light';
                        posx u16 = 307;
                        posy u16 = 87;
                        onoff u8 = 2;
                        on_or_off bool = FALSE;
                    end;
                    block_0076 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 367;
                        posy u16 = 64529;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0077 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 392;
                        posy u16 = 64919;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0078 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 557;
                        posy u16 = 64164;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0079 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 602;
                        posy u16 = 64259;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0080 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 557;
                        posy u16 = 64209;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0081 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 372;
                        posy u16 = 65324;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                    block_0082 = begin
                        clsid stringz = 'logic/delay';
                        posx u16 = 472;
                        posy u16 = 64364;
                        min u32 = 200;
                        max u32 = 200;
                        one_at_a_time bool = FALSE;
                        active bool = TRUE;
                    end;
                    block_0083 = begin
                        clsid stringz = 'actions/console command';
                        posx u16 = 242;
                        posy u16 = 65009;
                        cmd stringz = 'continue';
                    end;
                    block_0084 = begin
                        clsid stringz = 'logic/delay';
                        posx u16 = 42;
                        posy u16 = 37;
                        min u32 = 10;
                        max u32 = 10;
                        one_at_a_time bool = FALSE;
                        active bool = TRUE;
                    end;
                    block_0085 = begin
                        clsid stringz = 'checker/platform';
                        posx u16 = 557;
                        posy u16 = 64259;
                    end;
                    block_0086 = begin
                        clsid stringz = 'triggers/startgame';
                        posx u16 = 512;
                        posy u16 = 64259;
                        active bool = TRUE;
                        trigger_on_game_load bool = FALSE;
                    end;
                    block_0087 = begin
                        clsid stringz = 'actions/turn light';
                        posx u16 = 497;
                        posy u16 = 407;
                        onoff u8 = 2;
                        on_or_off bool = FALSE;
                    end;
                    block_0088 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 562;
                        posy u16 = 407;
                        target entity_link, uobject_link = 58112;
                    end;
                    block_0089 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 257;
                        posy u16 = 157;
                        sound sound;
                        sound stringz = 'objects\radio\radio_noise';
                        volume fp32 =  1.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  2.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0090 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 222;
                        posy u16 = 157;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0091 = begin
                        clsid stringz = 'entities/entity player';
                        posx u16 = 302;
                        posy u16 = 157;
                    end;
                    block_0092 = begin
                        clsid stringz = 'logic/delay';
                        posx u16 = 302;
                        posy u16 = 197;
                        min u32 = 2000;
                        max u32 = 2000;
                        one_at_a_time bool = FALSE;
                        active bool = TRUE;
                    end;
                    block_0093 = begin
                        clsid stringz = 'actions/turn light';
                        posx u16 = 237;
                        posy u16 = 832;
                        onoff u8 = 2;
                        on_or_off bool = FALSE;
                    end;
                    block_0094 = begin
                        clsid stringz = 'actions/console command';
                        posx u16 = 272;
                        posy u16 = 64569;
                        cmd stringz = 'new_game';
                    end;
                    block_0095 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 442;
                        posy u16 = 327;
                        sound sound;
                        sound stringz = 'objects\door\door_hall_open';
                        volume fp32 =  1.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0096 = begin
                        clsid stringz = 'entities/entity player';
                        posx u16 = 502;
                        posy u16 = 327;
                    end;
                    block_0097 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 407;
                        posy u16 = 327;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0098 = begin
                        clsid stringz = 'entities/entity player';
                        posx u16 = 312;
                        posy u16 = 2;
                    end;
                    block_0099 = begin
                        clsid stringz = 'checker/platform';
                        posx u16 = 557;
                        posy u16 = 64299;
                    end;
                    block_0100 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 237;
                        posy u16 = 65284;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0101 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 267;
                        posy u16 = 65284;
                        sound sound;
                        sound stringz = 'objects\paper_elements\book';
                        volume fp32 =  2.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0102 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 267;
                        posy u16 = 65239;
                        sound sound;
                        sound stringz = 'objects\usable_items\lamp_kerosene_on';
                        volume fp32 =  2.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0103 = begin
                        clsid stringz = 'actions/turn light';
                        posx u16 = 322;
                        posy u16 = 65284;
                        onoff u8 = 2;
                        on_or_off bool = FALSE;
                    end;
                    block_0104 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 372;
                        posy u16 = 65299;
                        target entity_link, uobject_link = 16384;
                    end;
                    block_0105 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 242;
                        posy u16 = 64759;
                        locked bool = FALSE;
                        auto_lock bool = TRUE;
                        next_frame bool = TRUE;
                    end;
                    block_0106 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 282;
                        posy u16 = 64759;
                        sound sound;
                        sound stringz = 'objects\usable_items\lamp_electric_2_on';
                        volume fp32 =  2.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0107 = begin
                        clsid stringz = 'entities/entity player';
                        posx u16 = 337;
                        posy u16 = 64759;
                    end;
                    block_0108 = begin
                        clsid stringz = 'actions/turn light';
                        posx u16 = 347;
                        posy u16 = 64814;
                        onoff u8 = 2;
                        on_or_off bool = FALSE;
                    end;
                    block_0109 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 392;
                        posy u16 = 64814;
                        target entity_link, uobject_link = 304;
                    end;
                    block_0110 = begin
                        clsid stringz = 'actions/play sound';
                        posx u16 = 267;
                        posy u16 = 65189;
                        sound sound;
                        sound stringz = 'scenario\d6\objects\funikuler\squeak_little';
                        volume fp32 =  2.00000000000000E+0000;
                        instant bool = TRUE;
                        ai_sound_type u32 = 0;
                        stop_interval fp32 =  1.00000000000000E+0000;
                        startus_intervalus fp32 =  0.00000000000000E+0000;
                        looped bool = FALSE;
                        enable_slowmo bool = TRUE;
                        enable_fx bool = TRUE;
                        play_as_music bool = FALSE;
                    end;
                    block_0111 = begin
                        clsid stringz = 'actions/engine/signal';
                        posx u16 = 92;
                        posy u16 = 65479;
                        localus bool = FALSE;
                        signal stringz = 'quit_act';
                    end;
                    block_0112 = begin
                        clsid stringz = 'actions/engine/signal';
                        posx u16 = 92;
                        posy u16 = 65504;
                        localus bool = FALSE;
                        signal stringz = 'quit_dia';
                    end;
                    block_0113 = begin
                        clsid stringz = 'entities/entity ref';
                        posx u16 = 357;
                        posy u16 = 87;
                        target entity_link, uobject_link = 51712;
                    end;
                    block_0114 = begin
                        clsid stringz = 'logic/locker';
                        posx u16 = 392;
                        posy u16 = 64964;
                        locked bool = FALSE;
                        auto_lock bool = FALSE;
                        next_frame bool = TRUE;
                    end;
                end;
                link_count u32 = 175;
                0 vec4s16 = [0, 0, 2, 2];
                1 vec4s16 = [0, 1, 4, 2];
                2 vec4s16 = [0, 2, 13, 2];
                3 vec4s16 = [0, 3, 7, 2];
                4 vec4s16 = [0, 4, 9, 2];
                5 vec4s16 = [0, 5, 55, 2];
                6 vec4s16 = [0, 6, 23, 2];
                7 vec4s16 = [0, 7, 25, 2];
                8 vec4s16 = [0, 8, 56, 0];
                9 vec4s16 = [0, 9, 29, 2];
                10 vec4s16 = [0, 10, 30, 2];
                11 vec4s16 = [0, 11, 90, 2];
                12 vec4s16 = [0, 11, 57, 0];
                13 vec4s16 = [0, 12, 42, 2];
                14 vec4s16 = [0, 13, 43, 2];
                15 vec4s16 = [0, 14, 58, 0];
                16 vec4s16 = [0, 15, 111, 0];
                17 vec4s16 = [0, 15, 36, 2];
                18 vec4s16 = [0, 16, 112, 0];
                19 vec4s16 = [0, 16, 38, 2];
                20 vec4s16 = [0, 17, 50, 2];
                21 vec4s16 = [0, 18, 62, 1];
                22 vec4s16 = [0, 18, 114, 0];
                23 vec4s16 = [0, 18, 71, 1];
                24 vec4s16 = [0, 18, 77, 0];
                25 vec4s16 = [0, 18, 81, 0];
                26 vec4s16 = [0, 19, 71, 0];
                27 vec4s16 = [0, 19, 77, 0];
                28 vec4s16 = [0, 19, 62, 1];
                29 vec4s16 = [0, 19, 114, 0];
                30 vec4s16 = [0, 20, 71, 1];
                31 vec4s16 = [0, 20, 81, 0];
                32 vec4s16 = [0, 21, 71, 0];
                33 vec4s16 = [0, 21, 114, 1];
                34 vec4s16 = [0, 21, 99, 0];
                35 vec4s16 = [1, 0, 3, 0];
                36 vec4s16 = [2, 0, 1, 0];
                37 vec4s16 = [2, 0, 73, 0];
                38 vec4s16 = [2, 0, 21, 0];
                39 vec4s16 = [2, 0, 76, 0];
                40 vec4s16 = [2, 0, 12, 2];
                41 vec4s16 = [4, 0, 60, 0];
                42 vec4s16 = [4, 0, 73, 0];
                43 vec4s16 = [4, 0, 21, 1];
                44 vec4s16 = [4, 0, 5, 0];
                45 vec4s16 = [5, 0, 3, 0];
                46 vec4s16 = [6, 0, 8, 0];
                47 vec4s16 = [7, 0, 6, 0];
                48 vec4s16 = [7, 0, 108, 0];
                49 vec4s16 = [7, 0, 18, 0];
                50 vec4s16 = [7, 0, 105, 2];
                51 vec4s16 = [7, 0, 77, 0];
                52 vec4s16 = [9, 0, 105, 2];
                53 vec4s16 = [9, 0, 108, 0];
                54 vec4s16 = [9, 0, 18, 1];
                55 vec4s16 = [9, 0, 114, 2];
                56 vec4s16 = [9, 0, 10, 0];
                57 vec4s16 = [10, 0, 8, 0];
                58 vec4s16 = [11, 0, 3, 0];
                59 vec4s16 = [11, 2, 12, 1];
                60 vec4s16 = [12, 0, 11, 0];
                61 vec4s16 = [13, 0, 4, 0];
                62 vec4s16 = [13, 0, 2, 0];
                63 vec4s16 = [13, 0, 17, 2];
                64 vec4s16 = [13, 0, 94, 0];
                65 vec4s16 = [13, 0, 14, 0];
                66 vec4s16 = [14, 0, 15, 0];
                67 vec4s16 = [14, 1, 5, 0];
                68 vec4s16 = [14, 1, 2, 1];
                69 vec4s16 = [14, 1, 4, 1];
                70 vec4s16 = [14, 1, 13, 1];
                71 vec4s16 = [16, 0, 15, 0];
                72 vec4s16 = [16, 2, 17, 1];
                73 vec4s16 = [17, 0, 16, 0];
                74 vec4s16 = [18, 0, 19, 0];
                75 vec4s16 = [21, 0, 20, 0];
                76 vec4s16 = [22, 0, 24, 0];
                77 vec4s16 = [23, 0, 103, 0];
                78 vec4s16 = [23, 0, 22, 0];
                79 vec4s16 = [23, 0, 100, 2];
                80 vec4s16 = [23, 0, 27, 0];
                81 vec4s16 = [25, 0, 103, 0];
                82 vec4s16 = [25, 0, 71, 0];
                83 vec4s16 = [25, 0, 27, 1];
                84 vec4s16 = [25, 0, 26, 0];
                85 vec4s16 = [26, 0, 24, 0];
                86 vec4s16 = [27, 0, 28, 0];
                87 vec4s16 = [29, 0, 31, 0];
                88 vec4s16 = [29, 0, 75, 0];
                89 vec4s16 = [29, 0, 34, 2];
                90 vec4s16 = [30, 0, 75, 0];
                91 vec4s16 = [30, 0, 31, 1];
                92 vec4s16 = [31, 0, 32, 0];
                93 vec4s16 = [33, 0, 98, 0];
                94 vec4s16 = [33, 2, 34, 1];
                95 vec4s16 = [34, 0, 33, 0];
                96 vec4s16 = [35, 0, 37, 0];
                97 vec4s16 = [36, 0, 40, 0];
                98 vec4s16 = [36, 0, 87, 0];
                99 vec4s16 = [36, 0, 35, 0];
                100 vec4s16 = [36, 0, 97, 2];
                101 vec4s16 = [38, 0, 40, 1];
                102 vec4s16 = [38, 0, 87, 0];
                103 vec4s16 = [38, 0, 39, 0];
                104 vec4s16 = [39, 0, 37, 0];
                105 vec4s16 = [40, 0, 41, 0];
                106 vec4s16 = [42, 0, 46, 0];
                107 vec4s16 = [42, 0, 93, 0];
                108 vec4s16 = [42, 0, 49, 2];
                109 vec4s16 = [43, 0, 93, 0];
                110 vec4s16 = [43, 0, 46, 1];
                111 vec4s16 = [46, 0, 47, 0];
                112 vec4s16 = [48, 0, 44, 0];
                113 vec4s16 = [48, 2, 49, 1];
                114 vec4s16 = [49, 0, 48, 0];
                115 vec4s16 = [50, 0, 38, 0];
                116 vec4s16 = [50, 0, 36, 0];
                117 vec4s16 = [50, 0, 53, 2];
                118 vec4s16 = [52, 0, 51, 0];
                119 vec4s16 = [52, 2, 50, 1];
                120 vec4s16 = [52, 2, 36, 1];
                121 vec4s16 = [52, 2, 53, 1];
                122 vec4s16 = [52, 2, 38, 1];
                123 vec4s16 = [53, 0, 52, 0];
                124 vec4s16 = [53, 0, 54, 0];
                125 vec4s16 = [55, 0, 83, 0];
                126 vec4s16 = [59, 0, 84, 0];
                127 vec4s16 = [60, 0, 61, 0];
                128 vec4s16 = [62, 0, 63, 0];
                129 vec4s16 = [64, 0, 65, 0];
                130 vec4s16 = [66, 0, 67, 0];
                131 vec4s16 = [68, 0, 69, 0];
                132 vec4s16 = [70, 0, 82, 0];
                133 vec4s16 = [71, 0, 72, 0];
                134 vec4s16 = [73, 0, 74, 0];
                135 vec4s16 = [75, 0, 113, 0];
                136 vec4s16 = [76, 0, 60, 0];
                137 vec4s16 = [77, 0, 62, 0];
                138 vec4s16 = [78, 0, 64, 0];
                139 vec4s16 = [79, 0, 66, 0];
                140 vec4s16 = [80, 0, 68, 0];
                141 vec4s16 = [81, 0, 71, 0];
                142 vec4s16 = [82, 0, 77, 2];
                143 vec4s16 = [82, 0, 81, 2];
                144 vec4s16 = [82, 0, 80, 2];
                145 vec4s16 = [82, 0, 76, 2];
                146 vec4s16 = [82, 0, 79, 2];
                147 vec4s16 = [82, 0, 78, 2];
                148 vec4s16 = [84, 0, 0, 0];
                149 vec4s16 = [85, 1, 79, 0];
                150 vec4s16 = [86, 0, 85, 0];
                151 vec4s16 = [87, 0, 88, 0];
                152 vec4s16 = [89, 0, 91, 0];
                153 vec4s16 = [90, 0, 92, 0];
                154 vec4s16 = [90, 0, 89, 0];
                155 vec4s16 = [92, 0, 89, 1];
                156 vec4s16 = [92, 0, 90, 1];
                157 vec4s16 = [93, 0, 45, 0];
                158 vec4s16 = [95, 0, 96, 0];
                159 vec4s16 = [95, 2, 97, 1];
                160 vec4s16 = [97, 0, 95, 0];
                161 vec4s16 = [99, 0, 79, 1];
                162 vec4s16 = [100, 0, 110, 0];
                163 vec4s16 = [100, 0, 101, 0];
                164 vec4s16 = [100, 0, 102, 0];
                165 vec4s16 = [101, 0, 104, 0];
                166 vec4s16 = [101, 2, 100, 1];
                167 vec4s16 = [102, 0, 104, 0];
                168 vec4s16 = [103, 0, 104, 0];
                169 vec4s16 = [105, 0, 106, 0];
                170 vec4s16 = [106, 0, 107, 0];
                171 vec4s16 = [106, 2, 105, 1];
                172 vec4s16 = [108, 0, 109, 0];
                173 vec4s16 = [110, 0, 104, 0];
                174 vec4s16 = [114, 0, 62, 0];
            end;
        end;
    end;


Говорили что скриптов в бинах нет, а они есть. Да ещё какие, визуальные!
Даже зачем-то позиции блоков оставили. Можно блок-схему составить.
Modera
еее я посадил дерево.


И.. Я думаю статические модельки всё-таки можно попробовать конвертировать в формат игры. Там только одно число неизвестного назначения в заголовке осталось. Ну и коллизия не разобрана. Но я обязательно попробую, не смотря даже на это.
Modera
Да, наверно это число не сильно важно, ну или я его угадал.


Как выяснилось формат вершин немного не такой как написано в metro2033-tools. Никакой W компоненты там нет, на её месте нормаль упакованный(следующие два значения очевидно тангент и бинормаль). Четвертой компонентой у нормаля хранится AO, так что его неплохо бы считать.
xrModder
Почему в Metro: Last Light Redux у статичных моделей внутри ещё одна более грубая модель? Этот аналог HOM для статичных объектов или я ошибаюсь? А что если создать HOM для всех статичных объектов в сталкере? Будет ли существенный прирост производительности?
Modera
xrModder, я так думаю это лод. А может быть даже прогрессивная модель, такие в сталкире есть и используются.
Sub
Цитата(Modera @ 06.11.2018, 18:01) *
Говорили что скриптов в бинах нет, а они есть. Да ещё какие, визуальные!
Даже зачем-то позиции блоков оставили. Можно блок-схему составить.

так есть же разница - исполняемые файлы игры и скрипты, которые хранятся в бинарном формате?
atanda
Зачем игре с небольшими локациями ещё лоды? При игре я их как бы ни пытался - не заметил(даже переход).
xrModder
Цитата(Modera @ 15.11.2018, 21:08) *
xrModder, я так думаю это лод. А может быть даже прогрессивная модель, такие в сталкире есть и используются.

Посмотрел, но это не похоже на LOD, скорее походит на HOM.
Modera
Цитата(Sub @ 15.11.2018, 19:15) *
так есть же разница - исполняемые файлы игры и скрипты, которые хранятся в бинарном формате?

Есть разница. Только я не понял к чему это, под бинами я имел в виду файлы с расширением bin, а не exeшник.

Цитата(xrModder @ 15.11.2018, 21:17) *
Посмотрел, но это не похоже на LOD, скорее походит на HOM.

Покажи скрин. У меня ридакса нет под рукой, а "более грубая модель" это понятие растяжимое.

---
Посмотрел формат nxcform_pc, наверно я его не разберу. Слишкам сложна. Саму геометрию то я там нашел, а вот что есть всё остальное непонятно.
Примерное описание формата
Код
заголовок:
1 байт = всегда единица
4 байта = всегда 0x00001FDF
4 байта = неизвестно1, для уровней 0x7 или 0x8, для статических моделей 0x5
4 байта = неизвестно2, совпадает с неизвесным числом в заголовке статических моделей
4 байта = количество моделей в файле

модель:
1 байт = использовать строки или индекс
ЕСЛИ равен нулю
    3 строки в формате [4 байта длинна, строка, ноль] = шейдер, текстура, материал
ЕСЛИ равен единице
    2 байта = точно неизвестно(в файлах уровня, скорее всего индекс куда-то там)
4 байта = размер модели в байтах
8 байт = сигнатура NXS\001MESH
4 байта = всегда 0x00000001
4 байта = тип(?) если 0xA то индексы восьмибитные, если 0x12 то индексы 16-битные, если 0x8 то индексы восьмибитные и информация поcле индексов отличается от типов 0xA и 0x12
4 байта = всегда 0x3A83126F
4 байта = всегда 0x000000FF
4 байта = всегда 0xBDCCCCCD
4 байта = количество точек
4 байта = количество треугольников
(12 x количество точек) байт = точки x, y ,z
ЕСЛИ тип 0x12
    (6 x количество треугольников) байт = индексы
ЕСЛИ тип 0xA или 0x8
    (3 x количество треугольников) байт = индексы
.. то что дальше толком неизвестно
ЕСЛИ тип 0xA или 0x12
    4 байта = количество треугольников минус 1
SkyLoader
Цитата(xrModder @ 15.11.2018, 21:17) *
Посмотрел, но это не похоже на LOD, скорее походит на HOM.

Развёртка там есть? Может это модель для коллизии или чего-то такого? Если развёртка есть, то вариант с лодом тоже вполне возможен.
Cossack-HD
Цитата(SkyLoader @ 16.11.2018, 02:01) *
Цитата(xrModder @ 15.11.2018, 21:17) *
Посмотрел, но это не похоже на LOD, скорее походит на HOM.

Развёртка там есть? Может это модель для коллизии или чего-то такого? Если развёртка есть, то вариант с лодом тоже вполне возможен.

По-моему в Метро вполне есть лодирование. Оно даже в HL2 есть, причём агрессивное.
Cartoteka
Цитата(buffy @ 15.11.2018, 20:34) *
Зачем игре с небольшими локациями ещё лоды? При игре я их как бы ни пытался - не заметил(даже переход).



Ну, не 4A всегда гнались за технологиями (как говорил Проф о маркетинге Метро: «Продолжить борьбу за графический Олимп»). Ну а поскольку проработка мелких уровней в плане детализации очень большая (мелкие объекты, партиклы, освещение, динамика почти на каждом углу), необходимо же, чтобы игра не лагала и была оптимизация. Как говорил классик: что самое важное при запуске игры? - Получить возможность нафиг играть в неё.


Ну а то, что лоды и переход незаметны - тут это не совсем правда. В своё время как раз играл на старом компе (уже и конфигурацию не вспомню), то видел резкий переход лодов у моделей машин в Мёртвом городе в Metro 2033. Вроде бы в районе детской площадки. Но тут важно учитывать, что я играл на совсем низких настройках.

Ну а ещё в Мёртвом городе в Metro LL (НЕ в Redux версии) можно спокойно выйти за границы карты и наткнуться на пробку из малополигональных десятигранных машинок. Но это при условии, если делать это целенаправленно и знать туда дорогу :Р
Modera
Цитата(Modera @ 15.11.2018, 23:44) *
Посмотрел формат nxcform_pc, наверно я его не разберу.

А разбирать и не нужно было. smile.gif Модели в этом формате = обычные приготовленные модели PhysX.
Неизвестная чиселка1 = версия.

Так что пальма теперь стала осязаемой.
xrModder
Щя в наличии нету Metro: Last Light Redux, раньше при разборе моделей заметил. Покажу схематично на примере ящика:
Modera
xrModder, разве это похоже на HOM? Был бы хом, синих полосок небыло бы. Во первых хом модель должна содержать как можно меньше полигонов, во вторых эти полоски ничего не закрывают и толку от них как от никакого.

А вот в теме про разбор ресурсов МЛЛ писали про то что модельки после импорта содержат мусор. У тебя последняя версия плагина была? smile.gif
https://www.gameru.net/forum/index.php?show...t&p=1346820
xrModder
Цитата(Modera @ 18.11.2018, 23:54) *
xrModder, разве это похоже на HOM? Был бы хом, синих полосок небыло бы. Во первых хом модель должна содержать как можно меньше полигонов, во вторых эти полоски ничего не закрывают и толку от них как от никакого.

А вот в теме про разбор ресурсов МЛЛ писали про то что модельки после импорта содержат мусор. У тебя последняя версия плагина была? smile.gif
https://www.gameru.net/forum/index.php?show...t&p=1346820

Дело в том, что модель визуала самого объекта и то что находится внутри это раздельные объекты, т. е. ты можешь удалить последнюю и ничего не произойдет с визуалом. Ради интереса загружал текстуру на визуал - ошибок не заметил, всё правильно натягивается. А то что я привёл - это всего лишь схематично, нет там раздельные цветы, а все "видимые" поверхности полигонов направлены наружу. Сами объекты (то ли HOM, то ли LOD) чуть-чуть меньше визуала и действительно содержит гораздо меньше полигонов, чем визуал. И по форме похож на HOM объекты сталкера.
RedMagic
xrModder, может это меш для просчета коллизий?
Modera
Решил до кучи попробовать сконвертировать модель в уровень. В общем, получилось.

С уровнями есть засада, текстовый файлик level.pf. В нём первой строчкой идёт несколько чисел, три из которых являются:
1. размер вершинного буфера в байтах
2. он же плюс сорок
2. размер индексного буфера в байтах
Если эти числа на свои не поменять то вместо моделек будет каша.
xrModder
Цитата(Modera @ 21.11.2018, 01:13) *

Metro 2033?
Modera
xrModder, оно самое. Было бы странно если бы я в теме о метро 2033 писал про другую игру. wink.gif
abramcumner
Осталось инвентарь сделать и будет тот сталкер.
hi_flyer
Modera,
Пробовал спавнить ещё что нибудь помимо статичной геометрии? Может источники света например.
Modera
Цитата(abramcumner @ 21.11.2018, 17:41) *
Осталось инвентарь сделать и будет тот сталкер.

Так говорят все переносильщики сталкера на другие движки biggrin.gif А в метро инвентарь уже есть, правда немного не тот.

Цитата(hi_flyer @ 21.11.2018, 18:01) *
Modera,
Пробовал спавнить ещё что нибудь помимо статичной геометрии? Может источники света например.

Попробовал настольную лампу заспаунить, спаунится, светится, и пинать её можно. Только почему-то не разбивается.
Я думаю со спауном чего либо проблем быть не должно. smile.gif
Modera
Выкладываю декомпилятор конфигов. Вроде все level.bin'ы и конфиги из scripts.bin(не все) декомпилирует и компилирует. Но на работоспособность с игрой не проверял.

Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

Как использовать:

декомпиляция level.bin
Код
binunp -l -d level.bin level.txt

компиляця level.bin
Код
binunp -l -c level.txt level.bin

декомпиляция отдельного конфига
Код
binunp -d имяфайла.bin имяфайла.txt

компиляция отдельного конфига
Код
binunp -c имяфайла.txt имяфайла.bin

Есть ещё ключ -k, по идее его надо указывать при компиляции если при декомпилции было написано kind = 3, вот так
Код
binunp -k 3 -c имяфайла.txt имяфайла.bin

Но это может быть и не обязательно, не проверял. Конфиги с kind = 3 это например файлы level.environment.

split.exe просто положить рядом с scripts.bin, запустить и появится папка Scripts с отдельными файлами.
Склеивателя Scripts.bin обратно не существует laugh.gif

Кстати кто-нибудь понял как работают связи блоков в скриптах? smile.gif
Cartoteka
Помогал написать одному человеку сценарий для ролика по Metro 2033. Сейчас дошли до футажей, но, поскольку хочется сделать всё красиво, встал вопрос с отключением HUD, noclip и отравленным воздухом на уровнях с поверхностью. Никто не подскажет, как решить эти проблемы в оригинальном Metro 2033 2010 года?

Я слышал, что это можно сделать с трейнерами, но, может, кто-то знает более изящный способ?
Prodnik
Цитата(Modera @ 22.11.2018, 02:21) *
Выкладываю декомпилятор конфигов. Вроде все level.bin'ы и конфиги из scripts.bin(не все) декомпилирует и компилирует. Но на работоспособность с игрой не проверял.

Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

Как использовать:

декомпиляция level.bin
Код
binunp -l -d level.bin level.txt

компиляця level.bin
Код
binunp -l -c level.txt level.bin

декомпиляция отдельного конфига
Код
binunp -d имяфайла.bin имяфайла.txt

компиляция отдельного конфига
Код
binunp -c имяфайла.txt имяфайла.bin

Есть ещё ключ -k, по идее его надо указывать при компиляции если при декомпилции было написано kind = 3, вот так
Код
binunp -k 3 -c имяфайла.txt имяфайла.bin

Но это может быть и не обязательно, не проверял. Конфиги с kind = 3 это например файлы level.environment.

split.exe просто положить рядом с scripts.bin, запустить и появится папка Scripts с отдельными файлами.
Склеивателя Scripts.bin обратно не существует laugh.gif

Кстати кто-нибудь понял как работают связи блоков в скриптах? smile.gif

осталось только для ласт лайта, а так очень круто
JackieR
Цитата(Modera @ 14.11.2018, 02:56) *
Да, наверно это число не сильно важно, ну или я его угадал.


Как выяснилось формат вершин немного не такой как написано в metro2033-tools. Никакой W компоненты там нет, на её месте нормаль упакованный(следующие два значения очевидно тангент и бинормаль). Четвертой компонентой у нормаля хранится AO, так что его неплохо бы считать.

Не расскажешь как сделал? А то я уже пробовал менять оригинальные модельки местами, это скучно. Хочется чего нибудь своего добавить.
Modera
Цитата(Prodnik @ 28.11.2018, 22:50) *
осталось только для ласт лайта, а так очень круто

А в ластлайте конфиги разбираемые? smile.gif Нет они конечно все разбираемые, но есть разница нежду тем чтобы написать один универсальный распаковщик или писать много-много для каждого конфига по отдельности, предварительно поковыряв движок дизассемблером.
Ии, нифига это не круто. Даже хуже чем сталкеровский ACDC. Вот если бы я какой-нибудь нормальный редактор адаптировал под 4A Engine, то это было бы круто. Бессмыслено, беспощадно, но круто.

Цитата(JackieR @ 28.11.2018, 22:59) *
Не расскажешь как сделал? А то я уже пробовал менять оригинальные модельки местами, это скучно. Хочется чего нибудь своего добавить.

Канешно расскажу. Сконвертировал модельку пальмы из OGF, а потом добавил на уровень скопировав какую-то сущность(entity) класса STATICPROP и помоняв ей модель и координаты в матрице.
Исходники конвертера моделей есть в исходниках распаковщика конфигов, но скомпиленую версию я не выкладывал. Может потом выложу.

Я тут уже немного продвинулся, теперь конвертировать можно сразу уровень в уровень, без всяких левых утилит. Вот огрызок агропрома на 4а Engine. biggrin.gif
Cartoteka
Цитата(Modera @ 29.11.2018, 04:10) *
Вот огрызок агропрома на 4а Engine. biggrin.gif



Офигенно.

Эта котельная на каких движках только не успела побывать. На X-Ray, на Unreal, на id Tech 1, на Unity... теперь, вот, 4A Engine.
Modera
Цитата(Cartoteka @ 29.11.2018, 04:17) *
Эта котельная на каких движках только не успела побывать. На X-Ray, на Unreal, на id Tech 1, на Unity... теперь, вот, 4A Engine.

Надо эту котельную признать идеальным тестовым уровнем. Чем-то вроде изображения Лены или чайника Юта.

Цитата(Cartoteka @ 22.11.2018, 06:30) *
Я слышал, что это можно сделать с трейнерами, но, может, кто-то знает более изящный способ?

Наверно с трейнерами и есть самый изящный.
Cartoteka
Цитата(Modera @ 29.11.2018, 04:25) *
Наверно с трейнерами и есть самый изящный.



Да мы уже сняли с Бартом тот новый ролик по Метро. Так что уже пока без надобности.
abramcumner
Цитата(Modera @ 29.11.2018, 04:10) *
А в ластлайте конфиги разбираемые? smile.gif Нет они конечно все разбираемые, но есть разница нежду тем чтобы написать один универсальный распаковщик или писать много-много для каждого конфига по отдельности, предварительно поковыряв движок дизассемблером.

В релизном ЛЛ разбираемые, в первом или втором апдейте разбираемость убрали. Редуксы снова разбираемые.
Prodnik
Цитата(abramcumner @ 29.11.2018, 08:56) *
Цитата(Modera @ 29.11.2018, 04:10) *
А в ластлайте конфиги разбираемые? smile.gif Нет они конечно все разбираемые, но есть разница нежду тем чтобы написать один универсальный распаковщик или писать много-много для каждого конфига по отдельности, предварительно поковыряв движок дизассемблером.

В релизном ЛЛ разбираемые, в первом или втором апдейте разбираемость убрали. Редуксы снова разбираемые.

лучше сразу редуксы разбирать. У них с 33 и лл одинаковые движки и будет куда проще
JackieR
Цитата(Modera @ 29.11.2018, 04:10) *
Исходники конвертера моделей есть в исходниках распаковщика конфигов, но скомпиленую версию я не выкладывал. Может потом выложу.

Очень надеюсь что выложишь.
Modera
Новая версия: Нажмите для просмотра прикрепленного файла

Теперь умеет ещё декомпилировать некоторые неразбираемые конфиги, а именно textures.bin и environments.bin
Код
binunp -s textures.bin textures.txt
binunp -s environments.bin environments.txt

Ключ -k теперь может иметь значение 4, для компиляции неразбираемых конфигов:
Код
binunp -k 4 -c textures.txt textures.bin

У меня игра такой textures.bin вроде переварила, хотя я там ничего не менял, просто декомпилировал и обратно скомпилировал.

Утилита model конвертирует модели из OGF в формат metro 2033 и обратно:
Код
model -ogf2model model.ogf model.model
model -model2ogf model.model model.ogf

OGF модель должна быть не прогрессивной(легко исправить, но я забыл), и желательно с костью, в моделях без костей нет бинормалей и тангентов.
Ещё умеет конвертировать модель в nxcform_pc:
Код
model -model2nxcform_pc model.model model.nxcform_pc

Модели в уровень, указывать можно много
Код
model -model2level model1.model model2.model .. modelN.model leveldir

Уровень движка X-Ray в уровень 4A Engine, проверял вот этой картой: http://www.mediafire.com/file/dst6a565fwx7...May_15_2001.rar
Код
model -level2level xrayleveldir leveldir


В файлах shadersbytextures.txt и materialsbytextures.txt указывается какие шейдеры и материалы назначить в модели или уровне в зависимости от текстуры.
Какие шейдеры указывать можно узнать из конфига render_subst_all, материалы из game_materials. Конфиг материалов неразборный, но можно его открыть и поискать в нём строки начинающеися с materials\.
Текстуры в content можно класть прямо в формате .dds, движок их читает.
Modera
Цитата(Modera @ 22.11.2018, 02:21) *
Кстати кто-нибудь понял как работают связи блоков в скриптах? smile.gif

Я понял. xD У каждого блока есть точки входа/выхода(так кажется это называется, не знаком с визуальных программированием).

Запись связи представляет собой [блок1, точка1, блок2, точка2].

Рассмотрим простой скрипт балалайки, у которой можно провести пальцем по струнам:
Скрипт
Код
        vss_ver_6 = begin
            count : u32 = 1;
            rec_0000 = begin
                groups : array;
                groups = begin
                    count : u32 = 0;
                end;
                blocks = begin
                    block_count : u32 = 4294967295;
                    'array with no key' : array;
                    count : u32 = 4;
                    block_0000 = begin
                        clsid : stringz = 'triggers/use';
                        posx : u16 = 105;
                        posy : u16 = 53;
                        active : bool = True;
                        entity : 'entity_link, uobject_link' = 65535;
                        initiator : 'entity_link, uobject_link' = 65535;
                        player : bool = True;
                        usage_distance : fp32 = 2;
                        use_action : choose;
                        use_action : stringz = '';
                        use_offset : vec2f = [0, -0.100000001490116];
                        blink : bool = True;
                        blink_distance : fp32 = 10;
                    end;
                    block_0001 = begin
                        clsid : stringz = 'entities/entity self';
                        posx : u16 = 207;
                        posy : u16 = 62;
                    end;
                    block_0002 = begin
                        clsid : stringz = 'actions/play sound';
                        posx : u16 = 160;
                        posy : u16 = 53;
                        sound : sound;
                        sound : stringz = 'objects\usable_items\balalayka_use';
                        volume : fp32 = 1;
                        instant : bool = True;
                        ai_sound_type : u32 = 0;
                        stop_interval : fp32 = 0.5;
                        startus_intervalus : fp32 = 0;
                        looped : bool = False;
                        enable_slowmo : bool = True;
                        enable_fx : bool = True;
                        play_as_music : bool = False;
                    end;
                    block_0003 = begin
                        clsid : stringz = 'entities/entity ref';
                        posx : u16 = 162;
                        posy : u16 = 102;
                        target : 'entity_link, uobject_link' = 47361;
                    end;
                end;
                link_count : u32 = 5;
                0 : vec4s16 = [0, 0, 2, 0];
                1 : vec4s16 = [0, 0, 0, 1];
                2 : vec4s16 = [0, 2, 3, 0];
                3 : vec4s16 = [2, 0, 1, 0];
                4 : vec4s16 = [2, 2, 0, 0];
            end;
        end;


Как у любой программы, у этой есть точка входа. Ей является триггер на использование, блок0.
Первая связь: блок0, точка0, блок2, точка0. Точка0 у триггера срабатывает при использовании и выполняет блок2. Блок2 это проигрывание звука.
Вторая связь: блок0, точка0, блок0, точка1. Точка1 при входе в неё выключает триггер(параметр active), если убрать то по балалайке можно будет колотить без пауз.
Третья связь: блок0, точка2, блок3, точка0. Эта свзять указывает какой объект нужно поюзать, чтобы сработал триггер. Можно указать блок1(сама балалайка), но тут почему-то указан какой-то левый объект из блока3.
Четвёртая связь: блок2, точка0, блок1, точка0. Это свзять указывает из какого объекта нужно проиграть звук для блока2.
Пятая связь: блок2, точка2, блок0, точка0. Эта связь включает обрано триггер. Очевидно точка2 у блока проигрывания звука срабатывает по окончании звука. Ещё очевидно что точки имеют разное назначение на вход и на выход.

Весьма сложно. Страшно представить как этот язык игрой интерпретируется.
Diesel
Ребята, я открыл все локации, но скажу честно, я шокирован этим контентом - его много, но он убог. Там столько надо сшивать вертекстов, иначе кругом зияют дыры. В движке их-рей эти щели ого-го как светятся. Там даже верлд не спасает.
abramcumner
Цитата(Modera @ 07.12.2018, 00:42) *
Весьма сложно. Страшно представить как этот язык игрой интерпретируется.

Почему? Обычные сигнал/слоты или обычные события и подписка на них.

Раньше в движке названия точек лежали, думаю и сейчас тоже.
Modera
Цитата(abramcumner @ 07.12.2018, 01:22) *
Почему? Обычные сигнал/слоты или обычные события и подписка на них.

Хм, ну если о блоках думать как о объектах обменивающихся друг с другом сообщениями то да, уже не так сложно, как мне раньше показалось. А интерпретатора наверное вообще нет, вместо него какой-нибудь обновлятор блоков(шедулер), т.к. язык оказывается многопоточный. Например с такой программой:

Будут проигрыватся два разных звука с разной частотой повторения. Стрелки из триггера не передают управление другим блокам, они их активируют. Напоминает описание smalltalk'а, про то что каждый объект как отдельный компьютер. smile.gif

4A всё-таки крутой движок. smile.gif
abramcumner
Цитата(Modera @ 08.12.2018, 20:21) *
вместо него какой-нибудь обновлятор блоков(шедулер),

Ну да, можно на каждом фрейме опрашивать активные блоки. На самом деле схеме нужно обновлять максимум logic/delay, триггер и проигрыватель работают чисто по сигналам.
Ну и многопоточность для схемы выше вообще не нужна, проигрыватель отправил звук на воспроизведение и свободен, можно опрашивать следующие блоки.
JackieR
Цитата(Modera @ 22.11.2018, 02:21) *
Выкладываю декомпилятор конфигов. Вроде все level.bin'ы и конфиги из scripts.bin(не все) декомпилирует и компилирует. Но на работоспособность с игрой не проверял.

Работает. Занятно, для некоторых людей и мутантов нужно прописывать ещё и анимации. Иначе они будут спавниться в Т-позах либо просто стоять на месте.

Спойлер





atanda
При попытке сконвертировать любую модельку:
Modera
buffy, а можешь файл модельки выложить?
atanda
Modera, модель статическая, с динамическими у меня пишет "Must be hierarchy" и конвертация прерывается
https://yadi.sk/d/7WSKtWc7-chSxw

К слову говоря, как быть с моделями, которые разбиты на *.model *.mesh *.skeleton?
Modera
buffy, исправил одну багу. Скачать исправленную версию можно тут: https://drive.google.com/drive/folders/1y-u...zBLEBVqxhnfsrQx

Цитата(buffy @ 02.01.2019, 22:31) *
К слову говоря, как быть с моделями, которые разбиты на *.model *.mesh *.skeleton?

Использовать плагины для 3д пакетов или OGFViewer. Со скелетными моделями эта программа не работает.
Да и вообще я конвертирование моделек в формат сталкера делал только чтобы понять как нормали пакуются, основной посыл был наоборот в конвертировании в формат метро.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.