Консоль. Часть 1
Автор: Jim Категория: Художник
Долго я ничего не писал для блога. Тому был ряд объективных причин. Загруз по жизни возник, времени на писанину - совсем мало. А когда возникают паузы, я их с бОльшей пользой на работу по проекту трачу. Мы с Аленой стремительно движемся к выпуску первой презентации по игре. Еще не демо-версии, которую можно порулить самому, но видео с комментариями уже вот-вот.
Заключительную часть своего последнего опуса о создании одной из сцен я завершил обещанием рассказать про связанной с этой сценой квестовой консолью. При ее создании решаются совсем иные задачи и применяются несколько другие решения, нежели те, что были описаны в материале по созданию сцены. Вот и начнем потихоньку.
Опять же, не желая раскрывать сюжетную составляющую этого фрагмента игры, скажу только о функциональной сути работы консоли. Волею сюжета, в распоряжении игрока оказывается некий транспортируемый артефакт. Он таскается у игрока в инвентаре и при помощи оного решается один из квестов. В процессе решения, игрок должен этот артефакт привести в некое состояние, которое в иных условиях дальше по квесту и приведет к успешному решению.
Сам артефакт - нечто вроде картриджа, способного записывать и сохранять на себе некую информацию. В сюжете, предназначение артефакта подается в открытом виде и сам по себе он загадки не представляет. Это просто инструмент для решения. Поэтому оный и был выбран для этого материала - что бы я о нем не рассказал, это не испортит вам факта решения самой задачи самостоятельно
Итак, есть “картридж”, есть консоль. Посредством консоли вы должны “прошить” необходимый код на этот “картридж”. Собственно, квест и начинается с этой вводной. Все остальное - найти подсказки к коду, найти возможность его прошить, найти где применить в итоге - все это вы уже сами по ходу решения квеста будете выяснять.
Пожалуй, для вступления достаточно. Приступаем к рассмотрению технических деталей необходимых для реализации консоли.
Это, скажу я вам, война программиста с художником. Страшное зрелище! Люди разбегаются, когда мы с Аленой умудряемся сцепиться по поводу функционала.
Как я уже говорил, простота сцены заключается в простоте ее функциональности. Она не слишком интерактивна. Для сцены важен только ее внешний вид и некая кликабельная область, которая и “перенесет” вас к консоли. А вот консоль вся интерактивна насквозь. На ней есть области для взаимодействия с предметами инвентаря, есть элементы в виде кнопок, экранов и т.п. И тут уже нельзя безоглядно рисовать все, что в больной разум взбредет. Тут уже заранее приходится продумывать то, как именно все это будет работать. Можно, даже, еще больше конкретезировать задачу. Для меня тут сводится все к тому, насколько адекватно Алена сможет поддержать на уровне движка игры все те безумия что лезут ко мне в голову. А на еще более глубоком уровне конкретизации - насколько удачно у меня получится растолковать это все Алене
Со сценами все понятно - я ее рисую, отдаю Алене и говорю где расположена кликабельная область. В принципе, ее, как программиста в этой связи больше ничего не интересует. На сценах мы копья редко ломаем.
Но, вот, с консолью все совсем не так. Алена должна не только знать где что кликается, она должна в точности знать, каким образом это кликается, к каким результатам эти клики приводят, взаимосвязи различных кликабельных элементов, эксепшены, которые могут возникнуть при взаимодействии элементов. Она должна понять и конечную суть всех этих мытарств. Потому, что по результатам действий игрока, в самой игре будут происходить изменения на глобальном уровне. Что-то будет где-то закрываться, открываться, включаться и т.п. От действий игрока у консоли в сюжете возникают развилки. Короче, это совсем не просто.
Поэтому, прежде чем я начну рисовать консоль, я должен согласовать механизм ее работы с Аленой. Она должна мне сказать, что будет можно сделать, что из области фантастики, а что сделать можно, но трудно. В последнем случае, мы совместными усилиями (в результате затяжных боевых действий) должны установить будет ли оно стоить затраченных усилий.
Для этой консоли, как и для всего остального, все начинается с эскиза. Просто на скорую руку я набросал раскладку консоли и описал ее функциональность. Например, так:

И к этой картинке я дал описание того, как все должно работать. 1 - окошки в которых будут меняться значения, 2 - большая волшебная кнопка “действие”, 3 - место куда будет втыкаться картридж, 4 - некий экран несущий в себе ключевую подсказку (его я изуродовал на эскизе т.к. там была нарисована реальная подсказка)
После этого мы с Аленой потратили почти неделю, чтобы согласовать все, казалось бы, нехитрые функциональные требования.
Вот, например, что значит “будут меняться значения” в окошках. Для меня так все очевидно. Там что-то вроде барабанчиков с “цифрами”, которые проворачиваясь будут показывать ту или иную “цифру”. Вроде все просто. Но для Алены это означает совсем другое! В движке то на самом деле картинка плоская и никаких барабанчиков нет (и ложки нет - я помню). Поэтому для всех этих “цифр” надо подготовить сплошную картинку-ленту на которую они будут нанесены с нужными интервалами. Эту ленту Алена и будет показывать в окошках. Потом - цифры не будут резко меняться в окне, они должны именно проматываться. Это значит Алена должна их не просто выкусывать из картинки-ленты и подставлять в окошки, она должна их там в этом окошке как-то анимировать. И еще - лента штука конечная. Т.е. ко всему прочему, чтобы добиться эффекта промотки, нужно ее как-то зациклить на программном уровне. И еще плюс к этой, в общем то, “визуальной” части работы, Алена должна поддержать и функциональность всей консоли вцелом. Значения, что в окошках показываются должны “прошиться” на карту. Там на эскизе не хватает кнопочек промотки для каждого барабанчика. Кликая их, значения на барабанчиках и проматываются.
Рассматривался принципиально иной вариант решения. Сделать консоль не в 2D, а полноценной трехмерной моделью. Где барабанчики можно было сделать не лентой, а барабанчиками, которые в буквальном смысле и поворачивать, как надо. Тем не менее от этого варианта мы отказались по ряду существенных причин. Решение это было глобальное в том плане, что мы еще в самом начале четко разделили, где используется реальное 3D, а где преренденное 2D. Мы вынуждены следовать принятым моделям, если хотим когда-нибудь закончить проект.
Я это все привел как пример, не какого-то программно-художественного откровения - задача по сути достаточно тривиальна, что с художественной, что с программерской точки зрения. А как пример того, что даже простая задача тянет за ворох других задач, как микросхема, которая какой бы простой не была, не может работать без целой толпы обслуживающих ее резисторов, кондеров, диодов и прочей мелкоэлектронной ерунды.
К тому же, ряд вещей понятных и очевидных для меня - совершенно непонятны или кажутся избыточными для Алены. Каждый из нас вынужден отстаивать свю точку зрения. Вот, на самом деле, как убедить художнику программиста, что это важно - барабанчики проматываются, а не резко меняют свое состояние. И с другой стороны, как убедить программисту художника, что по сути пользователю это до лохны и он этого, может и вовсе не заметит. Тут требуется огромное терпение и взаимопонимание. Это нормально. Хуже, что для этого требуется так же и время. Вот его жалко. Поэтому мы стараемся приходить к компромисам максимально быстро. Что влечет за собой буквально термоядерные боевые действия. Быстротечные и результативные, но очень уж разрушительные для психики окружающих
Ну, вот, пободавшись об этом всем, мы все же пришли к соглашению (скорее к военному перемирию, до момента разработки следующей консоли) о том, что именно и как там должно работать. Алена согласилась реализовать всю дурь, что мне в голову пришла, но между строк осталось: “Я это спрограммлю. НО ТЫ ЕЩЕ ОБ ЭТОМ ПОЖАЛЕЕШЬ!”
Описание работы было превращено в текст ТЗ объемом в дюжину страниц формата A4 со схемами и выкладками. На этом документе мы произнесли Страшную Клятву. Алена поклялась это реализовать, а я поклялся не вносить в это больше никаких изменений по ходу работы.
Теперь я могу приступить к рисованию консоли. Этой консоли. А теперь представте, что нам приходится так подробно разбирать КАЖДУЮ консоль. Причем, представленная здесь, самая простая из того, что должно быть.
Про рисование - в следующем посте…


[…] Некоторое время назад Джим подробно рассказывал о том, как он рисовал консоль. На самом деле это одна из консолей квеста, который войдет в демку, там их несколько. В этот же квест входит и подробно описанная пререндеренная картинка, их, опять же, несколько. […]