• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

    Не ленитесь, голосуйте в этой теме за тех форумчан, которые по вашему мнению больше всех проявили себя в этом году
    По желанию, аргументировать свой выбор можете в теме обсуждения голосования.

Готика 2: НВ Работа с меню

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165


1. Легко настраиваемое меню статистики


Меня долго мучил вопрос: как сделать редактирование талантов в меню статистики быстро и без ошибок... и наконец нашел метод (см. вложение).

PS:
1) файл в формате .d, поэтому удалите расширение .txt после скачивания.
2) в файле содержится метод, а не готовый код (хотя он работает для мода "возвращение"), поэтому, возможно, вам придется местами отредактировать его...

Bump: пишем сюда обо всем, что касается работы с меню...
 

Вложения

  • Menu_Status.d.txt
    20,6 KB · Просмотры: 449

multivoin

Участник форума
Регистрация
5 Сен 2009
Сообщения
302
Благодарности
9
Баллы
185
Интересно есть ли возможность сделать отображение рандомных лоадскринов???
 

Bjorn++

Участник форума
Регистрация
28 Июн 2011
Сообщения
1.063
Благодарности
46
Баллы
235
Что то я не очень понял для чего это?
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Интересно есть ли возможность сделать отображение рандомных лоадскринов???
Попробуй, если получится, не забудь выложить в этой теме =)

Что то я не очень понял для чего это?
Изменение скрипта меню, для облегчения его редактирования в будущем... а именно - список талантов.

вот пример во вложении - 1 из скринов моего патча к возвращению 1.1... (Добыча металлов - не звучит, потом поменяю на что-то получше)
 

Вложения

  • example.PNG
    example.PNG
    482,5 KB · Просмотры: 949

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Лоадскринов рандомных нельзя, только г2екстом такое можно, а вот рандомный стартскрин - думаю возможно...
 

ALHIMIK

Участник форума
Регистрация
8 Окт 2008
Сообщения
644
Благодарности
11
Баллы
195
Чтобы работать с самими .d текстовыми файлами нужно распаковать menu.dat при помощи Gothic Sourcer 3.14. В этой же программе можно просматривать, редактировать и запаковывать все обратно в menu.dat. Это относится ко всем .dat и .d файлам. Но здесь пойдет речь именно о menu.dat.

Обычно в начале большинства .d файлов имеется пару переменных отвечающих за разметку/местрорасположение строк/рисунков в меню. Также имеется список всех этих переменных (порядок их указания и появления в файле вроде не имеют значения). Посмотрим на наглядном примере:

Добавление новых строк/надписей/заголовков в окне персонажа (кнопка B или C по дефолту):


Вот список переменных из начала файла menu_status.d (отвечает за окно персонажа):
Код:
instance MENU_STATUS(C_MENU_DEF)
{
    items[0] = "MENU_ITEM_STATUS_HEADING";
    items[1] = "MENU_ITEM_PLAYERGUILD";
    items[2] = "MENU_ITEM_LEVEL_TITLE";
    items[3] = "MENU_ITEM_LEVEL";
    items[4] = "MENU_ITEM_TALENT_7_TITLE";
    items[5] = "MENU_ITEM_TALENT_7_CIRCLE";
    items[6] = "MENU_ITEM_TALENT_7_SKILL";
    items[7] = "MENU_ITEM_EXP_TITLE";
    items[8] = "MENU_ITEM_EXP";
    items[9] = "MENU_ITEM_LEVEL_NEXT_TITLE";
    items[10] = "MENU_ITEM_LEVEL_NEXT";
    items[11] = "MENU_ITEM_LEARN_TITLE";
    items[12] = "MENU_ITEM_LEARN";
    items[13] = "MENU_ITEM_ATTRIBUTE_HEADING";
    items[14] = "MENU_ITEM_ATTRIBUTE_1_TITLE";
    items[15] = "MENU_ITEM_ATTRIBUTE_1";
    items[16] = "MENU_ITEM_ATTRIBUTE_2_TITLE";
    items[17] = "MENU_ITEM_ATTRIBUTE_2";
    items[18] = "MENU_ITEM_ATTRIBUTE_3_TITLE";
    items[19] = "MENU_ITEM_ATTRIBUTE_3";
    items[20] = "MENU_ITEM_ATTRIBUTE_4_TITLE";
    items[21] = "MENU_ITEM_ATTRIBUTE_4";
    items[22] = "MENU_ITEM_TALENT_6_TITLE";
    items[23] = "MENU_ITEM_TALENT_6_SKILL";
    items[24] = "MENU_ITEM_TALENT_9_TITLE";
    items[25] = "MENU_ITEM_TALENT_9_SKILL";
    items[26] = "MENU_ITEM_ARMOR_HEADING";
    items[27] = "MENU_ITEM_ARMOR_1_TITLE";
    items[28] = "MENU_ITEM_ARMOR_2_TITLE";
    items[29] = "MENU_ITEM_ARMOR_3_TITLE";
    items[30] = "MENU_ITEM_ARMOR_4_TITLE";
    items[31] = "MENU_ITEM_ARMOR_1";
    items[32] = "MENU_ITEM_ARMOR_2";
    items[33] = "MENU_ITEM_ARMOR_3";
    items[34] = "MENU_ITEM_ARMOR_4";
    items[35] = "MENU_ITEM_FIGHTING_SKILLS_HEADING";
    items[36] = "MENU_ITEM_TALENTS_HEADING";
    items[37] = "MENU_ITEM_TALENT_1_TITLE";
    items[38] = "MENU_ITEM_TALENT_1_SKILL";
    items[39] = "MENU_ITEM_TALENT_1";
    items[40] = "MENU_ITEM_TALENT_2_TITLE";
    items[41] = "MENU_ITEM_TALENT_2_SKILL";
    items[42] = "MENU_ITEM_TALENT_2";
    items[43] = "MENU_ITEM_TALENT_3_TITLE";
    items[44] = "MENU_ITEM_TALENT_3_SKILL";
    items[45] = "MENU_ITEM_TALENT_3";
    items[46] = "MENU_ITEM_TALENT_4_TITLE";
    items[47] = "MENU_ITEM_TALENT_4_SKILL";
    items[48] = "MENU_ITEM_TALENT_4";
    items[49] = "MENU_ITEM_TALENT_8_TITLE";
    items[50] = "MENU_ITEM_TALENT_8_SKILL";
    items[51] = "MENU_ITEM_TALENT_5_TITLE";
    items[52] = "MENU_ITEM_TALENT_5_SKILL";
    items[53] = "MENU_ITEM_TALENT_12_TITLE";
    items[54] = "MENU_ITEM_TALENT_12_SKILL";
    items[55] = "MENU_ITEM_TALENT_11_TITLE";
    items[56] = "MENU_ITEM_TALENT_11_SKILL";
    items[57] = "MENU_ITEM_TALENT_14_TITLE";
    items[58] = "MENU_ITEM_TALENT_14_SKILL";
    items[59] = "MENU_ITEM_TALENT_15_TITLE";
    items[60] = "MENU_ITEM_TALENT_15_SKILL";
    items[61] = "MENU_ITEM_TALENT_13_TITLE";
    items[62] = "MENU_ITEM_TALENT_13_SKILL";
    items[63] = "MENU_ITEM_TALENT_10_TITLE";
    items[64] = "MENU_ITEM_TALENT_10_SKILL";
    items[65] = "MENU_ITEM_TALENT_16_TITLE";
    items[66] = "MENU_ITEM_TALENT_16_SKILL";
    items[67] = "MENU_ITEM_TALENT_17_TITLE";
    items[68] = "MENU_ITEM_TALENT_17_SKILL";
    items[69] = "MENU_ITEM_TALENT_19_TITLE";
    items[70] = "MENU_ITEM_TALENT_19_SKILL";
    items[71] = "MENU_ITEM_TALENT_20_TITLE";
    items[72] = "MENU_ITEM_TALENT_20_SKILL";
    items[73] = "MENU_ITEM_TALENT_21_TITLE";
    items[74] = "MENU_ITEM_TALENT_21_SKILL";
    items[75] = "MENU_ITEM_TALENT_18_TITLE";
    items[76] = "MENU_ITEM_TALENT_18_SKILL";
    dimx = 8192;
    dimy = 8192;
    flags = flags | MENU_OVERTOP | MENU_NOANI;
    backpic = STAT_BACK_PIC;
};
Чтобы понять какой параметр за что отвечает нужно лишь просмотреть остальную часть файла (имеются некоторые ключевые слова по типу "Навыки Защиты" и т. д.) , все довольно интуитивно. Хочу отметить, что изначально было 75 параметров. Чтобы вывести навыки владения оружием в отдельную категорию навыков под названием "Боевые Навыки", мы добавляем новый параметр items[35] = "MENU_ITEM_FIGHTING_SKILLS_HEADING" (название придумал сам, не имеет особого значения, так для удобства). Не забываем соблюдать очередность в списке и поменять числа на N+1 для послестоящих параметров. Интересно что размер меню определяется параметрами dimx и dimy.

Мы лишь создали новый параметр, но нигде больше не указали. Игра не поймет что с ним делать. Для физической реализации добавляем следующее (желательно после навыков защиты и до навыков одноручника для целостности и удобства):
Код:
instance MENU_ITEM_FIGHTING_SKILLS_HEADING(C_MENU_ITEM_DEF)
{
    posx = STAT_B_X1;
    posy = STAT_FSHEAD_Y;
    dimx = STAT_B_X4 - STAT_B_X1;
    dimy = STAT_DY;
    text[0] = "БОЕВЫЕ НАВЫКИ";
    fontname = STAT_FONT_DEFAULT;
    flags = (flags & ~IT_SELECTABLE) | IT_TXT_CENTER;
};
Далее смотрим на переменные отвечающие за разметку:
Код:
const int STAT_A_X1 = 500;
const int STAT_A_X2 = 2500;
const int STAT_A_X3 = 3200;
const int STAT_A_X4 = 3300;
const int STAT_B_X1 = 3900;
const int STAT_B_X2 = 6200;
const int STAT_B_X3 = 7400;
const int STAT_B_X4 = 7700;
const int STAT_PLYHEAD_Y = 300;
const int STAT_PLY_Y = 800;
const int STAT_ATRHEAD_Y = 2900;
const int STAT_ATR_Y = 3400;
const int STAT_ARMHEAD_Y = 5825;
const int STAT_ARM_Y = 6325;
const int STAT_FSHEAD_Y = 300;
const int STAT_FS_Y = 800;
const int STAT_TALHEAD_Y = 2575;
const int STAT_TAL_Y = 3075;
const int STAT_DY = 325;
Тут все довольно просто, надо лишь поэкспериментировать. Также можно посмотреть ниже в файле для каких параметров встречаются каждая из этих разметок. Для каждого параметра в окне есть расположение по x и y координатам. Можно задавать координаты для индивидуальных параметров (например задать месторасположение для заголовка "Общая Информация" через обсолютные значения posx и posy). Но придется менять расположение и многих других параметров для целостности вида, поэтому все это делается через вышеуказанные координаты разметки. Например хотим двинуть первый столбец строчек налево немного, то уменьшаем параметр const int STAT_A_X1 c 500 до 400. И все что использует эту переменную координаты сдвинеться налево на 100 единиц, в данном случае весь первый столб переменных.

В данном примере наша задача вывести "Боевые Навыки" в отдельную категорию, а не под стандартное "Прочие Навыки". Поэтому придумываем дополнительные координаты разметки, в данном случае const int STAT_FSHEAD_Y и const int STAT_FS_Y. Интуитивно параметр STAT_FSHEAD_Y будет означать разметку для высоты (координата y) для заголовка (HEAD) нашей новой категории "Боевые Навыки" (Fighting Skills или просто FS). А STAT_FS_Y будет отвечать за первую строку содержания этой категории, то есть "Владение одноручником". Также важно обратить внимание на еще один параметр const int STAT_DY. Он отвечает за дистанцию между строчками во всем окне персонажа. Поэтому для разметки "Владение двуручником" не нужно задавать новый параметр, а просто указано так:
Код:
instance MENU_ITEM_TALENT_2_TITLE(C_MENU_ITEM_DEF)
{
    posx = STAT_B_X1;
   [B] posy = STAT_FS_Y + (1 * STAT_DY);[/B]
    fontname = STAT_FONT_DEFAULT;
    flags = flags & ~IT_SELECTABLE;
И так далее для владения луком (2 * STAT_DY) и арбалетом (3 * STAT_DY). Если нужно иметь разные дистанции между строками можно задавать координаты вручную для этих "не стандартных" параметров. Или же можно создать новую переменную разметки, например STAT_DY2. Все объяснять бесполезно, легче понять самому изменяя по одному параметру за раз и наблюдая за изменениями в игре.

Также хотел отметить, что тут мы изменили STAT_DY с дефолта 300 на 325. Это делалось под Gothic High Resolution FONT (Cyrillic) больший шрифт более удобный для чтения. Более наглядно в скрине.

Подобным образом можно редактировать Главное Меню и много других игровых меню. Можно например вывести список сохранений/загрузок в два столбца или добавить дату и время игры в вышеуказанное меню персонажа вместо меню квестов (ну это так, в теории, чисто для любопытсва попробовать стоит).

Результат с также некоторыми визуальными изменениями можно посмотреть более подробно тут. Сравнение с оригиналом прикреплено к посту. ;)
 

Вложения

  • Comparison.jpg
    Comparison.jpg
    208,5 KB · Просмотры: 766
  • Stats Font Cyrillic.jpg
    Stats Font Cyrillic.jpg
    211,9 KB · Просмотры: 801
Сверху Снизу