Воскресенье | 22.12.2024 |14: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
 
steeldragonСообщение # 511 Пятница, 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Сообщение # 512 Пятница, 29.08.2014, 18:23
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Воу, круто.

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

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

А ещё мне жутко интересны эти 7Ch («|») чуть ниже. Я видел их тоннами, и они ничего вроде не меняли...
 
steeldragonСообщение # 513 Пятница, 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Сообщение # 514 Суббота, 30.08.2014, 01:59
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Цитата steeldragon
Это не блик, это остаток...


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

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


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

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


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

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


Сообщение отредактировал aleksusklim - Суббота, 30.08.2014, 10:47
 
steeldragonСообщение # 515 Четверг, 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Сообщение # 516 Четверг, 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Сообщение # 517 Четверг, 05.02.2015, 21:35
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата aleksusklim ()
Как мысль, возьмётесь?
Попробую. Когда-то я экспериментировал с обьектами, бочки, опять же, тоже везде под одинаковым индексом проходят...

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

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

Цитата aleksusklim ()
Что!?
Во-от, я не один такой. Когда будете второй раз в Глиммере (ну то есть - чтобы сюжетная катсцена не проигрывалась), то сразу после выхода в портал (который в конце, да) жмите треугольник. Лучше - несколько раз, чтобы наверняка.
 
aleksusklimСообщение # 518 Четверг, 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
 
steeldragonСообщение # 519 Пятница, 06.02.2015, 09:13
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата aleksusklim ()
Заставка есть или нет?
 Да, есть.
https://dl.dropboxusercontent.com/u....240.avi
(снято без звука, в игре звук есть)
Поскольку я ее потом видел и на YouTube, и в японской версии, похоже, присутствует она везде.
В файлах игры пока что не смотрел.

EDIT:
Цитата aleksusklim ()
Надо рядом с каждой строкой вывести в список значение первого байта
Хм, а у меня уже есть такая опция в программе. Только выводит только для слишком длинных строк, но подправить несложно будет.

EDIT2:
"Как называется одна игра для PlayStation, очень похожая на Spyro." <==
Знаю, мой пример не подходит по некоторым параметрам, но может, это был Infestation?
Он есть и на PSX, и на PC... И вода там есть...

Добавлено (06.02.2015, 09:13)
---------------------------------------------

Цитата aleksusklim ()
Как вы её активировали или что вообще?
Я же говорю - просто нажал треугольник после прыжка в портал. Перепроверил - наверное, нужно сначала снова получить талисман...


Сообщение отредактировал steeldragon - Четверг, 05.02.2015, 22:26
 
aleksusklimСообщение # 520 Пятница, 13.03.2015, 18:00
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Кроме как в пятницу тринадцатого, такое ни за что не придёт:

Earlier today, Google announced we will be turning down Google Code Project Hosting. The service started in 2006 with the goal of providing a scalable and reliable way of hosting open source projects. Since that time, millions of people have contributed to open source projects hosted on the site.

But a lot has changed since 2006. In the past nine years, many other options for hosting open source projects have popped up, along with vibrant communities of developers. It’s time to recognize that Google Code’s mission to provide open source projects a home has been accomplished by others, such as GitHub and Bitbucket.

We will be shutting down Google Code over the coming months. Starting today, the site will no longer accept new projects, but will remain functionally unchanged until August 2015. After that, project data will be read-only. Early next year, the site will shut down, but project data will be available for download in an archive format.

As the owner of the following projects, you have several options for migrating your data.
• spyro3-rus

The simplest option would be to use the Google Code Exporter, a new tool that will allow you to export your projects directly to GitHub. Alternatively, we have documentation on how to migrate to other services — GitHub, Bitbucket, and SourceForge — manually.

For more information, please see the Google Open Source blog or contact google-code-shutdown@google.com .

-The Google Code team


Сообщение отредактировал aleksusklim - Пятница, 13.03.2015, 18:02
 
SerlutinСообщение # 521 Пятница, 13.03.2015, 20:40
Аватар Serlutin
Взрослый Дракон
Летописец
«2337»
Где: Не в городе Драконов
aleksusklim, по факту он же еще около полгода работать будет. Ну и к тому же github действительно удобнее и круче, только надо git освоить вместо svn.
 
aleksusklimСообщение # 522 Четверг, 26.03.2015, 20:19
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Цитата Serlutin
по факту он же еще около полгода работать будет


Вопрос, стоит ли нам вообще заморачиваться с переездом?
По факту, мы некорректно пользовались SVN. Лучшее, что мы делали – вики-страницы и списки на нём. А вот само Хранилище обновлялось редко, единовременно и однообразно, там не шла оживлённая командная работа.
Что же делать...

Добавлено (25.03.2015, 20:57)
---------------------------------------------
Решил попробовать взломать наличие посещения уровней (чтобы был не серый цвет строк в атласе) и способность Спаркса по ним перемещаться.

Получилось с первой же попытки!
• С адреса «9BE0B0» (80072090) – единицы если уровни посещены, и нули если нет. Можно закрасить всё единицами, и весь атлас станет доступным.
• Бочки и перемещения: «9B1914» (800658F4) – если там 2 или больше, то Спаркс начинает бить бочки, а в атласе появляется пункт Warp, позволяя перейти на любой уровень.

Побочные взломы:
• «9B1904» (800658E4) – максимально количество жизней Спаркса. По умолчанию – 3. После прохождения третьего стрекозьего мира (и разговора с тамошней Зоей) приравнивается числу 4. Но вот что занимательно: зануление приводит к эффекту «вечнозелёной стрекозы» один-в-один!
• «9B1908» (800658E8) – расстояние (сразу в игровых единицах, поэтому 4 байта), на котором Спаркс видит бриллианты чтобы подобрать, также действует на бочки но не на бабочек. Значительное увеличение приводит к тому, что он начинает летать по всему уровню и собирать всё подряд. Зануление – алмазики сможет брать только Спайро.

Добавлено (26.03.2015, 20:19)
---------------------------------------------
Кстати, можно отключить пыль, занулив 4 байта по «9C03E8» (800743C8) – и тогда летающий на огромные расстояния Спаркс будет оставлять за собой трассированный след!
А чтобы он не исчез, надо запускать FreezeCheat, зануление 4-х байт на «9C03D8» (800743B8), что не позволит стрекозе создавать новые пылинки.

Обе ячейки можно поставить на горячие клавиши, чтобы в нужные моменты заново активировать обработку объектов и пыли. Но значение действует только в пределах уровня, поэтому его задавать при определении горячих клавиш придётся вручную.

Вот и savestate:
http://klimaleksus.narod.ru/Files/3/LongDragonfly.rar
Самое начало. Включён мой FreezeCheat (игровая паузы замораживает и отпускает), открыты все уровни, перемещение включено, 99 яиц и 9999 бриллиантов; занулена обработка частиц, но это действует только в пределах Sunrise Spring Home.
Запускать через SavestateRunner или просто поместить в /sstates/ под именем SCUS_944.67.000, кажется.

А ещё надо как-нибудь попробовать наассемблерить что-то вроде «if(v>0){s=v;v=0}else{v=s}» в основном цикле. Тогда, кажется, весь мир вокруг будет двигаться вдвое медленнее…

Добавлено (11.04.2015, 21:15)
---------------------------------------------
http://www.spyro-realms.com/forum/48-11461-151215-16-1337284127
Цитата Serlutin
В общем нашёл сборку эмулятора с дебагером (4,60 Mb).


Фух, он распаковался. Новейшей версией 7z.
Да почему только сейчас-то...

Ладно, штука и правда занятная. Ну хоть брейкпоинты ставить можно! (Адрес в памяти надо писать шестнадцатеричный и с 800...)

Но ps2dis под рукой обязательно иметь надо (сброс дампов сделан удобно). Разберёмся!
Ссылочка на норм-запакованныую версию:
http://klimaleksus.narod.ru/Files/3/ePSXeDebug.rar
 
aleksusklimСообщение # 523 Воскресенье, 12.04.2015, 21:55
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Эй, кто тут крутой хакер, а? Скажите, кто тут крутой хакер!
Вот что я накодил:
http://klimaleksus.narod.ru/Files/3/GameplayTimer.rar

!!

Наконец, у фанатов будет таймер. Осталось плагин к эмулятору найти, который умеет нажатые клавиши записывать – и можно будет чемпионаты устраивать…

Короче, зелёный – время тикает. Жёлтый не в игровом состоянии – остановлен. Чтобы сбросить, надо нажать на паузу и дождаться красного. После этого выйти и будет чёрный, что значит, что при следующей остановке он сбросится – да разберётесь.

Я лучше про ассемблер расскажу! ePSXeDebug – божественная вещь, ну почему она попала к нам только сейчас.

Причём я его даже использую не по полной – почти только загрузка дампов. Алгоритм такой:
– Дойти до нужного места в игре и нажать F11 (вообще каждый раз вместо Esc так надо)
– Сделать «SAVE_STATE» и «Dump»
– Загрузить «dump\ram.bin» в WinHex и ps2dis.
– Поработать, изменить ram.bin.
– Нажать «LOAD_STATE», «Load» и «Run» – изменения вступят в силу немедленно!
Последние два пункта можно выполнять много-много раз, пока желаемыё результат не будет достигнут.

Правила ассемблера, ещё раз:
• следующая строка после любого прыжка выполняется до самого прыжка, но после проверки условий (хотя условия на изменяемый в ней регистр лучше вообще не ставить).
• команды загрузки из памяти притормаживают на одну строку – пользоваться регистрами сразу после считывания в них нельзя.
• регистры t* можно менять как угодно, но при вызове какой-нибудь функции они испортятся; регистры s* наоборот никто не испортит, но и самому их портить нельзя, нужно сохранять; в регистры a* нужно передавать аргументы для функций, через v* – возвращать; sp – это стек и его лучше не трогать, at – всегда доступен, никому не нужен, но все его могут испортить; ra – надо сохранять, это адрес в родительскую функцию.
• для прыжков на какие-то конкретные далёкие инструкции следует использовать j, но для простых перепрыгиваний строчек внутри своего кода лучше писать beq zero,zero – тогда при сдвигании всей функции на другой адрес они останутся актуальными относительными смещениями.
• некоторые аргументы функций передаются через стек. Тогда содержимое этих ячеек нужно сохранять и восстанавливать, чтобы вписать туда свои значения (если конечно не использовать стек полноценно, но я пока так не умею и не пробовал).

Функции, про которые я что-то узнал:
• 8002ebe4 – имеет отношение к центрированию надписей, считает занимаемую ими длину. Без неё некоторые текст будет отображаться со сдвигом.

• 8002e76c – рисует текст! Одну строку, кажется. Аргументы:
– а0 – указатель на сам текст (все модификаторы кроме переноса строк поддерживаются),
– a1 – позиция по горизонтали на экране,
– a2 – по вертикали.
– а3 – цвет текста, в наших же обозначениях (где 4 = зелёный). При этом @-модификаторы будут как бы просуммированы с этим числом; передавать 0 для нормального цвета.
– $0010(sp) – стековый аргумент, должен быть нулём чтобы нарисовать всю строку. Иначе рисуется только часть (это для постепенного появления строчек в диалогах), причём длинна задаётся другими стековыми аргументами – короче, занулить $0010(sp) и всё, проблем нет.

• 80059814 – printf! Печатает числа по шаблону. Аргументы:
– a0 – адрес для сохранения получившейся строки, ноль на конце будет добавлен автоматически.
– a1 – строка шаблона; поддерживаются %d, %x – десятичные и шестнадцатеричные; «%08d» – значит добавить нули вначале так, чтобы цифр было не меньше восьми (или сколько захотите); «% 10x» (пробел после %) – значит добавить пробелы слева так, чтобы всего знаков было не меньше десяти – ну вы поняли…
– a2 – число для первой подстановки,
– a3 –для второй,
– $0010(sp) – опять стековый и да, тот же самый – число третьей подстановки. Может можно ещё, но я не проверял.

• 80020300 – для рисования текста в меню паузы, я не понял что она меняет, но там просто вызывается 8002e76c. Может, делает текст в столбик по пунктам меню.

• 80020554 – само меню паузы, включая серый фон. Графика, не логика.

А знаете, где находится main game loop? Вот тут:
• 80012048 – там две большие функции, и по-моему, одна из них логика, а другая – графика (по большей части).
В той, которая графика, можно найти большой switch-case. По состояниям, и игра может находится только в каком-то одном. Там их много. И все они отвечают только за графику, то есть даже если занулить прыжки на функции, то игра почти всегда останется играбельной, но на экране в соответствующих ситуациях будет виден только фоновый цвет уровня.
Состояния – это например гейм-плей, вход в портал, пауза, диалоги, сценки, начальное меню – да их полно! Например гейм-плей тут: 8001d288, а пауза тут: 8001dd40.
И на каждую можно повесить нужный обработчик, если что.

Ну вот вы уже и поняли, как я свой таймер сделал, да?

Напоследок, пара мыслей. Во-первых, с помощью ePSXeDebug мы сможем реализовать всё что запланировали. Теперь это реально.
Во-вторых, насчёт алгоритма сжатия текста… ну не будь 8002ebe4 – всё было бы элементарно! А так, придётся разбираться. Но попробовать стоит. Мой таймер-то – уже совсем не маленькая функция вышла, а значит всё в наших силах.
А в-третьих, если метод алгоритма сжатия окажется реализуем, то туда можно (даже из без самого сжатия, просто доступ по той же технологии к простой строке) будет вшить парсер строк, который нам позволит писать нечто вроде «Привет, Сп[ай|и]ро, как дела?». Заманчиво, не правда ли, особенно учитывая последние разногласия, вернее, несогласия.
Что будем делать с озвучкой? Взломаём. И сценки тоже взломаем, на крайняк можно вообще все субфайлы сценок дважды впихнуть с разной озвучкой, прямо как во французском Spyro2.


but nobody came
 
steeldragonСообщение # 524 Воскресенье, 26.04.2015, 18:41
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Обновление для pasteFont: https://dl.dropboxusercontent.com/u....ont.zip
Как пользоваться этими скриптами я говорил ранее.

Теперь скрипт меняет шрифт везде, а не только в субфайлах уровней.
В принципе, я только немного изменил прошлую версию, потому что...
Шрифт везде, где он есть, находится на одном и том же месте.
 
steeldragonСообщение # 525 Четверг, 18.06.2015, 09:12
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Я тут написал небольшое дополнение для RipBIN:
https://dl.dropboxusercontent.com/u....list.py

Этот скрипт нужно скопировать в папку с RipBIN.
Он узнаёт LBA и размеры файлов из образа, после чего создаёт пустые файлы, которые можно использовать, чтобы извлекать или добавлять информацию на образ диска.
Работает как обычно - нужно запустить файл и в открывшееся окно перетащить файл образа, после чего нажать Enter.
Проверен на форматах IMG, ISO, BIN.
 
Поиск:

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

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