Среда | 23.09.2026 |15:43
Приветствую Вас Гость Мира Спайро | RSS
Модератор форума: nihonjin, aleksusklim, alteya, Томас  
Перевод Spyro 3: Взлом и программы
aleksusklimСообщение # 1 Воскресенье, 26.06.2011, 14:19
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Работа с текстовой частью перевода введётся на code.google.com/p/spyro3-rus, обсуждение перевода (а не взлома) В темеПеревод Spyro 3: Текст
В этой теме происходит обсуждение перевода, а также создание софта для потрошения игры.
Важные сообщения: Структура WAD-файлов Спец. символы и File Paint 1 | Извлечение и добавление текста | О звуке | В продолжение о звуке | Вариант перевода Buzz's Dungeon и Midday Gardens


Сообщение отредактировал aleksusklim - Среда, 29.04.2015, 19:51
 
aleksusklimСообщение # 496 Пятница, 16.05.2014, 12:07
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Ух-ты, я нашёл небо! Которое в Super Bonus Round в подуровне с Хантером и гонкой с йети.

Там ж другое небо, помните? А мой SWV отображал его как небо родительского уровня, потому что я не знал, где находится его настоящее.

А теперь выяснил. Я не там искал! Оно не в том суб-субфайле, где хранится земля подуровня, а в том, где объекты и их текст.

Это первый прыжок! По смещению 48, то есть на третьей строке в WinHex. Там число, первый (из двенадцати или восьми у Spyro2) прыжок для поиска таблицы объектов. И для всех, абсолютно всех этих управляющих суб-субфайлов, включая сам уровень (четвёртый суб-субфайл), оно равно «4», то есть прыжок просто через него, отсутствие прыжка. Был логичный вопрос, зачем он нужен…

Так вот оказывается, только (а может и не только, при финальной конвертации всех посмотрю остальные уровни) ради Супер Бонуса, у которого в одном из порталов подуровней другое небо. Ради этого разрабам пришлось не только сделать эту ячейку равной 4 на всех других уровнях и их подуровнях, но и в явном виде прокопировать туда основное небо для тех подуровней этого уровня, где оно не меняется, то есть для всех остальных.

Даже в четвёртый суб-субфайл уровня. Что довольно странно, тогда зачем вообще небо там, где оно по стандарту лежит, если в каждом и даже в основном уровне его копия?

Короче, вместо числа 4 в 170-ом субфайле везде лежит размер неба, а само небо следом.
И кстати с размерами, говорил я или нет, но теперь ВСЕ игровые структуры, с которыми я имею дело (земля, небо, списки текстур и объектов) будут начинаться с числа, обозначающего их размер. Чтоб стандартизировать для ручной конвертации, так формат логичнее будет.

А ещё я не хочу описывать или рисовать «расположение данных» в своих исходных файлах, как это было в прошлый раз. Просто писать уже придётся слишком много, лучше потом отдельно опишу подытоживание всего того, что нам уже известно.

И портальное небо в Spyro2 и 3 я тогда так и не доламал… Всё равно это просто квадрат, лучшее что я с ним придумал – собрать из шести таких небес один куб, и в SWV его смотреть. Но пока там совсем ничего не взломано, плюс я не помню в точности, где всё было, а выложить хоть имеющееся уже давно хочется.

И кажется, супер редактора моделей из Spyro1, встроенного в SWV, пока тоже не будет, я тогда так и не смог его до ума довести, кажется steeldragon с этом форматом лучше разобрался, потому что несмотря на все его объяснения, у меня до сих пор что-то проглючивает.

Распаковку «пачки небосводов» я вообще уберу: это небеса перелётов между порталами, и они во-первых в точности равны реальным небесам тех порталов во всех версиях Spyro2 и 3, а во-вторых в них нет абсолютно ничего интересного, ибо это те же самые банальные копии основных небес без чего-либо другого (вроде небес на самих порталах или вот этого из последнего скейттрека, что я там рассчитывал увидеть).

А, ну и насчёт поиска небес теперь. У меня же как раньше было – если передавать только имя файла для сохранения модели земли, то сохраняется лишь первая, как для Spyro2; если со звёздочкой – то все из подуровней.
Теперь имя для модели неба тоже можно передавать со звёздочкой. Если её нет, то всё по-старому. А если есть, то напротив каждой земли ищется её небо, и если оно не найдёно, то вместо него копируется основное, а если же обнаружено – то новое.

Добавлено (01.05.2014, 19:38)
---------------------------------------------
О-о, я наконец в Spyro1 взломал камеру!

Она нелогичная, хотя и похожа на Spyro3. Первое отличие – все характеристики это четырёхбайтные целые. В Spyro3 это были двухбайтные: X, Y, Z, R, P, W. (Roll, Pitch, yaW)
Первые три – координаты, и, чтобы мои из SWV преобразовать для Spyro3, их надо умножать на 4, а для Spyro1 – на 16.

С тремя углами сложнее. У Spyro3 всё по стандарту:
http://klimaleksus.narod.ru/Files/3/cam.png

Сначала применяется yaW вокруг глобальной Z оси влево; потом Pitch как отклонение своей головы передней оси вверх или вниз (вокруг Lateral на рисунке), и в конце накладывается Roll – вращение вокруг направляющей оси влево, то есть кручение вокруг линии зрения.

Поскольку моя камера висит на трёх векторах, а не углах, мне пришлось брать арктангенсы и арксинусы, чтобы получить эти три угла. Сначала смотрю проекцию на плоскость вектора, который направлен вперёд – получаю yaW, затем рассматриваю его проекцию на вертикальный вектор – получаю Pitch. Имея эти два угла, поворачиваю на них единичную тройку векторов, и беру их скалярное произведение с настоящими векторами камеры (кроме направленного вперёд вектора) – это и будет Roll.

Все углы надо поделить на 2*pi и умножить на 4096, за переполнением или отрицательными значениями можно не следить, игра скушает.

А вот над Spyro1 я уже неделю потел, и наконец сделал. Там Roll обрабатывается совсем не так, как полагается. Но если он равен нулю (то есть земля внизу, без переворотов вверх тормашками), то остальные углы корректны. Наоборот, если yaW и Pitch нулевые (камера смотрит по оси абсцисс – красная линия в SWV), то Roll работает как полагается. Но когда все три произвольные, получается бред…

Выяснилось, что последний угол поворачивает не вокруг направляющей оси зрения, а тупо вокруг глобальной X оси. В итоге, все углы обозначают уже не те авиационные углы.

Пришлось сначала вычислить Roll – через проекцию латерального вектора на плоскость YZ. Затем повернуть на этот угол единичную тройку векторов, и обработать её по алгоритму получения yaW и Pitch как для Spyro3. И в самом конце повернуть новую единичную тройку векторов на эти три угла (первые два как обычно, а Roll вокруг оси абсцисс) и посмотреть угол между вертикальными (или между латеральными) векторами исходной и итоговой троек – он может оказаться перевёрнут, и тогда надо повторить весь алгоритм заново, но к Roll добавить pi в самом начале.

Фух, осталось ещё для Spyro2 камеру посмотреть, но не думаю, что она чем-то отличается от Spyro3.

Добавлено (09.05.2014, 19:04)
---------------------------------------------
Упростил формулы поворота, оставив в них только то, что нужно. Думаю, не лишним будет опубликовать точные формулы:





Вызываю их вот так:
fromSWVtoSpyroX(camera.x0,camera.y0,camera.z0,camera.xt,camera.yt,camera.zt,camera.xr,camera.yr,camera.zr);

Первые три аргумента – координаты камеры в масштабе модели мира, потом три – координаты единичного фронтального вектора (куда смотрит камера), затем три – координаты единичного латерального вектора, который находится справа под прямым углом.

На выходе получаю то, что можно сразу передавать в эмулятор.

Вот вспомогательные функции вращения точек вокруг векторов:


– Создаёт матрицу поворота вокруг заданного вектора (передаётся угол в радианах и координаты вектора, наверно, нормализованного…)


– Поворачивает точку (вектор) по созданной ранее матрице, нормализует её.

Скришнот работоспособности:
http://klimaleksus.narod2.ru/Files/3/camera.png

Теперь мне осталось ещё доработать обратное преобразование координат и углов объектов, чтобы в SWV рисовать их пирамидками.

Добавлено (16.05.2014, 12:07)
---------------------------------------------
Я подумал, что не будет ничего плохого, если я выложу тестовую-бета-демо версию:
http://klimaleksus.narod.ru/Files/3/SWV_beta.rar


but nobody came
 
MrModezСообщение # 497 Суббота, 17.05.2014, 15:32
Аватар MrModez
Дракон Подросток
Житель Города
«611»
Где: Не в городе Драконов
Цитата aleksusklim ()
Я подумал, что не будет ничего плохого, если я выложу тестовую-бета-демо версию: http://klimaleksus.narod.ru/Files/3/SWV_beta.rar

Работает превосходно. А можно так с обычными уровнями? Можно будет машиниму снимать :D


I'm MrModez
Мои новые треки в стиле Спайро:
Desolate Forest Skate Park - Spyro Custom Track
Lofty Farms - Spyro Custom Track
Gleaming Coast - Spyro Custom Track
 
aleksusklimСообщение # 498 Вторник, 03.06.2014, 13:38
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Обнаружил такой довольно странный глюк.

Игра не должна себя так вести, хотя по логике всё верно. Но на практике я ещё ни разу с этим не встречался (ни, думаю, кто-либо ещё). Проверить может любой, нужно лишь достаточно терпения.

Короче, Evening Lake > Lost Fleet > подуровень пирата с подлодками > зелёное кислотное озеро.

Проверял только на Платиновой версии, если кто захочет – испытайте GH.

Итак, я залез в кислотное озеро, взяв защиту. У меня был Спаркс второго уровня, то есть синий. Особого ничего не использовал, лишь прочитил себе 150 яиц и 20000 камней. Был ещё взлом высоты на горячих клавишах, но я его не использовал.

Суть в том, что если у дракона кончится защита, пока он плавает по поверхности – его отбросит вверх с обожжённым хвостом (если жив Спаркс; иначе Спайро тонет), если защитf кончится, когда он будет под водой кислотой – он погибнет мгновенно, с анимацией удара током (стрtкоза пропадёт сразу).
Интереснее наблюдать, что будет, если защита кончится когда дракон будет находиться физически в жидкости (и плавать), но прямо под её поверхностью, до которой не более одной холки Спайро. Его выбросит вверх (на солидное расстояние сквозь жидкость), но сила прыжка будет как если бы он прыгал с поверхности, то есть он вылетит невысоко, и тут же снова упадёт и обожжёт хвост, и второй прыжок станет уже высоким.
Это конечно со Спарксом, а вот если нет стрекозы, то Спайро утонет прямо в воде (находясь ниже поверхности), с анимацией как если бы тонул с поверхности, а не от удара током (который ещё и нереалистичен тем, что падение вниз происходит как если б там была не вода а воздух).

Но это ещё не глюк. Вопрос: что будет, если защита закончится ровно в тот миг, когда Спайро проплывёт сквозь воротца, дающие новую порцию защиты?
Ну мой ответ такой: если в момент как пропадёт защита, дракон будет в кислоте – он погибнет (за исключением случая под самой поверхностью, описанного выше, когда лишь теряется один HP стрекозы); факт прохождения через рамку никак на это не влияет, потому что защита автоматически повышается до максимума, и никакого урона не регистрируется. Если же предположить, что оба события (истечение таймера и прохождение ворот) действительно произошли в один игровой миг (фрейм/кадр, 1/60 сек.), то мой ответ ещё проще: что в коде игры обрабатывается раньше, то и случится – если истечение времени, то смерть, если новый таймер, то жизнь.

Глюк обнаружился случайно, хотя я намеренно проходил через рамку в последнее мгновение (я играл без звука и сделал savestate находясь в кислоте с низкой защитой, и просто хотел-таки успеть выбраться оттуда не теряя жизнь). Вот что получилось:

Спайро выжил, но Спаркс пропал!

И как такое возможно? Причём повторюсь, Спаркс был синий, то есть за один раз он никак не может исчезнуть. Ведь урон в игре либо не наносит повреждений, либо отнимает очко стрекозы, либо убивает сходу. Никогда не было так, чтобы потерять Спаркса любого уровня, но при этом самому остаться в живых.

Пришлось повторить опыт, и на это ушло очень много времени, но снижение скорости эмуляции до 15 кадр/сек. мне помогло. Ещё раз на тех же условиях и получилось!
Синий Спаркс пропал.

Я сразу подумал о режиме полусмерти, очень загадочном явлении. Кажется, он происходит когда Зоя сохраняет дракона в момент анимации проигрыша (или если через атлас улететь в другой мир одновременно с получением урона, например от лавы), хотя уже точно не помню, надо перечитать посты Йамса.
В Spyro1 это срабатывает, если любой противник смертельно ранит Спайро, отбросив его на площадку к замороженному дракону.

В режиме полусмерти нет Спаркса, не нажимается пауза (важно!), не обрабатывается соприкосновение с поверхностью воды, и по-моему, возникает ещё несколько других полезных странностей, вроде бесконечного воздухоплавания на уровне (не уверен).

Но здесь-то пауза нажималась, а соприкосновение с водой обрабатывалось!
Это можно назвать режимом четверть-смерти…

Предлагаю всем желающим повторить эксперимент, лучше при других условиях (например, на золотой стрекозе в Greatest Hits).

Надо сказать, что жизнь Спаркса у меня была на горячих клавишах в ArtMoney, но забинденными стояли лишь установка в зелёного и добавление единицы, так что глюк не из-за них.




Сообщения об удалении и восстановлении темы «графика + общие вопросы» перенесены сюда:
http://www.spyro-realms.com/forum/48-11672-189362-16-1401961198




Колдунья на выпасе стада овечек:
http://klimaleksus.narod.ru/Files/3/sheep_1.jpg
http://klimaleksus.narod.ru/Files/3/sheep_2.jpg
http://klimaleksus.narod.ru/Files/3/sheep_3.jpg
!


but nobody came

Сообщение отредактировал aleksusklim - Четверг, 05.06.2014, 20:55
 
steeldragonСообщение # 499 Вторник, 26.08.2014, 21:44
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
А-га! Я нашел его!
https://dl.dropboxusercontent.com/u....%21.jpg

На скриншоте вы можете увидеть повреждённые модели камней. Я абсолютно уверен, где-то рядом есть и золотой шрифт.
Добился я такого эффекта путем небольшого повреждения субфайла 97. Если кому надо, могу предоставить сейвстэйт.
 
aleksusklimСообщение # 500 Среда, 27.08.2014, 00:57
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Да! Вы правы.

Эй, а резвее это не тот файл, который я назвал «пачкой небосводов»?
В любом случае, в его начале действительно описаны все бриллианты (в стандартной последовательности). Формат сходу не понял, но вроде между указателями лежат полигоны, а после всех бриллиантов большое заполненное пространство, если занулить его – пропадают сразу все. Возможно, это списки вершин или ещё чего-то общего.
Ну да, надо думать, надо взламывать.

Ещё ниже данные уже загружаются в другую часть RAM памяти. И их повреждение мне всё сбрасывало… Но я-таки нашёл, за что они отвечают:
http://klimaleksus.narod.ru/Files/G/aha_01.jpg
!!
Это часть корзины шара, и я на ней как-то цвета (или текстурные индексы) повредил.
Тронул ещё немного рядом, и:
http://klimaleksus.narod.ru/Files/G/aha_02.jpg
Стёр шару стропы.

Итак, имеем 97-ой субфайл, в котором находятся НЕ анимированные модели, используемые на протяжении всей игры.
С большой вероятностью, золотой шрифт тоже там.
 
steeldragonСообщение # 501 Среда, 27.08.2014, 14:24
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата aleksusklim ()
Эй, а резвее это не тот файл, который я назвал «пачкой небосводов»?
Да, вы тоже правы.
...
Я запамятовал, а небеса из этого файла используются в игре?
Похоже, я опять дал маху и залез не в тот субфайл. Эти модели находятся... в конце третьего субфайла уровня! И на них, что примечательно, есть указатели.
https://dl.dropboxusercontent.com/u....ble.jpg
Это четырехбайтные адреса начала файлов, без указания размера. То есть, в данном субфайле (98) есть, предположительно, 45 файлов моделей. Файл с красным камнем находится, кажется, на семнадцатом месте.

P.S. Похоже, там рядом вообще все модели с уровня: https://dl.dropboxusercontent.com/u....ion.jpg


Сообщение отредактировал steeldragon - Среда, 27.08.2014, 14:49
 
aleksusklimСообщение # 502 Среда, 27.08.2014, 15:43
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
А вот это прикольно.
Я попробовал сопоставить части файла 97 и 98, и нашёл полное совпадение нехиленького куска (красный алмазик точно, может и остальные).

Получается, что в 97 находятся КОПИИ всякой всячины.
Используются ли небеса оттуда? Честно говоря, я так и не понял. Но я точно знаю, что и в Spyro2 (номер субфайла сейчас не помню, но он известен) и в Spyro3 там нет никаких новых небес. Только копии.
Мне почему-то кажется, что этот файл используется ТОЛЬКО для перелётов между мирами.

Эй, всё сходится!
Ну смотрите:
1) Небосводы. Небо для перелётов загружается ДО уровня, это видно если грохнуть субфайл уровня и влететь в него.
2) Транспортное средство. Очевидно, для перелётов между боссами и домашними мирами.
3) АЛМАЗИКИ! Для подсчёта взятого количества, когда они из одной кучи на экране в другую пересыпаются.

Теперь вопрос на засыпку: будет ли там золотой шрифт?

Я бы сказал, что нет, потому что я не помню, чтобы он где-то между уровнями использовался.
А вот в 98 его реально стоит поискать, вместе с буквами. В недомашних мирах могут быть только цифры (вылетают из взятых алмазиков), а в Sunrise Spring должен быть весь алфавит.

Получается, моя «находка» совпадения между RAM и 97 – случайность, потому что 97 хранит копии кусков 98, а значит совпадение было между RAM и 98, что совершенно логично.

Мы чуть по ложному следу не пошли (ага, потом как с табличкой Insomniac – поменяли бы 97, прожгли, а в игре бы ничего не изменилось!)


but nobody came
 
steeldragonСообщение # 503 Пятница, 29.08.2014, 17:21
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
...Я думаю, как минимум некоторые вещи одинаковы для "живых" моделей и для модели уровня.

https://dl.dropboxusercontent.com/u....hex.jpg
Этот кусочек данных практически стопроцентно отвечает за цвета смешения. Кажется, он присутствует только у моделей с текстурами.
Поменял данные на нули (00-00-00 в RGB это же чёрно-чёрный, так?), вот результат:
https://dl.dropboxusercontent.com/u....ors.jpg
 
aleksusklimСообщение # 504 Пятница, 29.08.2014, 18:23
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Воу, круто.

По крайней мере мы теперь точно знаем, что цвета имеют старший байт всегда = 0 (а для неба было = 30h).

Обратите внимание на чёрное яйцо – на нём виден блик света, значит нормали остались... (возможно даже где-то указан цвет самого блика).

А ещё мне жутко интересны эти 7Ch («|») чуть ниже. Я видел их тоннами, и они ничего вроде не меняли...
 
steeldragonСообщение # 505 Пятница, 29.08.2014, 20:29
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата aleksusklim ()
блик света
Упс, я забыл небольшой кусочек данных стереть... Это не блик, это остаток...

Цитата aleksusklim ()
7Ch («|»)
Эти, похоже, меняют. По мере их зануления модель сдвигается "вглубь" и... искажается... (а, и анимация яйца работает нормально вне зависимости от наличия что тех, что этих данных) Лучше продемонстрировать:
https://dl.dropboxusercontent.com/u....C_1.jpg
https://dl.dropboxusercontent.com/u....C_2.jpg
https://dl.dropboxusercontent.com/u....C_3.jpg
https://dl.dropboxusercontent.com/u....C_4.jpg
https://dl.dropboxusercontent.com/u....C_5.jpg
EDIT: Очень похоже на какие-то "дополнения" к координатам вершин. И дальше идут, вероятно, сами вершины...


Сообщение отредактировал steeldragon - Пятница, 29.08.2014, 20:34
 
aleksusklimСообщение # 506 Суббота, 30.08.2014, 01:59
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Цитата steeldragon
Это не блик, это остаток...


Ага, тогда всё остаётся на своих местах – модель с текстурой не может иметь нормалей.
А золотой шрифт-то с нормалями...

Цитата steeldragon
Эти, похоже, меняют.


И можно заливать чем угодно, хоть рандомом?
Тогда попробуйте просто поискать моря похожих данных и портить их.
Пробежаться по уровню и посмотреть, что именно пострадало!
Все такие модели должны иметь что-то общее...

Цитата steeldragon
Лучше продемонстрировать:


Изменения коснулись всех яиц на уровне, верно?

И кстати, цвета лучше заливать не чёрным, а шаблонами вроде FF000000h, 00FF0000h, 0000FF00h, 00FFFF00h, FF00FF00h, FFFF0000h, 7F7F7F00h, тогда ещё и «номера» вершин станут видны.
Я так делал раньше, и делаю сейчас...


Сообщение отредактировал aleksusklim - Суббота, 30.08.2014, 10:47
 
steeldragonСообщение # 507 Четверг, 05.02.2015, 12:44
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата aleksusklim ()
Ага, тогда всё остаётся на своих местах – модель с текстурой не может иметь нормалей.А золотой шрифт-то с нормалями...
А у (предположительно) модели красного камня и нет данных для цветов. (хотя... 7f-7f-7f-00 встречаются...) Вообще, я тут сделал одно открытые, хотя скорее закрытие...
Помните модели из Спайро-1? Там еще были последовательности 7F-7F-7F-00. Которые ничего не делали. Я тут взглянул на них свежим взглядом... знакомые всё лица. Посчитал их кол-во для модели камня - вершин 14, а последовательностей 15. Плюс то, что у золотого шрифта только одна такая последовательность. Значит, одна из них (первая или последняя, наверное) должна присутствовать обязательно и задаёт цвет смешения всей модели. А остальные - повершинно. Наверное, если поменять флаги в полигонах (те, что переключали режим цвета - режимов всего три было: золотой/полупрозрачный/светотеневой), можно любую модель из тех раскрасить как угодно.

Цитата aleksusklim ()
И можно заливать чем угодно, хоть рандомом?
Ага! Провёл ещё пару экспериментов - всё объекты на уровне рассыпаются в мешанину из полигонов:
https://dl.dropboxusercontent.com/u....ted.jpg
Те, что проигрывают анимацию, рассыпаются в движущуюся мешанину.
Похоже, это все-таки вершины...

Цитата aleksusklim ()
Изменения коснулись всех яиц на уровне, верно?
Ну конечно.

Добавлено (02.11.2014, 19:32)
---------------------------------------------
Я тут обнаружил баг в SpyroWorldViewer...
Во - первых, получается, HD-текстуры игрой используются. Взгляните-ка вот сюда:
https://dl.dropboxusercontent.com/u....ame.jpg
Это шторы на окнах арены волшебника из Spooky Swamp. При близком рассмотрении игра подгружает HD-текстуру...

А вот - то же самое при переключении из обычного в HD-режим в SWV:
https://dl.dropboxusercontent.com/u....wer.jpg
Прокол-с. Некоторые текстуры в "bmp.bmp" взяты откуда-то не оттуда.

И еще я нашёл любопытную ссылку: http://tcrf.net/Spyro:_Year_of_the_Dragon
По части поиска секретов в Year of the Dragon нас, кажется, обошли. Ещё и скриншотов из SWV понаделали...

P.S. Кто-нибудь ещё, кроме меня, не видел "выходную" катсцену Глиммера из Spyro 2?

Добавлено (03.11.2014, 14:40)
---------------------------------------------
В продолжение темы секретов. В YoTD, на уровне Cloud Spires есть "секретный самоцвет".
По координатам 38133-55654-29146, на краю облака лежит синий самоцвет. Если подобрать - прибавляется 5, как обычно.
...
Плюс, оказывается, что демо-версий различных игр о Спайро довольно много. Вот список найденных мной:
Spyro 1
1. Official U.S. PlayStation Magazine Demo Disc 12 [SCUS-94219], в сборнике
2. Crash Bandicoot 3, доступна из главного меню с помощью чит-кода
3. "Foil Demo" [SCUS-94439], отдельный диск
4. "Tabloid Demo" [SCUS-94290], отдельный диск

Spyro 2
1. Jampack Winter '99 [SCUS-94475], в сборнике
2. Crash Team Racing, доступна из главного меню с помощью чит-кода
3. SCUS-94460, отдельный диск

Spyro 3
1. На диске Crash Bash
2. SCUS-94654, на отдельном диске вместе с демо Crash Bash
3. SCUS-94615, отдельный диск. (Хотя, по-видимому, демо такое же как и на предыдущем диске)

Добавлено (02.02.2015, 15:38)
---------------------------------------------
Так, про указатели я понял. Значит, каждая строка "с собой" может прихватить довольно много каких-то ещё данных? Оч-чень интересно...
-----
Я написал замену TextChanger-у. Теперь это составная часть целого комплекта программ:
https://dl.dropboxusercontent.com/u....0215.7z
(Для работы программ нужен установленный Python 3)

WAD_Unpacker распаковывает основной WAD.WAD.
Его нужно запустить первым.
Чтобы распаковать файл, запустите программу, перетащите файл в окно (путь до файла должен быть без пробелов) и нажмите Enter.
Распакованные файлы находятся в папке "sf" рядом с программой.

paste_font вставляет графику шрифта сразу по всем файлам уровней.
Эту программу нужно только запустить и дождаться завершения процесса.
Если шрифт, идущий в комплекте, нужно поменять, то запустите createfontpatch, и перетащите в окно два файла (по отдельности, после каждого нажимать Enter) - оригинал субфайла уровня и субфайл уровня (того же) с изменённым шрифтом (больше ничего изменено быть не должно).

paste_text вставляет текст по всем файлам уровней одновременно.
Для этого нужно положить в папку text рядом с программой файлы с текстом с Google Code. (Подойдут только новые из папки alteya, вложенных папок также быть не должно)
После чего - запустить программу и дождаться завершения процесса. Это может занять некоторое время.

WAD_Repacker собирает новый WAD.WAD.
Эту программу тоже нужно просто запустить. Готовый файл WAD.WAD будет в папке программы.

SF_Unpacker извлекает субфайлы из субфайла уровня. (не влияет на работу других программ из комплекта)
Нужно запустить и написать номер нужного субфайла.

(А сколько раз я уже написал "программа" ? А "файл" ?...)

Добавлено (04.02.2015, 20:13)
---------------------------------------------
И снова об указателях. Значит, пишу я программу для автоматизации их замены.
Всё вроде бы нормально, указатель находится, и перезаписывается.
Только вот в игре вместо текста - пустое поле.
Для той же строки ("Well, don't worry, Spyro.") указатель у меня получается как "CE20F8FF", на строку по адресу 1347790 (от начала всего файла). Данные перед старой строкой тоже скопированы на новое место. В памяти новая строка остаётся.

Что же я делаю не так?

Добавлено (05.02.2015, 12:44)
---------------------------------------------
Для каждого уровня нужно делать поправку для указателя.
Для Sunrise Spring - прибавить к полученному указателю 1392.
Для Sunny Villa - прибавить 1736.
И т.д. (вычислять поправку приходится вручную - не думаю, что это я как-то смогу автоматизировать).
После этого, кажется, проблем с заменой нет.

Сообщение отредактировал steeldragon - Понедельник, 02.02.2015, 15:39
 
aleksusklimСообщение # 508 Четверг, 05.02.2015, 20:36
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Цитата steeldragon
Я тут обнаружил баг в SpyroWorldViewer...


Да сколько можно))
Это уже обсуждалось более трёх раз.

Скрин из подуровня, да?
Короче, там такая шняга, что в подуровнях во VRAM загружаются куски чего-то ещё. Причём распиновка координат на них собственная, а графическую память они используют общую. Что-то выгружается из VRAM, что-то откуда-то подгружается.

Мой вьювер умеет получать только графику из первого суб-субфайла, то есть для всего уровня. Но зачастую текстуры, использующиеся в подуровнях, там отсутствуют. Вернее там есть низкокачественные их версии, а также все палитры. Но сами данные 64*64 не совпадают, потому что нужное игра пишет динамически.

Если сдампить VRAM через PVV и залить двоично в первый суб-субфайл, то SWV скушает (ну это на случай если вам позарез надо будет высококачественный скрин подуровня в нём сделать).
Лучше всего заметно в супер-бонусе, там очень много текстур в подуровнях. Ещё в подуровне Агента с фабрики, да и вообще много где.

Цитата steeldragon
При близком рассмотрении игра подгружает HD-текстуру...


Разумеется.
Вы лучше попробуйте выяснить, ОТКУДА оно берётся!
Вернее, я кажется когда-то знал, откуда. Я только не знал, куда именно во VRAM потом загружается…

Цитата steeldragon
По части поиска секретов в Year of the Dragon нас, кажется, обошли.


Не на много.

Цитата steeldragon
Ещё и скриншотов из SWV понаделали...


Воу. «The very tall whirlwind object still exists in the game and can be restored. (Ignore the egg on the island at the end, it was added by the hacker.
Это круто.

Но блин, опять же: да не было там вихря! Я сам его создал, сам разметил объект, вернее, скопировал существующий.
Более того, ВСЕ его параметры, вплоть до координат, я сам выставил. От оригинального вихря там не было ровным счётом ничего!

Кстати, комната в Enchanted Towers – да, это я не видел. Ну она и запрятана…
О, и я на 97% уверен, что она должна была существовать, она крепится к задней стенке холма, и там должен был быть проход (полигоны даже сейчас под него размечены, это ясно видно). Попасть туда мог быт только Сержант, и там была бы, естественно, ещё одна собачка с косточкой.
Всё же очевидно! (И естественно, это никакая не комната для разговора. А портал в подуровень там вообще случайно, как мне кажется).

Цитата steeldragon
В YoTD, на уровне Cloud Spires есть "секретный самоцвет".


Идея.
Смотрите, можно попробовать построить полную дефинишн-таблицу всех игровых объектов. С номером «0» там самоцветы, например. Факт что они во всех уровнях по нулевому номеру.
Но в каждом уровне большинство индексов свободно, а всего их – 65536 максимум.
Код каждого объекта привязан ТОЛЬКО к его индексу, и более того – 3D модель тоже.
Логика такая: если бы одни и те же индексы могли использоваться для разных типов объектов, какой был бы смысл раздавать так много разномастных номеров?
Очень правдоподобно, что все-все игровые объекты глобальны. У них есть свой код, своя анимация. Но в каждый уровень выгружены только те, которые используются. А пустышки занулены.

Поэтому если выгружать одинаковые в общий список, то идентичные должны совпасть. Например, я думаю, что код всех алмазиков во всех уровнях один и тот же, так? Но простым сравнением мы его не сличим, там же адресация и всё такое. Модели мы тоже извлекать не умеем…

Так вот, что я пока предлагаю. Вытащить все используемые объекты из всех уровней в список файлов по индексам. Что будет в этих файлах – не важно, ну для простоты, пусть будет пока код (навскидку, например, первые сколько-то байт или пусть берёт до следующего индекса или как-нибудь ещё).
Надо узнать, сколько там реально всего объектов. И написать вручную, что за какой отвечает. Например собачки в Haunted Tomb – это один и тот же объект, даже в подуровнях. Я уверен что и Зоя везде одна, и бочки всякие, таблички, фоновые эффекты, визуальные… Вроде их явно не 60 000 будет, так что норм.

Наконец, что это нам даст. Тогда, зная только идентификатор, мы уже можем условно сказать, какой тут лежит объект. Ну для SWV всё банально: даже не умея извлекать модели, но вместо алмазика я что-нибудь (да хоть из Spyro1) нарисовать смогу. Но хотелось делать бы это со всеми объектами, а не только с «нулевым», про который мы знаем, что это алмаз.

Вместо звуковых эффектов можно что-то нарисовать, да вообще, у нас будет полная таблица, из каких кирпичиков строится игра. Можно будет потом легко, например, вытащить список всех объектов из одного уровня. Так мы сразу найдёт ещё кучу «скрытых» объектов на каких-нибудь локациях, о которых ничего не знаем, потому что представителей у них нет, модели мы извлекать не можем, а по индексу определять не умеем (это и изменится). Во-во, надо будет ещё сравнить список имеющихся кодов в уровне со списком представителей объектов уровня – так мы отделим такие объекты, которые не существуют изначально (то есть они либо удалены из игры, либо являются динамическими типа осколков, либо просто работают как хелперы, их во время выполнения создают другие объекты и руководят ими).

Как мысль, возьмётесь?
Работать придётся только со «следующими» субфайлами, предварительно расшифровав их какой-то моей программой.
Там в начале глобальная ссылка на список с указателями на код, он неё надо отнять адрес загрузки этого «следующего» субфайла (он константный) и получится локальная файловая ссылка. Извлечь весь массив – и так для каждого уровня, и слить воедино.

Цитата steeldragon
Значит, каждая строка "с собой" может прихватить довольно много каких-то ещё данных?


Те что перед ней? Ага…
Уф, они влияют на поведение диалога. На позицию камеры… на поведение дракончика (он, например, может чуть ближе подойти к собеседнику, или наоборот). Главное – на «треугольник TO TALK» – он каким-то образом задаётся этими байтами.
Проблема в том, что их везде разное количество, и непонятно, за что каждый отвечает. Знаю только что если там первым стоит единица (то есть никаких дополнительных байт нет), то это будет самая что ни на есть обычная строка диалога. А вот там где ответы, яйца, аниматики всякие – там этих байт очень много, и игра часто вылетает или зависает при их изменении – вот что досадно.

Цитата steeldragon
А сколько раз я уже написал "программа" ? А "файл" ?


В смысле? ))
В смысле что «речь бедная»? Так это без разницы. Или что?

Цитата steeldragon
Значит, пишу я программу для автоматизации их замены.


А как вы место находите, куда строку запихать?

Цитата steeldragon
Для каждого уровня нужно делать поправку для указателя.


А-а. Там где-то есть адрес загрузки самого 4-го суб-субфайла.
Он лежит, и он константный, надо понять, откуда он в WAD-е считывается… Или как вычисляется (может быть, используя размеры предыдущих суб-субфайлов)

Цитата steeldragon
P.S. Кто-нибудь ещё, кроме меня, не видел "выходную" катсцену Глиммера из Spyro 2?


Что!?


but nobody came
 
steeldragonСообщение # 509 Четверг, 05.02.2015, 21:35
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата aleksusklim ()
Как мысль, возьмётесь?
Попробую. Когда-то я экспериментировал с обьектами, бочки, опять же, тоже везде под одинаковым индексом проходят...

Цитата aleksusklim ()
В смысле что «речь бедная»?
Именно. Даже как-то неудобно становится.

Цитата aleksusklim ()
А как вы место находите, куда строку запихать?
Ну, собственно, перебором всего суб-субфайла 2 в поисках наибольшего кол-ва нулей в ряд. Попадает как раз в "яичную зону", плюс еще я отступ начальный делаю в 1КБ и после каждой строки 300 байт оставляю.

Цитата aleksusklim ()
Что!?
Во-от, я не один такой. Когда будете второй раз в Глиммере (ну то есть - чтобы сюжетная катсцена не проигрывалась), то сразу после выхода в портал (который в конце, да) жмите треугольник. Лучше - несколько раз, чтобы наверняка.
 
aleksusklimСообщение # 510 Четверг, 05.02.2015, 21:57
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Цитата steeldragon
бочки, опять же, тоже везде под одинаковым индексом проходят...


Отлично.
А ещё есть понятие подвида объекта. Разделает либо разные анимации персонажа, либо разные графические модели статичных штук. Но это уже более глубокое изучение (пригодится как 3D научимся вытаскивать).

Цитата steeldragon
Даже как-то неудобно становится.


Забейте.
Не в редакции текстов же!
А то как тут конечно возможно намеренно а как ещё обозначить дикую неуверенность в написанном и что забавно так это что я до сих пор остаюсь при том же мнении и кажется решением проблемки станет лишь полный пересмотр скриншотов из всех когда либо выходивших на PlaySation игр и да запятых тут тоже специально нет.

Цитата steeldragon
в поисках наибольшего кол-ва нулей в ряд. Попадает как раз в "яичную зону", плюс еще я отступ начальный делаю в 1КБ и после каждой строки 300 байт оставляю.


У, даже так.
Но я всё ещё не на 100% уверен, что данные там НИКОГДА не портятся. По-моему, я однажды обнаружил там в памяти мусор, то ли в Sunrise Spring, то ли в Midnight Mountain. Но не на всём пространстве, естественно. Либо у конца, либо у начала.

Цитата steeldragon
Во-от, я не один такой. Когда будете второй раз в Глиммере (ну то есть - чтобы сюжетная катсцена не проигрывалась), то сразу после выхода в портал (который в конце, да) жмите треугольник. Лучше - несколько раз, чтобы наверняка.


Так… я не понял.
Заставка есть или нет?
Я не увидел.

Вы хотите сказать, что обнаружили её; или задаётесь вопросом, почему её нет?
А что в файлах игры? Звуковой трек, например?
А в других версиях?




*UPD:*

Идея. Надо рядом с каждой строкой вывести в список значение первого байта (то есть, сколько там непонятных данных предшествует). А потом подумать, основываясь на смысле, логике, работе и вообще виду текста – за что же они могут отвечать…




*UPD2:*

Цитата steeldragon
(снято без звука, в игре звук есть)


Ух-ты. Да, я такую совершенно никогда не видел.
Так в чём проблема? Как вы её активировали или что вообще?

Цитата steeldragon
может, это был Infestation?


Это чё, гонки или шутер какой-то?
По скриншотам игра вроде слишком тёмная, а должна быть яркая.
Просто я настолько же уверен, что этой игры не существует, насколько уверен, что она всё-таки есть...


but nobody came

Сообщение отредактировал aleksusklim - Пятница, 06.02.2015, 00:32
 
Поиск:

Кто нас сегодня посетил

Для добавления необходима авторизация