Моя гостиная, попавшая в Ад.
Теперь в моём конвертере Noesis есть скрипт Roomba. Он отслеживает пылесос Roomba и сохраняет данные трекинга, что позволяет визуализировать эти данные множеством разных способов, в том числе, разумеется, превратить их в рандомизированную карту для DOOM.
Было бы здорово успеть сделать это к 25 годовщине DOOM, но она началась и накончилась, а я всё ещё ждал покупки Roomba 980 на eBay. Идея появилась у меня где-то в ноябре, когда мы с женой изучали разные робопылесосы. Я обнаружил, что в новых версиях Roomba довольно качественно реализован SLAM, поэтому задался вопросом — какие же данные можно получить из него и что с ними можно сделать.
Вскоре я осознал, что у меня есть удобная возможность послужить Тёмному Владыке, породив легион нечестивых алгоритмов и применив их в одной из лучших работ, созданных в его имя. Одновременно я смогу выпустить на волю дьявольский каламбур, способный поразить человечество. Итак, плод трудов моих готов. Узрите существо по имени DOOMBA — полукозлище, полускрипт с нативной двоичной поддержкой самых затратных частей кода, которое я принесу в жертву вместо моего первенца в этот чудесный канун Рождества.
Процесс работы DOOMBA
Возвращение в Ад никогда не было таким простым!
Для того, чтобы воспользоваться DOOMBA и остальным новым функционалом Roomba, необходимо скачать последний Noesis. Зайдите в optionalpluginspython и скопируйте файл tool_roomba.py в pluginspython. В меню Tools конвертера Noesis вы увидите новый пункт «Roomba Tracker». Активируйте его, чтобы открыть интерфейс Roomba Tracker.
Интерфейс Roomba Tracker
Интерфейс позволяет автоматически сканировать LAN на наличие роботов Roomba (необходимо включить вещание по UDP) и отображает инструкции по получению пароля от Roomba. После получения IP Roomba и настройки учётных данных можно приступать к отслеживанию. При запуске трекинга отобразится запрос на сохранение файла .noeroomba. Если вы решите его сохранить, то после завершения трекинга в этом файле будут содержаться все полезные данные.
Я тестировал работу только с Roomba 980, поэтому не могу гарантировать совместимость с любыми другими устройствами Roomba. Однако если даже у вас нет совместимого устройства, вы можете использовать файл .noeroomba из каталога scenes Noesis и поиграться с DOOMBA и другими функциями, связанными с Roomba.
Сгенерировав файл .noeroomba (или взяв готовый), перейдите к нему в просмотре файлов Noesis. У вас появятся новые пункты контекстного меню правой клавиши мыши с выбором типа файла:
Новые пункты контекстного меню, связанные с Roomba
Опция NoeRoomba Merger полезна для объединения нескольких файлов .noeroomba. Иногда при трекинге теряется связь, или его необходимо остановить, потому что Roomba между сеансами работы перезаряжается. Это значит, что можно выбрать генерацию нескольких файлов .noeroomba, а позже соединить их вместе.
При выборе пункта DOOMBA запустится основной интерфейс DOOMBA генерации DOOM PWAD из выбранного файла .noeroomba:
Если оставить для «Seed» значение 0, то уровень будет сгенерирован самостоятельно. В противном случае, если вы подберёте подходящее вам значение, то можно будет сохранить его и использовать заново, параллельно с настройкой других опций. Все опции сверху относятся к расположению врагов/объектов. Сам скрипт написан так, чтобы упростить создание новых типов объектов, а также добавление поддержки других игр на основе DOOM с помощью изменения THING ID. Однако если вы не насколько любите экспериментировать, то можете просто настроить значения, доступные из интерфейса. Также можно изменять списки текстур полов/потолков/стен, и если загрузить DOOM IWAD в Noesis, то вы увидите, что все названия текстур аккуратно перечислены в Data Viewer.
В правом нижнем углу есть множество других опций, влияющих на процесс генерации и упрощения геометрии. Опции в разделе «Advanced» при неверной настройке могут очень серьёзно всё испортить, потому что я не особо их тестировал и не занимался проверкой допустимости значений на стороне движка. Однако и другие опции тоже способны серьёзно навредить, поэтому если вы не уверены, то не меняйте значения по умолчанию. Также учитывайте, что интерфейс не защитит от стандартных ограничений DOOM в области visplane, предметов и т.д.
В качестве бонуса я добавил инструмент «Image to NoeRoomba», который включен только когда переменной ENABLE_TEST_FUNCTIONS в tool_roomba.py задано значение True. Он позволяет генерировать файлы .noeroomba из обычных графических файлов, обеспечивая простой и эффективный способ преобразования картинки в случайную карту DOOM. Не могу обещать, что мои нечестивые алгоритмы, предназначенные для карт Roomba, не обрушатся, если вы будете скармливать им всевозможные случайные данные, но в случае с выбранными мной изображениями система справлялся вполне неплохо:
МОРТАЛ КОМБАААТ!
Надеюсь, вас порадует этот инструмент. Мне он определённо доставил кучу удовольствия! Кто-то может сказать, что он не имеет смысла, но в моём сердце есть вера в то, что Тёмный Лорд сотрёт таких людей с лица Земли и заключит их во вселенную вечного адского огня, а об их страданиях сложат легенды.
В примечаниях к скрипту об этом уже упомянуто, но скажу ещё раз, что для частей, относящихся к протоколу Roomba, полезной оказалась библиотека dorita980. Я бы использовал её напрямую, но Node.js — это полная катастрофа. Также хотел бы поблагодарить Рафаэля Квине за древний код nodebuilder, который включён в этот релиз как часть функционала DOOMBA. Это был один из немногих найденных мной nodebuilder-ов, неиспороченных лицензией GPL.
Автор: PatientZero