3DO Doom sources released
Автор |
Сообщение |
aspyd Специалист
Группа: Администраторы Сообщения: 11309 Регистрация: 03 дек 2009, 22:32 Откуда: MO/DK
Модель 3DO: Panasonic FZ-1 NTSC-U
|
Win XP SP3 - тоже самое.  (Я не в теме, просто попробовал).
|
11 май 2015, 13:47 |
|
 |
aliast Специалист
Группа: Разработчики Сообщения: 1303 Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет
|
Это проблема студии 2012 - 2013. Они заточены под 7-8 винды. Решить проблему можно, но надо искать как. Вроде бы нашёл в настройках кое-что со словами "Visual Studio 2013 - Windows XP (v120_xp)", пересобрал, проверьте теперь. https://yadi.sk/d/I3eUORaAgYuBy
|
11 май 2015, 14:48 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
aliastТеперь работает! Добавлено спустя 2 часа 44 минуты 24 секунды:aliastПробежал несколько уровней с новособранным REZFILE, никаких проблем не заметил. Добавлено спустя 48 минут 13 секунд:Одинаковая цепочка это 0000 AAA BBB FFFFи 0000 AAA BBB FFFF? Или одинаковая цепочка это любая 0000 ... FFFF, где ... любые байты.
|
11 май 2015, 14:50 |
|
 |
aliast Специалист
Группа: Разработчики Сообщения: 1303 Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет
|
Я тебя не понял  Ну во первых не AAA BBB, а AAAA BBBB (каждый linedef имеет ID 2-байтовый. А дальше не понял. Одинаковые это 1) Пара и 2) Пара и Но, допустим пара и уже не идентичны. У них начало совпадает 00 00 19 01, но дальше идут разные байты A3 01 и A2 01. Сравнивать нужно вплость до FFFF
|
11 май 2015, 18:33 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
aliastВсе, понятно теперь. 
|
11 май 2015, 19:00 |
|
 |
Author Приставочник
Группа: Разработчики Сообщения: 1211 Регистрация: 08 фев 2012, 13:12
Модель 3DO: Panasonic FZ-10 NTSC-J
|
Правильно ли я понял, что теперь можно модить 3DO версию Doom? Т.е. создавать свои карты и подпихивать в игру?
|
12 май 2015, 09:50 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
Author Не, пока до этого далеко. У нас есть распаковка REZFILE по кускам, редактирование их на предмет новых текстур и сшивка обратно. Кстати, у новых текстур нужно будет еще поубирать заголовки и прочее, что мы добавляли при распаковке существующих. Уровни пока не поддались, спрайты тоже.
|
12 май 2015, 10:06 |
|
 |
aliast Специалист
Группа: Разработчики Сообщения: 1303 Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет
|
Блин, весь мозг сломал. Сделал сверку соседних цепочек, вроде работает, обрадовался. Потом дошло что сверять нужно не только соседние цепочки, а вообще все цепочки до самого конца файла :( т.е. подряд идущие 0000 FFFF 0000 FFFF (или любую другую) он находит, но цепочку вида 0000 FFFF 0000 0123 FFFF 0000 FFFF он уже не распознает. В качестве примера в файле blockmap_map01 (ссылка ниже) должны находиться две цепочки по смещению 0x910 и 0x9B0. Это цепочка 00 00 19 01 FF FF У меня она не находится :( https://yadi.sk/d/Ft_bgElYgz7NE
|
01 июн 2015, 06:40 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
aliastЯ когда раздумывал, как это можно сделать, пришел к выводу, что не нужно сверять соседние. Нужно во время чтения отслеживать 0000 и FFFF. Если выполняется условие, когда 0000 идет впереди FFFF, то это первая строка. Далее фиксируем каждые 0000. Опять же, если после 0000 находим FFFF, то эти 0000 (возвращаемся на этот адрес) являются началом строки. В процессе чтения пишем каждые 2 байта в массив. После того, как определили первую строку, алгоритм сменяется: Читаем и пишем в массив. Также находим 0000 и проверяем FFFF. Если есть FFFF, то удаляем из массива вплоть до найденного перед этим 0000. Для этих операций нужны 2 вспомогательные переменные. Одна отвечает за чтение всего файла, другая - номер элемента массива. Здесь фактически мы не удаляем байты, а откатываем номер элемента массива на длину найденной строки и как бы перезаписываем уже записанные элементы массива другими значениями. Читаем дальше. Каждую найденную строку "выбрасываем" таким же образом. Как-то так. Может, глупость написал. 
|
01 июн 2015, 10:23 |
|
 |
aliast Специалист
Группа: Разработчики Сообщения: 1303 Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет
|
|
03 июн 2015, 05:37 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
Попробовал отключить отрисовку пола и потолка. Проверял на эмуляторе, но забегало гораздо быстрее. Надо будет проверить на приставке. Попробовал также отключать музыку. Опять же, на эмуле не видно, продолжает ли читаться диск. Тоже надо будет проверить на железе.
|
09 июн 2015, 00:25 |
|
 |
aspyd Специалист
Группа: Администраторы Сообщения: 11309 Регистрация: 03 дек 2009, 22:32 Откуда: MO/DK
Модель 3DO: Panasonic FZ-1 NTSC-U
|
О-оо.  А как отключал? Просто убрал текстуры, или код нашел? Переписать под CEL Engine не реально? Из другой игры слизать метод не реально (KT, например)? А то, действительно, пол и потолок текстурировать ARM, а стены CEL - невыносимый косяк разработчиков. С учетом того, что CEL и ARM - "последовательно", а не параллельно работают, ну по банальному тактированию CPU это уже понятно, что архитектура своеобразная, надо было учитывать: [3DO] Разгон CPU (ARM60) (А вот, CEL-engine в приставке крут  ).
|
09 июн 2015, 08:15 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
aspydВ коде строчки закомментировал. Взять и КТ вряд ли можно, т.к. исходников нет. Нужно самим выдумывать. Добавлено спустя 36 минут 14 секунд:Чтобы отключить отрисовку пола и потолка, нужно в файле phase7.c удалить или закомментировать строку Чтобы отключить музыку, нужно в файле sound.c удалить или закомментировать строки Добавлено спустя 3 часа 10 минут 30 секунд:Если я понимаю правильно, то отрисовка пола и потолка (основа) прописана на ассемблере (единственный файл этого типа)  |  |  |  | ; ;void DrawASpan(Word Count,LongWord xfrac,LongWord yfrac,Fixed ds_xstep, ; Fixed ds_ystep,Byte *Dest) ;
AREA |C$$code|,CODE,READONLY |x$codeseg|
EXPORT DrawASpan IMPORT PlaneSource
MACRO Filler LCLA Foo Foo SETA 280/4 WHILE Foo/=0 AND v4,v1,a3,LSR #20 ;v4 = first y index ORR v4,v4,a2,LSR #26 ;V4 = first x,y index ADD a2,a2,a4 ADD a3,a3,v2
AND v5,v1,a3,LSR #20 ORR v5,v5,a2,LSR #26 ADD a2,a2,a4 ADD a3,a3,v2
AND ip,v1,a3,LSR #20 ORR ip,ip,a2,LSR #26 ADD a2,a2,a4 ADD a3,a3,v2
AND a1,v1,a3,LSR #20 ORR a1,a1,a2,LSR #26 ADD a2,a2,a4 ADD a3,a3,v2 ;16 longs LDRB v4,[v3,v4] LDRB v5,[v3,v5] LDRB ip,[v3,ip] LDRB a1,[v3,a1] ;20 longs ORR v4,v5,v4,LSL #8 ORR ip,a1,ip,LSL #8 ORR ip,ip,v4,LSL #16 STR ip,[lr],#4 ;24 longs Foo SETA Foo-1 WEND MEND ; ; Main entry point for the span code ;
SrcP DCD PlaneSource ;Pointer to the source image
DrawASpan STMDB sp!,{v1-v5,lr} MOV a2,a2,LSL #10 ;XFrac MOV a4,a4,LSL #10 ;YFrac MOV a3,a3,LSL #10 ;XStep ADD lr,sp,#&18 LDR v3,SrcP LDR v3,[v3] ;v3 = Src ADD v3,v3,#64 ;Adjust past the PLUT LDMIA lr,{v2,lr} ;v2 = YStep, lr = Dest MOV v2,v2,LSL #10 ;YStep MOV v1,#&fc0 ;YMask RSB ip,a1,#280 ;Negate the index MOV ip,ip,LSR #2 ;Long word index ADD ip,ip,ip,LSL #1 ;Mul by 3 ADD pc,pc,ip,LSL #5 ;Mul by 96 NOP ;Not needed for pipeline
Filler ;Perform the runfill
LDMIA sp!,{v1-v5,pc}
END
|  |  |  |  |
Как назло. Тут вообще ничего не понимаю...
|
09 июн 2015, 08:49 |
|
 |
aliast Специалист
Группа: Разработчики Сообщения: 1303 Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет
|
Дак оно потому и на асме чтоб быстрее работало :) Разбираться долго придётся... чем вообще стены от пола отличаются? У них разный формат данных, даже на PC. Но с чем это связано пока не понимаю. При этом полы в исходниках представлены в виде cel картинок, а вот формат стен специфичен. По логике должно бысть всё наоборот - пол Cel Engine, а стены процем 
|
09 июн 2015, 15:09 |
|
 |
aliast Специалист
Группа: Разработчики Сообщения: 1303 Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет
|
Где взять этот DEBABELIZER для MacOS 7-8 ? Гугл находит только для OS X. Может кто найдет? (нашли же фотошоп где-то)
|
10 июн 2015, 06:02 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
aliast Я искал его, когда разбирался с SDK. Не преуспел... Попробую ещё раз.
Добавлено спустя 1 час 37 минут 1 секунду: Обратился к Ребекке. Обещала завтра выложить дистрибутив.
|
10 июн 2015, 09:27 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
Проверил болванки с отключенной музыкой и отключенными полами и потолком. Музыка, как и полагается, не читается с диска, уровень грузится чуть быстрее и тише. Прогрузы с диска не настолько "взахлёб". А вот с потолками и полами не совсем понятно. Вроде и быстрее бегает перс, но подтормаживания есть все равно. Особенно заметно во время открытия дверей.
Добавлено спустя 5 часов 31 минуту 30 секунд: Если вы обращали внимание, то даже если полностью убрать ползунок громкости музыки на ноль, музыки хоть и не слышно, но она продолжает считываться с диска. Иногда на больших сложностях возникают такие "запилы" диска, что играть становится трудно. Я сделал так, чтобы при нулевой громкости диска музыка не считывалась с диска и запускалась снова при прибавке громкости.
|
11 июн 2015, 20:36 |
|
 |
aspyd Специалист
Группа: Администраторы Сообщения: 11309 Регистрация: 03 дек 2009, 22:32 Откуда: MO/DK
Модель 3DO: Panasonic FZ-1 NTSC-U
|
Молодец, это очень полезная фича, экономит трафик CD-ROM. 
|
12 июн 2015, 17:15 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
Думаю замутить что-нибудь с сохранениями. Планирую использовать какую-нибудь клавишу на экране статистики после прохождения уровня. Загрузка планируется из главного меню.
|
12 июн 2015, 17:32 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
Сохранения частично работают. Частично, потому что неправильно определяется номер уровня для загрузки, хотя он сохраняется тоже. Все остальное сохраняется и загружается корректно. Сохраняется все оружие (наличие и количество), здоровье, броня, backpack, номер уровня, громкости звуков и музыки, сложность (нужно проверить, загружается ли она). Возможность сохранения возникает после окончания уровня. Там текстом указано, какой клавишей можно сохраниться. Правда уведомление об успешном сохранении пока не придумал, как сделать. Загрузка доступна из главного меню (пока срабатывает со второго нажатия) и после смерти героя. Что нужно сделать: 1) Нужно отловить ошибку с определением номера уровня для загрузки.2) Немного перекомпоновать главное меню, чтобы переместить пункт Load game. Сейчас он у меня находится выше номера уровня. 3) Уведомлять игрока, что есть возможность загрузиться после смерти другой клавишей.4) Обработка ситуаций, когда файла с сохранениями нет, когда он некорректный (любой из параметров за пределами допустимого). Добавлено спустя 1 час 28 минут:Кстати, сохранение получилось всего лишь 92 байта. На каждую величину отводится по 4 байта. То есть, если нужно записать наличие BFG, то получается запись: 000001. Неэкономно, но что уж сделаешь... В принципе, общее количество сохраняемых параметров не такое большое, поэтому можно на это забить. Подумал еще о записи демо в память приставки (там есть флаг для записи демо), а потом интеграции этих демок в REZFILE. Будут полноценные демки, как в других Doom. Правда, насколько этот код рабочий, неизвестно. 
|
18 июн 2015, 10:45 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
Пункты 1, 3 сделал. Обнаружил проблему, когда количество брони не уменьшается после загрузки файла. Даже не помогает прохождение через выход из уровня. Но, как только поднимешь какую-нибудь броню (если возможно), то глюк пропадает. Починил. Нужно было добавить в файл сохранения armortype.
Следующие проблемы: 5) Не грузится backpack. Вернее, его отбирают перед загрузкой. Починил. 6) При загрузке сохранения из другого уровня неправильно определяется, какое небо будет. Небо починил.
|
20 июн 2015, 18:18 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
Вот. Добавлено спустя 6 часов 22 минуты 22 секунды:Может кому-нибудь будет интересно. Пока копался с кодом, естественно, появилась необходимость отслеживать работу функций. Придумал использовать для этого NVRAM. То есть, если функция сработала, создаем файл заданного имени. Можно туда тоже писать что-нибудь проходное. Очень наглядно, хоть и неудобно постоянно перезагружаться в GameGuru. 
У вас нет необходимых прав для просмотра вложений в этом сообщении.
|
21 июн 2015, 12:36 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
А, может, и нормально так... Просто не знаю, куда еще его можно засунуть. aliastПогляди, пожалуйста на код ниже. Здесь главное меню. Мне нужно сюда засунуть еще одну проверку. У меня появился статус ga_loading, истинность значения которого тоже нужно отследить. Если делаю так: То, естественно, если нажимаем в меню на LOAD GAME, то сначала проверяется верхний блок, возвращает истину и поперла игра. Если нажимаем просто запуск уровня (НЕ load game), то верхний блок не истина. Но чтобы сработал нижний блок, нужно еще раз нажать на кнопку. То есть, в RunMenu нужно сделать сразу проверку и на то, и на другое. Не знаешь, как можно это решить? Что-то сообразить не могу.
|
22 июн 2015, 13:04 |
|
 |
aspyd Специалист
Группа: Администраторы Сообщения: 11309 Регистрация: 03 дек 2009, 22:32 Откуда: MO/DK
Модель 3DO: Panasonic FZ-1 NTSC-U
|
По моему, неплохо и пунктом - выше выбора уровня. 
|
22 июн 2015, 13:21 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
Я тоже так подумал. Обратил внимание, что даже в оригинальной игре Options находятся на надписи Doom. И ничего, прокатывало. А у меня будет в главном меню load на этом же месте.  А расположение курсора при запуске будет, по-прежнему, на Level.
|
22 июн 2015, 13:31 |
|
 |
Author Приставочник
Группа: Разработчики Сообщения: 1211 Регистрация: 08 фев 2012, 13:12
Модель 3DO: Panasonic FZ-10 NTSC-J
|
Выделенное жирным судя по всему функция. Заведи премененную такого же типа как и функция, приравняй ей значение функции, а потом сравнивай уже. т.е. должно получится так
|
22 июн 2015, 14:24 |
|
 |
aliast Специалист
Группа: Разработчики Сообщения: 1303 Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет
|
Может просто добавить else ко второму условию? А вообще идея с флагом хорошая, только сам по себе флаг врядли поможет.
Последний раз редактировалось aliast 22 июн 2015, 14:58, всего редактировалось 1 раз.
|
22 июн 2015, 14:53 |
|
 |
Versus Я консольный бог
Группа: Разработчики Сообщения: 9841 Регистрация: 04 дек 2009, 11:59 Откуда: Сочи
Модель 3DO: Panasonic FZ-10 NTSC-U
|
AuthorТы записал по сути тоже самое, просто ввел дополнительную переменную. Есть ли в этом смысл? Получается же тоже самое...  Или нет? aliastНе, так вообще не пашет. При нажатии бесконечно обновляется картинка с титров на большую надпись Doom, потом при следующем нажатии снова главное меню показывает и так далее. Ни запустить игру, ни загрузить.
|
22 июн 2015, 14:56 |
|
 |
aliast Специалист
Группа: Разработчики Сообщения: 1303 Регистрация: 04 дек 2009, 12:15
Модель 3DO: Нет
|
Ну просто функция один раз вызывается, должно сказаться на производительности чутка.
|
22 июн 2015, 15:00 |
|
 |
Author Приставочник
Группа: Разработчики Сообщения: 1211 Регистрация: 08 фев 2012, 13:12
Модель 3DO: Panasonic FZ-10 NTSC-J
|
aliast, по else'у всё равно два раза вызов функции произойдёт (если первое условие не истина) ибо она в условии и там и там встречается. Нет это будет работать совершенно по разному и лишнего вызова к функции не будет, не придётся два раза на кнопку нажимать. В переменную занесётся результат работы функции (как я понял это выбор пользователем элемента меню?), а дальше мы функцию не трогаем уже и работаем только с её результатом записанным в переменную. Это всё равно что спросить пользователя "Что делать дальше?" и на выбор куча вариантов (10 штук например). Так по оригинальному коду его 10 раз спросят, если он выбрал 10 пункт - "выход", прежде чем выполнится нужное действие.
|
22 июн 2015, 15:01 |
|
|