wingblack

wingblack

На Пикабу
Дата рождения: 27 июля 1986
поставил 9386 плюсов и 9186 минусов
отредактировал 43 поста
проголосовал за 69 редактирований
Награды:
За неравнодушие к судьбе Пикабу Взять и собраться: вернем Пятничное [мое]! За победу в продуктовом сёрфинге 5 лет на Пикабу
112К рейтинг 197 подписчиков 228 подписок 103 поста 28 в горячем

Как я копался в сохраненке кубической песочницы.

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

В посте приведены данные годичной давности.


Год-два назад я увлекался игрой в такую кубическую песочницу как Starmade.

Игру пишут на Java (номер версии игры до сих пор не переступил цифру 1.0), графический движок LWJGL, и это можно было бы назвать клоном Minecraft (движок тот же и тот же "кубизм"), если бы это не было космической песочницей с свободой передвижения по всем трем осям.

Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост

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

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


Сразу скажу, что программист из меня тот еще - раз в пол года по интересу делаю что-нибуть уровня логера веб-чата. Ранее для одного из серверов StarMade на PHP делал генератор страницы с рецептами крафта на основе конфига сервера для облегчения жизни игроков.

Случилось мне пересечься с группой таких строителей.

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


Ассортимент форм блоков используемых для решения данной задачи представлен на картинке.

Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост

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


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


Перейдем к разбору.


В первую очередь для создания моей программы представляет интерес два файла, которые нам отправляет игровой сервер:

ServerName.properties - список с идентификаторами (именами) и номерами блоков

ServerName.xml - файл XML формата с описанием, наверное, всего что клиенту игры следует знать, сюда включается описания свойств каждого используемого типа блоков на сервере: иконка, текстура, масса, max HP, броня, геометрия, можно ли блок включить и большое число других малопонятных свойств. В этом файле блоки обозначаются по имени, а игра хранит блоки как цифры, поэтому предыдущий файл тоже важен.

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


В игре отстроенный корабль можно сохранить в виде Blueprint-а, и потом его можно либо заспавнить админскими командами, либо "купить" за ресурсы или игровую валюту.

Основным моим объектом интереса и были блюпринты.

Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост

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

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

Для моих целей были интересны header.smbph (файл статистики) и DATA (сами блоки). Кроме папки DATA также могут быть папки с "вложенными блюпринтами" - на корабле могли быть турели, которые по сути сами являются отдельными кораблями. По ТЗ такой случай не рассматривался.


header.smbph

Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост

Тип объекта - поддерживаются такие объекты как: планета, астероид, станция, корабль, магазин, "неизвестно".

Границы - координаты стен "коробки" в которую поместится корабль, центр корабля и коробки находится в блоке с координатами (0,0,0), это первый блок корабля при постройке и является его ядром.

Массив статистики, собственно, содержит информацию о типе и количестве блоков в корабле.

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


logic.smbpl

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

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


meta.smbpm

Тут хранится информация о пристыкованных объектах (турели и доки).

Также, судя по описанию, тут еще много чего может храниться, вплоть до сериализованных объектов Java. Для меня тут черная магия.


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


Cама большая работа была с папкой DATA

Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост

Тут хранятся файлы-чанки с информацией о блоках.

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

имя.X.Y.Z.smd2

Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост
Такая структура разбивает кубик 256^3 на 16^3 кубиков со стороной в 16 блоков.

Индексы чанков  - показывают чанк с каким номером должен быть в этом месте, -1 если пусто.

Timestamp - время последнего изменения.

Размер чанка и Размер сжатого чанка - чанк всегда имеет размер 5120 байт (для рассматриваемой версии игры), при этом "лишнее" место оставшееся после сжатия забивается нолями.

Данные с блоками - после распаковки дает массив размера 16^3 с элементами по 3 байта.


Лично меня структура файла немного смутила - на лицо дублирование значений да и вдруг сжатый чанк не уместится в отведенное место. Возможно это был компромиссный вариант на то время.


В зависимости от типа блока его кодирование немного отличается.

Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост

В первом 3 бита отвечают за направление "лица" блока.

Во втором и третьем два бита отвечают за поворот "лица" по часовой стрелке, остальные - за его направление.


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

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

И еще о координатах - в Blueprint блок с координатами (0;0;0) находится в центре чанка.


На этом обзор формата хранения я заканчиваю.


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

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

Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост
Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост
Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост
Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост
Как я копался в сохраненке кубической песочницы. Gamedev, Тыжпрограммист, Starmade, Песочница, Рукожоп, Длиннопост

Итог:

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

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

В сухом остатке - файл с константами и типами данных , и файл с функциями для вытаскивания и запихивания данных.


Если кому интересно, то можно вот тут посмотреть описание формата Blueprint данной игры на английском языке (часть информации могло устареть)

http://www.starmadewiki.com/wiki/File_format

https://starmadepedia.net/wiki/Blueprint_File_Formats

Показать полностью 11

Трейлер "Очищенный: Возрождение Картошки"

Перчатки с Али ты немного подожди

Подсмотрел у знакомого кевларовые перчатки, говорит ни стекло не берет, ни ракушка, брал на Али.

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

Перчатки с Али ты немного подожди AliExpress, Почта России, Посылка, Доставка, Кевлар, Перчатки, Длиннопост

Перчатки вообще-то одинаковые, просто фото криворук делал.


Не обошлось без переживания за доставку. Продавец отправил сразу, а вот на въезде в Россию посылка зависла.

24 дня посылка висела в где-то в отстойнике, впрочем как обычно. Всего посылка доставлялась 32 дня.

Перчатки с Али ты немного подожди AliExpress, Почта России, Посылка, Доставка, Кевлар, Перчатки, Длиннопост

Чтобы не превращать пост в очередной плачь - короткий обзор.


Приятная резинка (хи-хи), руке комфортно.

Снаружи, правда, торчат небольшие петельки и пеньки в количестве 3-5 на перчатку. В целом впечатление о качестве хорошее (по такой-то цене).

Перчатки с Али ты немного подожди AliExpress, Почта России, Посылка, Доставка, Кевлар, Перчатки, Длиннопост
Перчатки с Али ты немного подожди AliExpress, Почта России, Посылка, Доставка, Кевлар, Перчатки, Длиннопост

Перчатка сделана из вроде бы обычной нити с вплетением проволоки.

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

Перчатки с Али ты немного подожди AliExpress, Почта России, Посылка, Доставка, Кевлар, Перчатки, Длиннопост

Испытания пока не проводились.

Ссылка на перчатки https://ru.aliexpress.com/item/1-Pair-kevlar-Gloves-Proof-Pr...

Показать полностью 5

"Символ России". Сочи накручивает голоса через школы.

Недавно на Пикабу уже была новость о том почему на публичном голосовании "Символ России"  Казань резко выбилась вперед.


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


Скорее всего, это устное распоряжение Министерство образования и науки Краснодарского края.


На данный момент Сочи опережает Казань менее чем на 700 голосов.

Недопонимание

Имена и некоторые события изменены.


Позднее утро, Васю вызывает один из начальников.

- Вася, пойди в 35-тый, настрой там чтобы все работало.

Вася идет в 35-тый кабинет, включает все и вспоминает что в подсобке тоже нужно включить,  а то "пасьянс не сойдется", а ключей к подсобке не выдали. Возвращается.

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

- Вась, ты сегодня к Маше поедешь? А то бы чуть пораньше съездил пообедать, заодно и ключи у неё взял.

- Нет, я тут обедаю.

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

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

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

Через час Васе звонит Маша.

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

Показать полностью

Дельфины в светящемся планктоне

Собака чуть не зарезала свою хозяйку

В США в это среду в больницу поступила женщина с ножевым ранением.

Женщина утверждает что это сделала её собака.

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

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

В результате женщина получила резанную рану руки длинной 12 см.

К счастью, нервы не были задеты.

"Она очень милая, и убьет вас со всей возможной добротой", - сказала хозяйка о своей собаке.


В полиции заявили что это будет расследовано как "подозрительный несчастный случай"

"Очевидно, мы не можем выдвигать никаких обвинений против собаки".


Источник: http://ktla.com/2016/09/22/dog-stabs-woman-no-thats-not-a-ty...

Губка из кофе удаляет тяжелые металлы из воды

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


Исследователи из Италии разработали губку на основе кофейной гущи способную убирать ионы свинца и ртути из воды.

За 30 часов отстаивания губка убирает до 99% ионов.

Более практичный тест с проточной водой показал, что губка способна убрать до 67% ионов свинца и ртути.

Губка из кофе удаляет тяжелые металлы из воды Перевод, Кофе, Кофейная гуща, Вторсырье, Исследования, Металлы, Фильтр, Губка

Пруф http://phys.org/news/2016-09-coffee-infused-foam-contaminate...

Отличная работа, все прочитано!