Category: лытдыбр

Category was added automatically. Read all entries about "лытдыбр".

  • andyjr

Авангард Онлайн: как кидают в русском геймдеве (часть 4)

Оригинал взят у andyjr в Авангард Онлайн: как кидают в русском геймдеве (часть 4)

“Бойтесь своих желаний - они могут исполнится!” - гласит народная мудрость. За десять месяцев работы над своей игрой Авангард Онлайн я сполна убедился в справедливости этого изречения. Наивная мечта обернулась ежедневным просиживанием стула в неотапливаемой каморке. Несмотря на то, что игра зарабатывала около 200 000 рублей в месяц, вместо денег все мы получали сладкие обещания нашего руководителя Саржа.

AVAp4_1

Должен признать, что Сарж демонстрировал чудеса логики и изобретательности, придумывая аргументированные объяснения нашего плачевного положения.
Collapse )

Morrowind

Небольшой ролик про Молаг-Амурский федеральный округ регион Ввандерфелла, который, как известно, является островной частью провинции Морровинд, в свою очередь входящей в империю Тамриель на планете Нирн, коей посвящена эпическая серия The Elder Scrolls (TES). Недавно вот вышла пятая часть про Скайрим. Но и появившаяся на свет в 2002 году третья часть про Морровинд, как ни странно,  развивается по сей день. Ролик как раз показывает современное состояние дел там.



Морровинд -- безумный и странный мир. Он живёт своей жизнью, причём без всякого участия разработчиков.  Те, кто помнит игру такой, какой она была в 2002 году, увидев это могут быть  удивлены и даже шокированы. Сложно поверить, что это та-же самая игра, но это действительно она. Только с сотнями модов, ретекстурами и новыми моделями, с расширителями скриптового языка, улучшателями графики, шейдерами, патчами, новыми звуками и тд и тп.  Год назад прикрутили динамические тени.
Всё это создали сами игроки, игровое сообщество.
 Особенность TES III в том, что он словно подталкивает игроков к творчеству. У некоторых  выбор дополнений к игре, их адаптация друг к другу и даже написание своих дополенений, занимают не меньше, а то и больше времени чем сама игра. Честно признаюсь, "играя "в Морр с 2004 года я даже до сих пор не прошёл главный квест. Я вообще его не прохожу, я просто "живу" там, большую часть собирая из модов "игру мечты" словно из кубиков, и сам пишу моды. Такое в той или иной форме наблюдается у многих любителей серии. Каждый не только играет, но вольно или невольно что-то меняет в игре, заставляя условный мир развиваться. Причём поскольку игра однопользовательская, этот мир у каждого свой собственный.
 
[Spoiler (click to open)]
Нет, начинается оно незаметно. Это начинается когда вы скачиваете и устанавливаете первый мод. Первый маленький кирпичик, он выглядит совсем безобидно. Но если вы поставили один мод, который что-то улучшил (или ухудшил), то почему бы не поставить второй? И пошло-поехало. Из кирпичиков строится новый мир. Существуют тысячи модов, одни вам нравятся, другие нет. Некоторые не работают друг с другом корректно и это вызывает у вас раздражение. В комплекте идёт редактор, с помощью которого можно эти противорчеия снять и помирить конфликтующие моды. Если вы освоили редактор, то болезнь переходит во вторую стадию. Теперь можно исправить не только досадный глюк совместимости, но и изменить что-то по своему вкусу. И тут уже есть где развернуться. Кому-то нравится делать 3D модели, кто-то до посинения возится с текстурами и шейдерами, другие ваяют новые пейзажи или квесты, а некоторые бесконечно шлифуют игровой баланс. В общем, бесплатно и с удовольствием делают то, за что кое-кто получает зарплату. Мне, к примеру, нравится писать скрипты и заниматься механикой геймплея.  Получается, не только игра в игре, но и игра в реальном мире. Игра, которая развивает сама себя руками игроков.
  И вот здесь вступает в действие синергизм игрового сообщества. У каждого Морровинд свой, потому что каждый обычно сам подбирает себе моды с которыми играет, и число их возможных комбинаций велико. Тем не менее, из всего этого множества вариантов со временем вырисовываются некоторые общие части, словно при наложении друг на друга сотен фотографий могут среди размытого тумана проступить чёткие черты чего-то нового.
 Разумеется, последующие игры компании Bethesda; TES IV Oblivion, Fallout III и Skyrim тоже комплектуются редактором (для Скайрима он ещё не вышел, но первые моды уже доступны), для них вышеописанное справедливо в полной мере. Однако зачинателем и флагманом этого дела был и остаётся Morrowind и для него создано уже столько всего, что описать невозможно. Чего стоит например патч, который заставлят NPC (а в Морровинде диалоги были чисто текстовые, без озвучки) читать свои реплики с помощью text2speech движков сторонних производителей. Ну, этих, через которые программа "Говорилка" разговаривает. Выглядит это вот так:



  Конечно жесть, но что-то позитивное в данном подходе есть. Ведь традиционная озвучка каждой реплики актёрами, как теперь делают, неизбежно ограничивает объёмы диалогов. Имнно по этой причине в Морровинде было куда больше текста чем в последующих играх. Кроме того, с голосовым синтезом методике текст NPC можно вообще генерировать на лету скриптом. Пусть выразительность и страдает, зато гибкость возрастает.



 Да, какой из всего этого можно сделать вывод в сухом остатке? А вот какой: Компьютерная игра должна поощрять творчество и свободное создание нового контента игроками, и тогда она будет успешной. Надо позволять игрокам менять мир, в котором они играют, позволять им делать то, чего сами разработчики не могли предусмотреть.
 Именно это объединяет успешные и совсем не похожие игры Minecraft и Morrowind. Это большие Sandbox-ы. :)
  • xornot

Интергалактический кролик Юрик

В этой сумбурной статье хочу поделиться опытом создания игры "Интергалактический кролик Юрик" (http://yourik.sourceforge.net/index-ru.html). Опыт этот не стоит наследовать, потому что "Юрик" создавался так, как, скорее всего, не нужно делать игры.

Я хотел попробовать себя в себя в создании игр. Желание это было у меня давно, больше десятилетия, однако я не брался за дело, ибо предвидел чудовищные временные и физические затраты. Наконец решился.

Меня пугало вот что - редактор уровней. Я примерно соображал, как делать движок, и эта задача была для меня интересна. А вот редактор уровней - программа, где создаются карты уровней, то есть расстановка игровых объектов и прочее, прочее - казался, и по сей день считается мною - программой нудной, которую писать скучно, это не имеет ничего общество с творчеством.

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

Жанр. Жанр я выбрал самый простой - одноэкранная бродилка-стелялка. Без стен - то есть всё игровое сквозное, преград нет. Как в Диггере.

Всегда надо начинать с простого - так проще и быстрее добиться работоспособности, иначе вы погрязнете в паутине нерабочих частей игры и потеряете к ней интерес.

Я решил делать игру многоплатформенной и на своем движке. Язык программирования - конечно же, самый лаконичный и мощный - C++. А вот с тулкитом - основной библиотекой, на которой зиждется программа - я... Не ошибся, но - Qt не предназначена для динамичных игр. Игровой цикл с привязкой к кадрам в секунду на Qt - это издевательство. Тем не менее, мне был привычен Qt, не хотелось тратить время на изучение других тулкитов, поэтому - выбрал Qt. Повторюсь - я поставил себе задачу написать игру как можно быстрее. Например за месяц.

Сейчас я работаю над игрой "Юрик 2", она уже использует другой тулкит - SDL, заточенный нарочно для игр. Но и работа затянулась.

Что такое игровой цикл? Мы повторяем выполнение одного и того же алгоритма столько-то раз в секунду - по крайней мере, пытаемся уложить его в выполнение в определенные временные рамки. Что за алгоритм?

Для бродилки, леталки, стрелялки он прост:

Считываем состояние клавиатуры, джойстика, мыши.

Изменяем в соответствии с ними направление движения персонажа.

Вычисляем перемещения врагов (они движутся в зависимости от разных алгоритмов. Скажем, если персонаж близко - враг "видит" его и начинает нападение или стреляет).

Вычисляем столкновения персонажа с врагами, с предметами (например призами, пополнялками жизни и так далее), выполняем действия, которые четко заданы в связи с такими-то событиями. Например, персонаж столкнулся с объектом-сердечком, и у персонажа добавляется 1 пункт жизни.

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

Выводим буфер на настоящий экран.

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

Так вот в Qt выполнение игрового цикла привязывается к событию таймера. Что это значит? Переводя на человеческий язык - вот у вас есть будильник, который звонит 50 раз в секунду, и по каждому звонку выполняется такое-то действие. В нашем случае - итерация игрового цикла.

В SDL иначе - "бежит" цикл, а в него до или после каждой итерации вставляется паузы, по длительности рассчитанные так, чтобы общее время выполнения итераций плюс эти паузы дали секунду времени. Сколько-то миллисекунд потратится на выполнение алгоритмов в каждой итерации, столько-то - на паузы. Этот способ более правильный. А в Qt я просто напрягал таймер столько-то раз в секунду вызывать по итерации цикла.

Также я решил использовать оконный режим и вывод через OpenGL. Иначе "таймерный" цикл не успел бы отрисовываться.

Для вывода звука я использовал SDL (и её дополнение SDL_Mixer), написав под нее удобную надстройку, которая позволяла загружать файлы озвучки, музыку и воспроизводить их. Звуки я подготавливал в звуковом редакторе собственной разработки - EKO (http://eko.sourceforge.net/index-ru.html). Часть звуков мне помогли записать родственники и друзья, часть я синтезировал. Использовался кроме прочего речевой синтезатор старого компьютера Amiga, а точнее - эмулятор этого компьютера. У этого речевого синтезатора очень вкусный тембр - вы могли слышать такой роботический голос в песнях стиля евро-поп в 90-тых годов, например в начале "It's my life" Dr.Alben'а, там где "Positive selected, positive selected...". Было еще довольно любопытно читать звуковой вывод эмулятора - он писал в PCM с каким-то чудовищным DC-смещением, т.е. волновая форма сигнала была смещена относительно оси, и мне пришлось дописывать в EKO функцию исправления смещения DC. Вся озвучка в игре была переведена в формат Ogg - дешево и сердито. Музыку я написал под Windows в программе Reaper, используя MIDI-клавиатуру и виртуальные синтезаторы.


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

Внутренне игра про Юрика представляла собой уровни, связанные между собой. Всё было уровнями. Заставка - уровень, конец игры - уровень. С каждого уровня было две внутренние ссылки - на другой уровень при прохождении текущего уровня, и на другой уровень при гибели персонажа. В каждом уровне был определенный набор персонажей, а также привязанный уровень - заставка, показываемая перед игровым уровнем.

Анимированные заставки с титрами - отдельная тема. Игровой цикл в "Юрике" два режима - игровой и показа заставок. Для заставок я придумал свой скриптовый язык, причем заставки могут быть переведены на любой язык. В составе "Юрика" идут русские и английские заставки.

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

Враги. За перемещение врагов отвечают довольно простые алгоритмы. На направление движения влияет, с такой-то степенью вероятности, генератор псевдослучайных чисел.

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

Анимация персонажей. В "Юрике" используется спрайтовая анимация. Спрайт - это набор кадриков с разными фазами движения. При этом, для движения влево - один спрайт, вправо - другой, и так далее. Взрывы - тоже спрайты. По ту сторону экрана взрыв происходит так - с карты уровня удаляется взорванный объект (например враг), на его место помещается объект-взрыв с закрепленным за ним спрайтом, и пускается на воспроизведение звук.

Звуки. Подобно тому, как за персонажами закреплены взрывы, закреплены также и звуки. Каждый персонаж имеет ссылки на звуки стрельбы, своей смерти и тому подобное. Я сделал так, чтобы не по одному звучку на каждое событие, а по несколько, и вариант выбирается случайным образом. То же касается и взрывов - взрывы разные, случайным образом.

Графический формат кадриков спрайтов - PNG. PNG хорош тем, что поддерживает альфа-канал - прозрачность фона под нарисованным объектом. Почти вся графика, кроме вражеского космолета, создана мною в свободном векторном редакторе Inkscape, а потом отрендерена в PNG. Космолет я нарисовал в Xara for Linux. Какие-то монтажные штуки я делал иногда в GIMP. Но в целом хватило бы и одного Inkscape. Это очень мощная программа, хотя несколько тормозная при сложных рисунках.

Самое сложное при создании игры было наладить скорости персонажей, скорости отображения титров, и сложность игры. Настройка баланса между смертоносностью врагов и живучестью Юрика. Я признал игру годной к выпуску, когда сам прошел ее от начала до конца. И конечно, у меня для проверки уровней были возможности включать любой уровень и бессмертие.

Я рассчитывал сложность "Юрика" на игроков старой школы, 80-90 годов, поэтому многим современным игрокам игра показалась слишком сложной. В "Юрике" большое значение имеет опыт игрока, то есть когда вы однажды поняли, какую тактику использовать на таком-то уровне, вы легко его пройдете и позже.

Под игру был создан сайт (http://yourik.sourceforge.net/index-ru.html), в сеть я выложил исходники (без труда компилирующиеся в Linux) и 32-битную сборку под Windows, с которой сам немало повозился - уже точно не помню, с чем возникли трудности, кажется с SDL_Mixer.

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

Вскоре после выпуска первого Юрика, я взялся за вторую часть - уже с редактором уровней, в другом жанре и весовой категории. Покамест кроме демки, где Юрик летает по уровню мимо деревьев, на фоне красивых пушистых облаков, мне показать нечего. Технические данные этого проекта, которым я хочу снова заняться ближе к весне, таковы - язык С++, тулкит SDL, система сборки Scons. Движок уже сейчас работает нормально под Linux и Windows в полноэкранном режиме. Редактор уровней пишется тоже на C++, но с тулкитом Qt. Вот демка движка - на самом деле всё плавно, это видео так рвано записалось: