Правила, действующие в этом форуме и всех его подфорумах:
1) Запрещена реклама в любых её проявлениях (сразу бан без предупреждения)! 2) Мат тоже не приветствуется на форуме, но иногда можно выразить свои чувства ( лучше заменяйте матные слова точками, пробелами, другими буквами)! 3) Категорически запрещается унижать, посылать, издеваться над участниками форума! Мы здесь все - одна большая и дружная семья! Поэтому за нарушение этого правила автоматически будем банить! 4) Разрешены ссылки на информацию, которые относятся к тому или иному разделу форума! 5) Ссылки не в тему будут удаляться и пользователь получит предупреждение или будет забанен! 6) Пользователям разрешено задавать любые вопросы относящиеся к теме, а мы все дружно ответим на эти вопросы. А также отвечать на вопросы и высказывать своё мнение. 7) Повторные темы, которые будут создаваться, будут удалены! Создавайте темы, удостоверившись, что такой темы нет на форуме! 8) Запрещён флуд во всех его проявлениях, сообщения не по теме, сообщения состоящие из одного или нескольких смайликов без текста, сообщения типа - Вах!, Рулез!, Круто! и т.п. Пользуйтесь пожалуйста кнопкой [EDIT], не плодите бессодержательные сообщения. 9) Использование смайликов разрешается не более 3-х подряд!
Тут надо распаковать один файл и глянуть что там за 32 "лишних" спрайта.
Ну точно, всё как я и думал :) Распаковывать не пробовал, лень 58 файлов вручную ковырять. Но в архиве с исходниками в файле Sprites3DO.zip\RawSprites\imp имеем искомые 58 файлов, 22 из которых соответствуют разным положениям, 32 картинки - те же положения с 4 разных углов поворота и ещё 5 - фаерболы импа в разных стадиях взрыва. Итого 27 разных спрайтов + 32 повортных. А выше у меня выходило 26 разных? нууу.. один где-то потерялся, хз. А в целом сходится.
Добавлено спустя 10 часов 49 минут 32 секунды: Все-таки вернусь к вопросу о LZSS. Данные НЕ запакованы? Или современная утилита makerez уже позаботилась о LZSS?
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
нету там никакого lzss в помине. Хотя Doom.wad может даже и запакован, пока не пойму. Только что проверил, он состоит из D002 - D0119 и размеры их не совпадают. Они и не должны (индексы вместо строк сокращают), но что-то уж больно сильно отличаются... Не исключено что отдельные файлы упакованы и уже потом обработаны makerez, а вовсе не комплексно. Нужно досконально всё распаковать, чтобы знать наверняка.
Хы-хы. Текстурки в Doom.wad (D002 в частности) - это всё те же CEL с порезанными заголовками, в которых до кучи порезали ещё и CCB флаги (нету PRE0, PRE1 и ещё некоторых данных перед ними), т.е. в этих файлах остались только PLUT и PDAT. Как их восстанавливать без флагов пока не понял, может они там во всех файлах одиаковые... Кому любопытно - сравните Flats 3DO.zip\Flats 3DO\CEIL3_2.cel и D0100 и увидите соответствие (в этих файлах PDAT и PLUT перепутаны местами, в CEIL3_2.cel первым идёт PDAT, а в D0100 первым PLUT)
Я тут подумал... Когда мы компилируем makerez под виндой, то получаем типа исполняемый файл ELF (заголовок 7F 45 4C 46) List of file signatures Executable and Linkable Format То есть, запускать его нужно под Unix-ом?
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Есть подозрение что всеми этими обрезаниями занимается 3DO SDK при запихивании всего этого дела в ZStream. Хотя как раз в Doom стрима вроде бы нету, есть только бургер, а в исходниках бургера ничего такого я не увидел. Просто меня настораживает тот факт, что в Killing Time имеют место очень похожие обрезания CEL внтури ARY массивов картинок, карты тоже разделены на набор лумпов (MAP - аналог лумпа BLOCKMAP в думе; VNT - аналог THING; VRT - аналог VERTEXES; FAC - возможный аналог LINEDEFS, насчёт последнего не уверен) и все эти MAP VNT VRT FAC ARY описываются в патенте US5577180, но я так и не понял это отсылка к SDK или всего лишь грамотно использованная технология без возможности скачать материал?
maptex = (Filemaptexture_t *)LoadAResource(rTEXTURE1); /* Load it in */ NumTextures = maptex->Count; /* How many are there? */ FirstTexture = maptex->First; /* First resource number for loading */ NumFlats = maptex->FlatCount; FirstFlat = maptex->FirstFlat; TextureInfo = &maptex->Array[0]; /* Index to the first entry */
т.е. число текстур = 74, номер первой 2, число flat-поверхностей 43, первая флат-поверхность в файле с номером 76 (итого D002-D075 это текстуры, D076-D118 это флат-поверхности) дальше вроде бы ширина-высота и 00000000. А про сами текстуры я уже писал - у них нет заголовков секций PDAT, PLUT и плюс у них нет PRE0 и PRE1 по которым определяется размер, размер берётся из D001
But how can i run it on a real 3DO/emulator ? I tried to run it using my compiled binairy and package everything with OperaFS but the game does not run.
blabla Hello! Try to get a System/Kernel folder and rom_tags and BannerScreen files from Game Guru disc and replace originals.
Добавлено спустя 3 минуты 46 секунд: StackSize in makefile must be 10000. Try to use a GameGuru BannerScreen instead of your own (for test).
It would be grateful if you'll look to the REZFILE direction We already recieved a workable launchme under Mac emulator. We still can't repack a REZFILE. I can upload a tuned Basilisk II emulator with Doom sources if you need it. New launchme is OK, I've tested all levels and all transitions between.
Для PC есть редакторы, которые умеют сохранять лумпы из вадов в отдельные файлы. Это то что нам нужно, только формат лумпов на PC и 3DO отличается. Значит для обрезания нужен какой-то свой редактор карт для 3DO или хотя бы конвертер. Для той же JAGUAR версии дума такой конвертер есть, но и в JAGUAR формат не идентичен 3DO (он почти идентичен PC). Получается что игра просто работает с этими ресурсами, а паковать она их не умеет. Бургер этого тоже не делает :(
aliast писал(а):
число flat-поверхностей 43, первая флат-поверхность в файле с номером 76 (итого, D076-D118 это флат-поверхности)
Эти самые flat-поверхности есть не что иное как текстуры стен. Они описаны в лумпах SECTORS (rMAP+6) для первой карты это D0151. Здесь индекс 0 соответствует файлу D076, индекс 1 это D077 и т.д.
Цитата:
typedef struct { /* Map sector loaded from disk */ Fixed floorheight; /* Floor and ceiling height */ Fixed ceilingheight; Word floorpic; /* Floor image */ Word ceilingpic; /* Ceiling image */ Word lightlevel; /* Light level */ Word special; /* Special flags */ Word tag; /* Tag ID */ } mapsector_t;
Индексы выделены жирным. При конвертации PC в 3DO нужно менять имена текстур на индексы. Например, FLOOR5_4 превращается в 00 00 00 0D (D0089) т.е. rFLAT14+index где rFLAT14 это первая текстура стен. Ну или находим FLOOR5_4 в REZFILE (D0089) и отнимаем 76 = 89-76 = 13 (0xD) Путано, но на самом деле всё понятно. Можно спокойно писать конвертер, только лениво
В лумпах SIDEDEFS используются первые файлы D002-D075 (D002 имеет индекс 0). Например, DOOR3 это индекс 11 (00 00 00 0B),т.е. DOOR3 из REZFILE (D0013) - 2 = 11. Но в этом лумпе текстуры может и не быть! В этом случае на PC пишется символ тире "-", а на 3DO ставится индекс 00 00 00 3A который по идее означает текстуру ASH01 фиг знает почему так.
С картами закончили. Остальное по идее всё понятно. Рисуем карту PC редакторами карт, сохраняем каждый лумп в отдельный файл (некоторые редакторы это умеют) и скармливаем эти файлы конвертеру. Конвертер меняет endian и делает все PC 2-байтовые данные на 3DO 4-байтовыми, а PC 1-байтовые делает 3DO 2-байтовыми. Текстовые имена текстур меняем на индексы как описано выше. Готово! Осталось закодить конвертер))))) Дальше все неточности будем допиливать. Осталось раздербанить здоровый doom.wad c кучей лумпов :)
Маладца! Я уж подумал, что все, приехали, надежда на Doom 2 задохлась. А как все это хозяйство потом заталкивать в один REZFILE? Особенно, если будет новая графика для меню.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
А как все это хозяйство потом заталкивать в один REZFILE?
Да капец конечно, головняков ещё предвидится... новые текстуры видимо придётся прописывать в doomrez.h и менять нумерацию в D0001 и неизвестно хватит этого или нет. Может ещё исходники придётся править, пока не знаю. До этого ещё далеко. Для начала хоть бы научиться редактировать что есть и запихивать это в rezfile. Сейчас сижу разбираюсь почему в THINGS (D0145) угол поворота объектов на карте не совпадает с оригинал в Map01.wad. И не догоняю... несоответствие градусов в PC и на 3DO? Жесть какая.. так то бог с ним с поворотом, ну подумаешь неписи не туда смотреть будут, но глюк странный. Разобрался вроде - углы поворота надо делить на 1.40625, т.е. вместо 90 на PC на 3DO будет 90/1.40625 = 64 (0x40) Что такое число 1.40625? Это преобразование угла в байт. т.е. макс. значение угла в круге 360, а макс. значение одного байта 256 (0xFF). Делим 360/256 = 1.40625.
Последний раз редактировалось aliast 24 фев 2015, 12:21, всего редактировалось 6 раз(а).
новые текстуры видимо придётся прописывать в doomrez.h
Это само собой. Это же относится к прописыванию новых вражин и оружия, но это дело будущего. С тем еще более-менее понятно.
Добавлено спустя 2 часа 9 минут 3 секунды:
aliast писал(а):
Что такое число 1.40625? Это преобразование угла в байт. т.е. макс. значение угла в круге 360, а макс. значение одного байта 256 (0xFF). Делим 360/256 = 1.40625.
И как ты до всего этого докопался? Поражаюсь.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Начал писать конвертер карт. Первые два лумпа создаются правильно, но вот с третьим затык. Не могу придумать как заменить текстуры на индексы. Хотелось бы вынести список текстур в отдельный от исходников программы файл и ставить индексы согласно его содержанию. Решил выдожить исходники того что есть. В файле textures.h создал enum с перечислением всех текстур, используемых в лумпе SIDEDEFS. Именно такие имена текстур встречаются в вадах, но как их конвертнуть в цифры (или скорее сопоставить названия из перечисления со строками) не могу сообразить. Инет предлагает делать замену через switch-case, но там же 76 текстур! :( Вдобавок такой вариант будет намервто вшит в конвертер и при добавлении в игру новых текстур придётся каждый раз его пересобирать... (вариант с файлом textures.h кстати тоже) PS нужно не забыть в список текстур добавить строку тире "-" (в перечислении такой знак хрен поставишь) и приравнять её к индексу 58 (ASH01). Я так и не понял как игра отличает отсутствие текстуры "-" от текстуры ASH01. Нашёл карту с ASH01 и действительно и там и там индекс один ставится https://yadi.sk/d/f7OcnVA5ewTSF
aliast А если файл с перечислениями текстур читать как текстовый? У нас будет тогда соответствие номера строки и названия текстуры. То есть, читаем строку, запоминаем её порядковый номер в одномерный массив. Саму строку запоминаем в другой одномерный массив. И так до конца файла, исключая строки первые и последние. Громоздко, но работоспособно. Мы в любой момент получим доступ к самой строке и соответствующем ей порядковому номеру (значению в другом массиве).
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Че-то 3DOWADConv.exe говорит, что не является приложением Win32.
Она наверное собралась как 64-битка. Не знаю почему, вроде Win32 в конфиге стоит. Компоновщик -> Дополнительно -> Конечный компьютер -> MachineX86 (/MACHINE:X86). Так что хз.
Вроде бы сделал вариант с добиванием всех имён текстур до 8 символов. Если букв меньше - добавляем любой знак, например "METAL1++". Затем функцией strstr получил позицию первой буквы нужной текстуры и поделил на 9 (8 букв плюс символ новой строки). Работает, только эта собака strstr различает регистры. STWAR01 находит, а от stwar01 мозги закипают. Будем думать как пофиксить.
Сделал через пень-колоду (пока только 4 лумпа из 10) Начал тестить и на MAP03.wad образовалась неточность с подсчетом количества enries в лумпе things. У меня на 1 меньше чем в D0165 - должно быть 0x11A, а у них 0x11B. По всему выходит что в игре на 3 карте был добавлен ещё один предмет (аптечка, патроны, враг) и в прилагаемом в исходниках дума MAP03.wad это не отражено, т.е. мой конвертер работает правильно. Был добавлен шар invisibility
На данный момент завершены 7 лумпов из 10. В лумпе секторов индексы текстур тоже вычисляются, но там как оказалось некоторые текстуры берутся из списка FLAT-поверхностей, а некоторые из первого списка текстур и у них индексы пересекаются. С ними пока затык. То ли там такая же канитель как с символом прочерка (нет текстуры) и текстрой ASH01 (один индекс на двоих), толи как-то по другому, пока не разобрался.
Versus писал(а):
Скажи, а исходники makerez тебе хоть чем-то помогают?
Да вроде пока не особо. Сейчас закончу с конвертером карт и надо будет вернуться к вопросу запаковки.
Хах... на 10 лумпе я похоже надолго застряну :( Отличия от вада кардинальные. Там в начале файла идут смещения к.. не важно к чему (к ID линий из лумпа linedef). Так вот если в ваде все одинаковые ID повторяются/дублируются и занимают место, то в 3DO поступили хитрее - все такие одинаковые повторения объединили одной записью и в начале файла пишется один оффсет на все случаи. В формате я разобрался, ничего сложного. Надо это всё компьютеру объяснить :) А вот 9-ый лумп Reject порадовал больше всего - он тупо выдирается из вада и вставляется в отдельный файл. Не надо никакие байты переворачивать, ничего вообще делать, только вырезать в отдельный файл и всё. Лафа... Итак, остался последний лумп..
Сейчас этот форум просматривают: Bing [Bot] и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения