{ "author_name": "Роман Тян", "author_type": "self", "tags": [], "comments": 23, "likes": 16, "favorites": 1, "is_advertisement": false, "section_name": "blog", "id": "12874", "is_wide": "" }
Роман Тян
1 112
Блоги

Разработка продолжается! Новая раса, интерфейсные проблемы и генерация имен

Всем привет! В продолжение предыдущего поста наконец-то дошли руки до следующего.

Поделиться

В избранное

В избранном

Предупреждаю, здесь будет много картинок)))

Прежде всего, нужно сказать, что мы нашли все-таки 2д дизайнера (Игорь, привет! :) ). Соответственно у нас изменился подход к дизайну человеческих кораблей, а также замоделена новая раса «Мимиков». И появилась первая публичная версия логотипа!))

Новый лого)

По лору игры мимики (Это не "Грань будущего", нет!) - это раса таинственных существ, которые в ходе эволюции научились идеальным методам маскировки. Все контакты с мимиками не дают уверенности об их настоящем облике. Трупы мимиков, полученные для исследований в ходе немногочисленных конфликтов с человеческой цивилизацией, всегда были практически уничтожены. Единственное что определенно можно сказать о них – мимики это раса на основе кремния.

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

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

Маскировочное поле
Вот так выглядит их крейсер – основная ударная сила любых флотилий
Вид сверху

Также были перемоделены корабли человеческой расы.

Для примера новый человеческий крейсер
Утилитарный вид))
Истребитель - не смотри что маленький, вспомни пизантов в HOMM)
Но у нас истребители далеко не пизанты. Большой корабль с мощными неповоротливыми пушками - легкая добыча для этих вертких, злых и кусачих машин

Кроме того, в боевой части был слегка пересмотрен интерфейс, а также добавлено отображение наносимого урона при попадании. Вроде как мелочь, но кардинально оживляет картинку.

Щит - незаменимая вещь!

Добавлена так называемая «сила» кораблей, рассчитываемая из качества корпуса корабля (количества и размера мест для орудий, основных и вспомогательных систем, хитпоинтов), установленных орудий и систем. Формулу скорее всего придется корректировать, но пока так.

Флотилии сгенерены автоматически. Целевое значение силы флота для алгоритма -12000.

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

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

Было пересмотрено множество вариантов:

Вариант 1
вариант2
После чего было решено остановиться на этом

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

Крейсер не очень. Всего 2 большие турели из 4х возможных.

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

Боевая часть игры спроектирована (по идее) по принципу easy-to-learn-hard-to-master. Каждое оружие имеет несколько характеристик зависящих от дистанции, размера цели и калибра орудия. Соответственно, для корабля приводится общая интегральная характеристика огневой мощи с учетом всех установленных орудий - «Атака = 152». По идее этого должно хватить вначале - чем больше атака, тем лучше. При желании, для того чтобы более углубленно понять механику игры и специфику корабля, кликом по надписи «Атака» можно вывести общую матрицу повреждений:

Ужасный, ужасный матан. Атака 152 - ч

Матрица показывает, какие повреждения будет наносить корабль на трех разных дистанциях (90, 50 и 20км) по различным целям. Это даст возможность игроку более детально настроить билд.

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

  • Пришлось обеспечить механизм полной сериализации как самих кораблей, так и всего что может на них устанавливаться. В результате я пришел к полноценной реализации патерна MVVM на unity(что не может не радовать).
  • Реализовать алгоритмы генерации различных сущностей с учетом заданной «силы». Например, требуется генерить корпуса кораблей с характеристиками, отличающимися от максимальных в нечисловом выражении. То есть крейсер, в который возможно установить не четыре орудия, а три. Или, к примеру, крейсер в который нельзя поставить щит (плохо восстановленный с необратимым повреждением конструкции). Долго пришлось бороться с «голубями мира» – могли получаться корабли с мощными пушками, но очень слабыми реакторами, которые вообще не могли стрелять или стреляли ровно 1 раз.
  • Придумать систему генерации имен сущностей, походящую к локализации на разные языки. Взять, к примеру, корпус крейсера «Эклипс». Если у него получится повышенное количество ХП, то он получит характеристику «тяжелый», если пониженное то «легкий» . Количество турелей описывает еще одна характеристика-код: 3 тяжелые турели – 3L (3 large turrets) или 2M1L (2 средние турели и 1 большая). Если по каким-то причинам в него нельзя ставить щит или броню, то он получит характеристику «восстановленный». Если в корабль допускается установка повышенного количества внутренних подсистем, то он получает характеристику «модернизированный», если пониженную, то «устаревший». Таким образом, мы легко получаем «легкий устаревший 4L крейсер Эклипс» или «тяжелый восстановленный 1S2M1L крейсер Эклипс». Количество билдов (особенно с учетом установленного оборудования), как вы понимаете практически бесконечно.

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

Я думаю, что на один пост достаточно - длинопост получился ну прям совсем длинным))).

Наша группа в ВК.

Спасибо за внимание! Критика и советы приветствуются)

Популярные материалы
Показать еще
{ "is_needs_advanced_access": false }

Комментарии Комм.

Популярные

По порядку

0

Прямой эфир

Узнавайте первым важные новости

Подписаться
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "create", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-549065259", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxeub&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&puid32=&fmt=1&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } } ]