CommonRes- Ресурсы игры. Модели. Структура такова: Файлы brf - это "архивы" в которых в которых хранятся сами модели-меши и их лоды
дословно аббревиатура LOD расшифровывается, как Level Of Detail, что в переводе с английского означает «уровень детализации».Технология состоит в упрощении 3D-моделей путем подмены их на более примитивные по мере удаление виртуальной камеры от них. Это позволяет разгружать систему, и она работает над полной обработкой только тех объектов, что в пределах вашей видимости.
И вся информация по ним, а именно привязка к определёны материалом(текстурам) и к эффектам им сопутствующим(например блеск). Так же тут вся информация по привязке к "скелетам" которые использует игра. Вообщем всё, что так или иначе определяет модель.
Принимаемые форматы ресурсов:
.trf – Текстовые файлы — При загрузке игры автоматически конвертируются в бинарные
.brf – Бинарные файлы — Не требуют конвертации, более быстрая загрузка игры, меньше сжатие (по сравнению с текстовыми файлами)
Data В этой папочки у нас несколько видов файлов:
font_data - это шрифты, тут можно проявить фантазию и менять их на своё усмотрение.
flora_kinds - Здесь прописана растительность, используемая в игре при случайной генерации карт. А именно - прописаны названия каждого условно растения, могущего появиться на сгенерированной карте, и для каждого из этих растений прописана одна или моделей - так это растение будет выглядеть на сцене. Если для одного растения прописано несколько моделей - будет случайно выбрана одна из них, таким образом получается более разнообразная растительность.
ground_specs - Файл, содержащий названия текстур, которые могут использоваться при создании местности (terrain) на сцене.
item_modifiers- текстовый файл в котором заданы значения модификаторов предметов
skeleton_bodies - Тут наши, точнее не наши , а персонажей игры. "Косточки и их взаимодействие"
skyboxes- (небесный куб)- задний фон в изображениях трёхмерной компьютерной графики. Это текстовый файл т.е он определяет как текстуры скайбокса функционируют.
languages - Тут у нас папочка с языковыми текстовыми файлами, а именно те, что общие для всех модов. Не забываем , что коли нет этого языка тут то и в лунчаре мы его не выберем, для мода.
Modules- Тут хранятся наши моды-это так сказать список воспроизведение нашего проигрывателя.
music- ресурсы(файлы) музыки которые используются в игре, сама механика воспроизведения в другом месте.
Skins- Файлы
Simple
Mesh
Format. Морды лица используемые в редакторе встроенном в игру.
Sounds- ресурсы(файлы) звуков(стуки, бряки, крики... ) которые используются в игре, сама механика воспроизведения в другом месте.
Textures- Текстура всего что есть в игре, тут всё буквально и менюшки и вещички... Всё это плоские картиночки которые потом покрываю модели. Формат файлов dds- графический формат. например, что бы его открыть Фотошопом нужен плагин.
Принимаемые форматы текстур: .dds., tga, .jpg
binkplay.exe - BinkPlayer, проигрыватель, используемый игрой для воспроизведения intro-роликов (paradox и taleworlds) , сейчас появилась возможность создавать при помощи WSE ролики которые воспроизводит этот проигрыватель.
bump_shader, myshader, faceshader.pp;earlyz, mb_2a, mb_2в.fxo; fx_configuration.h - Шейдеры и их конфинурации
Ше́йдер (англ. Shader) — это программа для одной из ступеней графического конвейера, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения. Она может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки.
Программируемые шейдеры гибки и эффективны. Сложные с виду поверхности могут быть визуализированы при помощи простых геометрических форм. HLSL (High Level Shading Language) - язык программирования шейдеров, чемто похож на Cg, созданный Microsoft-ом, и который, используется вместе с DirectX. В действительности HLSL был создат двумя так сказать корпорациями Microsoft и nVidia. Это тот язык что испульзуться в нашем любимом мибе...
Вертексный шейдер
Выполняет обработку геометрии - изменяет позицию, текстурные координаты, цвет вершин. Также может выполнять вычислении освещения. Допустимое количество команд может достигать одной-двух сотен. Пример фрагмента кода:
float2 movepos = float2 (matWorld._m03, matWorld._m13) + vPosition.xy;
Пиксельный шейдер
Выполняет обработку цветовых данных, полученных при отрисовке треугольника. Оперирует с текстурами и цветом. Количество инструкций значительно ограничено, так, к примеру, в версии 1.4 оно не может быть больше 32. Пример фрагмента кода:
float4 tex;
if(apply_depth)
{
tex = tex2D(ReflectionTextureSampler, (0.25f * normal.xy) + float2(0.5f + 0.5f * (In.PosWater.x / In.PosWater.w), 0.5f - 0.5f * (In.PosWater.y / In.PosWater.w)));
}
else
{
//for objects use env map (they use same texture register)
tex = tex2D(EnvTextureSampler, (vView - normal).yx * 3.4f);
}
Из чего состоит шейдер:
Шейдер практически стотаит из 4-х чястей:
Структура шейдера, где мы декларируем обшие параметры.
struct VS_OUTPUT_NOTEXTURE
{
float4 Pos : POSITION;
float4 Color : COLOR0;
float Fog : FOG;
};
Вертексный шейдер с используевшимися в ней параметрами.
VS_OUTPUT_NOTEXTURE vs_main_notexture(float4 vPosition : POSITION, float4 vColor : COLOR)
{
VS_OUTPUT_NOTEXTURE Out;
Out.Pos = mul(matWorldViewProj, vPosition);
Out.Color = vColor * vMaterialColor;
float3 P = mul(matWorldView, vPosition); //position in view space
//apply fog
float d = length(P);
float4 vWorldPos = (float4)mul(matWorld,vPosition);
Out.Fog = get_fog_amount_new(d, vWorldPos.z);
return Out;
}
Пиксель шейдер, с обозначением к какому шейдеру принадлежит (обозначенно жирным)
PS_OUTPUT ps_main_notexture( VS_OUTPUT_NOTEXTURE In )
{
PS_OUTPUT Output;
Output.RGBColor = In.Color;
return Output;
}
И техника, так сказать компилируюшия эти 2 шейдера и записываюшия из в значение, в данном случяе notexture. Которое и прописываеться в BRF.
technique notexture
{
pass P0
{
VertexShader = compile vs_2_0 vs_main_notexture();
PixelShader = compile ps_2_0 ps_main_notexture();
}
}
postfx.fx- Этот файл используется для эффектов DoF и HDR. Вы не можете изменить postFX и его рендеринг, но можете применять его, чтобы производить различные tonemappings или эффекты.
paradox, taleworlds_intro.bik - Начальные видео заставки игры, в формате bik- популярный формат, используемый в основном, в видео играх.
SkinMagic, fmodex.dll - Динамически подключаемые библиотеки для ресурсов операционной системы.
rgl_log.txt - Файл регистрации, протокол, журнал или лог (англ. log) — файл с записями о событиях в хронологическом порядке. Ведение протокола, или протоколирование, — хронологическая запись с различной (настраиваемой) степенью детализации сведений о происходящих в системе событиях (ошибки, предупреждения, сообщения), обычно в файл. В абсолютном большинстве современных программ используются текстовые файлы протоколов (одно событие — одна строка), они легко генерируются программой и анализируются человеком. Исследование содержимого файла регистрации ошибок после возникновения неполадок часто позволяет понять их причины.
main - заставка модуля, здесь она представляет собой пустое окошко, с серым фоном, но в каждом модуле может стоять своя картинка, которая отображается при выборе его в лунчере игры.
warband_compatibility - Некое дополнение к module.ini в которое вносятся ресурсы для совместимости ИГ и Варбанда. Не используется.
Файлы мода
Итак давайте сразу уясним, что игра читает файлы и сортирует их выбор из разных источников по "правилам" указанным в файле module.ini папке модов. Не забываем что в моде загружаются оба источника информации(мод и сам корень игры). Выбор регламентируется выше указанным файлом. Для всех файлов не имеющих описания, оно идентично файлом корня игры.
Data - Все те же файлы, в Натив не чего нет, используются файлы из папки игры.
languages - Папка с языковыми файлами, которые используются в моде.
Music- Музыкальные файлы которые отображаются в моде.
Resource-Ресурсы мода, те которые будут загружаться именно в этом моде. Описание ресурсов идентично папке CommonRes игры. По ресурсам будет более подробно написано в части вводного курса по моделированию.
SceneObj- Тут находятся с генерированные, в редакторе встроенном в игру, сцены. Уточню: вид сцен. Сам фунционал сцен прописан в текстовом файле. На самом деле там много того что нам не видно. Но на самом деле это то же модели, просто они прозрачные. Например препятствия и пути движения, в виде не видимой разметки. Но это всё как бы модели, поэтому они и тут. Тут находится и координатная привязка объектов внутри нашей "коробочки" сцены.
Sounds- Звуковые файлы используемые в моде.
Textures- Текстуры предметов используемые только в этом моде.
Вот мы и добрались до сценария мода, да именно в подавляющем большинстве этих файлов и есть всё что запрограммировано в игре.
Текстовые файлы ( *.txt ) - из этих файлов игра узнаёт, что от неё требуется в той или иной ситуации. Они написаны на языке, максимально понятном для движка игры, и лишь местами содержат слова, понятные человеку. Для работы и творчества человека предназначены файлы модульной системы (см. ниже), производными от которых и являются текстовые файлы.
И так давайте сразу договоримся, что описывать большинство этих файлов мы не будем в виду того что это не актуально, да и практически не реально. Описание будет только для необходимых для моддинга файлов. А вот почему, они написаны самой игрой и написано они её для себя. Вот она то этот язык знает. Китайский не учил, но думаю тут разобраться нам будет стоить тех же усилий. Чисто теоретически, если править эти файлы то мы добъёмся результата так как их то и читает игра. А не ту
ужаснострашнонепонятнуюпорусскиненаписаную модульную систему. На самом деле это не так проще понять в 100 раз модульку чем понять язык текстовика. Вообщем поверте тем кто вам говорит , что глупо править тектовики. Для некоторых правок текстовых файлов есть так сказать переводчики. Вот ими и пользуйтесь. Не стоит спрашивать: "а какую мне поправить циферку, что бы у мня...." Возьмите словарь если не знаете английский и воспользуйтесь программами перевода циферек в букавки. И так надеюсь мы договорились! Как править эти циферки более серьёзно использую модульную системы мы поговорим и научим это делать, чуть позже. Мы не будем описывать текстовые файлы которые редактируются из модульной системы и не имеют практического применения редактирования их в текстовом формате.
game_variables-На самом деле этот файл относится ко всей игре. И его функционал не доступен для моддинга. В нем презентация игровых окон которые недоступны из модульной и забиты в движок . По идее можно изменить внешний вид расположение кнопок в таких окнах, как окно партии, окно итема , стартовая страница игры, окно загрузки сейвов и тд.
module. ini- Initialization file. Как мы видим из названия- это файл инициализации (от англ. initialization, инициирование) — создание, активация, подготовка к работе,
определение параметров. По другому это файл конфигурации. В этом файле задаются параметры загрузки ресурсов игры и к тому же определяются некоторые общие параметры(переменные) которые задают определённые числовые переменные- определяющие характеристику действия. Сейчас мы разберёмся что там внутри этого файла. Сразу замечу что вот этот знак #- комментарий, определяет игнорирование этой строки( просто пояснение для нас). Основной записью этого файла является-
значения параметров — строки вида «имя_параметра = значение».
module_name = Calradia - Название мода( собственно тут не принципиально)
compatible_with_warband = 1
num_hints = 12
auto_create_note_indices = 0 #Do not automatically search through all troops/factions/towns to check if they have note text.
map_min_x = -180
map_max_x = 180
map_min_y = -145
map_max_y = 145
map_sea_direction = -40 #wave foam direction
map_sea_wave_rotation = 300 #This is where the tear artefact is visible on the sea.
map_sea_speed_x = 0.02
map_sea_speed_y = -0.02
map_river_direction = 140
map_river_speed_x = 0.01
map_river_speed_y = -0.01
air_friction_arrow = 0.002
air_friction_bullet = 0.002
# use meshes map_tree_a through map_tree_r on for map trees
map_tree_types = 17
map_snow_tree_types = 3
map_steppe_tree_types = 5
map_desert_tree_types = 4
map_max_distance = 175.0
has_tutorial = 1
time_multiplier = 0.25
seeing_range = 6.5
track_spotting_multiplier = 0.8
# heroes with health below this will not appear in battles and will not contribute to party skills.
player_wounded_treshold = 5
hero_wounded_treshold = 15
skill_prisoner_management_bonus = 5
skill_leadership_bonus = 3
base_companion_limit = 20
player_xp_multiplier = 2.0
hero_xp_multiplier = 2.0
regulars_xp_multiplier = 3.0
display_wp_firearms = 0
# damage below this will not interrupt melee attacks
damage_interrupt_attack_threshold = 3.0
# Same thing for multiplayer
damage_interrupt_attack_threshold_mp = 1.0
# No extra penetration flags are set, so keep them ineffective
extra_penetration_factor_soak = 1.0
extra_penetration_factor_reduction = 1.0
# You can modify the damage system by editing the following values:
# The first three values determine the amount which will be directly subtracted from damage due to armor.
# The next three values determine the percentage reduction from the damage.
armor_soak_factor_against_cut = 0.8
armor_soak_factor_against_pierce = 0.65
armor_soak_factor_against_blunt = 0.5
armor_reduction_factor_against_cut = 1.0
armor_reduction_factor_against_pierce = 0.5
armor_reduction_factor_against_blunt = 0.75
horse_charge_damage_multiplier = 1.0
couched_lance_damage_multiplier = 0.65
fall_damage_multiplier = 1.0
#missiles with damage > shield_penetration_offset + shield_penetration_factor * shield
#will penetrate.
shield_penetration_offset = 30.0
shield_penetration_factor = 3.0
#setting speed_power to 2.0 makes damage scale with the square of missile's speed.
# you can set it to 1.0 to make it scale linearly as it was before.
missile_damage_speed_power = 1.9
melee_damage_speed_power = 2.0
multiplayer_walk_enabled = 0
mission_object_prune_time = 180
#change this to 0 if you want to keep the food slot in inventory window.
disable_food_slot = 1
# Change this to 1 if you want to load
# textures from Modules/<Module_Dir>/Textures/
scan_module_textures = 1
scan_module_sounds = 0
#edit mode should be enabled
#give_performance_warnings = 1
#You can also use load_mod_resource instead of load_resource to make sure you are reading files from module directory.- Тут написано, что для чтения из корня игры имя параметра load_resource , а для чтения файлов из папки мода load_mod_resource , так же тут можгут быть и коментарии, которые указывают на принадлежность(характеристику) ресурсов
#animations- вот это например комментарий, что далее следуют ресурсы, относящиеся к анимации.
load_resource = .............
load_mod_resource = ..............
#works_with_version_min = 1000 #deprecated, use module_version and compatible_savegame_module_version instead
#works_with_version_max = 1011 #deprecated, use module_version and compatible_savegame_module_version instead
#module_version = 0 #can be used for multiplayer and single player (saved game) module versioning
#compatible_module_version = 0 #can be used for multiplayer module versioning
#compatible_savegame_module_version = 0 #can be used for single player (saved game) module versioning
limit_hair_colors = 1
show_faction_color = 1
show_quest_notes = 1
dont_load_regular_troop_inventories = 1
#assign '1' for moveable physics on all scene props; no sokf_moveable flag will be needed
disable_moveable_flag_optimization = 0
#You can change the following to 1 for ease in module development
show_party_ids_instead_of_names = 0
crush_through_treshold = 2.4
map - текстовая запись глобальной карты модуля, в этом файле не чего редактировать не выйдет, та как он просто сгенерировн из графического файла сделанного нами движком(утилитой) игры. Т.е как такового файла больше не существует, он преобразован в текстовый формат, для чтения его игрой.
variables- список глобальных переменных используемых в моде.
Переменные бывают двух видов - локальные и глобальные. Локальные - это временные переменные, которые используются в пределах одного скрипта или триггера. Локальная переменная создается в одном скрипте, может использоваться только из этого скрипта, и при завершении скрипта она автоматически удаляется. Таким образом, локальные - это временные, служебные переменные. Глобальные переменные - это переменные, которые создаются в самом начале игры вне каких-либо скриптов или триггеров. Они существуют все время, пока запущена игра, они доступны из любого скрипта или триггера, но - они не могут динамически создаваться и удаляться в процессе игры. Только изменять свое значение. Таким образом, глобальные - это основные переменные, на которых основаны ключевые моменты игры, или же просто параметры, которые должны существовать всегда
variable_uses- числовые значение переменных.
Модульную систему
Модульная система (МС) — это один из основных инструментов моддинга. Она представляет собой набор скриптов на языке Python, который используется в МС только для перевода кода, написанного на специальном языке МС, в формат текстовых файлов, которые уже используются в игре. То есть скрипты МС не используются игрой напрямую — это лишь средство для создания текстовых файлов. Эти текстовые файлы, в которые переводятся скрипты МС, представляют собой текстовые документы, заполненные в основном цифрами и иногда — текстовыми строками. Еще важно понять, что в МС в качестве языка программирования используется вовсе не Python, а собственный самостоятельный язык, созданный и предназначенный только для моддинга Mount&Blade.
МС — это только одна из частей полноценного мода. Она является кодовым «скелетом» мода, без которого невозможно обойтись, однако же и мод, состоящий только из одного «скелета», также не является полноценным. Помимо кода МС хороший мод обязательно должен иметь красивый внешний вид — модели, текстуры, звуковое и музыкальное сопровождение и т. д.
Компоненты МСФайлы МС делятся на нескольких видов:module_ файлы — файлы, описывающие все объекты, данные и взаимодействия между ними в моде — собственно то, что будет переведено в текстовые файлы
header_ файлы — файлы, в которых содержатся списки и описания всех операций, констант и других объектов, которые могут использоваться в module_ файлах
process_ файлы — python'овские скрипты, предназначенные для «компиляции» МС — перевода кода, написанного в module_ файлах в текстовые файлы мода
ID_ файлы — упорядоченные списки всех объектов, содержащихся в module_ файлах.
variables.txt – текстовый документ, содержащий список всех глобальных переменных, использованных в коде
build_module.bat – исполняемый файл, предназначенный для компиляции МС
Основная часть МС — то, с чем приходится иметь дело любому модульщику — это module_ файлы. Именно они полностью описывают мод и являются его тем самым «скелетом», и именно в них и пишется весь код. Остальные файлы МС предназначены для правильной компиляции и создания текстовых файлов, а также для использования движком игры. Они не предназначены для редактирования и изменения, поэтому изменять их содержимое строго не рекомендуется.
Формат файловКаждый из module_ файлов на самом деле представляет собой скрипт на языке Python, содержащий только один большой массив, состоящий огромного количества чисел, констант и строк. Код, написанный на языке МС, является массивом операций, следующих одна за другой, которые при компиляции переводятся в вид числовых кодов. Точно так же все остальные объекты МС также переводятся в числовой вид.
Python сам по себе является просто средством перевода кода на языке МС в текстовые числовые файлы. Также перед компиляцией он проверяет код на ошибки и сообщает о них. Если в коде нет явных синтаксических и логических ошибок, он переводится в числовой вид и записывается в текстовые файлы мода.
И так, мы уже прочитали, что модульная система это набор "фраз" на чуждом нам языке. Не стоит расстраиваться. Коли это язык его просто надо выучить. А как любой язык, он не как не связан с другими языками существующими в мире, а это значит, что вовсе нам и не надо быть гениями программирования, будем "ботанами" и просто вызубрим и выучим правилам грамматики и синтаксиса этого языка, в идеале нам нужно ещё и писать, а не только читать. И так в изучении правил языка, а точнее их запоминании нам поможет справочник по модульной системе. А для понимания всего что написано, давайте просто смотреть на коды( в игре) с такого ракурса, что они написано для глупой машины которой так же как нам нужно всё показывать на пальцах. В таком духе и написан код. Всё расписано и разложено по полочкам, везде есть взаимосвязь в виде ссылок на другие записи.
Итак не надо прыгать с места в карьер, начать стоит просто с небольшого освоении файлов и записей. Это если бы вы поехали учить английский в Англию, при том не понимая даже одного слова. Освойте с начало хоть пару фраз и выучите алфавит.
Поэтому если мы хотим что бы произошло какое то действие-это модулька. Модулька -это к тому же и единственный путь увидеть какую то модель в игре, просто сунуть её в игру не достаточно, надо определить ей там место и указать характеристики. Соответственно и искать надо ответы в темах связанных с модульной системой.
Модели, текстуры...
МоделиВсё, что мы видим в игре, состоит из модели и наложенной на неё текстуры. Что то зашито в движёк игры, что то можно редактировать менять или добавлять своё. Начнём с понятия, что такое модель вообще: 3D модель- Трёхмерная графика (3D Graphics, Три измерения изображения, 3 Dimensions, рус. 3 измерения) — раздел компьютерной графики, совокупность приемов и инструментов (как программных, так и аппаратных), предназначенных для изображения объёмных объектов. Три плоскости три оси позиционирования, вам будет это полезно знать не только в плане моделирования, но в плане модульной системы, так как все предметы так или иначе присутствующие в игре, должны быть позиционированы и у них должны быть координаты нахождения, например тот или иной текст в презентациях. Вообще позиционирования доступно прямо в игре из различных её утилит, кроме позиционирования, возможно и смена размеров отображения различных предметов или целых объектов, но всё то же определяется по позициям или осям.
Сами модели находятся в игре в формате brf это двоичный код, необходимый для чтения этой модели движком игры, но в этом файле храниться не только вид объекта, но привязка к скелету, определенный ей материал(текстура) и другие параметры характеризующие отображение её взаимодействие модели в игре. Сами модели создаются в разных форматах 3D моделирования obj,3ds, а только потом уже принимают формат двоичного кода. Теперь поговорим о некоторых особенностях моделей в игре и их условной классификации.
Условно используемые игрой модели можно разделить на 4 типа, с этом связано различное форматирование при их конвертировании из двоичного кода:
-Модели оружия, щитов, шлемов, предметов, строений. Не содержат ничего кроме сведений о геометрии самой модели. Экспортируются в формате OBJ, без привязки к скелету
- Модели тел, костюмов, обуви, лошадей. Содержат сведения о геометрии, один из двух игровых скелетов и сведения о привязке модели к скелету. Экспортируются в формате SMD.
Модели рук, перчаток, специфические модели (иконки армий на глобальной карте и т.п.) Содержат анимацию-Вертексную анимацию
Вертекс - это вершина (в геометрическом смысле). То есть точка, в которой сходятся полигоны.
Вертексная анимация - это когда для каждого последующего кадра полностью трансформируется модель путем перемещения вертексов. Простыми словами это последовательное воспроизведение новых изменённых объектов. Это чрезвычайно муторный процесс, но у вертексной анимации тоже есть преимущества - с помощью нее можно анимировать что угодно и как угодно, в то время как возможности скелетной анимации ограничиваются движениями скелета.
воспроизведение, состоящую из нескольких кадров. Экспортируются в формате MD3 или покадрово как OBJ.
Модели объектов для сцен - здания, деревья и т.п. Отличаются от других моделей тем, что могут иметь более 1 материала. При импорте в брф, эдитор спросит, надо ли разбить базовую модель. Меш разбивается на n частей, где n - число использованных в модели материалов. Такие модели называются мультимешами. В BRF Editor'е можно переключаться в режим показа модели целиком или по частям нажатием на кнопку Multi Mesh.
Сцены
Сценой в игре называется любое пространство, где главный герой и всевозможные персонажи ходят, прыгают, дерутся и т.д. Игрок проводит тут львиную долю своего времени, поэтому уметь работать со сценами важно для каждого стоящего мода.
Как бы ни выглядела сцена, всё в ней формируется движком игры за счёт сведений из нескольких источников, и большинство из них можно редактировать. Можно сказать, что это наши механизмы формирования сцен, далее перечислим их в порядке от самых основных к менее очевидным.
1. Описание в файле scenes.py модульной системы.
Вот два самых стандартных примера такой записи:
(
"quick_battle_1",
sf_generate,"
none", "
none", (0,0),(120,120),-100,"
0x30401ee300059966000001bf0000299a0000638f",
[],[],"
outer_terrain_plain"),
("
tutorial_2",
sf_indoors,"
tutorial_2_scene", "
bo_tutorial_2_scene", (-100,-100),(100,100),-100,"0",
[],[]),
Тут мы можем выделить 10 частей
1)
название сцены, добавляя приставку scn_ его используют для обращения к сцене из других файлов модульной системы. Также для каждой сцены предусмотрен индивидуальный файл с таки же названием (см. ниже).
2)
флаги, подробно расписаны в файле header_scenes.py, если их несколько, то разделяются знаком вертикальной черты. Определяют особенности освещения, использование ландшафта и др.
3)
имя меша - обычно тут указывается имя модели помещения, у уличных сцен из-за ненужности такой модели обычно написано "none" (читай - "отсутствует"). Для уличных сцен применяется
outer_terrain модель окружения, обычная модель из ресурсов игры, которую можно создать как любой меш(модель)
4)
имя колижн-меша, он необходим, чтобы стены, пол и другие части помещение не только выглядели твёрдыми, но и вели себя соответственно. У уличных сцен также "none".
5) первые круглые скобки - минимальная точка координат, дальше которой в сцене нельзя пройти.
6) вторые круглые скобки - максимальная точка координат, дальше которой в сцене нельзя пройти. Обе точки нужны для экономии машинных ресурсов, чтобы компьютер не обрабатывал бесконечное пространство. При изменении сцен стоит помнить, что указываемые здесь координаты должны соответствовать реальным размерам сцены (чтобы персонаж не наталкивался на невидимые стены).
7) уровень воды, как правило не редактируется.
8)
код ландшафта - здесь ноль у интерьерных сцен и длинная последовательность знаков у остальных. Код содержит информацию о размере сцены, типе местности (снег, пустыня, лес), неровностях рельефа, характере растительности, наличии рек. Сам код нужен для чтение движком игры, нам же возможно его сгенирировать, доступной утилитой движка игры- редактором ландшафтов(тераинов)
9) первые квадратные скобки, в нынешних версиях игры не используется, иногда там стоит слово "exit".
10) вторые квадратные скобки, пустые или содержат имена юнитов (но без обычной приставки trp_), к инвентарю которых можно получить доступ в данной сцене. Чаще всего, если тут кто-то и прописан, то это или "сенешаль" (инвентарь игрока-владельца замка), или "бонусный сундук".
2. Файл сцены, находится в папке SceneObj вашего мода (если её нет, скопируйте её из Native), носит имя "название_сцены.sco(файл скомпилированный из разных источников движком игры(Встроенным редактором сцен
Собственно говоря, это и есть движёк игры, такой же компилятор как и Питон, он просто собирает в одно место информацию из разных файлов и позволяет нам их наглядно редактировать.
)" и содержит самые мелкие подробности о реальном виде вашей сцены. То есть - где и как Вы вручную поменяли ландшафт, разместили различные объекты и растительность (включая их масштаб и углы наклона), нанесли на повержность земли текстуру песка или камня, покрасили снег в зелёный цвет, проложили АИ-меши
AI Mesh - это сеть, указывающая NPC, где он может пройти, а где нет. Если, допустим, какой-нибудь NPC вдруг захотел прогуляться из точки A в точку B, он делает это так: находит кратчайший путь, проверяет, может ли он там пройти, и только потом (о, чудо!) идет. Если Вы построили стену у него на пути, то он врежется в нее и застрянет там навечно. Но если Вы сделаете AI mesh так, чтобы он учитывал эту стену, то NPC не только не врежется, но и обойдет злополучную стену кратчайшим путем
для компьютерных болванчиков... Следует знать, что объекты в файлах сцен запоминаются по названиям, и переименование объектов приведёт к их исчезновению из сцены. Для того, чтобы создать новый файл сцены, достаточно описать его так, как указано в предидущем абзаце, войти в сцену внутри игры, а потом с помощью встроенного редактора сделать и сохранить хоть какое-то изменение. Например - поставил домик и сразу удалил, а выходя из режима редактирования подтвердил изменения. В папке SceneObj при этом создаётся новый файл. В описанном примере его размер составит менее 1Кб, какой бы большой ни была сцена. Чем больше изменений в редакторе Вы будете делать, тем сильнее "разжиреет" этот файл.
3. События (триггеры) в файле module_mission_templates.py Чтобы на сцене кипела жизнь, ей должна соответствовать определённая миссия (грубо говоря, сценарий). Вызов сцены в модульной системе сопровождается вызовом миссии (сценария). Далеко не всегда они составляют жёсткие пары. Обычно одна миссия используется для многих однотипных сцен, например, есть 110 деревень, для всех них в мирной ситуации используется миссия "village_center", а при сражении "lead_charge". Другой пример - на сцене Вы размещаете осадную башню, а вот её движение и поведение "актёров" определяется миссией.
4. Внутриигровые меню в файле module_game_menus.py - для каждой активной партии (т.е. города, отряда, деревни) игра с помощью скриптов определяет, какое именно меню вызвать. Зачастую внутри меню содержатся дополнительные проверки и вычисления, оценивающие игровую ситуацию. Дружественный это замок или враждебный? Соответственно используется либо мирная сцена, либо сцена штурма. Также в меню часто определяются присутствующие на сцене персонажи (стражники, гуляющие местные жители, бандиты). Самым обширным меню обладают города, там можно выбрать переход в одну из нескольких сцен (покои, таверна, улицы...).
(modify_visitors_at_site, "scn_tutorial_training_ground"), надо определить посетителей (персонажей) на данной сцене
(reset_visitors), сбрасываем старые настройки
(set_visitor, 43, "trp_veteran_fighter"), в точке входа №43 пусть появится указаный юнит
(set_jump_mission,"mt_tutorial_training_ground"), выбираем миссию (сценарий)
(jump_to_scene,"scn_tutorial_training_ground"), переходим к самой сцене
(change_screen_mission), обновляем экран
Каждый из пунктов меню внутри самой сцены можно продублировать объектами, которые называют "passage". Такой объект в игре проявляет себя надписями типа "Вход в магазин" или "Вход в тюрьму" и имеет две характеристики, указываемые в окошках Entry No и Menu Item No. В первом мы ставим номер точки входа, на которую хотим отправить игрока, во втором - порядковый номер пункта меню, из которого игра будет узнавать сцену. Причём нумерация начинается с нуля, то есть если приведёный выше пример взят из третьего по счёту пункта меню, то внутри редактора сцен мы поставим пассаж и укажем ему Menu Item No = 2. Игра найдёт этот пункт меню и использует указанные в нём сцену, миссию, выставит персонажей.
5. Скрипты в module_scripts.py, прежде всего script_game_start, так как он задаёт свойства очень многих игровых объектов. Я не буду рассматривать этот скрипт подробно, приведу в качестве иллюстрции несколько вырванных по-отдельности строк, по которым можно найти некоторые важные блоки в скрипте
(нажмите для открытия / скрытия)
(faction_set_slot, "fac_culture_1", slot_faction_tier_3_troop, "trp_swadian_footman"), указываем для фракции юнитов для пополнения гарнизонов и отрядов, они же используются как стражники
(faction_set_slot, "fac_culture_1", slot_faction_town_walker_male_troop, "trp_town_walker_1"), указываем для фракции прохожих (горожан, сельчан)
(party_set_slot,":town_no", slot_town_prison, ":cur_object_no"), указываем для города, какая сцена соответствует отдельным его частям (магазин, арена, тюрьма...)
(party_set_slot,"p_castle_1", slot_center_siege_with_belfry, 1), указываем для замков и городов, будет ли при штурме использоваться осадная башня
6. Свойства объектов сцены (предметов) в module_scene_props.py Это хорошо заметно на примере тех из них, которые описываются не одной строкой, а целой последовательностью. Фактически там содержатся небольшие скрипт,ы обеспечивающие избирательное поведение предметов, например - факел горит ночью, но не днём; от чучела при ударе летит солома, идёт пыль, раздаётся характерный звук, а в итоге оно падает; с дерева падают сухие листья; из трубы идёт дым. Все эти явления задаются как свойства объектов ещё до помещения их на сцену.
7. Описание растительности в файле Flora_kinds.py (он не в папке Module_system, а в папке Module_data). Сюда большинство модод