Показаны сообщения с ярлыком игры. Показать все сообщения
Показаны сообщения с ярлыком игры. Показать все сообщения

вторник, 21 июля 2015 г.

Чего, возможно, можно искать в песочнице, что считать выживанием, в принципе?

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

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

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

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

Вот что действительно бы хотелось, это чтобы эти все штуки могли получаться сами собой. Я не знаю, генерироваться, придумываться, конструироваться игроком в разумных пределах, не нарушающих баланс. Подобно тому, как можно из любых блоков построить себе иридиевую избу с золотыми ставнями. Чтобы была экономика и влияние местную флору и фауну, конечные ресурсы, и, главное, чтобы продукцию было куда девать. Но, наверное, это нечто очень уж глобальное, и лучше и правда делать это в бесплатном симуляторе с хорошей графикой. Но. Во-первых, в нем уже и так куча игроков, которые все уже забрали себе, во-вторых, все происходит медленно. То есть, есть причина искать другой способ. Но сделать ускоренный симулятор симулятора с классной графикой... да, может быть. В общем, интересный вопрос: возможно ли теоретически вместо создания контента дать достаточно вольный набор законов/правил, чтобы оно как-то само... генерировало мир (это уже умеют), наполняло его интересностями (это уже умеют, кто-то лучше, кто-то хуже), возможно, создавало уникальных обитателей, приспособленных для этого мира, а потом давало возможность игроку из всего найденного придумать что-то свое. Не только построить из разноцветных кубиков себе хатку, но и сделать таким же образом работающие вещи, которые могут из А делать Б и так далее? Нет, я понимаю, продумать и написать код для такого - невероятно сложно. Еще сложнее придумать под это необременительный интерфейс. Абсолютно неподъемно превратить это в модельку для отображения на экране. Поэтому вряд-ли это путь. Но может, тогда, можно сделать добавление фич более простым занятием? Или что-то среднее?Чего, возможно, можно искать в песочнице, что считать выживанием, в принципе?Чего, возможно, можно искать в песочнице, что считать выживанием, в принципе?

понедельник, 20 июля 2015 г.

Немного анализа подхода к продуктивности. И снова про идеальную песочницу.

Конец очередной недели. Сплю все так же - обычно раньше 11, иногда раньше 12. Эффект интересный - сонливость днем пропала, вроде-бы появилась энергия. Правда, она иссякает к вечеру, даже я бы сказал, довольно быстро, уже часам к 7 (хотя 12 часов это вполне нормально, если смотреть с другой стороны). Но пока правильный сон рулит. Я вижу меньше проблем с прокрастинацией на этой неделе.
Правда, несмотря на какое-то приподнятое настроение, в конце недели всякий анализ реальных цифр уже не так радует, повторяя результат прошлой недели. И дело не в том, что "не успел", а в том что не очень много времени попадает в фокус. Большие перерывы между подходами, которые растягиваются до 15-30 минут, сожрали все время, я полагаю. А были они из-за кучи разных вещей, которые происходили дома. То появился аквариум с рыбами, то еще больше рыб. Потом с неба упала еще и черепаха. В общем, домашние во всю пытаются кого-то понянчить и склонны к неконтроллируемому накоплению всего, что плохо лежит и выгодно покупается. Пока не придумал, как это лечить.
На фоне всего этого роение мыслей по поводу того, чего бы мне хотелось попробовать реализовать (а страшно хочется сделать свой клон Minectaft почему-то) достигает пика. Однако, не хочется делать тупой клон. В голову лезут всякие разные идеи, начиная с объяснимого сюжета и заканчивая какой-то другой системой крафта. Хотя, в MC, она, возможно, наиболее удачная, потому что сочетает как визуальный "рецепт", так и компоненты, и их размер оптимален - от 4 до 9 предметов в квадратной матрице. Это относительно просто запоминать, иногда выглядит очень наглядно и дает огромное количество вариантов. Правда, в ней все очень по-игрушечному, но для игрушки это как раз хорошо. В общем, мне нравится этот подход, но во-первых его не хочется копировать, во-вторых, хочется чего-то серьезнее, реалистичнее, что-ли, выдумать.
Да и вот, с чего все начинается там? Вы появляетесь в случайном месте и в руках у вас есть волшебное ничего, чем можно рубить деревья, копать землю... Как это рубить деревья ничем? Вот мне тоже никак не лезет в голову этот факт. Ладно копать землю руками, в принципе, если очень захотеть, можно. Но голыми руками сделать из дерева бревна, а из бревен - планки...
Потом вы делаете из нарубленного голыми руками дерева деревянный топор. Голыми руками. Возможно, помогаете себе зубами и ногами. В конце концов, вы получаете деревянный топор и, самое важное - деревянную кирку. И этой деревянной киркой вы добываете себе первый камень. Из трех огромных камней в один кубометр объемом и пары палок вы голыми руками можете сделать себе теперь уже каменный топор. Да, именно так. Я еще забыл сказать, что вы эти три кубометра камня носили в карманах, пока шли от пещеры к своему верстаку. А может и больше. Ведь деревянной киркой можно не один десяток кубометров камня отрезать. Всего, при желании, вы можете переносить, по-моему, 4*10 стеков по 64 кубометра камня. 2560 кубометров камня в карманах! Если это гранит, вы способны носить в карманах 6656 тонн гранита. Нет, я все понимаю, иначе было бы очень сложно и неинтересно, наверное. Но, вообще-то, такое не очень хочется повторять один в один, хотя это офигенно играбельно.
Да, еще. Если взять бревно и обжарить его в печке, вы получите древесный уголь, который ничем не хуже каменного, то есть горит так же прекрасно. И лучше, чем сами бревна. А если насадить уголь на палку, можно получить вечный факел. В Minecraft очень мало законов из реального мира, которые соблюдаются.
На самом деле многие вышеперечисленные вещи там правили с помощью хардкорных модов. Факелы, которые делались из пропитанных креозотом кусков шерсти. В Terrafirmacraft они со временем гасли. Кто-то даже пытался ограничить размер инвентаря. Но это все полумеры. Натягивать на полностью выдуманную вселенную реальные законы природы - неблагодарное занятие.

воскресенье, 5 июля 2015 г.

Проблемы игровых миров и их моделирования с точки зрения дилетанта

Еще одной темой, которая меня волнует в сфере генераций мира для игры, это картина его целостности. Вот взять случайно сгенерированный бесконечный мир Minecraft - в лучшем случае, существует мод, который позволяет как-то разместить на нем "климатические" пояса, то есть, скажем, есть экватор, полный сухих пустынь, из которых, двигаясь на юг или север можно попасть в тропики, умеренные широты, затем тундры и, наконец, в заснеженные места. И потом - в обратном порядке. Если такой мир замкнуть, появится полное ощущение движения по сферической планете. Это полностью соответствует ожиданиям. Однако.
У мира всегда есть история. Когда-то на нем могла быть весьма бурная геологическая жизнь с вулканами, были какие-то места обитания древних существ, где они умерли и как-то их следы должны находиться. В подходе с полной случайностью это обычно проявляется в виде плавно размазанных по миру древних шахт и сокровищниц, каких-то, таких же случайных, пещер и все такое прочее. Мне это не очень нравится, потому что "целостность" пропадает. Было бы куда интереснее находить заброшенные деревни, рядом с которыми можно найти следы деятельности жителей в виде тех же шахт и т.п.
В этом смысле интресно выделяется, как наиболее яркий пример, Dwarf Fortress, где случайно сгенерированный мир перед, собственно, игрой, длительное время переживает в ускоренном темпе какой-то исторический процесс. Появляются и исчезают цивилизации, народы, цари и герои, свидетельства о которых оказываются закопаны где-то в глубинах в виде древних легендарных артефактов, руин старых городов и такого прочего. И практически никогда у вас не будет двух одинаковых историй. Это по-своему интересно, но ставит сложный вопрос - как не генерировать весь мир полностью, и в то же время создать для него последовательную и целостную историю, которая может быть получена путем изучения мира? И, конечно, просто поставить вопрос, не пытаясь ответить на него, я не могу :)
Во-первых, можно пытаться сделать вид, что история была, но создать только ее конечные результаты. Скажем, изначально вписать в некоторые переменные для всего мира его возраст и уровень, до которого что-то там развилось и умерло. Можно там же создать и записать функцию, которая сможет вычислить распределение останков этого прошлого в чанках/кубиках этого мира и потом генерировать чанки, как это и предполагается - только там, где кто-то на это смотрит.
Второй вариант - это повторить DwarfFortress, но если детализовать это до уровня каждого мелкого блока, ваш сгенерированный мир превратится в многотерабайтный ужас для вашего жесткого диска. Это, как по мне, совсем не круто.
Ну и третий вариант это нечто смешанное. Мне давно приходит на ум, что любители писать игры в мир из кубиков могли бы сделать его более динамичным и интересным, не рассматривая его только на уровне "блоков" и "загруженный/выгруженный чанк - как набор блоков". Я имею в виду, что можно постепенно, по мере удаления от наблюдателя, уменьшать детализацию мира. Ведь, по сути, кусок 2х2х2 блока есть сущность, которая состоит из 8 блоков, и, при правильном подходе, наверняка можно смоделировать процессы внутри более крупных "блоков" так, чтобы при обратном преобразовании в отдельные части создавалась иллюзия правдоподобности процессов. По мере удаления можно сжимать эти "двублоковые" блоки дальше, вплоть до уровня чанков, 2х2-чанков и т.п. И, наверняка, на таком уровне можно даже моделировать какие-то процессы глобального уровня, не загружая каждый чанк в память для рассчетов, а только представления этих групп. И кто-то мне уже подсказывал, что для вокселей есть какой-то такой алгоритм, который работает примерно так же. Для теста этой концепции, конечно же, надо было бы сначала написать такой себе маленький кубический движок и найти пример такого процесса, чтобы оценить производительность. Да, кстати, это могло бы позволить обеспечить очень широкую область видимости не вызывая загрузку в x^2 большего количества чанков/блоков целиком, просто чтобы нарисовать их. Ведь давно применяется метод уменьшения детализации с расстоянием, почему бы и тут не поступать так? :) Мне даже кажется, что для проверки концепта не нужно даже писать рендерер, можно ограничиться простейшей моделью без всякой визуализации, чем и собираюсь заняться в ближайшее свободное время.

пятница, 3 июля 2015 г.

Про OpenGL

Как я упомянул в предыдущем посте, хочется изобразить летающие шарики в объемном виде. Для этого вчера я попытался нарисовать всего один шарик с помощью lwjgl 2, у меня получилось, я изобразил красное пятно на белом фоне, но на это у меня ушла пара часов. В связи с чем есть кое-какие вопросы.
Во-первых, стало ясно, что просто так, с наскоку, OpenGL использовать не получится. Мне очень не хочется писать код, собирая в гугле кусочки какой-то работающей фигни, но не понимая, что она делает. А экспериментировать путем вписывания других значений не очень выходит, потому что результаты бывают совсем интуитивно-непонятные. Так что хотел бы спросить совета, если кто имел опыт, чего бы такого хорошего почитать, чтобы понять побольше, и чтобы не про старые версии OpenGL. Потому как я уже где-то нашел, что с версии 3.0 все стало как-то немного иначе.
Во-вторых, у меня теперь есть большой вопрос, на чем писать. В принципе, для Java есть несколько реализаций биндингов OpenGL: JOGL, LWJGL2, LWJGL3, который использует JGLFW. От этого уже начинает плавиться мозг, но похоже современнее всего из них LWJGL3, который, правда, еще не зарелизился. Есть другой вариант - забить на Java и для полнейшего прогружения мозга в новую среду писать на С++, чтобы можно было совсем уж заниматься тем, что в языках с управляемой памятью делать не получится (ну, для шариков это не обязательно, но для кубиков может понадобиться). Правда, на C++ я не писал уже давно, и писал раньше максимум хелловорлды.
Ну и в третьих, если остаться на Java, то стоит ли этот самый LWJGL3 уже использовать... или JOGL внезапно лучше, судя по его описаниям?
Кстати есть один плюс в Java для опенсорца - если такое писать, то зависимости, как правило, не приходится качать руками, если использовать Maven, который умеет затянуть все сам. А вот как с инфраструктурой для C++, которая давала бы такие возможности, как maven - уже непонятно.

Относительно прошлого поста и перевода цветовой температуры в RGB, получился такой вот код: https://gist.github.com/stasikos/06b02d18f570fc1eaa9f. Там есть маленький тест, который генерит картинку с разной температурой, результат кажется мне адекватным, так что спасибо тому чуваку за его полиномы. :)

четверг, 2 июля 2015 г.

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

foo-5

вторник, 30 июня 2015 г.

Хобби просто для мозга

Оказалось, писать каждый день как-бы сложно. Если в начале идеи в голову лезли просто пачками и я не успевал их записывать, то теперь уже все, как говорят у нас, "пасочки".
Вчера я даже начал размышлять и написал какой-то пост, но выбросил его в мусорник. Не вписывался в концепцию. Но сегодня роились идеи в голове и надо бы их упорядочить. Дело в том, что пока я играл во всякие Minecraft и KSP у меня из головы не вылезала мысль - так или иначе моддеры пытаются добавить хардкорного реализма в игру. Какие-то реальные физические законы, иногда даже не совсем реальные, но в теоретически возможные технологии, в общем, добавить побольше хайтека пытаются создать. Как тот же IC2/GregTech в Minecraft или KSP Interstellar. Иногда у них хорошо получается, но все равно не исчезает ощущение, что это как-то прикручено скотчем и приклеено жвачкой, ведь монолитное ядро игры как-бы не предполагало такого геймплея. В итоге все жутко тормозит, а ведь их еще и пишут на переносимых языках с байткодом. Хотя, возможно, многие проблемы производительнсти как раз возникли из-за невозможности оптимизировать совсем неродные вещи. Так бывает.
Поэтому меня некоторое время не оставляет мысль, что надо думать над 99-м клоном Майнкрафта (ну, на самом деле я как-то смотрел, сколько есть таких игр вообще и их там насчиталось порядка 90). Чтобы все уж сразу было задумано как в жизни и с рассчетом на размашистые проекты игрока в стиле "Железного человека", который из говна и палок построил звезду смерти и улетел. Ну, точнее некототорого количества игроков, потому что масштабные проекты в одиночку это очень накладно и все-таки когда-нибудь надоет.
Это еще не значит, что его можно будет начинать писать, но концепции продумываются сильно заранее. И первое, что мне пришло на ум, это посмотреть на недостатки того, что уже есть. И, конечно, я не смотрел на 99 клонов Майнкрафта, среди которых, почему-то, оказалась и KSP. Но некоторые из них я посмотрел на уровне описания задумки.

Итак, начнем с того, чего не хватает в KSP: Все замечательно, кроме того, что, во-первых, сложные аппараты страшно тормозят, во-вторых, статическая, неизменяемая солнечная система позволяет поиграть один раз, все изучить и уйти отдыхать надолго. Кроме того, система местами обладает необъяснимыми свойствами с точки зрения здравого смысла (например, неиспаряющийся лед Минмуса, который по всем данным должен быть из льда). Выдумана она так, чтобы определенным образом создавать геймплей с прогрессирующей сложностью. Что полезно для получения представления о космических полетах в принципе, но бесполезно для более глубокого изучения темы.

Что касается Minecraft: он хорош для того, для чего придуман - для средневековых построек на плоской бесконечной карте, походов в другие измерения и убивания дракона. На него уже давно пытаются прикрутить космические полеты на Луну и Марс (хотя Overworld не является в должной степени похожим на Землю), которые являются еще одним способом телепортации. Также пытались сделать так, чтобы блоки не могли просто висеть в воздухе, добавляя гравитацию и для них тоже, чтобы шахты осыпались, а крыши домов проваливались. В какой-то ограниченной степени это получалось. В общем, там есть десятки модов, которые пытаются сделать, чтобы было "как на самом деле". Даже добываемые из под земли ресурсы переставали быть случайно размазанными по всей карте, собираясь в обширные и богатые месторождения. И постоянно чего-то не хватает. Люди пытаются сделать воздухоплавание, мореплавание, космонавтику, термоядерные реакторы, настоящее электричество, и это все на фоне меланхоличного запиливания красивых флажков в оригинальную игру. Я так подозреваю, что некоторым из них нужно Life3d, эдакий играбельный, но все-таки симулятор. Хотя ведь и магические вещи выдумывают.

Вот и стал я думать, а нельзя ли придумать такой игровой движок, который бы позволял все что угодно именно для таких вот любителей? :) Ну, чтобы там хоть и был фактор случайности, но только в такой мере, чтобы бывали неожиданности. Остальные неожиданности должны бы просто вытекать из начального "семени", как это и принято. Ведь куда ни копни - везде в этом есть интересные задачи, расширяющие вполне настоящие знания о том, как этот наш мир, собственно, устроен.
Как-то ради интереса я даже попробовал написать генератор "случайного набора звездных систем". Казалось бы, что может быть проще - делаем N случайных звезд, впуливаем вокруг них M случайных планет с K случайных спутников. И всё, типа, готово. Но получится, на самом деле, слишком много случайностей. Во-первых, количество и масса планет все-таки зависят от массы самой звезды. Во-вторых, их орбиты не могут быть совсем уж случайными, а должны оказаться такими, чтобы возникающие между ними силы не изменяли эти самые орбиты до неузнаваемости. Это я еще не касаюсь того, что это должны быть за планеты. Будет ли у них атмосфера? Из чего они будут состоять? Как быстро они будут обращаться? Какова температура на этих планетах? Будет ли там вода? Могла ли на них возникнуть какая-то жизнь? И если да, то как давно? :)

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