Привіт усі,
З попереднього допису ви могли взнати чому з'явилася ідея власного рушія візуальних новел Як починаються дурниці. І як борець за все хороше проти вього поганого, автор цього допису, з ентузіазмом побіг винаходити колесо, замість того, щоб робити гру.
Це буде технічний довгочит (не знаю чому мені подобається такий замінник замість лонгрід), я спробую зробити з нього більш зрозуміле чтиво, але на якомусь етапі піде страшне - технічна реалізація. Далі набіжать програмісти, хейтери і мене забере поліція.
Детальна технічна специфікація буде в кінці допису.
Як це планувалося
Отже з скриптовою мовою я розібрався, вона є, специфікація готова (ось і документація, її доречі оновили). Але на цьому усе готове закінчилося.
Далі потрібно було повністю зробити все своє:
- Те що читає скрипти і вміє працювати з усіма частинами гри
- Частина, що відповідає за локалізацію
- Частина, що оброблює спеціальні команди
- Частина, що виводить все для користувача у браузері
- Зробити так, щоб веб гру не могли легко зкопіювати, а якщо зламають, то код буде важко дістати і зрозуміти
- Так щоб воно і на чайнику запускалось і швидко працювало
Звучить як щось нормальне... ніт ) радше скажене. Так воно і є. Експериментальне і скажене.
Як це робе
Біда більшості двигунів візуальних новел - код всі можуть побачити і використати за бажанням. Підхід в який я вліз - замість мов що скриптові (як у 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)
Як програміст я розумію скільки сил та часу витрачається на таку от вундервафлю.
А як любитель поколупатись у рушіях скажу що конкретно для створення ВН юзати його ніхто не буде. Та можливо він стане в нагоді розробникам мультиплеєрних ігор.
Штука в тому, що і я не знав і не знаю. Але я фан для мене в тому, що це все може випливти у щось абсолюно інше, зовсім несподіване.
Ось як наприклад, телеграм бот, проста ідея, нічого революційного не сталося. Але в мене є можливість скриптового створення доволі просунутих телеграм ботів. Можливо мені просто потрібно почати заробляти на цьому вже зараз?
Чи а, що якщо це може стати основою для простих не ігрових інтерфейсів в умови де є купу обмежень по нагрузці ? Наприклад вбудовані автомобільні системи, чи літак? А може це полетить у космос, щоб космонавти розважалися з простенькими іграми на калькуляторі ?!
Я не знаю куди це мене приведе, але воно працює і воно мені самому подобається. Закинути я завжди зможу, продовжити теж.