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

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

Gothic ½ Humans-ремастер

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
  • Первое сообщение
  • #1
СТЕПЕНЬ ГОТОВНОСТИ СБОРКИ ДЛЯ ГОТИКИ 1/2 - 100%

Важно!

В Готике 2 дублируются блоки Lab (алхимия) и Pray (молитва). Разработчики таким образом вместо болотного алхимического стола и молитвы идолам и гуру сделали алхимический стол нового мира и поклонение Инносу. В сборке я переименовал эти блоки следующим образом:
LAB ---> LABNW
PRAY ----> PRAYFP

Если вы хотите использовать универсальный вариант и ваш проект предполагает оба варианта алхимии и молитвы, вам нужно для Pray в скриптах расписаний персонажей исправить указатель на анимацию с "Pray" на "PrayFP". А для алхимии исправить в спейсере идентификатор стола с Lab на LabNW.


Если вам не нужны блоки Готики 1, то удаляете Lab и Pray из MDS скрипта, а LabNW и PrayFP переименовываете в Lab и Pray соответственно.

В Готике 2 зачем-то поменяли инстанцию кузнечного молота. Поэтому нужно открыть Humans.MDS и поменять его имя тут:

Код:
// Gothic I
{
*eventTag    (4    "DEF_INSERT_ITEM"    "ZS_LEFTHAND")
*eventTag    (4    "DEF_CREATE_ITEM"    "ZS_RIGHTHAND"    "ItMw_1H_Sledgehammer_01")
}
// Gothic II
{
*eventTag (4 "DEF_INSERT_ITEM" "ZS_LEFTHAND")      
*eventTag (4 "DEF_CREATE_ITEM" "ZS_RIGHTHAND" "Itmw_1H_Mace_L_04")
}

Чтобы сменить в Готике 2 уровень новичка одноручного оружия, надо содержимое оверлея HUMANS_1HST0.MDS перенести в HUMANS.MDS, предварительно удалив соответствующие блоки Г1 оттуда. Для кастомных проектов можно через скрипт при старте игры единовременно наложить HUMANS_1HST0.MDS на героя.

У скелетов-магов заблокирован по умолчанию отскок ввиду проблем с AI.
aniDisable ("t_MagJumpB")
Чтобы отскок включить, надо удалить этот код, и расскомментировать строчку отскока, находящуюся выше этой строки.

Возможные пути решения проблем с зомби в GII описаны тут:
тыц
Делать отдельную модель зомби из-за странной реализации их в скриптах Г2а я не буду. Рекомендую вариант №3 решения проблемы, т.е. просто оденьте Торуса в новую броню через скрипты своего мода.

В Г1 и Г2 есть отличия в части анимаций кузнечного дела. При компиляции под Г2 надо внимательно проверить все ивент-теги для анимаций кузнеца. Я оставил в Humans.MDS комментарии, что раскомментировать, а что закомментировать. Отличия связаны с разной скриптовой реализацией кузнечного дела в обоих частях игры. Внимательно с этим!!!
Подробно тут:
тыц

ВСЕ тесты можно найти тут:

 

Вложения

  • Humans_Remaster_v1.05.7z
    56 MB · Просмотры: 1.372
  • G1 Demo.7z
    5,1 MB · Просмотры: 230
  • G2 Demo.7z
    6 MB · Просмотры: 375
Последнее редактирование:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.338
Благодарности
4.659
Баллы
625
Имеется ввиду обычное название предмета, которое написано в игре? Или какие-то скрытые идентификаторы, которые надо через Марвин смотреть или еще как то?
Посмотри внимательно на этот код и скажи какую однозначную закономерность ты видишь.
Daedalus:
instance ItMw_1h_Vlk_Dagger(C_Item)
{
    name = "Кинжал";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_SWD;
    material = MAT_METAL;
    value = Value_VLKDolch;
    damageTotal = Damage_VLKDolch;
    damagetype = DAM_EDGE;
    range = Range_VLKDolch;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = Condition_VLKDolch;
    visual = "Itmw_005_1h_dagger_01.3DS";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[2];
    text[4] = NAME_OneHanded;
    text[5] = NAME_Value;
    count[5] = value;
};

instance ItMw_1H_Mace_L_01(C_Item)
{
    name = "Кочерга";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_AXE;
    material = MAT_METAL;
    value = Value_Schuerhaken;
    damageTotal = Damage_Schuerhaken;
    damagetype = DAM_BLUNT;
    range = Range_Schuerhaken;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = Condition_Schuerhaken;
    visual = "Itmw_005_1h_poker_01.3DS";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[2];
    text[4] = NAME_OneHanded;
    text[5] = NAME_Value;
    count[5] = value;
};

instance ItMw_1h_Bau_Axe(C_Item)
{
    name = "Серп";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_AXE;
    material = MAT_METAL;
    value = Value_BauAxe;
    damageTotal = Damage_BauAxe;
    damagetype = DAM_EDGE;
    range = Range_BauAxe;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = Condition_BauAxe;
    visual = "Itmw_007_1h_sickle_01.3DS";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[2];
    text[4] = NAME_OneHanded;
    text[5] = NAME_Value;
    count[5] = value;
};

instance ItMw_ShortSword1(C_Item)
{
    name = "Короткий меч ополчения";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_SWD;
    material = MAT_METAL;
    value = Value_ShortSword1;
    damageTotal = Damage_ShortSword1;
    damagetype = DAM_EDGE;
    range = Range_ShortSword1;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = Condition_ShortSword1;
    visual = "ItMw_012_1h_Sword_short_02.3DS";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[2];
    text[4] = NAME_OneHanded;
    text[5] = NAME_Value;
    count[5] = value;
};

instance ItMw_1H_Sword_L_03(C_Item)
{
    name = "Старый волчий нож";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_SWD;
    material = MAT_METAL;
    value = Value_Wolfsklinge;
    damageTotal = Damage_Wolfsklinge;
    damagetype = DAM_EDGE;
    range = Range_Wolfsklinge;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = Condition_Wolfsklinge;
//    visual = "ItMw_012_1h_Knife_02.3DS";
    visual = "ItMw_012_1h_Knife_01.3DS";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[2];
    text[4] = NAME_OneHanded;
    text[5] = NAME_Value;
    count[5] = value;
};

instance ItMw_Sense(C_Item)
{
    name = "Малая коса";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_AXE;
    material = MAT_WOOD;
    value = 10;
    damageTotal = 11;
    damagetype = DAM_EDGE;
    range = Range_Sense;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = 5;
    visual = "ItMw_012_1h_Scythe_01.3DS";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[2];
    text[4] = NAME_OneHanded;
    text[5] = NAME_Value;
    count[5] = value;
};

instance ItMw_2H_Sword_M_01(C_Item)
{
    name = "Ржавый двуручный меч";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_2HD_SWD;
    material = MAT_METAL;
    value = Value_Misc2hSword;
    damageTotal = Damage_Misc2hSword;
    damagetype = DAM_EDGE;
    range = Range_Misc2hSword;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = Condition_Misc2hSword;
    visual = "ItMw_025_2h_Sword_old_01.3DS";
    description = name;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[2];
    text[4] = NAME_TwoHanded;
    text[5] = NAME_Value;
    count[5] = value;
};
 

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
270
Благодарности
85
Баллы
80
Gratt, флаг, обозначение категории предмета: sword, axe и т.д. Большая вероятность, что модостроители не будут его менять или делать новое оружие на несоответствующем флаге. Верно?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.338
Благодарности
4.659
Баллы
625
Двойка. Отдельного флага на кирки, посохи, орочье и копья не существует. Вот когда до тебя дойдет о чем именно я говорю, то формулируешь вопрос и идешь просьбой в тему с пожеланиями плагинов. Запрашиваешь дллку, которая выносит в скрипты события on_equip/on_unequip и текстовые фильтры, которыми ты будешь проверять соответствия и накладывать/снимать оверлеи на self.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.262
Благодарности
5.826
Баллы
940
Насмотрятся этих стримеров, которые играют, как им хочется, чтобы было круто и задорно и не делятся поделками :D
 

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
270
Благодарности
85
Баллы
80
Запрашиваешь дллку, которая выносит в скрипты события on_equip/on_unequip и текстовые фильтры, которыми ты будешь проверять соответствия и накладывать/снимать оверлеи на self
Прошу прощения за тупость, проясните момент:
В .dll части плагина достаточно просто вывести события on_equip/on_unequip в скрипты?
А непосредственно конфигурацию плагина можно будет прикрутить в легко редактируемому .D файлу?
примерная конфигурация:
какие анимации привязывать к каким категориям,
Логика на опознание категории: по флагу, содержанию ключевых слов в названии, в ID, в визуале и т.д.
Привязку к общей категории уровня владения Боец, Мастер. Или возможно даже добавить требование к владению 90%+

Я верно понимаю примерное ТЗ на пожелание в плагинах?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.338
Благодарности
4.659
Баллы
625

Dreamtrust

Участник форума
Регистрация
23 Янв 2023
Сообщения
270
Благодарности
85
Баллы
80
Gratt,
Комбо из вот этой анимации, нереально сложно попасть в тайминги:
ani ("S_2HATTACK" 1 "S_2HATTACK" 0.0 0.2 M. "HUM_BOSSCOMBO_01.ASC" F 1 100)
{
*eventTag (0 "DEF_HIT_LIMB" "ZS_RIGHTHAND")
*eventTag (0 "DEF_OPT_FRAME" "9 24 39 49 66")
*eventTag (0 "DEF_HIT_END" "19 36 48 65 96")
*eventTag (0 "DEF_WINDOW" "18 19 34 36 46 48 64 65")

Какие цифры отвечают за увеличение окна ожидания, чтобы он ждал хотя бы полсекунды, как в 1HST1 анимации.


UPD.: Разобрался
*eventTag (0 "DEF_WINDOW" "9 19 24 36 39 48 49 65") будет работать?
 
Последнее редактирование:
Сверху Снизу