Она называется Branching Story, Unlocked Dialogue (Тойя Кристен Финли). Это учебник по проектированию и написанию визуальных новелл. Честно? Лучшее, что я находил на тему.
Она не про код. Она про то, как история становится игрой. Про то, как спроектировать ветвления, сделать выборы осмысленными, не обмануть ожидания игрока. И про персонажей — настоящих, а не картонных.
Пару примеров того, что вынес:
Трёхгранные персонажи (физиология — социология — психология). Раньше я писал «журналист расследует дело». Теперь у героя есть страх воды, разбитая семья и погибшая дочь, которую он не может простить себе. Это не фон — это двигатель.
Foldback structure (складная структура). Ветвления не должны расползаться в бесконечность. Игрок исследует мир, но все нити в итоге сходятся в одну точку — в момент выбора.
Концовки с разным эмоциональным зарядом (по Макки). Не просто «хорошо/плохо», а идеализм, пессимизм, ирония. Игрок должен уйти с чувством, а не со шкалой «правильно/неправильно».
В общем, книга — мастхэв. Если делаете свою ВН, начните с неё. Хотя я тот ещё советчик. Сам ничего толком не сделал)))
Теперь к сюжету
Я долго думал, как говорить о нём, не раскрывая главного. Поэтому расскажу только начало. Без без спойлеров, без финальных твистов. Только атмосфера и вопросы, которые возникают у героя в первый же день.
Утро. Рабочий стол в редакции. Ноутбук, бумаги, старая папка. На стене — дипломы и пожелтевшие газетные вырезки.
Изображеие создано с помощью Leonardo ai
Редактор даёт задание. Юбилей. Нужно написать материал к годовщине. История старая — четыре десятилетия. Исчезновение детей в санатории. Одна смена — целиком.
— “Ты обычный посетитель”, — говорит редактор. — “Никаких удостоверений. Разговори старожилов, сотрудников. Что бы всё красиво”.
Изображеие создано с помощью Leonardo ai
Журналист приезжает в санаторий весной. Его задача не офишировать свою деятельность, как будто он обычный зевака, случайно услышавший загадочную историю. Неофициально — разобраться в деле, которое не даёт покоя уже четыре десятилетия, и написать материал к очередной годовщине трагедии. Исчезновение детей в одну из смен. 1985 год.
Изображеие создано с помощью Leonardo ai
Санаторий встречает его тишиной и малочисленностью посетителей. Сезон ещё не начался и он один из первых посетителей. Весеннее майское утро. Фонтан во дворе ещё чинят. Персонал насторожен, но вежлив.
Изображеие создано с помощью Leonardo ai
Номер ещё не готов. Приходится ждать. Герой отправляется изучать территорию.
Изображеие создано с помощью Leonardo ai
В первый же день он находит несколько странных фигурок. Маленькие, сделанные из сложенной бумаги, будто кто-то специально подкидывает их ему. Двенадцать животных. Одна из них — в траве у фонтана. Другая в библиотеке.
Изображеие создано с помощью Leonardo ai
Он может поисследовать территорию санатория и найти несколько таинственных, по своей атмосфере, мест. Например, пожарную вышку в лесу.
Изображеие создано с помощью Leonardo ai
Так же он знакомится с персоналом. Медсестра, которая слишком много знает. Следователь, чей взгляд трудно выдержать. Старый сторож, который не говорит, но смотрит так, будто узнал. Музей с языческой статуэткой и бивнем мамонта.
И девушка. В белом платье. Сидит на краю фонтана, брызгает воду ногами. Смеётся.
— «Вы здесь, потому что ищете что-то», — говорит она. — «Я сразу поняла».
Ей нужно бежать. Обещает пересечься.
Изображеие создано с помощью Leonardo ai
Вечером в номере ломается туалет. Приходится идти в общий в другой корпус.
Собирается гроза. Удары молний освещают старые корпуса. Он видит между здания подозритльную фигуру.
Изображеие создано с помощью Leonardo ai
На следующее утро на пляже находят тело той самой девушки. Она просто лежит, слово уснула. Но она мертва.
Изображеие создано с помощью Leonardo ai
Расследование начинается.
Но герой ещё не знает, что ищет не убийцу.
Он ищет способ вылечить свою старую душевную рану. Попутно узнав правду, которую похоронили 40 лет назад.
И что ответы — намного глубже. Возможно, даже в другом мире, куда ему предстоит спуститься.
Прошу любить и жаловать - "Рандеву с Незнакомкой: Неспортивный интерес"
Я взялся за реинкарнацию этой игры в феврале 2025 года, на тот момент у меня уже был опыт в подобной разработке, поэтому Я рассчитывал что нынешний проект Я сделаю гораздо быстрее. Но Я ошибся. Только 5.05.26 мою раздачу наконец-то одобрила модерация теперь моя игра лежит в открытом доступе и каждый может с ней ознакомиться.
В качестве игрового движка Я сразу выбрал Ren'Py - он был идеальным решением для моих задач. А для того, чтобы реализовать этот проект нужно было иметь две глобальные составляющие - текст и логику игры, и сам контент в виде видеороликов. Обе задачи Я пытался решить параллельно, но быстро понял что лучше всего сосредоточиться на чём-то одном. Справедливо рассудив, что без доступа к самому контенту разрабатывать, по сути нечего, Я решил начать с него...
Если экран имел 8 предметов для подбора, то оригинальные разработчики создали отдельный файл для КАЖДОГО состояния экрана.
Все видеоролики игры были в формате .cmk и "зашифрованы", по крайней мере, мне так казалось - они были абсолютно не читаемы всеми известными и малоизвестными проигрывателями и всеми доступными мне кодеками(Codec Tweak Tool, AVIcodec, VirtualDub, Light Alloy, DivX и т.д. и т.п.). Я считал, что должен быть алгоритм, который сможет расшифровать содержимое контейнера и поэтому начал открывать каждый такой файл в HEX-редакторе и проверять начальные строки-заголовки. Было что-то такое:
Видно, что в правой части просто бардак, а вверху нет нормальных записей
В то время как открывая нормальный файл, Я видел такую картину:
RIFF и подобные названия служат служебной информацией, благодаря которой система понимает структуру файла и может корректно прочитать видео и звук
По итогу, Я пришёл к идее, что, возможно, хитрые разработчики из начала нулевых сместили в записях 1-2 бита в каждом блоке, а декодер просто возвращает всё обратно. Я честно пытался повторять заголовок, но результатов не было. Не помогла даже нейросеть, её алгоритмы перебивки тоже не дали результатов. Я думал о простой логике XOR (это когда работает "исключающее ИЛИ". Если биты разные - то 1, если нет - то 0). Но как понятно, попытки подобрать ключ тоже провалились. Я уже был на грани отчаяния. Я даже использовал реверс-инжиниринг, когда пытался открыть исполняемый файл через Гидру, но там такая муть, что лучше туда вообще не лезть.
Но неожиданно Я наткнулся на программу-декодер, которая как раз работала с этим типом файлов и благодаря уже ей и ffmpeg (набор утилит для работы с видеофайлами), мне удалось открыть все файлы, а после использовать Any Video Converter Ultimate, чтобы пересобрать видео в доступный формат .avi. Итак, одна проблема закрылась - на это ушло около месяца...
Что касается второго главного столпа - логики и текста, то проблема заключалась в защите StarForce, которая добавляла свои драйверы в корневую папку Винды system32. И если Вин ХР относилась к этому ещё терпимо, то современные ОС просто выдавали синий экран. Мне даже пришлось переустанавливать свою ОС 11...
Чёртова дрянь положила мою ОС
Поэтому пытаться запустить старую игру на современном железе Я перестал и сосредоточился на эмуляции Вин ХР, мой выбор пал на VMware Workstation 16 Player. Однако и там пришлось искать старые версии Daemon Tools из rutracker чтобы они могли там работать. Как только игра была установлена, меня снова ждала неудача - чёртов StarForce видел эмуляцию и отрыто посылал меня, а ещё и до кучи все мои усилия, нахер. Он мотивировал это тем, что моя ОС не удовлетворяет базовым потребностям игры.
Но мне повезло: оказалось что на данную игру, энтузиасты выпустили кряк, который выключает защиту StarForce, однако работает он только для Вин ХР. По крайней мере, запустить игру с этим кряком на моей ОС Вин 11 не получилось.
И вот игра наконец-то запустилась и процесс официально пошёл вперёд.
Я взял таблицу Excel и пошагово переносил всю логику переходов, реплик и видеофайлов.
Ещё со старта переноса Я определил для себя, что постараюсь создать маршрут прохождения при котором игрок сможет увидеть весь доступный контент за одно прохождение. И для этого нужно было создавать переходы, которых в оригинальной игре не было.
Логика игры, куда же в 21 веке без ручки и листочка?
Понятно, что качество видеороликов с расширением 512х384 выглядит слабо, но такое качество решало сразу две проблемы: 1. Мне не нужно было апскейлить видео для лучшего качества, тратя время ещё и на это (сохраняя дух оригинала?) 2. Потенциальные игроки не будут качать 8+ ГБ игру 2006 года, где контента и так особо не много. Они лучше пойдут играть порно-пародии Genshin Inpact
Была конечно идея перевести игру на английский язык, просто добавив субтитры, но Я посчитал это уже перебором - просто потому что потребовалось ГОРАЗДО больше моего времени, а закончить хотелось побыстрее.
Лишь малый фрагмент
Уже где-то к началу лета Я полностью закрыл логику и текст игры и наступал тот самый интересный этап разработки, который идёт сразу же после сбора ассетов - сама РАЗРАБОТКА.
Прописываем переменные, обнуляем их, пишем стартовые параметры, логику, реплики и т.д.
Мой рабочий стол 1 выглядел так. Слева уже финальный продукт. Скринов из процесса разработки, к сожалению нет.
Рабочий стол 2
Как по мне, текстовый редактор Atom хорошо справляется с задачей, хоть РенПи и ругается, что поддержка его отключена, ну да ладно. Подсветка, удобность и возможность работы с разными языками программирования убедили меня остаться именно в нём, о чём Я не жалею.
Чат GPT меня тоже полностью устраивает, оформив платную базовую подписку, Я закрыл все свои вопросы, о чём тоже не жалею ни разу.
Именно с ГПТ моя работа вышла на новый уровень, если в своём первом проекте Я опирался на руководство и метод "тыка", используя только базовый арсенал функций Питона, то с ГПТ, активно в работу стали включаться пользовательские экраны, пользовательские функции, кнопки и так далее. Мой проект стал лучше в логике и ярче в интерфейсе. Хотя на момент лета-осени 2025 об интерфейсе речь ещё не шла, т.к. выполнялась основная задача - перенос логики игры и тестирование.
Где-то уже глубокой осенью этот замечательный процесс был закончен и пришло время добавления альтернативных экранов, а также примитивной системы инвентаря. Допустим, ты подбираешь предмет на экране, но сам использовать его не можешь, в нужный момент тебе открывается реплика в которой ты можешь "применить" данный предмет.
Например здесь, сценой ранее мы подобрали бутылку коньяка.
На моменте создания альтернативных экранов мне пришлось осваивать Photoshop, чтобы лучше вписать наличие/отсутствие предмета на экране. Если раньше для меня это делала моя знакомая (каюсь, мне было лень разбираться), то в этот раз ради качества картинки, Я взял и эту работу в свои руки. Для этого мне с головой хватило Adobe Photoshop 2026.
После проб и ошибок, получилось что-то такое:
Коньяк на месте не выделен, коньяк при выделении и экран уже без него. Обратите внимание на тень от бутылки, Я пытался сделать её естественной
Я не могу сказать, что получилось идеально, однако, в целом, Я доволен результатом.
Именно на моменте работы над предметами и альтернативными экранами, мой энтузиазм заметно просел и у меня уже во второй раз упали руки.
Альтернативные экраны заняли у меня непростительно большое количество времени. Все они лежали у меня в одном отдельном файле, в котором они компактно и удобно размещались.
Как видно их не так много
А вот функции, которые нужны были для адекватного и удобного воспроизведения видео было очень много. Если бы мне сказали со старта про их количество, Я бы может и не начинал бы всё это.
Самые разные функции на которых всё держится - от случайной очереди реплик в меню диалога, до скрытия/отображения боковых панелей во время мини-игры
Каждая функция это не просто моя прихоть - Я исходил из двух вещей - как было в оригинале и как будет сегодня удобнее во всё это играть. Некоторые вещи из оригинала Я намеренно не внедрял (как невозможность пропуска некоторых катсцен), некоторые вещи убрал из функционала РенПи (такое как обратный скроллинг через колёсико мыши), а некоторые добавлял с нуля (как удобный пропуск катсцен из отдельного меню, совершенно иной подход к мини-игре).
Время шло, логика переходов нуждалась в обновлении, для этого нужно было редактировать логику и сами видеоролики. Для редактирования роликов Я использовал Vegas Pro 17. Без русификатора было сложновато, но тем не менее, мне удалось сделать примитивные переходы, которые худо-бедно вписываются в игру и в общую логику повествования. Там были тоже свои заморочки - например, нужно было правильно рендерить видео, чтобы оно не расходилось с расширением остальных видео, для этого Я создал отдельный сценарий рендера:
Хотя, думаю, в игре будет заметно различие между оригинальными видео и теми, какие отрендерил Я
И скажу сразу про звук, по моему мнению, для такого вида работ вполне хватит редактора Audacity, он закрывает все базовые потребности.
Я сделаю небольшое отступление и скажу, что чем сильнее Я погружался в разработку на РенПи, тем сильнее понимал, что данный движок хорошо подходит под классические Визуальные новеллы, а для работы с видео и форматом FMV игры он имеет ряд особенностей, которые могут перетекать в практические проблемы. Например, пришлось создавать отдельные функции для воспроизведения видео, звука в них, положение на экране, создание условий пропуска, остановки воспроизведения и так далее. Скажу, что это было, мягко говоря, изнурительно и затруднительно. Но Я как чайник - пыхтел как мог.
Ну а мы потихоньку приближаемся к отдельному этапу разработки - созданию мини-игры в шашки. Я специально оставил её на конец разработки, т.к. понимал, что это отдельная работа, на которую можно переключиться тогда когда предыдущая работа будет выполнена. И вот, когда логика игры была выстроена на 95-97% Я приступил к шашкам...
Именно таким разбитым Я себя чувствовал собирая шашки в единое целое
Оригинальные шашки не блистали инклюзивностью и разнообразием графики. Но надо отдам им должное - ИИ оригинала мог дать фору сегодняшнему, разрывал мои шашки только так.
Я начал с визуала - воплотить для начала саму сетку, сами шашки и просто положить их в клетки. У меня не было идей и виденья как это сделать в РенПи, но ГПТ мне помог и с этим - именно ему принадлежит идея разбить сетку на значения и просто менять их в зависимости от её статуса.
Логическое обозначение статусов клеток поля
Оригинальная сетка уже была кривой сама по себе и наша прямоугольная сетка упрямо не хотела ровно ложиться на неё - постоянно наши поля съезжали
Мучаясь с оригинальной сеткой пару дней Я решил создать с нуля новую и после поиска в интернете нашёл нормальную ровную сетку:
Именно она стала финальным вариантом
Перенеся шашки/дамки и их статусы в игру, Я приступил к логике ходов. Поначалу, тестируя ходы, итоги игры и общий вывод логики в основную ветку, Я играл сам с собой, доводя вид шашек, ходов, звуков ходов, вывод текста-статуса до нормального состояния. В итоге получилось вот так:
Я специально решил добавить серию выигрышей до 2 побед из 3х игр
На половине реализации, играя всё время белыми, Я обнаружил, что в игре мы должны играть чёрными....
И опять Я стал переделывать, уже в который раз - теперь обозначение в логике шашки w - на визуале чёрные, а b - белые...
Закончив с этим, Я перешёл к тому, чего раньше делал - написанию простого бота для игры. Его создание и полировка тоже потребовала много времени, но как бы Я не старался, мне не удалось создать сильного противника. Дело в том, что Я искал золотую середину - чтобы бот не был таким жёстким как в оригинале и чтобы не был полным профаном. Получилось на самом деле, так себе - бот всё-равно использует случайную тактику, но если ему повезёт и игрок зазевается, то он сможет одержать победу. Поэтому если нельзя усилить логику бота, Я решил продлить сам матч - серия до 2 побед хорошо под это подходит.
Как мне кажется, результат получился удовлетворительным, особенно на РенПи.
Закрыв уже полностью логику игры, пофиксив баги, очапятки, создав дополнительное меню, и финал, Я решил переходить в новое для себя пространство - оформление интерфейса.
Это было далеко не так
Оригинальный интерфейс был очень примитивным, но свою задачу выполнял хорошо. У меня же, из-за РенПи появилось огромное количество экранов и пустого места, которое надо было чем-то заполнить. Каждый экран Я переделывал, у меня почти не осталось стандартных экранов. Например, экран Настройки Я обрезал, оставив только нужные функции
Как видно, внизу было неприлично много места, поэтому Я решил добавить одного из персонажей. Об этом чуть ниже
Тоже самое касалось и других экранов, например Сохранение:
Слева тоже была пустота
Закончив с этими экранами, мне надо было добавить туда контент, иначе они выглядели бы как-то пустовато... И для этого Я снова вышел в область, в которой вообще не разбирался и там уже у меня снова упали руки, уже в 3й раз...
Рисовать Я не умею, создавать модели в 3Д, это вообще треш, поэтому единственный для меня вариант был создание изображений через нейросеть. Я стал копаться в этом вопросе, чтобы она соответствовала моим критериям - создание изображений реалистичных людей на основе загруженных фото, например Image-to-Image (img2img) или Stable Diffusion, и создание контента 18+. Однако, Я быстро понял, что контент 18+ не так-то просто создавать на основе загруженного материала - все доступные нейронки уже сильно ругались на то, чтобы создать человека женского рода в плавательном костюме, поэтому создание такого контента Я отложил уже до следующих проектов, мне удалось, однако, создать всего 2-3 изображения, которые были внедрены в игру, остальные тестовые изображения не прошли по разным причинам, и мне жаль, что так получилось - там были неплохие картинки. На удивление, более лояльная к таким запросам была именно Sora, помянем этот сервис.
Каждый элемент главного меню кликабелен и имеет свою анимацию, которая пересекается с областью других кнопок, было много заморочек, но использование маски смогло закрыть косяки. Маска - это когда под твоим изображением есть зона, которая показывает курсору что именно здесь можно кликать. Именно эта зона называется маской.
1/6
Изображения и их маски
Это скрин из раздела "Помощь"
Для редактирования курсора Я использовал RealWorld Cursor Editor - очень простая программа и хорошо реализована.
Всё это продолжалось до апреля 2026 года, когда был построен первый рабочий билд Я отдал его своим друзьям для тестирования, но за пару недель они нашли только одну опечатку - существенных багов не обнаружилось или вообще не искалось.
Также Я пытался получить добро на рекламу комплекса, который был в оригинале, но администрация, увидев контент игры, отказалась. Ну да ладно.
А что сейчас? На данный момент мне удалось создать свой блог на Бусти и выложить этот и мой предыдущий проект туда, а также выложить его на pornolab.net , где его на 9.05.26 скачало 33 пользователя. Есть версия также и для МАС.
В завершение хочу сказать самое главное - если ты разработчик, то не опускай руки. Сегодня есть много инструментов которые могут существенно облегчить тебе путь, например мне очень сильно помог ГПТ. Да, это изнурительно, тяжело и муторно, болит голова и есть желание бросить, но таков путь, особенно если делаешь всё в одиночку. Также нужно держать в голове схему логики, схему последовательности работ над проектом и двигаться по реализации одной задачи, не распыляя ресурсы сразу на 5-10. Всё у тебя получится, ведь получилось и у меня, хотя Я ни разу не профессиональный разработчик.
Я хочу поблагодарить всех тех кто играл в мои проекты - сам этот факт говорит о том, что моя работа не была проделана зря. Я открыт для конструктивной критике и предложениям. Спасибо что дочитали.
Хочу сделать очень важное для игры место — местный музей.
Начал с нового персонажа. Пока это просто музейный работник.
Изображение сделано при помощи Leonardo ai
Затем я добавил экстерьер музея.
Изображение сделано при помощи Leonardo ai
И интерьер.
Изображение сделано при помощи Leonardo ai
Да, проблему я вижу. Основная — полное несоответствие фасада и внутреннего убранства. Проблема в том, что все предыдущие здания я делал не из головы, а использовал очень конкретные фотографии мест, где сам был, в качестве референса. Даже в случае проявления фантазии получалось сохранять целостность. Здание музея же взято с нуля, и здесь я, скорее всего, всё переделаю в будущем. Но пока важно, чтобы всё работало.
Здесь будет много активностей и квестов. Например, после выполнения задания от музейной сотрудницы герой получит банку с 15-копеечными монетками для игрового автомата — это открывает бесконечную игру в «самолётик».
Изображение сделано при помощи Leonardo ai
Ещё здесь будут важные сюжетные предметы, среди которых бивень мамонта и древняя деревянная фигурка.
Изображение сделано при помощи Leonardo ai
Вот такой фронт работ. А теперь собираю всё вместе и смотрим, что получилось за день.
Всем привет. Был в небольшом незапланированном отпуске — работать над проектом не мог. Но теперь продолжаем.
Начну с концепции. В целом атмосфера игры у меня начинает вырисовываться. Да, пока картинка светлая и красочная, в стиле студии Ghibli, однако сюжет предполагает её постепенное изменение в сторону более загадочного и атмосферного сеттинга. Это не хоррор, но загадка и саспенс будут присутствовать. За референс атмосферы я взял Twin Peaks. Что-то такое, ну вы понимаете.
Кадр из сериала Twin Peaks
Название города, где находится реальный санаторий, я, конечно же, поменял. Но кто знает — тот знает. Картинку с Двугорском я создал в качестве концепта и пока не знаю, где она будет использована: либо на главной заставке, либо в открывающем интро. Но это в будущем. А пока о насущном.
Альбом
В игре будет интересный инструмент — альбом. Это что-то вроде заметок на полях, блокнота и части головоломок вместе. По сюжету альбом есть у героя с самого начала, и он листает его по ходу игры.
Механика простая: побывав в определённом месте или сделав какую-то активность, герою открывается нужная страница. Например, открыв локацию и взяв фотографию, герой помещает её в альбом. Фотографии чаще всего будут старые, с описаниями, дающими пищу для размышлений или подсказками, а также раскрывающими историю места и события, предшествующие игре.
Начал я с того, что сделал иконку альбома на основном экране. Это оказалось непросто. Сначала она болталась сверху, потом начала наезжать на иконку рюкзака.
Изображение создано при помощи Leonardo ai
И наконец после ручного изменения параметров она встала где нужно.
Изображение создано при помощи Leonardo ai
Код инвентаря
Затем я начал реализовывать задумку, чтобы альбом не был виден весь изначально, а открывался по мере прохождения. Так появилась первая заглушка.
Изображение создано при помощи Leonardo ai
На первом экране в альбоме ничего нет. Но если выйти и подойти хотя бы к первой статуе, в нём уже появляются кое-какие записи.
Я сделал их в виде фотографий с текстом.
Изображение создано при помощи Leonardo ai
Какие-то фотографии будут разбросаны по территории санатория в виде предметов, другие откроются просто так. Например, где-то можно будет найти полароидный снимок.
Сегодня воскресенье, и я надеялся отдохнуть от новеллы. Позаниматься чем-то связанным с игростроем, но простым, чтобы это заняло минимум времени. Эх, как же я был наивен. Но обо всём по порядку.
Моя задача на сегодня изначально была сделать какую-нибудь простенькую игру за день, чтобы подтянуть свои навыки и в то же время расслабиться.
Под эту задачу отлично подходили игровые автоматы СССР. Когда я начал изучать игры на них, то подумал: это была бы отличная вставка в игру. Старый советский автомат, на котором можно реально поиграть. Круто.
Мой выбор после изучения истории пал на «ПЕРЕХВАТЧИК».
Такой вполне мог бы стоять где-нибудь заброшенным в библиотеке. Я даже придумал сайд-квест: герой попадает в местный музей, выполняет задание библиотекаря, за что та даёт ему банку с 15-копеечными монетами. После этого автомат можно запустить и играть. Но сначала нам нужно саму игру сделать.
«Перехватчик» — это сайд-скроллер, где вы управляете самолётиком, взрываете вражеские истребители и набираете очки. Стоимость одной игры — 15 копеек, за которые можно летать определённое время.
Мой план был таким:
Сделать рамку автомата (arcade_frame.png)
Сделать экран монитора (arcade_screen.png)
Сделать временную кнопку закрытия (или просто клик по экрану)
Написать простой цикл игры: игрок (белый квадрат), враги (летят сверху)
Добавить стрельбу по пробелу
Добавить столкновения (игрок — враг)
Добавить счёт
Чтобы ничего не напутать, я создал новый проект в Ren'Py и отдельный файл в Visual Studio, где прописал первую заглушку игры. Файл поместил в папку game нового проекта.
text "ПЕРЕХВАТЧИК" size 60 color "#ffffff" outlines [(2, "#333", 0, 0)]
text "Тестовый экран" size 40 color "#88ff88"
text "Кликните мышкой, чтобы выйти" size 24 color "#ffffff"
# Кнопка выхода (просто текст)
textbutton "X" action Return() xalign 0.95 yalign 0.05
label test_interceptor:
scene black
"Подходите к старому игровому автомату..."
call screen interceptor_game
"Вы отошли от автомата."
return
Файл script.rpy в новом проекте я полностью почистил, оставив только две строчки.
label start:
jump test_interceptor
При запуске появился экран.
При нажатии кнопки «Начать» запустился экран игры. Пока всё работает.
Отлично! Экран появился — это прогресс. Кнопка «X» работает как выход. Но это пока лишь заглушка. Самой игры ещё нет.
Продолжаем и теперь пишем код для самолётика.
Это база. Дальше нужно добавить:
Движение врагов
Пули
Проверку столкновений
Увеличение счёта
Game Over
Сам код со стрельбой и врагами получился достаточно объёмным, поэтому публиковать его здесь целиком не вижу смысла. Отмечу только, что в нём присутствуют такие элементы, как…
1. Движение игрока (влево-вправо)
if ev.type == pygame.KEYDOWN:
if ev.key == pygame.K_LEFT:
self.player_x -= 30
if self.player_x < 0:
self.player_x = 0
elif ev.key == pygame.K_RIGHT:
self.player_x += 30
if self.player_x > self.game_width - self.player_width:
Вышло достаточно залипательно, но пока не работал счётчик очков.
Как выяснилось, счётчик не обновлялся, потому что Ren'Py не перерисовывал экран при изменении переменной score в классе. Нужно было явно вызывать renpy.redraw() и передавать актуальное значение счётчика в экран.
Дальше пошли мучительные исправления. Что бы я ни делал — счётчик не работал. Но когда я добавил картинки, всё каким-то чудесным образом само починилось.
Графику я начал с самолётика.
Вырезал из оригинальной игры самолётик. Правда, там он вытянутый, а у меня квадратный.
Обвёл его примерно по контуру.
И отразил.
Ну и доработал немного свой шедевр, вырезав кабину для пилота. Размер — 48×48 px.
Вражеский самолётик я перевернул и покрасил в красный. Он уже 40×40 px.
Экран автомата я пока просто сделал рандомной картинкой из интернета — проверить, работает или нет.
Ну и кнопочка выхода. Два варианта обычная и при наведении.
Например, создал набор фигурок для дополнительного челленджа.
Изображение сделано при помощи Leonardo ai
Челлендж сбор фигурок: двенадцать фигурок спрятаны по территории. Найдёте их все — откроете секретную концовку.
Создал иконки в стиле какой-нибудь NiNo Kuni.
Изображение сделано при помощи Leonardo ai
Сделал медсестру Нину.
Изображение сделано при помощи Leonardo ai
Добавил новую локацию. Домик с водными процедурами.
Изображение сделано при помощи Leonardo ai
Сделал интерьер домика с водными процедурами
Изображение сделано при помощи Leonardo ai
И саму процедуру
Изображение сделано при помощи Leonardo ai
Немного покодил. В частности, прописал вход в домик с водными процедурами и общение с медсестрой.
Пример кода:
Затем начал, как я думал, с простого, но провозился достаточно долго. Сначала подготовил иконку инвентаря, но она в размере 64×64 была слишком мелкой. Пришлось увеличить до 128×128. Так же понадобилась иконка при наведении. Вроде где-то читал, что можно это проделывать и через одну иконку (кодом), но пока не разбирался и сделал по старинке, как умел.
Изображение сделано при помощи Leonardo ai
Изображение сделано при помощи Leonardo ai
Вот так это выглядит в масштабе экрана. Возможно, крупновато, но 64×64 точно мелко.
Изображение сделано при помощи Leonardo ai
По коду никаких нововведений не было. Обычное добавление новой локации, разговор с Ниной (новым персонажем) и статичная картинка с процедурами.
Короткий ролик с новым контентом выкладываю по традиции.