Правила, действующие в этом форуме и всех его подфорумах:
1) Запрещена реклама в любых её проявлениях (сразу бан без предупреждения)! 2) Мат тоже не приветствуется на форуме, но иногда можно выразить свои чувства ( лучше заменяйте матные слова точками, пробелами, другими буквами)! 3) Категорически запрещается унижать, посылать, издеваться над участниками форума! Мы здесь все - одна большая и дружная семья! Поэтому за нарушение этого правила автоматически будем банить! 4) Разрешены ссылки на информацию, которые относятся к тому или иному разделу форума! 5) Ссылки не в тему будут удаляться и пользователь получит предупреждение или будет забанен! 6) Пользователям разрешено задавать любые вопросы относящиеся к теме, а мы все дружно ответим на эти вопросы. А также отвечать на вопросы и высказывать своё мнение. 7) Повторные темы, которые будут создаваться, будут удалены! Создавайте темы, удостоверившись, что такой темы нет на форуме! 8) Запрещён флуд во всех его проявлениях, сообщения не по теме, сообщения состоящие из одного или нескольких смайликов без текста, сообщения типа - Вах!, Рулез!, Круто! и т.п. Пользуйтесь пожалуйста кнопкой [EDIT], не плодите бессодержательные сообщения. 9) Использование смайликов разрешается не более 3-х подряд!
Win XP SP3 - тоже самое. (Я не в теме, просто попробовал).
_______________________________________ Урча, пухлыми лапами кот вцепился в жидкую шевелюру конферансье и, дико взвыв, в два поворота сорвал голову с полной шеи. Две с половиной тысячи человек в театре вскрикнули как один.
Это проблема студии 2012 - 2013. Они заточены под 7-8 винды. Решить проблему можно, но надо искать как. Вроде бы нашёл в настройках кое-что со словами "Visual Studio 2013 - Windows XP (v120_xp)", пересобрал, проверьте теперь. https://yadi.sk/d/I3eUORaAgYuBy
Author Не, пока до этого далеко. У нас есть распаковка REZFILE по кускам, редактирование их на предмет новых текстур и сшивка обратно. Кстати, у новых текстур нужно будет еще поубирать заголовки и прочее, что мы добавляли при распаковке существующих. Уровни пока не поддались, спрайты тоже.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Блин, весь мозг сломал. Сделал сверку соседних цепочек, вроде работает, обрадовался. Потом дошло что сверять нужно не только соседние цепочки, а вообще все цепочки до самого конца файла :( т.е. подряд идущие 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
aliast Я когда раздумывал, как это можно сделать, пришел к выводу, что не нужно сверять соседние. Нужно во время чтения отслеживать 0000 и FFFF. Если выполняется условие, когда 0000 идет впереди FFFF, то это первая строка. Далее фиксируем каждые 0000. Опять же, если после 0000 находим FFFF, то эти 0000 (возвращаемся на этот адрес) являются началом строки.
В процессе чтения пишем каждые 2 байта в массив. После того, как определили первую строку, алгоритм сменяется:
Читаем и пишем в массив. Также находим 0000 и проверяем FFFF. Если есть FFFF, то удаляем из массива вплоть до найденного перед этим 0000. Для этих операций нужны 2 вспомогательные переменные. Одна отвечает за чтение всего файла, другая - номер элемента массива. Здесь фактически мы не удаляем байты, а откатываем номер элемента массива на длину найденной строки и как бы перезаписываем уже записанные элементы массива другими значениями.
Читаем дальше. Каждую найденную строку "выбрасываем" таким же образом.
Как-то так. Может, глупость написал.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Попробовал отключить отрисовку пола и потолка. Проверял на эмуляторе, но забегало гораздо быстрее. Надо будет проверить на приставке. Попробовал также отключать музыку. Опять же, на эмуле не видно, продолжает ли читаться диск. Тоже надо будет проверить на железе.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
О-оо. А как отключал? Просто убрал текстуры, или код нашел? Переписать под CEL Engine не реально? Из другой игры слизать метод не реально (KT, например)?
А то, действительно, пол и потолок текстурировать ARM, а стены CEL - невыносимый косяк разработчиков. С учетом того, что CEL и ARM - "последовательно", а не параллельно работают, ну по банальному тактированию CPU это уже понятно, что архитектура своеобразная, надо было учитывать: [3DO] Разгон CPU (ARM60)
(А вот, CEL-engine в приставке крут ).
_______________________________________ Урча, пухлыми лапами кот вцепился в жидкую шевелюру конферансье и, дико взвыв, в два поворота сорвал голову с полной шеи. Две с половиной тысячи человек в театре вскрикнули как один.
Добавлено спустя 3 часа 10 минут 30 секунд: Если я понимаю правильно, то отрисовка пола и потолка (основа) прописана на ассемблере (единственный файл этого типа)
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
Дак оно потому и на асме чтоб быстрее работало :) Разбираться долго придётся... чем вообще стены от пола отличаются? У них разный формат данных, даже на PC. Но с чем это связано пока не понимаю. При этом полы в исходниках представлены в виде cel картинок, а вот формат стен специфичен. По логике должно бысть всё наоборот - пол Cel Engine, а стены процем
Проверил болванки с отключенной музыкой и отключенными полами и потолком. Музыка, как и полагается, не читается с диска, уровень грузится чуть быстрее и тише. Прогрузы с диска не настолько "взахлёб". А вот с потолками и полами не совсем понятно. Вроде и быстрее бегает перс, но подтормаживания есть все равно. Особенно заметно во время открытия дверей.
Добавлено спустя 5 часов 31 минуту 30 секунд: Если вы обращали внимание, то даже если полностью убрать ползунок громкости музыки на ноль, музыки хоть и не слышно, но она продолжает считываться с диска. Иногда на больших сложностях возникают такие "запилы" диска, что играть становится трудно. Я сделал так, чтобы при нулевой громкости диска музыка не считывалась с диска и запускалась снова при прибавке громкости.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Если вы обращали внимание, то даже если полностью убрать ползунок громкости музыки на ноль, музыки хоть и не слышно, но она продолжает считываться с диска. Иногда на больших сложностях возникают такие "запилы" диска, что играть становится трудно. Я сделал так, чтобы при нулевой громкости диска музыка не считывалась с диска и запускалась снова при прибавке громкости.
Молодец, это очень полезная фича, экономит трафик CD-ROM.
_______________________________________ Урча, пухлыми лапами кот вцепился в жидкую шевелюру конферансье и, дико взвыв, в два поворота сорвал голову с полной шеи. Две с половиной тысячи человек в театре вскрикнули как один.
Думаю замутить что-нибудь с сохранениями. Планирую использовать какую-нибудь клавишу на экране статистики после прохождения уровня. Загрузка планируется из главного меню.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Сохранения частично работают. Частично, потому что неправильно определяется номер уровня для загрузки, хотя он сохраняется тоже. Все остальное сохраняется и загружается корректно. Сохраняется все оружие (наличие и количество), здоровье, броня, backpack, номер уровня, громкости звуков и музыки, сложность (нужно проверить, загружается ли она). Возможность сохранения возникает после окончания уровня. Там текстом указано, какой клавишей можно сохраниться. Правда уведомление об успешном сохранении пока не придумал, как сделать. Загрузка доступна из главного меню (пока срабатывает со второго нажатия) и после смерти героя.
Что нужно сделать: 1) Нужно отловить ошибку с определением номера уровня для загрузки. 2) Немного перекомпоновать главное меню, чтобы переместить пункт Load game. Сейчас он у меня находится выше номера уровня. 3) Уведомлять игрока, что есть возможность загрузиться после смерти другой клавишей. 4) Обработка ситуаций, когда файла с сохранениями нет, когда он некорректный (любой из параметров за пределами допустимого).
Добавлено спустя 1 час 28 минут: Кстати, сохранение получилось всего лишь 92 байта. На каждую величину отводится по 4 байта. То есть, если нужно записать наличие BFG, то получается запись: 000001. Неэкономно, но что уж сделаешь... В принципе, общее количество сохраняемых параметров не такое большое, поэтому можно на это забить. Подумал еще о записи демо в память приставки (там есть флаг для записи демо), а потом интеграции этих демок в REZFILE. Будут полноценные демки, как в других Doom. Правда, насколько этот код рабочий, неизвестно.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Пункты 1, 3 сделал. Обнаружил проблему, когда количество брони не уменьшается после загрузки файла. Даже не помогает прохождение через выход из уровня. Но, как только поднимешь какую-нибудь броню (если возможно), то глюк пропадает. Починил. Нужно было добавить в файл сохранения armortype.
Следующие проблемы: 5) Не грузится backpack. Вернее, его отбирают перед загрузкой. Починил. 6) При загрузке сохранения из другого уровня неправильно определяется, какое небо будет. Небо починил.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
To convert these RAW image files for use for the 3DO version of DOOM. Make a script in DEBABELIZER that does this...
Где взять этот DEBABELIZER для MacOS 7-8 ? Гугл находит только для OS X. Может кто найдет? (нашли же фотошоп где-то)
Вот.
Добавлено спустя 6 часов 22 минуты 22 секунды: Может кому-нибудь будет интересно. Пока копался с кодом, естественно, появилась необходимость отслеживать работу функций. Придумал использовать для этого NVRAM. То есть, если функция сработала, создаем файл заданного имени. Можно туда тоже писать что-нибудь проходное. Очень наглядно, хоть и неудобно постоянно перезагружаться в GameGuru.
static void RunMenu(void) { if (MiniLoop(M_Start,M_Stop,M_Ticker,M_Drawer)==ga_completed) { /* Process the menu */ S_StopSong(); G_InitNew(StartSkill,StartMap); /* Init the new game */ G_RunGame(); /* Play the game */ } }
Здесь главное меню. Мне нужно сюда засунуть еще одну проверку. У меня появился статус ga_loading, истинность значения которого тоже нужно отследить. Если делаю так:
static void RunMenu(void) { if (MiniLoop(M_Start,M_Stop,M_Ticker,M_Drawer)==ga_loading) { /* Process the menu */ S_StopSong(); G_InitNew_LOAD(gameskill,gamemap); /* Init the loading game */ G_RunGame(); /* Play the game */ } if (MiniLoop(M_Start,M_Stop,M_Ticker,M_Drawer)==ga_completed) { /* Process the menu */ S_StopSong(); G_InitNew(StartSkill,StartMap); /* Init the new game */ G_RunGame(); /* Play the game */ } }
То, естественно, если нажимаем в меню на LOAD GAME, то сначала проверяется верхний блок, возвращает истину и поперла игра. Если нажимаем просто запуск уровня (НЕ load game), то верхний блок не истина. Но чтобы сработал нижний блок, нужно еще раз нажать на кнопку. То есть, в RunMenu нужно сделать сразу проверку и на то, и на другое. Не знаешь, как можно это решить? Что-то сообразить не могу.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
А, может, и нормально так... Просто не знаю, куда еще его можно засунуть.
По моему, неплохо и пунктом - выше выбора уровня.
_______________________________________ Урча, пухлыми лапами кот вцепился в жидкую шевелюру конферансье и, дико взвыв, в два поворота сорвал голову с полной шеи. Две с половиной тысячи человек в театре вскрикнули как один.
Я тоже так подумал. Обратил внимание, что даже в оригинальной игре Options находятся на надписи Doom. И ничего, прокатывало. А у меня будет в главном меню load на этом же месте. А расположение курсора при запуске будет, по-прежнему, на Level.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
if (MiniLoop(M_Start,M_Stop,M_Ticker,M_Drawer)==ga_loading) { /* Process the menu */ S_StopSong(); G_InitNew_LOAD(gameskill,gamemap); /* Init the loading game */ G_RunGame(); /* Play the game */ } if (MiniLoop(M_Start,M_Stop,M_Ticker,M_Drawer)==ga_completed) { /* Process the menu */ S_StopSong(); G_InitNew(StartSkill,StartMap); /* Init the new game */ G_RunGame(); /* Play the game */
Выделенное жирным судя по всему функция.
Заведи премененную такого же типа как и функция, приравняй ей значение функции, а потом сравнивай уже.
т.е. должно получится так
Versus писал(а):
static void RunMenu(void) { /// обьявляем переменную Flag и далее присваиваем ей значение функции тип Flag; Flag=(MiniLoop(M_Start,M_Stop,M_Ticker,M_Drawer); if Flag==ga_loading) { /* Process the menu */ S_StopSong(); G_InitNew_LOAD(gameskill,gamemap); /* Init the loading game */ G_RunGame(); /* Play the game */ } if Flag==ga_completed) { /* Process the menu */ S_StopSong(); G_InitNew(StartSkill,StartMap); /* Init the new game */ G_RunGame(); /* Play the game */ }
Author Ты записал по сути тоже самое, просто ввел дополнительную переменную. Есть ли в этом смысл? Получается же тоже самое... Или нет? aliast Не, так вообще не пашет. При нажатии бесконечно обновляется картинка с титров на большую надпись Doom, потом при следующем нажатии снова главное меню показывает и так далее. Ни запустить игру, ни загрузить.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
aliast, по else'у всё равно два раза вызов функции произойдёт (если первое условие не истина) ибо она в условии и там и там встречается.
Versus писал(а):
Ты записал по сути тоже самое, просто ввел дополнительную переменную
Нет это будет работать совершенно по разному и лишнего вызова к функции не будет, не придётся два раза на кнопку нажимать. В переменную занесётся результат работы функции (как я понял это выбор пользователем элемента меню?), а дальше мы функцию не трогаем уже и работаем только с её результатом записанным в переменную. Это всё равно что спросить пользователя "Что делать дальше?" и на выбор куча вариантов (10 штук например). Так по оригинальному коду его 10 раз спросят, если он выбрал 10 пункт - "выход", прежде чем выполнится нужное действие.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения