Помогите, пожалуйста, с запаковкой файлов образа Greatest Hits обратно. Метод из этой темы я пробовал - вылетает эмулятор. Пробовал также создать образ в UltraISO, в режиме PS2 CD, тот же результат.
*Решено
Добавлено (19.05.2012, 16:45) --------------------------------------------- Итак, оставшийся текст уровня Шейлы мной не найден. Более того, во всём WAD.WAD не найти этих недостающих кусков текста... Есть предположение, что текст зашифрован. Если это так, то перевести этот уровень будет трудно. Кто-нибудь может найти текст этого уровня?
Сообщение отредактировал steeldragon - Суббота, 19.05.2012, 16:54
В чём была проблема и что теперь работает? Вы бы описали пункты действий, может быть, что-то интересное там. Музыка была?
Люди!! Нарисуйте, наконец, шрифт! Или хотя бы проверьте ширину каждой буквы (особенно диакритики «<31») Это сделать просто:
– Нарисуйте шрифт, пометив самую широкую букву вертикальными полосками и полностью закрасив все остальные. – Напишите текст, в котором эта буква стояла бы между всеми прочими (например, AWBWCWDWEWF…), только время от времени вставляйте пробелы. – Скомпилируйте и запустите, отскриншотьте. – А потом посчитайте реально отрисовавшееся количество полосок у каждой буквы.
Quote (steeldragon)
Итак, оставшийся текст уровня Шейлы мной не найден. Более того, во всём WAD.WAD не найти этих недостающих кусков текста... Есть предположение, что текст зашифрован. Если это так, то перевести этот уровень будет трудно. Кто-нибудь может найти текст этого уровня?
Минуточку… Какой «текст»?
{ Pete the Mountain Goat Bobby the Mountain Goat }
? Это есть в SCUS. Может просто пропущены имена? Можно взломать указатель и посмотреть.
Я ещё ничего не проверял, но есть подозрение, что разработчики просто забыли дать козлам имена, заметив это в самом конце. А поскольку структура игры уже была сформирована, они быстренько вынесли их вообще за пределы WAD. Переведём, ничего страшного. По этому вопросу я ответил в теме про перевод текста. but nobody came
Кстати о музыке... может, добавить в игру (если возможно) музыку MrModez? Если он согласится, чему шанс равен 99% И возможно ли сделать патч с вихрем на НЕ GH? А то английская версия у вас...
Если не ошибаюсь, там не трогали текст (меню не считается) только из-за того, что шрифты очень сложны для перевода. Хотя я думаю, что можно это исправить, если aleksusklim взломает и её. Хотя это уже в обсуждение второй части надо.
aleksusklim всё взломает, но не рассчитывайте всецело на меня одного))
Quote (gitgeg)
И возможно ли сделать патч с вихрем на НЕ GH? А то английская версия у вас...
Можно всё. Но я сделал для GH хотя бы потому, что её CRC и размер всегда одинаков, что гарантирует правильную обработку. Если делать для простой версии, то образ может отличаться от файла к файлу. Однако можно сделать внутренний патч только для субфайла, тогда пользователям придётся ещё и перепрожигать образ самостоятельно.
Quote (gitgeg)
Кстати о музыке... может, добавить в игру (если возможно) музыку MrModez?
…До меня ваши умозаключения не дошли… Просто измените все возможные тексты (e.g. «Text no. ONE, probably for PETE») на свои различные наборы, эмулируйте и посмотрите, что какой козёл скажет.
Разъясню. Каждый из этих трех текстов содержит в себе все фразы всех козлов. Но они же не все используются конкретным персонажем, верно? Неиспользуемый текст можно спокойно заменить не влезающим текстом персонажа, к которому он относится, и там где нужно, вставить ссылку на него. Я выяснил, что второй текст относится к Billy, третий - к Pete (а не первый), ну а первый к Bobby. Пример неиспользуемого текста: "You can get really steep cliffs..." у Billy. Если его заменить, к примеру, простыми пробелами, то текст персонажей не затронется никак, поскольку это говорит Pete.
Вы программист. Я это понял по методу изложения сути. Но всё-таки вы как-то странно её излагаете… Словно куда-то очень-очень спешите!
Quote (Drui7)
вот что нашел: тайловый редактор … мб поможет
Скачал-проверил. А что так слабоват? Максимум – 4 бита на пиксель. А у нас все 8 да 15! Прикольные развороты (которые проще и понятнее выполнить в любом нормальном редакторе). Странный метод открытия… я не смог вытащить графику ни из одного нашего файла. В применение палитры я вообще не врубился. PVV был проще и понятнее! Почему горизонтальная развёртка так ограничена? Здесь – 16 пикселей; PVV – 1024 пикселя. Разработчики не заботились об универсальности.
Quote (Drui7)
вроде бы как та программа на ABS паскале,но что то более продвинутое.
Чего? Кто – я? АВС паскаль? Удобно? Да заводской PVV + мой PGG = лекарство от головной тайловой боли!
Quote (Drui7)
в начале обсуждений видел, что инициатор всего этого хотел бы wad распаковщик
Ёлки… фразы несогласованно-непонятные как у DrWho…
«Инициатор» – это я. (Или вы кого имели в виду?) Ещё раз:
Quote (Drui7)
в начале обсуждений видел, что инициатор всего этого хотел бы wad распаковщик переписать на другой язык программирования,но что то не увидел удалось ли?
Зачем вам другой язык? Чем плоха платформа GML? Ну есть В-Ад-Перемещатель на АВС, но он слабоват по сравнению с AWM.
Quote (Drui7)
можно вкраце узнать по каким именно "признакам" он делит на файлы?
Что? Кто? Кого делит? WAD структура. Вы читали начало темы, где я как раз её описывал?
Короче… Если быстро. Есть файл. Он как бы архив без сжатия. Имеет заголовок – таблицу размещения и последовательно перечисленные файлы без имён, только с порядковым номером. Файлы описываются следующим образом: Первые четыре байта заголовка (unsigned integer pointer DWORD little-endian – называйте как хотите) обозначают адрес первого СУБФАЙЛА (субфайлом называем заархивированный файл) в пространстве WAD. То есть это по сути размер самой шапки. Следующие четыре байта – размер первого субфайла. Третья четвёрка – адрес начало второго субфайла. Обычно равен {адрес предыдущего + размер предыдущего} Ещё четвёрка – его размер. И так до тех пор, пока мы не считаем количество байт шапки (значение первой четвёрки) или пока тупо одно из чисел не будет равно нулю.
Ошибки: – Адрес[n]+Размер[n] не равен Адрес[n+1]; – Адрес[n] больше чем Адрес[n+1]; – Адрес[n]+Размер[n] больше объёма WAD. – Адрес[n] меньше чем Текущий считываемый байт шапки, но не Ноль. – Адрес[n] больше нуля, а Размер[n] равен нулю.
Все эти ошибки нефатальные, то есть извлечение можно продолжать, игнорируя их. Также WAD может не содержать размеров, а только адреса.
Методы работы: 1) Создание-разбиение. Программа считывает шапку WAD и копирует данные по адресам и размерам в новые отдельные файлы. Или собирает последовательно файлы в новый WAD, оставив сперва {n*8} (n-заранее известное максимальное количество файлов в архиве) нулей. А при записи очередного файла просто вносит его адрес и размер в заголовок. 2) Импорт-экспорт. Программа берёт существующий WAD. Переходит по адресу {(n-1)*8} (n-номер нужного субфайла, начиная с «1») и считывает адрес-размер субфайла. Переходит к нему и копирует в файл. Наоборот, копирует файл по адресам WAD, затирая старые данные, но при этом нельзя запихать больше, чем там отведено места.
Но зачем вам это знать, словно вы хотите свой менеджер написать! Берите мой. Исходник есть. Поковыряйте, там весь алгоритм.
Quote (Drui7)
а то в пм ответа нет и нет =(
Где нет ответа?
Quote (Drui7)
и может кто то показать заголовки тех самых wad файлов ? (скрин с винхекса) . а то у меня есть подозрения,что аналог такого Wad вшит в архив,которым я занимаюсь
Первый – заметьте 32bit(+) Второй – сравните offset.
Quote (Drui7)
upd: увидел на сайте пост:
Вау, вы его читали! И остались в непонятках!?
Quote (Drui7)
почему BGR?! т.е. если байты выставить не little endian,а big endian (местами поменять), то получится RRR-GGG-BBB-(STP) ! а у тебя (STP)-BBB-GGG-RRR! (если поменять)
Я сделал как оно есть. Главное что работает!
Quote (Drui7)
поясню: STP - индекс прозрачности (документацию я читал и в ней RGB,а не BGR как у тебя)
Ну хоть буду знать, что это за бит. Кстати, как вы поняли, при разбивке на 4 бит и 8 бит он уже является неотъемлемой частью тайла, а не атавизмом.
Quote (Drui7)
не говори,что ты прав потому что прав. а скажи почему у тебя не как в документации.
Хей! Я разве похож на человека, который может так сказать!? Обидно даже…
Quote (Drui7)
еще твои слова:
Интересно, а как вы по-другому приведёте 16 миллионов к 32 тысячам?
Quote (Drui7)
зачем так? получется 5 бит, т.е. в 10ричной [0..31]. берем round(sqrt(sqrt(2^([0..31]+1))))-1 и получаем [0..255]. на мой взгляд это более корректно,чем умножение и деление.
Ни фига не понял. Так-с…
Quote (Drui7)
как то опровергнешь?
Да мне опровергать нечего! Я лучше объясню всё ещё раз.
«GGGR-RRRR=0BBB-BBGG» Вы понимаете ЭТО? Я, например, с трудом. Я взял пять зелёных карандашей, пять красных, пять синих и один простой, чтобы имитировать 16 бит. Пытался по-разному разложить их на столе, чтобы получить УПОРЯДОЧЕННУЮ структуру формата цвета. Для меня это RGB. Красный-зелёный-синий. Стандарт. Почему нет? Смотрим, как ЧИТАЮТСЯ биты. 1) Берём ПЕРВЫЙ байт. 2) Считываем биты С КОНЦА к началу. 3) Берём ВТОРОЙ байт. 4) Считываем биты С КОНЦА к началу.
Я записал RRRRRGGGGGBBBBB0 в таком формате: «GGGR-RRRR=0BBB-BBGG». Иллюстрация по шагам (по четыре бита в каждом шаге): 1) – RRRR 2) – RRRR-RGGG 3) – RRRR-RGGG=GGBB 4) – RRRR-RGGG=GGBB-BBB0. Вот и вся техника. И прямо в этот миг появился PVV! Я создал две мега-палитры (массивы записи двухбайтовых целых в big-endian и little-endian). Попробовал на них – работает. Сам набрал некую последовательность битов в WinHex (через Data Interpreter) и предсказал цвет. Результат полностью подтвердился.
Quote (Drui7)
зы: я не знаю как верно конвертировать 32 в 256, скорее всего алгоритма нет
Ну вы монстр… А как цветное изображение привести к серому? А как полноцветное сделать VGA?
Quote (Drui7)
тем не менее рискну предположить вот так,ибо просто умножить на 256/32=8 немного не то...теряется оч большое кол-во оттенков и теряется так ужасно равномерно...пфф, лучше задать степенную функцию для тех же пределов
Именно что: «РАВНОМЕРНО». Я приводил яркое фото к 15bpp палитре своим методом и почти не заметил искажения. Только если конвертировать плавные градиенты.
Конвертация. У нас есть две множества цветов: [0..31] и [0..255], согласны? Они пересекаются (0=0 {чёрный}, 31=255 {белый}). Но при этом второй диапазон содержит больше оттенков, чем первый (например, как метр в измерении полевой линейкой с чёрточками в 1см и чертёжной линейкой с чёрточками в 1мм) Цель: сопоставить одно множество другому с наименьшими потерями. Ясно, что тупо приравнять не получится. Мы находим ПРОЦЕНТ интенсивности. Например, «18» по 5бит чему равно для 8бит? Максимальное значение нашего диапазона – 31. Находим процентное отношение: 18/31*100%= 58,0645161290…% Более половины. Теперь находим процент от числа для максимума второго множества (255): 58,0645161290…%*255/100%=148,064516128… Округляем до целого: «148». Результат: 18 по 5бит максимально похоже на цвет 148 по 8бит.
Точно так же и обратное преобразование. Но если вам и сейчас не ясно, приведу тупо явное сопоставление:
max_in=power(2,in)-1; max_out=power(2,out)-1; for (i=0;i<=max_in;i+=1){ str=string(i)+"="; val=i/max_in*max_out; str=str+string(round(val)); file_text_write_string(f,str); file_text_writeln(f)}
file_text_writeln(f)
// Из восьми в пять: in=8; out=5;
max_in=power(2,in)-1; max_out=power(2,out)-1; for (i=0;i<=max_in;i+=1){ str=string(i)+"="; val=i/max_in*max_out; str=str+string(round(val)); file_text_write_string(f,str); file_text_writeln(f)}
file_text_close(f); exit }
Но я не понимаю, зачем вам заново изобретать велосипед, если есть PVV и PGG? Исходные коды тоже. Ковыряйте!
А нам нужно распотрошить Crash Bash. И хоть PVV читает VRAM, я пока открытых текстур не обнаружил, но текст с лёгкостью.
Quote (gitgeg)
Ну, если сможете поменять предметы местами, то почему бы и музыку не заменить?
О, как ни странно, но это я понял. А спросил же я вот что: так чё за музыка? Я ни о чём таком не знаю, не видел.
А её как-нибудь прослушать можно, чтобы я имел вообще представление о том, что вы предлагаете? Впихнуть-то удастся всё что угодно, но вот «подойдёт» ли? Я не могу ответить ни «да» ни «нет», пока не увижу саму эту музыку. Но изменить музыку в игре я и сам желаю. 1) В титрах. Вернее, хочу её обработанную версию. «Ремикс»! 2) Можно «откромсать» часть трека какого-нибудь уровня, в котором музыка часто повторяет себя. И аккуратно дополнить нашей. Но только: в Greatest Hits и так хорошая музыка! Ей нельзя жертвовать!
P.S 3215-4321=0543-2121 Тут что-то напутано. Должно быть: 3215-4321=0543-2145 Блин, опять не так! Нужно: 3215-4321=0543-2154
Но только: в Greatest Hits и так хорошая музыка! Ей нельзя жертвовать!
Однако уровни Спаркса имеют все одну и ту же музыку. Вот там можно и поменять музыку (во всех 4х уровнях, ибо в меню воспроизводится как раз эта самая музыка).
вот мои "исследования". вверху-моя программа загружает с файла 16bpp изображение. снизу-как оно выглядит на самом деле.
А где оно находится? Вернее, в каком окружении. Вы вырвали её из файла, а что же было выше, ниже и рядом с ней?
Quote (Drui7)
я не читал твой код на АВС паскале. только документацию по ТИМ картинкам.
И что ж там по TIM ?
Quote (Drui7)
даю "секунду" процу "обдумать" что было в предыдущем периоде и цикл идет дальше
Чё? А если просто по циклу идти вперёд до тех пор, пока всё не обработает?
Quote (Drui7)
и самое важное: если кто то захочет что то сказать по этому поводу, то меня не интересуют сорцы,тем более на языках какими я не владею.
Тогда скажите наконец, какими владеете!
Quote (Drui7)
скажите саму логику и я напишу свой алгоритм
Любите алгоритмы? Будет вам обязательно.
Quote (Drui7)
и наверняка напишу его так,что он будет работать быстрее,чем ваша идея +доп опций навешаю кучу,
Ну насчёт скорости может быть. Дополнительные опции всегда приветствуются, но в контексте с:
Quote (Drui7)
не нагружая проц или оперативку.
А это уже оскорбление! Словно все мои программы только полные тормоза, перегревают процессор, съедают память и не приносят абсолютно никакой пользы!! Будто я в программисты вовсе не гожусь. Будто я пренебрегаю ресурсами. Ну просите, что не рассчитываю на запуск под Windows 95… Типа вы такой крутой. Много на себя берёте. Что ж, если ваша главная задача – куча дополнительных опций и низкое потребление ресурсов – с вас перепись вообще всех моих программ на другой «более экономичный и продвинутый» язык. Я же делал только ради результата. А вы понтуетесь, дескать вы круче меня. Посмотрим! Либо берите слова назад, либо устроим дуэль на умения (учтите, что я побеждал на ВКОШПП в Узбекистане. По миру – сотое место, но вряд ли вы были среди других 99 команд. И надеюсь, что вы не Суворов…)
Quote (Drui7)
на пост инициатора могу ответить так: "оч многа букаф".
«Инициатор» – это опять я? А «пост» – это не «должность» (как я сперва подумал), а всего лишь «комментарий». А сказали-то: «На пост инициатора…»
Quote (Drui7)
текст читается тяжеловасто, при таком объеме.
Ага хор но я по дрг не мог рзв что пст рвн три бкв в каж слв и без знк прп слб прч?
Quote (Drui7)
по поводу WAD - да,скриншоты были,но я не увидел заголовков, там были какие то "середины" кода. или я не верно их понял. новые скрины - самое то,спасибо
Но в DAT другая система, так что от них вам мало пользы.
Quote (Drui7)
и да,ты не сказал "я прав потому,что прав". ты сказал "Я сделал как оно есть. Главное что работает! " - что есть аналог
Это был юмор (мне что, в самом деле все шутки особо помечать?). Ирония заключалась в следующем: 1) Вы сказали «Не говори, что ты прав.»; 2) Я отвечаю «Главное что работает!», что якобы подтверждает ваши опасения – я специально нарушил столь необоснованное требование; 3) Тут же ниже по тексту я пишу «Я разве похож на человека, который может так сказать!?», хотя только что так и сказал, как бы противореча себе и нарушая свои же доводы в подтверждение вашего высказывания; 4) А ещё ниже я расписываю весь алгоритм в подробностях, опровергая и разрушая как вашу фразу, так и мои вышеназванные извращения действительности, доводя до абсурда обсуждения этого вопроса.
Quote (Drui7)
эм? что не ясно?
Ща-абисню…
Quote (Drui7)
ну,пропустил я запятую...
Да дело вообще не в запятой! А в общем построении всей фразы. Смотрите (с запятой):
Quote (Drui7)
в начале обсуждений видел, что инициатор всего этого хотел бы wad распаковщик переписать на другой язык программирования,но что то не увидел, удалось ли?
1) «в начале обсуждений видел» – неясно КТО видел, поскольку отсутствует местоимение «Я». Вопросительный знак на конце предложения в этом случае может означать, что вы пытаетесь спросить «видел ЛИ в начале обсуждений?» 2) «инициатор всего этого хотел бы» – напрашивается, что «инициатор хотел бы всё это». Сразу же не ясно, кого вы имеете в виду под «инициатором», и ЧТО бы он хотел. 3) «видел, что инициатор всего этого хотел бы wad распаковщик» – будто «я видел, что инициатор хотел ИМЕТЬ wad распаковщик», но это притом, что он как раз у нас есть. Следовательно, «инициатор» кто-то другой. 4) «хотел бы wad распаковщик переписать на другой язык программирования» – мол, вы предлагаете себя, то есть вы хотели бы переписать распаковщик (поставить местоимение «Я» перед «хотел») 5) «но что то не увидел» – типа вы что-то не увидели или упустили в тексте. Или же «инициатор хотел бы распаковщик переписать на другой язык, но что то не увидел» – то есть инициатор не заметил (не увидел, не предусмотрел) какую-либо деталь или недоработку в распаковщике при его создании. 6) «удалось ли?» – наконец. Допёрли по конца… начиная понимать, что все остальные разборы никак не стыкуются с таким неожиданным окончанием, приходится искать другое преобразование предложения. Смысл становится более-менее понятен.
Дело не в запятых! Вот как должна звучать ваша фраза:
{{{ Я видел в начале ваших обсуждений, что инициатор всего этого собирался переписать свой wad-распаковщик на другой язык программирования, но я так не понял, удалось ли ему это сделать? }}}
Всё-таки я филолог и не могу не интересоваться некорректно построенными фразами. А ваша мне напомнила такую вещь: «Вероятность того что я знаю что ты мне ответишь на вопрос земля круглая но она не точна.»
Quote (Drui7)
то что wad - архив без сжатия, я в курсе. понять не мог как именно делить на файлы, думаю ваши слова выше + скрины помогут понять и применить знания к Crash Bandicoot Carnival
Мой совет – ищите указатели. Сначала просто найдите осмысленный участок (текст, графика, звук, модель), а потом трассируйте его первые байты как offset, которой выискивайте в другой (обычно предшествующей) части файла.
Quote (Drui7)
ПМ-сленг. личное сообщение. от англ Private Message
Тогда «PM». Или хоть Pmsg. А по-русски – только ЛС (лошадиная сила)
Quote (Drui7)
про само странное изложение- запятушечки пропускаю иногда, иногда сообщение на форуме дописываю, нажав "Edit" и не читая,что было выше. просто новая строка и новая мысль.
А вы сначала сформулируйте её полностью, а потом только пишите!
Quote (Drui7)
процесс обратный. светотень превращаю в цвет.
Я и не спрашивал! В том контексте мой вопрос был просто наглым сарказмом.
Quote (Drui7)
мной (и одним моим другом) придумана схема, в основе которой логическое "И" и корни/степени 2ки. чуть позже доработаю и могу выложить. этот алгоритм будет поточнее чем деление и умножение на 31 и 255
Очень вряд ли.
Quote (Drui7)
я разве сказал,что не ясно? 0_о я сказал,что надо поискать еще формулу...может есть корректней
Да ну? Давайте чётко поставим цель. Как именно вы хотите (2^8)^3 цветов преобразовать в (2^5)^3 ? Я например хочу преобразовать с наименьшими потерями.
Эксперимент. Возьмём линейку в 255 сантиметров. Чёрточки через каждый сантиметр. Начало линейки – ноль. Первая черта – единица. Последняя черта – 254. Конец линейки – 255. Теперь возьмём ещё одну такую линейку, только сделанную из резины. Разрежем её на делении «31». Теперь у неё начало как у первой, а последняя черта обозначает 30, конец линейки – 31. Далее самое интересное. Нам надо сопоставить целые числа (черта к черте) на обеих линейках. Растягиваем резиновую линейку так, чтобы она стала равной по длине первой линейке. Теперь они одной длины и приложены друг к другу. Найдём для каждой чёрточки каждой линейки наиболее близкую к ней черту от другой линейки. Это и будет лучшее сопоставление.
Процентное соотношение решается простой пропорцией. Я привёл конкретные данные 255 -> 32 не просто так. Поскольку в ваш алгоритм я не врубился, у меня такое предложение. Реализуйте его в простом теле, где на входе дайте ему все целые от 0 до 255. А выход пусть записывается в файл как в моём примере. А потом сравним сопоставление явно! И если ваш алгоритм хоть чего-то стоит, то результаты будут в точности повторять мои.
Quote (Drui7)
а мой велосипед у меня под рукой, написан мной, код лично мне ясен и можно модифицировать под конкретные нужды
И под какие же нужды вы его собираетесь затачивать?
Quote (Drui7)
тем более ваш велосипед КБ не вскрывает вроде) если бы он мог-уже бы разобрались
Не пробовал. Просто отдельно графику выделять долго. Если разобьёте его на субфайлы – сравним удобство работы.
Quote (Drui7)
а я по вашему ЧТО потрошу? я еще с полгода назад нашел этот форум и искал информацию, пару ваших мыслей показались весьма интересными ...потом забросил и вновь ковыряюсь в баше.
Правильно. Я для этого так и сказал. Ищите, находите ресурсы.
Quote (Drui7)
текст-мной уже переведен с яп) не весь,но много...да,он открыт, правда кодировочка интересная у букаф. # символов не как табличные, а хрен пойми как,даже не по формуле,пришлось вирт клаву писать для сопсоставления,чтоб перевести (но это касается яп версии)
Я и nihonjin устроили проще – построчно сопоставили японские перемешанные символы к осмысленной транскрипции мои скриптом «умной» автозамены (я разделял предыдущие вхождения, чтобы на стыке фраз не происходило повторный «пробуксовываний»)
Кстати, как закончите перевод – наш человек его перепроверит. А вы как раз вовремя – перепроверите у нас 330 переводов японских надписей на табличках Spyro1 !
Quote (Drui7)
что касается картинок в баше-во 1ых я смею предположить,что слова (word ), либо целые строки стоят местами не как положено. мной найдено 15 (!) заголовков от тим файлов подряд и ни одного слова (word) про размер...насчет адресов-видимо сказано,но я не понял.
Что за TIM заголовки? У нас графика просто прёт потоком прямо с первого байта первого субфайла…
Quote (Drui7)
ура!) мой велосипед наконец поехал!) дал нужные цвета, благодаря вашему посту. однако мне до сих пор не ясно какого *** биты разворачивать надо, ибо "меньше байта нет ничего" в нашем деле.
Во-от! Я тоже не стал доверять режиму «15bpp» в Delphi, а тупо сам компарил наличие нужного бита в двух байтах.
Quote (Drui7)
т.е. проц не должен разворачивать биты...чисто логически рассуждая...а он такая ***** - разворачивает же.
Наверно PlayStation был рассчитан на это. Может ему не сложно, если ВСЯ графика зашифрована так? (бедный Epsxe…)
Quote (Drui7)
есть какие то мыли про индекс прозрачности?
Есть. Только для режима 15 бит. Когда находите флаг прозрачности, выгружайте сам цвет абсолютно чёрным как RGB(0,0,0). При загрузке – всегда оставляйте отключённым. При копировании – дублируйте, не изменяя цвет. Для всех других режимов (4 бит, 8 бит, 24 бит) забудьте, что он существует, и обрабатывайте как нужно.
Quote (Drui7)
про WAD сам понял? или ссылка есть на полезную инфу по таким форматам?
Нет ни ссылки, но и понял не сам. Я писал об этом… Я нашёл на одном странном форуме диалог, когда кто-то пытался расковырять WAD файл от PlayStation. Он выложил его и просил хакеров подсказать структуру. Но все только спрашивали, что это за файл. Ответ был «Spyro the dragon» !! И в предпоследнем посте очень умный человек расписал четыре пункта адрес-размер. В последнем комментарии автор темы просил кого-то написать скрипт или прогу, но его просьбы остались услышаны разве что мной, но он об этом вряд–ли знает. А сам алгоритмик я немного усовершенствовал.
Quote (Drui7)
зы: к велосипеду припаял пропеллер и получился вертолет =))) все картинки концовок есть и в цветах)) правда адреса не точные,но можно "поиграться" и уточнить
Теперь поищите указатели на них.
Quote (Drui7)
а после этого я нашел...ну ты знаешь. я тебе в пм кинул ссыль. и байты встали на места)))
«Файл не найден» – да, «не огонь». Совет – если нашли что-то полезное размером не превосходящее 10 Мб – сами перезаливайте туда, откуда его не удалят! (если информация не хранится в трёх разных местах – считай что её вообще нет!)
Quote (Drui7)
«опечатка в подсказке – плевать, главное что не в коде»
Класс! Надо будет взять на вооружение.
Вопросы к вам. Как работает движок PlayStation по части движения сквозь двоичный код? Можно там например взломать обработчик и направить его совсем не туда (например на наш вставленный в пустое пространство PS-EXE код), откуда потом он вернётся обратно? Чтобы например изменить какие-то значения памяти или подгрузить что-то с диска. А можно ли переопределить нажатия клавиш? Например, чтобы Crash Bash запускался из главного меню Spyro3 не по R1L2Квадрат, а по простому SELECT или кружку?
Можно ли декомпилировать EXE так, чтобы что-то изменить и закомпилировать обратно?
Можно ли прокручивать отладку кода, чтобы программа явно показывала, что она грузит, по какому адресу обращается, что лежит в стеке, что и откуда рисуется на экране, и что хранится в регистрах + какие вычисления там происходят. Так можно было бы с лёгкостью отыскивать любые ресурсы.
Где хранятся видео-графические и 3D-пространственные данные? Ведь не в 2 Mb ОЗУ? А если кто-то недобрый поместит во VRAM не текстуры, а часть кода или переменные, можно ли их будет взломать в эмуляторе или через ArtMoney?
Хотите алгоритмик? Классный, очень нам поможет. Позволяет очень результативно сравнивать файлы между собой, отыскивая одинаковые области. Я его давно придумал, но просто не смог реализовать. Я запутался в действиях. Зато могу на словах объяснить. Вы сказали, что настолько круты, что можете любой алгоритм заставить летать. Проверим? Вот этот алгоритм Я не смог воплотить. Если ВЫ сможете – признаю ваше превосходство.
Прога называется «Что есть у нас и чего нет у них». Суть вот в чём: На вход выдаются три или два файла. Первый – основной. Второй – он предположительно должен содержать в себе некоторые части первого файла. Третий – файл, в котором их точно нет. Как пример – пусть Краш. Ищем 3D модель TNT бомбы (и атрибутику – текстуры, звуки, код) Первый файл – небольшой уровень, в котором есть такая бомба. Второй файл – совершенно другой уровень, максимально непохожий на предыдущий, но зато тоже имеющий бомбу. Третий – уровень, который содержит большинство объектов первого, но в нем этой бомбы как раз нет. Программа должна проанализировать их и выдать те части файлов (списки байт максимальной длинны), которые одинаковы у первых двух и отсутствующие у третьего. Файлы небольшие, обрабатывается в ОЗУ. Например как массивы байт, но это уже на ваше усмотрение. Вот теперь на эксперименте со строкой покажу все тонкости: ПЕРВЫЙ ФАЙЛ: «ABCZ1BCDE00DE01C1». ВТОРОЙ ФАЙЛ: «ABCDE0123C1». Третьего файла нет. То есть просто собирать всё одинаковое. РЕЗУЛЬТАТ: массив пуст. Работа: – Считываем первый символ из первого файла. Это «А». – Производим поиск её во втором файле. Обрабатываем первое вхождение. – Теперь временно пытаемся приплюснуть следующий символ из первого файла – это «В». – Проверяем, совпадает ли двухбайтовая строка. Да, совпадает – «АВ». – Плюсуем ещё один символ – «С». – Проверяем – да, совпадает «АВС». – Плюсуем ещё один символ – «Z». – Проверяем – нет, не совпадает. Значит пока что «АВС» – наиболее длинная строка. – Производим поиск этой строки ABC по третьему файлу. Если найдена, то «неверно». – Производим поиск её по массиву Результата, причём флаг разделения не должен оказаться ни в одном вхождении. Если найдена, то «неверно». – У нас всё «верно», поэтому заносим строку в массив Результата, помечая флагом разделения её цельность. Если бы было «неверно», то мы бы не заносили её, пропустив это пункт. – Переходим к следующему вхождению. Но оно единственно (иначе мы бы трассировали АВС по нему тоже) – Итерация завершена. Забываем считанную строку и берём новый символ – это «В» (второй) – Ищем «В» во втором файле. Найдено первое (и единственное как и «А») вхождение. – Пытаемся плюсануть к нему следующий символ – «С». – Строка «ВС» совпала. Плюсуем следующий символ. – Строка «ВСZ» не найдена, поэтому производим поиск по третьему файлу строки «ВС». – Не найдено. Теперь ищем в строке результата (у нас это «АВС|») – Найдено совпадение, то есть «ВС» уже содержится в результате «АВС». Значит «неверно» и переходим к следующему вхождению. – Его нет, забываем всё и начинаем итерацию со с третьего символа «С». – Первое вхождение (из двух!) совпало. – Плюсуем «Z». Проверяем. – Не совпало (ну ещё бы). В третьем файле тоже нет. – В строке результата – да есть. Значит «неверно», переходим ко второму вхождению. – Плюсуем туда «Z». Не совпало (там «С1» на конце). – Ищем «С» в третьем файле и строке результата – «неверно». Итерация завершена. – Забываем всё и считываем «Z». – Она вообще не найдена во втором файле, так что сразу идём дальше. – На подходе «1». Два вхождения. Обрабатываем первое. – Плюсуем «В». Не совпало. Значит только «1». – В третьем нету, в Результате – тоже нету («АВС|»). – Всё «верно», заносим её в массив (теперь там «ABC|1|») – Переходим к следующему вхождению. – Плюсуем «В». Там файл кончился, не совпало. – А «1» уже есть в Результате (только что добавили), поэтому меняем интерацию. – Считываем «В» (вот это будет интересно!) – Находим одно вхождение. Плюсуем: – «BC» – есть, «BCD» – есть, «BCDE» – есть, «BCDE0» – есть, «BCDE00» – нет. – Ищем «BCDE0» в третьем файле и Результате (а там в «ABC|1|» никаких «BCDE0») – Нету, значит заносим его через флаг разделителя, будет «ABC|1|BCDE0|» – Других вхождений нет, меняем итерацию. – Считываем «С». – Два совпадения, обрабатываем (но мы-то с вами видим, что в первом случае дойдёт до «CDE0» и оборвётся (уже присутствует), а во втором только до «С» (из «С1»), что тоже не станет «верно»). Следующая итерация: – Считываем «D» (дойдёт до «DE0» и оборвётся). Следующая: – И «E» (единственное уже обработанное вхождение «Е0»). Следующая: – Считываем первый «0» (два нуля «00» не совпадут с «01», а единственный «0» уже существует в Результате «ABC|1|BCDE0|»). Далее: – Пошёл второй «0» («0D» накроется по тем же причинам). Ещё: – Считываем «D». Вот тут распишу: – Одно вхождение. Проверяем «DE» – совпало. – Плюсуем «0». Проверяем «DE0» – совпало. – Плюсуем «1». Проверяем «DE01» – совпало! – Плюсуем «C». Теперь не совпало «DE01С». – Проходимся по Результату – «DE01» не найдено («ABC|1|BCDE0|»). И в третьем файле тоже нет. – Записываем в массив. Теперь там «ABC|1|BCDE0|DE01|». – Следующие две итерации для «E» («E0», «E01») и для «0» («01») просто упрутся в только что записанные данные и будет «не верны». Промотаем это: – Считываем «1». Два вхождения (но в первом «1C» не равно «12», а во втором кончился файл; простой «1» уже есть в Результате, поэтому «не верно»). Итерация: – Считываем «C» (предпоследняя). Два вхождения: – На первом плюсуем «1» – и «С1» не совпадает с «CD». – На втором имеем совпавший «C1»! В третьем файле нет, а Результат: – Гласит «ABC|1|BCDE0|DE01|» (без разделителей как «ABC1BCDE0DE01», но это было бы ошибкой). Не найдено, значит пишем. Стало «ABC|1|BCDE0|DE01|C1|» – Следующая итерация на единичке, к которой уже нечего плюсовать, а она присутствует в Результате. – Сканирование окончено. Теперь будем чистить сам Результат! – Берём первую строку «АВС» и ищем её среди последующих строк. Нету, всё ОК. – Берём вторую строку «1» и тоже ищем впереди. Ага! В последнем «С1» есть «1», значит этот самый начальный отдельностоящий «1» уже не актуален, удаляем его. – Проверяем так же «BCDE0», «DE01» и «C1» – совпадений уже нет. – Выводим результат «ABC|BCDE0|DE01|C1|». Как? Уж не знаю. Но напротив каждой строки следует написать offset обоих файлов, откуда мы её взяли (запоминать надо было отдельно!). Например так:
ABC – 0=0 BCDE0 – 5=1 DE01 – 11=3 C1 – 16=9
Или всё это надо по разным файлам раскидать… Насчёт «разделителя». Поскольку новых свободных байт нет, можно записать «1» в те места дополнительного массива, где соответственно происходят стыки строк. Пример:
ABCBCDE0DE01C1 00100001000101
И при сравнении если сумма индексов (в пределах строки) нижнего массива больше «1», значит был захвачен стык.
Ну как? Я не сильно вас напугал? )) Реализуйте это, и будете в натуре крутым программистом!
Quote (DrWho)
Однако уровни Спаркса имеют все одну и ту же музыку. Вот там можно и поменять музыку (во всех 4х уровнях, ибо в меню воспроизводится как раз эта самая музыка).
Даю 9/10, что всё это просто ссылки на один и тот же трек. Нужно взломать как сами ссылки, так и метод добавления своего трека. А если мы собираемся ужимать Crash Bandicoot Carnival до 30 Мб… Свободное дисковое пространство лучше не тратить на новую музыку. Хоть бы не пришлось удалять часть имеющейся…
Раз уж на то пошло... Я тоже немного программист (про "немного" - это длинная история...). Сейчас мне пришла в голову одна интересная идейка - поисковик шрифтов + графический редактор для их замены другими. Долго делать его придется, конечно, да и производительность, по моим подсчетам, будет невелика (около 4000 действий с файлом/сек, причем за одно действие можно проверить/заменить только один байт... если хорошо над этим не поработать, естессно). Да и палитру придётся выяснять... Но зато, если у меня получится, то это облегчит работу переводчикам. Я напишу, если что-то получится.
Добавлено (04.06.2012, 23:26) --------------------------------------------- P.S. Целый архив с утилитами для игр PS One: здесь P.P.S. Ещё интересненькое: вот , но, как правильно сказано в комментарии, ссылке на сайте "капут". P.P.P.S. Рабочая (!!!) ссылка: вот
Сообщение отредактировал steeldragon - Вторник, 05.06.2012, 13:33
Вот это сообщение я уже писал. Пост исчез. Скорее всего это техническая неполадка, и он просто не отправился. Если же он был удалён кем-то намеренно, то прошу хотя бы как-то уведомлять меня о таком.
Quote (Drui7)
эм? раз на то пошло я не хочу дальше читать вообще.
Ой, да ладно вам!
Quote (Drui7)
и заметь, во всем что я написал – нет такого кол-ва смайлов больше, не радует меня уже это "общение" но тогда зачем я вообще отвечаю и даю какие то ссылки на программы?
Не можете же ли вы лишь из-за одного меня перестать помогать проекту перевода?
Quote (Drui7)
чорд...я забыл, я ж больше не лезу...okay
Полно, полно)) Будет вам!
Заявления там у вас хорошие, правда обвинений много. Но на них на все у меня найдётся ответ! Только не сейчас…
Погодите не уходите! Дождитесь моего оправдания.
P.S
Quote (Drui7)
спорим, модеры удалят мое сообщение, не дочитав оффтоп и не исправив, описанный там баг?
Осторожней, допроситесь ведь…
Модераторам на всякий крайний: мои посты не трогать в любом случае!А за восстановление постов меня ругать не надо. Он сам решил вернуться, а таковы мои условия. Пятый и последний комментарий от Drui7 but nobody came
Сообщение отредактировал aleksusklim - Пятница, 26.10.2012, 22:46
DINK, спасибо. Тогда пусть ещё и торрентом будет: http://rutracker.org/forum/viewtopic.php?t=782578 Now is the winter of our discontent... It was the best of times, it was the worst of times... Call me Ishmael... Stately, plump Buck Mulligan... Call me Jonah. My parents did... Gaily bedight a gallant knight... Beware the ides of March... Tyger tyger burning bright... ... I always get the Shemp...