Перейти к содержанию

World Editor - маловато будет. Давайте курить формат карт.


TeMHbIu

Рекомендуемые сообщения

Опубликовано

Приветствую вновь! :dwarf:

 

Известны ли на данный момент сообществу какие-либо инструменты для:

1) переноса/копирования чанков* со всем контентом (тайлы, стены, объекты, контейнеры, свет, etc)

- В рамках одной карты,

- Из одной карты в другую

2) расширения размеров карты. Например, карта создана 32*32 чанка, а в процессе захотелось больше.

 

*Чанк

Для относительного удобства навигации, области размером 64*64 тайла объединены в т.н. чанки (см. картинку)

 

b81e36915fb1.png

 

Пример взят из модуля 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-онлайн). Билеты здесь

post-72-1213126565.gifpost-72-1213126671.gif

Опубликовано
Приветствую вновь! :dwarf:

:beer:

 

Известны ли на данный момент сообществу какие-либо инструменты для:

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

userbar-arcanum-7.png
Опубликовано
Известны ли на данный момент сообществу какие-либо инструменты для:

1) переноса/копирования чанков* со всем контентом (тайлы, стены, объекты, контейнеры, свет, etc)

- В рамках одной карты,

- Из одной карты в другую

2) расширения размеров карты. Например, карта создана 32*32 чанка, а в процессе захотелось больше.

О, этот вопрос меня терзает уже продолжительное время.

 

Потому и уверен, что решение есть.

 

Просто, несколько лень пока было копать TerraArcanum. Вдруг кто так помнит.

 

Можно и Сарумана потеребить, если он еще обретается здесь - он как никто был ближе многопользовательской Arcanum1-024-fixed

UPD Написал личкой, хоть он и не появлялся с 2013.

 

Ну не могли фанаты своими руками перерисовать 80 локаций пиксель в пиксель :)

 

 

Какая операционная система? Положи в корневую папку файлы ddraw.dll, libwine.dll и wined3d.dll.

W7x64

 

Где взять кошерные версии этих библиотек? В папке с игрой (ни старой, ни репака) нету.

Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь

post-72-1213126565.gifpost-72-1213126671.gif

Опубликовано
Где взять кошерные версии этих библиотек? В папке с игрой (ни старой, ни репака) нету.
Правда могут появиться артефакты в виде чёрной подложки под кнопками и некоторыми другими элементами интерфейса. Как исправить не знаю, но это не критично. http://imageshack.com/a/img538/1050/RXntlI.png

https://yadi.sk/d/Q5SVTN40iwaAt

userbar-arcanum-7.png
Опубликовано

Божественно! :clapping:

С библиотеками летает.

На arcanum.exe их волшебное действие распространяется? :)

 

 

 

Еще б масштаб в большем диапазоне менять =)

Например так: (мечты-мечты)

4dface52960d.png

Схема все того же Vormantown

Закрашена только реально используемая область карты - остальное вода.

В частности, расположение города (зеленый цвет) не дает его глобально расширить без переноса :cray: упираемся в край.

 

 

 

Откопал пока самую старую тему по UltimateArcanum и форкам - клац

Похоже, все дороги ведут к Crypton

Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь

post-72-1213126565.gifpost-72-1213126671.gif

Опубликовано
На arcanum.exe их волшебное действие распространяется? :)

Да, само собой. У меня наблюдалось подтормаживание главного меню, начиная с Windows 8.1, и установка данных dll исправила ситуацию. :)

 

Как у тебя ведёт себя World Editor при установленных dll? Артефакты есть? Чёрная подложка, "прокрашиваемые" курсором кнопки, невидимая (но кликабельная) кнопка Save...

 

P.S. У меня в режиме совместимости с ранними версиями Windows появляются произвольные проблемы в виде некликабельности некоторых кнопок в свойствах NPC. Предположу, что и тебе тоже не стоит её настраивать. В остальном всё работает как надо - тестирование наработок в игре пруф.

 

Похоже, все дороги ведут к Crypton
Если пробьёшь поляну - отпишись обязательно. :pioneer:
userbar-arcanum-7.png
Опубликовано
Как у тебя ведёт себя World Editor при установленных dll? Артефакты есть? Чёрная подложка, "прокрашиваемые" курсором кнопки, невидимая (но кликабельная) кнопка Save...
Все перечисленное есть.

Но из плюсов могу отметить, что теперь ОСь перестала переходить в упрощенное визуальное оформление при запуске WorldEd

Настройки совместимости вообще не трогал.

 

 

Распаковал ArcanumM4

Интерьер дома Бэйтса вполне ожидаемо обнаружился на глобальной карте X=131112 Y=860 (в чанке х=2048 y=13 соотвественно)

b74966d3b4b4.png

 

 

Похоже, все дороги ведут к Crypton
Если пробьёшь поляну - отпишись обязательно. :pioneer:

Ок, тут, видимо он давно не появлялся.

 

Так же в деле могли быть замешаны сообщники по M4 :)

NeOn, Woratiklis - отзовитесь :clapping:

 

 

UPD:

Нашел кое-какие крохи по спецификациям

https://dl.dropboxusercontent.com/u/10924648/arc/index.html

В частности, sec, jmp, prp

Но готовым инструментом или скриптом не пахнет...

Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь

post-72-1213126565.gifpost-72-1213126671.gif

Опубликовано

Насколько помню, изначально я взял уже готовую карту из 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.

arcanum-on-line.gif
Опубликовано
Для конверсии карты Криптон использовал свою квази-утилиту, которую он называл "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)

Если не ответит тебе, можно пробовать изобретать свой велосипед. (правда, тут я ближе к ПМ, чем к кодеру :lol:)

 

Неописанными остались только файлы *.mob (скорее всего мобы+контейнеры+объекты+scenery)

Все весом в 1 кб и с длинными именами, в которых предположительно зарыты их координаты/смещения и еще какие-то атрибуты..

 

Примерно в то же время, что и Криптон, успеха в дешифровке оригинального формата карт добился товарищ Radzh (привет, если читаешь :derisive: ).

До ухода A:R в глубокую консервацию, по словам автора, считывать удавалось едва ли не все кроме крыш.

Но задачи сохранять обратно в родном формате у него и не было, насколько мне известно.

Собираем корабль для путешествия в Арканум (VormanTown-онлайн). Билеты здесь

post-72-1213126565.gifpost-72-1213126671.gif

Опубликовано

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

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

 

А зачем вникать в умные мысли? Главное - уметь их цитировать © Я.

Всякая экономия в конечном счете сводится к экономии времени.

К. Маркс

medal-4.pngТретье место в "Конкурсе прозы №3" "Таинственная" награда за 3-е местоmedal-3.png Второе место в "Конкурсе прозы №5" medal-5.png Второе место в "Конкурсе прозы №6"medal-2.png Третье место в "Конкурсе прозы №7", пожалуй в самом последнем конкурсе на нашем форуме.

На мотив песни Черный ворон:

Бееедный аааффтаар, что ж ты бьееешьсяаа

Да об стееену головооой.

Ты мозгооов не набереееешься,

Выпей йааадуу, ты тупооой!.. © Баш. Не принимайте на свой счёт!

Опубликовано

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

 

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

 

В выходные попробую еще пошарить по ресурсам и попрововать поискать оффсеты координат в .mob-файлах (насколько понял, они находятся в разных местах для файлов разных типов объектов).

arcanum-on-line.gif
Опубликовано

Немного разобрался с .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ов.

arcanum-on-line.gif
Опубликовано

Сильное колдунство :clapping:

 

Теперь нужно разобраться в записях .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-онлайн). Билеты здесь

post-72-1213126565.gifpost-72-1213126671.gif

Опубликовано

Оно самое, осталось найти время чтобы потр***** с этим, плюс если дело пойдет надо что-то кодить. Я сначала думал сделать python-скрипты, но, видимо, лучше всё же будет что-то с графическим интерфейсом, так что надо будет освежить навыки.

arcanum-on-line.gif

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...