Записки охотника за геймдевом


Вс Окт 17, 2021 18:14
Out_or
1  52  Свободный искатель


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

Началось все с https://quest-book.ru/online/view/Alien_The_Last_Escape
Потом перешло в https://quest-book.ru/online/view/NSS
И казалось бы закончилось на https://quest-book.ru/journal/2/189989
Но... нет.

Теперь я поставил перед собой цель пересобрать "Скелета" на отдельном движке, чтобы самостоятельно воплотить все авторские задумки так, как я это вижу.
Возможно я брошу все на полпути и займусь чем-то более насущным, посмотрим. Но пока блог будет, и в нем я собираюсь публиковать записки о стезе геймдева из овнага и алкапов (отсылочка).

Вс Окт 17, 2021 18:28
Out_or
1  52  Свободный искатель

Первым делом вопрос встал в движке. Выбор пал на RenPy, как наиболее простой (ага, как же), функциональный и вообще годный для текстовых игр.

Вы думаете, есть нормальные гайды по ренпаю? Забудьте! Всего 2-3 человека на сегодняшний день делают актуальные гайды и то редко, да скупо. Не говоря уже о реальном погружении в нестандартные задачи. Это касательно видео.

Текстовые гайды? Готовые модули? Ну что же, дружок-пирожок, большая часть гайдов и готовых модулей сделаны так, как будто автор просто хотел выпендриться – "смотрите как я умею". Серьезно, ребята, это просто куски кода, которые абсолютно непонятны, даже с наличием комментариев (которые все равно ничего не объясняют, т.к. автор пишет их, видимо, сам для себя, а не для педагогических целей).

Документация движка – возможно. Если вы уже имеете солидный опыт в программировании, а лучше профильное образование. Но в целом покатит, хотя документации, как и ренпай-вики явно недостает нормальных, понятно объясненных на пальцах примеров.

Реальное спасение – социальные сети, группы и сообщества по движку. Там, если ты достаточно вежлив и настойчив, тебе помогут разобраться с некоторыми вопросами. Но все равно, пока ты не убьешь на это часов пять и сам досконально не разберешься как и что работает – истинного понимания не прибавится.

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

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

Пн Окт 18, 2021 16:20
Out_or
1  52  Свободный искатель

Первый шаг – сборка того самого, нужного нам над-движка на ренпае.
Строго говоря, этот "над-движок" будет являться системным и гармоничным набором рукописных модулей (т.е. функций, экранов, формул и прочего бэкенда) для ренпая, которые будут решать необходимые нам задачи в игре именно ТАК, как это надо нам.

Для этого нужно:
1. Четко понять, что ты хочешь от игры в плане механики (ТЗ самому себе).
2. Четко понять, как это будет выглядеть со стороны игрока.
3. Осознать, что ты понятия не имеешь, как все это сделать.
4. Пойти искать гайды. Убить на это неделю. Понять, что бОльшая часть гайдов – непонятный шлак.
5. Убить еще неделю, все же найти пару нормальных гайдов, начать хоть в чем-то разбираться.
6. Осознать, что твое ТЗ на 80% (в моем случае) выходит за рамки стандартных приблуд ренпая, а следовательно и гайдов, т.к. их делают в основном по стандартным приблудам.
7. Задуматься.
8. Еще пару недель "тренироваться на кошках" познавая глубины базовой механики. Почувствовать прогресс и уверенность.
9. Найти пару специалистов, которые готовы раз в двое суток ответить на твои нестандартные вопросы. С их помощью все же освоить некоторые нестандартные приемы. Начать лучше разбираться в логике кода и движка. Поверить в себя.
10. Начать наконец писать модули.
11. Осознать, что с каждой новой строкой кода у тебя вопросов больше, чем ответов, т.к. написание, доработка и оптимизация нестандартных модулей требует все новых и новых и новых и новых приемов, о существовании которых ты даже не знаешь. И гайдов по ним тоже нет, ведь это... ТВОИ рукописные модули.
12. Еще месяц-другой погружаться во все это, раз за разом переделывая, улучшая, углубляясь в глубокие глубины.
...
PROFIT!!!

Теперь, дружок-пирожок, ты готов к тому, что сделать робкую попытку написать тот набор модулей, который ТЕБЕ нужен, причем, чтобы они не только были понятны тебе самому, но и гармонировали между собой, а может быть (если ты совсем отпетый мамкин программист), то они даже

БУДУТ РАБОТАТЬ В ИГРЕ!!111 (но это не точно).


Но так как все это уже пройденный этап, то проведем краткую перепись имеющегося добра, которое я уже написал своими натруженными мозолистыми руками к моменту начала блога.
___
1. Модуль, который отвечает за рандомизацию комнат с событиями. Причем на этот раз реально рандомный, т.е. на каждый новый заход будет новый набор комнат и новый порядок их посещения – и все это вычисляется математически через функцию, а не просто набором хитрожопых движений с переменными.
Хотя набор комнат-событий ограничен по-прежнему 3мя из 4х доступных, но при гибели ГГ и заходе снова:
1) удалится одна из посещенных в прошлый раз комнат
2) добавится та, которой в прошлый раз не было
3) комнаты будут выдаваться игроку в реально_случайном порядке

Можно было бы полировать рандом и дальше, но это пока ненужное идеалистическое теребоньканье, так что оставим "реально_полный_супер_мега_рандом" на попозже.

___
2. Модуль, отвечающий за возможность выбора, варианты ответа, последствия выбора. Причем модуль поддерживает (адаптивно_автоматически!!!) от 1 до 3 вариантов действий, которые легко (!!!) настроить прямо в параграфе. Для голого кода это очень важно.

___
3. Фича (модулем это не назовешь) с кнопками навигации, которые (почти_автоматически!!!) меняются в зависимости от стадии игры: переход между параграфами, выбор действия, гибель и т.д.

___
4. Модуль для состояния ГГ, а именно – его здоровье. Текущее, максимальное, прибавление, уменьшение, смерть, воскрешение.

Важная штука – это интерфейс. И хотя сам интерфейс и всякие приблуды с фронтендом будут прорабатываться в конце очереди, его стоит продумывать в самом начале.
Так, например, здоровье ГГ я хочу вывести в виде костей или черепов (типа НР-сердечек), чтобы они визуально отображались сверху, а не в виде просто цифры.

Стартовый набор для пробной сборки готов. Теперь задача собрать первый этаж и выловить все баги (хотя все модули уже прошли альфа-тест) и недоработки.

Чт Окт 21, 2021 23:46
Out_or
1  52  Свободный искатель

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

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

Сейчас суммарно вышло около 1000 строк итогового кода чисто по параграфам.
Еще 150 строк экранов, 100 строк функций, 150 строк в файле с переменными. Все это рукописные надстройки при уже имеющейся ренпайной базовой сборке.

Отдельной задачей стоит инвентарь. Это целая тема для ренпая, т.к. в базовом функционале он не предусмотрен. Есть несколько пространных гайдов и модулей, которые, возможно и работают, но вряд ли так, как нужно именно мне.

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

Добавил через 1 час 20 минут 12 секунд:

Для страждущих по скринам:

Вс Окт 24, 2021 20:20
Out_or
1  52  Свободный искатель

Тест цельного текста прошел хорошо. Конечно нашлись некоторые баги (неправильно вставлены варианты ответа, неверное форматирование текста и пр.), но все это мелочи и их легко устранить.

Инвентарь. Как много в этом звуке для сердца кодера слилось.
Поверьте, ребята, мало кто из непрофессиональных программистов реально понимает объемность объема этой задачи – сделать нормальный инвентарь в ренпае. Но обо всем по порядку.

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

И здесь даже сложно сказать, что вызывает наибольший страх и ужас:
а) внутренняя логика инвентаря
или
б) его внешнее отображение для игрока

Правильный ответ:

в) момент, когда игрок начинает взаимодействовать с инвентарем, т.е. воздействовать на его внутреннюю логику через его внешнее отображение.


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

___

В целом целая куча "типа инвентарей" основывается на простецких недо-решениях. Чаще всего этопросто набор переменных, отвечающих за предметы. Конкретно – параметр True/False (есть он у игрока или нет).
Для особо одаренных мамкиных программистов можно еще сделать счетчик неуникальных предметов, например яблок. Тогда показатель наличия яблок сменится с apple = True/False на apple = 0 (False) или > 0 (True).

Сначала была мысль взяться за этот формат, но все же сделать некий простейший инвентарь через авто-расширяющееся окошко (он же vbox) с кучей скрываемых/раскрываемых вставок, которые бы изначально были закрыты, и появлялись бы при получении предмета, когда значение "предмет X в инвентаре у ГГ" становился бы равен True.

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

Было принято решение делать инвентарь на основе списков (list) и конечно управляться все это будет через кучу взаимосвязанных функций (function). А в совокупности, ребята, это очень опасная штука. Серьезно, это вам не Чикатило и даже не архивы спецслужб.


...

Если бы я только догадывался куда меня заведет эта тропинка...
Да ладно, я догадывался.

Опуская технические подробности, могу заявить, что общий размер кода инвентаря и сопутствующих ему функций и фич не меньше (а то и больше) всего остального кода игры (технического кода, разумеется, текст самих параграфов не считается).
Но зато оно работает:

1. Можно добавлять новые предметы в инвентарь. Они будут отображаться на нужных слотах. При удалении предмета слоты будут пересобираться в нужный порядок (т.е. если удалили 2й предмет, то его место займет 3, на место 3 пойдут 4 и т.д.) и все это автоматически.
2. Можно класть в инвентарь несколько уникальных предметов. И каждый из них будет особенным, с индивидуальными настройками.
3. Предметам можно настроить все! Название, описание, иконку, действие, даже надпись на кнопке действия.
4. Можно принудительно класть или удалять предметы в ходе игры по сценарию. Можно делать это вручную самому игроку.
5. Можно проводить поиск по наличию / отсутствию предмета. И исходя из этого влиять на игру, на варианты действий, да вообще на все, что угодно.
6. При получении или потере предмета загорается иконка "предмет получен" или "предмет потерян" около кнопки инвентаря.
7. Сами новые предметы подсвечиваются так же, до тех пор, пока игрок не наведет на них мышь.
8. Функция принудительной очистки инвентаря.
9. При наведении курсора на иконку предмета подсвечивается подсказка с названием предмета (там может быть и любая другая информация)

И самое главное, что все это можно (при необходимости) сравнительно легко доработать, ввести, например, предметы с постепенным расходованием (типа фляги с зельем на 3 глотка) и прочее, прочее, прочее.

Но пока я достиг необходимого для Скелета (на самом деле перевыполнил план) и следующий шаг это внешний вид и доделка интерфейса.

Чт Окт 28, 2021 19:23
Out_or
1  52  Свободный искатель

Всем привет, с вами Джонни Геймвилл, и сегодня мы делаем шкуру для интерфейса.

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

Фон пока просто стенка. Картинки пока старые. Все это планируется обновить, сделать специально под игру.

Но довольно слов, даю картинку!

1. Общий вид интерфейса

2. Выбор действия

3. Индикатор "получен урон" (текст много где несоразмерен окну, местами наезжает на интерфейс, это еще предстоит доработать в дальнейшем)

4. Индикатор "инвентарь пополнен" (есть такой же с минусом, для "предмет потерян")

5. Гибель игрока (текст кнопки, как и в оригинале, каждый раз новый)

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

Сб Окт 30, 2021 22:00
Out_or
1  52  Свободный искатель

Вот вам немного интерфейса инвентаря и демонстрации его функций.

1. Пустой инвентарь.

2. Предметы в инвентаре с отметками "новое".

3. Окно "свойства предмета".

4. Окно "последствия использования предмета".

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

Вт Ноя 02, 2021 14:41
Out_or
1  52  Свободный искатель


Первичная демо-версия готова.
Отзывы и комментарии приветствуются.

Для ПК
https://clck.ru/Ycdfp

Для Андроид (только для планшетов)
https://clck.ru/YcCzv

Если найдете баг, то можете отписать отчёт (скриншот и описание как произошел баг) буду благодарен.

Пн Июл 18, 2022 21:08
Out_or
1  52  Свободный искатель

Всем привет.
Взялся за новый проект.
И вот его главный герой:

Интересно?

Хотя кого я обманываю.

Сб Янв 13, 2024 21:32
Out_or
1  52  Свободный искатель

Не прошло и... полутора лет


Как я взялся за дальнейшее развитие литературно-игрового жанра и создание ААА (нет) проекта.

С учетом всех накопленных знаний решил переделать Чужого.

Карта корабля собственного сочинения:

На данный момент мы имеем:
1. Интерактивная карта с перемещением маркера игрока по локациям.
2. "Легенда" на карте с обозначением отсеков.
3. Туман войны.
4. Индикация дверей: открыто / закрыто
5. Индикация карты и локаций вообще: неизвестно / разведано / посещено
6. Система журнала
7. Система событий (повествование в игре): текст / выбор / диалог
8. Система инвентаря с возможностью добавления / удаления / проверки предметов
9. Система активных предметов – возможность использовать предметы.
10. Схема прописывания игрового скрипта с учетом режимов событий.
11. Ввод текста через функцию с форматированием имени говорящего, либо без имени, если это повествование.
12. Технический интерфейс ко всему вышеперечисленному.

Вт Янв 16, 2024 22:19
Out_or
1  52  Свободный искатель

Понемногу подтягиваем интерфейс.

Представьтесь для добавления комментариев - регистрация в один клик!
Разделы форума