[size=14][b][url=http://klimaleksus.narod2.ru/Other/POSTS/Drui_2.PNG][color=green]Второй комментарий от Drui7[/color][/url][/b][/size] [r][i][color=gray][url=http://klimaleksus.narod2.ru/Other/realms/138.txt]#138[/url], 04.06.12[/color][/i][/r] [quote=Drui7]вот мои "исследования". вверху-моя программа загружает с файла 16bpp изображение. снизу-как оно выглядит на самом деле.[/quote] А где оно находится? Вернее, в каком окружении. Вы вырвали её из файла, а что же было выше, ниже и рядом с ней? [quote=Drui7]я не читал твой код на АВС паскале. только документацию по ТИМ картинкам.[/quote] И что ж там по TIM ? [quote=Drui7]даю "секунду" процу "обдумать" что было в предыдущем периоде и цикл идет дальше[/quote] Чё? А если просто по циклу идти вперёд до тех пор, пока всё не обработает? [quote=Drui7]и самое важное: если кто то захочет что то сказать по этому поводу, то меня не интересуют сорцы,тем более на языках какими я не владею.[/quote] Тогда скажите наконец, какими владеете! [quote=Drui7]скажите саму логику и я напишу свой алгоритм[/quote] Любите алгоритмы? Будет вам обязательно. [quote=Drui7]и наверняка напишу его так,что он будет работать быстрее,чем ваша идея +доп опций навешаю кучу,[/quote] Ну насчёт скорости может быть. Дополнительные опции всегда приветствуются, но в контексте с: [quote=Drui7]не нагружая проц или оперативку.[/quote] А это уже оскорбление! Словно все мои программы только полные тормоза, перегревают процессор, съедают память и не приносят абсолютно никакой пользы!! Будто я в программисты вовсе не гожусь. Будто я пренебрегаю ресурсами. Ну просите, что не рассчитываю на запуск под Windows 95… Типа вы такой крутой. Много на себя берёте. Что ж, если ваша главная задача – куча дополнительных опций и низкое потребление ресурсов – с вас перепись вообще всех моих программ на другой «более экономичный и продвинутый» язык. Я же делал только ради результата. А вы понтуетесь, дескать вы круче меня. Посмотрим! Либо берите слова назад, либо устроим дуэль на умения (учтите, что я побеждал на ВКОШПП в Узбекистане. По миру – сотое место, но вряд ли вы были среди других 99 команд. И надеюсь, что вы не Суворов…) [quote=Drui7]на пост инициатора могу ответить так: "оч многа букаф".[/quote] «Инициатор» – это опять я? А «пост» – это не «должность» (как я сперва подумал), а всего лишь «комментарий». А сказали-то: «На пост инициатора…» [quote=Drui7]текст читается тяжеловасто, при таком объеме.[/quote] Ага хор но я по дрг не мог рзв что пст рвн три бкв в каж слв и без знк прп слб прч? [quote=Drui7]по поводу WAD - да,скриншоты были,но я не увидел заголовков, там были какие то "середины" кода. или я не верно их понял. новые скрины - самое то,спасибо[/quote] Но в DAT другая система, так что от них вам мало пользы. [quote=Drui7]и да,ты не сказал "я прав потому,что прав". ты сказал "Я сделал как оно есть. Главное что работает! " - что есть аналог[/quote] Это был юмор (мне что, в самом деле [i]все[/i] шутки особо помечать?). Ирония заключалась в следующем: 1) Вы сказали «Не говори, что ты прав.»; 2) Я отвечаю «Главное что работает!», что якобы подтверждает ваши опасения – я специально нарушил столь необоснованное требование; 3) Тут же ниже по тексту я пишу «Я разве похож на человека, который может так сказать!?», хотя только что так и сказал, как бы противореча себе и нарушая свои же доводы в подтверждение вашего высказывания; 4) А ещё ниже я расписываю весь алгоритм в подробностях, опровергая и разрушая как вашу фразу, так и мои вышеназванные извращения действительности, доводя до абсурда обсуждения этого вопроса. [quote=Drui7]эм? что не ясно?[/quote] Ща-абисню… [quote=Drui7]ну,пропустил я запятую...[/quote] Да дело вообще не в запятой! А в общем построении всей фразы. Смотрите (с запятой): [quote=Drui7]в начале обсуждений видел, что инициатор всего этого хотел бы wad распаковщик переписать на другой язык программирования,но что то не увидел, удалось ли?[/quote] 1) «в начале обсуждений видел» – неясно КТО видел, поскольку отсутствует местоимение «Я». Вопросительный знак на конце предложения в этом случае может означать, что вы пытаетесь спросить «видел ЛИ в начале обсуждений?» 2) «инициатор всего этого хотел бы» – напрашивается, что «инициатор хотел бы всё это». Сразу же не ясно, кого вы имеете в виду под «инициатором», и ЧТО бы он хотел. 3) «видел, что инициатор всего этого хотел бы wad распаковщик» – будто «я видел, что инициатор хотел ИМЕТЬ wad распаковщик», но это притом, что он как раз у нас есть. Следовательно, «инициатор» кто-то другой. 4) «хотел бы wad распаковщик переписать на другой язык программирования» – мол, вы предлагаете себя, то есть вы хотели бы переписать распаковщик (поставить местоимение «Я» перед «хотел») 5) «но что то не увидел» – типа вы что-то не увидели или упустили в тексте. Или же «инициатор хотел бы распаковщик переписать на другой язык, но что то не увидел» – то есть инициатор не заметил (не увидел, не предусмотрел) какую-либо деталь или недоработку в распаковщике при его создании. 6) «удалось ли?» – наконец. Допёрли по конца… начиная понимать, что все остальные разборы никак не стыкуются с таким неожиданным окончанием, приходится искать другое преобразование предложения. Смысл становится более-менее понятен. Дело не в запятых! Вот как должна звучать ваша фраза: {{{ Я видел в начале ваших обсуждений, что инициатор всего этого собирался переписать свой wad-распаковщик на другой язык программирования, но я так не понял, удалось ли ему это сделать? }}} Всё-таки я филолог и не могу не интересоваться некорректно построенными фразами. А ваша мне напомнила такую вещь: [i]«Вероятность того что я знаю что ты мне ответишь на вопрос земля круглая но она не точна.»[/i] [quote=Drui7]то что wad - архив без сжатия, я в курсе. понять не мог как именно делить на файлы, думаю ваши слова выше + скрины помогут понять и применить знания к Crash Bandicoot Carnival[/quote] Мой совет – ищите указатели. Сначала просто найдите осмысленный участок (текст, графика, звук, модель), а потом трассируйте его первые байты как offset, которой выискивайте в другой (обычно предшествующей) части файла. [quote=Drui7]ПМ-сленг. личное сообщение. от англ Private Message[/quote] Тогда «PM». Или хоть Pmsg. А по-русски – только ЛС (лошадиная сила) [quote=Drui7]про само странное изложение- запятушечки пропускаю иногда, иногда сообщение на форуме дописываю, нажав "Edit" и не читая,что было выше. просто новая строка и новая мысль.[/quote] А вы сначала сформулируйте её полностью, а потом только пишите! [quote=Drui7]процесс обратный. светотень превращаю в цвет.[/quote] Я и не спрашивал! В том контексте мой вопрос был просто наглым сарказмом. [quote=Drui7]мной (и одним моим другом) придумана схема, в основе которой логическое "И" и корни/степени 2ки. чуть позже доработаю и могу выложить. этот алгоритм будет поточнее чем деление и умножение на 31 и 255[/quote] Очень вряд ли. [quote=Drui7]я разве сказал,что не ясно? 0_о я сказал,что надо поискать еще формулу...может есть корректней[/quote] Да ну? Давайте чётко поставим цель. Как именно вы хотите (2^8)^3 цветов преобразовать в (2^5)^3 ? Я например хочу преобразовать [b]с наименьшими потерями[/b]. Эксперимент. Возьмём линейку в 255 сантиметров. Чёрточки через каждый сантиметр. Начало линейки – ноль. Первая черта – единица. Последняя черта – 254. Конец линейки – 255. Теперь возьмём ещё одну такую линейку, только сделанную из резины. Разрежем её на делении «31». Теперь у неё начало как у первой, а последняя черта обозначает 30, конец линейки – 31. Далее самое интересное. Нам надо сопоставить целые числа (черта к черте) на обеих линейках. Растягиваем резиновую линейку так, чтобы она стала равной по длине первой линейке. Теперь они одной длины и приложены друг к другу. Найдём для каждой чёрточки каждой линейки наиболее близкую к ней черту от другой линейки. Это и будет лучшее сопоставление. Процентное соотношение решается простой пропорцией. Я привёл конкретные данные 255 -> 32 не просто так. Поскольку в ваш алгоритм я не врубился, у меня такое предложение. Реализуйте его в простом теле, где на входе дайте ему все целые от 0 до 255. А выход пусть записывается в файл как в моём примере. А потом сравним сопоставление явно! И если ваш алгоритм хоть чего-то стоит, то результаты будут в точности повторять мои. [quote=Drui7]а мой велосипед у меня под рукой, написан мной, код лично мне ясен и можно модифицировать под конкретные нужды[/quote] И под какие же нужды вы его собираетесь затачивать? [quote=Drui7]тем более ваш велосипед КБ не вскрывает вроде) если бы он мог-уже бы разобрались[/quote] Не пробовал. Просто отдельно графику выделять долго. Если разобьёте его на субфайлы – сравним удобство работы. [quote=Drui7]а я по вашему ЧТО потрошу? я еще с полгода назад нашел этот форум и искал информацию, пару ваших мыслей показались весьма интересными ...потом забросил и вновь ковыряюсь в баше.[/quote] Правильно. Я для этого так и сказал. Ищите, находите ресурсы. [quote=Drui7]текст-мной уже переведен с яп) не весь,но много...да,он открыт, правда кодировочка интересная у букаф. # символов не как табличные, а хрен пойми как,даже не по формуле,пришлось вирт клаву писать для сопсоставления,чтоб перевести (но это касается яп версии)[/quote] Я и nihonjin устроили проще – построчно сопоставили японские перемешанные символы к осмысленной транскрипции мои скриптом «умной» автозамены (я разделял предыдущие вхождения, чтобы на стыке фраз не происходило повторный «пробуксовываний») Кстати, как закончите перевод – наш человек его перепроверит. А вы как раз вовремя – перепроверите у нас 330 переводов японских надписей на табличках Spyro1 ! [quote=Drui7]что касается картинок в баше-во 1ых я смею предположить,что слова (word ), либо целые строки стоят местами не как положено. мной найдено 15 (!) заголовков от тим файлов подряд и ни одного слова (word) про размер...насчет адресов-видимо сказано,но я не понял.[/quote] Что за TIM заголовки? У нас графика просто прёт потоком прямо с первого байта первого субфайла… [quote=Drui7]ура!) мой велосипед наконец поехал!) дал нужные цвета, благодаря вашему посту. однако мне до сих пор не ясно какого *** биты разворачивать надо, ибо "меньше байта нет ничего" в нашем деле.[/quote] Во-от! Я тоже не стал доверять режиму «15bpp» в Delphi, а тупо сам компарил наличие нужного бита в двух байтах. [quote=Drui7]т.е. проц не должен разворачивать биты...чисто логически рассуждая...а он такая ***** - разворачивает же.[/quote] Наверно PlayStation был рассчитан на это. Может ему не сложно, если ВСЯ графика зашифрована так? (бедный Epsxe…) [quote=Drui7]есть какие то мыли про индекс прозрачности?[/quote] Есть. Только для режима 15 бит. Когда находите флаг прозрачности, выгружайте сам цвет абсолютно чёрным как RGB(0,0,0). При загрузке – всегда оставляйте отключённым. При копировании – дублируйте, не изменяя цвет. Для всех других режимов (4 бит, 8 бит, 24 бит) забудьте, что он существует, и обрабатывайте как нужно. [quote=Drui7]про WAD сам понял? или ссылка есть на полезную инфу по таким форматам?[/quote] Нет ни ссылки, но и понял не сам. Я писал об этом… Я нашёл на одном странном форуме диалог, когда кто-то пытался расковырять WAD файл от PlayStation. Он выложил его и просил хакеров подсказать структуру. Но все только спрашивали, что это за файл. Ответ был «Spyro the dragon» !! И в предпоследнем посте очень умный человек расписал четыре пункта адрес-размер. В последнем комментарии автор темы просил кого-то написать скрипт или прогу, но его просьбы остались услышаны разве что мной, но он об этом вряд–ли знает. А сам алгоритмик я немного усовершенствовал. [quote=Drui7]зы: к велосипеду припаял пропеллер и получился вертолет =))) все картинки концовок есть и в цветах)) правда адреса не точные,но можно "поиграться" и уточнить[/quote] Теперь поищите указатели на них. [quote=Drui7]а после этого я нашел...ну ты знаешь. я тебе в пм кинул ссыль. и байты встали на места)))[/quote] «Файл не найден» – да, «не огонь». Совет – если нашли что-то полезное размером не превосходящее 10 Мб – сами перезаливайте туда, откуда его не удалят! ([i]если информация не хранится в трёх разных местах – считай что её вообще нет![/i]) [quote=Drui7]«опечатка в подсказке – плевать, главное что не в коде»[/quote] Класс! Надо будет взять на вооружение. [hr] Вопросы к вам. Как работает движок 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|» (без разделителей как «AB[b]C1[/b]BCDE0DE01», но это было бы ошибкой). Не найдено, значит пишем. Стало «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», значит был захвачен стык. [hr] Ну как? Я не сильно вас напугал? )) Реализуйте это, и будете в натуре крутым программистом! [quote=DrWho]Однако уровни Спаркса имеют все одну и ту же музыку. Вот там можно и поменять музыку (во всех 4х уровнях, ибо в меню воспроизводится как раз эта самая музыка).[/quote] Даю 9/10, что всё это просто ссылки на один и тот же трек. Нужно взломать как сами ссылки, так и метод добавления своего трека. А если мы собираемся ужимать Crash Bandicoot Carnival до 30 Мб… Свободное дисковое пространство лучше не тратить на новую музыку. Хоть бы не пришлось удалять часть имеющейся… [size=14][b][url=http://klimaleksus.narod2.ru/Other/POSTS/Drui_3.PNG][color=green]Третий комментарий от Drui7[/color][/url][/b][/size]