Добавление новых баннеров
Добавление баннеров плохо совместимо с сохранениями!
В сохраненной игре новые баннеры могут стать в неожиданном месте (у королей, например).
Так что имейте это ввиду перед добавлением баннеров.
1. Инструментарий
Нам понадобится:
- *.BRF редактор (урок сделан на основе OpenBFR);
- *.DDS редактор (не обязательно, не нужен для создания текстуры, но ее и скачать можно, если лень рисовать);
- Модульная Система;
2. Новые баннеры
В общем как раз на эту тему есть много инструкций, не буду расписывать. Создать свои баннеры можно и просто поставив их поверх уже готовых в редакторе DDS. Особого ничего знать не нужно. Хватит и знаний от пользования paint'ом. А кто знаком с photoshop, так можно даже это не читать.
В общем нам надо создать/скачать баннеры и назвать их "banners_h.dds". Вообще-то название абсолютно ни на что не влияет. Можете назвать хоть "as7bnstydfxr5g.dds", но "banners_h.dds" - простой и удобный вариант.
3. Новая текстура
Вот тут начинается поподробнее...
Итак, запускаем BRF редактор и открываем им файл "...\Mount and Blade. Warband\CommonRes\materials.brf":
Прокручиваем все ресурсы слева, пока не наткнемся на "banners". Выбираем "banners_g", затем "Import"->"New Material". Жмем Browse и показываем программе наши "bannres_h.dds", которые желательно было закинуть в папку ко всем остальным текстурам.
Теперь мы видим наши новые баннеры в списке. На всякий случай сделайте все настройки (кроме имени текстуры "DiffuseA") в красном прямоугольнике такие же, как у остальных баннеров.
4. Создание mesh'ей (banners)
Теперь надо добавить в игру все эти баннеры по отдельности... Для этого существуют меши.
Открываем "...\Mount and Blade. Warband\CommonRes\banners.brf". Видим целую кучу баннеров. Прокручиваем до начала "arms":
Что бы долго не парится, дулаем следующий фокус (пошагово):
а) Выделяем 21 баннер из серии "bannefs_f" и делаем ctrl+C, ctrl+V (копировать - вставить). Видим кучу баннеров banners_f.
б) Выделяем вставленные (а не оригинальные) баннеры от "banner_f01" до "banner_f21" и жмем ПКМ -> "Group Rename"
Вводим "banner_h" (без циферок). И та-дам! Все баннеры стали "banner_h" с циферками.
в) Выделяем все "banner_h". И в поле "Material" меняем букву на "h". Все! 21 баннер с новой текстуры готов.
Сохраняем наш результат. На заикания программы отвечаем "yes".
Если вам интересно, что за "arms" - это прямоугольные варианты баннеров, у которых внизу вырез. Просто сравните "banner_a01" и "arms_a01" и поймете.
Наши баннеры и так без выреза, по этому arms мы не создаем. Но вы можете сделать себе баннеры с вырезом, путем копирования таковых и прописывания своей текстуры. Но потом придется на баннеры с вырезом создать соответствующие arms. Это точно такие же меши, только с другим названием. У вас должно легко получится это сделать.
4. Создание mesh'ей (map_icons)
Открываем "...\Mount and Blade. Warband\CommonRes\map_flags_c.brf" и делаем точно то же самое, что в п.3.
Можете попробовать и с другими типами флагов (map_flags_a, map_flags_b), то для этого надо иметь побольше знаний о работе с мешами и текстурами (не хватит флагов, что бы только скопировать, надо будет создавать вручную). Вы можете прочитать это в уроках по BRF на этом же форуме. Тут я расписывать это не буду, т.к. это урок по баннерах, а не по BRF.
5. Модульная система
Теперь надо, чтобы игра могла воспринять наши новые баннеры.
А. В module_mesher.py где-то на середине находим баннеры и дописываем новые перед баннерами королевств.
Находим
("banner_f18", 0, "banner_f18", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_f19", 0, "banner_f19", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_f20", 0, "banner_f20", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g01", 0, "banner_f01", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g02", 0, "banner_f02", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g03", 0, "banner_f03", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g04", 0, "banner_f04", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g05", 0, "banner_f05", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g06", 0, "banner_f06", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g07", 0, "banner_f07", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g08", 0, "banner_f08", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g09", 0, "banner_f09", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g10", 0, "banner_f10", 0, 0, 0, -90, 0, 0, 1, 1, 1),
и после него добавляем
("banner_h01", 0, "banner_h01", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h02", 0, "banner_h02", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h03", 0, "banner_h03", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h04", 0, "banner_h04", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h05", 0, "banner_h05", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h06", 0, "banner_h06", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h07", 0, "banner_h07", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h08", 0, "banner_h08", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h09", 0, "banner_h09", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h10", 0, "banner_h10", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h11", 0, "banner_h11", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h12", 0, "banner_h12", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h13", 0, "banner_h13", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h14", 0, "banner_h14", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h15", 0, "banner_h15", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h16", 0, "banner_h16", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h17", 0, "banner_h17", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h18", 0, "banner_h18", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h19", 0, "banner_h19", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h20", 0, "banner_h20", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h21", 0, "banner_h21", 0, 0, 0, -90, 0, 0, 1, 1, 1),
Должно получиться что вроде этого:
("banner_f18", 0, "banner_f18", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_f19", 0, "banner_f19", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_f20", 0, "banner_f20", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g01", 0, "banner_f01", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g02", 0, "banner_f02", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g03", 0, "banner_f03", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g04", 0, "banner_f04", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g05", 0, "banner_f05", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g06", 0, "banner_f06", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g07", 0, "banner_f07", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g08", 0, "banner_f08", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g09", 0, "banner_f09", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_g10", 0, "banner_f10", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h01", 0, "banner_h01", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h02", 0, "banner_h02", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h03", 0, "banner_h03", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h04", 0, "banner_h04", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h05", 0, "banner_h05", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h06", 0, "banner_h06", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h07", 0, "banner_h07", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h08", 0, "banner_h08", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h09", 0, "banner_h09", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h10", 0, "banner_h10", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h11", 0, "banner_h11", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h12", 0, "banner_h12", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h13", 0, "banner_h13", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h14", 0, "banner_h14", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h15", 0, "banner_h15", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h16", 0, "banner_h16", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h17", 0, "banner_h17", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h18", 0, "banner_h18", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h19", 0, "banner_h19", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h20", 0, "banner_h20", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_h21", 0, "banner_h21", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_kingdom_a", 0, "banner_kingdom_a", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_kingdom_b", 0, "banner_kingdom_b", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_kingdom_c", 0, "banner_kingdom_c", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_kingdom_d", 0, "banner_kingdom_d", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_kingdom_e", 0, "banner_kingdom_e", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_kingdom_f", 0, "banner_kingdom_f", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("banner_f21", 0, "banner_a15", 0, 0, 0, -90, 0, 0, 1, 1, 1),
Второе название (после нолика) - название mesh'а! Запомните это, если будете еще добавлять баннеров.
Можно заметить одну недоработку - 10 продублированных баннеров... Вообще-то на их месте должен был быть 21 баннер из "banners_f.dds"... Но что-то не слиплось... Баннеров из banners_f.dds в игре нет вообще. Для них даже не созданы меши. Не знаю, что думали разработчики, когда прописывали баннеры...
Вы сможете можете исправить это, пользуясь знаниями из этого урока =)
B. Теперь в том же module_mesher.py идем ниже, до точно такой картины, как прежде, но только с "arms". И делаем то же самое:
Находим:
("arms_f16", 0, "banner_f16", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_f17", 0, "banner_f17", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_f18", 0, "banner_f18", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_f19", 0, "banner_f19", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_f20", 0, "banner_f20", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g01", 0, "banner_f01", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g02", 0, "banner_f02", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g03", 0, "banner_f03", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g04", 0, "banner_f04", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g05", 0, "banner_f05", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g06", 0, "banner_f06", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g07", 0, "banner_f07", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g08", 0, "banner_f08", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g09", 0, "banner_f09", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g10", 0, "banner_f10", 0, 0, 0, -90, 0, 0, 1, 1, 1),
и после него добавляем:
("arms_h01", 0, "banner_h01", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h02", 0, "banner_h02", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h03", 0, "banner_h03", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h04", 0, "banner_h04", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h05", 0, "banner_h05", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h06", 0, "banner_h06", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h07", 0, "banner_h07", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h08", 0, "banner_h08", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h09", 0, "banner_h09", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h10", 0, "banner_h10", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h11", 0, "banner_h11", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h12", 0, "banner_h12", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h13", 0, "banner_h13", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h14", 0, "banner_h14", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h15", 0, "banner_h15", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h16", 0, "banner_h16", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h17", 0, "banner_h17", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h18", 0, "banner_h18", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h19", 0, "banner_h19", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h20", 0, "banner_h20", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h21", 0, "banner_h21", 0, 0, 0, -90, 0, 0, 1, 1, 1),
Получится:
("arms_f16", 0, "banner_f16", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_f17", 0, "banner_f17", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_f18", 0, "banner_f18", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_f19", 0, "banner_f19", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_f20", 0, "banner_f20", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g01", 0, "banner_f01", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g02", 0, "banner_f02", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g03", 0, "banner_f03", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g04", 0, "banner_f04", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g05", 0, "banner_f05", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g06", 0, "banner_f06", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g07", 0, "banner_f07", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g08", 0, "banner_f08", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g09", 0, "banner_f09", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_g10", 0, "banner_f10", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h01", 0, "banner_h01", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h02", 0, "banner_h02", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h03", 0, "banner_h03", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h04", 0, "banner_h04", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h05", 0, "banner_h05", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h06", 0, "banner_h06", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h07", 0, "banner_h07", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h08", 0, "banner_h08", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h09", 0, "banner_h09", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h10", 0, "banner_h10", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h11", 0, "banner_h11", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h12", 0, "banner_h12", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h13", 0, "banner_h13", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h14", 0, "banner_h14", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h15", 0, "banner_h15", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h16", 0, "banner_h16", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h17", 0, "banner_h17", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h18", 0, "banner_h18", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h19", 0, "banner_h19", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h20", 0, "banner_h20", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_h21", 0, "banner_h21", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_kingdom_a", 0, "banner_kingdom_a", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_kingdom_b", 0, "banner_kingdom_b", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_kingdom_c", 0, "banner_kingdom_c", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_kingdom_d", 0, "banner_kingdom_d", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_kingdom_e", 0, "banner_kingdom_e", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_kingdom_f", 0, "banner_kingdom_f", 0, 0, 0, -90, 0, 0, 1, 1, 1), ("arms_f21", 0, "banner_a15", 0, 0, 0, -90, 0, 0, 1, 1, 1),
Тут (да в общем и везде с баннерами) второе название - тоже mesh. Мы используем для arms меши баннеров, т.к. они и так прямоугольные... Если вы прошли прошлые шаги, то должны понимать о чем речь...
C. Теперь снова надо приписывать каждый баннер!!! На этот раз в module_scene_props.py. Там ну точно то же самое, что и прошлые 2 раза, но искать будем немного другую по структуре строку:
Находим:
("banner_f17", 0, "banner_f17", "0", []), ("banner_f18", 0, "banner_f18", "0", []), ("banner_f19", 0, "banner_f19", "0", []), ("banner_f20", 0, "banner_f20", "0", []), ("banner_g01", 0, "banner_f01", "0", []), ("banner_g02", 0, "banner_f02", "0", []), ("banner_g03", 0, "banner_f03", "0", []), ("banner_g04", 0, "banner_f04", "0", []), ("banner_g05", 0, "banner_f05", "0", []), ("banner_g06", 0, "banner_f06", "0", []), ("banner_g07", 0, "banner_f07", "0", []), ("banner_g08", 0, "banner_f08", "0", []), ("banner_g09", 0, "banner_f09", "0", []), ("banner_g10", 0, "banner_f10", "0", []),
Добавляем в конец:
("banner_h01", 0, "banner_h01", "0", []), ("banner_h02", 0, "banner_h02", "0", []), ("banner_h03", 0, "banner_h03", "0", []), ("banner_h04", 0, "banner_h04", "0", []), ("banner_h05", 0, "banner_h05", "0", []), ("banner_h06", 0, "banner_h06", "0", []), ("banner_h07", 0, "banner_h07", "0", []), ("banner_h08", 0, "banner_h08", "0", []), ("banner_h09", 0, "banner_h09", "0", []), ("banner_h10", 0, "banner_h10", "0", []), ("banner_h11", 0, "banner_h11", "0", []), ("banner_h12", 0, "banner_h12", "0", []), ("banner_h13", 0, "banner_h13", "0", []), ("banner_h14", 0, "banner_h14", "0", []), ("banner_h15", 0, "banner_h15", "0", []), ("banner_h16", 0, "banner_h16", "0", []), ("banner_h17", 0, "banner_h17", "0", []), ("banner_h18", 0, "banner_h18", "0", []), ("banner_h19", 0, "banner_h19", "0", []), ("banner_h20", 0, "banner_h20", "0", []), ("banner_h21", 0, "banner_h21", "0", []),
Получается:
("banner_f17", 0, "banner_f17", "0", []), ("banner_f18", 0, "banner_f18", "0", []), ("banner_f19", 0, "banner_f19", "0", []), ("banner_f20", 0, "banner_f20", "0", []), ("banner_g01", 0, "banner_f01", "0", []), ("banner_g02", 0, "banner_f02", "0", []), ("banner_g03", 0, "banner_f03", "0", []), ("banner_g04", 0, "banner_f04", "0", []), ("banner_g05", 0, "banner_f05", "0", []), ("banner_g06", 0, "banner_f06", "0", []), ("banner_g07", 0, "banner_f07", "0", []), ("banner_g08", 0, "banner_f08", "0", []), ("banner_g09", 0, "banner_f09", "0", []), ("banner_g10", 0, "banner_f10", "0", []), ("banner_h01", 0, "banner_h01", "0", []), ("banner_h02", 0, "banner_h02", "0", []), ("banner_h03", 0, "banner_h03", "0", []), ("banner_h04", 0, "banner_h04", "0", []), ("banner_h05", 0, "banner_h05", "0", []), ("banner_h06", 0, "banner_h06", "0", []), ("banner_h07", 0, "banner_h07", "0", []), ("banner_h08", 0, "banner_h08", "0", []), ("banner_h09", 0, "banner_h09", "0", []), ("banner_h10", 0, "banner_h10", "0", []), ("banner_h11", 0, "banner_h11", "0", []), ("banner_h12", 0, "banner_h12", "0", []), ("banner_h13", 0, "banner_h13", "0", []), ("banner_h14", 0, "banner_h14", "0", []), ("banner_h15", 0, "banner_h15", "0", []), ("banner_h16", 0, "banner_h16", "0", []), ("banner_h17", 0, "banner_h17", "0", []), ("banner_h18", 0, "banner_h18", "0", []), ("banner_h19", 0, "banner_h19", "0", []), ("banner_h20", 0, "banner_h20", "0", []), ("banner_h21", 0, "banner_h21", "0", []), ("banner_kingdom_a", 0, "banner_kingdom_a", "0", []), ("banner_kingdom_b", 0, "banner_kingdom_b", "0", []), ("banner_kingdom_c", 0, "banner_kingdom_c", "0", []), ("banner_kingdom_d", 0, "banner_kingdom_d", "0", []), ("banner_kingdom_e", 0, "banner_kingdom_e", "0", []), ("banner_kingdom_f", 0, "banner_kingdom_f", "0", []), ("banner_f21", 0, "banner_a15", "0", []),
D. И еще раз надо все баннеры прописать (вот же запара с баннерами, да?). Открываем на этот раз module_map_icons.py, чтобы баннеры отображались на карте.
75% этого файла - баннеры, гы-гы .
Ищем синее, дописываем зеленое, как и всегда:
Находим
("banner_124",0,"map_flag_f19", banner_scale,0), ("banner_125",0,"map_flag_f20", banner_scale,0), ("banner_126",0,"map_flag_f01", banner_scale,0), ("banner_127",0,"map_flag_f02", banner_scale,0), ("banner_128",0,"map_flag_f03", banner_scale,0), ("banner_129",0,"map_flag_f04", banner_scale,0), ("banner_130",0,"map_flag_f05", banner_scale,0), ("banner_131",0,"map_flag_f06", banner_scale,0), ("banner_132",0,"map_flag_f07", banner_scale,0), ("banner_133",0,"map_flag_f08", banner_scale,0), ("banner_134",0,"map_flag_f09", banner_scale,0), ("banner_135",0,"map_flag_f10", banner_scale,0),
После него добавляем:
("banner_137",0,"map_flag_h01", banner_scale,0), ("banner_138",0,"map_flag_h02", banner_scale,0), ("banner_139",0,"map_flag_h03", banner_scale,0), ("banner_140",0,"map_flag_h04", banner_scale,0), ("banner_141",0,"map_flag_h05", banner_scale,0), ("banner_142",0,"map_flag_h06", banner_scale,0), ("banner_143",0,"map_flag_h07", banner_scale,0), ("banner_144",0,"map_flag_h08", banner_scale,0), ("banner_145",0,"map_flag_h09", banner_scale,0), ("banner_146",0,"map_flag_h10", banner_scale,0), ("banner_147",0,"map_flag_h11", banner_scale,0), ("banner_148",0,"map_flag_h12", banner_scale,0), ("banner_149",0,"map_flag_h13", banner_scale,0), ("banner_150",0,"map_flag_h14", banner_scale,0), ("banner_151",0,"map_flag_h15", banner_scale,0), ("banner_152",0,"map_flag_h16", banner_scale,0), ("banner_153",0,"map_flag_h17", banner_scale,0), ("banner_154",0,"map_flag_h18", banner_scale,0), ("banner_155",0,"map_flag_h19", banner_scale,0), ("banner_156",0,"map_flag_h20", banner_scale,0), ("banner_157",0,"map_flag_h21", banner_scale,0),
Получается:
("banner_124",0,"map_flag_f19", banner_scale,0), ("banner_125",0,"map_flag_f20", banner_scale,0), ("banner_126",0,"map_flag_f01", banner_scale,0), ("banner_127",0,"map_flag_f02", banner_scale,0), ("banner_128",0,"map_flag_f03", banner_scale,0), ("banner_129",0,"map_flag_f04", banner_scale,0), ("banner_130",0,"map_flag_f05", banner_scale,0), ("banner_131",0,"map_flag_f06", banner_scale,0), ("banner_132",0,"map_flag_f07", banner_scale,0), ("banner_133",0,"map_flag_f08", banner_scale,0), ("banner_134",0,"map_flag_f09", banner_scale,0), ("banner_135",0,"map_flag_f10", banner_scale,0), ("banner_137",0,"map_flag_h01", banner_scale,0), ("banner_138",0,"map_flag_h02", banner_scale,0), ("banner_139",0,"map_flag_h03", banner_scale,0), ("banner_140",0,"map_flag_h04", banner_scale,0), ("banner_141",0,"map_flag_h05", banner_scale,0), ("banner_142",0,"map_flag_h06", banner_scale,0), ("banner_143",0,"map_flag_h07", banner_scale,0), ("banner_144",0,"map_flag_h08", banner_scale,0), ("banner_145",0,"map_flag_h09", banner_scale,0), ("banner_146",0,"map_flag_h10", banner_scale,0), ("banner_147",0,"map_flag_h11", banner_scale,0), ("banner_148",0,"map_flag_h12", banner_scale,0), ("banner_149",0,"map_flag_h13", banner_scale,0), ("banner_150",0,"map_flag_h14", banner_scale,0), ("banner_151",0,"map_flag_h15", banner_scale,0), ("banner_152",0,"map_flag_h16", banner_scale,0), ("banner_153",0,"map_flag_h17", banner_scale,0), ("banner_154",0,"map_flag_h18", banner_scale,0), ("banner_155",0,"map_flag_h19", banner_scale,0), ("banner_156",0,"map_flag_h20", banner_scale,0), ("banner_157",0,"map_flag_h21", banner_scale,0), ("map_flag_kingdom_a",0,"map_flag_kingdom_a", banner_scale,0), ("map_flag_kingdom_b",0,"map_flag_kingdom_b", banner_scale,0), ("map_flag_kingdom_c",0,"map_flag_kingdom_c", banner_scale,0), ("map_flag_kingdom_d",0,"map_flag_kingdom_d", banner_scale,0), ("map_flag_kingdom_e",0,"map_flag_kingdom_e", banner_scale,0), ("map_flag_kingdom_f",0,"map_flag_kingdom_f", banner_scale,0), ("banner_136",0,"map_flag_15", banner_scale,0),
Обратите внимание на номера. Последний "banner_136" лучше оставить, как есть, а новые продолжать писать с 137. Это не повлияет на восприятие их игрой, она будет читать все баннеры до "banner_136" независимо от названия (это определяется константами). Но название пригодится игре для иных целей.
Вписывать баннеры закончили. Но это еще не все, нет...
E. Идем в module_constants.py и изменяем количество баннеров в соответствии с добавленными (в данном случае +21 к banners_end_offset):
sarranid_banners_begin_offset = 105 sarranid_banners_end_offset = 125 banners_end_offset = 157 # Some constants for merchant invenotries merchant_inventory_space = 30 num_merchandise_goods = 40
Теперь настроим цвета фона (цвет спины на геральдических доспехах) баннеров. Идем в module_scripts.py, ищем, дописываем:
Ищем:
(troop_set_slot, "trp_banner_background_color_array", 105, 0xFFc39d31), (troop_set_slot, "trp_banner_background_color_array", 106, 0xFFcbb670), (troop_set_slot, "trp_banner_background_color_array", 107, 0xFF394a18), (troop_set_slot, "trp_banner_background_color_array", 108, 0xFF372708), (troop_set_slot, "trp_banner_background_color_array", 109, 0xFF9a6810), (troop_set_slot, "trp_banner_background_color_array", 110, 0xFFb27910), (troop_set_slot, "trp_banner_background_color_array", 111, 0xFF8c8621), (troop_set_slot, "trp_banner_background_color_array", 112, 0xFF975a03), (troop_set_slot, "trp_banner_background_color_array", 113, 0xFF2c2924), (troop_set_slot, "trp_banner_background_color_array", 114, 0xFFaa962c), (troop_set_slot, "trp_banner_background_color_array", 115, 0xFFa2822e), (troop_set_slot, "trp_banner_background_color_array", 116, 0xFF7b8a8c), (troop_set_slot, "trp_banner_background_color_array", 117, 0xFF3c0908), (troop_set_slot, "trp_banner_background_color_array", 118, 0xFFFF00FF), (troop_set_slot, "trp_banner_background_color_array", 119, 0xFF671e14), (troop_set_slot, "trp_banner_background_color_array", 120, 0xFF103042), (troop_set_slot, "trp_banner_background_color_array", 121, 0xFF4a4500), (troop_set_slot, "trp_banner_background_color_array", 122, 0xFF703324), (troop_set_slot, "trp_banner_background_color_array", 123, 0xFF24293c), (troop_set_slot, "trp_banner_background_color_array", 124, 0xFF5d6966), (troop_set_slot, "trp_banner_background_color_array", 125, 0xFFbd9631), (troop_set_slot, "trp_banner_background_color_array", 126, 0xFFc6b26b), (troop_set_slot, "trp_banner_background_color_array", 127, 0xFF394918),
После него добавляем
(troop_set_slot, "trp_banner_background_color_array", 128, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 129, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 130, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 131, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 132, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 133, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 134, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 135, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 136, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 137, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 138, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 139, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 140, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 141, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 142, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 143, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 144, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 145, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 146, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 147, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 148, 0xFF000000),
Получается:
(troop_set_slot, "trp_banner_background_color_array", 105, 0xFFc39d31), (troop_set_slot, "trp_banner_background_color_array", 106, 0xFFcbb670), (troop_set_slot, "trp_banner_background_color_array", 107, 0xFF394a18), (troop_set_slot, "trp_banner_background_color_array", 108, 0xFF372708), (troop_set_slot, "trp_banner_background_color_array", 109, 0xFF9a6810), (troop_set_slot, "trp_banner_background_color_array", 110, 0xFFb27910), (troop_set_slot, "trp_banner_background_color_array", 111, 0xFF8c8621), (troop_set_slot, "trp_banner_background_color_array", 112, 0xFF975a03), (troop_set_slot, "trp_banner_background_color_array", 113, 0xFF2c2924), (troop_set_slot, "trp_banner_background_color_array", 114, 0xFFaa962c), (troop_set_slot, "trp_banner_background_color_array", 115, 0xFFa2822e), (troop_set_slot, "trp_banner_background_color_array", 116, 0xFF7b8a8c), (troop_set_slot, "trp_banner_background_color_array", 117, 0xFF3c0908), (troop_set_slot, "trp_banner_background_color_array", 118, 0xFFFF00FF), (troop_set_slot, "trp_banner_background_color_array", 119, 0xFF671e14), (troop_set_slot, "trp_banner_background_color_array", 120, 0xFF103042), (troop_set_slot, "trp_banner_background_color_array", 121, 0xFF4a4500), (troop_set_slot, "trp_banner_background_color_array", 122, 0xFF703324), (troop_set_slot, "trp_banner_background_color_array", 123, 0xFF24293c), (troop_set_slot, "trp_banner_background_color_array", 124, 0xFF5d6966), (troop_set_slot, "trp_banner_background_color_array", 125, 0xFFbd9631), (troop_set_slot, "trp_banner_background_color_array", 126, 0xFFc6b26b), (troop_set_slot, "trp_banner_background_color_array", 127, 0xFF394918), (troop_set_slot, "trp_banner_background_color_array", 128, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 129, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 130, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 131, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 132, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 133, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 134, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 135, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 136, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 137, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 138, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 139, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 140, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 141, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 142, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 143, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 144, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 145, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 146, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 147, 0xFF000000), (troop_set_slot, "trp_banner_background_color_array", 148, 0xFF000000), #Default banners (troop_set_slot, "trp_banner_background_color_array", 149, 0xFF212221), (troop_set_slot, "trp_banner_background_color_array", 150, 0xFF212221), (troop_set_slot, "trp_banner_background_color_array", 151, 0xFF2E3B10), (troop_set_slot, "trp_banner_background_color_array", 152, 0xFF425D7B), (troop_set_slot, "trp_banner_background_color_array", 153, 0xFF394608), ]),
Внимание! Порядковый номер баннеров точно совпадает с их порядковым номером в текстурах! Счет начинается от верхнего левого баннера и идет по строкам (как буквы в книге). Ну а текстуры в таком порядке, как они расположены в materials.brf. Имейте это ввиду!
Внимание еще раз! Цвет определяют только цифры, выделенные фиолетовым:"0xFF000000". Это обычный код цвета в 16-ричной системе исчисления. Его можно узнать, например, в фотошопе, или в интернете по запросу "16-ричные коды цветов"...
Цвета я не устанавливал, они все сброшены на черный.
И о наконец-то! Последний штрих!
F. Идем в module_presentations.py, ищем презентацию баннеров и добавляем новые страницы, чтобы баннеры стали доступны не только ботам, но и самому игроку!
Ищем:
("banner_selection",0,mesh_load_window,[ (ti_on_presentation_load, [(set_fixed_point_multiplier, 1000), (str_store_string, s1, "str_banner_selection_text"), (create_text_overlay, reg1, s1, tf_center_justify), (position_set_x, pos1, 500), (position_set_y, pos1, 600), (overlay_set_position, reg1, pos1), (overlay_set_text, reg1, s1), (create_button_overlay, "$g_presentation_obj_banner_selection_1", "@Next Page", tf_center_justify), (position_set_x, pos1, 500), (position_set_y, pos1, 50), (overlay_set_position, "$g_presentation_obj_banner_selection_1", pos1), (assign, ":x_pos", 150), (assign, ":y_pos", 575), (assign, ":try_end", banner_meshes_end_minus_one), (store_sub, ":num_npc_kingdoms", npc_kingdoms_end, npc_kingdoms_begin), (val_sub, ":try_end", ":num_npc_kingdoms"), #do not allow kingdom banners to be selected (store_mul, ":begin_mesh", 16, "$g_presentation_page_no"), (val_add, ":begin_mesh", banner_meshes_begin), (store_add, ":try_end_2", ":begin_mesh", 16), (val_min, ":try_end", ":try_end_2"), (store_add, "$g_presentation_banner_start", "$g_presentation_obj_banner_selection_1", 1), (try_for_range, ":cur_banner_mesh", ":begin_mesh", ":try_end"), (create_image_button_overlay, reg1, ":cur_banner_mesh", ":cur_banner_mesh"), (position_set_x, pos1, ":x_pos"), (position_set_y, pos1, ":y_pos"), (overlay_set_position, reg1, pos1), (position_set_x, pos1, 100), (position_set_y, pos1, 100), (overlay_set_size, reg1, pos1), (val_add, ":x_pos", 100), (ge, ":x_pos", 900), (assign, ":x_pos", 150), (val_sub, ":y_pos", 250), (try_end), (presentation_set_duration, 999999), ]), (ti_on_presentation_event_state_change, [(store_trigger_param_1, ":object"), (try_begin), (eq, ":object", "$g_presentation_obj_banner_selection_1"), (val_add, "$g_presentation_page_no", 1), (val_mod, "$g_presentation_page_no", 12), (start_presentation, "prsnt_banner_selection"), (else_try), (store_sub, ":selected_banner", ":object", "$g_presentation_banner_start"), (store_mul, ":page_adder", 16, "$g_presentation_page_no"), (val_add, ":selected_banner", ":page_adder"), (store_add, ":selected_banner_map_icon", ":selected_banner", banner_map_icons_begin), (party_set_banner_icon, "p_main_party", ":selected_banner_map_icon"), (store_add, ":selected_banner_spr", ":selected_banner", banner_scene_props_begin), (troop_set_slot, "trp_player", slot_troop_banner_scene_prop, ":selected_banner_spr"),
в этом коде находим строчку (val_mod, "$g_presentation_page_no", 12), где 12 повторяет будущее количество страниц