Как делать игры, когда не умеешь рисовать, но всё равно пытаешься

Только ощущая собственную ущербность. История моей «войны в тетрадке».

Предыстория. Долгая, но нужная.

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

Как геймера, мечтателя и, быть может даже, человека меня сформировали "восьмибитка" и "шестнадцатибитка", они же "денди" и "сега". Так в наших краях назывались самопальные NES'ы и Mega Drive'ы. Сформировали жёстко. Это было не столько "эти игры меня вдохновляли", сколько "эти игры берут меня такие за загривок и ХЕРАКСЬ об экран, и я прилипаю к нему НАМЕРТВО, и ЗАЛИПАЮ как последняя тварь по ЧЕТЫРЕ-ПЯТЬ-ШЕСТЬ-ВОСЕМЬ-ДВЕНАДЦАТЬ часов в день, пока мозги не вытекают из ушей, а родители пинками не отгоняют от экрана, да потому что, сколько уже можно, а потом такой берёшь тетрадку и рисуешь в ней продолжение "Чипа и Дейла" или "Черепашек-ниндзя" и мечтаешь такой, что будешь делать такие же игры, и мечтаешь прям до полного отвала башки".

Чтоб вы осознавали масштабы бедствия. Я покупал общие тетради и рисовал в них видеоигры. Ландшафт уровней, противники, их хп, типы атак, траектории движения, боссы, типы уровней. Рисовал, в основном, то, что было в ходу на тех приставках и то, во что сам играл. Платформеры да шмапы. Извёл на это дело не одну тетрадь. Рисовал игры для "Денди", потому что игры для "Сеги" были намного больше и даже бы в общую тетрадь не поместились. Эти уровни в том же "Сонике" или "Тини-туне" для "Шестнадцатибитки" были такие огромные, что мой мозг ломался от одной попытки представить, как это рисовалось. То, что уровни рисуются не на бумаге, мне почему-то тогда в голову не приходило.

Когда в дом был куплен ПК, я начал думать, с какого боку подступиться к мечте. Мой детский мозг быстро понял, что игры - это вообще-то программы. А программы пишут программисты. Самостоятельные попытки делать какие-то программы быстро подвели меня к выводу, что своего "Чипа и Дейла" или своего "Соника" я точно не напишу. Если не научусь программировать, конечно же. Так я определился с выбором профессии. И понеслась. Паскали, задачки, олимпиады, поступление в универ через них же. В общем, мне нашлось чем заняться.

А что до игр, то игроделанье я отложил до тех времён, пока не научусь писать настоящие, взрослые программы.

Время пришло...

... на третьем курсе. Когда нас наконец-то начали накачивать серьёзными вещами, использующимися в индустрии. Первые два года мы даже ООП не трогали (принципиальная позиция нашего тогдашнего завкафа, кстати), зато потом нагрузили так, что мама не горюй. И вот надо выбирать тему для курсовой. Ну, само ж собой, курсовая по ООП нужна для того, чтобы научить нас писать программы, а игра - это программа тоже, так?

В общем, я вписал в тему курсовой игру, и моё вхождение в гейм-дев стало неизбежным, как мировая революция. В качестве своего первого "взрослого" (Free Pascal - не щитово, а C мы коснулись совсем немножечко) языка я выбрал си-шарп. А для написания игр на си-шарпе тогда существовало, по большому счёту, два варианта.

Номер раз - Unity. Больше заточенный под 3D, чем под 2D и с каким-то мутным редактором, с которым мне тогда разбираться не хотелось. Вы скажете, что адекватный, понимающий человек не станет называть редактор Unity "мутным". И будете правы. Но где гарантия, что курсовую работу будет принимать адекватный, понимающий человек?

То ли дело XNA. Минималистичный фреймворк от Microsoft для разработки игр на .NET. Относительно прост, приятен в работе. И с весьма примечательной историей, которой стоит посвятить отдельный лонг-рид. Ныне, кстати, известен, как MonoGame. Никаких посторонних редакторов. Только Visual Studio и пара идущих в комплекте с фреймворком шаблонов и плагинов. Плюс к тому, с ним оказалось достаточно просто разобраться. Единственным серьёзным минусом был уже упомянутый минимализм. Хочешь анимацию из коробки? Ах-ха-ха-ха, наивный человек. Вот тебе функция в API для рисования картинки на экране. Там есть параметры, которые позволяют вывести на экран часть картинки. Рисуешь спрайт с раскадровкой, а дальше сам думай, как это лучше реализовать. Но одной из целей курсовой работы было научиться таки программированию. Так что минус обернулся плюсом.

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

Следующий семестр был самую чуточку поспокойнее. Самую чуточку, не больше. Там тоже была курсовая работа. Уже не вспомнить название предмета, да и не важно оно, так как работающие за пределами университета преподаватели ровняли программу под своё чувство прекрасного и необходимого. За что им БОЛЬШОЕ спасибо. Иначе бы до сих пор обучались на PL-1. Тот курс был посвящену конкретно .NET-у. И курсовая работа должна была быть на .NET'е. И тут я задумался. У меня уже была программа на .NET. И мне пришло в голову, что неплохо бы её обработать напильником. Дважды сдать одну и ту же работу казалось мне недостойным пути самурая и я изрядно её перетряхнул, заручившись одобрением моего преподавателя, которому работа сдавалась.

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

Это, собственно, конец предыстории. А теперь разберём по частям мною тогда написанное:

Графон

Да, венец моих художественных способностей.<br /> chelovekbeznika
Да, венец моих художественных способностей.
chelovekbeznika

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

Итак, твои художественные способности равны способностям четырёхлетнего ребёнка. На твоей игре это неизбежно скажется. Очень сильно скажется. Что делать? Ну я же дитя пост-модерна! А потому сделаю вид, что оно так и было задумано. Отсюда и вырос концепт "войны в тетрадке" (вспомнился вдобавок детский опыт геймдизайна методом рисования боссов в тетради в клеточку). Соотственно, фоном стал тот самый лист в клеточку. А каракули на заднем плане были сделаны цветом, как мне тогда казалось, похожим на шариковую ручку. Я у мамы ещё и дизайнер, да.

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

Музыка

К сожалению, у меня до рукой не было такой программы, как "Paint, но для музыки". И нескольких лет на получение хотя бы базового музыкального образования тоже не было. Хотя кого я обманываю. Если бы мне тогда под руку попадала программа, позволяющая сделать простенькую MIDI, просто развесив мышкой ноты на тех пяти линиях, я бы возможность не упустил. Тогда бы саундтрек гармонировал с визуальным стилем по полной. Но вот такой возможности у меня не было.

То, что в играх не считается зазорным использовать уже готовые, чужие песни (э рон дон дон, та ран дон дон дон, э рон дон дон дон та ран дон дон дон), несколько успокоило мою совесть. И я решил отклониться с пути самурая и взять в интернете готовый саундтрек. Что-нибудь про самолётики. И про детство. Игра же типа ребёнком нарисована. Чтобы тут подошло? Я некоторое время подумал и...

Просто совместите это у себя в голове со скриншотом выше.

Песни про самолётики, космонавтов, пионерлагеря и прочее. Обязательно в исполнении детского хора. Исключение было сделано для битв с боссами, чтобы их выделить. Тут звучала оркестровая бессловесная версия старого, доброго "врагу не сдаётся наш гордый варяг". Это отлично работало на атмосферу.

Эта мазня и "мы рождены, чтобы сказку сделать былью" детскими голосами уже создавали благостную картину. Но это было ещё не всё. Ведь, кроме музыки были ещё и...

Звуковые эффекты

Да, у меня не было "Paint'а для музыки". Зато у меня был встроенный в ноутбук микрофон и поставляемая вместе с седьмой виндой программа "звукозапись". И когда мне понадобились звуковые эффекты, я решил пойти путём самурая.

Итак, игра типа "нарисованная ребёнком". Про самолётики и всякое такое. Какие же тут нужны звуковые эффекты? Само собой "вр-р-р-р-р", "бз-з-з-з-з", "пыдыщчь-пыдыщчь". И как же как можно обойтись без "быдышчь"? Да, я на полном серьёзе делал "пыдыщчь" в микрофон своего ноутбука, а потом ещё выбирал, какой из дублей будет звучать наиболее "пыдыщчево", но при этом не задолбает за пять минут. В итоге, правда, пришлось по умолчанию сделать звуковые эффекты тише музыки. Но я старался!

Картинки тут, потому что иначе заскучаете

Геймплей

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

  • Основа - шмап, ибо делать относительно легко. Так как я вообще не игрок в баллет-хеллы, то я решил делать то, что на википедии называется "стратегический шмап". Это когда на экране расстояние между вражескими снарядами, в которое надо вписаться больше десяти пикселей, в отличие от всяких Тоху Проджектов. Компенсируется это счастье огромным, как моя детская мечта, хит-боксом. И некоторыми особенностями управления это штукой, вроде не моментального разгона и инерции. Ах да, ещё, когда у тебя меньше миллиарда пуль на экране с оптимизацией можно не заморачиваться. Но это так, приятный бонус.
  • Десять видов врагов. Немного, зато они все ведут себя абсолютно по-разному. Если вы видите стрёмный восьмиугольник - значит это точно стационарная турель. Если вы видите что-то другое, это точно не стационарная турель и вести себя будет абсолютно по-другому. Разнообразие достигалось за счёт трёх базовых параметров: траектории полёта (хаотичные полёты по всему экрану, погоня с попыткой взять на таран, фиксированный на какой-либо линии вертикальный или горизонтальный полёт), оружия (много вариантов, вплоть до его отсутствия, чтобы взять на таран) и возможности порождать других врагов (тот безобидный шарик, что не гоняется за вами и даже не стреляет в вас ещё причинит вам боли).
  • ...И двадцать восемь их разновидностей. Увидели стрёмный восьмиугольник, который выглядит по-другому? Готовьтесь к тому, что в вашу сторону полетит уже три пули.
  • Семь боссов. Как это в игру, где ты делаешь "пыдыщчь" всяким монстрикам не добавить боссов? Одного и того же босса слишком долго бить? Может наскучить? Уменьшить ублюдку хп, чтобы этого не случилось? Нет, это не путь самурая. Вместо этого чуть-чуть заморочимся и добавим им фазы, чтобы заставить игрока ронять больше кала по мере развития событий. Тоже старый, как дерьмо мамонта, приём.
  • Семь оружий. Нет, это не случайность. Я решил после каждого босса не только менять фон, музыку и добавлять вражин поновее и позлее, но и открывать ещё одно оружие, чтобы, как писал классик, provide players with a sense of pride and accomplishment. Разница между пушками произросла, в некоторой степени, из некоторых нюансов управления. Нюансы эти заключались в том, что игра позволяла управлять вашим летающим блюдцем только с клавиатуры. На геймпад от Икс-бокса у меня тогда денег не было, а ничего, кроме XInput, XNA и знать не желал. N.B. Тот, кому доводилось покупать геймпад за 10$, а потом удивляться, какого хрена почти все игры вообще его не распознают, и отыскивать эмуляторы геймпада от Икс-бокса, поймёт о чём я. Теперь, когда я задаю себе вопрос, почему я не задействовал мышку (это не так уж и сложно, правда), я не могу дать на него ответа. Но факт, остаётся фактом. Кораблик управляется только с клавиатуры. И исходя из этого я придумал такое оружие, как, например, дробовик стреляющий не вперёд, а по бокам. Но вообще, раз пошла такая пьянка плавно переходим к...

Управление

По причинам, описанным и не описанным (боже, почему я не задействовал мышь?) выше, используется только клавиатура. Левая рука, как и заведено у пека-бояр, ложится на WASD, отвечающий за передвижение. Большой палец укладывается на пробел, чтобы палить по противнику в режиме нон-стоп. Можно было бы даже не использовать для этого пробел, а просто стрелять из выбранного оружия постоянно. Но в игре изредка случаюстя ситуации, когда выгоднее не стрелять. В принципе, если бы речь шла о "Deep Space Waifu", это было бы идеальная раскладка. Но у нас иная специфика, а значит мы можем задействовать вторую руку, чтобы переключать оружие. В игре семь пушек и переключение между ними я повесил на Numpad 1-7. Ну а чтобы поставить игру на паузу, я задействовал Enter. Но если кого-то это пугает, всегда можно перенастроить.

А ещё я добавил возможность регулировать громкость звука и музыки в игре, нажимая левые и правые shift/ctrl. Зачем? Потому что я мог!

Интерфейс

Была одна фишка в старых играх, которая попадалась там до обидного редко. Полоска здоровья у противника. Хотя бы у босса. Каждый раз, когда мне приходилось долго и упорно бить очередного злыдня, не имея даже приблизительного представления, сколько это продлится, мне становилось грустняво. А игра, которая показывала, сколько здоровья у противника автоматически взлетала в моих глазах, как образец правильного User-Friendly. Вы не представляете, сколько счастья подарила мне Gunstar Heroes в детстве.

Эти красные циферки над врагами результат моей детской травмы, нанесённой битемапами по черепашкам-ниндзя и прочим играм, где хрен пойми, сколько эту тварь ещё бить.<br /> chelovekbeznika
Эти красные циферки над врагами результат моей детской травмы, нанесённой битемапами по черепашкам-ниндзя и прочим играм, где хрен пойми, сколько эту тварь ещё бить.
chelovekbeznika
Ну и босса, само собой, надо снабдить индикатором здоровья.<br /> chelovekbeznika
Ну и босса, само собой, надо снабдить индикатором здоровья.
chelovekbeznika

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

В общем, интерфейс получился минималистичным. Казалось, уж тут-то у меня всё будет хорошо и красиво. Хоть где-то. Но тут вышеупомянутая чугунная жопа реальности завершила свой полёт навстречу моим мечтам. Мне понадобилось главное меню. Для сохранения, настройки и указания авторов игры. Не спорю, в XNA его можно было реализовать. Но вспоминаем про минимализм XNA, где у тебя только вывод спрайта на экран и текущих координат мыши, и понимаем, что это реализация меню - это долго. И не очень интересно. В общем, времени, задора и художественного навыка на то, чтобы сделать главное меню у меня не было. А меню мне было необходимо. Что же делать в этой ситуации?

Звучит "отбивка" из сериала "Бэтмен" шестидесятых

WPF, на помощь!<br /> chelovekbeznika
WPF, на помощь!
chelovekbeznika

Да, главное меню в моей игре выглядит именно так.

И что в итоге получилось?

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

ДА Я ПОНЯТИЯ НЕ ИМЕЮ!

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

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

А вот и сама игра!

В архиве, кроме самой игры есть редист четвёртого XNA. .NET 4.0 я не стал туда вкладывать из-за его большей распостранённости и веса. Но иметь его установленный всё же надо. Имейте в виду, пожалуйста. Запускаем лаунчер, создаём профиль, настраиваем себе всё, если надо. И вперёд! Если ничего не навернётся.

Ведь, к сожалению, QA-отдел моей скромной конторы в лице никого, не может даже дать гарантии, что игра запустится. Да и на починку багов надеятся теперь не приходится, ведь исходник пролюблен. Учитывая, то какой лютый говнокод я писал на третьем курсе, я этому даже рад.

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

И напоследок одна картинка неплохо так отображающая происходящее в игре. Этот арт был подарен мне на день рождения моей девушкой.

Я не знаю, почему здесь изображён кот, честно. UrsulaTB
Я не знаю, почему здесь изображён кот, честно. UrsulaTB

Послесловие по просьбам трудящихся

Прошло лет шесть. После этого я особо играми не занимался и работаю уже около пяти лет в небольшой скучной конторе, где потихоньку зарабатываю себе на жильё. В свободное время развлекаюсь другими вещами, вроде написания фанфиков по My little pony. А что до разработки игр, то так бы и откладывал на какое-нибудь далёкое потом, если бы не обстоятельства, из-за которых я вообще об этом древнем курсаче вспомнил. Но это уже совсем другая история...

252252
61 комментарий

Комментарий недоступен

57
Ответить

За один слоган только можно ставить + статье :)

1
Ответить

Член тайного общества тетрадных плетунов детектед.

52
Ответить

А у вас тоже в детстве были войнушки на тетрадном листе, которые перерастали из махача 5 на 5 во что-то масштабное с кучей всего с обеих (а то и с трех уже) сторон?

10
Ответить

Комментарий недоступен

10
Ответить

Комментарий недоступен

8
Ответить

Epic Games должны обратить внимание и добавить эксклюзивом в свой магазин.

14
Ответить