ДИ ЕГО знает: как это было сделано

Классический рассказ о разработке, сразу после конкурса.

В этот раз во время разработки записывал в блокнот некоторые моменты из разработки. Так что хоть какой-то план по рассказу у меня есть.

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

Конкурс

Внезапно на Gamin проводится конкурс текстовых квестов, визуальных новелл и прочего, где акцент именно на текст. Однажды уже участвовал в подобном — КРИЛ-2015, тогда это был новый опыт для меня и вынес простую истину: текстовые игры даже сложнее, чем классические аркадные экшн развлечения. Внёс и вынес. Спустя почти 10-ть лет мысль эта улетучилась и я, воодушевлённый возвращением в этот жанр, пошёл участвовать в конкурсе What?IF2.

Со старта конкурса, а вернее даже анонса его, были чёткие моменты определены лично для меня: хочу стереотипную, избитую и штампованную нуар историю в сеттинге будущего И при этом всё это на RenPy. Что этот за РенПай я не знал. Т. е. конечно я слышал, что это игровой движок для визуальных новелл, используется там Python, а ещё что он достаточно простой для новичков и мощный для старичков.

Старт. Берусь за перо

Началось мероприятие. В голове всплывала старая затея, как раз ещё со времён КРИЛ-2015: «детективная игра, где герой ищет пацана, который сбежал на корабль из этой(теперь предыдущей) текстовой игры». То есть всё достаточно просто. Это стало основной моих размышлений. Но перед этим я засел в Google и дня четыре искал информацию для чайника «как писать сюжеты». Конечно я что-то слышал про Трёхактную систему, круг Хармона, который на самом деле Кэмпбелла (мономиф). Но стоило освежить в голове, а то и новые вещи найти.

Собрал себе даже небольшой документ с, так сказать, bullet-строчками о чём каждый акт, что должно происходить и т. д. Документ, как мне кажется, помог и смог выстраивать структуру. Конечно во время написания документа-истории увлёкся и даже какие-то мелкие эпизоды пытался впихнуть в ту же самую трёхактную систему, словно это матрёшка.

А суть трёхактной простая, крайне сильно упрощаю конечно, но:

  1. Завязка. Экспозиция. Обрисовка мира, героев. Какая-то проблема.
  2. Конфликт. Само действие, решение проблемы и\или новые проблемы. Занимает 2/4 от всего времени фильма\серии\игры. Под конец финальное «столкновение».
  3. Разрешение. Или же последствия решений в 2 (это я так представил)

Точно берусь за цифровое перо

Время писать. С основной определился, выбрал движок, изучил теоретический материал. Писал текст аж в трёх разных местах: Google Docs, где писались итоговые текста, которые пойдут прямо в игру; Notepad++(txt) - тут писались заметки, локации, персонажи; Obsidian хоть и предназначен для текстовых документов, но я использовал для "рисования" графа повествования, чтобы одним взглядом смотреть на ветвистую историю.

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

Помимо стабилизации этой ветки появлялись и другие, собственно, поэтому и используется слово "ветка". Достаточно забавно вышло, что как начал с истории про Брата, так и закончил игру только с ней -- другие две банально не успел. Сейчас будет большой-небольшой спойлер, вот так выглядел граф ВСЕЙ истории этой игры:

story_2023-12-01.png

А вот так "отношения" персонажей:

characters_rel_2023-12-01.png

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

Время идёт, гремит наковальня

Дальше у меня в документе с историей идут записи прямо по датам. Это было весьма важно, уже и не вспомню, но события записаны такие:

  • 9 ноября 2023 - Закончил рисовать граф взаимосвязей сюжета. Приступил к написанию сценария в ГуглДок. 
  • 10.11.23 - Почти дописал первый акт.
  • 13.11.23 - Ничего не делал толком.

Здесь отметка, что "пару дней поделал ночью".

  • 19.11.23 - Сел снова делать. Сокрушался, что 5 дней ничего не делал по проекту.
  • 22.11.23 - Открыл РенПай. Начал изучать и перекидывать текст.
  • 23.11.23 - "Что-то гуглил". Очень важная информация. Возможно, это были имена персонажей, не вспомню.
  • 25.11.23 - Закончил перекидывать текст в движок. Нарисовал картинку.

По датам и непонятно когда закончил все 3 акта. Дедлайн конкурса был 26.11.23. Это привело к кранчам и значительные вещи были выкинуты. Т.е. логично, что из 3х сюжетных веток, которые были связаны, выкинул сразу 2, но и оставшуюся одну кое-как успел реализовать.

Игра завершена, в каком-то роде

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

Пойдём по первой ветке т.е. сценарию с Братом и Сестрой. Опять же, это спойлеры, поэтому вот так:

По задумке исследование локаций должно было быть куда интереснее. Ладно, я вру. Примерно такими они и должны быть, какими и задумывались: приходим, опрашиваем, получаем словесного пинка. В локациях должны были быть "авто-триггеры событий", что по сути сеть и сейчас -- придём и тут же наш герой вспоминает, что оказывается у него есть знакомый в охране. Неважно.

Вот что важно. Одна полу-реализованная вещь с локациями это счётчик хождения. Предполагалось, что если игрок будет много ходить туда-сюда, то есть тратить "время", то в конечном итоге сначала за кадром умирает "Близнец", а затем и Брат (Мирослав). И собственно в каких-то локациях можно было бы найти трупы этих персонажей. При этом, если бы это было тело близнеца и при этом с нами в напарниках была Сестра (Амелия), то она определила бы, что это не брат. Такой сценарий по сути отрубал бы весь третий акт оригинальной ветки.

Это был весьма важный момент в игре, который множил варианты всего, от чего под конец мне было сложно это держать в голове. Нужно было учитывать всех трёх НПЦ, их состояние, локации и комбинации всего этого. Совсем "голова пухла" от местных боевых сценариев, где это боль из головы уходила в точку ниже пояса. По итогу "внезапна смерть брата за кадром" была выкинута и не реализована, хотя какие-то коды до сих пор имеют проверку на состояние жизни.

Более общий аспект, который был, так сказать, выкинут и упрощён: боевые стычки. Предполагалась мини-игра или хотя бы действительно игра, где есть параметр здоровья (его нам даже портят в первом акте, если выбрать "неправильный" вариант диалога), снаряды, урон, враги и т.д. Но всё это сократилось до банального "выбери единственно верный порядок выбора в диалогах". Мда.

Чтобы разбавить текст, держите скриншот ... с текстом:

renpy_vscode_example_2023-12-01.png

А вот теперь интересности, которые совсем не попали в игру, а именно другие две истории. Ух, ну и намучился бы я сними при реализации. Поэтому расскажу кратко о чём они:

Задание выдаёт ревнивый муж, который говорит проследить за его женой, мол, по ночам куда-то ездит и ему не говорит. Мы следим и выясняем, что действительно она встречается с кем-то в Мотеле. Ночью. Ну Толстяк был прав! Или же нет? Совершается нападение (и боевой геймплей), потом погоня. Экшн! Во время всего этого мы спасаем жену и она выкладывает нам правду.

Правда заключается в том, что ... а хотя знаете, может не стоит вам рассказывать? Вдруг завершу игру?! Ах, ладно! Вероятно завершения примерно 0, так что вот. Выясняется, что она шантажирует корпората, и вот их решили устранить. Двух зайцев, так сказать. Концовка правда дурацая до нельзя: во время погони главный герой с дамой падают в воду, пытаются отогреться в доме, скидывают свои одеяния, НО ТУТ влетает Толстяк! И говорит "Ага! Попались!". Собственно тут развилка с уговором и попытками объяснить всё толстяку-мужу. Скажу лишь то, что есть вариант "а потом они все умирают".

Здесь всё куда проще. Незнакомец оказывается корпоратом, который прячется в Мотеле. Прячется почему? Его хочет ликвидировать его же корпа т.к. он допустил слив данных. Ну как допустил. Он его и устроил -- выкрал данные и продал хакерской группе.

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

В игру не вошли и графические элементы. Вернее, всё что я успел это задний фон для текста и того места, где должны были рисоваться картинки. Это же визуальная новелла. ВИЗУАЛЬНАЯ. Не вышло. В голове были какие-то редкие образы сцен, героев и прочего, но ничего из этого не успел совсем. Действительно лишь текстовая игра получилась.

О звуках даже не задумывался -- очевидно не успел бы. Музыку тоже сразу откинул, но тут мне помогли: razzle_dazzle откликнулся на запрос "может кто сделать какой-нибудь трек для киберпанк нуара?", и вот получилось. Благодарен ему за это.

А под конец образовалась такая карта локаций:

map.png

Вместо итогов

В результате можно округлить игру до 1/3 от задуманного. Спасает то, что это более-менее законченная история. А ещё я хочу побухтеть, что игра на ренпай, где 1мб текста, меньше 1мб картинок, весит в итоге 100мб. Что туда напихано!?

Мощь РенПая мне не далась т.к. поздно начал изучать его, посматривал какие-то видел, знал какие-то совсем базовые возможности. Питон я тоже не знаю, поэтому осложнялось дело и этим. При должном упорстве и паре итераций, думаю, можно из этой моей вещицы реализовать именно то, что я планировал изначально. Но буду ли я это делать? Вопрос.

Всем спасибо за внимание!