Давайте напишем ... MMO! Часть 5: Планы и направления

Опубликовано NowhereMan - пн, 05/11/2020 - 17:30

December 22, 2010

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

Мне не нужен централизованно управляемый мир, где дизайнер решает все о стиле игры. Кроме того, я не могу позволить себе управлять серверной фермой и поддерживать миллион пользователей. И у меня все равно нет ни художественных, ни дизайнерских талантов, чтобы построить игру мирового уровня. Поэтому моя идея заключается в том, чтобы сделать мир равноправным и позволить программирование и дизайн в мире. Тогда он сможет расширяться и меняться, основываясь на том, что люди хотят там делать. Подумайте о peer to peer Lego Universe, с редактором для создания новых блочных типов и языком программирования, который позволит вам добавлять игры или приложения в мир.

Если вы собираетесь привлечь случайных программистов, добавляющих код в мир, безопасность должна быть очень жесткой. Иначе кто-то может подхватить вирус, просто проходя мимо скалы, к которой прикреплен злой код. Так что каждый кусок кода должен работать на своей виртуальной машине.

Рис. 1: Демонстрация моей VM 2005 г.

Во время моей предыдущей попытки работы над этим проектом в 2005 году, именно с этого я и начинал. Я написал очень простую интерпретируемую ВМ (программисты: оператор switch в цикле) и отладил ее. Затем я спроектировал язык программирования, который был подмножеством Java, и написал компилятор для него, создав код для моей маленькой ВМ.

Все это было очень медленно по сравнению с реальным VM с компиляцией JIT, но, на удивление, достаточно быстро, чтобы написать простые демо-версии. Я дал ВМ несколько примитивов 3D графики и собрал простой мир. Видео с этим можно посмотреть на рисунке 1.

Помните, что суть не в дрянной графике. Смысл в том, что это приложение, написанное на моем собственном языке программирования, запущенное на моей собственной виртуальной машине.

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

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

На этот раз я пришел с другой стороны - реализовать простой мир, а потом добавить программируемость и так далее. Но после того, как GUI-код заработает, я должен принять решение о направлении.

Направление 1: Имитация Minecraft

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

Я не заинтересован в этом. Минекрафт делает все это, и нет смысла просто подражать ему. Конечно, некоторым программистам наверняка понравилась бы оболочка вроде Minecraft, которую можно было бы использовать для реализации других игр. Именно так я представил вам проект, и это стоит сделать. Нет причин, по которым вы не смогли бы реализовать приключенческие игры в блочном стиле и так далее, и этот код сделал бы это намного проще.

Плюсы: Не слишком много работы (пару месяцев для действительно надежной реализации). Игровой движок Minecraft будет полезен и другим программистам.

Минусы: Производно и скучно для меня. Многие просто назовут это "тем клоном Minecraft" и не захотят иметь с ним ничего общего.

Направление 2: Многопользовательский мир

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

Плюсы: Было бы неплохо сначала поработать над трудными, интересными задачами. Имея все основные модули в комплекте, я знаю объем проекта и могу расставить приоритеты. У меня будет что-то, что работает, и я смогу пересмотреть все части, чтобы сделать их лучше. Я могу почувствовать, имеет ли проект в целом смысл.

Минусы: В мире пока не на что смотреть, и нечего делать. Я выдохся, потому что я потратил слишком много времени на внутренности и недоделал то, что могло бы пригодиться людям. После шести месяцев без обратной связи, я выгорел, и первая серьезная критика убила проект.

Направление 3: Более интересный мир

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

Если вы посмотрите на любую другую 3D-игру и подумаете о том, чтобы добавить свои собственные здания или персонажей, то для нехудожника это будет весьма непросто. Инструменты трудно использовать и трудно понять, а все, что делает новичок, скорее всего, выглядит дерьмово. Но все знают, как играть с кубиками!

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

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

В Minecraft есть смысл, чтобы все было кубами. Вы добываете сырье и строите свои здания из того, что вы добываете или изготавливаете. Это также часть того милого, low-res ретро-образа, который есть в игре. Но у нее есть свои пределы. Это также фирменный стиль Minecraft, и я знаю, что если я буду придерживаться его, то останусь этим "Minecraft kind of thing" навсегда.

Для моего мира я хотел бы иметь гладкий пейзаж, с растениями и деревьями, выполненный, по крайней мере, в соответствии с качеством World of Warcraft. Здания могут быть сделаны из блоков, но я хотел бы добавить больше форм и позволить пользователю создавать новые блоки с импортированной графикой. И мне нужно сделать что-то более интересное для аватаров (подробнее об этом ниже).

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

Итак, Направление 3 - работать над всем этим. Заставить мир выглядеть так, как я хочу, прежде чем я буду поддерживать несколько пользователей и другие функции. И придать ему уникальный вид, чтобы это был не просто "мир Minecraft".

Плюсы: Это, наверное, более интересно моим нынешним читателям, и это легко прокомментировать, так как это очень наглядно. Я, наверное, получу больше тестеров для демо, если вы сможете построить с его помощью интересные вещи. Системное программирование не так уж и интересно... Плюс, если я сконцентрируюсь на внутреннем устройстве сервера неделями, я потеряю внимание моих экспертов по графике.

Минусы: Я мало что знаю о 3D-графике, и эти проблемы с рендерингом бесконечны. Я мог бы потратить много времени, работая над красивым миром, и ничего не получить в целом по проекту. У меня есть идеи, как реализовать сервер, но на данный момент это скорее "смутные ощущения", чем дизайн. Если я отложу это слишком надолго, то, возможно, выдохнусь, прежде чем я сделаю важные части.

Направление 4: Редактор аватаров

Даже если бы я внедрил сервер и сохранил современный мир, аватары позорны. У меня просто есть эти маленькие зеленые чупа-чупсы. Никто не захочет исследовать мир, в котором все люди так выглядят! Так что я должен добавить редактор аватаров. Это не просто отвлечение. У меня есть идея, которую я хочу попробовать.

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

Я думаю, что вместо полигонов на основе сетки, чтобы сделать руки, и т.д., я просто добавлю больше кубиков. Объект, прикрепленный к каждой части скелета, будет уменьшенной версией ландшафта. Таким образом, вы сможете построить свою голову из блоков, руки из блоков и т.д. Если я позволю вам добавить любой цветной блок, который вам нравится, у вас будет достаточно гибкости, чтобы сделать что-то милое. Позже, когда мир будет поддерживать больше форм, чем просто кубы, их будут поддерживать и аватары.

Плюсы: Это, по крайней мере, будет отличаться от Minecraft, и, возможно, станет причиной того, что люди попробуют демо (очень немногие из вас скачивают его сейчас). В конце концов, это то, чего я хочу в любом случае, и это не огромный проект. У меня уже достаточно графической инфраструктуры для реализации этого.

Минусы: Это не важная часть проекта, она не делает мир более интересным, и она не будет привлекать внимания специалистов в области графики.

Направление 5: Среда программирования

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

Плюсы: Это добавит еще один большой кусок в проект, и я буду повторно использовать весь свой код 2005 года. Так как это была большая работа, которая гнила на моем диске в течение пяти лет, я хотел бы вернуть его в работу. Это также интересный проект, который может сделать систему уникальной.

Минусы: Никто из моих нынешних читателей не заинтересуется, а графические ребята уйдут. Потребуются месяцы, чтобы привести всё это в порядок и закончить (особенно написание JIT интерпретатора), а после этого демо всё равно будет выглядеть как полусерьёзная попытка в Minecraft.

Последовательность?

Я склонен делать редактор аватаров, потом лучше выглядящий мир, потом многопользовательский сервер, а потом добавлять программируемость в конце. Затем много изменений и улучшений, пока я справляюсь с ними. Однако я не придерживаюсь этого порядка, так что, пожалуйста, прокомментируйте.