Дневники разработки Dusk World, в которых рассказываю о процессе разработки нашего проекта
25 постов | 147 комментариев | 2 участников
Все подряд | 3+ | 5+ | 10+ | Лучшие
Переезд на DuskWorld.ru и новая демо-версия
Ну что господа, двигаемся в соответствии с планом, а по плану на конец октября у нас переезд на новый домен DuskWorld.ru (заодно наконец-то сайт переехал на https) и выход новой, четвертой демо-версии Dusk World. Вы только подумайте, четвертая версия! У меня при мыслях об этом сразу такая ассоциация:
Потрогать новую версию матрицы Dusk World
(вспомнить старые версии: первая, вторая, третья)
В общем, смотрите как будет выглядеть наш сайт в будущем, трогайте, ломайте пишите свое мнение.
Важное замечание: это не полностью готовый функционал, по мелочам там еще много всего дорабатывать, но в целом, визуально и концептуально это уже то, что задумано и особо меняться не будет.
Хотя с точки зрения визуала в новом движке заложен функционал смены шаблонов, и когда у меня будет свободное время (интересно бы знать когда) можно будет сделать совершенно новые дизайны сайта, например светлый, или минималистично темный.
Из важного, чего еще нет, но добавится в ближайшие 2 месяца:
- Будут обновлены все аватары;
- Функционал редактирование своих комментариев/постов/сообществ/игр;
- Функционал восстановления/смены пароля;
- Больше опций при создании постов (например, голосования);
- И прочие мелочи.
Эпоха Diablo1.ru заканчивается, начинается эпоха Dusk World!
О внутриигровой валюте
Ну что, пора поговорить про бабосы. Как и в любой другой free-to-play игре в Dusk World будет внутриигровой магазин за dusk coin.
Думаю не нужно объяснять, что разработка требует много времени и денег, и заниматься этим на голом энтузиазме конечно можно, но не долго. А чтобы проект жил и развивался — нужна какая-то монетизация.
В этом выпуске дневников разработки расскажу что можно будет купить за внутриигровую валюту и какие будут способы её получения, помимо покупки за реальные деньги.
Что можно будет купить
Аватары
Первое что появится в игровом магазине — это аватары. По умолчанию на каждую расу+пол будет 12 аватаров на выбор. Но разумеется этого мало, и разумеется игрокам захочется как-то выделиться.
Я сейчас осваиваю Midjourney и получается очень много хороших вариантов. По этому добавить большее количество аватаров не составит проблем.
Фоновые рисунки инвентаря
Второе, чем можно будет украсить и выделить своего персонажа — это покупкой фоновой картинки для инвентаря:
Те фоновые рисунки что вы видите сейчас на demo.duskworld.ru — делались на заказ в далеком 2017/2018 году, за каждый рисунок (всего их 12) платил по 200-300$, но выглядит это сейчас весьма… скромно.
Знал бы что в 2024 году генерация рисунков ии дойдет до такого высокого уровня — не тратил бы столько денег впустую.
Дополнительные вкладки в сундуке
По-умолчанию личный сундук имеет 3 вкладки. Разумеется по мере накопления игровых ништяков захочется иметь больше. Можно заморачиваться с хранением большего количества предметов на персонажах-твинках, а можно просто купить дополнительные вкладки в сундуке.
При этом можно будет купить или простые вкладки, или изменяемые вкладки, которые можно будет переименовать и выделить нужным цветом.
Дополнительные слоты для персонажей
По-умолчанию можно будет создавать 10 персонажей. Это ограничение можно будет расширить, купив дополнительные слоты для персонажей.
Рамки для аватар
Все что было до этого — будет за приемлемую цену которую сможет позволить себе каждый школьник. Но будет и что-то такое, что будет стоить значительно дороже, и позволит показать, что у тебя много лишних денег — это рамки для аватар:
Они будут разного цвета за разную цену. А чтобы такие рамки были редкими, а комментарии не выглядели как новогодняя елка — они будут покупаться на месяц.
(в далекой перспективе) Расширенная статистика
Но что более интересно, но потребует большого количества времени на разработку — это покупка расширенной статистики по аккаунту и персонажу:
- график получение опыта и уровней аккаунтов по дням;
- график получения опыта и уровней по каждому игровому персонажу по дням;
- статистика по участию в эвентах и их результаты;
- возможность посмотреть кто вам больше всего лайкал и дизлайкал;
- всякого рода полезная информация, аля «вы входите в 32% самых популярных авторов, месяц назад показатель был 36% (+4%)»;
- возможно что-то еще.
Способы получения dusk coin
Dusk coin можно будет купить за реальные деньги, но это лишь один из способов. Их можно будет получить за:
- попадание в топ авторов недели
- победы на турнирах
- в качестве бонусов за реферальную систему, т.е. за приглашение новых пользователей
- в качестве бонуса за работу модераторам
- за сообщение об ошибке с помощью которой можно получить игровое преимущество
- покупка на игровом рынке
- покупкой за реальные деньги
Игровой рынок
На проекте будут существовать следующие типы валюты:
- золото — тут все понятно, добывается игровым фармом.
- карма — за счет неё можно будет покупать светлые камни эфира, вставлять в экипировку и получать бонусы против монстров
- слава — за счет неё можно будет получать и усиливать питомцев (про неё скоро напишу отдельный выпуск дневников разработки)
- dusk coin — валюта внутриигрового магазина.
При этом всей этой валютой можно будет торговать. Соответственно тот, у кого какой-то одной валюты много сможет обменять её на другую валюту. Рынок будет абсолютно свободный, и только он решит что ценно и на сколько.
В торговле кармой и славой будет особенность — напрямую её покупать или продавать будет нельзя, но можно будет покупать и продавать камни светлого эфира и самих питомцев. Но сути это не меняет.
Приоритеты реализации
Первое что появится довольно быстро — это возможность получать и копить dusk coin. Думаю уже через 1-2 месяца после релиза. Чтобы те пользователи, которые проявляют активность уже получали за это бонусы, пусть их еще и нельзя будет на что-то потратить.
Потом появится внутриигровой магазин. Вначале с минимумом возможностей, например, только с аватарами. И будет постепенно пополняться.
Затем будет добавлена возможность обменивать dusk coin на другие виды валюты.
И только потом, в последнюю очередь будет возможность купить dusk coin за реальные деньги.
Т.е. к моменту, когда можно будет закинуть денег и выделиться за счет этого — уже будет много игроков с игровой валютой, уже будет её рынок и те, кто будет покупать её за реальные деньги — просто вольются в уже существующую экосистему. Просто смогут догнать тех, кто начал играть раньше.
И еще важный момент, что так как получение реальных денег — это и работа над соответствующим функционалом, и
юридические заморочки, и ответственность (не смогу сказать, мол вы мне ничего не заплатили — по этому радуйтесь
тому, что есть) — я буду добавлять эту возможность только когда буду уверен, что она принесет какие-то заметные
деньги. Потратить кучу времени и получить больше ответственности, а взамен получить пару тысяч рублей и сходить на
них разок в макдональдс вкусно и точка — это бессмысленно.
А до этого проект будет существовать без вливания денег. Сказать плохо это или хорошо сложно — с одной стороны, игроки получат «чистую» экосистему без влияния кошельков. С другой стороны, тот запас денег на который я живу, и который позволяет заниматься Dusk World целыми днями, скоро закончится, и мне нужно будет опять выходить на работу. И разработка Dusk World сильно замедлиться.
Подводя итог
Что можно сказать в завершении — ассортимент игрового магазина никак не будет влиять на игровой баланс, а саму валюту, которая покупается за реальные деньги можно будет получить и игровым путем.
На мой взгляд это будет максимально справедливая и сбалансированная система для игроков.
О питомцах и славе
Ключевая и уникальная фишка Dusk World в переплетении сайтового и игрового функционала. Когда-то давно писал про механику кристаллов светлого эфира, которые будут покупаться за карму, и которые можно будет вставлять предметы и получать бонусы против монстров.
Сегодня расскажу о другой подобной механике — славе, которую игрок будет получать за подписчиков на свои сообщества и лайки играм, которые он добавил, за которую можно будет приобрести питомцев.
Но прежде чем переходить к подробностям, давайте начнем с проблемы.
Б значит баланс
В первой и второй демо-версии было одно подземелье и его сложность была никакая, соответственно любой класс немного подкачавшись мог пройти это подземелье. Но в реальной игре такое будет только в первых локациях на обычной сложности, а вот дальше будет жестко.
И возникнет проблема — магу будет очень сложно «держать» удар, и было бы хорошо иметь какого-то танка. Танку будет сложно убивать врагов, и хорошо бы за спиной иметь какого-то дд. Мили-дд будет не хватать выживаемости, и хорошо бы в тылу иметь какого-то хила и т.д.
Изначально концепция по спутникам была такая:
Наемники
Вводятся в игру первыми. Это просто одноразовые спутники разного типа, которые живут до первой смерти. Нанимаются за золото.
Союзники
Затем появляются союзники. Это городские NPC с которыми отношения прокачены до такого уровня, что они готовы составить компанию в приключениях. Они изначально сильнее наемников, плюс их можно дополнительно прокачивать.
Питомцы
И в конце самый сильный тип спутников — питомцы. Их будет несколько градаций редкости (и мощности), а также их можно прокачивать и усиливать. Они сильнее союзников, но и получить их сложнее.
Но… Сообщества уже есть, база игр уже есть, уже начисляется слава за подписчиков и лайки. И имеет смысл как можно раньше дать игрокам возможность получать бонусы за созданные сообщества и добавленные игры. Соответственно питомцы появятся раньше всех, еще до полноценного релиза с локациями — уже этой весной.
Подробнее о питомцах и их получении
Будет отдельный NPC Закан, который специализируется на ловли и приручением всяких диких животных.
За небольшое количество славы он расставит сети и ловушки и попробует вам поймать кого-то. Кто это будет — заранее неизвестно. Может быть простой черный волк, а может быть редкая ониксовая черепаха.
После того, как вы увидите, кто был пойман — будет выбор, или отпустить за ненадобностью, или приручить. Приручение также требует славы, и чем более редкий и мощный зверь пойман — тем больше сил (и соответственно славы) нужно для его приручения.
При этом, если нужного количества славы пока нет — можно вернуться позже, когда слава появится. Главное не говорить Закану поймать кого-то еще, тогда он отпустит пойманного зверя.
Будет существовать три градации редкости/мощности питомцев:
- Обычные
- Редкие
- Легендарные
В каждой градации питомцы будут делиться на разную специализацию:
- Танки
- Мили-ДД
- Рейндж-ДД
- Хил/поддержка
- Необычные гибриды
Соответственно вы сможете подобрать себе того питомца, который будет идеально дополнять ваш класс.
Примеры питомцев | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Хотя, возможно, сделаю 4 градации спутников, что позволит последний сделать прямо действительно редким-редким.
Также нужно будет еще хорошенько подумать над вариантами спутников и их особенностями. Нужно будет сделать штук 30-40 минимум. Если есть интересные идеи — пишите.
Прокачка и тренировка питомцев
Если вы берете питомца с собой в локации — он будет получать 30% от вашего опыта и прокачиваться. При этом количество необходимого опыта для получения новых уровней отличается для питомцев разной редкости отличается:
Обычные питомцы качаются с той же скоростью что и персонаж: т.е. Взяв питомца 1 уровня на 1 уровне персонажа, он будет получит 15 уровень одновременно с вашим персонажем.
Редкие питомцы качаются в два раза медленнее. А легендарные — в 5 раз медленнее. Соответственно их прокачка будет весьма и весьма трудной. Но и пользу они дадут существенную.
Помимо прокачки питомцев их можно тренировать:
- Тренировать злость: +1% глобального урона за 1 тренировку
- Тренировать живучесть: +1% здоровья за 1 тренировку
- Тренировать скорость: +0.01% скорости атаки и создания заклинаний за 1 тренировку
- Тренировать меткость: +1.5% обычной и магической меткости за 1 тренировку
- Тренировать верткость: +1.5% обычной и магической защиты за 1 тренировку
- Тренировать стойкость к огню: +2% сопротивления за 1 тренировку
- Тренировать стойкость к воде: +2% сопротивления за 1 тренировку
- Тренировать стойкость к воздуху: +2% сопротивления за 1 тренировку
- Тренировать стойкость к земле: +2% сопротивления за 1 тренировку
- Тренировать стойкость к магии: +1% сопротивления к магии жизни и магии смерти
Всего можно сделать по 30 тренировок на каждый тип. Для тренировки также требуется слава.
Суммируя все вышеописанное можно сказать что питомцы — это почти бесконечный потенциал для усиления своего персонажа:
- Найти идеальный вариант легендарного питомца для своего класса уже само по себе сложно
- Прокачка его до максимального уровня займет неимоверное количество времени
- В дополнение к прокачке его характеристики можно усилить тренировками, и чтобы усилить все характеристики на максимум потребуется огромное количество славы.
Но и труды себя многократно окупят — станут доступны для прохождения более высокие уровни сложностей, а побеждать в пвп станет заметно проще.
Подводя итог
Питомцы — важная часть игры, которая будет помогать вам как в прохождении подземелий, так и в пвп схватках с другими игроками. Но чтобы получить редких и прокаченных питомцев — нужно будет много времени уделять сайтовой составляющей проекта.
Впрочем, питомцами можно будет торговать, так что можно будет просто нафармить много золота, а потом купить нужного легендарного питомца с рук. И каждый сам выберет что ему удобнее — кому-то пополнять базу игр или создать интересное сообщество, кому-то просто проходить локации с утра до ночи.
Часть 19: Что нового
Просто красивая картинка с просторов еще не запрещенного интернета
Вы не представляете, как долго я ждал момента, когда можно будет вновь рассказать новости по разработке Dusk World и показать что-то новое.
Предыдущий выпуск начался с хронологии того, что было. Этот выпуск начну аналогично. Тем более что самому приятно потом перечитать и вспомнить как оно было.
2022 год — сложный для всех год, для меня он не был исключением — рухнули все планы по поиску более высокооплачиваемой работы, в итоге год в основном отдыхал, только по выходным понемногу переписывал на нормальный код модуль боевки.
апрель 2023 — наконец-то нашел новую, более высокооплачиваемую работу, половину с которой можно было откладывать. Соответственно с этого момента можно было засекать год, по итогу которого у меня будут деньги на год жизни без необходимости работать, и можно будет год полноценно позаниматься разработкой своего проекта.
декабрь 2023 — дописана новая версия боевки. Визуально и по механикам там (пока) все как в старой, но внутри всё переписано и намного больше просторов для реализации интересных механик. Подробнее о ней писал в предыдущем выпуске дневников.
январь-март 2024 — дорабатывал свой фреймворк, на котором написана вторая демо-версия.
апрель 2024 — возвращаюсь к попыткам развивать проект дальше на основе второй демо-версии, но там все сложно (подробности ниже).
июнь 2024 — деньги на год жизни накоплены и я увольняюсь. Наконец-то. Но прежде чем плотно приступать к разработке решаю, что нужно хорошо отдохнуть и разгрузить мозги, и на месяц зависаю в 7 сезоне Diablo 2.
1 июля 2024 — отдохнув приступаю к написанию новой версии проекта.
Итак, новая версия проекта
Да-да, знаю, что при этих словах у всех кто всё еще ждет проект будет примерно такая реакция:
Но, как бы ни было много сделано во второй демо-версии, её пришлось отложить, и делать новую. Причин несколько:
- отсутствие авто-тестов, соответственно при изменении старого кода постоянно что-то отваливается. А правки старого кода там приходится делать постоянно.
- фундаментальные архитектурные косяки, например числовые айдишники, которые нельзя оставлять как есть: когда посты имеют url вида domain.ru/post/10 то легко написать скрипт, который будет каждую секунду запрашивать новые посты, и в туже секунду, как они добавлены на сайт — копировать их себе. И поисковики могут подумать, что именно сайт-вор это источник контента.
- много недоработок, с которыми невозможно было мириться, например, не было миграций для базы данных
Все это в сумме приводило к тому, что занимаешься второй демо-версией месяц, второй, а никакого прогресса с точки зрения пользователя нет. Просто бесконечные правки/доработки/отлавливание ошибок/добавление тестов. И это морально угнетает.
Плюс к этому была еще одна задача, которую нужно решить. Как уже писал ранее — я не хочу просто сделать Dusk World, а потом «выстрелит или не выстрелит», я хочу сделать фундамент, на котором потом смогу делать сайты по любым другим тематикам, например по программированию, фильмам, и прочему.
И размышления на эту тему привели к тому, что проект нужно делать так, чтобы парой небольших правок в настройках, не затрагивая код, проект можно было переключать между разными тематиками.
Ну и как вы догадываетесь, на базе второй демо-версии это сделать было невозможно, нужны были фундаментальные правки.
Новая версия проекта
Давайте пройдемся по новой версии проекта, покажу что сделано за 3.5 месяца. Пока занимаюсь пока только «сайтовой» частью проекта.
Регистрация. Здесь пока все также, но в будущем все аватары будут заменены.
Обратите внимание, что появились иконки слева — это ссылки на базы знаний, которые сейчас находятся в верхнем меню. Верхнее меню теперь другое.
Теперь нужно подтверждать регистрационный email — это усложнит создание твинков.
В посте добавились теги, а комментарии отображаются не простым списком, а в виде дерева.
Добавлена база игр.
Игру может добавить любой желающий (ограниченное количество, которое будет расти с ростом уровня аккаунта), после модерации она будет добавлена. Для добавления игры необходимо будет также написать обзор на неё. Если несколько человек в одно и тоже время добавили игру — автором игры будет тот, у кого лучше обзор. Обзор же второго человека также будет добавлен, но уже просто как обзор.
Так выглядит страница игры. На её дизайн потратил 3 дня, и это пока единственное, что визуально меня полностью устраивает в новом функционале.
Игру можно добавить в любимые, и тогда она появится на странице профиля.
Есть и страница разработчика игр, тут пока все просто — небольшое описание и список игр выпущенных данной компанией.
В будущем можно будет добавить «лайки» компаниям игр и можно будет сделать рейтинг самых любимых компаний по версии игроков.
Добавлены сообщества.
Текущие базы знаний по играм это будут именно сообщества.
И на этом же скрине видно небольшое улучшение по уведомлениям — если их 3 или более появляется кнопка «закрыть все». Не нужно кликать на каждый отдельно.
За добавленные игры и созданные сообщества пользователь будет получать игровые бонусы — за каждый новый лайк игре или подписку на сообщество будет даваться определенная валюта, за которую можно будет купить и усилить питомца, которые будут помогать вам в бою. Питомцы будут разных типов: танк, дд, саппорт и позволят балансировать своих персонажей: дд может взять себе питомца-саппорта, чтобы лечил, саппорт — питомца-танка, чтобы танковал.
Подробнее о спутниках и питомцах расскажу в будущих выпусках дневников.
Сами сообщества пока предельно простые — это список постов, с возможностью отфильтровать по рейтингу, и меню.
По сообществам еще много работы.
Профиль пользователя не изменился, но теперь на нем отображаются любимые игры пользователя и сообщества, в которых он участвует.
Также небольшое изменение по характеристикам: теперь очки за новые уровни можно потратить на увеличение доступного места на диске.
Эволюция понимания как надо делать
Много вечеров размышлял над тем, как можно ускорить разработку такого большого проекта. И наконец до меня дошло (на 8 год разработки), что такой крупный проект надо релизить по частям.
При этом поделить проект нужно так, чтобы каждая его опубликованная часть была самодостаточной. Первое очевидное решение: вначале опубликовать сайтовую часть, потом игровую. Еще немного подумав пришел к 4 стадиям:
План по релизам | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
Если по первой и последней стадии всё понятно, промежуточные нужно пояснить:
Стадия II: «тихий» релиз сайтового функционала — когда функционал будет готов, нельзя будет просто взять и переключить сайт на новую версию. Потому что постов 0, игр 0, сообществ 0, и пользователи подумают, что привычный им сайт куда-то исчез.
По этому релиз будет «тихий»: с одной стороны появится возможность регистрироваться, добавлять игры, создавать сообщества и прочее. С другой стороны, внешне, сайт еще какое-то время будет оставаться старым. Только когда постов накопится какое-то количество — переключу главную страницу на отображение новых постов.
Тоже самое с базами игр и сообществами — буду добавлять их в интерфейс когда там что-то будет.
Ну и конечно же будет огромный объем работы по переносу ~5000 старых страниц на новый движок, с комментариями. Т.е. какое-то время на сайте одновременно будут старые страницы, с комментариями как сейчас от гостей, и новые страницы, с комментариями только от зарегистрированных пользователей.
В общем это специфика обновления крупных и старых проектов.
Стадия III: релиз «кликера» и PvP — разработка новых локаций займет много времени, и чтобы пользователям было чем заняться, весной будет условный релиз «кликера»: когда на странице персонажа будут просто кнопки «добавить x опыта (10 энергии)», «добавить предмет (5 энергии)» и за счет этого можно будет прокачивать и одевать своего персонажа, а потом учавствовать в PvP с другими персонажами.
Тем кто участвовал во второй демо-версии с её самых первых дней анонса помнит, что там также был аналогичный период, и на мое удивление пользователи вполне себе серьезно зависали в этом кликере и с азартом соревновались.
Так что и в релизной версии, эта стадия позволит скрасить ожидание выхода полноценной игровой части. Плюс обкатаем новый модуль боевки и баланс в PvP.
P.S.
В общем планы такие. Самое главное — что я уволился и могу полноценно заниматься проектом. Ближайший год будет веселым!
О группе «Dusk World Team»
Не знаю как вы, но я обожаю рейтинги в онлайн играх. Но важно, чтобы эти рейтинги были честными, иначе весь азарт соревнования исчезает.
Но будет ли рейтинг, например, по карме, честным, если там буду я, написавший 3000+ страниц на сайте? Ведь я буду там на вечном первом месте, с громадным отрывом от остальных. Будет ли он честный, если там будет JustNeedCoffee или Gattling у которых также куча статей и которые получали деньги за их написание? Очевидно, что нет.
Думал над тем как решить эту проблему, и решил добавить специальную группу Dusk World Team. И добавить туда себя и всех пользователей, которые пишут материалы за деньги.
Участники этой группы:
- Не будут отображаться в рейтингах
- Их показатели не будут влиять на рейтинг рас
- Не смогут участвовать в турнирах и рейтинговых PvP
Правда возникает другая проблема — а что делать с JustNeedCoffee, у которого часть старых материалов была написана «на энтузиазме»? Что делать, если он захочет участвовать в проекте как обычный игрок со всеми возможностями?
Для таких людей мы сделаем исключение из правила «один человек может иметь только один аккаунт», и они смогут иметь два аккаунта:
- Один «рабочий» для написания материалов за деньги. При этом важно понимать, что с такими людьми я четко обговариваю, что они пишут и в каком формате. Никакой свободы там нет.
- Другой «свой» — для полноценной игры и для написания чего-либо на свое усмотрение, не получая за это деньги.
При этом я буду следить за тем, чтобы с таких аккаунтов не было лайков самому себе. Нарушителям заблокирую аккаунты и перестану сотрудничать.
«А пусть все будет только на энтузиазме»
Нельзя не упомянуть о варианте, когда все пишут посты только на энтузиазме, и вообще никто ни за что не получает денег. Размышлял над таким вариантом, и в нем вот какая проблема:
Представьте себе, что Dusk World уже реализован, есть активная аудитория, допустим в 200 человек, и мы между собой играем и общаемся.
Хочется ли нам, чтобы нас было больше? Разумеется хочется. А теперь представьте, что выходит The Elder Scrolls 6 и тысячи игроков ищут по ней гайды, описания предметов, заданий и прочего. И представим, что у меня есть лишние 100-200 тысяч рублей. Логично же потратить их на актуальный контент по новой игре, который опосредованно приведет и новых игроков в Dusk World.
Отказываться от такой возможности глупо.
И глупо надеяться, что кто-то на чистом энтузиазме возьмет и будет монотонно писать 200 статей о заданиях, потом 100 статей об уникальных предметах, где их найти и т.д. При создании базы знаний очень много рутинной работы.
По этому возможность платить кому-то, кто будет делать эту монотонную работу, а мы вместе — получать новых игроков, нужно оставить.
Ачивка за участие в бета-тесте
Время идет, и все ближе релиз Dusk World. Пускай пока с сильно урезанным функционалом, но все же релиз. Времена бесконечных демо-версий, которых было аж 4 штуки навсегда останутся в прошлом, хотя я и не буду их удалять и можно будет зайти и вспомнить с чего все начиналось.
Чтобы выделить и наградить всех тех, кто принимал участие в тестировании, давал фидбек, находил ошибки и просто морально поддерживал своим неравнодушием к проекту, я решил добавить уникальное достижение:
Чтобы получить это достижение необходимо:
- зарегистрироваться до 1 января 2025 года на dwdemo.ru, dwdemo2.ru или demo.duskworld.ru (достаточно на каком-то одном);
- указать тот же почтовый ящик, на который вы потом будете регистрировать основной аккаунт — привязка будет именно к email, а не к нику;
- проявить какую-либо активность (просто регистрации недостаточно);
- ждать релиза, после чего зарегистрироваться уже на основном проекте duskworld.ru и сразу, автоматически, получить достижение.
Важно! То, что сейчас можно сделать потратив 10 минут — потом нельзя будет получить никаким способом. Имейте ввиду — оставшийся месяц пролетит незаметно.
Если вы участвовали в демо-версиях но не помните на какую почту регистрировались — лучше перестраховаться и зарегистрироваться еще раз, и, напомню, проявить какую-то активность — покачать персонажа, написать что-либо.
И еще раз, чтобы не было недопонимания, чего недостаточно для получения достижения:
- Просто зарегистрироваться;
- Зарегистрироваться после 31 декабря 2024;
- Зарегистрироваться на чужой email;
- Допустить ошибку в написании email. Подтверждение email добавлено только в последней демо-версии — demo.duskworld.ru, если вы там зарегистрировались — то с почтой точно все ок.
Я заранее знаю что потом мне будут писать и говорить «ой, а я не знал», «ой, а я не заметил» - но будет уже поздно. Вы предупреждены, и у вас есть целый месяц чтобы перестраховаться и зарегистрироваться еще раз.
Потом пеняйте на себя.
P.S.
Других достижений пока нет вообще. Конечно, они потом появятся, но, во первых, будет много других более приоритетных вещей, во вторых, не хочется делать какую-то банальщину, а идей чего-то интересного пока нет.
Так что данное достижение не только уникальное, оно еще и долгое время будет единственным на проекте, что будет придавать ему еще большую ценностью.
Часть 15: Эволюция боевой системы
В данный момент активно занимаюсь разработкой второй демо-версии, значительно более насыщенной, чем первая. Что-то показать можно будет через месяц, а пока, чтобы вы не скучали немного о том, как шла разработка боевой системы.
Зная наперед, что спустя годы будет интересно взглянуть «как оно все начиналось», с самого начала разработки боевки делал скриншоты.
Давайте по ним и пройдемся :)
22 февраля 2017 года
Первый вечер, какогда начал делать боевку. Никакого понимания как её писать нет сделал два массива, цикл, в котором «игроки» бьют друг друга по очереди первая версия готова :)
24 февраля 2017 года
Добавлены расовые способности эльф уклоняется, у орка вырастает урон, когда его здоровье падает ниже 30%. Плюс небольшой случайный множитель урона, чтобы не было одних и тех же повторяющихся цифр.
16 апреля 2017 года
Но, очень быстро стало понятно, что бой 1 на 1 это тупиковый путь. Нужно сразу делать командный бой, при чем с любым количеством сражающихся.
И спустя полтора месяца был готов такой вариант. С точки зрения характеристик все предельно просто, но добавилась механика ближнего и дальнего ряда, а также правило, что милишники не могут бить дальний ряд, пока есть живые в первом ряду.
17 апреля 2017 года
Добавил немного оформления.
20 апреля 2017 года
Первая «анимированная» версия. Описывать как делалась анимация не буду крайне убого и печально.
21 апреля 2017 года
Еще немного работы над дизайном.
27 июня 2017 года
Пришло понимание, что с первоначальной системой характеристик ничего интересного в плане боя не сделать нужно делать расширенную версию характеристик различные типы урона и сопротивления к ним, меткость, защита, шанс и сила критического удара, скорость атаки, блок и т.д.
Также, отказался от первой версии анимации.
3 сентября 2017 года
Начал делать механику навыков, и концентрацию/хитрость/ярость, которые на них завязаны. На скриншоте применение навыков не видно, но парочка из них уже была сделана.
18 декабря 2018 года
Здесь происходит резкий скачок в будущее забыл делать скриншоты. Впрочем, за прошедший год в основном занимался механикой локации, боевку делал уже между делом.
Что изменилось:
- Сделана новая версия анимации. Простая, но в 100 раз лучше первой;
- Обновлен дизайн сражающихся юнитов;
- Добавлен чат;
- Добавлена механика энергетического щита и воровства здоровья;
- Значительный рефакторинг кода;
- Механика «сохранения» боев, с возможностью их пересмотреть.
14 мая 2019 года
Скриншот сделан 14 мая, но готова данная версия была еще 1 января. В ней доделана система навыков, и эффектов от них.
На данный момент это актуальная версия боя, но как минимум еще нужно добавить:
- Эффекты от разных типов оружия;
- Уменьшенный вариант иконок юнитов, для массивных боев 15 на 15 и больше;
- Добавление новых навыков и эффектов;
- Другие небольшие улучшения.
Планы на будущее
И несколько слов о том, чего ждать в перспективе. Без сроков потому что какие сроки не называй, все равно все получится дольше, чем планировалось.
- 16 часть дневников скриншоты того, что сделано и над чем идет работа по второй демо-версии;
- 17 часть дневников выкладываю часть реализованного функционала из второй демо-версии, чтобы любой желающий мог поискать там баги;
- 18 часть дневников будет промежуточной, перед анонсом второй демо-версии. Есть две небольших темы для рассказа монетизация проекта и классы у рас (их будет 30 штук, по 5 на расу);
- 19 часть дневников анонс второй демо-версии.
Часть 2: Что это будет
В прошлой части рассказал о долгом пути к началу разработки своей игры (или, скажем так, проекта с игровыми аспектами), сегодня рассажу об основных игровых механиках и идеях.
Напомню, что пока проект разрабатывается без художника, по этому ничего «визуального» не будет, а те немногие картинки для оформления дневников взяты из гугла. Собственная графика будет появляться после августа, когда к разработке подключится дизайнер.
Основная идея проекта уникальная, это лично меня сильно мотивирует заниматься им, и даже в случае полного провала, с чистой совестью скажу себе, что пытался сделать что-то уникальное, что-то, чего еще не было.
Для меня такой подход, в общем-то, обычен – например те, кто читали Хроники Валькирии в Path of Exile знают, что я всегда старался создать уникальные и неиспользуемые другими билды. Иначе в общем-то и не могу – непонятно, зачем делать что-то, что до тебя это же самое делали сотни и тысячи других людей.
Хотя, такой подход, конечно сложнее, чем идти по протоптанной дорожке. Тем более, если это разработка игры – под стандартные жанры есть масса готовых решений (пусть не всегда идеальных), и что самое главное – на этих готовых инструментах достаточно быстро сделать прототип игры и проверить основную идею. Например, вы придумали новую боевую механику в пошаговых стратегиях, и нужно проверить, действительно ли она также интересна на практике, как и в задумке.
В моем же случае, основная идея геймплея – это объединение сайта и браузерной MMORPG. Т.е. нужно взять сайт, нужно взять браузерную MMORPG, нужно их связать между собой, и только после этого предложить поиграть знакомым и спросить «ну как вам?». Объем работы, как вы понимаете, огромный. И ни о каком «прототипе за месяц» и речи не идет.
Впрочем, кое-что готовое уже есть – это сайт с контентом и посещаемостью. Это очень важный момент, потому что каждый разработчик, создав новую игру сталкивается с проблемой «а где брать игроков?», и даже если игра интересная – все равно нужно найти где-то первых несколько тысяч игроков, которые уже потом сами будут рекомендовать игру другим.
В нашем же случае, в этом плане, все проще – есть сайт с ежедневной посещаемостью более 10 000 человек, и когда проект будет готов – в шапке появится заметная кнопочка «Играть», и несколько сотен игроков в день, без дополнительных расходов на рекламу, уже будет.
Остается только сделать интересную игру :)
Общие аспекты
Вначале общие сведения о планируемом проекте:
- Шесть рас, сражающихся между собой за контроль над территориями;
- У каждой расы свой набор уникальных классов;
- Свободная прокачка характеристик и способностей;
- Открытый мир;
- Сюжетная линия;
- Случайно генерируемые свойства на предметах и система крафта;
- Несколько типов оружия, каждый со своими особенностями;
- 5 типов брони (одежда, роба, легкие доспехи, средние доспехи, тяжелые доспехи), каждый из которых имеет свои особенности;
- Открытое PvP, за исключением стартовых и сюжетных зон;
- Автоматические пошаговые бои с элементом рандома;
- Массовые сражения (20 на 20 точно потянет, больше – надо будет тестировать);
Источник материи
Теперь об основной особенности проекта. Сразу скажу – она заключается во взаимодействии аспектов сайта и аспектов MMORPG. Отдельно сайты и отдельно MMORPG все видели и знают. А вот проект где они объединены – это нечто новое, и то, как они объединены и связанны друг с другом и есть та область, где можно создать новый игровой опыт.
По сюжету игры, источником всей материи является эфир, который, при определенных знаниях и технологиях можно проявить в своем изначальном виде. Но, кристаллизуется он только в одном из двух вариантах – светлом или темном.
Кристаллы темного и светлого эфира имеют уникальные свойства, и получение их будет также непростым.
Кристаллы светлого эфира
Любовь, радость, смех, чувство счастья – все это проявление светлого эфира. Чтобы получить кристаллы светлого эфира, необходимо особое устройство, которое игрок встретит в процессе игры, и собственно тот «позитив», который будет материализовываться.
И этим «позитивом» выступает привычная всем карма пользователя. Да, та самая обыденная карма на сайтах в нашем проекте становится уникальным и ценным ресурсом, с помощью которого можно будет получить кристаллы светлого эфира.
В чем их особенность? Если не вдаваться в сюжетные аспекты – предметы, усиленные кристаллами светлого эфира получают значительные бонусы против монстров (в сражениях с другими игроками эти бонусы не учитываются).
Кристаллы темного эфира
Темный эфир – противоположность светлого эфира – это ненависть, злость, и все прочие негативные явления в мире.
Опять же, опуская все сюжетные аспекты, для получения кристаллов темного эфира необходимо будет проходить особую локацию, которая будет «бесконечной», а сила монстров в которой будет постоянно возрастать. При этом, посещать её можно будет только один раз в день.
Предметы, усиленные кристаллами темного эфира имеют бонусы в сражениях против других игроков. А также обладают еще одной дьявольской особенностью: при смерти, предметы усиленные кристаллами темного эфира имеют небольшую вероятность самоуничтожиться.
Тем самым получаем синергию аспектов сайта и игры:
- Положительную карму можно конвертировать в кристаллы светлого эфира;
- Кристаллы светлого эфира позволяют лучше фармить, в том числе кристаллы темного эфира;
- Кристаллы темного эфира дают бонусы в PvP.
Учитывая, что основным игровым занятием будет борьба за территории и сражение с игроками других рас – бонусы в PvP будут весьма цениться.
Конечно, никто не запрещает игроку заниматься только тем, что ему нравится – например, только играть и полностью игнорировать аспекты сайта. Он также сможет прокачиваться, собирать экипировку и прогрессировать.
Но настоящих вершин смогут достичь только те, кто добивается успехов во всем:
- Пишет полезные комментарии и посты на сайте -> получает положительную карму;
- Играет каждый день -> получает много кристаллов темного эфира;
- Высокий уровень + Хорошая экипировка + Кристаллы темного эфира -> побеждает в PvP.
Посты как одна из площадок сражений
Что еще интересного дает такой подход? Например, то, что посты (основной способ получения положительной кармы) становятся таким же аспектом сражений, как и обычные игровые локации.
Разумеется, что проиграв какому-нибудь игроку на просторах игрового мира, пользователь захочет отомстить обидчику – поставив минусы к постам и комментариям этого пользователя.
Мы не будем запрещать такие действия, но создадим множество условий, чтобы развить и сбалансировать этот аспект:
- Пользователь может видеть кто ему лайкает и дизлайкает – соответственно тому, кто вас усиленно дизлайкает, можно будет подкинуть минусов в ответку;
- Одна из характеристик персонажа увеличивает силу и количество возможных лайков/дизлайков в день. Соответственно лайки/дизлайки от «нубов» будут менее существенны, чем от прокаченных пользователей;
- На свои посты можно будет накладывать особый эффект – защитников. И если кто-то пытается дизлайкнуть такой пост – то ему вначале нужно будет победить защитника, и только в случае победы дизлайк будет засчитан;
Ну и конечно же самый «шик», который будет обходиться в копеечку:
- Благословение поста (несколько уровней силы) – при лайке благословленного поста пользователь получает бафф на время;
- Проклятие поста (несколько уровней силы) – при дизлайке проклятого поста пользователь получает бафф на время.
Соответственно, если уж кому-то захочется сильно подпортить жизнь другому пользователю, или, наоборот, сделать так, чтобы его постам больше лайкали – он сможет использовать благословения или проклятия поста.
Которое, напомню, будет весьма дорогим, что не позволит это делать постоянно и всем подряд.
Тем самым обычные посты могут стать тем же полем боя, что и игровые локации.
Конечно, не все игроки будут лайкать/дизлайкать из корыстных целей. Думаю, что таких будет как раз меньшинство – и хорошие посты, несмотря на зависть нескольких человек – все равно будут получать хороший рейтинг.
Если же говорить об аспектах войны между расами, и о том, что как продолжение этих войн могут ставить дизлайки кому-то просто потому, что он из другой расы, то здесь ответ прост:
В игре 6 рас.
Количество лайков/дизлайков в день сильно ограничено.
Соответственно, если мы и рассматриваем полностью корыстного пользователя – то выгоднее лайкать постам своей расы, чем дизлайкать всем остальным.
Неадекватам здесь не место
Всем любителям MMORPG знакомы ситуации, когда у какого-нибудь высокоуровневого игрока зашкаливает ЧСВ и он начинает считать всех, кто ниже его уровнем коричневой субстанцией. Иногда говоря об этом открыто, иногда завуалировано.
Теперь возьмем наш проект.
Сможет ли высокоуровневый игрок так себя вести? В принципе сможет – зайти в чат и написать какие-нибудь гадости несложно. Но что произойдет дальше? Некоторая часть из тех, кто его услышит, просто зайдет в его профиль, посмотрит его последние посты/комментарии и поставит дизлайки.
Зашел в чат, написал «вы все говно» - получил -100 в карму. Классно? По моему отлично.
А модераторы будут проверять пользователей с отрицательной кармой – и если там одна ругать и асоциальное поведение – выдавать баны.
«Жопочасы» не помогут
Еще одна проблема практических любой MMORPG – это достижение любых вершин просто просиживанием n-количества часов на фарме. Даже термин такой есть «жопочасы».
Т.е. сиди себе, фарми, и при должном усердии станешь топом.
В нашем же проекте так не получится. Чтобы быть топом, нужно иметь много положительной кармы, а чтобы её получить – нужно не только время, на написание хороших постов, но и мозги на плечах, чтобы эти хорошие посты сделать (найти интересную тему, хорошо подать, хорошо оформить).
Наш проект станет наверное единственным MMORPG проектом, который сломает этот подход, что лично меня очень радует и вдохновляет им заниматься.
Борьба с накруткой
Разумеется, в такой системе будут желающие создать твинков, и лайкать свои посты. Скажу коротко – уже придумана система (формула), с помощью которой мы будем получать % значение, отражающие вероятность того, что данный пользователь твинк. И сразу список упорядоченный по наибольшему значению, вида:
- Вася 84.3%
- Петя 76.8%
- Маша 56.1%
- Миша 52.6%
- …
Соответственно останется только вручную проверить «топ» претендентов на бан, и наказать твинководов.
P.S.
В заключение – текущий список планируемого функционала, поделенного на различные периоды разработки.
Зеленым отмечено то, что было разработано в самой ранней альфе (февраль 2017), которая позже отправилась в утиль и сейчас все пишется с нуля (в принципе это нормальное явление для подобных проектов).
Жирным выделен функционал который требует значительных временных трудозатрат (из того, с чем уже столкнулся).
Планируемый функционал | |||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
Обратите внимание, что в этом списке ничего не сказано про графику. О графике и о том, как будет выглядеть проект – в следующей части.
Часть 13: Аккаунты, персонажи и сезоны
Алтарь восстанавливающий ману, который будет введен в будущем.
Кости вокруг алтаря намекают, что бесплатной мана не будет…
Пришло время рассказать о такой важной, но на первый взгляд обычной вещи — аккаунте игрока.
Расскажу о том, как подход к этому эволюционировал по ходу разработки.
Аккаунт и персонажи
Изначально все планировалось просто — один аккаунт = один персонаж (что и реализовано в самой первой версии). Он же получает опыт за убийство монстров и написание постов.
Но сразу возникает проблема — а если игрок захочет попробовать поиграть за другой класс — регистрировать новый аккаунт? Как-то это не очень здорово…
Даем возможность иметь несколько персонажей на одном аккаунте:
Но следом возникает другая проблема — а как быть с опытом за написание постов? Какому персонажу её добавлять?
Можно добавлять тому, кто в данный момент «выбран».
Допустим. Но есть другая проблема — это баланс получения опыта за убийство монстров и написание постов.
Во первых, нельзя давать фиксированное количество опыта за написание постов — потому что получаемый опыт за убийство монстров будет расти, по мере роста уровня персонажа и убиваемых им монстров, а опыт, получаемый за посты, будет оставаться старым — и в итоге от него будет ни тепло, ни холодно.
Ладно, добавим получаемому опыту за написание постов какой-нибудь множитель от уровня, т.е. Получаемый опыт = 500 * уровень персонажа.
Но тут возникает другая проблема — если какой-то пользователь, зарегистрировавшись на сайте, только писал комментарии (за которые тоже будут давать опыт) и писал посты — то его уровень будет расти, и зайдя в игру он обнаружит, что: 1) его персонаж всех убивает, и ему банально все легко и неинтересно 2) опыта за игровой процесс дают крайне мало — что тоже минус к интересу.
Опять плохо.
А хорошо бы придумать такую систему, в которой не только не будет таких проблем, но которая наоборот, будет мотивировать людей, только играющих, или только общающихся на сайте — попробовать другую часть проекта.
И размышления привели к следующему варианту:
- Аккаунт — это «основной персонаж» и у него есть такие характеристики как уровень, сила, ловкость, интеллект и прочие.
- Персонажи (один или несколько) — это «классические персонажи» — те, за которых будет происходить игра.
При этом все персонажи будут получать бонус от характеристик основного персонажа — прокачали вы ему силу на +20 — все ваши «игровые» персонажи получат +20 к силе.
Что это дает:
- Визуальное понимание — увидели, что у пользователя 1 уровень аккаунта, и 50 уровень персонажа — значит он только играет, и ничего не пишет и не комментирует. Увидели, что у пользователя 20 уровень аккаунта, но персонаж 1 уровня — соответственно это наоборот любитель писать и общаться, а не играть;
- Если кто-то сконцентрировался лишь на одной части проекта — такая система будет мотивировать его попробовать другую часть;
- Система, где персонажи усиливают друг друга — это мечта любого задрота, а проект создается именно таким и для таких — будь то форумные задроты, которые годами набивают тысячи комментариев, или классические игровые задроты, убивающие миллионы монстров.
Сезоны и эры
С персонажами разобрались, но это еще не все.
Размышляя о таких играх как Diablo 2, Path of Exile, Lineage 2, в которые играл много лет, думал над тем, что мотивировало раз за разом, с интересом возвращаться к ним.
А ответ прост — это возможность «начать с нуля» вместе со всеми. Посоревноваться.
- В Diablo 2 — это рестарт ладдера
- В Path of Exile — новые сезоны
- В Lineage 2 — новые серверы
Стало очевидно, что и в нашем проекте нужно вводить систему сезонов, где будет один постоянный сезон (аналог лиги «Стандарт» в Path of Exile), и какой-то новый сезон, по окончанию которого все персонажи из него будут переводиться в старый, а затем стартовать новый, где все желающие смогут еще раз начать все с начала, и посоревноваться с другими.
В этом плане, фактор основного аккаунта и его характеристик будет играть интересную роль:
- Игроки, которые будут прокачивать только игровых персонажей (и игнорировать прокачку основного персонажа), будут стартовать с обычными характеристиками;
- А те, кто прокачкой основного персонажа занимался — будут иметь значительные бонусы за счет него, и стартовать «усиленными» персонажами.
В целом, считаю, довольно справедливо. Впрочем, тем, кто сайтовую сторону проекта будет совсем игнорировать, немного поможем — основной аккаунт будет получать опыт не только за написание постов и комментариев, но и за получение значительных уровней игровыми персонажами. Т.е. прокачали игрового персонажа до 10 уровня — основной аккаунт получил 1000 опыта, прокачали до 20 уровня — еще опыт, и т.д. Прокачали 10 персонажей до 100 уровня — получили… очень много опыта.
Также к такой системы появляется один плюс, но и один минус.
Представим, что проект существует 5 лет. И есть часть пользователей, которые играют и общаются на нем все это время. За это время они прокачают себе значительный уровень основного персонажа, и будут получать очень солидный бонус к характеристикам игровых персонажей, который особенно будет чувствоваться на старте новых сезонов.
Это, с одной стороны плюс — система дает бонус тем, кто провел в проекте столько лет. С другой стороны — будет нарушать принцип «все с нуля» при старте новых лиг.
И здесь два решения:
- Первое — постепенное снижение количества очков характеристик, которые получает основной аккаунт при получении нового уровня аккаунта. Вначале это будет 5 очков за уровень, и постепенно будет снижаться до 1-2. Соответственно чем выше уровень — тем не только будет сложнее получать новый, но и бонус к характеристикам будет незначительный;
- Второе — это введение Эр
Эра — это аналог сезона, только для основных аккаунтов. Если сезоны будут продолжаться 5-10 месяцев, то эры могут длиться 5-10 лет.
Скажу даже более того — не факт, что эры вообще будут сменяться (не знаю, как отреагируют игроки, если их «прогресс», который они копили годами, вдруг обнулится), но заложить в фундамент проекта такой функционал я обязан. Потому что если его не заложить сразу — вводить «в процессе» будет значительно сложнее.
Итого
Механика аккаунта и персонажей значительно усложнилась. Но все «навороты» считаю нужными и полезными, и их обязательно нужно заложить с самого начала, потому что добавлять это потом, «на ходу», будет значительно сложнее.
Часть 3: Визуальная сторона проекта
В этом выпуске дневников разработки расскажу про то, как будет выглядеть проект, точнее его игровая часть.
Как уже говорил – проект очень сложный и объемный, и с учетом того, что большую часть работы будут делать в одиночку, и все расходы финансировать из своего кармана – ни о каком ААА, АА, А проекте речи не идет.
Сегодняшний выпуск дневников разработки можно было бы построить от того, что будет, почему так, а не иначе, но, на мой взгляд, интересней пойти от обратного – рассмотреть различные варианты визуального представления MMORPG и разобрать, почему тот или иной вариант не подходит.
Почему не 3D
Причина первая: стоимость
Хорошая 3D графика с качественной анимацией стоит очень дорого. Очень дорого, прямо ОЧЕНЬ. Ценник начинается с десятков миллионов рублей, при этом этих десятков будет тем больше, чем дольше разрабатывается и активно развивается игра.
У меня нет лишних десятков миллионов (и даже пары миллионов), по этому вариант с 3D графикой не рассматривается.
Впрочем, даже если бы и были – не рассматривал бы и по второй причине:
Причина вторая: качественная 3D графика и игра в браузере несовместимы
Здесь все просто – качественная 3D графика подразумевает высокополигонные модели, а они в свою очередь подразумевают большой «вес». Так как суть браузерных игр – играть без установки чего либо, вся графика должна быстро подгружаться на лету, а следовательно, она должна быть легкой. Или, если говорить критично, убогой.
Последняя, из известных мне амбициозных 3D браузерных MMORPG – Пароград, на его разработку ушло немало средств, но графика при этом оставляет желать лучшего:
Есть еще одна маленькая, но неприятная проблема 3D браузерных игр. Обычно они требуют какой-то дополнительный плагин, например Unity Web Player, с которым, как и с любым ПО, бывают проблемы.
Согласитесь, не очень здорово, когда вы сделали отличную игру, вложили кучу денег в разработку, в рекламу, а потом оказалось, что 2-5% игроков вы теряете только потому, что у них не установился нужный плагин. Плагин плохой или руки у пользователей кривые – здесь совершенно не важно. Важно то, что на ровном месте теряется часть потенциальных игроков.
Она, впрочем, теряется не только на этом моменте. Часть игроков в принципе не готова что-то дополнительно устанавливать в браузер, еще часть, нетерпеливых и с медленным интернетом отвалится, когда нужно будет подождать 2-3 минуты для загрузки локаций.
Почему не 2D
Причина первая: стоимость
Да, 2D графика стоит дешевле, чем 3D, но если говорить о хорошей графике, анимации, то стоимость будет также значительной.
Причина вторая: нагрузка на сервер
3D или 2D открытый мир с геймплеем в реальном времени (обычный формат для клиентских MMORPG) имеют одну особенность – если в одном месте собирается большое количество игроков, то это создает огромную нагрузку на сервер.
При этом даже мощные сервера не держат больше 5-6 тысяч онлайна (если речь идет о едином открытом мире, без каналов). По этому, если игра очень популярна – создают несколько, полностью автономных друг от друга серверов. Например, в Lineage 2 и ArcheAge около 10 серверов на каждую игру.
В нашем же проекте игровая часть строго связана с сайтом, следовательно, сделать несколько отдельных серверов не получится, нужно всех игроков держать на одном. И в сторону каналов даже смотреть не хочу – на мой взгляд, это самое отвратительное решение в MMORPG.
Следовательно, нужно сделать так, чтобы игровой мир был одним для всех и мог выдержать неограниченное количество игроков.
Итого: гибрид текстовой игры с иллюстрациями
Что остается? То, что использует большинство браузерных MMORPG – геймплей в виде различных слайдов. Одна локация – одна картинка + текстовое описание + какой-то вариант действий.
По сути, вся игра в этом случае – обычный сайт. Только страницы сделаны в виде различных локаций, боевых сцен, инвентаря и т.д.
При этом структура мира будет следующая (это не реальные скриншоты, а просто набросок):
Пояснения:
- Будет единый и открытый для исследования мир;
- Мир состоит из зон, каждая из которых будет содержать несколько локаций;
- Каждая локация состоит из нескольких эпизодов;
- Каждый эпизод – различное событие, которое происходит с игроком во время исследования локации, например: встретили монстров, попали в ловушку, нашли тайник и т.д.
Не буду останавливаться на механике, об этом подробно напишу в следующих частях, а пока подробнее поговорим о том, как все эти зоны, локации и эпизоды будут выглядеть.
План максимум – воссоздание в 3D (в Unity3D) всех локаций, и их эпизодов, с последующим созданием «снимков» - изображений, которые будут показаны игроку. Тем самым получаем: красивую картинку реалистичного 3D мира, и быструю загрузку – так как это просто картинка.
Но, это план максимум, а план минимум, который будет на стадии беты/релиза будет менее амбициозным.
Для начала, немного цифр:
- К примеру, мир будет иметь размеры 32х32 зоны (это не много, и в перспективе он будет еще расширяться). Получаем 32 * 32 = 1024 зоны;
- Каждая зона, в среднем будет иметь 4 локации, получаем: 1024 * 4 = 4096 локаций;
- Не все локации будут уникальные, частично они будут повторяться, с разными уровнями и разной сложности, пусть в среднем одна локация повторяется 5 раз, получаем: 4096 / 5 = 819 уникальных локаций;
- В среднем, каждая локация будет иметь 15 различных эпизодов, получаем: 819 * 15 = 12 285 эпизодов.
Только вдумайтесь в эти цифры: 819 уникальных локаций – каждую из которых надо придумать, осмыслить, написать концепцию данной локации, какое-то сюжетное обоснование (откуда/как появилась).
Нужно будет придумать 12 285 различных эпизодов, пусть не все они будут уникальны – эпизоды битв с монстрами будут везде одни и те же. Но все равно их очень и очень много, создание одних лишь текстовых описаний займет очень и очень много времени.
Забегая вперед – сделав несколько локаций, дав их немного пощупать руками и опубликовав историю мира и сюжет, мы предложим всем желающим самим придумать локацию и её эпизоды. Так сказать будем подключать общественное творчество :)
Так вот, программа минимум на момент ОБТ будет следующий – создать все необходимые локации лишь в текстовом варианте, и только потом, постепенно добавлять иллюстрации.
Уже в процессе жизни проекта локации будут проходить четыре стадии завершенности:
- Локация текстовым описанием + все эпизоды также только текстом;
- Локация с одной нарисованной картинкой на все эпизоды данной локации;
- Каждый эпизод локации имеет свою нарисованную картинку;
- Локация выполненная в 3D и каждый эпизод локации имеет несколько видов – в различных ракурсах и вариациях.
При этом такой вариант вижу самым практичным – вначале делаем локацию в текстовом варианте, даем игрокам её пройти, «пофармить», собираем отзывы, пожелания – корректируем локацию (или просто выкидываем если локация оказалась скучной и унылой), и только если все хорошо – подключается художник и создает визуальную картинку.
Немного о бюджете на графику
Стоп, стоп, ты только что говорил, что игра будет текстовой, о каком бюджете на графику идет речь?
Да, как это ни странно, даже при «текстовом» формате локаций, остается еще много других элементов, которые требуют отрисовки (цены приблизительные):
- Базовые аватары: 12 штук * 2 пола * 6 рас = 144 штук * 400р. = 57 600р.
- Образы персонажей: 2 пола * 6 рас = 12 штук * ~3000р. = 36 000р.
- Образы NPC: 10 штук * 4000р. = 40 000р.
- Образы монстров и боссов: 30 штук (для беты) * 3000р. = 90 000р.
- Карта: 10 000р.
- Иконки (предметы, способности, расы, классы и т.д.) = ~50 000р.
- Интерфейс: 40 000р.
- Стартовый город и его локации: 30 000р.
Итого: 353 600р.
Как вы видите, сумма, даже без отрисовки зон, локаций и эпизодов локаций получается не маленькая. А если к этому прибавить:
- Простой, монохромный рисунок всех зон: 1024 штук * 1000р. = 1 024 000р.
- Простой, монохромный рисунок на каждую локацию: 819 штук * 1000р. = 819 000р.
Итого: 2 196 600р. Ценник резко вырастает :)
Конечно, в первой бете будет все очень ограниченно – 8-10 зон и 20-30 локаций. По этому сделать по одному изображению на каждую зону и локацию будет не так дорого.
Ну что ж, теперь, надеюсь, обезопасил себя и вас от завышенных ожиданий, и вообще ожиданий чего-то визульно-классного, визуально-эффектного. Этого не будет, так как глубоко убежден, что интерес MMORPG не в графике.
Открытый мир, свободное PvP, борьба за территории, за власть, политика и интриги – вот, что делает этот жанр действительно интересным, и то, чего в сегодняшних MMORPG крайне не хватает.
В следующей части расскажу, а если повезет, то и покажу боевую систему.
Часть 10: Два года разработки – первая демо-версия
Неужели этот день настал – день, когда могу не только рассказывать о разработке, но и предложить всем желающим самим опробовать часть геймплея.
Сразу надо сделать примечание – то, что вы увидите – это не демо всего проекта, а лишь небольшой его части: одна локация + боевка
Чтобы понимать, насколько это мало по сравнению со всем проектом просто покажу рисунком:
И еще – баланс никакой. И в целом, ошибок, которые ускользнули от моего внимания, думаю много. Я бы даже сказал это не демо, а пре-пре-пре альфа-демо-версия локации.
Ну-с, после небольшого, но важного вступления, собственно ссылка на демо:
На ближайшую доработку
Теперь о функционале, который запланирован, но еще не реализован (зеленым отмечено то, что уже добавлено на текущий момент):
Локации
- Возможность указания, что такой-то эпизод (например, боя с боссом) может встречаться только один раз за всю локацию;
- Механика спутников;
- Эпизод со случайным путником – можно будет взять его в спутники на одну локацию, и пока он живой – игрок будет получать половину лута;
- Класс гномов. Его классовое заклинание завязано на призыв спутников - соответственно пока эта механика не реализована, класс недоступен;
- Эпизод с бандитами – их отличие между обычными монстрами в том, что от них можно откупиться. А также, если персонаж противоположного пола бандиту, и у него высокая харизма – бандит передумает нападать;
- Механика лута и его «взятия»;
- Множество других небольших улучшений и доработок.
Боевка
- Механика эффектов – всякие там оглушения, отравления, бафы, дебафы и прочее – все, что может длиться в течении нескольких раундов боя;
- Добавление навыков. Их нельзя добавить, пока не сделана механика эффектов;
- Добавление специальных эффектов у оружия;
- Добавление новых анимаций;
- Множество других небольших улучшений и доработок.
Прочее
- Аватары классов и монстров временные (взяты на просторах Интернета), позже будут заменены на собственные.
Это, а также исправление найденных ошибок и багов займет несколько ближайших месяцев. Плюс, параллельно с добавлением функционала напишу несколько новых частей дневников посвященных бою, оружию и доспехам – чтобы была понята идея самой боевой системы.
После этого, начнется новый, большой эпизод в разработке – полноценная разработка на фреймворке (текущая демо-версия сделана без фреймворка, по этому с технической точки зрения там все примитивно), с проработкой всех параметров персонажа. А их там 250+
И уже после этого – создание такой же демо-версии как и сейчас, но где будет прокачка, инвентарь, предметы, лут, энергия и прочее. Собственно то, что останется лишь расширять (новые зоны, новые локации), углублять (пассивные навыки, крафт, торговля, и т.д.) и доводить до релизного вида.
Ничего по срокам говорить не буду – ну его нафиг :)
Самое главное, и приятное, что с этого дня, любые добавления механик смогу сразу заливать на существующую демку, и вы их сможете сразу опробовать.
И да, разумеется, периодически будут проводиться обнуления всех персонажей и статистики.
Итоги второго года по финансам
В итогах первого года рассказывал о финансовой стороне разработки – сколько и на что потрачено.
Пришло время подвести итоги второго года разработки:
Ассеты графики:
- Beautify
- RPG Cursor Pack
- Park Photo Scanned Assets
- The Big Castle Kit
- Temple of Ancient India
- Royal Heroes Pack
- Stronghold Village
- Forbidden Dungeons
- Demoness / Succubus
- RPG Fantasy (Pack)
- Stone Fountain
- Dungeon Trap - Spear Ejector
- Dungeon Trap - Saw Blade Slit
- PBR Statues Pack
- Dungeon statues and pillars
- Wild Life - Spider
- Army of Skeletons
- Medieval Environment Pack
- Demon Mace - Weapon
- Vampire Girl
- 4 Medieval Chests
- PBR Graveyard and Nature Set 2.0
- Rome: Fantasy Pack I
- Nature Pack
- Old Media
На все – 49 500р.
2D графика на заказ:
- 3 «пробных» рисунка человека-женщины разным художникам: 34 000р.
- Рисунок человека-мужчины, эльфа-мужчины, эльфа-женщины, орка-мужчины: 32 500р.
Итого: 66 500р.
Тексты:
Новых текстов от FaceR'а было мало, по этому 5600р.
По железу:
- Видеокарта (для работы в Unity) ASUS GeForce GTX 1060 6GB: 27 500р.
- Второй компьютер для web-разработки на Ubuntu: 35 000р.
Итого: 62 500р.
Кто-то может сказать, что это «лишние расходы», что можно в Unity и на слабой видеокарте делать большие локации с насыщенной графикой, с FPS 3-5. И что можно веб-разработкой заниматься и на винде – оно конечно можно, только не особо приятно. В разработке и так возникает много сложностей, и так много поводов опустить руки, а когда еще и в техническом плане постоянные проблемы (например, при работе на винде, у меня в Git появляются ошибки, которых я на Linux вообще никогда не видел) – то это лишь добавит повода опустить руки.
Конечно, забить на начатое это не в моем духе, но категорически не согласен с тем, что расходы на «фундамент» (а компы – это именно фундамент разработки) – это лишние расходы.
Итого все вместе: 184 100р.
Суммарно за первый и второй год разработки: 38 000 + 184 100 = 222 100р.
Еще раз напомню, что эту сумму ни в коем случае нельзя считать полным бюджетом на разработку, так как самые главные расходы – 2 года Full-Stack Web-программиста (пусть и в свободное от основной работы время - где-то четверть ставки), т.е. мое потраченное время – остается за кадром.
А на самом деле, человека, который бы как и я, занимался не только веб-разработкой, но еще и в Unity локации собирал, еще и тексты писал, и над сценарием думал, и еще менеджером проекта и геймдизайнером был бы по совместительству – такого на рынке в принципе не найти.
О чем скажет эта сумма (через n-количество лет, когда проект будет закончен) – так это о том, что если вы собрались делать браузерную MMORPG, с аналогичным уровнем графики, и где вы 95% работы будете делать сами – вот столько денег нужно будет готовить на оставшиеся 5%. Чтобы не было иллюзий :)
Вообще о финансовой стороне проекта, и своих мыслях об этом (ну и о донате конечно) много что хочется сказать, какую-нибудь часть дневников посвящу именно этому.
А на этом, сегодняшняя часть дневников разработки заканчивается. Еще о многом хочется и нужно написать, но это – в будущем.
Буду стараться делать новые выпуски чаще, но в меньшем объеме.
Часть 17: Потрогать текущие наработки
Мужской и женский образы расы орков. Посмотреть полноразменые рисунки можно в группе вконтакте
Еще пару багов, еще пару правок верстки, еще доработки по функционалу, и по новой… Кажется, это не закончится никогда.
По этому, я тут подумал-подумал, и решил забить разбавить ваши ожидания выложить текущие, очень
сырые наработки, которые можно потрогать своими руками, и посмотреть прогресс.
Напомню, что план стоит в создании второй демо-версии, которая состоит из:
- Функционала сайта: посты, комментарии, чат, и т.д.
- Функционала игры: локации и боевки
То, что я публикую сейчас это примерно ~90% от первой части. Или ~45% от всей второй демо-версии.
Попробовать:
Что доделываю прямо сейчас информацию по классам. Еще не всем классам придумал их боевые способности, плюс нужно немного подправить характеристики, плюс дополнить описание там у некоторых классов есть уникальные особенности (например алхимик имеет бонус к количеству маны, но штраф к регенерации маны), которые сейчас не отображаются, и может показаться, что классы отличаются только стартовыми характеристиками и боевыми способностями.
Помимо этого там еще несколько крупных и пару сотен небольших правок и доработок.
P.S.
Обратите внимание, что первая и вторая демо-версии будут находиться на разных доменах, соответственно, даже после выхода второй демки желающие смогут посмотреть первую, и сравнить прогресс.
P.P.S.
Фоновые изображения в инвентаре у гномов, ангелов и демонов сильно затемнены они еще не готовы, и пока отображаются темным силуэтом.
Часть 18: Пять лет разработки
Ну что, не ждали новой части дневников по разработке Dusk World? Думали, забил Diablo на свою игру? Нет, ни разу не забил, хотя жизнь в последние годы и добавила геморроя.
Но давайте обо всем по порядку. Восстановим хронологию событий с момента последнего дня разработки — августа 2019 года.
12 августа 2019 — Выпуск предыдущего дня дневников, в котором объявляю о предварительном релизе второй демо-версии. Это не полноценный релиз демо-версии, а просто публикация текущих наработок, которые любой желающий может потрогать своими руками. И обо всех обновлениях писал там же.
5 октября 2019 — В демо-версию добавлена прокачка боевых способностей и PvP
6 ноября 2019 — Добавлен личный сундук и бонусы от полных наборов определенного типа брони
11 мая 2020 — Добавлена механика локаций (модуль локаций переписан полностью с нуля, на что ушло 5 месяцев) — визуально это та же одна локация, что и в первой демо-версии, но под капотом все совершенно по другому — качественней и лучше.
31 мая 2020 — Добавлены уведомления и статусы постов
Июнь 2020 — К болям в пояснице, которые меня беспокоят с 2014 года, добавляются боли в шее. И надо отметить, проблем они доставляют намного больше, чем боли в пояснице, с которыми, в той или иной степени, сталкиваются многие.
14 июня 2020 — Добавлена механика дропа и два новых типа эпизодов: Алхимическая лаборатория, где можно найти несколько зелий, и Магическая комната, где можно найти несколько книг заклинаний.
Июль 2020 — Боли в шее не проходят уже месяц, и начинаю ходить по врачам. Т.е. вместо того, чтобы после работы сесть за разработку Dusk World, приходится идти к врачу, и так по несколько раз в неделю. Разумеется, все это тормозит разработку.
6 июля 2020 — Добавлена механика отключения возможности написания постов при низкой карме . Проект делаю таким, чтобы он был минимально завязан на ручное модерирование (хотя и оно будет).
13 июля 2020 — На двенадцатилетие сайта делаю полноценный релиз второй демо версии. Для тех, кто следил за всеми изменениями, ничего особо нового не было, только удаление всех старых персонажей и возможность еще раз побороться за первые места в рейтингах.
14 июля 2020 — Из забавного: первый пользовательский гайд о том, как положить в сундук предметов больше допустимого
29 июля 2020 — Добавлены турниры; пока игроков немного — лишь самые маленькие на 8 участников. В будущем будут турниры на 16/32/64 участника с более ценными призами.
2 сентября 2020 — Добавлена механика торговцев и первый NPC-алхимик. Это последнее значительное обновление демо-версии. Боли в шее так и не проходят и начинают отравлять жизнь все больше.
17 ноября 2020 — Пишу пост дела житейские в которых рассказываю, что из-за проблем со здоровьем возможности заниматься Dusk World уменьшились.
Декабрь 2020 — Черный месяц, когда я пошел в очередную клинику, занимающуюся исключительно проблемами с позвоночником (кажется, что все подобные клиники — исключительный лохотрон и развод на деньги), где я плачу 80 тысяч, хожу в течении 4 недель на процедуры, т.е. каждый будний день в 8:00 выехал на работу, а домой вернулся в 23:00, т.е. свободного времени в принципе 0, и по итогу всего этого мне стало только значительно хуже — и боли стали острее, и грыжа в шее стала больше.
В этот момент меня окончательно выбивает из процесса разработки Dusk World, и сил хватает только на работу, хождение по врачам и сон.
2 января 2021 — Обновлена генерация монстров. В текущей одной локации ничего принципиально не изменилось, это изменение на будущее — когда понадобится заполнять монстрами другие локации, и когда один и тот же монстр может быть разного уровня, соответственно, нужно, чтобы характеристики прогрессировали с ростом уровня.
20 февраля 2021 — Blizzard анонсируют Diablo 2 Resurrected, и становится понятно, что надо будет обновить раздел Diablo 2 на сайте. Учитывая, что релиз анонсировали на сентябрь этого же года — заниматься обновлением надо прямо сейчас, за что и берусь. К счастью, с обновлением помогают JustNeedCoffee и Gattling.
8 марта 2021 — Параллельно с обновлением раздела Diablo 2 начинаю активно писать новый модуль боевки. Старая боевка писалась еще в 2017 году, на костылях, и добавлять в неё новые механики стало очень сложно. Плюс в ней есть плавающие хитрые баги, которые сложно отловить: например, ситуации, когда урон от атаки не наносится в принципе. Случается такой баг раз в месяц, и сколько не пробовал — даже воспроизвести его не удавалось, не говоря уже о том, чтобы исправить.
В таких ситуациях проще написать с нуля, с хорошим ООП, с юнит-тестами, чем мучить дохлую старую лошадь.
Новую боевку пишу сразу на github, чтобы убивать сразу двух зайцев — и делать свою игру, и прокачивать профиль на github, который в теории должен помочь находить новые, более оплачиваемые, работы.
27 мая 2021 — Второй пост дела житейские, в котором пишу, что наконец-то нашел врача, который помог найти причину болей, и что процесс выздоровления наконец-то пошел. За год хождения по врачам было потрачено 650 тысяч, и если бы не врачи — уже на тот момент можно было увольняться, и 8-10 месяцев спокойно сидеть и целыми днями заниматься игрой.
28 октября 2021 — Третий пост дела житейские, в котором рассказываю о том, что, несмотря на улучшившееся здоровье, время уходит на обновление раздела Diablo 2, написание новой боевки, и на подготовку к будущим собеседованиям. А на развитие демо-версии Dusk World времени не остается.
14 января 2022 — Глобальное обновление раздела Diablo 2 на сайте. По сути весь 21 год ушел именно на это.
«Спецоперация» и умерший рынок труда
Казалось бы, худшее позади, «но расслабляться погоди, ведь много ждет нас впереди» (c)
Вся разработка Dusk World шла в свободное от работы время — после работы, на выходных, на праздниках, в отпусках. Получается этакая жизнь 24/7 за компьютером и кодом. Во-первых, это изматывает, во-вторых, даже в таком режиме игра разрабатывается медленно. Решение, которое напрашивалось — это поиск новой работы с большей зарплатой и откладывание 50% зарплаты в заначку, а потом, после года такого накопления — можно будет уволиться и год жить на накопленные деньги. И именно такие планы у меня были на весну 22 года — пойти по собеседованиям и найти работу получше. Тем более, что весь 21 год из каждого утюга рассказывали, какая острая нехватка программистов на рынке труда, и как у них необоснованно растут зарплаты (и то, и другое – полная чушь, не ведитесь и не несите свои деньги в айти-курсы).
И вот в феврале 22 года все надежды на поиск лучшей работы накрылись. Вакансий стало значительно меньше, а кандидатов, наоборот, больше, т.к. многие западные компании закрывали свои филиалы в России. Стало понятно, что разработкой придется заниматься так же, как и раньше — по вечерам, на выходных.
Все это, вкупе с проблемами со здоровьем, которые пришлось пережить, демотивировало вообще чем-либо заниматься, и захотелось пожить как обычный человек, когда ты только работаешь, а в свое свободное от работы время отдыхаешь.
Вспомнил про игры. Побегал по просторам старинного Morrowind (давно строю планы сделать о нем раздел на сайте), божественного Скайрима (тешу планы как-нибудь перезапустить хроники по скайриму), вспомнил старушку Lineage 2, которая, как оказалась, несмотря на свой почти 20-летний возраст, собирает онлайн на фришках больше, чем было в нулевые годы на официальных серверах.
Более того, если раньше фри-сервера предлагали ту же игру, что и на официальных серверах, только бесплатно и худшего качества, то теперь они вносят свои изменения и улучшения в игру, которые воспринимаются намного лучше, чем то, что делают родные корейские разработчики.
Lineage 2 — это какой-то феномен игровой индустрии, столько лет прошло, а так и не встретил никакой другой MMORPG, которая бы настолько затягивала, и где можно было бы увидеть настолько массовые сражения — замес 300 на 300 это абсолютно рядовая ситуация.
В общем, в 22 году, пока в России царили хаос и паника, я, наоборот, хорошо отдохнул и отвлекся от жизненных проблем.
Конечно, продолжал постепенно пилить новый модуль боевки, постепенно заниматься самой демо-версией, но не в таком активном темпе, как это было в период 2016-2020 годов.
Изменения в новой боевой системе
Я уже несколько раз упоминал о новой боевой системе. Пора рассказать о ней подробней. Визуально и концептуально она полностью как старая, и на первый взгляд может показаться, что изменений нет никаких. Но «под капотом» разница огромная, как между трактором и ламборджини.
Работа способностей полностью переделана
Если раньше были 3 способности, жестко завязанные на три характеристики: концентрацию, хитрость и ярость, то теперь способности могут активироваться при любых параметрах.
Например, если раньше пассивная способность людей «воля к победе» работала как «костыль», и просто с 20% шансом при смерти восстанавливала 50% здоровья (что визуально могло сбить нового игрока), то теперь это именно способность, и визуально персонаж вначале умирает, потом активируется способность и применяется – происходит анимация воскрешения. То же самое и с расовой способностью орков, увеличивающей урон в 2 раза при здоровье меньше 30%
Пока есть только 2 способности, завязанные не на концентрацию, хитрость и ярость, но уже нет никаких проблем добавлять новые, с самыми причудливыми условиями, вроде «здоровье меньше 50%, мана больше 50%, концентрация и ярость 100%»
Также способности применяются с умом – больше не будет ситуаций, когда персонаж накладывает на себя эффект до того, как закончился аналогичный старый.
И есть еще глобальное изменение по способностям, которое в процессе реализации – это отвязка от жесткой привязки на 3 способности завязанных на класс персонажа.
Персонаж будет просто иметь какой-то набор способностей, которые добавляются от:
- расы
- класса
- предметов (да, будет механика, когда какие-то уникальные предметы будут добавлять боевые способности)
При этом способностей от класса может быть больше, чем 3, и будет возможность включать/отключать способности.
Добавлена статистика по бою
Она будет особенно интересна в боях «группа на группу» – можно будет посмотреть, кто больше урона нанес, кто больше урона принял, кто на сколько вылечил союзников и т.д.
Добавлена механика призыва новых существ на поле боя
Один класс (пока размышляю, какой) будет иметь уникальную способность призыва существ на поле боя, а также будут боссы, которые будут призывать себе слуг.
Плюс вместе с механикой активацией способности при смерти можно будет добавить такого уникального босса, который при смерти делится на 2 более мелкие части, каждая из которых при смерти также делится на 2 части.
Добавлена механика воскрешения юнитов
Эту способность получат некоторые классы поддержки. Плюс аналогичную способность можно будет получить с редкого уникального посоха – чтобы классы, ориентированные на поддержку, но не имеющие воскрешения от класса смогли добавить себе такую способность.
Улучшена механика эффектов
Не буду расписывать технические особенности, просто скажу, что теперь можно создавать какие угодно эффекты (как ранее была расширена система эффектов от заклинаний в локациях). Хоть эффекты, которые на каждом ходу будут добавлять другие эффекты, хоть призывать каждый ход юнита – что угодно. Это не значит, что в новой боевке появится куча новых интересных эффектов, это значит, что заложен фундамент, чтобы такие способности появлялись.
Например, размышляю над новой способностью для класса берсерк:
- Способность активируется при здоровье > 70% (т.е. активируется со старта боя)
- Каждый ход юнит теряет здоровье
- Каждый ход увеличивается урон и скорость атаки
Получается этакий берсерк (кэп), который сам себе наносит повреждения, но с каждым ходом становится все более опасным.
И можно будет добавить босса с аналогичной способностью, которого важно будет убить быстро, пока он не разогнался.
И таких интересных механик можно будет придумать и добавить массу.
Ну и, конечно же, классов у рас будет больше, чем сейчас по 5 штук на расу.
Добавлены особые эффекты от критических ударов с оружия
Как вы помните, каждый тип оружия имеет свои особенности. При этом у некоторых типов эта особенность проявляется при критическом ударе:
- дробящее оружие может оглушить (одноручное – на 1 ход, двуручное – на 2 хода, тяжелое двуручное – на 3 хода)
- кинжалы накладывают кровотечение на 3 хода
- жезлы снимают один положительный эффект с цели (в отличие от двух предыдущих – эта механика еще в разработке)
Добавлена механика удара сразу по всем вражеским юнитам
Звучит просто, но на деле добавление такой механики заставило изрядно потрудиться. В старой боевке, написанной на костылях без юнит-тестов, её было бы практически невозможно добавить.
Что это дает на практике – возможность создавать боссов, которые будут атаковать всю группу игроков, возможность добавлять способности, которые лечат/бафают/дебафают сразу всю группу.
В будущем планирую добавить способности, которые будут применяться по всему ближнему или дальнему ряду.
Добавлена мультиязычность
Изменение на долгую перспективу, чтобы, когда проект будет запускаться на зарубежные аудитории, добавление нового языка делалось просто добавлением одного файла.
Что еще в процессе разработки:
- Механика клонирования себя с % от исходных характеристик. Можно будет добавить уникальный класс «Иллюзионист», ультимативная способность которого будет создавать иллюзии, имеющие 15-25% характеристики хозяина. И уникального босса с аналогичной способностью.
- Механика рефлекта урона
- Механика снятия положительных/отрицательных эффектов
- Есть еще идея интересной механики, когда класс суккуб сможет переманивать в свою команду вражеского юнита и заставлять несколько ходов воевать на своей стороне. Но это уже изыски, посмотрим, на сколько будет время
- Также есть еще интересная (но сложная) механика: расширить количество сражающихся команд с 2 до любого количества. Это позволит устраивать, например, групповые бои в формате «каждый сам за себя».
Также есть вещи, которые существуют в старой боевой системе, но пока не реализованы в новой:
- Все 150 способностей классов
- Расовая способность эльфов уклонения от любой атаки/заклинания с шансом 20% (никак не зависящая от меткости атакующего)
- Добавление способностям требование по типу оружия
- Рандомизатор урона
- Увеличение урона в долгих боях
- Механика активации способностей через хитрость
Планы на будущее
Разработка идет уже 6 год, а конца-края не видно. Очевидно, что-то с этим надо делать, и очевидно, что – убирать часть запланированного функционала, оставляя его на обновление уже после релиза.
Еще мотивирует к скорейшему релизу то, что даже в текущий супер-урезанный функционал демо-версии несколько человек задротили месяцами. Tieru так и вовсе сделал что-то невозможное и взял максимально возможный уровень. Напрашивается вывод – просто улучши то, что уже есть, просто добавь локаций, просто добавь игроков (для этого даже в рекламу вкладываться не нужно – просто перенести функционал на diablo1.ru) – и будет уже сильно веселее.
К тому же я сам давно уже хочу публиковать новости через простой редактор на сайте, без необходимости делать физические странички с html-разметкой и загружать их на сервер – и геморройно, и долго, и подход такой устарел больше, чем говно мамонтов.
И все, кто помогает с наполнением контента, также просят добавить уже какой-то редактор на сайт.
В общем, надо безжалостно резать запланированный функционал и запускать то, что есть, но с доработками.
Итак, от чего принято решение отказаться:
От открытого мира
C массой разнообразных зон и локаций, которые, мало того, запланированы в различных климатических зонах – леса, степи, пустыни, тундры, тропики, скалы и т.д.
Что будет – один город и цепочка подземелий под ним. Почти как в первой Diablo, но это исключительно совпадение – мир, в который попадает игрок, находится на краю уничтожения, оставшиеся в живых укрылись в главном торговом городе за магическим барьером, который не дает особо крупным тварям подобраться к городу.
По изначальному плану игрок довольно быстро начинал выходить в открытый мир, за границы магического барьера, разбираться, что происходит, а заодно крошить толпы нежити, демонов и других монстров.
Но была запланирована еще одна небольшая сюжетная линия, в которой игрок выяснял, как же так произошло, что в целом процветающий мир оказался на грани уничтожения.
И именно эта небольшая сюжетная линия станет основным сюжетом в первой релизной версии. Потом можно будет добавлять локации открытого мира, со своими сюжетными линиями, и это будет органично сочетаться с существующим большим подземельем.
От замков, осад, контроля над территорией и королей рас
Если отказаться от открытого большого мира на старте, то автоматически нужно убрать замки, их осады, механика контроля над территорией и механика выбора королей рас, которые могут управлять осадами и замками.
Это интересный хай-лвл контент, которым игроки смогут заниматься бесконечно, но придется отложить его реализацию до лучших времен.
От механик темного и светлого эфира
Одна из ключевых и уникальных механик проекта, которая позволяет конвертировать карму от постов и комментариев в полезные игровые предметы, также будет отложена на будущее, чтобы не тормозить релиз.
Но будет максимально быстро добавлена после, т.к. это все же интересная и ключевая механика.
От турниров
Да, казалось бы, уже работающие турниры тоже нужно будет отложить, потому что сбалансированное пвп также требует доработок.
От крафта предметов и добычи ресурсов
Аналогично – интересная механика, но требует значительного времени даже не на реализацию, а на продумывание и балансировку.
Может быть, дроп ресурсов добавлю, чтобы можно было заранее начинать их копить на будущий крафт.
От более сложных версий подземелий
Так как их тоже нужно балансировать, и самые сложные из них возможно будет пройти, только усилив экипировку кристаллами светлого эфира, а этой механики на релизе не будет.
От навороченной системы спутников
Изначально планировалась очень навороченная система NPC и спутников, когда, например, вы можете помогать и улучшать отношения с обычным торговцем в городе, потом, при определенном уровне прокачанности отношений он становится вам доступен как спутник (на ограниченное количество локаций, потом ему нужно будет «отдохнуть»), и потом его еще можно прокачивать – усиливать его характеристики.
Все это пока откладывается. Останутся только случайные спутники, которые могут присоединиться в локации.
Что же будет? Кажется, что удаляется просто все
В том-то и дело, что даже то, что есть сейчас в демо-версии требует значительных доработок. И разрываться на добавление новых механик и доработку старых можно бесконечно.
Пройдемся также по пунктам:
Регистрация
Казалось бы, ну просто регистрация, уже же сделана и работает. Но это только на первый взгляд. Нужно дорабатывать:
- Капчу, чтобы ограничить регистрацию новых пользователей простым скриптом
- Подтверждение регистрации через email. Самая простая и элементарная защита от регистрации твинков
- Защита аккаунтов от перебора паролей
- Восстановление пароля
- Система для выявления твинков и борьбы с ними
Как видите – даже элементарный и уже работающий функционал требует доработок. Идем дальше.
Посты и комментарии
Их также необходимо доработать:
- Редактирование постов
- Редактирование комментариев
- Возможность добавления картинок в комментариях
- Возможность анонимных комментариев (все текущие комментарии на сайте будут перенесены на новый движок как анонимные)
- Систему тегов: возможность добавление постам тегов, поиск постов по тегам
- (может быть) Черновик – когда можно написать пост, сохранить его как черновик и позже вернуться к дописыванию. Если не на релизе, то потом так и так нужно будет делать такую механику
Прочий «сайтовый» функционал
Еще есть то, чего в демо-версии нет вообще, но нужно будет сделать уже в релизной части:
- Сообщества
- Базу по играм (которая будет завязана на механику сообществ)
Игровая часть
Здесь еще куча работы:
- Механика диалогов с NPC
- Механика заданий
- Локация города, его торговцы и сюжетные NPC
- Одно глубокое подземелье будет состоять из 3-4 визуально разных подземелий и суммарно состоять из 8-10 локаций. Сделать такое количество подземелий в сотню раз проще, чем сделать целый открытый мир, но все равно это немалый объем работы
- Доработать механику генерации предметов
- Добавить больше различных заклинаний
- Добавить больше монстров и боссов
- Добавить несколько заданий – одно основное и несколько побочных
- Доделать и интегрировать новую боевую систему
Как видно, необходимого функционала даже для очень сильно урезанной версии проекта нужно будет сделать немало.
Но и это не все (вы еще не устали читать, да?)
После релиза будет большой объем работы, который никак не связан ни с добавлением нового функционала, ни с доработкой старого, а будет связан с необходимостью переносить старые страницы на «новый движок», т.е. в страницы, которые можно будет лайкать, нормально комментировать, которые смогут отображаться в сообществах. А на старых статичных страницах добавлять редиректы на новые страницы.
А так как старых страниц тысячи – это очень немаленький объем работы.
При этом можно было бы заморочиться и написать сложный парсер, который все старые страницы разом переделает в новые, но все такие глобальные переделки сайтов чреваты тем, что поисковые системы могут «глюкнуть» и подумать, что по старому домену теперь расположен новый сайт (пусть и с похожим содержимым), и, соответственно, все его позиции в запросах нужно рассчитать по-новой. А «по-новой» – это значит, что текущие позиции в топе по запросам просто исчезнут.
В общем, чтобы посещаемость с поисковых систем внезапно не исчезла – нужно делать это постепенно, в полуручном режиме.
Но…
Реалистичные планы на перспективу построены, мотивации делать (доделать) Dusk World вагон, но вы же не думали, что не будет никакого подвоха?
Не бывает так, чтобы без подвоха...
А подвох заключается в том, что через 3 месяца релиз Diablo 4, и в первую очередь мне нужно сделать раздел по этой игре на сайте. И все ближайшие 3 месяца уйдут на это. И в начале лета, если все сложится, смогу активно вернуться к разработке Dusk World.
Разбавим скепсис
- Ну вот опять! Еще десять лет ждать будем! А потом и вовсе забьет! (кто-то из читателей)
В заключение давайте разбавлю скепсис, что разработка может затянуться еще очень надолго или вообще быть заброшена.
И дело здесь даже не в какой-то суперидейности или супермотивации (хотя и это тоже есть) и даже не в том, что мне проект по-прежнему нравится, и нравится им заниматься.
А в том, что просто нет другого варианта:
Например, я хочу получать больше денег. Банальное такое желание. Но на хорошие и оплачиваемые позиции большая конкуренция. Чтобы выделиться среди кандидатов, хочу сделать свой блог о программировании. И изучая что-то новое из программирования, не просто запоминать это в голове, а сразу оформлять в виде новых статей в этом блоге. А что нужно для создания блога? Регистрация, посты, комментарии – в общем, базовый функционал. Т.е. мне так и так нужен проект, который я смогу использовать как фундамент для создания любых других сайтов.
К тому же, что diablo1.ru, что Dusk World, что блог о программировании – это не единственные сайты, которыми хочется заниматься. Есть идеи и других проектов, и везде мне понадобится базовый функционал.
Поэтому, как ни крути, даже если я вдруг (вдруг!) потеряю интерес к Dusk World – мне так и так нужно будет доделывать эту регистрацию, посты, комментарии, теги, сообщества.
А сделав это, останется доделать еще немного (немного здесь должно быть в жирных кавычках) – и вот уже урезанная, но релизная версия Dusk World.
Так что все будет.
Часть 1: От мечтаний к воплощению
Изначально планировал начать дневники разработки когда к проекту подключится дизайнер – все ведь любят картинки, а появиться они могут только из под руки дизайнера, но… близится день рожденье сайта – 9 лет, и по традиции, ко дню рождения сайта надо показать что-нибудь этакое. А так как последние 8 месяцев, свободное от работы время посвящаю только разработке нового движка/игры, то и показывать, разумеется, можно только что-то из текущих разработок.
И, в общем-то, показать есть что, но тут есть один нюанс – про разрабатываемый проект практически ничего не писал, ну, сказал, что будет гибрид сайта и браузерной MMORPG и все. Некоторая часть посетителей, которая записалась в «ждуны» уже возможно фантазирует на тему «Аналог вова в браузере, с какими-то еще плюшками», или там «Drakensang Online, только лучше».
И может так получиться, что когда покажу некоторую реализованную, интересную, часть проекта, вместо «ух ты как круто» реакция будет совершенно противоположной:
Почему? Потому что чем выше ожидания, тем критически оценивается результат.
А чтобы этого не произошло, чтобы все понимали, что примерно стоит ожидать, надо уже сейчас начинать рассказывать, что же разрабатывается и планируется.
Так что приступим.
От мечтаний к воплощению
Желание создать свою игру было еще в школе – имел несколько тетрадок, полностью исписанных механикой, описанием персонажей, монстров, предметов и прочими зарисовками.
Недавно, разбирая хлам в квартире, нашел эти тетрадки, пролистал… эх, пустил скупую слезу ностальгии:
Это был конец 90-х. Потом у меня появился компьютер, и игры поглотили все свободное время. Хотя, справедливости ради стоит сказать, что пытался что-то написать на бейсике (обычном, не Visual Basic), но ничего толкового не получалось.
Вновь к идее сделать свою игру вернулся в 2004 году, делая наброски и записывая механику уже на компьютере. До сих пор сохранилась эта папка:
Но, в очередной раз дальше зарисовок и черновиков никуда не дошло.
Еще один безрезультатный заход на создание своей игры был в 2008-2009 году. Оценивая весь предыдущий опыт черновых набросков понял, что нужно одно место, где систематизировано будет описываться вся игра (на тот момент точно знал, что хочу делать MMORPG), и так как в те годы уже работал с сайтами – сделал сайт, где достаточно систематизировано писал всю информацию. Но, идея потом, в очередной раз, заглохла, про сайт забыл, и из-за неоплаты хостинга он, и вся информация на сайте бесследно исчезла.
По учебе и работе занесло не туда
Сразу оговорюсь: с точки зрения создания игры. С точки зрения всего остального – полностью рад, что прошел именно тот жизненный путь, что прошел. Тем более, если бы не создал сайт Diablo1.ru,то и не познакомился бы со своей женой :)
Отмотаем немного назад, на окончание школы. Я точно знал, что хочу работать с компьютерами, в том числе и программировать. Но, из-за подросткового взгляда на всю эту область считал, что главное пойти на «компьютерщика» и там меня всему, что связано с компьютером и программированием научат.
И… поступил на специальность техника. Да, по компьютерам (и компьютерным сетям), но с уклоном в железо, а не ПО.
В итоге, имея хорошие способности по математике – единственному предмету в школе, которым практически не занимался, и сдал экзамен на 5 в формате «а что там? что-то непонятно что ли?», девятый класс оказался последним годом, когда занимался математикой – на всех 4 курсах техникума такого предмета, как математика не было в принципе.
Программирование было, но, очень поверхностное, для галочки: Basic (простой), ассемблер, и Pascal.
Закончил учебу – пора работать. Наиболее близкая работа к моей учебной специальности – сисадмин. Разумеется, никакого программирования там нет. Поработал – понял, что не мое. Болтался то там, то сям, по разным работам, в итоге начал работать с сайтами. Эта сфера понравилась, но она имеет много направлений, в том числе и по программированию. Но меня занесло… как обычно не туда: SEO, наполнение, верстка, немного дизайна.
И все же игре быть
Казалось бы – столько лет прошло (среднестатистически – пол жизни), и все мимо геймдева. Но, кривая жизненная дорога все же привела к началу разработки игрового проекта.
Что этому поспособствовало?
1. Само желание сделать свою игру, которое, несмотря на прошедшие годы, так и не исчезло.
2. Желание обновить функционал сайта. Если бы был плохо знаком с веб-разработкой, перенес сайт на какую-нибудь из существующих CMS и не парился. Но, опыт говорит, что все они со своими недостатками, и местами очень сильными. По этому если и делать что-то хорошо – то делать самому.
3. Главный пункт, который «созревал» в последние годы, и оформился около года назад – это осознание того, что ценность маркетологов (SEO-оптимизация, которой занимаюсь – это сфера маркетинга) значительно ниже ценности программистов: ниже зарплаты, сложнее найти хорошую работу.
И если ценность программиста в его знаниях и проектах, которые он реализовал, то ценность маркетолога… в умении красиво и качественно вешать лапшу клиентам (и начальству). А вешать лапшу на уши – это не то, чем мне хотелось бы заниматься.
По этому принял решение осваивать PHP и переквалифицироваться в программисты.
Просто – это не по-нашему
Ну, казалось бы, хочешь изучать PHP и попрактиковаться в написании функционала – возьми какой-нибудь популярный фреймворк, и делай на нем сайт.
А игры – скачай Unity и делай. Более простого инструмента сложно представить.
Но, по-простому – это не наш метод!
К тому же, меня всегда не устраивал скудный функционал большинства сайтов. И ладно, если это бизнес сфера – там весь функционал сугубо логичен, но на игровых сайтах – почему бы не добавить систему уровней, каких-нибудь классов (которые иногда реализуются в виде «званий»), добавить какие-нибудь сражения.
Единственный известный мне сайт, где в классический функционал сайта встроены игровые механики это Gamer.ru. Но и там все довольно простенько, относительно того, что хотелось бы сделать мне. Нет, например, системы характеристик и какой-то прокачки, нет сражений с монстрами, исследования мира, нет сюжета в конце концов.
И все это хотелось (и хочется) сделать мне – объединить в одном проекте и многофункциональный сайт и элементы браузерной MMORPG игры. Что в итоге и вылилось в разработку Dusk World.
И все три пункта, которые писал выше – реализуются:
1. Хотел делать игры – наконец-то делаю.
2. Хотел расширить функционал сайта – делаю.
3. Хотел углубить свои знания в PHP – углубляю.
Обратите внимание, что нет пункта «заработать кучу денег» - мне кажется, что те энтузиасты, которые к созданию игр подходят с точки зрения «по-быстрому срубить бабла» - быстро разочаровываются и бросают это занятие. Т.к. работы вагон, а вероятность успеха инди-игр крайне низка.
Конечно, хорошо было бы заработать на этом всем денег, но иллюзий особых не питаю – про финансовую сторону напишу в будущем.
P.S.
О планируемом функционале, взаимосвязи элементов сайта с игровыми механиками – в следующей части.
P.P.S.
В конце этого года, или начале следующего сайт переедет с домена Diablo1.ru на DuskWorld.ru
Часть 12: Новогодние подарки
Всем привет. Приближается новый год, и содержание этого выпуска дневников разработки можно считать моим маленьким новогодним подарком :)
Обновление демо-версии
Последний месяц занимался добавлением навыков и эффектов в бою. Теперь, как и изначально задумывалось, каждый класс имеет собственные 3 способности, которые он может использовать в бою.
Также добавлено получение опыта за убийство монстров. Прокачки в текущей версии по-прежнему нет, но теперь в рейтинге, по количеству опыта, можно понять, кто проходя локацию убегал от всех монстров, а кто шел по трупам поверженных врагов.
Также незначительно подправлен баланс и сделан «вайп» — удалены все персонажи и обнулены рейтинги.
Это небольшое обновление, но только сделав его я могу переходить к более значимым обновлениям, которыми займусь в следующем году.
Опробовать обновленную демо-версию:
dwdemo.ru
А это сохраним для истории — рейтинг пользователей и отзывы:
Самая первая версия
В 4 выпуске дневников показывал скриншоты самой первой версии Dusk World, которую разрабатывал осенью 2016 года.
Эта версия была полностью заброшена и отправилась «в архив», т.к. там было допущено несколько фундаментальных ошибок и примитивных подходов.
Но… удалена она не была. И доступа к ней не давал.
А на днях подумал — а почему бы и не дать потрогать всем желающим эту первую версию? Не смотря на то, что там конечно все очень примитивно и урезано — посмотреть есть на что.
При этом, в противоположность существующей демо-версии, где представлена механика локации и боя, в той самой первой версии наоборот, была реализована система характеристик (в первой их версии), экипировки, магазина, страница профиля.
Там даже есть прокачка, только опыт дается за написание постов.
Оценить раритет:
dwdemo0.ru
Домен NightWorld.ru
Еще одна небольшая, но хорошая новость — купил домен NightWorld.ru
Именно название Night World и этот домен хотел взять изначально, два с половиной года назад, но владелец домена взял и поднял цену с 5 000р. до 125 000р. Слишком дорого, для моего бюджета, по этому пришлось выбирать другое название для проекта.
А на днях проверил домен NightWorld.ru — смотрю, он опять за 5000р. продается. Почему бы и не купить.
Впрочем, название проекта пока не меняется (хотя оно с 80% вероятностью сменится в будущем) — так как нужно сделать еще некоторые вещи, перед тем как делать однозначный выбор названия.
В любом случае, напишите в комментариях, какое название вам нравится больше — Dusk World или Night World?
Что дальше?
Для меня в разработке сейчас начинается самое интересное — модуль локации и боевки более-менее готов, за два с половиной года разработки мои навыки программирования сильно выросли, и теперь, с новым опытом, и более широким размахом «хотелок» приступаю к написанию того же, что когда-то начал делать осенью 2016 года.
И уже на базе этого будет размещен текущий функционал локации и боевки. Получится тоже самое, что и сейчас в демо-версии, но с инвентарем, предметами, прокачкой, и прочим.
Конечно, на этом пути будет еще много всяких «мелочей». Например — генерация предметов и их магических свойств. Этим генератором уже занимался раньше, и половина функционала там уже сделана, но другую половину еще предстоит сделать.
Также, нужно будет полностью переделать систему заклинаний, от текущей, примитивной, до той, которая планируется — со школами заклинаний, с их прокачкой, с повышением уровней самих заклинаний и прочими фишками.
В общем, интересного впереди — масса. Еще бы научиться не спать, чтобы по ночам тоже сидеть и заниматься разработкой :)
Всех с Новым Годом!
Как сделать систему уровней в браузерной MMORPG
Почитывая Toster.ru наткнулся на вопрос, о том, как сделать систему уровней в браузерной MMORPG. Вначале хотел найти какое-нибудь руководство (вопрос-то стандартный, каждый разработчик браузерной игры сталкивается с ним), и сказать мол «держи, учись пользоваться гуглом», но оказалось, что руководства с примерами на эту тему в общем-то и нет.
И тут подумал, а почему бы не сделать рунет чуточку полезнее – добавить руководство на эту тему, плюс написать новую часть дневников. А главное – сделать дневники разработки не просто рассказом о том, как разрабатывалась очередная браузерная MMORPG, но и добавлять в него практичные руководства о том, как сделать тот или иной элемент игры.
В общем, решение принято поехали.
Примечание: руководство подразумевает, что вы имеете базовое знание php, sql и ООП. Если даже базовых знаний нет браться за разработку своей браузерной MMORPG вам еще рано.
Результат, который получим
Считаю хорошим тоном в руководствах, когда вначале показывают результат руководства, и только затем, рассказывается, как такой результат получен. По этому:
Пример реализованной системы уровней | Код на github
Руководство: Как сделать систему уровней в браузерной MMORPG
Постановка задачи
Вначале, как профессиональные разработчики, давайте четко озвучим задачу, которую собственно будем решать:
1. Есть пользователь и его опыт (по сути, один параметр)
2. На основании опыта пользователя необходимо получать:
а) Уровень пользователя
б) Количество опыта, которое ему необходимо набрать до следующего уровня
в) Количество опыта на текущем уровне
г) % величина набранного опыта на текущем уровне – нам эти % потребуются для отображения классической полоски,
заполняющейся по мере получения опыта, и визуально показывающая игроку, сколько осталось до уровня.
3. Что будем хранить в БД, что рассчитывать на ходу:
в БД будем хранить:
а) опыт
б) уровень
Оставшиеся параметры будем рассчитывать на ходу.
Хранить уровень в БД или рассчитывать?
Спорный вопрос, который встает перед разработчиком, при создании системы уровней – в том, хранить ли уровень в базе данных, или рассчитывать каждый раз при необходимости.
Единственный ответ на тостере был в формате «рассчитывайте каждый раз» - я с таким советом не согласен. Уровень игрока может много где использоваться – например различные проверки на использование предметов (ограничение по уровню), доступ в локации (опять же, ограничение по уровню) и тому подобное. Если уровень хранится в базе – он просто берется как один из параметров. Если рассчитывать его на ходу – то это придется делать каждый раз, когда нужен уровень, а все эти вычисления расходуют процессорные мощности.
Конечно, если в вашей игре никогда не будет больше 10 игроков одновременно – то на оптимизацию можно забить. Но, по-хорошему, о ней нужно задумываться заранее.
Впрочем, оптимальное решение зависит от самой игры. Если уровень игрока практически нигде не используется, и отображается только текущему пользователю – тогда да, его логичнее будет рассчитывать на ходу.
Составляем таблицу уровней
Когда только начинал делать систему уровней, не долго думая набросал табличку в формате:
1 уровень дается сразу
2 уровень требует 500 опыта
3 уровень требует 1000 опыта
4 уровень требует 2000 опыта
5 уровень требует 3000 опыта
и т.д.
Но, согласитесь, такой подход, когда требуемый опыт берется «с потолка» - не серьезен. К тому же, он не дает представления о том, как растут наши требования к уровню – резко, плавно, с постепенным увеличением прогрессии, или наоборот, с замедлением?
Чтобы создавать систему уровней не «с потолка», а где мы четко будем понимать, какая у нас прогрессия – необходимо строить функции. Да, те самые «бестолковые» функции вида «y=2x+3», которые мы проходили в школе.
Открываем сайт desmos.com и строим тот график, который ходим, например, с постепенно возрастающей прогрессией:
А затем, на основе функции составляем таблицу уровней.
Я использовал простую функцию: y = (x * 10) ^ 1,4
И вот таким php-кодом, составлял таблицу:
<html> <head> <title>Создаем таблицу уровней и требуемого опыта</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <?php $lvl = 1; $a = 1.4; $totalexp = 0; echo '<table border="1"><tr><td>Уровень</td><td>Всего опыта</td><td>Опыта до<br />следующего уровня</td></tr>'; while ($lvl < 11) { $y = round(pow(($lvl * 10), $a)); echo '<tr><td>'.$lvl.'</td><td>'.$totalexp.'</td><td>'.$y.'</td></tr>'; $totalexp += $y; $lvl++; } echo '</table>';
Получается такая таблица:
В таком виде мы и создадим таблицу в MySQL (ниже будет указан SQL код для генерации и заполнения MySQL-таблиц). При этом, если вы передумаете, или получите отзывы от игроков, что уровни идут слишком быстро, или, наоборот, слишком медленно – достаточно будет только изменить формулу, и вы сразу получите обновленную таблицу уровней.
Можно (точнее нужно) пойти еще дальше – сделать так, чтобы php скрипт не только отображал таблицу, но и сам, на основе новых значений, заполнял MySQL-таблицу. Чтобы «ребаланс» прокачки менялся нажатием парой кнопкой и все. В текущем примере этого не делается, чтобы не перегружать руководство информацией.
Создаем MySQL таблицы
Теперь переходим к созданию таблиц. Для текущего примера с уровнями нам потребуется две простых таблицы:
1. Таблица пользователей
id – id пользователя
name – имя пользователя
lvl – уровень пользователя
exp – общий опыт пользователя
2. Таблица уровней
lvl – уровень
exp_to_lvl – необходимый опыт для получения следующего уровня
exp_total – общий опыт на текущем уровне
SQL-код, который создаст таблицы и заполнит их информацией:
-- Таблица Users CREATE TABLE `users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255), `lvl`INT DEFAULT 1, `exp` INT DEFAULT 0 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Таблица Levels CREATE TABLE `levels` ( `lvl` INT DEFAULT NULL, `exp_to_lvl` INT DEFAULT NULL, `exp_total` INT DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Заполняем таблицу User INSERT INTO `users` (`id`, `name`, `lvl`, `exp`) VALUES (NULL, 'Diablo', '1', '0'); -- Заполняем таблицу Levels INSERT INTO `levels` (`lvl`, `exp_total`, `exp_to_lvl`) VALUES ('1', '0', '25'), ('2', '25', '66'), ('3', '91', '117'), ('4', '208', '175'), ('5', '383', '239'), ('6', '622', '309'), ('7', '931', '383'), ('8', '1314', '462'), ('9', '1776', '544'), ('10', '2320', '1000000');
На 10-том уровне игрок увидит, что на следующий уровень ему потребуется 1 000 000 опыта. Таким образом я сделал простой «блок прокачки». В вашей реальной игре, конечно же, нужно будет сделать более человечный способ.
Переходим к коду
Примечание: при написании этого примера был выбор – или писать его на каком-нибудь Фреймворке,
вроде Yii2 или Laravel, или писать «кривой-велосипед». Учитывая, что данное руководство ориентированно на
новичков в программировании новички, могут банально не суметь поставить Yii2 или Laravel, и понять,
где там код фреймворка, а где код, относящийся к уровням – решил писать «велосипед» (в котором даже MVC-паттерна
нет).
Я поставил перед собой задачу минимальным количеством кода написать рабочую систему уровней.
Так как финальный код доступен на github, пройдусь только по ключевым аспектам.
Вернемся к тем значениям, которые нам нужно получить, и рассмотрим логику их вычисления:
Уровень пользователя
По умолчанию, при создании пользователя, он имеет 0 опыта и 1 уровень. Измениться уровень может только при изменении опыта.
Получать мы его будем таким вот хитрым запросом:
SELECT MAX(t.lvl) FROM (SELECT lvl FROM levels WHERE exp_total - ? <= 0) t
Вместо ? подставляется текущий общий опыт пользователя. И на основе данных из таблицы уровней (levels) сразу возвращается текущий уровень пользователя.
Чтобы руководство не разрослось на 100500 страниц, не буду описывать логику работы этого запроса, скажу лишь, что польза текущего руководства на 50% именно в нем. В качестве домашнего задания можете разобраться, как он работает.
Год назад, когда впервые сталкивался с необходимостью создания системы уровней, мне этот запрос подсказала Няш – опытный программист. Не думаю, что даже сейчас, спустя год, догадался бы о таком простом и элегантном решении.
Количество опыта до следующего уровня
SELECT `levels`.`exp_to_lvl` FROM levels JOIN users ON users.lvl = levels.lvl users.id = ?
Здесь мы делаем простой запрос, на основе уровня пользователя, который получается на основе его id.
В написанном примере используется лишь один пользователь, и можно было бы обойтись и без id вообще, но, на мой взгляд, заложить работу с id пользователей это необходимый минимум. На MVC можно плюнуть, на подключение к БД через синглтон можно забить, а вот если код написан так, что может работать только с одним игроком – это ниок.
Количество опыта на текущем уровне
Для получения этого параметра мы должны из общего опыта пользователя вычесть общий опыт для данного уровня:
SELECT ? - exp_total FROM levels WHERE lvl = ?
Вместо первого ? подставляется общий опыт пользователя
Вместо второго ? подставляется уровень
И на основе данных в таблице уровней получаем количество опыта на текущем уровне.
% величина набранного опыта на текущем уровне
Рассчитывается по следующей формуле: % = («Опыт на тек. уровне»/«Опыта до след. уровня») * 100
В php коде это выглядит так:
$this->userinfo['expbar'] = round(($this->userinfo['exp_at_lvl']/$this->userinfo['exp_to_lvl']) * 100);
Что касается самой логики, то она довольно проста:
1) Если опыт пользователя изменился, то:
2) Делаем проверку на то, изменился ли уровень пользователя, для этого делаем запрос на нового текущего уровня (на основе нового опыта), и сравниваем его с текущим – если они не сходятся – значит:
3) Необходимо перезаписать уровень пользователя в БД
4) Выполнить необходимые действия, в зависимости от того, увеличился уровень или уменьшился. В текущем примере такого функционала нет, но в рабочей MMORPG он обязательно будет – например, игрок получает очко навыка, на каждом уровне (при этом, важно не забыть, рассчитать на сколько именно изменился уровень – вдруг игрок получил сразу 2 или 3 уровня – значит и награду он должен получить *2 либо *3 соответственно.
Выше описаны основные механики. Посмотреть общий код можно на github:
level.sql – SQL запрос для создания таблиц;
model.php – модель работы с БД. Не забудьте изменить данные для подключения к БД;
lvl.php – вид и контроллер. Здесь то, что отвечает за обработку и отображение данных;
index.php – точка входа, просто подгружает lvl.php;
lvl_table.php – скрипт построения таблицы уровней;
/img/ - папка с аватаром пользователя (по-хорошему, информация об аватаре должна храниться в БД, своя для каждого
пользователя).
Пару слов о безопасности
Безопасность (отсутствие уязвимостей) в браузерной MMORPG – один из важнейших элементов. Можно создать отличную игру, но если уровень, золото, взламывается на раз-два – играть в такой проект никто не будет.
В существующем коде специально сделал небольшую уязвимость, чтобы каждый мог почувствовать себя хакером, и знать, как делать не стоит.
Посмотрим на код, который добавляет опыт:
<form method="post" action=""> <input type="hidden" name="exp" value="5"> <button type="submit">Добавить 5 опыта</button> </form> <form method="post" action=""> <input type="hidden" name="exp" value="20"> <button type="submit">Добавить 20 опыта</button> </form> <form method="post" action=""> <input type="hidden" name="exp" value="50"> <button type="submit">Добавить 50 опыта</button> </form> <form method="post" action=""> <input type="hidden" name="exp" value="zero"> <button type="submit">Обнулить опыт</button> </form>
Как не сложно догадаться, value="" – это и есть тот опыт, который добавляется персонажу. Можно открыть редактор страницы, прямо в браузере (F12 в Google Chrome), изменить значение на 75, нажать на кнопку «добавить опыт» и вы увидите, что вместо старого значения, добавится то, которое вы прописали (но, не больше 99 - в коде сделано ограничение).
Как было бы более защищено? Сделать в формах лишь название типа добавляемого опыта:
- addsmallexp
- addmediumexp
- addbigexp
И уже на основании этих названий добавлять 5/20/50 опыта. Тем самым, вы ставите варианты добавляемого опыта в жесткие рамки.
Хотя, и это далеко не все. Есть еще стандартная csrf уязвимость и многое другого. Описыванить их все – не входит в задачи данного руководства.
Но в целом, проверка надежности браузерной MMORPG сводится к следующему:
- Публикация игры на различных форумах программистов/хакеров с просьбой попробовать взломать (практика показывает, что желающих взломать хватает)
- Ведение логов на все значимые действия и события – чтобы даже если какой-то читер и завелся в вашей игре, вы смогли отследить его по логам, и узнать на какой именно механике он читерит.
P.S.
Надеюсь, что данное руководство поможет молодым разработчикам браузерных MMORPG. Лично мне, вначале пути, очень не хватало именно примеров реализованного функционалов. Не документации, не умных слов «как надо», а простой банальный пример, который работает.
Как сделать регенерацию энергии (здоровья или маны) в браузерной MMORPG игре
Прежде чем переходить к руководству, хочу поделиться своим удивлением. Рунет существует ~20 лет. Браузерные игры почти столько же. Система регенерации энергии/здоровья/маны используется практически в каждой. И нет ни одной инструкции как её сделать с примером кода (по крайней мере, я найти не смог). Как?! Вопросы как это сделать встречаются, но вот примера реализации нет. При этом в обсуждениях встречаются какие-то феерические сложные советы «используй node.js», «используй CRON» и т.д.
К чему такие сложности, когда с задачей справится и обычный PHP с MySQL (+ JS на фронте).
Мой пример, возможно, не идеальный, но предупрежу сразу за критику буду кидать тапками, потому что Если вы такие умные, почему я первый, кто сделал пример подобного функционала?. Ответ, конечно, напрашивается сам-собой потому что у нас на одного человека, который что-то делает, приходится десятки экспертов-критиков, которые критикуют того, кто что-то сделал, но вот сами не спешат сделать что-то для окружающих.
Ладно, это были эмоции, надо было высказаться :)
Конструктивная критика, конечно, приветствуется.
Для кого это руководство
- Для тех, кто уже знает основы PHP, ООП, MySQL и хоть чуть-чуть знаком с JS
- Для тех, кто делает свою браузерную игру (возможно MMORPG) на PHP и MySQL
- Для тех, кто хочет реализовать механику регенерации энергии/здоровья/маны, но не может сделать её своими силами.
Руководство не для тех, кто работает в веб-разработки 10+ лет вы сами все сделаете, возможно лучше, чем у меня.
О подходе к задаче
При написании данного примера ставил перед собой задачу сделать нужный функционал с минимальным количеством кода. Я мог бы сделать его на Yii2 или Laravel, добавить к этому AJAX, но тогда новичку было бы сложно во всем этом разобраться понять, где код самого фреймворка, а где код скрипта. Да и тот же фреймворк еще надо уметь поставить.
В итоге вышло ~400 строк кода, с комментариями практически к каждой строчке. Даже новичок должен разобраться. А кто не сможет разобраться даже в этих 400 строк кода с подробными комментариями, должен задуматься а сможет ли он вообще сделать свою браузерную MMORPG. Это довольно сложная и многогранная задача, которая требует некоторого уровня профессионализма.
Демо
Хорошим тоном считаю вначале показать что мы собственно будем делать:
Примечание: в демо все посетители «управляют» энергией одного пользователя, и это может создавать иллюзию «бага»: когда два посетителя будут одновременно увеличивать или уменьшать энергию будут учитываться все действия (вы нажали «-30 энергии», а кто-то в этот момент нажал «+30 энергии» в итоге изменения энергии не произойдет вовсе). Можно было бы под каждого уникального посетителя создавать отдельного пользователя, но это излишние навороты. Учитывая крайне низкую вероятность, что два посетителя зайдут на страницу демо одновременно этим можно пренебречь.
Необходимые параметры
Вначале пройдемся по параметрам, которые нужны для работы (использую теже названия, что и в коде):
-
$cost базовый параметр, который будет храниться отдельно (один для всех) необходимое количество
секунд, для восстановления одной энергии. В примере скрипта, указанного ниже он равен 20. Т.е. за 20 секунд
пользователь восстанавливает 1 энергию
Примечание: если в вашей игре вы планируете, к примеру, добавить предметы, которые будут уменьшать требуемое количество секунд на восстановление одной энергии то данный параметр надо хранить у каждого пользователя отдельно; - id id пользователя. Я буду работать с одним пользователем, и id, в общем-то, не нужен, но закладывать его нужно сразу;
- name имя пользователя, чтобы мы определяли энергию не абстактного нечто, а конкретного пользователя с именем;
- energy текущая энергия;
- energy_max максимальное количество энергии;
- time время последнего обновления энергии - именно по разнице между этим временем и текущим мы будем считать, нужно ли пользователю пополнить энергию и на сколько;
- residue остаток времени - необходимость этого параметра опишу ниже;
- eweight длина полоски энергии мы же хотим видеть полоску энергии, и наблюдать как она заполняется со временем, верно?;
- sweight длина полоски секунд
- time_actual текущее время;
- efull параметр отвечающий за то, полная ли энергия у пользователя или нет. Если энергия полная то никаких дополнительных расчетов делать не нужно;
- difference разница между текущим временем и временем последнего обновления энергии;
- addenergy количество энергии которое мы должны добавить пользователю (может быть 0, 1 или больше);
- residue_new новый остаток времени;
Для реализации нам нужно будет реализовать бек-энд и фронт-энд. Задача бек-энда по запросу выдавать количество текущей энергии пользователя (и дополнительные параметры). Задача фронт-энда визуально эмулировать восстановление энергии (здоровья/маны) в браузере пользователя. Дергать постоянно сервер мы не будем это не нужно.
Стркуткра БД
Базовых параметров, которые требуются для рассчета энергии и которые нужно хранить в базе всего 4: текущая энергия, максимум энергии, время последнего обновления энергии и остаток секунд. Чтобы пример был более приближен к реальности добавил еще два: id пользователя и его имя
MySQL-таблица будет выглядеть так:
SQL код для её создания наполнения
CREATE TABLE `energy` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `uname` varchar(255) NOT NULL, `energy` INT(11) DEFAULT '100', `energy_max` INT(11) DEFAULT '100', `time` decimal(20,4) NOT NULL, `residue` INT(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `energy` (`id`, `uname`, `energy`, `energy_max`, `time`, `residue`) VALUES (1, 'Andariel', 94, 120, '1517230970.1444', 12);
Логика работы бек-энда
Ну что ж, давайте начнем. Что такое «энергия» в браузерных играх объяснять думаю не нужно все с ней сталкивались. Наша задача создать её, и сделать механику её «регенерации».
Вариант №1: Энергия полная
- Получаем данные о пользователе из БД
- Узнаем, полная ли у пользователя энергия
- Если да ничего дополнительно делать не нужно
Вариант №2: Энергия не полная
Вначале опишу на примере конкретных цифр, чтобы было проще понять, затем логикой самого скрипта.
К примеру, у нас есть пользователь с 50 энергии из 100. Последнее обновление было 30 секунд назад, а на восстановление одной энергии требуется 20 секунд.
- Узнав, что энергия не полная, нам нужно узнать разницу между текущим временем и временем последнего обновления получаем 30 секунд;
- Считаем, какое количество энергии можем восстановить, на основе прошедшего времени 30 делим на 20 и округляем до меньшего. Получаем 1;
-
Дальше нам нужно рассчитать количество секунд, которые остались после расчетов:
остаток секунд = разница времени (количество восстанавливаемой энергии * количество секунд на восстановление)
В нашем случае остаток будет 10 секунд; - Итак, мы рассчитали, что игроку надо восстановить 1 энергию, и записать остаток секунд 10, чтобы учитывать их при следующем обновлении страницы (и, соответственно, следующем рассчете текущего количества энергии). Записываем все это в бд: новое количество энергии, остаток, и время обновления энергии обновится само;
Теперь перейдем к реальной логике скрипта
- Получаем базовые данные о пользователе из БД (id пользователя, имя, количество энергии, максимальное количество энергии, время последнего обновления и остаток секунд)
- Рассчитываем дополнительные параметры пользователя. Для этого первым делом узнаем, полная ли у пользователя энергия.
- Если энергия не полная, необходимо рассчитать дополнительные параметры:
- Разница времени в сек. = (текущее время - время последнего обновления энергии) + остаток секунд
-
Добавляемая энергия = разница времени в сек. / количество времени на восстановление одной энергии
Полученное значение округляем в меньшую сторону - Новый остаток в сек. = разница времени в сек. - (добавляемая энергия * количество времени на восстановление одной энергии)
- Далее проверяем, можем ли мы добавить одну или более энергии пользователю
- Если да добавляем энергию (попутно проверяя, не стала ли она выше максимальной) и записываем новые параметры
- Так как базовые параметры изменились по новой рассчитываем дополнительные параметры
- Выводим информацию на страницу
Логика работы фронт-энда
Теперь переходим к фронт-энду. Так как у нас не реал-тайм геймплей (PHP для данной цели вообще плохо подходит, я бы смотрел в сторону NodeJS), то знать количество энергии пользователя нужно только в момент отображения (обновления) страницы и каких-либо действий например пользователь хочет войти в локацию, вход в которую стоит 20 энергии, и только в этот момент нам нужно узнать реальное количество энергии пользователя.
В остальных случаях, когда пользователь просто открыл страницу и смотрит на неё нам достаточно сделать эмуляцию восстановления энергии, которая, в тоже время, будет соответствовать реальной энергии.
Для этого пишется довольно простой JS-скрипт-таймер, который каждую секунду (в моем примере это секунды, хотя можно сделать и другие промежутки времени) добавлять «по секунде», а когда накопится нужное количество секунд для восстановления одной энергии увеличивает количество энергии на 1, а счетчик секунд сбрасывает.
Когда энергия полная (или если она полная изначально) таймер останавливается.
Как бек-энд и фронт-энд работают в паре
При запросе к серверу (открытии страницы, или изменении энергии) бек-энд считает все данные, проверяет возможность изменения энергии и формирует html страницу вместе с нужными параметрами для js скрипта.
Когда страница загрузилась начинает работать js, который запускает функцию timer(). Он в свою очередь запускает функцию step(), которая обрабатывает логику счетчика, а он в свою очередь запускает функцию view(), которая обновляет информацию на странице.
Примечания
- Точность: При расчетах остаток секунд округляются до целых, соответственно может теряться до 0.5 секунд. Если игра не подразумевает частых расходов энергии, и частого обновления страницы то это нормально. Иначе нужно будет дорабатывать точность: окгуллять не до целых, а, например, до десятых или сотых.
- AJAX: Сейчас при изменении энергии обновляется страница, и, соответственно, перезапускается js-скрипт. Если вы будете изменять энергию AJAX-ом, то js-таймер нужно будет запускать отдельно.
- Безопасность: В текущей версии все реальные расчеты происходят на бек-энде. Пользователь может со своей стороны что угодно делать с html/js (рисовать какие угодно цифры) это никак не повлияет на реальные значения энергии пользователя.
Часть 6: Локации
С момента написания последней части дневников прошло больше двух месяцев - пора рассказать, как идет процесс разработки.
Все это время разрабатывал механику прохождения локаций, поэтому об этом элементе геймплея сегодня и расскажу.
Для тех, кто предпочитает смотреть, а не читать проматывайте в конец, там видео.
Примеры реализации локаций в других MMORPG
Прежде чем создавать что-то свое, разумеется, стоит посмотреть как это сделано у других.
Лига ангелов 2 (и аналоги)
Классический пример локации в браузерной MMORPG это цепочка «мест», где игроку предстоит сразиться с монстром. Победил - открывается следующее «место», где игрока ждет такой же монстр, но чуть посильнее.
Крайне примитивно и скучно.
Осклоки Снов
Еще один вариант локаций это полноценная 2D локация, с видом сверху. Такой вариант значительно интереснее предыдущего варианта, но очень трудоемкий в плане реализации. По сути, нужно делать полноценную (и качественную) 2D графику, стоимость которой весьма высока. Поэтому отпадает.
Пароград
Полноценные 3D локации. Высокая цена графики и анимации + большая нагрузка на сервер, за счет реал-тайм геймплея. При этом, не смотря на затраты графика будет выглядеть весьма примитивно т.к. текстуры с высоким разрешением весят много - передавать каждый раз через браузер невозможно (никто не будет ждать 10 минут для загрузки локации).
Поэтому, полноценное 3D в браузере я считаю самым печальным - расходы на разработку будут значительны, а картинка будет значительно уступать клиентским MMORPG.
Оглядываясь на настольные игры
Делать совсем просто и примитивно, как в Лиге Ангелов 2 (и бесконечных аналогах) не хотелось. В тоже время ресурсы на графику и серверные мощности ограничены, поэтому варианты полноценных 2D и 3D локаций отпадают (подробнее об этом писал здесь). В размышлениях обратил внимание на настольные игры. У них также весьма ограниченные возможности, но их разработчики умеют придумывать интересный, а главное реиграбельный геймлпей.
Одна из основных механик настольных игр - это «колода событий». Рассмотрим на примере простой игры «Манчикин»:
У игры есть всего две колоды - первая, «дверь» - это то, что игрок встречает. Чаще всего это какой-то монстр, проклятье или что-либо еще. И есть вторая колода - «сокровища» - это то, что игрок получает при убийстве монстров.
Карты тянутся случайным образом. И значительная часть интереса игры завязана на том, что никто не знает, какую карту двери или карту сокровищ он вытянет. Сделай выбор карт фиксированным - и игра станет совершенно неинтересной.
Пример из другой игры - Аркхем
Здесь также многое завязано на случайные события из колод карт. Например в игре есть локации - попав на них игрок тянет случайную карту из соответствующей колоды.
При этом, в отличие от Манчикина, в Аркхеме есть свобода действий – в какую локацию пойти, на что потратить деньги, убивать монстров на карте или закрывать порталы и т.д. И за счет выбора у каждого игрока появляется своя стратегия.
Выбранная концепция
После долгих размышлений решил остановиться именно на варианте, в чем-то схожим с «колодой событий» из настольных игр.
Они имеют два больших преимущества:
1) Реиграбельность, которая очень важна в жанре MMORPG, подразумевающий перепрохождение одних и тех же локаций множество
раз - каждый раз вы будете получать уникальную цепочку событий.
2) Свобода действий. Если в классической 2D/3D игре все, что вы хотите донести до игрока нужно показывать ему визуально, то формат
событий-карточек позволяет ограничиться простым текстом. В Dusk World, события будут сопровождаться скриншотами сделанными
в полноценной 3D локации в Unity, что, конечно, сложнее, чем просто написать текст, но в любом случае это в сотни раз проще,
чем делать полноценную 2D/3D анимированную сцену.
Итак: Локации в Dusk World - это набор определенных эпизодов, которые появляются (в основном) случайным образом. Они уникальны для каждой локации, хотя, такие эпизоды, как встреча с монстрами, или нахождение чего-то ценного актуальны всех локаций.
Скриншот, показывающий как сейчас выглядит прохождение локации:
В левом верхнем углу - параметры персонажа: здоровье, мана, выносливость, ужас (подробнее о них ниже). В правом верхнем углу - текущие эффекты. Визу - описание текущего эпизода и варианты действий. Над описанием есть две иконки - левая открывает доступные зелья, правая - доступные заклинания.
Ресурсы игрока
Рассмотрим ресурсы, от которых будет зависеть геймплей локаций:
- Здоровье Всем понятный ресурс. Тратится на сражения с монстрами, при попадании в ловушки. Восстанавливается с помощью зелий или заклинаний. Если здоровье персонажа упало до нуля - он погибает.
- Мана Тут тоже все понятно. Тратится на использование заклинаний. Постепенно регенерируется.
-
Выносливость Расходуется на каждый «ход» по локации. При этом расход зависит от типа брони, и, иногда, сам
эпизод может дополнительно расходовать выносливость (сделано для возможности создавать локации типа болот, где каждые
5 метров будут даваться сложнее, чем на обычной, твердой земле. При достижении нуля персонаж получает дебаф «Предельная
усталость» - весь получаемый урон увеличен в два раза.
В будущем планирую добавить вес и максимальный переносимый вес - которые также будут влиять на расход выносливости. Персонаж налегке будет тратить меньше выносливости, чем нагруженный под завязку (что логично). -
Ужас Персонажи в Dusk World не супер-герои, поэтому, когда они видят мертвецов, мутантов, и прочих тварей размерами с трех этажные дома,
они, разумеется, испытывают страх. Ужас - это ресурс, который увеличивается при встрече с монстрами, или какими-либо другими, пробирающих до костей
событиями. Таким образом, ужас постепенно накапливается в течении прохождении локации, а при достижении максимума - персонаж впадает в
безумие и убегает из локации с широко раскрытыми глазами. Чтобы не допустить безумия, уровень ужаса нужно уменьшать с помощью
специальных заклинаний и зелий, держа его на безопасном уровне.
Здесь надо сделать небольшое отступление, и уточнить, чем именно отличается смерть от безумия. В текущей демо-версии они ничем не отличаются, но в релизной версии будет так: за смерть персонаж теряет часть набранного опыта на текущем уроне, а в случае с безумием - несколько случайных предметов из сумки (не одетых). -
Заклинания в текущей версии все классы получают по 3 базовых заклинания (восстановление здоровья, восстановление выносливости и снижение ужаса)
и одно классовое. В релизной версии, разумеется, ассортимент заклинаний будет значительно большим.
Вообще по развитию заклинаний есть очень большие планы - сделать различные школы магии, разные уровни заклинаний, и, главное - навык работы с той или иной школой заклинаний. Персонажи с низким навыком в магии не смогут даже со 100% вероятностью создавать заклинания, а те, кто потратил годы на тренировки смогут не только использовать самые мощные заклинания, но и будут иметь бонус к эффекту, и сниженный расход маны. - Зелья если ресурсы на исходе, маны нет, то выручить могут зелья. В релизной версии игрок сам будет выбирать, какие зелья ему взять (а лимит зелий будет определять пояс), в отдельной альфа-версии локаций все игрок получают стандартный набор: 2 зелья восстановления здоровья и по одному зелью восстановления выносливости, маны, и снижения ужаса.
Характеристики персонажа и их влияние на механику
Другие параметры персонажа, такие как сила, ловкость, интеллект и другие также будут оказывать влияние на прохождение:
- Сила иногда вам будут встречаться эпизоды, проверяющие силу. В перспективе планирую добавить переносимый вес, который будет зависеть от силы. Чем больше нагружен персонаж - тем сильнее расходуется его выносливость.
- Ловкость влияет на шанс уклониться от ловушки. А также на шанс подкрасться незаметным к монстрам. Вероятность подкрасться незаметным к монстрам зависит от разницы между вашей ловкостью и ловкостью монстров. Также существуют навыки (в демо такой навык имеет охотник) увеличивающие вероятность скрытности.
- Интеллект иногда вы будете встречать загадки, с вариантами доступных действий. Персонажи с высоким интеллектом получат подсказку к правильному ответу.
- Выносливость при встрече с монстрами, которые вас заметили и не испугались, можно попытаться убежать от них. Шанс успешного бегства от монстров зависит от разницы между вашей выносливостью и выносливостью монстров.
- Тип доспеха влияет на количество расходуемой выносливости при исследовании локации (переходе с одного эпизода на другой) и шанс подойти к монстрам незамеченным.
-
Уровень влияет на вероятность того, что монстры испугаются и убегут. При этом стоит отметить, что монстры имеют два уровня - обычный,
и так называемый power level. При расчете вероятности бегства монстров уровень игрока сравнивается с power level монстра. Сделано это
для того, чтобы можно было делать сильных монстров, которые не будут пугаться даже сильно превосходящего в уровне персонажа. Здесь
стоит также отметить, что в расчете вероятности бегства учитывается суммарный power level монстров, а значит один волк убежит со значительно большей
вероятностью, чем 10 таких же волков.
Также существуют способности, позволяющие выглядеть более грозным, а следовательно, увеличивающие вероятность бегства монстров.
Примечание: локации будут иметь строгое ограничение по максимальному уровню, поэтому не получится зайти в такие локации, где все монстры будут от вас убегать.
Рейтинги
MMORPG и рейтинги это как инь и янь. Лично я рейтинги люблю, и в Dusk World их будет много. Например на каждую (!) локацию будет четыре рейтинга:
- Первопроходцы: рейтинг игроков, которые успешно прошли данную локацию раньше всех.
- Дальше всех: рейтинг игроков, которые прошли максимально глубоко. Здесь нужно добавить, что чем глубже проходит игрок по локации, тем более многочисленных монстров он будет встречать. А также, начиная с 35 глубины, с 10% вероятностью он встретит тупик (дальше идти нельзя). Поэтому, чтобы побороться за топ первопроходцев, нужно будет иметь не только прокаченного персонажа, но и удачу. Учитывая, что у локаций будет довольно строгое ограничение по максимальному уровню борьба за данный рейтинг будет весьма интересной.
- Удачный заход: рейтинг игроков, собравших больше всего богатств за одно прохождение (с учетом всех предметов в рейтинг будет засчитываться их базовая стоимость)
- Доминация: рейтинг игроков, раньше всех победивших босса локации.
Соревноваться с бездушными мобами или ботами – скучно. Рейтинги в этом плане показывают достижения других игроков, и предлагают попробовать обойти их.
Dusk World: Пре-пре-пре-альфа версия локации
Ну-с, и собственно пример того, как это выглядит вживую. Напомню, это пока очень сырая ранняя версия, как в плане графики, так и в плане механики:
Ближайшие планы
В конце декабря/начале января выпустить вторую часть дневников разработки по локациям. Расскажу какие варианты эпизодов сделаны, какие в планах, возможно покажу что-то свежее с боевой.
В конце января подготовить демо-версию локации, которую уже сможет попробовать любой желающий. Но, это планы. Ничего не обещаю.
Часть 16: Над чем идет работа в данный момент
Это будет короткая часть дневников, в которой просто хочу показать, над чем сейчас идет работа.
Напомню, что сейчас делаю вторую демо-версию, которая будет состоять из двух больших (с точки зрения разработки, а не с точки зрения игрового контента) частей:
- Функционал сайта посты, комментарии, всевозможные страницы.
- Игровой функционал локации, бои и т.д.
Сейчас занимаюсь сайтовым функционалом.
Страница регистрации
Вот так выглядит страница регистрации. Логин/пароль/почта + выбор расы, класса и пола.
Профиль
Профиль пользователя, где собрана основная информация о нем.
В будущем добавлю настройки профиля, и можно будет, например, скрыть почту.
Страница персонажа
При просмотре своего персонажа:
При просмотре чужого персонажа:
Дерево пассивных способностей
Пока оно сделано наброском исключительно проработать (и проверить в работе) саму механику дерева способностей. Красная точка в центре это стартовая позиция, откуда идет изучение. Пока не придумал подходящую иконку.
Также, дерево способностей пока одно для всех классов, но в будущем у каждого класса будет свое дерево это позволит точечно править баланс по классам + добавлять особые пассивные свойства каждому классу.
Ну и конечно же, оно будет значительно больше.
Чат
На всех страницах, справа внизу будет небольшая иконка чата нажал на неё и открывается окно чата, в котором можно пообщаться с другими игроками. В чате пока только сделал верстку, функционал в процессе.
Как видно по скриншоту будет несколько каналов. Общие + расовые + отдельные каналы для более высокоуровневых игроков (точнее для игроков с высоуровневыми персонажами)
Рейтинги
Ну и рейтинги, куда без них. Пока сделано три по уровню аккаунта, по уровню персонажей и по карме.
В будущем их будет больше по расам, по классам, рейтинги рас и т.д.
Посты, комментарии
Это одна из частей, над которой еще работать и работать. Больше всего работы над редактором не смотря на то, что есть масса готовых решений они все перегружены функционалом, и проще сделать с нуля, чем разгребать чужие десятки тысяч строк.
Админка
Разумеется, делаю и админку, с управлением пользователями, модерацией постов, комментариев и прочим.
Показывать не буду =Р
P.S.
Доделаю чат и форму создания постов (плюс еще несколько десятков мелких правок разной степени сложности) опубликую текущий функционал в открытый доступ, можно будет попробовать. Конечно, никакого «игрового» процесса пока нет, но, по крайней мере, поможете выявить баги, чтобы их было меньше, на момент анонса второй демо-версии.
Часть 9: Эволюция графония
Посетители заметили, что последние два месяца ничего нового на сайте не появляется, и даже на форум за это время заходил очень редко.
Причина в том, что вот уже три месяца все свободное время трачу на доделку демо-версии с одной локацией Dusk World, которую планировал опубликовать еще на день рожденье сайта.
В общем, осталось совсем чуть-чуть (о том, что именно осталось, написано в конце), но сейчас, отдельной частью дневников хотел бы показать, как эволюционировала графика за прошедший год.
Слева – как было раньше, справа – как выглядит теперь:
Улучшить графику позволило:
- Использование пост-обработки, за счет чего, помимо прочего, получилось победить «эффект пластелиновости»
- Принцип «реалистичного» освещения, когда источники освещения привязаны к «реальным» источникам света. В старой версии было много источников света «из ниоткуда», которые, конечно, повышают видимость в локации, но портят реалистичность.
В тоже время, это еще не предел «красоты». Как минимум есть один неприятный баг с тенями, который пока не удалось исправить. Плюс, создание красивых локаций – это отдельный скилл, который у меня только начинает прокачиваться, и в будущем, должно получаться лучше.
P.S.
Что осталось доделать в демо-версии, чтобы её можно было публично анонсировать:
- Написать 336 коротких текстовых описаний к эпизодам
- Сделать описание интерфейса боя
- Залить демо-версию на публичный домен
- Протестировать еще раз работу локации, удалить тестовые аккаунты их статистику
- Написать новую часть дневников, в которой рассказать о том, какой функционал присутствует в демо-версии, что остается за кадром. А также поделиться планами по доработки как системы локации и боя, так и дальнейшими планами.
Еще раз предупрежу, что сейчас готовится к анонсу не демо-версия всего проекта, а лишь локации с боями. Без прокачки, без предметов, без много чего еще.
Никаких сроков говорить не буду, но, по сравнению с пройденным путем – осталось совсем-совсем немного.