Cheb
> Можно добавить только приправу в виде сюжета, обосновываюшего, почему
> архитектура спасёт мир, как бы ставящая искусственную сверхцель "пройти" игру.
Для синглплеера можно придумать в качестве конечной цели прокачку до уровня "божественный архитектор", после чего игрок получает задание построить храм какому-нть богу. В мультиплеере/ммо такие цели тоже можно ставить, но не в качестве конечных. Для ммо вообще сложно придумать хорошие задачи, не сводящиеся к банальной прокачке какой-то характеристики. Ковыряние в песочнице как самоцель - быстро надоедает, а постоянно клепать новый контент с расчётом, что его смогут увидеть и потрогать все игроки, а не только первые - это нужен талант.
Архитектурная часть прописана подробно только потому, что она заточена под особенности движка. В идеале так же подробно надо расписывать все смежные специальности, чтобы не ограничивать игрока только строительством. В целом сеттинг задумывался как некая вариация стимпанка. Для автоматизации можно использовать паровые машины, механические приводы и некоторый набор "псевдомагии", завязанной на артефакты и особые ресурсы. Транспорт и оборудование - тоже на паровой тяге.
чтобы человек шевелился, его нужно либо пинать страхами, либо давать свет в конце тунеля. (классические кнут и пряник). В самом майнкрафте заложено в примитиве. Кнут: Наступает ночь, кто не спрятался тому п...а. Пряник - портал и второй мир. Теперь как человека заставить работать творчески. Творчество можно оценить по совокупности одобрения другими людьми. Набираешь XXX лайков - закрытый бонус 1го уровня. YYYY лайков - закрытый бонус 2го уровня. И т.д. Если кого-то прёт с выпендрежа от бонусов, то они будут завлекать народ на лайки.
СерыйМыш
> Для синглплеера можно придумать в качестве конечной цели прокачку до уровня
> "божественный архитектор", после чего игрок получает задание построить храм
> какому-нть богу.
Я люблю песочницы, но подобные цели не воодушевляют.
Постройка должна быть полезной, как-то использоваться. Факторио выгодно отличается от Майнкрафта тем, что в ней в процессе игры появляются практические задачи, для эффективного решения которых надо строить всякие большие хитрые системы, а в Майнкрафте практических задач особо нет, можно построить замок с окрестностями, но пользы от него, как от примитивной землянки.
Имхо, сюжет в песочнице не должен управлять игровым процессом. Он может разве что задавать общую атмосферу и придавать какую-то логику происходящему вокруг. Типа, вы летели на воздушном шаре, который упал на необитаемый остров и, возможно, вам захочется отсюда каким-то образом выбраться. Именно поэтому вокруг игрока остров, на котором нет других людей. На этом сюжет заканчивается, что делать дальше, решайте сами.
>Постройка должна быть полезной, как-то использоваться.
В Террарии заметная часть прокачки - получение новых инструментов и материалов (расходников), которые получаешь только от неписей, которых надо найти, спасти и построить им домик. Причём, если домик защищён слабо - непися ночью ухайдакают монстры, и будешь сидеть без расходников пока он не отреспавнится.
Можно так: ты - в городе, от которого остались почти одни крепостные стены. И по ночам набИгают человекоядные монстры. Начинаешь с того, что бравым защитникам надо спать в домике, а не под сырым небом - как только строишь им казарму - их статы вырастают, становится легче, они отвоёвывают лесопилку.
И далее в том же духе. Каждый домик - прокачка города. Пивоварня, кузня, хоромы мага... С каждым новым домиком город отбивается всё успешнее (а человекоядные монстры с каждой ночью понемногу прокачиваются)
Нужно давление. В той же Террарии просто копать и строить быстро наскучило бы, но мобы прут непрерывно, от слизей днём до зомби-апокалипдеца ночью. И ты не просто копаешь и строишь, а сопротивляешься, всё время в напряжении, всё время оружие под рукой. После этого выкопанное и построенное ощущается достижением: ты пересилил, ты смог.
З.Ы. Вот если бы кто-нибудь хотя бы тупо повторил ту же Террарию, но в 3d...
Ракетные сапоги, сапоги-лавоходы, волшебные палочки и бластеры, куча измерительных приборов, от счётчика монстров до GPS и глубиномера, которые можно скрафтить в один, экономя место в инвентаре, абордажный крюк, верёвки, которые можно удлинять вниз от своей позиции, честно текущие вода и лава, которыми можно затопить полмира, сотни видов монстров, крутеющих с глубиной, ползучая демоническая коррупция, медленно пожирающая мир, распространяясь на соседние блоки, а подо всем этим - ад, полный лавы, Hidden Fun Stuff и чертей, стреляющих *сквозь* блоки. Десятки эпичных боссов, часто разлочивающих доступ куда-либо (сунулся в данжон, не победив Скелетрона == взорвался на мясо) или дропающих уникальные ингредиенты для брони следующего тира или, ещё круче, для кирки следующего тира, позволяющей копать крутые блоки, ранее бывшие для тебя неуязвимыми.
Играю с 14 года (сингл) но едва видел половину контента. Вдруг в прошедшем декабре нахожу в подземных джунглях улей! Никогда раньше не видел! Офигеваю, начинаю копать. Выколупываемые блоки называются просто, "улей". Сам улей устроен в виде полости диаметром блоков двадцать, с толстыми стенками. При копании вылетают кусачие пчёлы и вытекает мёд, подобно тому, как с каждого блока адского камня вытекает пол-блока лавы. Мёд густой, как лава, но в нём можно плавать, как в воде. Или набрать его ведром.
Ну, я тут, мерзки хихикая, бросаю внутрь улья две бомбы. Бах! Бах! Дырищи много блоков диаметром, мёд течёт рекой!
И вдруг! Раздаётся дикий рёв, и на меня несётся гигантская пчела! Панически отстреливаясь, замечаю, что вместо жопы у неё дырки, вроде сот. И тут она начинает срать пчёлами!
К моему счастью, все ейные пчёлы застряли в одном месте, где была впадина в один блок, и до меня не долетели. Пчелобосс дропнул пчеломёт - зачётнейшая пушка с бесконечным боезапасом, поскольку работает на мане! Теперь хожу like a boss, лениво постреливая в потолок. Пчёлы сами наведутся на всех окружающих и зажалят, роясь. Жаль, только против низкоуровневых: пчела наносит 6 урона, но у большинства мобов в хардкорном режиме шкура толще, и в результате пчела наносит только 1 урона. Но даже такая "смерть от тысячи порезов бумагой" работает, только строгать надо дольше.
CriDos
> У нас есть контейнеры текстур (альтернатива атласам, на основе
> EXT_texture_array), которые собираются в рантайме.
На DirectX 9 будет работать?
Cheb
> Начинаешь с того, что бравым защитникам надо спать в домике, а не под сырым
> небом - как только строишь им казарму - их статы вырастают, становится легче,
> они отвоёвывают лесопилку.
> И далее в том же духе. Каждый домик - прокачка города. Пивоварня, кузня, хоромы
> мага...
Думал о чём-то подобном. На выходе почему-то всё время получается некая злобная смесь Майнкрафта, Дварф Фортресс и Сеттлеров (IV), с лёгким налётом Арканума и Террарии.
Как сюжетка для синглплеера вполне себе подходит. Главное вовремя успокоиться и перестать наращивать мощь набИгаторов, иначе игрок может надорваться и бросить. Чтобы было нескучно можно после спасения первого города/замка получить запрос от соседа, и организовать помощь ему. Чтобы не было хождения по кругу, для каждой новой итерации нужно добавлять развитие технологий (новые оборонительные сооружения, новые постройки, новые технологические цепочки). Как окончательная цель - освободить свою любимую страну от злых человекоядных монстров, защитив все города и наладив между ними транспортное сообщение и взаимовыгодный товарообмен.
Как это всё перетащить в мультиплеер - отдельный вопрос. Если можно разорить логово чудовища, то это будет одноразовый квест, который достанется только первым счастливчикам. Если можно защитить город, то это тоже по сути разовая акция, не особо подходящая для повторного использования игроками, пришедшими позже. Разрушаемость и изменчивость мира в данном случае создаёт больше проблем, чем возможностей.
alexzzzz
> На этом сюжет заканчивается, что делать дальше, решайте сами.
В этом беда практически всех песочниц. Когда у общества нет цветовой дифференциации штанов, то нет цели!(с)
Один из вариантов придания смысла ковырянию в песочнице - прогресс в чём-то. Основной стимул на все времена - писькометрия получение уровней/ачивок, улучшение шмота/характеристик и т.п. Игрокам нужно удовлетворение от того, что они круче других. В моём варианте (Архитектор) рост уровня мастерства позволяет получать больше возможностей, строить более крутые постройки, получать больше свободы, больше территорий, больше ресурсов денег и славы. Понятно, что в определённый момент можно упереться в потолок, и перестать развиваться. Тут надо думать, чем занять игрока и какие ему в дальнейшем выдавать бонусы, чтобы он мог чувствовать себя первым парнем на деревне.
Вариант с постоянным "превозможением" тоже нельзя прокачивать до бесконечности. В определённый момент может так получиться, что низкоуровневые игроки не смогут находиться рядом с хайлевами, так как на тех прут орды врагов, способных с одного удара вынести любого нуба и не напрягаясь сровнять с землёй его домик из грязи.
Полезность построек вполне можно реализовать на уровне взаимодействия с "ядром" поселения - скрипторванными нпс, выдающими задания на постройку определённых типов сооружений. Можно применять как готовые чертежи/шаблоны, так и некоторый набор обязательных элементов для постройки определённого вида, при относительной свободе в остальном. Например, чтобы получилась кузня, нужно поставить в домике наковальню, горн, корыто с водой, загородку для угля. Для обороны можно строить крепостные стены, башни, оборонительное вооружение. Нужны какие-то алгоритмы для оценки пригодности получившейся постройки для целевого использования, и методика "заселения" построек неписями соответствующих профессий.
Очень интересно сделаны производственные цепочки в 3-4 Сеттлерах. Если перенести подобную механику в кубический мир, то должно получиться неплохо.
>Если можно разорить логово чудовища, то это будет одноразовый квест, который достанется только первым счастливчикам.
Монстры медленно прокачиваются, пока один из них не эволюционирует в босса, и не устроит себе новое логово, которое снова надо расковыривать. Работа стражи и тех игроков, что любят рубиться - пропалывать монстров, вырезая высокоуровневых.
>Главное вовремя успокоиться и перестать наращивать мощь набИгаторов, иначе игрок может надорваться и бросить.
Сделать так, чтобы уровень набИгаторов стремился к функции от экономической успешности города: чем лучше дела - тем толще партизаны. Недосмотрел, разорили, разграбили - сильные мобы плюют и уходят.
>может так получиться, что низкоуровневые игроки не смогут находиться рядом с хайлевами,
Мир естественно разделится на зоны: вокруг мухосрансков будут слабые монстры, вокруг процветающих городов - сильные. Где корованов мало - грабителей нет. Где корованов дофига - грабители лютуют.
Нубы спавнятся в мухосрансках и идут к успеху, постепенно переезжая в столицы.
Programmer777
> На DirectX 9 будет работать?
Нет.
Unity начиная с версии 2017.3 выпилила поддержку dx9...
Так что, за сим и было принято решение в пользу массивов текстур из dx10/opengl3.
СерыйМыш
> По объёму памяти неоднозначно. Вроде бы почти 3 миллиона кубов, но 200+Мб всё равно как-то дохрена. Если даже отдать половину на собственные заморочки движка, 40-50 байт на блок... И это без физики/механики.
Ну там на самом деле не 3 миллиона.
3 миллиона блоков которые не являются типом "Air" (не указал в статистике:().
Если учитывать блоки воздуха, то получится больше:)
1594 * (16*16*16) = 6529024 кубов, если уж быть совсем точным.
Блоки воздуха тоже память занимают..
Блоки монолита, контачащие только с блоками монолита, тоже должны памяти занимать - одно целое размера указателя на весь субчанк 16х16х16. Потому что мобам на конкретный тип породы глубоко по барабану, а игроки тип породы узаЮт только когда докопаются, и это с лёгкостью достраивается на лету по необходимости.
Отсюда, мир должен состоять только из околоповерхностей и не более того.
Если взять видимость 16 чанков (164 метра), то круг поверхности выйдет площадью 16*16*Pi ~ 800 чанков.
Положим средней изрезанности поверхность будет иметь примерно 6 существующих субчанков 16х16х16 на чанк.
Тогда физически существующих блоков = 800 * 6 * 16х16х16 ~ 20 миллионов = 80 мегабайт, если быть безнадёжным оптимистом.
А для рендера это, наверно, требует LODов - для дальних чанков один меш на 4 чанка, где блоки усреднены в группы по 2х2х2. И дымку погуще, чтобы не так в глаза бросалось :D
Ну а так, вот мои любимые 3 полные сферы, радиусом в 128 блоков каждая (1 любой блок == 2 байта):)
После 10 секунд работы GC:
Самая тяжёлая сцена, полная загрузка (не генерация) за 20 секунд на i5 и обычном hdd.
Кстати, после компиляции проекта в натив с помощью il2cpp (unity 2018.1.0b1), общее потребление ОЗУ значительно снижается.
Т.е. последние 547mb смело можно делить на ~2.
Также производительность относительно операций с блоками повышается на 30-40%.
Я пока работаю над корректной сборкой под натив, т.к. сейчас приходится делать даунгрейд до C# 6 и кучу правок:(
СерыйМыш
> В этом беда практически всех песочниц. Когда у общества нет цветовой
> дифференциации штанов, то нет цели!(с)
> Один из вариантов придания смысла ковырянию в песочнице - прогресс в чём-то.
В Factorio отсутствие цели не проблема. Прогресс есть прямо явный по ходу игры, а цели нет. Раньше была условная цель - построить и запустить ракету, после неё можно было играть дальше, но у многих пропадал интерес. Теперь цели нет вообще и нет причины прекращать игру после ракеты, стало интереснее. Когда надоело, тогда и прекращаешь игру. Она так хитро сделана, что не ставит искусственных целей, цели появляются у игроков сами естественным путём в зависимости от стиля игры и уровня развития. Иногда появляются пачками, что не знаешь, за что хвататься.
Cheb
> Отсюда, мир должен состоять только из околоповерхностей и не более того.
Я об этом же писал, когда речь шла об оптимизации. Незачем грузить то, что не видно.
Мало того, во многих случаях даже хранить это незачем. Недра прекрасно можно генерить на стороне сервера по ходу раскопок, и отдавать клиенту только дельту. Пещеры и прочие подземные структуры хранить с самого начала как внешние стенки, но клиенту не показывать до тех пор, пока игрок до них не докопается.
> Если взять видимость 16 чанков (164 метра), то круг поверхности выйдет площадью
> 16*16*Pi ~ 800 чанков.
> Положим средней изрезанности поверхность будет иметь примерно 6 существующих
> субчанков 16х16х16 на чанк.
> Тогда физически существующих блоков = 800 * 6 * 16х16х16 ~ 20 миллионов = 80
> мегабайт, если быть безнадёжным оптимистом.
Какая-то странная математика. 16 чанков по 16 блоков = 256 блоков. Какого размера блок, что получилось 164 метра?
6 субчанков это ландшафт высотой 96 блоков. Чтобы так исковырять местность, надо быть очень настойчивым.
Если брать за видимые поверхности в среднем две полные грани куба (чанка), то полезных данных в каждом субчанке остаётся 16*16*2, что даёт 800*6*16*16*2 ~ 2.5 миллиона видимых блоков, минимум 2 байта на каждый блок (форма+положение+материал) итого 5 Мбайт. Компресиия однородных данных даёт примерно десятикратный выигрыш, итого 500 Кбайт. На скорости в 1 Мбит/с понадобится примерно 4-5 секунд, чтобы это добро закачать.
Понятно дело, что ещё примерно столько же могут весить дополнительные игровые объекты, но и это не проблема, разовая подкачка местности происходит только в момент подключения или при телепортации, 10 секунд можно и подождать. А если схитрить и грузить как в майне - по спирали от центра, то и того быстрее.
Подкачка обычно идёт с упреждением в 1 чанк в сторону движения, для худшего случая это два ребра : 16+15=31 чанк.
Тут уже дела получше: 31*6*16*16*2 = 95232 видимых блоков. Примерно 20 килобайт в сжатом виде.
По моим расчётам можно играть даже на скорости в 512 Кбит/с, то есть с хренового 3G модема.
В памяти клиента и сервера тоже вряд ли нужны данные в распакованном виде. Для мобов достаточно карты высот и просчитанных проходимых участков в радиусе видимости игроков. Что не видно - выгружаем. Мир оживляем только в радиусе 8-10 чанков от игрока, остальное стоит в заморозке.
Вокруг игрока можно держать пятак 3*3 чанка полностью загруженным, остальное лишнее. Работу схем/механизмов надо делать вообще отдельно от массива блоков, на собственных структурах. Единственная трудность - если механизмы двигают/разрушают блоки, но и с этим можно справиться.
Резюме: грамотное проектирование решает )
>Какого размера блок, что получилось 164 метра?
Беру идеал AoS: блок 64 сантиметра, персонаж высотой 3 блока (2 присев), можно спокойно бежать через ступеньки в 1 блок, не подпрыгивая.
Также, в Террарии (игра идеальная, но, увы, 2д) персонаж имеет размер 3х2 блока.
>6 субчанков это ландшафт высотой 96 блоков. Чтобы так исковырять местность, надо быть очень настойчивым.
Я брал худший случай: поверхность, неудачно ложащаяся на границы субчанков, плюс дофига пещер.
Опять же, вспоминал ту же AoS: там лимит по вертикали очень большой (больше границы видимости), и есть пара карт, на которых он используется (вниз, до воды, целая пропасть). Опять же, некоторые эксплойтят это в режиме зомби-выживания: выбирают класс коммандо, выбирают парашют, и быстро строят башню в сотню блоков высотой или больше. Даже когда игроки-зомби её заметят и подроют - хитрожопый парашютист начинает спускаться с такой верхотуры медленно-медленно, да ещё и носится по всей карте, а зомби вынуждены за ним ломиться по сильно пересечённой местности.
>Для мобов достаточно карты высот и просчитанных проходимых участков в радиусе видимости игроков.
Можно сделать битовую карту проходимости блоков, 512 байт на субчанк.
>Резюме: грамотное проектирование решает )
Воистину.
Я, лично, хочу сделать lockstep где все клиенты выполняют мир синхронно, с хитрой лагокомпенсацией, передаются только инпуты, а ИИ выполняется только на сервере. Но улита едет когда-то будет.
Тема в архиве.