Куток

Обкладинка для допису Як починаються дурниці 2
ashlander для HaG Framework

Додано

Як починаються дурниці 2

Привіт усі,

З попереднього допису ви могли взнати чому з'явилася ідея власного рушія візуальних новел Як починаються дурниці. І як борець за все хороше проти вього поганого, автор цього допису, з ентузіазмом побіг винаходити колесо, замість того, щоб робити гру.

Це буде технічний довгочит (не знаю чому мені подобається такий замінник замість лонгрід), я спробую зробити з нього більш зрозуміле чтиво, але на якомусь етапі піде страшне - технічна реалізація. Далі набіжать програмісти, хейтери і мене забере поліція.

Опис картинки

Детальна технічна специфікація буде в кінці допису.

Як це планувалося

Отже з скриптовою мовою я розібрався, вона є, специфікація готова (ось і документація, її доречі оновили). Але на цьому усе готове закінчилося.

Далі потрібно було повністю зробити все своє:

  1. Те що читає скрипти і вміє працювати з усіма частинами гри
  2. Частина, що відповідає за локалізацію
  3. Частина, що оброблює спеціальні команди
  4. Частина, що виводить все для користувача у браузері
  5. Зробити так, щоб веб гру не могли легко зкопіювати, а якщо зламають, то код буде важко дістати і зрозуміти
  6. Так щоб воно і на чайнику запускалось і швидко працювало

Звучить як щось нормальне... ніт ) радше скажене. Так воно і є. Експериментальне і скажене.

Як це робе

Біда більшості двигунів візуальних новел - код всі можуть побачити і використати за бажанням. Підхід в який я вліз - замість мов що скриптові (як у RenPy мова пітон), я взяв мову компільовану, якщо просто - ви отримуєте exe файлик (далі буду казати "запускний файл"). Як результат - користувацький гуй вам а не код (gui - користувацький графічний інтерфейс).

Почекайте, почекайте скажете ви, але ж сам сказав - використовуються Yarn Spinner скрипти, скриптова мова, Карл! І це правда. Серце рушію - його інструментарій. Один з інструментів трансформує скриптову мову у іншу мову програмування, що компілюється і продукує запускний файл. Хоба. Те, що ви бачити на hag.pp.ua це запущений файлик. Всі діалоги знаходять в ньому, буквально, це не файлик який читає інші файлики з діалогами і їх відтворює, ні, в нього вбудовані намертво всі діалоги. Спробуй дістати розбійнику ).

Із мінусів, я поки що "поза зоною" усіх джемів. Тому що це не html файлики, і просто так зкачати його з itch і запустити теж не зможете. Але це буде мати неочікований поворот, дочекайтесь.

Але з шикарних плюсів - швидкість, стартує і працює ця штука дуже швидко (менше секунди), в спокою гра витрачає 15 мегабайтів + приблизно 2 мегабайти на кожного користувача пам'яті. Це дозволяє дуже економити ресурси того на чому все це запущено.

Безпека в браузері. А якщо просто зкачати гру з браузеру? - Не вийде, тільки сама програма знає про гру, вашу і інших, у вас в браузері - практично статичний сайт. Гра не закачується до гравця, лише маленька маленька маленька частинка.

Безпека добре, але є і погане, потрібний постійний обмін між грою на сервері і браузером гравця. Що ж, це дає затримку. І це правда.

Yarn Spinner не має команд з маніпулюванням зображень, але є дуже розширюваною мовою. Наразі є певні правила, за якими рушій автоматично підбирає зображення для персонажів і ситуацій. Наприклад якщо Настя каже щось, рушій буде перебирати Настя.[png|jpg|..] файлики, і якщо знайде - відобразить. З фоном ще веселіше, рушій уміє підбирати різні фото для комп'ютера чи мобільного, вертикально чи горизоньально розташованого. Так можна легко, без зміни коду добиватись праці на багатьох різних пристроях і все ще виглядати добре.

Рушій продукує багатокористувацький інтерфейс, отже можна робити мультиплеєри. Коли один гравець впливає на інших. Але нагадую це не 3D рушій реального часу, а покроковий, хоча з я знаю як перетворити його на "у реальному часі" - скажімо це буде "швидко-пошаговий в межах розумного".

Сюрприз

А тепер ще одна цікава особливість рушія, про яку знають не багато людей, а тепер будете знати ви.

Я казав, що рушій продукує запускний файл, накшталт exe. Але насправді файлів два. Рушій розроблявся таким чином, що діалогова система і внутрішні речі рушія знаходяться в одному файлі, а те що відображає для користувача в іншому. Що це дає ? - якщо залишити файл з діалогами і замінити файл з графічним інтерфейсом на інший, можна отримати зовсім інший результат.

Наприклад такий телеграм бот з тою самою грою що і у веб https://t.me/HaGTutorialGame_bot. Ці ігри повністю ідентичні, відрізняються тільки як вони відображають для вас гру. Хоба.

В далекому, а може ні, майбутньому я зроблю третій вигляд - з допомогою чогось потужнішого як ігровий рушій Godot. І це не так вже і складно.

Локалізація

Я пишаюсь цією частиною. І страшенно пишаюся братом, що зробив більшу частину інструментарію з локалізації, а тепер захищає нас від кацапів.

Щоб було зрозуміло, в мене у ігровому концепті йде у перемішку українська, англійська мови, і якщо до мене доєднається автор з іспанії і писатиме рідною мовою, перекладачі все одно не отримають місиво. Більше того з кожним новим перекладом збільшується можливість кращого перекладу. Оскільки якщо є повний чи частковий переклад, наприклад англійською, і якщо перекладач на іспанську знає англійську теж, йому запропонується варіант для перекладу з англійської у зручному форматі. А якщо знає більше мов, можна додати і більше, тоді перекладач зможе порівнювати різні переклади одразу в одному місці, щоб краще зрозуміти суть.

А ще перекладач отримає тільки зміни, з маркуваннями що саме потрібно перекласти. А ще робота перекладача не блокує і не блокується роботу/роботою розробників і авторів. І якщо автор щось змінить - перекладач це побачить і зможе змінити наступної ітерації. Не обов'язково чіпати перекладача кожен раз. А ще автори можуть залишати текстові мітки для перекладачів з лором гри чи вказівками і посиланнями для кращого перекладу. А ще можна перевірити роботу перекладача, чи нічого він не забув зробити, перед оплатою.

Ну звичайно все можна зіпсувати погано налаштованими процесами. Але мені подобається що вийшло.

Настав час дзвонити у поліцію

З цього моменту звичайним, не підкованим у технологіях, читачам можна закінчувати перегляд.

Основа - Yarn Spinner скрипти. Невідомий добрий пітонівський скрипт транслює все у C++ потім компілює. Якщо ви з жахом думаєте як вдалося веб технології запіхнути у с++ - то знайдіть проєкт wt (так зізвучне з Qt, і не без причини).

Інші використані проєкти і технології (через / то з гітхабу):

  • clang
  • conan
  • boost
  • cmake
  • kmhofmann/selene
  • ashlander/protoargs
  • ashlander/protoconf
  • gtest
  • asan
  • tsan
  • usan
  • docker

Результат компілюється тільки для Лінукс у бібліотеку з вкомпільованим діалогами і внутрішніми функціями. Бінарник збирається під конкретний вивід - web чи телеграм бот. Запускається і живе це все у докері. Просто і надійно.

Щасти

Топ коментарі (2)

Звернути
 
lisper_1991_71eab5e0ecc54 profile image
Lisper

Як програміст я розумію скільки сил та часу витрачається на таку от вундервафлю.
А як любитель поколупатись у рушіях скажу що конкретно для створення ВН юзати його ніхто не буде. Та можливо він стане в нагоді розробникам мультиплеєрних ігор.

Звернути
 
ashlander profile image
ashlander

Штука в тому, що і я не знав і не знаю. Але я фан для мене в тому, що це все може випливти у щось абсолюно інше, зовсім несподіване.

Ось як наприклад, телеграм бот, проста ідея, нічого революційного не сталося. Але в мене є можливість скриптового створення доволі просунутих телеграм ботів. Можливо мені просто потрібно почати заробляти на цьому вже зараз?

Чи а, що якщо це може стати основою для простих не ігрових інтерфейсів в умови де є купу обмежень по нагрузці ? Наприклад вбудовані автомобільні системи, чи літак? А може це полетить у космос, щоб космонавти розважалися з простенькими іграми на калькуляторі ?!

Я не знаю куди це мене приведе, але воно працює і воно мені самому подобається. Закинути я завжди зможу, продовжити теж.

Куток

Підписуйтеся на наші соціальні мережі:
Telegram
Twitter
Facebook


Тепер у нас також є Youtube канал!