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

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

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

Union SDK - Инструменты разработчика

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.641
Баллы
625
  • Первое сообщение
  • #1
UnionProjectIcon.png


Union SDK

инструменты разработчика

Тема находится в состоянии наполнения



Короткие видеоролики, смысл которых максимально быстро погрузить смотрящего в устройство движка готики.

Рекомендуется смотреть на YouTube, поскольку там имеется сегментированный таймлайн.






Схемы классов движка
1600263933953.png
1600263981919.png
1600264017579.png
 

Вложения

  • sizeof.xlsx
    896,7 KB · Просмотры: 77
  • Union_SDK_1_0m.zip
    20,6 MB · Просмотры: 94
Последнее редактирование:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.641
Баллы
625
N1kX вот жеж работнички то собрались тут, да?
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.661
Благодарности
2.486
Баллы
380
MEG@VOLT, диалог багается обычно (редко) в случае захода в диалог или когда быстро проматываешь, но ошибка не прям частая, я ловил только 2 раза и игроки массово не жаловались.
 

Ur-tRall

Участник форума
Регистрация
16 Май 2009
Сообщения
4.100
Благодарности
2.124
Баллы
475
Не знаю, в этой теме пишу или нет, но вопрос скажем по скриптовым возможностям Юниона.
Возможности из Готики 1:
1. Возможно ли в Юнионе нормально реализовать заклинание телекинеза, каким он был в Готике 1?
2. Возможно ли создать в Юнионе барьер с теми же свойствами, какие у него были в Готике 1? Он вшивается в движок готики 2 или нет?
3. Система субтитров в красных полях между двумя говорящими неписями. Можно ли её нормально реализовать? Не будет ли пропаданий субтитров после загрузки или перезапуска игры?
Возможности Икаруса+Лего:
4. Нормально ли работает на Юнионе триалог? Нет ли каких-либо провисаний?
5. Возможно ли на Юнионе нормально реализовать многостраничный документ с перелистыванием страниц на книжном стенде?
6. Реализована ли на Юнионе смена настрорения персонажей во время диалога?
7. Юнион записывает вовремя запись в дневник по ходу диалога? Тоесть допустим первая запись в дневник в первый квест после третьей строки, втораязапись во второй квест после пятой, третья и четвёртая в эти же оба квеста в предпоследней строке. Порядок следования в диалогах и отображения на экране будут нормально работать?
8. Нормально ли нга Юнионге работает монолог персонажа, который отображается красными субтитрами?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625
1. Возможно ли в Юнионе нормально реализовать заклинание телекинеза, каким он был в Готике 1?
2. Возможно ли создать в Юнионе барьер с теми же свойствами, какие у него были в Готике 1? Он вшивается в движок готики 2 или нет?
3. Система субтитров в красных полях между двумя говорящими неписями. Можно ли её нормально реализовать? Не будет ли пропаданий субтитров после загрузки или перезапуска игры?
Как я понял ты про те, которые в смалталке находятся?(между собой разговаривают. типа "ему нельзя доверять" и прочее). Что значит нормально?
4. Нормально ли работает на Юнионе триалог? Нет ли каких-либо провисаний?
отлично работает
5. Возможно ли на Юнионе нормально реализовать многостраничный документ с перелистыванием страниц на книжном стенде?
Где-то тоже тема есть. Вроде...
6. Реализована ли на Юнионе смена настрорения персонажей во время диалога?
Что? Этож обычные фразы, как диктор скажет так и будет...
7. Юнион записывает вовремя запись в дневник по ходу диалога?
1700584564061.png

8. Нормально ли нга Юнионге работает монолог персонажа, который отображается красными субтитрами?
Эм... а стандартными средствами что-то не получается?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.641
Баллы
625
Как я понял ты про те, которые в смалталке находятся?(между собой разговаривают. типа "ему нельзя доверять" и прочее). Что значит нормально?
Вероятно речь про то что исправляет патч #188

1700584823016.png
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
8. Нормально ли нга Юнионге работает монолог персонажа, который отображается красными субтитрами?
вообще никак с юнион не связано. "обрывание" монолога происходит при реакциях нпс на какие то действия. то есть всё что "сбивает" монолог можно отключить ручками. продумать все возможные ситуации и сделать что то универсальное просто невозможно :-D то есть если такое сделать это будет фактически кат-сцена.

7. Юнион записывает вовремя запись в дневник по ходу диалога?
ты наверное имеешь ввижу появления надписи на экране и/или звук?:) для надписи на экране ты можешь использовать штатную функцию AI_PrintScreen. а вот вызов звука можно "завернуть" как тебе подсказал МегаВольт.
 
Последнее редактирование:

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.697
Баллы
910
По дневнику можно вот так, зачем городить AI функции
Daedalus:
// **********
// B_LogEntry
// **********

func void B_LogEntry (var string topic, var string entry)
{
    Log_AddEntry    (topic, entry);

    //PrintScreen        (PRINT_NewLogEntry, -1, YPOS_LOGENTRY, FONT_ScreenSmall, 2);
    //Snd_Play         ("LogEntry");
    if (infomanager_hasfinished())    //активен диалог
    {
        PrintScreen(PRINT_NewLogEntry,-1,YPOS_LOGENTRY,FONT_ScreenSmall,2);
        Snd_Play("LOGENTRY");
    }
    else    //в любых других случаях
    {
        AI_PrintScreen(PRINT_NewLogEntry,-1,YPOS_LOGENTRY,FONT_ScreenSmall,2);
        AI_Snd_Play(self, "LOGENTRY");
    };
};
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
//активен диало
наоборот

Daedalus:
func void B_LogEntry (var string topic, var string entry)
{
    Log_AddEntry    (topic, entry);

    if (infomanager_hasfinished())    // диалог не активен (диалог закончен)
   //if hero.aivar[AIV_INVINCIBLE] == FALSE
    {
        // например герой что то нашёл или кого то убил или что то прочитал
        PrintScreen(PRINT_NewLogEntry,-1,YPOS_LOGENTRY,FONT_ScreenSmall,2);
        Snd_Play("LOGENTRY");
    }
    else    //  диалог  активен
   //if hero.aivar[AIV_INVINCIBLE] == true
    {
        AI_PrintScreen(PRINT_NewLogEntry,-1,YPOS_LOGENTRY,FONT_ScreenSmall,2);
        AI_Snd_Play(self, "LOGENTRY");
    };
};
Daedalus:
func void B_LogEntry (var string topic, var string entry)
{
     Log_AddEntry (topic, entry);

     AI_PrintScreen(PRINT_NewLogEntry,-1,YPOS_LOGENTRY,FONT_ScreenSmall,2);
     AI_Snd_Play(hero, "LOGENTRY");
};
 
Последнее редактирование:

Ur-tRall

Участник форума
Регистрация
16 Май 2009
Сообщения
4.100
Благодарности
2.124
Баллы
475
Как я понял ты про те, которые в смалталке находятся?(между собой разговаривают. типа "ему нельзя доверять" и прочее). Что значит нормально?
Да они. Чтобы после перезапуска игры или ещё когда либо не пропадали.
Что? Этож обычные фразы, как диктор скажет так и будет...
Нет, я про специальную функцию. Думаю мало кто о ней вообще знаетр.
Эм... а стандартными средствами что-то не получается?
Стандартными средствами в принципе получается, но надо менять настройки Готик.ини и то в ненкоторых случаях работает не слишком стабильно. Если бы Юнион без измменений настроек сразу нормально отображал такие монологи в игре, было бы хорошо.
Вероятно речь про то что исправляет патч #188
В Готике 2 они называются СВМ файлами. В Готике 1 кажется тоже. Всякие Аргхи, Я всё таки достал тебя, Он еще шевелится!
то есть всё что "сбивает" монолог можно отключить ручками. продумать все возможные ситуации и сделать что то универсальное просто невозможно :-D то есть если такое сделать это будет фактически кат-сцена.
Ну да, бывают всякие сбивания. Падальщик какой-н6ибудь клюнет, или ополченец в спину начнёт идти.
ты наверное имеешь ввижу появления надписи на экране и/или звук?:)
Только появление на экране. Дело в том, что в обычных скриптах если прописать появление записи в дневник осле третьей скажем строки, она прорсто появится в начале. И если записей было 4, они просто появятся в самом начале и будет идти диалог без каких-либо записей в дневник по ходу диалога.

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Дело в том, что в обычных скриптах если прописать появление записи в дневник осле третьей скажем строки, она прорсто появится в начале
выше про это три поста.

***


6. Реализована ли на Юнионе смена настрорения персонажей во время диалога?
Что? Этож обычные фразы, как диктор скажет так и будет...
Нет, я про специальную функцию. Думаю мало кто о ней вообще знаетр.
там же анимации лица идут. стандартными методами это меняется. смотри Mdl_StartFaceAni в ZS_Talk_Loop

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


Да они. Чтобы после перезапуска игры или ещё когда либо не пропадали.
решается переписыванием ZS_Smalltalk и B_Say_Smalltalk.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625
Чет я туплю:
zCMenu::GetByName("MENUITEM_MAIN_RESUME") добавляю ему ->flags += IT_DISABLED
Ошибки нет, проект компилится, но это не работает.
100% я не понимаю, как с меню работать.
Вопрос:
Как мне отключить определенный пункт меню?(на будущее)
А вообще мне нужно отключить возможность сохраняться(включая быстрое), чую че-то легкое должно быть, а вот че - понять не могу))
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
MEG@VOLT, а переменная menuAction на это случайно не влияет?
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
462
Благодарности
285
Баллы
230
Как мне отключить определенный пункт меню?
C++:
zCMenuItem* pMenuResume = zCMenuItem::GetByName("MENUITEM_MAIN_RESUME");
if (pMenuResume)
{
        // включить флаг
        pMenuResume->m_parItemFlags |= IT_DISABLED;

        // отключить флаг
        // pMenuResume->m_parItemFlags &= ~IT_DISABLED;

        // перерисовать элемент
        pMenuResume->DrawFront();
}
На сколько мне известно, все эти операции нужно производить внутри функции zCMenu::ScreenInit(). Соответственно нужно делать перехват функции.

Отключение QuickSave:
C++:
ogame->s_bUseQuickSave = 0;
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.469
Благодарности
1.993
Баллы
365
Если под быстрыми сейвами имеются ввиду нормальные быстрые сейвы, то хукай у CGameManager метод void Write_Savegame( int )
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.641
Баллы
625
А вообще мне нужно отключить возможность сохраняться
чую че-то легкое должно быть

Тупо и быстро. CGameManager::MenuEnabled вызывается всякий раз, когда движок проверяет возможность сохранения. Меняешь enabled на нужное значение и всё.[/icode]
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625

Тупо и быстро. CGameManager::MenuEnabled вызывается всякий раз, когда движок проверяет возможность сохранения. Меняешь enabled на нужное значение и всё.
Немного не то. Это похоже на zCMenu::inGameMenu = TRUE/FALSE, что собой выключает и пункт меню "Продолжить". Мне же нужно было отключить только пункт сохранения.
Соответственно нужно делать перехват функции.
Обошлось без хука, засунул в game_loop, то что получилось - мне полностью удовлетворяет.
Спасибо всем участвующим))
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.641
Баллы
625
Сверху Снизу