История создания игры в одиночку
В игры я люблю играть с детства и играя на работе в очередную игру на телефоне захотелось что то создать самому. Из знаний были только какие то остатки основ программирования на турбо паскале. Начал шерстить интернет и понял что для начала нужно выбрать движок для игры. Игру я собирался делать в 2Д и пошерстив инет нашел несколько вариантов, а именно: Unity, Constructor, GameMaker. И поизучав их понял что в unity лучше использовать для 3Д и там все же нужно знать C#. Constructor был простым для новичка как и GameMaker, но отказался от него из-за того что там нужно было платить ежемесячно, поэтому выбор сделал в пользу GameMaker. В GameMaker мне понравилась простота программирования, всего то создаешь обьект, а в нем уже задаешь переменные и выбираешь нужные действия. Нужно чтобы обьект двигался вправо то в событии step пишем элементарно x += 5; Нужно чтобы обьект сменил спрайт или анимацию (например прыжок персонажа) то просто в событии draw меняем имя спрайта или его индекс, если это статичная картинка. Но больше всего мне там понравились так называемые будильники (событие alarm) которые я в своей игре постоянно использовал. Например нужно проверять накопил ли персонаж опыт для перехода на следующий уровень то я просто пишу alarm[1] = 60; и через 60 игровых шагов (в секунде 60 шагов) будет использован код в alarm[1]. Можно было бы конечно проверку делать при получении опыта, но это бы потребовало вписывать скрипт везде где дают опыт. Или например при сборе бонуса, нужно чтобы новый бонус через 25 секунд заново появился то я пишу alarm[1] = 1500; (в каком либо контроллере или и в в самом же бонусе), а событии alarm[1] уже будет код появления бонуса.
Первую игру создавал по мере обучения. Как и что делать смотрел на ютуб канале Econ Dude, правда он уже закрылся, но недавно попался другой канал Sempiternal_Rain: Dev где можно просто с нуля научится создавать игры в Game Maker Studio 2. Также помимо ютуба много инфы и помощи получил на forum.hellroom.ru, где можно найти множество статей или задать вопрос, который помогут решить.
В итоге первую игру решил сделать по типу защиты замка KillKamm Defence, в похожие постоянно играл на телефоне на работе. И по факту код игры я сумел сделать, но вылезла другая проблема, я совершенно не умею рисовать, а особенно мышкой. В итоге игра провалилась (за последний год ее скачал ОДИН человек), хотя чего еще можно было ожидать. Просто посмотрите на этот ужас:
Персонажей выбрал таких по причине что это был верх моих возможностей и осилить каких либо людишек или монстров я просто не смог бы никогда.
Спустя какое то время я решил все же сделать 2-ю игру в любимом жанре, а именно транспортный тайкун Transport Luck tycoon. Зная что мои навыки рисования на уровне ребенка с детсада я принял революционное для себя решение, делать всю графику в 3Д, а именно в Blender, а потом просто рендерить и вставлять в игру. Правда ушло прилично времени чтобы научиться хотя бы основам работы в блендере, как и последующий рендеринг картинок также занимал много времени. В итоге принялся к разработке. Вот так выглядели первые наброски карты:
И вот тут я совершил очередную ошибку, которая преследует меня до сих пор. Я вообще не понимал как делать игру в изометрии поэтому нарисовав сетку я уже отталкиваясь от этого задавал перспективу всему в игре (зданиям, автомобилям, дорогам). Это был просто катастрофический просчет и понял я это только когда уже собрал готовую игру. Я ведь стоило почитать перед этим про изометрию и использовать стандартную прямоугольную. У меня же вышла не пойми какая из-за чего все последующие здания, обьекты и грузовики приходилось подстраивать под этот уровень перспективы. Хотя с другой стороны это создало уникальность, но и доставило много проблем. И спустя год я все же сделал игру. Карта изменилась и стала выглядеть вот так:
Трудностей в создании основы игры было много. Например прокрутка списка с товарами или грузовиками. По началу я сделал что картинка с маршрутом грузовика передвигаясь вверх, перекрывается шапкой всплывающего меню.
Здесь картинка с маршрутом 1-го грузовика рисуется и банально перекрывается сверху картинкой шапки списка. Как только картинка достигает определенного значения y-координаты то перестает рисоваться. И такой метод тут вполне работал. Но не подходил для прокрутки списка с товаром когда прокладываешь маршрут или прокрутки списка зданий когда отстраиваешь мегаполис. В итоге пришлось долго разбираться как прикрутить особенность GameMaker по обрезанию картинки. И еще больше проблем потом доставило когда нужно было еще и учитывать масштабирование.
Движок GameMaker хорошо работает с 2D, но все же чтобы игра не тормозила на телефонах нужно делать разбивку текстур по текстурным картам. Это самая главное в ОПТИМИЗАЦИИ игры. Текстурная карта в моей игре это лист 2000×2000 с текстурами. И надо стараться чтобы в игре этих текстурных страниц было как можно меньше и тем более они не перескакивали между собой. Вот пример такой страницы с элементами для справки и обучения в игре:
И надо стараться запихивать текстуры в такие страницы так чтобы к ним обращались только один раз за игровой шаг. Для этого GameMaker есть такое понятие как depth (глубина) которое также нужно настраивать для обьектов которые что либо рисуют в игре. Так у меня в игре сначала рисуется фон карты, потом грузовики, предприятия, города, построение маршрута, иконки (кнопки на экране, значки над грузовиками, предприятиями), инфа (это когда взаимодействуешь с тем или иным заводом, городом, электростанцией и т.д.). Для примера в первой моей игре где я вообще не разбивал текстуры по страницам, а игра сама раскидала текстуры по нескольку десятков страниц, в игре на телефоне фпс порой проседал до 5, хотя тормозить там особо нечему было. А все потому что переключения между страницами порой доходили до тысячи в шаге.
Что касается самой игры то основа это производство сырья и товаром которые потом перевозишь грузовиками. Сырье нужно перевозить на заводы чтобы сделать товары, которые уже завозить в города для продажи. Сами города можно улучшать завозя туда сырье и материалы. Улучшая какой либо из 4-х городов игрок также получал бонусы для прикрепленного к этому городу промышленности. Также добавил порт и ж/д станцию куда прибывал корабль и поезд. Там можно было купить и продать 3 рандомных товара. Промышленность по мере производства товара прокачивалась и там открывались новые товары и давались очки для улучшений (времени погрузки-разгрузки, размера складов, скорость производства товаров, увеличение стоимости товаров). Сами грузовики также можно было улучшать. В игру еще добавил особый личный грузовик, которой можно было улучшать за опыт, который давали медали за выполнение каких либо достижений в игре. Каждые 15 минут игры игрок получал газету с 3 событиями которые давали положительный или отрицательный эффект.
После того как сделал игру то выложил в Google play, немного закинув в рекламу от гугла. Но чудо не произошло, в игру особо не играли. Хотя попадались игроки которым игра понравилась. Поэтому спустя несколько месяцев я решил сделать крупное обновление в игре. Вообще игра та что была и что сейчас изменилась очень сильно. В обновлении добавил много чего. В самой игре тогда сделал вот такой рекламный пост:
В общем игра хорошо так преобразилась, но опять же в игру играли, но мало. Поэтому я продолжал шлифовать игру и добавлять что то новое. По итогу потом добавил:
— специализации для грузовиков, которые перевозят один тип товара, но делают это более эффективно. Например самосвал сыпучие грузы, автоцистерна — жидкие грузы.
— строительство до 3-х особых зданий в городах
— общий уровень игрока до 100 уровня, который давал различные бонусы по мере прогресса
— сборные бонусы (4 вида) которые состоят их 9 частей
— здание статистики
— штаб, особое здание которое игрок строит из 5-ти видов модулей.
Помимо этого и улучшил удобство для игрока например при прокладывание маршрута, добавил маркеры которые указывают направление предприятия или города откуда можно забрать товар или доставить выбранный. Возможность отправить сразу несколько грузовиков на заправку или склад. Добавил маркер в списки грузовиков, который указывает текущее положение грузовика на маршруте, при построении маршрута возможность создать новый или редактировать существующий маршрут. Сохранять до 25-ти маршрутов, чтобы потом быстро их загрузить и назначить грузовику.
В общем уже просто идеально отполированная игра, но скачиваний так и нет. А оценка только постоянно ухудшалась в основном из-за отсутствия на другие переводы из-за чего возможно и падало скачивание игры. Но все же я решился сделать то в чем вообще не разбирался, а именно добавить ОНЛАЙН. Скажу сразу я вообще не понимал как работает сервер, да и что это вообще такое. И скажу что когда ничего не знаешь и не понимаешь то что либо начать ох как сложно, порой просто нереально сложно. Начал шерстить инет и понял что для создания сервера надо писать отдельную программу, чего конечно я не осилить не смогу. Но все же спустя какое то время я нашел код сервера на C#, которые мог подружиться с GameMaker. Вот только беда я вообще не знаю C# и пришлось потратить месяцы чтобы хотя бы изучить основы C# т.к. там мне все же надо было программировать с данными игроков, например сортировка игроков для участия в турнире и непосредственно создание этого турнира. И спустя пол года я все же сделал это. А работы там было много не только по части кода, но и моделированию в блендере. По итогу в игру были добавлены турниры между игроками в награду за которые можно было выиграть особые бонусные грузовики (для чего еще нужно будет сыграть в мини игру), турниры между альянсами в которых можно выиграть особые бонусные здания. В турнирах между альянсами игрокам нужно выполнять различные задания, которые они выбирают из 6-ти предложенных. В самом альянсе игроки могут общаться в простеньком чате, сложность программирования которого доставила проблем из-за работы сервера и кодировок разных языков. И вишенка на торте это город в альянсе, который игроки строят все вместе.
В городе-альянсе имеется 15 мест под строительство для 15 участников альянса, а также места под постройку особой промышленности которая дает бонусы всем игрокам. То какие дома построить может игрок зависит от того какие он открыл в обычной игре при строительстве мегаполиса. А также какие выиграл в турнирах между альянсами. А количество зданий которые может построить зависит от кирпичиков которые игрок получает при улучшении городов в обычной игре. И чем больше город в альянсе построит игрок тем больше бонус для всех участников будет давать построенная им промышленность.
Вот она идеальная игра с таким большим ассортиментом возможностей в которую интересно играть. Да еще и созданная в одиночку. Но чудо не произошло и онлайн игры скатился на дно, вернее на самое дно, что в день если сыграет 5 человек уже чудо. По итогу на игру ушло 3 года, конечно не прям от заката до рассвета, а в свободное время и порой с большими перерывами. Но успеха это не принесло, хотя если сравнивать с первой игрой где за последний год ОДНО скачивание это все же не полный провал :)