TeMHbIu Опубликовано 8 сентября, 2015 Жалоба Опубликовано 8 сентября, 2015 Приветствую вновь! Известны ли на данный момент сообществу какие-либо инструменты для: 1) переноса/копирования чанков* со всем контентом (тайлы, стены, объекты, контейнеры, свет, etc) - В рамках одной карты, - Из одной карты в другую 2) расширения размеров карты. Например, карта создана 32*32 чанка, а в процессе захотелось больше. *Чанк Для относительного удобства навигации, области размером 64*64 тайла объединены в т.н. чанки (см. картинку) Пример взят из модуля Vormantown Как видно, в точке на миникарте с координатами x=25 y=12 (для проекции "сверху" отсчет идет от верхего правого угла) в одном чанке компактно расположился один из этажей пещер дворфов. Соответственно, все объекты в нем расположены в рамках следующих координат тайлов: 1600-1663 по X из расчета [25*64..26*64-1] 768-831 по Y из расчета [12*64..13*64-1] Насколько могу предположить, как минимум один раз подобный подвиг был совершен энтузиастами для переноса 80 (sic!) локаций на карту Arcanum1-024-fixed Это было необходимым условием для создания онлайн-версии (многопользовательской) самого Aracnum. Допускаю, что это было нечто без GUI, использующее напрямую сохраненные карты. Куда копать? P.S. Что кроме распаковки всех *.dat можно сделать, чтобы карта в режиме top-down так не тормозила при скроллинге/масштабировании? Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь
Corvell Опубликовано 8 сентября, 2015 Жалоба Опубликовано 8 сентября, 2015 Приветствую вновь! Известны ли на данный момент сообществу какие-либо инструменты для:1) переноса/копирования чанков* со всем контентом (тайлы, стены, объекты, контейнеры, свет, etc) - В рамках одной карты, - Из одной карты в другую 2) расширения размеров карты. Например, карта создана 32*32 чанка, а в процессе захотелось больше. О, этот вопрос меня терзает уже продолжительное время. Сейчас вот в тестовых целях создал карту в 1 сектор, построил дом и разместил кровать. Появившийся в папке карты файл 0.sec перенес на рабочий стол и создал новый сектор в рамках данной карты. Произвел замену первой версии сектора на вторую - работает. Но это, увы, только в пределах данного сектора (не просто так он числится нулевым). Т.е. если следом создать карту в 2 сектора и произвести аналогичную замену (размещение 0.sec под именем второго), то перенесутся только тайлы и крыша без стен. Даже растительности и деревьев нет (хотя есть блокирующие тайлы деревьев). Отсюда вопрос: есть ли альтернативы для достижения желаемого эффекта? Лично мне это бы здорово пригодилось для создания тех же уникальных диких зон на моём острове. Я бы просто взял по одному из уже имеющихся лесных и береговых секторов и ограничился бы в итоге изменением шаблонов (не отрабатывая каждый сектор по деревцу). http://imageshack.com/a/img673/3773/8UogNA.png P.S. Что кроме распаковки всех *.dat можно сделать, чтобы карта в режиме top-down так не тормозила при скроллинге/масштабировании? Какая операционная система? Положи в корневую папку файлы ddraw.dll, libwine.dll и wined3d.dll. Правда могут появиться артефакты в виде чёрной подложки под кнопками и некоторыми другими элементами интерфейса. Как исправить не знаю, но это не критично. http://imageshack.com/a/img538/1050/RXntlI.png
TeMHbIu Опубликовано 8 сентября, 2015 Автор Жалоба Опубликовано 8 сентября, 2015 Известны ли на данный момент сообществу какие-либо инструменты для:1) переноса/копирования чанков* со всем контентом (тайлы, стены, объекты, контейнеры, свет, etc) - В рамках одной карты, - Из одной карты в другую 2) расширения размеров карты. Например, карта создана 32*32 чанка, а в процессе захотелось больше. О, этот вопрос меня терзает уже продолжительное время. Потому и уверен, что решение есть. Просто, несколько лень пока было копать TerraArcanum. Вдруг кто так помнит. Можно и Сарумана потеребить, если он еще обретается здесь - он как никто был ближе многопользовательской Arcanum1-024-fixed UPD Написал личкой, хоть он и не появлялся с 2013. Ну не могли фанаты своими руками перерисовать 80 локаций пиксель в пиксель Какая операционная система? Положи в корневую папку файлы ddraw.dll, libwine.dll и wined3d.dll. W7x64 Где взять кошерные версии этих библиотек? В папке с игрой (ни старой, ни репака) нету. Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь
Corvell Опубликовано 8 сентября, 2015 Жалоба Опубликовано 8 сентября, 2015 Где взять кошерные версии этих библиотек? В папке с игрой (ни старой, ни репака) нету. Правда могут появиться артефакты в виде чёрной подложки под кнопками и некоторыми другими элементами интерфейса. Как исправить не знаю, но это не критично. http://imageshack.com/a/img538/1050/RXntlI.png https://yadi.sk/d/Q5SVTN40iwaAt
TeMHbIu Опубликовано 8 сентября, 2015 Автор Жалоба Опубликовано 8 сентября, 2015 Божественно! С библиотеками летает. На arcanum.exe их волшебное действие распространяется? Еще б масштаб в большем диапазоне менять =) Например так: (мечты-мечты) Схема все того же Vormantown Закрашена только реально используемая область карты - остальное вода. В частности, расположение города (зеленый цвет) не дает его глобально расширить без переноса упираемся в край. Откопал пока самую старую тему по UltimateArcanum и форкам - клац Похоже, все дороги ведут к Crypton`у Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь
Corvell Опубликовано 8 сентября, 2015 Жалоба Опубликовано 8 сентября, 2015 На arcanum.exe их волшебное действие распространяется? Да, само собой. У меня наблюдалось подтормаживание главного меню, начиная с Windows 8.1, и установка данных dll исправила ситуацию. Как у тебя ведёт себя World Editor при установленных dll? Артефакты есть? Чёрная подложка, "прокрашиваемые" курсором кнопки, невидимая (но кликабельная) кнопка Save... P.S. У меня в режиме совместимости с ранними версиями Windows появляются произвольные проблемы в виде некликабельности некоторых кнопок в свойствах NPC. Предположу, что и тебе тоже не стоит её настраивать. В остальном всё работает как надо - тестирование наработок в игре пруф. Похоже, все дороги ведут к Crypton`уЕсли пробьёшь поляну - отпишись обязательно.
TeMHbIu Опубликовано 8 сентября, 2015 Автор Жалоба Опубликовано 8 сентября, 2015 Как у тебя ведёт себя World Editor при установленных dll? Артефакты есть? Чёрная подложка, "прокрашиваемые" курсором кнопки, невидимая (но кликабельная) кнопка Save...Все перечисленное есть. Но из плюсов могу отметить, что теперь ОСь перестала переходить в упрощенное визуальное оформление при запуске WorldEd Настройки совместимости вообще не трогал. Распаковал ArcanumM4 Интерьер дома Бэйтса вполне ожидаемо обнаружился на глобальной карте X=131112 Y=860 (в чанке х=2048 y=13 соотвественно) Похоже, все дороги ведут к Crypton`уЕсли пробьёшь поляну - отпишись обязательно. Ок, тут, видимо он давно не появлялся. Так же в деле могли быть замешаны сообщники по M4 NeOn, Woratiklis - отзовитесь UPD: Нашел кое-какие крохи по спецификациям https://dl.dropboxusercontent.com/u/10924648/arc/index.html В частности, sec, jmp, prp Но готовым инструментом или скриптом не пахнет... Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь
Saruman Опубликовано 8 сентября, 2015 Жалоба Опубликовано 8 сентября, 2015 Насколько помню, изначально я взял уже готовую карту из MultiArcanum Криптона, забил на неработавшую телепортацию через глобальную карту, нарисовал дороги, сделал телепортационные порталы и упаковал это в Ultimate Arcanum. Для конверсии карты Криптон использовал свою квази-утилиту, которую он называл "Module Convertor". "Квази" - потому что похоже это был набор batch-скриптов, заточенных под конкретную задачу сборки единой карты Arcanum1-024-fixed. Скрипты эти Криптон принципиально не выкладывал, аргументируя это тем, что интерес к его модулю недостаточно велик. Я думаю, Криптон понимал, насколько уникальную работу он сделал, и не хотел шарить её прежде чем публика в широком смысле не признает за ним данное достижение. Наиболее близко он подошел к объяснению того как оно работает вот этом топике http://www.terra-arcanum.com/forums/index....ying-etc.16569/: As you already know, sector filenames are generated from its X and Y coord and file extension (.sec). What you may not know is that these coord are encoded (or "encrypted" if you wish) in sector's filename, so its not possible to determine these coords from its filename without having some decoding tool, obviously. But don't worry, decoding/encoding algorithm is pretty easy, won't took you more than one hour to reverse it, I guess :p However, if you want to relocate some sector, you'll need more than just rename it. You must also patch it, because sector may contain static objects which have their coords saved inside sector as well. So relocating sector is not so trivial as it seems. About patching mobiles coords, you'll need some batch tool to do that, because doing that manually will be suicidal, since there is a lot of offsets to patch.
TeMHbIu Опубликовано 9 сентября, 2015 Автор Жалоба Опубликовано 9 сентября, 2015 Для конверсии карты Криптон использовал свою квази-утилиту, которую он называл "Module Convertor". "Квази" - потому что похоже это был набор batch-скриптов, заточенных под конкретную задачу сборки единой карты Arcanum1-024-fixed. Скрипты эти Криптон принципиально не выкладывал, аргументируя это тем, что интерес к его модулю недостаточно велик. Я думаю, Криптон понимал, насколько уникальную работу он сделал, и не хотел шарить её прежде чем публика в широком смысле не признает за ним данное достижение. А потом интерес Криптона к Аркануму стал недостаточно велик Вообще, что-то подобное и предполагал: что все происходило не с готовыми "выделил-скопировал-вставил". Но оно и не требуется. Вполне сойдет нечто консольное, чему на вход подаешь каталоги обоих карт и координаты/чанки переносимой области. Как я писал выше, некоторые спецификации Криптон все же оставил - https://dl.dropboxusercontent.com/u/10924648/arc/index.html В частности: Map sector (.sec) Map properties (map.prp) Map jumps(map.jmp) Если не ответит тебе, можно пробовать изобретать свой велосипед. (правда, тут я ближе к ПМ, чем к кодеру ) Неописанными остались только файлы *.mob (скорее всего мобы+контейнеры+объекты+scenery) Все весом в 1 кб и с длинными именами, в которых предположительно зарыты их координаты/смещения и еще какие-то атрибуты.. Примерно в то же время, что и Криптон, успеха в дешифровке оригинального формата карт добился товарищ Radzh (привет, если читаешь ). До ухода A:R в глубокую консервацию, по словам автора, считывать удавалось едва ли не все кроме крыш. Но задачи сохранять обратно в родном формате у него и не было, насколько мне известно. Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь
radzh Опубликовано 9 сентября, 2015 Жалоба Опубликовано 9 сентября, 2015 товарищ Radzh (привет, если читаешь ). Привет, привет. Хорошо, что живой.
sarion Опубликовано 9 сентября, 2015 Жалоба Опубликовано 9 сентября, 2015 Впринципе написать конвертер не слишком сложно, если будут полные данные чего во что конвертировать. Ибо на реверс инжиниринг времени у меня нет, а на формулировку алгоритма найдется. Немножко едущей крыши, красивых и не очень текстов без особенной нагрузки на мозг. А зачем вникать в умные мысли? Главное - уметь их цитировать © Я. Всякая экономия в конечном счете сводится к экономии времени. К. Маркс Третье место в "Конкурсе прозы №3" "Таинственная" награда за 3-е место Второе место в "Конкурсе прозы №5" Второе место в "Конкурсе прозы №6" Третье место в "Конкурсе прозы №7", пожалуй в самом последнем конкурсе на нашем форуме. На мотив песни Черный ворон: Бееедный аааффтаар, что ж ты бьееешьсяаа Да об стееену головооой. Ты мозгооов не набереееешься, Выпей йааадуу, ты тупооой!.. © Баш. Не принимайте на свой счёт!
Saruman Опубликовано 10 сентября, 2015 Жалоба Опубликовано 10 сентября, 2015 Немного пошерстил английские форумы по данной теме - первое ощущение такое, что найти где в *.mob файлах зашиты координаты - не проблема, и соответственно "подвинуть" объекты, поменяв соответствующим образом координаты - тоже не самая большая проблема, если знаешь куда переезжает сектор. Но вот "клонировать" сектор, я так понимаю, несколько сложнее т.к. у каждого .mob должен быть свой уникальный идентификаторы, который прописан как в внутри файла, так и в его имени, и соответственно для клонирования нужен механизм, который будет создавать новые идентификаторы так, чтобы движок ими не подавился. В выходные попробую еще пошарить по ресурсам и попрововать поискать оффсеты координат в .mob-файлах (насколько понял, они находятся в разных местах для файлов разных типов объектов).
Saruman Опубликовано 13 сентября, 2015 Жалоба Опубликовано 13 сентября, 2015 Немного разобрался с .mob файлами - нашел offset'ы координат на карте: NPC: x: 4f 64 71 7a y: 53 68 75 7e Items x: 4b y: 4f В случае с items имеют место также что-то вроде микро-координат внутри тайла - до конца в них не разобрался, но объекты двигаются корректно правкой основных координат и без их редактирования. Запись координат в .mob файлах начинается указанного offset, при этом форма записи в шестнацатиричном формате инвертирована по байтам: 4094 (цесятеричная координата в редакторе) -> 0FFE (шестнацатиричное представление координаты) -> FE0F (координата, записанная в .mob файле) то есть порядки записываются начиная с нижних и заканчивая верними, но при этом в рамках одного байта порядок сохраняется. Также лично для себя разобрался в записи координат сектора названии файла: Filename.sec = hex_to_dec(dec_to_hex((Sector_Y * 4) div 16) * 0x10000000 + dec_to_hex((Sector_Y * 4) mod 16) * 0x1000000 + Sector_X) где Sector_X, Sector_Y - десятеричные координаты сектора (начиная с 0), div, mod - соответственно целая часть и остаток от деления нацело, dec_to_hex и hex_to_dec - соответственно перевод из десятеричной в шестнадцатиричную систему счисления и наоборот. Теперь нужно разобраться в записях .sec файлов, найти где и как хранятся координаты статических объектов и найти их offset'ы и порядок записи. Также остается открытым вопрос генерации GUIDов.
TeMHbIu Опубликовано 13 сентября, 2015 Автор Жалоба Опубликовано 13 сентября, 2015 Сильное колдунство Теперь нужно разобраться в записях .sec файлов Дык.. не оно? (из ссылки парой постов выше) Arcanum Sector file (.sec) format. Extracted from ToEE WB sources and WorldEd. Uint32 lights_count LIGHT lights[lights_count] //each light seems to be 48 bytes long Uint32 tiles[4096] Uint32 roofs[256] Uint32 placeholder for now don't know about what info tiles array holds For now I got how you can get tile art file from tile Uint32. Base tiles are divided into 4 groups by 2 parameters: is_flippable and is_outdoor. Plus there is special group which connects tile to tile, like dirt to grass transitition. Art prefix is defined in /art/tile/tilename.mes file. It's commented so I won't copy this here. Group starts from 0, 100, 200, 300 and 400, for each group indexes are started from 0. So i.e. tile with id 101 in tilename.mes will have tile_id = 1 (we'll need this later) It seems that there are like 2 versions of tiles, first one with 4 most significant bits = 11 (v1) and other with this 4 bits = 0 (v2). Table below shows how you can get data for both versions: Data v1 v2 outdoor d >> 25 & 1 d >> 8 flippable d >> 26 & 1 d >> 7 & 1 tile_id d >> 11 & 0x3F d >> 22 & 0x3F Art name is generated from tile prefix or 2 prefixes if this is connecting tile and 2 chars. Chars are based on numbers extracted from tileid, for v1 they, however, are always 0. We'll need two arrays for v2 numbers: 0x0, 0x1, 0x2, 0x9, 0x4, 0x5, 0xC, 0xD, 0x2, 0x9, 0xA, 0xB, 0xC, 0xD we'll call this array char_2_array since we'll need it later 0x0, 0x1, 0x8, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x3, 0xA, 0xB, 0x6, 0x7, 0xE, 0xF this one we'll name char_1_array For v2 char_2 if tile_id least significant bit is set number is char_2_array[d >> 12 & 0xF], otherwise d >> 12 & 0xF For v2 char_1 char_2 value is needed, if char_2_array[char_2 number] equals char_1_array[char_2 number] and least significant bit is set, value is (d >> 9 & 7) + 8, otherwise d >> 9 & 7 Char values are calculated like that: if char_1 number value >= 8, its value is decreased by 8 char_1 value is 'a' + char_1 number, i.e. if char_1 number = 0, char_1 will be 'a', 1 - 'b' for char_2 there is a string '06b489237ea5dc10' if char_2 number is 15 or 0, So first you should get which group you are dealing with, flippable and outdoor flags are: here should be unknown 48-byte long chunk, started with bytes 00 01 00 00 00 04 00 aa, but I found file where this doesn't hold =\ also WB uses this magic to find where the lights chunk is ended, just looking for this bytes and substracting 4096*4(size of tiles) here comes sector objects, which structure is undefined now, but objects can be looked-up by pattern: offset val 0x00 0x77 0x01 0x00 0x02 0x00 0x03 0x00 0x04 0x00 0x05 0x00 0x1c 0x00 0x1d 0x00 0x1e 0x00 0x1f 0x00 0x20 0x00 0x21 0x00 0x22 0x00 0x23 0x00 From each object we can now get following: offset size name 0x0C 2 bytes proto_id 0x34 4 bytes mob_type 0x3A + type_skip*4 - 1 4 bytes x_coord //type_skip see later 0x3E + type_skip*4 - 1 4 bytes y_coord type_skip depends on mob_type: mob_type mob_name type_skip 1 Portal 4 2 Container 4 3 Scenery 5 4 Projectile 5 5 Weapon 7 6 Ammo 7 7 Armor 8 8 Money 8 9 Food 8 10 Scroll 8 11 Key 9 12 Written 9 13 Generic 9 14 PC 11 15 NPC 13 16 Trap 13 17 Bag 9 Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь
Saruman Опубликовано 13 сентября, 2015 Жалоба Опубликовано 13 сентября, 2015 Оно самое, осталось найти время чтобы потр***** с этим, плюс если дело пойдет надо что-то кодить. Я сначала думал сделать python-скрипты, но, видимо, лучше всё же будет что-то с графическим интерфейсом, так что надо будет освежить навыки.
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти