Модульная Система - Создание карт.
ВРС - встроенный редактор сцен, не приспособлен для создания новых карт, в отличии от модульной системы - о ней вам лучше спросить у Dragon'a
А? Меня кто-то звал? А, это. Вам рассказать? Отказы я не принимаю, по этому начнём!
Итак, сегодня мы поговорим о Модульной Системе (МС), а точнее о создании мультиплеерных карт на ней (я не буду говорить как настраивать МС и т.п., я просто покажу, как и что делать с сетевой картой).
Сцена-болванка
Сцена-болванка - это та сцена которая ни в чем не задействована и там ничего нет. Сейчас мы ее создадим, что бы потом добавить ее в сетевую игру. Но для начала разберем запись сцены.
("multi_scene_14",sf_generate,"none", "none", (0,0),(100,100),-100,"0x0000000040000c910003e8fa0000538900003e9e00005301",
[],[],"outer_terrain_snow"),
"multi_scene_14" — идентификатор сцены, не должны повторяться, т.е следующие сцены должны быть другими (multi_scene_28).
sf_generate - «флаг сцены». Можно добавлять другие, только, что бы они сами себе не противоречили.
Список флагов
sf_indoors - На сцене нету неба и света солнца;
sf_force_skybox - Добавляет небо даже если sf_indoors уже есть;
sf_generate - Создаёт землю по коду сцены;
sf_randomize - Создаёт случайную землю по коду сцены;
sf_auto_entry_points - Автоматически создаёт точки входа (ТВ);
sf_no_horses - Лошади не доступны на сцене;
sf_muddy_water - Делает всю воду грязной.
sf_force_skybox - Добавляет небо даже если sf_indoors уже есть;
sf_generate - Создаёт землю по коду сцены;
sf_randomize - Создаёт случайную землю по коду сцены;
sf_auto_entry_points - Автоматически создаёт точки входа (ТВ);
sf_no_horses - Лошади не доступны на сцене;
sf_muddy_water - Делает всю воду грязной.
«"none" №1» — модель сцены, рекомендуется использовать только для помещений;
«"none" №2» — тело (физическая модель) сцены, рекомендуется использовать только для помещений;
«(0,0)» — Минимальная координата, за которую не может заходить игрок;
«(100,100)» — Максимальная координата, за которую не может заходить игрок;
«-100» — уровень воды
«"0x0000000040000c910003e8fa0000538900003e9e00005301"» - код сцены, определят весь базовый ландшафт.
Чтобы создать новый код сцены необходимо:
1) включить режим редактирования (см. «Запуск редактора», пункты 1-4);
2) запустить любую модификацию;
3) выйти на стратегическую карту;
4) нажать кнопку «Территория» («Generate terrain») в нижнем левом углу;
5) установить нужные параметры;
6) сгенерировать карту;
7)скопировать код, который появился сверху.
1) включить режим редактирования (см. «Запуск редактора», пункты 1-4);
2) запустить любую модификацию;
3) выйти на стратегическую карту;
4) нажать кнопку «Территория» («Generate terrain») в нижнем левом углу;
5) установить нужные параметры;
6) сгенерировать карту;
7)скопировать код, который появился сверху.
«[] №1» - список сцен, доступных с этой (не корректно работает, обещают убрать);
«[] №2» - список сундуков, доступных на сцене. Чтобы работало, нужен прописанный сундук и его модель на сцене;
«"outer_terrain_snow"» - окружение сцены.
Список окружений
«"outer_terrain_plain"» - поля;
«"outer_terrain_snow"» - снега;
«"outer_terrain_steppe"» - степи;
«"outer_terrain_desert"» - пески;
«"outer_terrain_beach"» - с одной стороны море у края, а с другой поля;
«"outer_terrain_town_thir_1"» - залив, окружённый горами, море несколько вдалеке, видны кораблики
Ок, мы её разобрали, теперь будем добавлять.
Откройте «module_scenes» и найдите следующее:
("multiplayer_maps_end",sf_generate,"none", "none", (0,0),(100,100),-100,"0x00000001300389800003a4ea000058340000637a0000399b",
[],[],"outer_terrain_plain"),
Выше этого будет:
("multi_scene_13",sf_generate,"none", "none", (0,0),(100,100),-100,"0x00000001300389800003a4ea000058340000637a0000399b",
[],[],"outer_terrain_plain"),
("multi_scene_14",sf_generate,"none", "none", (0,0),(100,100),-100,"0x0000000040000c910003e8fa0000538900003e9e00005301",
[],[],"outer_terrain_snow"),
2)Скопируйте любую запись сцены и измените её по своему усмотрению (не забудьте, что идентификатор должен быть уникальным). Всё что будете делать помещайте до строки «"multiplayer_maps_end"».
3) Сгенерируйте код сцены (если необходимо) и вставьте в запись вашей сцены;
4) Сохраните и скомпилируйте.
Всё, теперь сцена доступна из списка «Quick Scene Chooser».
Сделали? Теперь перейдём к второму шагу.
Добавление сцен в сетевую игру.
Чтобы добавить сцену в сетевую игру (со стороны сервера), вам потребуется поработать с тремя файлами: «module_scenes», «module_strings» и «module_scripts».
1) Создайте запись сцены-болванки.
2) Откройте файл «module_strings»;
3) Найдите
"multi_scene_1", "Ruins"
("multi_scene_1" — идентификатор сцены, "Ruins" - название сцены, отображаемое в игре);
3) Скопируйте любую строчку и вставьте до «"multi_scene_end"»;
4) Измените идентификаторна свой и вставьте желаемое имя;
5) Откройте «module_scripts» и найдите
(eq, ":game_type", multiplayer_game_type_team_deathmatch)
6) Ниже найдите запись
(troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 1, "scn_ruins")
Там перечислен список карт, доступных для загрузки в разных режимах;
7) Скопируйте любую из этих строк и вставьте до «(assign, ":num_maps", «число»)» в нужном режиме;
8) Измените идентификатор сцены на ваш и число после «+» на плюс один (т.е. если последняя запись сцены "+15", то ваша будет "+16");
9) Измените «число» в «(assign, ":num_maps", «число»)» на плюс один (т.е. если сцен было 15, с вашей стало 16, пишите 16);
(troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 7, "scn_mp_beach_landing"),
(troop_set_slot, "trp_multiplayer_data", multi_data_maps_for_game_type_begin + 8, "scn_mp_stamford_bridge"),
10) Сохраните и скомпилируйте.
Кажется всё! Не стесняйтесь спрашивать. Многое скопипастил у Лемранта
Update за 19.04.2013 (текст Hunterwolf'а)
Сценой в игре называется любое пространство, где главный герой и всевозможные персонажи ходят, прыгают, дерутся и т.д. Игрок проводит тут львиную долю своего времени, поэтому уметь работать со сценами важно для каждого стоящего мода.
Как бы ни выглядела сцена, всё в ней формируется движком игры за счёт сведений из нескольких источников, и большинство из них можно редактировать. Можно сказать, что это наши механизмы формирования сцен, далее перечислим их в порядке от самых основных к менее очевидным.
Описание в файле scenes.py модульной системы:
Тут мы можем выделить 10 частей:
1 - название сцены, добавляя приставку scn_ ,его используют для обращения к сцене из других файлов модульной системы. Также для каждой сцены предусмотрен индивидуальный файл с таки же названием (см. ниже).
2 - флаги, подробно расписаны в файле header_scenes.py, если их несколько, то разделяются знаком вертикальной черты. Определяют особенности освещения, использование ландшафта и др.
3 - имя меша - обычно тут указывается имя модели помещения, у уличных сцен из-за ненужности такой модели обычно написано "none" (читай - "отсутствует"). Для уличных сцен применяется outer_terrain модель окружения, обычная модель из ресурсов игры, которую можно создать как любой меш (модель).
4 - имя колижн-меша, он необходим, чтобы стены, пол и другие части помещение не только выглядели твёрдыми, но и вели себя соответственно. У уличных сцен также "none".
5 - первые круглые скобки - минимальная точка координат, дальше которой в сцене нельзя пройти. Это касаемо только сцен без терайна(ладшафта- кода)
6 - вторые круглые скобки - максимальная точка координат, дальше которой в сцене нельзя пройти. Обе точки нужны для экономии машинных ресурсов, чтобы компьютер не обрабатывал бесконечное пространство. При изменении сцен стоит помнить, что указываемые здесь координаты должны соответствовать реальным размерам сцены (чтобы персонаж не наталкивался на невидимые стены). Это касаемо только сцен без терайна(ладшафта- кода)
7 - уровень воды, как правило, не редактируется.
8 - код ландшафта - здесь ноль у интерьерных сцен и длинная последовательность знаков у остальных. Код содержит информацию о размере сцены, типе местности (снег, пустыня, лес), неровностях рельефа, характере растительности, наличии рек. Сам код нужен для чтение движком игры, нам же возможно его сгенерировать, доступной утилитой движка игры- редактором ландшафтов(тераинов)
9 - первые квадратные скобки, в нынешних версиях игры не используется, иногда там стоит слово "exit".
10 - вторые квадратные скобки, пустые или содержат имена юнитов (но без обычной приставки trp_), к инвентарю которых можно получить доступ в данной сцене. Чаще всего, если тут кто-то и прописан, то это или "сенешаль" (инвентарь игрока-владельца замка), или "бонусный сундук".
Файл сцены находится в папке SceneObj вашего мода (если её нет, скопируйте её из Native), носит имя "название_сцены.sco(файл скомпилированный из разных источников движком игры (Встроенным редактором сцен - ВРС) и содержит самые мелкие подробности о реальном виде вашей сцены. То есть - где и как Вы вручную поменяли ландшафт, разместили различные объекты и растительность (включая их масштаб, углы наклона, ...), нанесли на поверхность земли текстуру песка или камня, покрасили снег в зелёный цвет, проложили АИ-меши, для компьютерных болванчиков...
ВРС - Собственно говоря, это и есть движок игры, такой же компилятор, как и Питон, он просто собирает в одно место информацию из разных файлов и позволяет нам их наглядно редактировать.
AI Mesh - это сеть, указывающая NPC (ботам, т.е всем кем управляет ИИ), где он может пройти, а где нет. Если, какой-нибудь NPC вдруг захотел прогуляться из точки A в точку B, он делает это так: находит кратчайший путь, проверяет, может ли он там пройти, и только потом (о, чудо!) идет. Если Вы построили стену у него на пути, то он врежется в нее и застрянет там навечно. Но если Вы сделаете AI mesh так, чтобы он учитывал эту стену, то NPC не только не врежется, но и обойдет злополучную стену кратчайшим путем
Следует знать, что объекты в файлах сцен запоминаются по названиям, и переименование объектов приведёт к их исчезновению из сцены. Для того, чтобы создать новый файл сцены, достаточно описать его так, как указано в предыдущем абзаце, войти в сцену внутри игры, а потом с помощью встроенного редактора сделать и сохранить хоть какое-то изменение. Например - поставил домик и сразу удалил, а выходя из режима редактирования, подтвердил изменения. В папке SceneObj при этом создаётся новый файл. В описанном примере его размер составит менее 1Кб, какой бы большой ни была сцена. Чем больше изменений в редакторе Вы будете делать, тем сильнее "разжиреет" этот файл.
События (триггеры) в файле module_mission_templates.py. Чтобы на сцене кипела жизнь, ей должна соответствовать определённая миссия (грубо говоря, сценарий). Вызов сцены в модульной системе сопровождается вызовом миссии (сценария). Далеко не всегда они составляют жёсткие пары. Обычно одна миссия используется для многих однотипных сцен, например, есть 110 деревень, для всех них в мирной ситуации используется миссия "village_center", а при сражении "lead_charge". Другой пример - на сцене Вы размещаете осадную башню, а вот её движение и поведение "актёров" определяется миссией.
Внутриигровые меню в файле module_game_menus.py - для каждой активной партии (т.е. города, отряда, деревни) игра с помощью скриптов определяет, какое именно меню вызвать. Зачастую внутри меню содержатся дополнительные проверки и вычисления, оценивающие игровую ситуацию. Дружественный это замок или враждебный? Соответственно используется либо мирная сцена, либо сцена штурма. Также в меню часто определяются присутствующие на сцене персонажи (стражники, гуляющие местные жители, бандиты). Самым обширным меню обладают города, там можно выбрать переход в одну из нескольких сцен (покои, таверна, улицы...).
Каждый из пунктов меню внутри самой сцены можно продублировать объектами, которые называют "passage". Такой объект в игре проявляет себя надписями типа "Вход в магазин" или "Вход в тюрьму" и имеет две характеристики, указываемые в окошках Entry No и Menu Item No. В первом мы ставим номер точки входа, на которую хотим отправить игрока, во втором - порядковый номер пункта меню, из которого игра будет узнавать сцену. Причём нумерация начинается с нуля, то есть если приведённый выше пример взят из третьего по счёту пункта меню, то внутри редактора сцен мы поставим пассаж и укажем ему Menu Item No = 2. Игра найдёт этот пункт меню и использует указанные в нём сцену, миссию, выставит персонажей.
Скрипты в module_scripts.py, прежде всего script_game_start, так как он задаёт свойства очень многих игровых объектов. Я не буду рассматривать этот скрипт подробно, приведу в качестве иллюстрации несколько вырванных по-отдельности строк, по которым можно найти некоторые важные блоки в скрипте
Свойства объектов сцены (предметов) в module_scene_props.py. Это хорошо заметно на примере тех из них, которые описываются не одной строкой, а целой последовательностью. Фактически там содержатся небольшие скрипты, обеспечивающие избирательное поведение предметов, например - факел горит ночью, но не днём; от чучела при ударе летит солома, идёт пыль, раздаётся характерный звук, а в итоге оно падает; с дерева падают сухие листья; из трубы идёт дым. Все эти явления задаются как свойства объектов ещё до помещения их на сцену.
Описание растительности в файле Flora_kinds.py (он не в папке Module_system, а в папке Module_data). Сюда большинство мододелов не залазят, быть может, и Вам не придётся. Файл содержит указания на то, какие растения существуют в игре, сколько у них есть альтернативных вариантов отображения (моделей), на какой местности (степь или лес), игра их будет "высевать", трава это или дерево и насколько часто встречается. В отличие от других файлов указанной папки, файл флоры легко редактируется, но нужно помнить, что большинство меняемых в нём параметров отобразятся на уже готовых сценах. И чтобы ничего потом не переделывать из-за растущих на снегу пальм и торчащих из стражников ёлок, сначала редактируется файл флоры, а потом делаются все сцены, где есть автоматически размещаемая растительность.
Скайбоксы- объект, в трёхмерной графике, играющий роль неба и горизонта. Представляет собой несложную трёхмерную модель (как правило, куб), с внутренней стороны которой натянута текстура неба (так называемая «кубическая текстура»). Обработка трёхмерной графики требует много вычислительной работы, поэтому «честно» просчитывать в играх объекты, находящиеся на горизонте, было бы расточительством. К тому же трёхмерное аппаратное обеспечение имеет Z-буферы, которые отсекают всё, что находится слишком далеко от камеры. Поэтому удалённые объекты изображаются крайне примитивно: в виде куба, шесть граней которого — текстуры неба и горизонта. Если отобразить этот куб так, чтобы камера находилась точно в центре, будет казаться, что через камеру действительно видны небо и горы. Скайбокс всегда следует за камерой, так что изображённые на скайбоксе объекты выглядят удалёнными в бесконечность. Движок отображает скайбокс каждый кадр в первую очередь, отключив Z-буферизацию. Высокие, заметные из любой точки уровня объекты наподобие башен обычно на скайбоксе не рисуют - для них нужна не иллюзия «бесконечной удалённости», а наоборот, определённое положение в пространстве. Источником текстур может быть что угодно: фотография, рисунок или трёхмерный рендер.
В игре скайбоксы представлены в виде меша (модели) с текстурой, сферической формы.
Выбор игрой скайбокса зависят от времени суток, от погодных условий или того и другого. К ним то они и прикреплены. Скайбоксы можно создать или редактировать, заменяя их. Но можно, при работе с модульной системой, задать для каждой сцены (миссии), свои в файле module_mission_templates.
header_scene_props.py
Файл декларирует "флаги", придуманные для работы с объектами сцен. Ничего не меняйте в этом файле и не обращайте внимания на конструкции, где нет приставки sokf_.
Позиция (pos) - вид регистра позволяющий хранить x, y, z, координаты. используется для определения координат в сценах, в презентациях для определения расположения и размера контейнеров( блоков текста изображения из которых состоит) и для глобальной карты.
для сцен, для объектов сцены( агенты, сцен_пропсы)
y ось, - вперед (положительное число)/назад(отрицательное число) по ходу движения агента
x ось - вправо(положительное число/влево(отрицательное число) по ходу движения агента
z ось - вверх (положительное число)/ низ (отрицательное число) относительно положения земли в сцене.
header_triggers.py
используется только в файле module_scene_props
ti_on_scene_prop_init сработает в момент появления сцен пропса на сцене
ti_on_init_scene_prop = ti_on_scene_prop_init
Trigger Param 1: prop instance number - порядковый номер сцен пропса на сцене. не путать с АйДи как сцен пропс.
ti_on_scene_prop_hit - сработает в момент получения урона сцен пропсом
Trigger Param 1: prop instance number - порядковый номер сцен пропса
Trigger Param 2: hit damage - поулученный урон
Position Register 1: Hit Position позиция в которую получен урон ( вернет координату на самом сцен пропсе например в месте попадания стрелы)
Position Register 2: x holds attacker agent id пзиция агента атаковавшего сцен пропс.( по х сторона от сцен пропса)
ti_on_scene_prop_destroy - сработает в момент уничтожения сцен пропса
Trigger Param 1: prop instance number порядковый номер пропса
ti_on_scene_prop_use - сработает в момент использования сцен пропса агентом. с версии 1.151 работает и в сингле
Trigger Param 1: user agent id - агент использующий пропс
Trigger Param 2: prop instance number порядковый номер пропса
ti_on_scene_prop_is_animating - сработает в момент когда сцен пропс имеет анимацию, которая предварительно была задана кодированием
Trigger Param 1: prop instance number порядковый номер пропса
Trigger Param 2: remaining animation time -запишется время от старта анимации
ti_on_scene_prop_animation_finished - сработает в момент завершения пропсом анимации
Trigger Param 1: prop instance number порядковый номер пропса на сцене
ti_on_scene_prop_start_use =сработает в момент начала использования пропса
Trigger Param 1: user agent id агент использующий пропс
Trigger Param 2: prop instance number номер пропса на сцене
ti_on_scene_prop_cancel_use сработает в момент завершения использования пропса агентом
Trigger Param 1: user agent id агент использовавший пропс
Trigger Param 2: prop instance number номер пропса на сцене
Как бы ни выглядела сцена, всё в ней формируется движком игры за счёт сведений из нескольких источников, и большинство из них можно редактировать. Можно сказать, что это наши механизмы формирования сцен, далее перечислим их в порядке от самых основных к менее очевидным.
Описание в файле 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",
[],[]),
[],[],"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_), к инвентарю которых можно получить доступ в данной сцене. Чаще всего, если тут кто-то и прописан, то это или "сенешаль" (инвентарь игрока-владельца замка), или "бонусный сундук".
Файл сцены находится в папке SceneObj вашего мода (если её нет, скопируйте её из Native), носит имя "название_сцены.sco(файл скомпилированный из разных источников движком игры (Встроенным редактором сцен - ВРС) и содержит самые мелкие подробности о реальном виде вашей сцены. То есть - где и как Вы вручную поменяли ландшафт, разместили различные объекты и растительность (включая их масштаб, углы наклона, ...), нанесли на поверхность земли текстуру песка или камня, покрасили снег в зелёный цвет, проложили АИ-меши, для компьютерных болванчиков...
ВРС - Собственно говоря, это и есть движок игры, такой же компилятор, как и Питон, он просто собирает в одно место информацию из разных файлов и позволяет нам их наглядно редактировать.
AI Mesh - это сеть, указывающая NPC (ботам, т.е всем кем управляет ИИ), где он может пройти, а где нет. Если, какой-нибудь NPC вдруг захотел прогуляться из точки A в точку B, он делает это так: находит кратчайший путь, проверяет, может ли он там пройти, и только потом (о, чудо!) идет. Если Вы построили стену у него на пути, то он врежется в нее и застрянет там навечно. Но если Вы сделаете AI mesh так, чтобы он учитывал эту стену, то NPC не только не врежется, но и обойдет злополучную стену кратчайшим путем
Следует знать, что объекты в файлах сцен запоминаются по названиям, и переименование объектов приведёт к их исчезновению из сцены. Для того, чтобы создать новый файл сцены, достаточно описать его так, как указано в предыдущем абзаце, войти в сцену внутри игры, а потом с помощью встроенного редактора сделать и сохранить хоть какое-то изменение. Например - поставил домик и сразу удалил, а выходя из режима редактирования, подтвердил изменения. В папке SceneObj при этом создаётся новый файл. В описанном примере его размер составит менее 1Кб, какой бы большой ни была сцена. Чем больше изменений в редакторе Вы будете делать, тем сильнее "разжиреет" этот файл.
События (триггеры) в файле module_mission_templates.py. Чтобы на сцене кипела жизнь, ей должна соответствовать определённая миссия (грубо говоря, сценарий). Вызов сцены в модульной системе сопровождается вызовом миссии (сценария). Далеко не всегда они составляют жёсткие пары. Обычно одна миссия используется для многих однотипных сцен, например, есть 110 деревень, для всех них в мирной ситуации используется миссия "village_center", а при сражении "lead_charge". Другой пример - на сцене Вы размещаете осадную башню, а вот её движение и поведение "актёров" определяется миссией.
Внутриигровые меню в файле 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), обновляем экран
(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. Игра найдёт этот пункт меню и использует указанные в нём сцену, миссию, выставит персонажей.
Скрипты в 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), указываем для замков и городов, будет ли при штурме использоваться осадная башня
(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), указываем для замков и городов, будет ли при штурме использоваться осадная башня
Свойства объектов сцены (предметов) в module_scene_props.py. Это хорошо заметно на примере тех из них, которые описываются не одной строкой, а целой последовательностью. Фактически там содержатся небольшие скрипты, обеспечивающие избирательное поведение предметов, например - факел горит ночью, но не днём; от чучела при ударе летит солома, идёт пыль, раздаётся характерный звук, а в итоге оно падает; с дерева падают сухие листья; из трубы идёт дым. Все эти явления задаются как свойства объектов ещё до помещения их на сцену.
Описание растительности в файле Flora_kinds.py (он не в папке Module_system, а в папке Module_data). Сюда большинство мододелов не залазят, быть может, и Вам не придётся. Файл содержит указания на то, какие растения существуют в игре, сколько у них есть альтернативных вариантов отображения (моделей), на какой местности (степь или лес), игра их будет "высевать", трава это или дерево и насколько часто встречается. В отличие от других файлов указанной папки, файл флоры легко редактируется, но нужно помнить, что большинство меняемых в нём параметров отобразятся на уже готовых сценах. И чтобы ничего потом не переделывать из-за растущих на снегу пальм и торчащих из стражников ёлок, сначала редактируется файл флоры, а потом делаются все сцены, где есть автоматически размещаемая растительность.
Скайбоксы- объект, в трёхмерной графике, играющий роль неба и горизонта. Представляет собой несложную трёхмерную модель (как правило, куб), с внутренней стороны которой натянута текстура неба (так называемая «кубическая текстура»). Обработка трёхмерной графики требует много вычислительной работы, поэтому «честно» просчитывать в играх объекты, находящиеся на горизонте, было бы расточительством. К тому же трёхмерное аппаратное обеспечение имеет Z-буферы, которые отсекают всё, что находится слишком далеко от камеры. Поэтому удалённые объекты изображаются крайне примитивно: в виде куба, шесть граней которого — текстуры неба и горизонта. Если отобразить этот куб так, чтобы камера находилась точно в центре, будет казаться, что через камеру действительно видны небо и горы. Скайбокс всегда следует за камерой, так что изображённые на скайбоксе объекты выглядят удалёнными в бесконечность. Движок отображает скайбокс каждый кадр в первую очередь, отключив Z-буферизацию. Высокие, заметные из любой точки уровня объекты наподобие башен обычно на скайбоксе не рисуют - для них нужна не иллюзия «бесконечной удалённости», а наоборот, определённое положение в пространстве. Источником текстур может быть что угодно: фотография, рисунок или трёхмерный рендер.
В игре скайбоксы представлены в виде меша (модели) с текстурой, сферической формы.
Выбор игрой скайбокса зависят от времени суток, от погодных условий или того и другого. К ним то они и прикреплены. Скайбоксы можно создать или редактировать, заменяя их. Но можно, при работе с модульной системой, задать для каждой сцены (миссии), свои в файле module_mission_templates.
Прочитав, из чего состоит сцена, можно сделать вывод: каждая сцена это определённый механизм, так что, у вас просто не выйдет создать сцену, работая только с одним файлом.
header_scene_props.py
Файл декларирует "флаги", придуманные для работы с объектами сцен. Ничего не меняйте в этом файле и не обращайте внимания на конструкции, где нет приставки sokf_.
sokf_type_container - превращает объект сцены в сундук.
sokf_type_ai_limiter - превращает объект сцены в препятствие для всех агентов, кроме пешего игрока. Пеший игрок может проходить сквозь такой объект независимо от наличия у объекта "физического тела" (body mesh).
sokf_type_barrier -превращает объект сцены в препятствие для всех агентов.
sokf_type_barrier_leave - превращает объект в препятствие для всех агентов, с помощью которого игрок может покинуть данную сцену. При приближении к такому объекту появляется надпись "Leave area" (покинуть местность).
sokf_type_ladder - превращает объект сцены в лестницу с возможностью подниматься по ней под очень крутым углом.
sokf_type_barrier3d - бессмысленный флаг, хотя и рабочий. Превращает объект сцены в препятствие для всех агентов. Объекты с таким флагом по сути в игре не используются.
sokf_type_mask - не используется.
sokf_add_fire - не используется. Огонь добавляется триггерами в файле scene_props.py
sokf_add_smoke - не используется. Дым добавляется триггерами в файле scene_props.py
sokf_add_light - не используется. Свет добавляется триггерами в файле scene_props.py
sokf_show_hit_point_bar - указывает, что у разрушаемого объекта должна отображаться строка состояния (индикатор степени разрушенности).
sokf_place_at_origin - объект с таким флагом при загрузке сцены всегда будет оказываться у правого башмака ГГ.
sokf_dynamic - не используется.
sokf_invisible - делает объект невидимым (если не активирован режим редактирования).
sokf_destructible - присваивается разрушаемым объектам, помимо него нужен триггер в файле scene_props.py (он определяет запас прочности, фиксирует удар, обеспечивает результат разрушения), примечательно, что без этого флага триггер будет фиксировать нулевой урон и разрушение никогда не произойдёт.
sokf_moveable - присваивается объектам, которые можно с помощью скриптов перемещать (анимировать) на сцене. Замена в строке disable_moveable_flag_optimization = 0 - файла module.ini нуля на единицу позволяет обходиться без применения данного флага. Есть мнение, что такой подход увеличивает требовательность игры к системным ресурсам компьютера.
sokf_face_player - заставляет объект сцены всегда поворачиваться лицевой стороной к игроку, в нативе применяется для флагов (баннеров).
sokf_dynamic_physics - заставляет объект сцены реагировать на удары и в результате падать, скакать, сползать. Поведение такого объекта выглядит нереалистично и с привычной нам физикой имеет мало общего.
sokf_missiles_not_attached - не используется. Предполагается для указания, что достигшие объекта стрелы и т.п. не должны в нём оставаться.
sokf_type_ai_limiter - превращает объект сцены в препятствие для всех агентов, кроме пешего игрока. Пеший игрок может проходить сквозь такой объект независимо от наличия у объекта "физического тела" (body mesh).
sokf_type_barrier -превращает объект сцены в препятствие для всех агентов.
sokf_type_barrier_leave - превращает объект в препятствие для всех агентов, с помощью которого игрок может покинуть данную сцену. При приближении к такому объекту появляется надпись "Leave area" (покинуть местность).
sokf_type_ladder - превращает объект сцены в лестницу с возможностью подниматься по ней под очень крутым углом.
sokf_type_barrier3d - бессмысленный флаг, хотя и рабочий. Превращает объект сцены в препятствие для всех агентов. Объекты с таким флагом по сути в игре не используются.
sokf_type_mask - не используется.
sokf_add_fire - не используется. Огонь добавляется триггерами в файле scene_props.py
sokf_add_smoke - не используется. Дым добавляется триггерами в файле scene_props.py
sokf_add_light - не используется. Свет добавляется триггерами в файле scene_props.py
sokf_show_hit_point_bar - указывает, что у разрушаемого объекта должна отображаться строка состояния (индикатор степени разрушенности).
sokf_place_at_origin - объект с таким флагом при загрузке сцены всегда будет оказываться у правого башмака ГГ.
sokf_dynamic - не используется.
sokf_invisible - делает объект невидимым (если не активирован режим редактирования).
sokf_destructible - присваивается разрушаемым объектам, помимо него нужен триггер в файле scene_props.py (он определяет запас прочности, фиксирует удар, обеспечивает результат разрушения), примечательно, что без этого флага триггер будет фиксировать нулевой урон и разрушение никогда не произойдёт.
sokf_moveable - присваивается объектам, которые можно с помощью скриптов перемещать (анимировать) на сцене. Замена в строке disable_moveable_flag_optimization = 0 - файла module.ini нуля на единицу позволяет обходиться без применения данного флага. Есть мнение, что такой подход увеличивает требовательность игры к системным ресурсам компьютера.
sokf_face_player - заставляет объект сцены всегда поворачиваться лицевой стороной к игроку, в нативе применяется для флагов (баннеров).
sokf_dynamic_physics - заставляет объект сцены реагировать на удары и в результате падать, скакать, сползать. Поведение такого объекта выглядит нереалистично и с привычной нам физикой имеет мало общего.
sokf_missiles_not_attached - не используется. Предполагается для указания, что достигшие объекта стрелы и т.п. не должны в нём оставаться.
Позиция (pos) - вид регистра позволяющий хранить x, y, z, координаты. используется для определения координат в сценах, в презентациях для определения расположения и размера контейнеров( блоков текста изображения из которых состоит) и для глобальной карты.
для сцен, для объектов сцены( агенты, сцен_пропсы)
y ось, - вперед (положительное число)/назад(отрицательное число) по ходу движения агента
x ось - вправо(положительное число/влево(отрицательное число) по ходу движения агента
z ось - вверх (положительное число)/ низ (отрицательное число) относительно положения земли в сцене.
header_triggers.py
используется только в файле module_scene_props
ti_on_scene_prop_init сработает в момент появления сцен пропса на сцене
ti_on_init_scene_prop = ti_on_scene_prop_init
Trigger Param 1: prop instance number - порядковый номер сцен пропса на сцене. не путать с АйДи как сцен пропс.
ti_on_scene_prop_hit - сработает в момент получения урона сцен пропсом
Trigger Param 1: prop instance number - порядковый номер сцен пропса
Trigger Param 2: hit damage - поулученный урон
Position Register 1: Hit Position позиция в которую получен урон ( вернет координату на самом сцен пропсе например в месте попадания стрелы)
Position Register 2: x holds attacker agent id пзиция агента атаковавшего сцен пропс.( по х сторона от сцен пропса)
ti_on_scene_prop_destroy - сработает в момент уничтожения сцен пропса
Trigger Param 1: prop instance number порядковый номер пропса
ti_on_scene_prop_use - сработает в момент использования сцен пропса агентом. с версии 1.151 работает и в сингле
Trigger Param 1: user agent id - агент использующий пропс
Trigger Param 2: prop instance number порядковый номер пропса
ti_on_scene_prop_is_animating - сработает в момент когда сцен пропс имеет анимацию, которая предварительно была задана кодированием
Trigger Param 1: prop instance number порядковый номер пропса
Trigger Param 2: remaining animation time -запишется время от старта анимации
ti_on_scene_prop_animation_finished - сработает в момент завершения пропсом анимации
Trigger Param 1: prop instance number порядковый номер пропса на сцене
ti_on_scene_prop_start_use =сработает в момент начала использования пропса
Trigger Param 1: user agent id агент использующий пропс
Trigger Param 2: prop instance number номер пропса на сцене
ti_on_scene_prop_cancel_use сработает в момент завершения использования пропса агентом
Trigger Param 1: user agent id агент использовавший пропс
Trigger Param 2: prop instance number номер пропса на сцене
Комментариев 46
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.