Правила, действующие в этом форуме и всех его подфорумах:
1) Запрещена реклама в любых её проявлениях (сразу бан без предупреждения)! 2) Мат тоже не приветствуется на форуме, но иногда можно выразить свои чувства ( лучше заменяйте матные слова точками, пробелами, другими буквами)! 3) Категорически запрещается унижать, посылать, издеваться над участниками форума! Мы здесь все - одна большая и дружная семья! Поэтому за нарушение этого правила автоматически будем банить! 4) Разрешены ссылки на информацию, которые относятся к тому или иному разделу форума! 5) Ссылки не в тему будут удаляться и пользователь получит предупреждение или будет забанен! 6) Пользователям разрешено задавать любые вопросы относящиеся к теме, а мы все дружно ответим на эти вопросы. А также отвечать на вопросы и высказывать своё мнение. 7) Повторные темы, которые будут создаваться, будут удалены! Создавайте темы, удостоверившись, что такой темы нет на форуме! 8) Запрещён флуд во всех его проявлениях, сообщения не по теме, сообщения состоящие из одного или нескольких смайликов без текста, сообщения типа - Вах!, Рулез!, Круто! и т.п. Пользуйтесь пожалуйста кнопкой [EDIT], не плодите бессодержательные сообщения. 9) Использование смайликов разрешается не более 3-х подряд!
Уже придумал, как сделать по умолчанию большой экран (не сложно), но остановился. Это, конечно, здорово, что можно вот так просто запустив игру получить такой доступ, но... 1) Исчезает один чит-код (он просто больше не нужен). 2) Не нужно больше сохранять этот параметр в файл настроек и в файл сохранений. Ну и что? - скажете вы. А мне кажется, что лучше по максимуму пользоваться функционалом оригинала. Не знаю, как объяснить... 3) Если мы запустим наш новый образ, то он автоматом "пропатчит" файл настроек в NVRAM и если мы будем снова использовать оригинальный образ, то он уже будет с активированным большим экраном. Не хотелось бы это портить.
Все это время я занимался (и продолжаю заниматься) отлавливанием ошибок и тестом кода на различные ситуации. Немного прогресса есть.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Yaranga Меня скорее маниакально преследует пункт 3. Вмешательство в работу оригинала должно быть минимальным. А так-то, конечно, уменьшить всегда можно.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Лёд тронулся, господа присяжные заседатели. У меня получилось откомпилировать исходники makerez 1995 года под Windows. Пришлось некоторые строчки пока закомментировать, но это уже большая победа! Rezfile собрал из разобранных новой версией makerez с github кусков. На выходе получился почти такой же Rezfile, как и оригинал, но в его начале получились перевернутые байты. Ну, учитывая, что одни из закоментированных строк и были
то результат предсказуем. Они наглухо отказываются работать, уж не знаю, почему. А в остальном получился такой же Rezfile. Перевернутые байты только в начале (если я правильно определил, то где-то килобайт 6).
Также пришлось немного подшаманить файл скрипта, по которому собирается Rezfile.
Добавлено спустя 2 часа 30 минут 10 секунд: Похоже, перевернутые байты в начале - это оффсеты.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Ну да, это оффсеты. Только первые единички это версия файла и что-то там ещё неважное, и 01D9 это количество файлов внутри rezfile. Плюс флаг 80 00 тоже не учитывается, как и в моём сборщике.
Последний раз редактировалось aliast 17 окт 2015, 13:38, всего редактировалось 1 раз.
Ну как увидел... сравнил то что внизу с тем что наверху на первом скрине :) См. оффсет 0x18. Команда вроде бы эта. Если команда рабочая, тогда всё в порядке. Вопрос о её назначении остаётся открытым.
Чтобы включить флаг 80 00, достаточно убрать комментарий со строки LOADFIXED. И еще. ENDIAN, почему-то, нужно писать LITTLE, только в этом случае он начинает делать своп байт. Кстати, кто-нибудь может подогнать функцию переворота 4 байт? Та, что есть на асме не пашет.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Кстати, кто-нибудь может подогнать функцию переворота 4 байт?
В моём варианте это не совсем функция, а директива #define. Хотя наверное можно и в функцию переделать... В чём разница? Да просто нашёл такой вариант и скопипастил :)
aliast О! Спасибо! Я находил этот метод, но не понял, как использовать. Сейчас воткнул, работает. Проблемы ушли, но не все. Осталось вот это: В начале файла: И далее в индексах начиная с этого места:
и до этого:
Далее все чисто. Это что же получается? Флаг 80 00 выставляется для каждого файла?
Добавлено спустя 1 час 43 минуты 3 секунды: Этот флаг нужен выборочно для некоторых файлов. У меня такое ощущение, что файлы выбирались "от балды". Вот рабочий файл скрипта. Как видно, сначала флаг выставляется первому файлу, затем через разные промежутки некоторым файлам. Потом, начиная со 152-го, флаг выставляется каждым трем файлам через семь. Команда LOADFIXED выставляет флаг, а команда LOADHANDLE его снимает.
Осталось разобраться как перевернуть байты в начале REZFILE.
Добавлено спустя 1 час 16 минут 14 секунд: Осталось пофиксить вот это:
Добавлено спустя 24 минуты 5 секунд: Все, получается идентичный REZFILE. Теперь надо разбираться с теми файлами, которые в него запакованы и как их добавлять/менять.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
aliast Воспользовался твоим CelCutter-ом на своей картинке Game_saved. Потом поставил ее вместо картинки loading. Вот результат:
Не знаешь, как это пофиксить?
Добавлено спустя 2 часа 37 минут 13 секунд:
aliast писал(а):
Блин, я забыл или никогда не знал что означает префикс 80 в таблице оффсетов к файлам в Rezfile. Это файлы D0001, D0134, D0152, D0153, D0154, D0162, D0163, D0164, D0172, D0173, D0174, ... т.е 3 последних лумпа всех 24 карт, BIGNUMB (текстуры чисел?) и самый первый файл. Остальные файлы без префикса.
Уфф... Ты об этом уже писал... А я на свои грабли наступал, время тратил... Как с последним лумпом, нет продвижения?
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
В коде есть передача вида: p->message = "You picked up a medkit". Такие текстовые сообщения должны были появляться на экране, когда игрок что-то подбирает. Обработчики в коде есть, а сообщения не выводятся. Не порядок. Пофиксил. Также сделал, чтобы отображалось сообщение Secret found!, когда мы нашли секретное место. На производительности это все сказаться не должно, потому что я обращаюсь к переменным, которые уже загружены в память. Добавил только одну переменную int для задержки сообщений на экране на некоторое время перед тем как они исчезнут.
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Author Я, честно говоря, не думаю, что она планировала делать эти сообщения. Шрифт в игре один и все надписи выглядят просто гигантскими! Большинство при выводе не помещаются на экран, поэтому я буду их резать.
Добавлено спустя 3 минуты 11 секунд: Наш любимый флаг 80 00 влияет в BurgerLib здесь:
extern MyHandle UsedHands; /* Used list */ extern MyHandle PurgeHands; /* Purged Master handle */
void CompactHandles(void) { MyHandle *Scan; Word CalledCallBack;
Scan = UsedHands.NextHandle; /* Index to the active handle list */ if (Scan==&UsedHands) { /* Failsafe */ return; } Scan=Scan->NextHandle; /* I can't move the first handle ever! */ if (Scan==&UsedHands) { return; } CalledCallBack = TRUE; /* Assume bogus */ if (MemPurgeCallBack) { /* Valid pointer? */ CalledCallBack = FALSE; } do { /* Skip all locked or fixed handles */ if (!(Scan->Flags & (HANDLELOCK|HANDLEFIXED))) { LongWord Size; Byte *StartMem; MyHandle *Last;
Last = Scan->PrevHandle; /* Get the previous handle */ StartMem = (Byte *)Last->MemPtr + Last->Length; Size = (Byte *)Scan->MemPtr - StartMem; /* Any space here? */ if (Size) { /* If there is free space, then pack them */ if (!CalledCallBack) { /* Hadn't called it yet? */ CalledCallBack = TRUE; MemPurgeCallBack(MMStageCompact); /* Tell the app */ } memmove(StartMem,Scan->MemPtr,Scan->Length); /* Move */ Scan->MemPtr = StartMem; /* New start address */ } } Scan = Scan->NextHandle; /* Next handle in chain */ } while (Scan!=&UsedHands); }
Как я понял, файлы с флагом остаются на тех же адресах памяти, куда и были загружены. Остальные - дефрагментируются. Есть еще загруженные данные с LockedHandles, они уже явно задаются в коде, а не в REZFILE.
Добавлено спустя 7 часов 44 минуты 18 секунд: Вот что вырисовывается:
_______________________________________ 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 он уже не распознает. https://yadi.sk/d/Ft_bgElYgz7NE
Это фейл... Распознать начало и конец строки мы можем только по маркерам 0000 и FFFF. Если они будут внутри строки - алгоритм их не учтет. Понять, что их учитывать не нужно, может только человек. Это если рассматривать строки отдельно от указывающих на них оффсетов. Попробую вникнуть снова.
Добавлено спустя 4 часа 6 минут 51 секунду: aliast А что за препарируемый lump PC-версии? Что-то я распаковал лумпы первого уровня PC wad, и таких байт, как у тебя на скринах не нашел.
_______________________________________ 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 FFFF это первый блок данных, 0000 0123 FFFF второй блок, 0000 FFFF в конце третий блок. При этом мы должны заменить оба 0000 FFFF на... что там у нас было, 0000 00D0 если не ошибаюсь, и все найденные 0000 0123 FFFF на свой оффсет (оффсет первой такой цепочки). Мой алгоритм то ли вообще ничего не находил, то ли не находил второй 0000 FFFF я уже не понмю.
Т.е. в вышеприведенной цитатой 0000 FFFF это первый блок данных, 0000 0123 FFFF второй блок, 0000 FFFF в конце третий блок.
А, ну тогда еще норм. Но общий алгоритм замудреный, ппц... Сейчас попробую напомнить Ребекке про ее обещание. PS. Все-таки, откуда ты выдрал этот PC-lump?
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Положу рабочую прогу MakeREZ с исходниками (Visual Studio) сюда. В комплекте разобранный REZFILE, скрипт для сборки, собранный REZFILE, а также современный бинарник makerez.exe для разбора REZFILE.
Вложения
Комментарий к файлу: Порт для Windows MakeREZ 1995 года с исходниками. MakeREZ.zip [6.51 МиБ]
Скачиваний: 133
_______________________________________ There are 10 types of people in the world: those who understand binary, and those who don't.
Versus Значит она-таки помнит и сделает. Ты её уже совсем доконал своими просьбами, не удивлюсь, если она узнает адрес и тупо пришлёт тебе всё посылкой она даже в отпуске спрятаться не может, интернет-то всегда с ней. Удивительно, что она что-то делает, я бы не стала, наверное, свои старые проекты поднимать.
_______________________________________ Хотел я его пристрелить - так ведь ни одного патрона не осталось.
_______________________________________ Урча, пухлыми лапами кот вцепился в жидкую шевелюру конферансье и, дико взвыв, в два поворота сорвал голову с полной шеи. Две с половиной тысячи человек в театре вскрикнули как один.
Сейчас этот форум просматривают: MailRu [Bot] и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения