Про Bethesda и Blizzard
С этого дня число 76 можно считать проклятым.
С этого дня число 76 можно считать проклятым.
Создание этой небольшой сцены заняло целый месяц. Тратилось около 3 часов в выходные дни и до 16 часов в будни.
Каждый, кто хочет сделать игру самостоятельно, в какой-то момент времени решает сделать платформер с видом с боку, так как это кажется простым для реализации в одиночку. Но это не так.
За годы работы с людьми из геймдева я обнаружил что никто не в состоянии освоить более трех профессий сразу. В теории можно освоить больше, но выдавать результат выше среднего можно только на трех.
Чтобы не было непонимания в терминах я запишу здесь несколько профессий:
- Художник по текстурам
- Художник по интерфейсам
- Художник по концептам
- Художник по эффектам
- Аниматор
- Ригер персонажей (Человек, который настраивает скелеты под персонажа, контроллеры для него и привязывает персонажа к скелету)
- Программист игровой логики
- Программист интерфейсов
- Программист шейдеров
- Звукорежиссер
- Геймдизайнер
- Левелдизайнер
- Сценарист
То есть, даже если вы умеете рисовать, вы никогда не станете одновременно художником по текстурам, интерфейсам, концептам и эффектам. Либо ваше мастерство расползется по всем этим аспектам и вы будете середнячком в каждом из них.
Чтобы реализовать такой проект, нужно уметь делать кучу вещей. расположу их в порядке убывания по важности:
- Моделить
- Левелдизайнить
- Писать сценарий
- Программировать логику
- Геймдизайнить
- Анимировать
(Все что идет далее достаточно легко набрать на ассетах или купить у других)
- Работать с интерфейсом
- Текстурить
- Ригать
- Работать со звуком
- Рисовать гуи
- Работать с эффектами
Не секрет, что если покупать ассеты, то в итоге получится каша из разнотипного контента. Если конечно вам не повезет найти контент одного типа. Плюс придется нанимать людей со стороны, чтобы они подправляли что-то под нужды вашего геймдизайна.
Если у вас много денег, то лучше заказать уникальный контент, но для этого придется писать грамотное тз, чтобы на выходе не получить хз. Что подразумевает наличие определенных знаний в сферах, которые завязаны на контент, который вы хотите заказать.
Самое главное в 2.5d платформерах - это уровни. К несчастью многие об этом не задумываются, потому что многим важно реализовать персонажа в первую очередь, а уровни якобы нарисуются потом как-нибудь сами.
К несчастью уровни пробегаются персонажем очень быстро и их нужно генерировать в больших количествах. И они не являются просто графикой. Уровни нужно собрать так, чтобы игроку было комфортно проходить каждый метр и это очень много работы.
Моя сильная сторона - это анимация. Дальше моделирование и программирование идут примерно вровень. Этого не хватает чтобы закончить даже один уровень. Все что вы здесь видите - это мои бесплодные попытки выйти за рамки своих знаний.
Чтобы собрать этот небольшой участок уровня, я потратил в сумме около двух рабочих дней. И это все при условии что я не моделил особо, а только редактировал ассеты.
В общем в итоге я решил что аркада с видом сбоку - это слишком затратное занятие и забросил все на полгода.
Где-то в начале 2017го я снова открыл проект и решил что было бы неплохо подкачать программирование и за месяц-два переписал все скрипты и перекинул логику перемещения в 3д. И поскольку я изначально ориентировался на сюжетное прохождение, то сделал из игры квест, построенный на диалогах. В итоге моей фокус-группе это не понравилось и меня вынудили вернуть боевку. А люди, которые не видели изначальной боевки и поиграли в квест - сказали что им зашло.
Видео прохождения уровня выкладывать не буду, так как проходить его самостоятельно гораздо интерснее. Ссылку на билд кину в комментарии.
Самое смешное, что с квестом у меня тоже не зашло. Сделать один уровень легко, но развивать историю все же очень сложно. Это неподъемная для меня задача. Да, я очень поздно узнал что не умею в сторилайн.
Для ориентиров при планирования сюжета сделал карту. После от скуки прилепил анимированных камер под заглавную тему из Bulletstorm.
Некоторые люди думают что музыка в роликах у меня самописная, но это просто временный фон, надерганый из других игр.
Сразу скажу что это не "Канализационное ГТА". Вся карта будет разбита на маленькие уровни.
На этом я пожалуй закончу. Кто хочет поиграть в одноуровневый квест - заходите в комментарии, качайте билд на андроид. Пишите если понравилось, если не понравилось тоже пишите.
Все наработки из предыдущего поста были сделаны за октябрь-январь 2014-2015 годов.
В начале 2015го я попробовал собрать большой уровень, который просадил фпс на телефоне ниже шестидесяти. Я схватился за голову и плотно сел за оптимизацию. Но быстро обнаружил что в интернетах с ней уже справились до меня и выложили код по сшиванию мешей, текстур и разверток, для кастомных персонажей. Я быстро его изучил и расширил функционал сборщика персонажа.
Теперь как только персонаж изменял внешний вид, его тело, прическа, прочие шмотки - схлопывались в один объект и одну текстуру. Таким образом одна крыса в кадре отрисовалась за один проход, но занимала чуть больше места в видеопамяти.
В итоге я получил около тридцати процентов фпс сверху. Для телефона вышло где-то на пятнадцать кадров в секундну сверх максимальных шестидесяти.
В этом видео можно заметить разные штуки, вроде цветовой реакции на удар. Или одежды, которая вешается на тело вторым слоем с прозрачностью.
Надо заметить что после того как персонаж собирался в единый меш, я больше не мог его разобрать и собрать в другом порядке. Пришлось писать систему, которая подгружала предметы на лету, собирала персонажа и выбрасывала скопившийся в памяти мусор от предыдущего объекта.
Все ссылки на объекты и их параметры, поселились в жирных скриптах, которые подгружались в специально написанную библиотеку. Оттуда можно было выдрать любой параметр оружия, в любой момент времени. Например в момент удара можно метнуться туда, посмотреть сколько оружие наносит урона и прочие его множители. Вернуться обратно и шлепнуть этим уроном в противника.
В июне я уволился из очередного офисного турне и сел за сложные квесты. По сути это были те же самые квесты, но гораздо более комплексные. Чтобы пройти один, нужно было выполнить ряд других. К несчастью у меня не сохранилось прохождение ни одного из них.
Квесты получались хорошо, а вот сюжетка совсем не шла и я придумывал себе другие челенджи, например вот этот пистолет.
И стрельба по глупому аи.
Можно заметить что противники больше не ложатся в позу, вместо отыгрывания смерти.
Теперь у них есть рагдолы, но при этом они частично падают по анимации.
Я собираю все коллайдеры на персонаже и несколько кадров считаю их направление, которое задает анимация. После чего присваиваю среднее значение ускорения на каждый коллайдер и включаю ему физику.
Правда рагдолы тут плохо настроены, видно как им крутит хвосты.
Далее можно посмотреть как я попытался прикрутить стелс мод, который в итоге ушел в мусор.
Эта была очень жирная система с глюками и багами, она просуществовала несколько месяцев в незавершенном виде, после чего я отключил ее от аппарата жизнеобеспечения.
Здесь можно посмотреть на очередную попытку создать уровень под сторилайн, который снова закончился изысканиями на тему поиска "удобного" интерфейса. В итоге все описания я зарезал и ограничился названием предмета.
На следующем видео при нажатии на бокс мы одеваем рюкзак и накапливаем методы по вызову рюкзака. Я думал что они очищаются сами каждый раз, но в итоге оказалось что они копились, а очищать переменную нужно самостоятельно.
А вот тут немного ретро файтинга с музыкой из Alien Soldier.
Завтра покажу к чему все сейчас пришло.
В прошлом посте я сказал что не умею в сторилайн и несколько человек (@devcor, @Koldyr, @mrViRu5) захотели помочь. Чему я, естественно, очень рад. Я собирался вам ответить, но подумал, что будет лучше, если сначала вы увидите конечную итерацию, которая довольно сильно отличается от нынешней.
На сегодня пока всё. Всем мышей.
Я Начал учиться кодить в начале 2014 года, что называется, наживую. Сделал попытку собрать небольшую игру с видом от третьго лица, но уперся в графику, которую никак не мог вытянуть.
К осени я бросил потуги доделать игру и решил накодить небольшой платформер. По всем параметрам он должен был оказаться более простым в разработке.
Через полторы недели собрался какой-то начальный функционал:
Решив не останавливаться на одних прыжках и лазанью по стенам, я просидев еще три дня и добавил трубу, по которой можно лазить. И ящик, который можно двигать. Соответственно вместе с анимациями для главного героя.
Если кому-то интересно как крыса вращается вокруг трубы и у нее не едут лапы - это обычный рутмоушен в Unity3d. Рут скелета крысы ползет вверх, вращается и тащит ее за собой. Проигрывание анимации можно остановить в любом месте и она повиснет на столбе с той стороны, с которой остановилась.
Результат меня устраивал и я накидывал сверху разные геймплейные фичи. Например проходы под землей для скрытного режима, от которых у меня осталось только это видео:
Ввиду отсутствия опыта в разработке сложного функционала, я засрал весь код этими проходами и запутался в своей писанине. И в итоге их пришлось выкинуть по ряду других причин.
Далее я ударился в кастомизацию персонажей, которая по началу давалась легко, так как я просто запихивал все возможные объекты в персонажа и скрывал\показывал нужные в определенный момент.
Когда какая-то кастомизация была готова я решил сделать первый шаг к чему-то осмысленному и прилепил в игру других персонажей, оружие и диалоги.
Комплексные вещи я делать не умел, поэтому вместо диалогов я сделал простые монологи, которые читались из xml и вызывались по тригеру. В тригере прописывалось какой монолог должен открыться и какой персонаж с какой стороны должен стоять.
Через какое-то время мне пришла в голову идея системы односложных квестов.
Квесты состояли из нескольких монологов, которые соответствовали состоянию квеста. состояний было четыре:
0 - Мы еще не брали квест.xml
1 - Мы взял квест, но не выполнили условия.xml
2 - Мы взяли квест и выполнили условия.xml
3 - Мы сдали квест.xml
В этом видео показываются все четыре варианта монологов:
Раз квесты готовы, значит пришла очередь боевки.
Боевка была сделана процентов на десять и оставлена в покое до тех времен, когда у меня накопится побольше знаний.
Раздумывая над боевкой я сделал поиск пути напарнику. Как правильно накодить поиск пути я тогда понятия не имел и пришлось выдумывать систему самостоятельно.
Напарник следит за передвижениями игрока, если игрок приземляется или прыгает - ставит в этом месте точку и бежит от этой точки, до следующей. Все прыжки и подтягивания обрабатываются сложной системой IF'ов и рейкастов. Если персонаж бежит и по рейкастам видит что нужно прыгать - прыгает. Если повис на уступе - залезает на него.
По сути это был обычный игрок, но с дополнительным логическим контроллером, который нажимал кнопки на основном скрипте.
На этом у меня пока все, остальное выложу завтра.
Но на самом деле это пассажир.