LINUX.ORG.RU
ФорумTalks

Размеры игрового мира


0

1

В процессе переписывания кода игрушки-платформера-почти-клона-terraria возник вопрос - «какого размера делать карту?»

Из чего исхожу -

  1. Карта должна быть достаточно большой, чтобы
    • Можно было разместить месторождения большинства природных ресурсов\пород.
    • Чтобы игроку хватало места для жизни (не было крика «мало»).
  2. Карта должна занимать не очень много места на диске.

В результате получились такие расчеты:

┌──────────────┬──────────────────────┬─────────────────────────┬───────────────────────────────┐
│ Размер файла │ Размер карты (метры) │ Пешком из конца в конец │ На макс. скорости транспорта* │
├──────────────┼──────────────────────┼─────────────────────────┼───────────────────────────────┤
│ 512 Мб       │ 20 480 х 3 240       │ 5 часов 40 минут        │ 21 минута                     │
│ 1 Гб         │ 29 000 х 4 620       │ 8 часов                 │ 30 минут                      │
└──────────────┴──────────────────────┴─────────────────────────┴───────────────────────────────┘
*В игре планируется транспорт

Что скажете? Хватит? Или думать над сокращением кол-ва информации на блок? В принципе могу попробовать увеличить размеры карты процентов на 50 в ущерб реалистичности.

Ответ на: комментарий от Gary

Да, файл карты сжимается даже обычным zip-ом процентов на 70, но его все равно нужно распаковать перед началом игры - у меня динамическая подгрузка «зон» 40 х 30.

AlexCones ★★★
() автор топика
Ответ на: комментарий от PolarFox

А как оно сделано в minecraft? Автоматически генерируется далее, если подойти к границе? Место на харде не резиновое, все равно придется лимит ставить. Так какая тогда разница, когда генерировать - при подходе или заранее?

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

В крафте вроде ограничение на координаты, куда юзер пойти может.

А вообще, смотри в сторону сжатия и минимизации сохраняемой информации.

devl547 ★★★★★
()
Ответ на: комментарий от AlexCones

> А как оно сделано в minecraft?

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

Автоматически генерируется далее, если подойти к границе?

Да.

Так какая тогда разница, когда генерировать - при подходе или заранее?

Некоторые игроки будут подходить к границе, некоторые нет. Некоторые будут исследовать только одно направление, другие шастать во все стороны.

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

PolarFox ★★★★★
()
Ответ на: комментарий от AlexCones

> Да, файл карты сжимается даже обычным zip-ом процентов на 70, но его все равно нужно распаковать перед началом игры - у меня динамическая подгрузка «зон» 40 х 30.

Порезать файл карты на вот эти небольшие «зоны» и пожать каждый из них отдельно.

Relan ★★★★★
()
Ответ на: комментарий от devl547

В крафте вроде ограничение на координаты, куда юзер пойти может.

У меня их не будет - я имитирую целую планету и подойдя к правому краю, очутитесь на левом.

А вообще, смотри в сторону сжатия и минимизации сохраняемой информации.

В смысле при сохранении на диск?

По сути я использую два поля Int по 4 байта на блок - это тип блока и номер текстуры (каждый тип блока может использовать несколько типов текстур - чтобы не было заметно повторов). В принципе я могу второй Int заменить на Byte - размер файла уменьшится на 40%. Так же скорее всего в игре не будет более 65 000 типов предметов, поэтому первый Int тоже можно заменить на 2 байта - итого уже не 8 байт на блок, а 3. Сейчас проведу новые расчеты.

AlexCones ★★★
() автор топика

Имхо нужно делать именно так:

  • Карта генерируется по мере прохождения
  • Когда начинается подход к границе карты, появляется некий фактор, мещающий идти дальше, но не банальные стены и прочее. Ну или телепортация в другой конец карты, Земля же круглая
derlafff ★★★★★
()
Ответ на: комментарий от derlafff

>появляется некий фактор, мещающий идти дальше

не интересно. Надо сделать мировой океан, подождать много игровых лет и начать войнушку :3

devl547 ★★★★★
()
Ответ на: комментарий от AlexCones

Ландшафт генерится с использованием ГПСЧ, так? Если ему давать одно и то же стартовое значение, то ландшафт будет получаться один и тот же. Хранить тогда надо будет только разницу, если игрок может на ландшафт влиять.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

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

Проблема.

Это еще одна причина, почему я выбрал предварительную генерацию - стремление правдоподобия: http://forum.web.ru/viewtopic.php?uid=11776&f=4&t=3842&start=0

Поэтому динамически генерировать ландшафт будет ой как непросто.

AlexCones ★★★
() автор топика

Новые расчеты, согласно оптимизированной структуре хранения:

┌──────────────┬──────────────────────┬─────────────────────────┬───────────────────────────────┐
│ Размер файла │ Размер карты (метры) │ Пешком из конца в конец │ На макс. скорости транспорта  │
├──────────────┼──────────────────────┼─────────────────────────┼───────────────────────────────┤
│ 512 Мб       │ 33 520 х 5 310       │ 9 часов 20 минут        │ 35 минут                      │
│ 1 Гб         │ 51 400 x 8 160       │ 14 часов 20 минут       │ 53 минуты                     │
└──────────────┴──────────────────────┴─────────────────────────┴───────────────────────────────┘

AlexCones ★★★
() автор топика
Ответ на: комментарий от Bad_ptr

Имеете в виду хранить отдельно уже упомянутые «зоны»? Суммарный размер от этого не уменьшится.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>Имеете в виду хранить отдельно уже упомянутые «зоны»?
Нет. Есть например зона каменей. Ну и зачем хранить все камушки? Можно хранить начало и конец зоны. А при загрузке карты, соответственно заполнять зону камнями.

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

разряженные матрицы может?

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

wingrime
()
Ответ на: комментарий от wingrime

>Разряжённые массивы

И

разряженные матрицы может?

Имхо одно ти тоже :-))

Bad_ptr ★★★★★
()

Сегодня инди-девелоперы не запиливают хеллоуворлды, а делают майнкрафты, двухмерные-одномерные и n-мерные. Не сочтите за неуважение. Это только из-за того, что клонов майнкрафта (хотя он не первоисточник) сегодня ооочень много.

o4kapuk
()

См. Dwarf Fortrees. Там размер карты можно выбирать. Так, чтобы на компьютере с атомом вместо процессора поиграть, я выбирал карту меньше стандартной.

Quasar ★★★★★
()
Ответ на: комментарий от derlafff

Можно вообще как в SecondLife сделать - единый GRID, в котором каждый сервер обслуживает свой регион. Если рядом регионов нет - дальше идти нельзя, ибо вода.

Quasar ★★★★★
()
Ответ на: комментарий от o4kapuk

Когда я только начинал её делать до идеи запилить что-то похожее на minecraft было ой как далеко. Первоначально игра запиливалась, чтобы закрыть «дырки» в самописном двухмерном движке. Просто потом увлекся её разработкой.

AlexCones ★★★
() автор топика
Ответ на: комментарий от Quasar

Так и будет, где-то выше я это писал.

AlexCones ★★★
() автор топика
Ответ на: комментарий от Artificial_Thought

Почему торообразная? Просто по идее нижние слои на самом деле будут являться не квадратами, а трапециями.

AlexCones ★★★
() автор топика
Ответ на: комментарий от ptah_alexs

Мерси. Когда-то клал в закладки, потом потерял. Но это поможет только сгенерировать поверхность (у меня все-таки платформер). А мне еще генерировать расположение жил и пород.

AlexCones ★★★
() автор топика
Ответ на: комментарий от radg

В общественность пока не утекала, рабочее название - ранее Everything, сейчас Blocky.

Если что, можете в асю или жаббер стукнуть (профиль), подробней скину одну ссыль.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Потому что поверхность тора сделать проще всего в таких вот случаях. А кстати как изобразить поверхность сферы? при переполнении X координаты инвертировать Y?

Artificial_Thought ★★★★
()
Ответ на: комментарий от Bad_ptr

Зоны не квадратны. Поэтому «зоны камней» физически нет. В данный момент под «зонами» я имею в виду пласты пород и руд.

AlexCones ★★★
() автор топика
Ответ на: комментарий от Artificial_Thought

Варианты - мы дошли направо до границы. Х переполнился, стал 0. Т.е. мы дошли до левого края. Если копать вглюбь планеты, не забывайте, что там раскаленная магма и ядро. Проблема инвертирования Y пропадает.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Пошёл на запад - пришёл с востока это понятно, но вот пошёл на север - пришёл с юга это не однозначно.

Artificial_Thought ★★★★
()
Ответ на: комментарий от AlexCones

а, значит всё ок. Окружность короче. Я думал «двухмерна» это вид сверху. а так как-то что-то непонятное, только ввысь/вглубь и вправо-влево.

Artificial_Thought ★★★★
()

В общем делай так.
Места на винте не жалко, пусть будет большая. ОЗУ примерно чтобы занимать 3Гб, думаю у всех сейчас есть.(у меня 6) Ну и для олдфагов сделать даунгрейд - 512мб в ОЗУ карту низкого качества.
Реалистичность? Пусть лучше будет играбельность.

darkshvein ☆☆
()

Динамически генерируемые ландшафты рулят

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от AlexCones

>Автоматически генерируется далее, если подойти к границе?

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

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от DNA_Seq

нити паутинки в смысле популярные маршруты. Ну и направлять игрока по этим ниточкам

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от Artificial_Thought

Можно и торообразную. Но замкнуть можно во все стороны. И координаты тогда подобрать радиальные.

Quasar ★★★★★
()
Ответ на: комментарий от AlexCones

Тогда получается очень интересно: если действие происходит на маленькой планетке, тогда ежели вкопаться вглубь... ;)

Quasar ★★★★★
()
Ответ на: комментарий от AlexCones

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

VladimirMalyk ★★★★★
()

Из чего исхожу -

Ты забыл третий пункт: карта должна быть достаточно маленькой, чтобы игроку не надоело по ней бегать =).

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.