[Из песочницы] MMORPG в одиночку
Привет ребят! Текст ниже, расскажет вам о том, как я два с половиной года разрабатывал свою ммо игру про сталкеров, артефакты, выбросы, и байки у костра.
Все началось с того, что я, впервые в свой жизни, смог передать информацию с одного девайса на другой, при помощи сокетов. Нажатие сенсорной кнопки на экране смартфона, заставляло перемещаться черный квадратик на мониторе ноутбука. Моей радости не было предела. «Это какая-то магия» — думал я. Тут же было решено — » Все, делаю онлайн игру». Так как я фанат сталкера, вопрос — «А какую онлайн игру?», даже не стоял. Про то, что игры делать не легко, я знал. Про то, что делать онлайн игры очень не лего я догадывался. Но в тот момент, опьяненный радостью и вдохновением, я не придал этому ни малейшего значения.
И разработка началась. Так как рисовать я не умею, сразу встал вопрос насчет графики. И ответ на этот вопрос нашелся. Когда-то давным-давно, на старые кнопочные телефоны (j2me), независимыми энтузиастами разрабатывалась игра «Zone of Aliation». Если описать игру в двух словах, то это 2д сталкер для мобил. Графика из этой игры идеально подходила для моего проекта. Я связался с автором графики — Павлом Шевелевым, и спросил разрешения использовать её в своей игре. Павел не отказал и даже нарисовал еще кое-что, за что ему большое спасибо.
Далее требовалось писать код. Перемещать черный квадрат это одно, а сделать полноценную игру — совсем другое. Если в поисковике вбить — «Как сделать онлайн игру?», конкретного ответа, который хоть капельку мог бы помочь, вы не найдете. Информации в рунете по этому поводу кот наплакал, а про примеры я вообще молчу. Но мне все же удалось отыскать на Хабре информацию о видео-лекциях Виталия Чибрикова, в которых рассказывалось о том, как написать сервер для онлайн игры. Досконально изучив все 9 лекций (одна лекция в среднем длится около двух часов), мне таки удалось на их основании, построить крепкий скелет клиент-серверного взаимодействия для моей будущей игры. Если бы не Виталий, я бы не добился такого результата, за что ему большое спасибо. Пара слов о технологиях которые я использовал — сервер написан на java, база данных MySql, сетевое соединение netty. Клиент написан тоже на java при помощи фреймворка libgdx.
Имея графику и механизм передачи данных, оставалось самое «простое» — сделать игру. Для начала смастерил локацию. Потом добавил игрового персонажа, научил его ходить. Затем прикрутил смену дня и ночи, плюс погодные эффекты. Далее создал первого моба — кабанчика. Потом добавил стрельбу, чтобы можно было убить этого кабанчика. Затем сделал pvp, чтобы можно было убивать не только кабанов, но и других игроков. И вот уже имеется, что-то отдаленно напоминающее игру. Казалось бы игровых функций практически никаких нет, но на реализацию всего вышеперечисленного ушла куча времени. Все многократно осложнялось тем, что это ММО игра. Почти любое совершённое тобой действие в игре, должны видеть окружающие тебя игроки.
На начальной стадии разработки, сервер вылетал от каждого чиха. Практически каждый день, я сталкивался с кучей проблем и ошибок. До начала разработки я и представить не мог, какое количество задач мне придется решить. Но разработка потихоньку шла и игра развивалась.
До определенного момента тестирование велось только на моем личном пк. И сервер и несколько копий клиентов запускались на одной машине и общались друг с другом через localhost. Но по мере развития проекта ко мене все чаще и чаще приходила мысль — «А не пора ли игру показать людям и устроить настоящее тестирование с живыми игроками ?» И в один прекрасный момент я решил, что пора. Арендовал железо, минимальной конфигурации с линуксом на борту. Загрузил туда свою программу-сервер и после новой порции геморроя и танцев с бубном, сервер успешно запустился. «Вот это да!!!» — подумал я, оно работает. Первым человеком который зашел в игру, был художник Павел. Мы с ним побегали по карте, пообщались в чате, да постреляли в кабанчиков. После чего я довольный и счастливый от того что все работает, приступил к разработке с удвоенной силой. Шли дни, игра росла и развивалась, примерно раз в две недели я устраивал открытое тестирование, во время которого любой желающий мог поиграть и затестить новые функции. Иногда счетчик онлайн игроков переваливал за сотню. Отличное было время, я создавал виртуальный мир который жил по моим правилам и законам, во время тестирований я ощущал себя чуть ли не богом. Иногда заходил на сервер и просто наблюдал за игроками, они там бегают, общаются, ссорятся, мирятся, создают кланы, воюют, собирают артефакты, влезают в аномалии, послушно разбредаются по домам во время выброса. А сколько интересных историй приключилось в игре! Помню, какие-то парни объявили себя бандитами и сшибали бабло за проход в определенную локацию. Тех кто отказывался платить расстреливали (в том числе и меня). Или как то раз, группа сталкеров во время выброса, спряталась в домике со всех сторон окруженным забором и кто-то завалил единственный выход аномалиями электра (есть артефакт который создает аномалию) после выброса группа оказалась замкнута во дворике этого дома до самого конца тестирования, так как в то время, после смерти игрок возрождался на том же месте, на котором умер.
На данный момент в игре реализовано: 20 локаций, смена дня и ночи, дождь, pvp, pve, 3 вида мобов с разным поведением, массовые набеги мобов на базу, 1 рейд босс, 13 артефактов с разными характеристиками, 8 аномалий с разными эффектами, болты для поиска и разрядки аномалий, 8 квестов, система опыта и прокачка скилов, сталкерский pda, радиация, выбросы, группировки, война группировок за территории, npc которые умеют стрелять по мутантам и прятаться от выбросов в домах, рюкзак и система итемов, торговля с npc и игроками, 9 видов брони, 7 видов оружия, детектор аномалий, детектор радиации, гитара плюс еще около 15 различных итемов, и конечно же возможность присесть у костерка и пообщаться в чате с другими игроками. Отдельно хотелось бы остановиться на способе добычи артефактов. Артефакты рождаются после выброса в аномалиях, и изначально не видны игроку, для того чтобы артефакт можно было поднять, требуется выполнить ряд неких уникальных для каждого артефакта условий.
Например, чтобы добыть артефакт «Кровь» требуется, чтобы аномалия электра второго уровня, при срабатывании (бросок болта), соприкасалась с аномалией кислотное облако (летает по карте в произвольном направлении). Или вот чтобы добыть «Сердце», требуется использовать артефакт синева (создает новую аномалию) так, чтобы новая аномалия попала в аномалию импульс, плюс требуется отсутствие солнечного света, то есть артефакт можно добыть только в ночное время.
Над всем этим я работал больше двух лет, но вся соль в том этого контента хватает на дня три-четыре, после чего в игре попросту нечего делать. Из-за этого постепенно количество игроков в игре уменьшалось, а я все яснее понимал, что попросту не смогу доделать игру. Я потратил уйму времени на разработку, но кажется не доделал проект даже на половину. Считаю что добился неплохого результата, но все равно надо смотреть правде в глаза — в одиночку полноценную ММОRPG создать невозможно ну или почти невозможно. Я предпринимал попытки найти еще одного программиста, но людей отлично знающих java и имеющих опыт в разработки клиент-серверных приложений не так много. Да и мало кто захочет разбираться в моем коде, так как написан он далеко не идеально, ну и самое главное его много, очень много, прям реально много. Код выкладывать в открытый доступ пока не собираюсь, возможно когда-нибудь, наигравшись в stalker 2, все таки я его доделаю.
Вот такая вот вышла история. Никаких ссылок и названий не привожу дабы не сочли за рекламу.