Как можно разнообразить юниты в моде, используя массив текстур

Discussion in 'Моддинг' started by Awar, Nov 13, 2019.

  1. Awar

    Awar Well-Known Member

    Текст подправлен 15.06.2020 (исправлен код настройки материалов)

    Общение с Ebel натолкнуло на мысль, как можно разнообразить действующие юниты через Мод в К3.

    Рассмотрим стандартный файл описания объекта юнита, для примера взят знаменосец из мода
    state_vs_country_plus_16.51

    Файл, ..\data\objects\units\flagmanlatepru
    Нас будет интересовать секция посвященная текстуре юнита, materialproperty.

    materialproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=materialproperty}
    Mesh[0].DefaultMaterialName = flagmanlatepru
    Mesh[0].UseableMaterials[0] = flagmanlatepru
    section.end

    В секции определена единственная текстура flagmanlatepru.
    Что мы делаем. Заменяем этот абзац на следующий.

    materialproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=materialproperty}
    Mesh[0].DefaultMaterialName = flagmanlatepru
    RandomMaterialName = True

    Mesh[0].UseableMaterials[0] = flagmanlatepru
    Mesh[0].UseableMaterials[1] = flagmanlatepru2
    Mesh[0].UseableMaterials[2] = flagmanlatepru3
    Mesh[0].UseableMaterials[3] = flagmanlatepru4
    Mesh[0].UseableMaterials[4] = flagmanlatepru5

    section.end



    Главное в этом блоке это возможность описать целый массив текстур. Плюс активизирована переменная RandomMaterialName.
    Теперь программа «случайным» образом перебирает текстуры и добавляет их к юниту.

    Заготавливаем новый набор текстур для знаменосца: = flagmanlatepru2, flagmanlatepru3, flagmanlatepru4, flagmanlatepru5.
    В текстуре изменен флаг, а картинка самого юнита оставлена прежней.
    Прописываем новые текстуры в файле units.mat (для мода state_vs_country_plus_16.51 в units_rise18.mat)

    Пример записи текстуры
    section.begin {refurl=.\data\materials\ref\refunit.mat}
    Material.Name = flagmanlatepru2
    Material.Texture.image = .\data\materials\units\offdrum18\flagmanlatepru2.dds
    section.end

    Запускаем мод и смотрим, что получилось.
    [​IMG]
    С новыми знаменосцами отряды будут представлять разные полки и батальоны.
    [​IMG]

    Добавим возможность прусскому гусару менять масть коней.

    Файл ..\data\objects\units\hussarlatepru.prop
    Нас интересует секция коня гусара

    autochildrenproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=autochildrenproperty}
    Enabled = True
    Mesh[0] : struct.begin
    Children : struct.begin
    [0] : struct.begin
    BaseName = hussarpru_horse
    DefaultMeshName = hussarpru_horse.mesh
    Mesh[*] = hussarpru_horse.mesh
    DefaultMaterialName = horsehussarlateprudip
    Materials[*] = horsehussarlateprudip
    struct.end
    struct.end
    struct.end
    section.end


    Меняем выделенныю строку Materials[*] = horsehussarlateprudip на

    RandomMaterialName = True
    Mesh[0].UseableMaterials[0] = horsehussarlateprudip
    Mesh[0].UseableMaterials[1] = horsehussarlateprudip2
    Mesh[0].UseableMaterials[2] =horsehussarlateprudip3
    Mesh[0].UseableMaterials[3] =horsehussarlateprudip4
    Mesh[0].UseableMaterials[4] =horsehussarlateprudip5
    Mesh[0].UseableMaterials[5] =horsehussarlateprudip6



    Добавляем новые текстуры коней, прописываем их в в файле units.mat (для мода state_vs_country_plus_16.51 в units_rise18.mat) и запускаем мод

    [​IMG]

    [​IMG]


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



    15 июня 2020
    Более сложный вариант. Мы хотим разнообразить выпуск юнитов путем сменой модели (mesh) из списка.

    Нам понадобятся юниты с одинаковой анимацией. Все примеры берутся из
    Мод-тест State vs Country Imperia
    http://www.cossacks3.com/forum/index.php?threads/state-vs-country.30223/page-91#post-89514


    Необходимо поменять два файла.
    1 Файл описания актера (mesh)

    Файл, ..\mods\state_vs_country_imperia\data\actors\units\officer19gvarus.actor

    Жирным шрифтом выделены куски для добавления

    section.begin {refurl=.\data\actors\ref\refunit.actor}
    ShaderLODList.List[0].ShaderID = 18
    ShaderLODList.List[0].ShaderIDIM = 11
    Animations.LoadFromFile = .\data\animations\aaf\officer19gvarus.aaf
    ActorList.Items[0].Name = officer19gvarus.mesh
    ActorList.Items[0].LODList.Items[0].MeshObjects.LoadFromFile = .\data\actors\units\officer19gvarus.oss
    ActorList.Items[1] : struct.begin {refurl=.\data\actors\ref\refunit.actor; refkey=.ActorList.Items[0]}
    Name = officer19gvarus2.mesh
    LODList.Items[0].MeshObjects.LoadFromFile = .\data\actors\units\officer19garrus.oss
    struct.end

    section.end

    2 Файл описания юнита, obj

    ..\mods\state_vs_country_imperia\data\objects\units\officer18laterusgva.prop

    Раздел actorproperty

    actorproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=actorproperty}
    LODActorName = officer19gvarus
    DefaultMeshName = officer19gvarus.mesh
    RandomMeshName = True
    UseableMeshes : struct.begin
    [0] = True
    [1] = True
    struct.end

    section.end

    Раздел Материалов

    materialproperty : section.begin {refurl=.\data\objects\ref\refunit.prop; refkey=materialproperty}
    Mesh[0].DefaultMaterialName = officer19gvarus
    Mesh[0].RandomMaterialName = True
    Mesh[0].UseableMaterials[0] = officer19gvarus
    Mesh[0].UseableMaterials[1] = officer19gvarus01
    Mesh[1].RandomMaterialName = True
    Mesh[1].DefaultMaterialName = officer19gvarus2
    Mesh[1].UseableMaterials[0] = officer19gvarus2
    Mesh[1].UseableMaterials[1] = officer19gvarus3

    section.end

    На скрине юнит, гвардейский офицер, случайно меняет и mesh, и material
    [​IMG]
     
    Last edited: Jun 15, 2020
    ComDiv, Johny, Loner and 1 other person like this.
  2. Loner

    Loner Well-Known Member

    Impressive stuff Awar.
     
  3. Ēadweard De Mylae

    Ēadweard De Mylae New Member

    Привет.

    Большое спасибо за этот урок, который принесет больше разнообразия в единство игры.

    Однако у меня есть вопрос.
    Можно ли сделать то же самое с сеткой?
    Если возможно, если кто-то может объяснить это мне.
    Потому что вы должны управлять сменой 3D-модели и анимации.

    заранее спасибо
     
  4. Awar

    Awar Well-Known Member

    Исправлен код смены материалов
    RandomMaterialName = True
    Mesh[0].UseableMaterials[0] = flagmanlatepru
    Mesh[0].UseableMaterials[1] = flagmanlatepru2



    Смена mesh теоретически прописана в свойствах. На практике пока не получилось.
     
  5. Awar

    Awar Well-Known Member

    Добавлено в тему изменение случайным образом mesh
    http://www.cossacks3.com/forum/inde...-юниты-в-моде-используя-массив-текстур.30443/
     
  6. Ēadweard De Mylae

    Ēadweard De Mylae New Member

    Отлично. Большое спасибо за вашу отзывчивость и все объяснения. Спасибо @Awar
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice