Если описать, как делалась игра «Остров Клайда», кратко, то это будет два слова: «быстро, но непросто». Подробный вариант истории содержит уже детали: как появилась задумка игры, через какое перерождение прошёл сюжет игры, и почему она получилась именно такой. Все спойлеры убраны под теги, но, наверное, перед прочтением лучше всё же пройти игру.
Перед тем как приступить к основной теме, я хочу поблагодарить Нафанина, без которого эта игра вряд ли была бы дописана, и уж точно не поучаствовала бы в конкурсе «КРИЛ». Он выступал не только главным пинальщиком (надо успеть! надо успеть!), но и вложил немало сил в интерфейс игры (по сути, интерфейс и дизайн целиком его). Однако хватит оффтопа.
История создания игры «Остров Клайда» неотделима от истории написания движка, на котором она работает. Сперва была идея создать парсерный движок для веба, в процессе его разработки требовалось на чём-то тестировать его возможности, а потом уже нужно было что-то по-быстрому доделывать, чтобы успеть на КРИЛ. Сперва-то мы с Нафаниным собирались делать всё по-взрослому: трекер, роадмапы, система управления версиями и всё такое. Но потом, как говорится, жизнь внесла свои коррективы. Это, разумеется, потому что мы спешили. Следующую версию мы уже будем делать как надо. Наверное.
Началось всё примерно 11-го августа 2015 года, когда мы в очередной раз мечтали о том, какую бы игру мы хотели бы написать:
Oleg Aleynikov: Думал тут насчёт интерфейса под мобилки. Иван Нарожный: для парсера? Oleg Aleynikov: под разное Рассматривал также вариант с ссылками и менюшками. Ну в общем, со ссылками чота $#@$. то есть лучше бы им внизу скапливаться Иван Нарожный: вариант если их не стопицот понятно Oleg Aleynikov: С точки зрения удобства игрока в этом плане всё есть в Undum вроде но это нужно по-другому автору игру дизайнить и это уже не столько игра, сколько литература выходит Иван Нарожный: чур меня! Oleg Aleynikov: а вот парсер лишён таких проблем надо делать парсер Иван Нарожный: я вот тоже думаю Oleg Aleynikov: да давай делать парсер Иван Нарожный на крил? Oleg Aleynikov Успеем на КРИЛ — хорошо.
Потом мы долгое время активно фантазировали на тему сюжета предполагаемой игры и лениво перебрасывались идеями по движку. Ну и заодно я выяснял у Нафанина, как вообще работает JavaScript: зачем писать var при объявлении переменной, как выглядят свойства и методы у объектов, и как к ним обращаются. В общем, технические детали. Потом я перенёс кое-какие наработки из своего фреймворка «Az» для платформы QSP — и понеслось. Но о движке как-нибудь в другой раз. Здесь — про игру.
Скоро появилась необходимость в тестовом проекте. Сперва была поляна с деревьями, но для работы с контейнерами нужно было что-то характерное. Так появился сундук и кошелёк. Изначально в сундуке лежало яблоко, а на поляне монета. Можно было положить монету в кошелёк, кошелёк в сундук. А потом я посмотрел на календарь и понял, что если я не буду тестировать всё это на реальном проекте, то на КРИЛ не успею точно. И тут мы с Нафаниным 19 сентября сходили на концерты групп «Alestorm» и «Дом ветров». И появилась пиратская тема. Трава с поляны исчезла, сама поляна была превращена в остров (чтобы ограничить игрока в передвижениях), а деревья ужались до одинокой пальмы (какой остров без пальмы?). И дальше уже идея развивалась в этом направлении.
Несколько слов о чём игра:
Главного героя, грозного пирата, во время плавания за сокровищами обманывает его подельник. Крадёт у героя карту к сокровищам, а самого высаживает на островке посреди океана. Пока стоит штиль, корабль злодея болтается на виду неподалёку от берега. А герою нужно найти способ спастись.
Oleg Aleynikov, [25.09.15 22:56] У меня основная проблема — как брошенному пирату спастись с острова.
Сперва я прорабатывал идею о сундуке, из которого можно взять какой-нибудь предмет, который поможет герою спастись с острова. Взять предмет и оставить какой-нибудь взамен, который поможет спастись ещё кому-нибудь. К этому прилагалась записка, в котором было бы описано, какие предметы уже прошли через этот сундук, из которой игрок мог узнать, что самые удачные предметы уже расхватали: ковёр-самолёт, бутылка виски и всё такое. Ну и от сочетания «что взял / что оставил» герой спасался бы с острова разными способами.
Но вскоре я от этой идеи отказался. Во-первых, действия игрока в этом случае были бы чисто декоративные. Он не решал проблему, а лишь выбирал декорации. Во-вторых, эта идея показалась мне недостаточно «герметичной» для маленькой игры, которую я не терял надежды дописать на КРИЛ. И с каждым днём объём игры, которую я мог бы успеть сделать, становился всё меньше, а задача, решаемая игроком, — всё компактнее.
Вдобавок ко всему, я очень хотел, чтобы решение задачи проявляло возможности именно парсерной модели интерфейса. Чтобы игрок не выбирал из вариантов решения, а самостоятельно догадывался о решении и сообщал о нём игре.
И как-то ночью перед сном мне внезапно пришла идея.
Такой сюжет позволил мне построить достаточно компактную ситуацию, в которой перед игроком ставилась довольно сложная и интересная головоломка, что в какой-то мере компенсировало малый размер игры. И эта головоломка была реализуема именно в парсерном интерфейсе — как подобное можно сделать через меню, ума не приложу. Собственно, чего я и добивался.
Осталось переложить всё это в программный код. Разумеется, вылезла куча проблем с движком, пару раз пришлось переписывать парсерный модуль, да и по всем остальным частям движка я тоже изрядно прошёлся. В результате, на КРИЛ игра была отправлена без какого-либо стороннего тестирования, и последствия этого мне пришлось разгребать ещё какое-то время.
Но о жизни игры после выпуска я напишу в другой раз.