Понедельник | 23.12.2024 |17:51
Приветствую Вас Гость Мира Спайро | 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
 
nihonjinСообщение # 316 Понедельник, 11.02.2013, 19:28
Аватар nihonjin
Дракон Подросток
Редактор
«298»
Где: Не в городе Драконов
Цитата (steeldragon)
нет музыки и голосов персонажей абсолютно везде (звуки присутствуют), с чем это может быть связано? Вернее, как это исправить?

Тут и я могу ответить. Дело в том, что при прожиге обычным способом(кстати, как вы его осуществляете?) не записываются данные в STR-формате, где и содержится музыка и диалоги. Как это исправить? Очень развёрнутый ответ был давным-давно дан aleksusklim в мультипосте в моей теме - сообщениях #53-54.
Думаю, что не лишне будет скопировать сюда самое главное:

Цитата (aleksusklim)
Cсылка на архив с программами и всем всем всем:
http://klimaleksus.narod2.ru/Files/1/ripbin.rar (83 Кб)

Цитата (aleksusklim)
Теперь можно очень легко модифицировать WAD без реального прожига образа. Алгоритм: 
1) Распакуйте весь мой архив (все пустышки-файлы там уже созданы) 
2) В «RipBin.txt» должно значится 24 на 2048 на 280 (кстати, значения по умолчанию если файла нет) 
3) Перетащите оригинальный BIN образ на «GetRip.bat» 
4) Появятся три файла «Spyro.rip», «Spyro.rip.sectorhead», «Spyro.rip.sectordata» (константа «Spyro» записана в «name.bat» и её можно сменить), общий размер которых должен быть строго равен размеру исходного BIN 
5) Перетащите «500`112793600`WAD.WAD» на «OneFileGET.bat» или просто запустите «AllFilesGET.CMD», если желаете получить сразу все файлы 
6) Модифицируйте WAD как пожелаете, либо замените его другим уже собранным файлом того же размера (в этом случае предыдущий пункт можно пропустить) 
7) Перетащите его же, «500`112793600`WAD.WAD» на «OneFileSAVE.bat» или запустите «AllFilesSAVE.CMD» (но это займёт больше времени) 
8) Создайте пустой файл (я это делаю через «Создать>Текстовый документ», а потом просто меняю расширение), назовите его как «.bin» и перетащите на «SaveBin.bat».



①Прогресс перевода и взлома японской версии Spyro 1 смотрите в «плавающем сообщении» и его дубле.
②Сводки по Spyro 2! http://nihonjinryuu.narod.ru/Spyro2/gaikatsu.html.
③Кратко о прогрессе перевода и взлома Spyro 3GH в «сообщении №258», а сборки перевода найдёте в «сообщении №512».
④Проект перевода в vk - «spyro3rus».
~Русская wiki по Спайро~.
~Японская история Спайро~.
 
steeldragonСообщение # 317 Понедельник, 11.02.2013, 19:36
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
nihonjin, спасибо. Видел, но забыл про это сообщение. Но программа вроде же настроена на Spyro 1, или нет?
Ах да, записываю cdgenPS2.


Сообщение отредактировал steeldragon - Понедельник, 11.02.2013, 19:44
 
nihonjinСообщение # 318 Понедельник, 11.02.2013, 19:47
Аватар nihonjin
Дракон Подросток
Редактор
«298»
Где: Не в городе Драконов
Цитата (steeldragon)
Но программа вроде же настроена на Spyro 1, или нет?

Не могу утверждать, но думаю и к GH подойдёт. А если нет, то не так давно aleksusklim написал здоровенный алгоритм по замене звука в сообщении #271(темы озвучивания). Откуда можно взять необходимые проги:
http://klimaleksus.narod2.ru/Files/2/VagChange.rar
Ну вот почему он опубликовал тот алгоритм там, а не в этой теме???

steeldragon, вы так быстро ответили, что я даже не успел добавить ответ на третий вопрос:
Цитата (steeldragon)
И третий уже по счёту вопрос: откуда берётся шрифт в главном меню?

Полагаю, что из соответствующего wad'a, т.е. из 007.



①Прогресс перевода и взлома японской версии Spyro 1 смотрите в «плавающем сообщении» и его дубле.
②Сводки по Spyro 2! http://nihonjinryuu.narod.ru/Spyro2/gaikatsu.html.
③Кратко о прогрессе перевода и взлома Spyro 3GH в «сообщении №258», а сборки перевода найдёте в «сообщении №512».
④Проект перевода в vk - «spyro3rus».
~Русская wiki по Спайро~.
~Японская история Спайро~.
 
steeldragonСообщение # 319 Понедельник, 11.02.2013, 19:56
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата (nihonjin)
Полагаю, что из соответствующего wad'a, т.е. из 007.
Приму к сведению. Ну, думаю ещё один вопрос лишним не будет: как вы считаете, нужна ли кому-то кроме меня программа для создания шрифтов? Просто нужно нарисовать контуры букв в отдельном файле, а градиент и тени добавляются автоматически. Конечно, там есть ещё над чем поработать... Например, сохранение не работает, и приходится вырезать готовый шрифт со скриншота (пожалуй, это главный недостаток).
Сама программа: https://dl.dropbox.com/u/34707934/Games/etc/s3translation/fontcolor.7z





Сообщение отредактировал steeldragon - Четверг, 14.02.2013, 20:09
 
DrWhoСообщение # 320 Понедельник, 11.02.2013, 20:09
Аватар DrWho
Мудрый Дракон
Почетный Житель
«1371»
Где: Не в городе Драконов
Цитата (steeldragon)
Но программа вроде же настроена на Spyro 1, или нет?

И на 3ю часть тоже. Ведь именно с неё пошел весь взлом.


 
aleksusklimСообщение # 321 Понедельник, 18.02.2013, 00:02
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
#326, 17.02.13


Цитата (steeldragon)
Продолжаю дорабатывать шрифт. Вот немного перекрашенная версия:


Молодцы!

Но «з» слишком похожа на «э», «ы» чересчур тонкая, «ш» ниже остальных (на хвостик у «щ» не смотрите, смещение букв по вертикали ведь настраивается!)

Цитата (steeldragon)
Также пытаюсь вставить шрифт в игру. Последняя попытка даже более-менее сносно выглядит:


Один скриншот – из русской версии?

А почему на буквах такие разводы в виде горизонтальных полосок? Вы правильно палитру внедряли?

А пользовались ли вы информацией о взломе и настройках таблицы шрифта в SCUS ?

Цитата (steeldragon)
На некоторых буквах появляются какие-то полосы.


Задеты границы сетки областей других букв.

Цитата (steeldragon)
или же это проблема вашей таблицы?


??

Цитата (steeldragon)
Зато появляется ещё один: нет музыки и голосов персонажей абсолютно везде (звуки присутствуют), с чем это может быть связано?


Неверный прожиг.

Цитата (steeldragon)
Но программа вроде же настроена на Spyro 1, или нет?


Секрет: «ISO» – это тупо переименованный «BIN»…

Цитата (nihonjin)
А если нет, то не так давно aleksusklim написал здоровенный алгоритм по замене звука в сообщении #271(темы озвучивания). Откуда можно взять необходимые проги:


Сейчас нужно рассчитывать только на этот алгоритм. Основные шаги:

{{{

Архив для работы со всем необходимым (кроме GoldWave и Epsxe) :
http://klimaleksus.narod2.ru/Files/2/VagChange.rar

Папки:
other – кое-что не очень нужное;
ripGH – риппер для работы с оригинальным образом;
ripLITE – пустая папка для риппера урезанной версии;
source – исходные коды всех моих программ;
tools – программы, итнтерфейсы, скрипты… в общем, вся суть;
work – пустая папка для работы.

Начнём:

0) Распакуйте архив, желательно на один локальный диск, на котором есть свободное место, около 2 Гб. Скопируйте содержимое «ripGH» и «ripLITE». Первоначальное расположение Greatest Hits образа игры не важно.
1) Перетащите «Spyro-Year-Of-The-Dragon gh.iso» (образ Greatest Hits) на «GetRip.bat» (из « ripGH »), подождите. (Появятся «Spyro.rip», «Spyro.rip.sectorhead» и «Spyro.rip.sectordata»)
2) Запустите «AllFilesGET.CMD», подождите. (Появятся «23`68`SYSTEM.CNF.sectordata», «23`68`SYSTEM.CNF.sectorhead»; «24`380928`SCUS_944.67.sectordata», «24`380928`SCUS_944.67.sectorhead»; «500`166428672`WAD.WAD.sectordata», «500`166428672`WAD.WAD.sectorhead»)
3) Переместите «500`166428672`WAD.WAD» в рабочую папку («work»)
~~~модификации~~~
45) WAD изменён! Но собирать образ через риппер рановато… Переместите файл «500`166428672`WAD.WAD» обратно в «ripGH».
46) Перетащите документ «Spyro_GH_lite.ps2» на «CdGenMekeCurrent.bat». Далее перетащите его же на сам «cdgenPS2.exe».
47) Прожгите BIN образ, сохранив его в любую папку. На данном этапе можно просто убедиться, что всё работает. Запустите Epsxe и откройте образ. Ну он по крайней мере должен играть (музыки не будет). Проверка сделанных изменений идентична итоговой, которая описана ниже.
48) Откройте папку «ripLITE», в которой существует ещё одна копия риппера. Перетащите новенький только что проверенный BIN образ на «GetRip.bat»
49) Перетащите «500`166428672`WAD.WAD» на «OneFileGET.bat»
50) Скопируйте появившиеся «500`166428672`WAD.WAD.sectorhead» и «500`166428672`WAD.WAD.sectordata».
51) Перейдите в папку с оригинальным риппером «ripGH». Вставьте файлы и замените.
52) Перетащите в ней «500`166428672`WAD.WAD» на «OneFileSAVE.bat», подождите.
53) Теперь перетащите пустой «Result.iso» на «SaveBin.bat» и подождите ещё немного.
54) Образ готов! Можете сэмулировать «Result.iso» и полюбоваться работой (описание ниже)
55) Как я создал патч? Запустил «SmartPatcher1V2.exe», последовательно перетащил в него «Spyro-Year-Of-The-Dragon gh.iso», «Result.iso», задал новое имя и всё!

}}}

Если SCUS тоже меняется, то в пунктах «3», «45», «49», «50», «52» его нужно обрабатывать аналогично.

Цитата (nihonjin)
Ну вот почему он опубликовал тот алгоритм там, а не в этой теме???


А какая разница где? Да и к тому же, я явно работал со ЗВУКОМ. Если бы я взламывал шрифт или золотые буквы, то выложил бы сюда.

Цитата (steeldragon)
Приму к сведению. Ну, думаю ещё один вопрос лишним не будет: как вы считаете, нужна ли кому-то кроме меня программа для создания шрифтов?


Вы написали программу для создания шрифтов!?

Цитата (steeldragon)
Для работы программы нужно всего лишь положить контуры букв, уже расставленные по сетке и без фона (т.е. с прозрачным фоном) в формате png в папку res программы (назвать файл font.png). При запуске программы открывается окно вывода с готовым шрифтом. Градиент и цвет фона можно изменить в той же папке res.


Исходный. Код. Где?

Как вы могли выложить EXE без исходничка?

И почему она вместо того, чтобы запуститься, выдаёт ошибку о том, что у меня якобы нет DirectX.
Ну зачем ей DirectX!? На чём вы её написали?


but nobody came
 
steeldragonСообщение # 322 Понедельник, 18.02.2013, 10:17
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата (aleksusklim)
Но «з» слишком похожа на «э», «ы» чересчур тонкая, «ш» ниже остальных
Исправлю.

UPDATE: Исправил.


Цитата (aleksusklim)
Задеты границы сетки областей других букв.
Нет, это была проблема раскрашивателя... Шрифт вставился прямо с полосками по бокам.

Цитата (aleksusklim)
А почему на буквах такие разводы в виде горизонтальных полосок? Вы правильно палитру внедряли?
Внедрял - правильно. Сама палитра не особо правильная была.

Цитата (aleksusklim)
Вы написали программу для создания шрифтов!?
Исходный. Код. Где?

Как вы могли выложить EXE без исходничка?

И почему она вместо того, чтобы запуститься, выдаёт ошибку о том, что у меня якобы нет DirectX.
Ну зачем ей DirectX!? На чём вы её написали?
 Громко сказано. Написана она на Construct... Собственно, этим всё сказано. ДиректХэ требуется, так как это всё же программа для создания игр, и с графикой работает только посредством DirectX.

Исходник... Ну, если так надо...

Сам исходник (95 кб)
Установщик Construct-а (15 c половиной мегабайт, предупреждаю сразу. С DX как проблему решать без понятий, какие-то элементы его устанавливаются вместе с программой, но всё ли это, что необходимо - не знаю.)

Скриншот "кода" программы:



Ну и еще один скриншот:


Две "ш" и ни одной "п".


Сообщение отредактировал steeldragon - Пятница, 22.02.2013, 14:59
 
aleksusklimСообщение # 323 Суббота, 23.02.2013, 01:50
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Цитата (steeldragon)
Две "ш" и ни одной "п".


Ваша ошибка:
http://klimaleksus.narod2.ru/Files/REPEAT/byte.png

Зря вручную перепечатывали! Можно было скопировать вставить в WinHex, он выдаст окно об интерпретации текста – выбрать последний пункт.

А вообще я сейчас почти сделал классную прогу на Паскале, которая поможет выровнять буковки по длине и ширине…
 
steeldragonСообщение # 324 Суббота, 23.02.2013, 17:49
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата (aleksusklim)
Зря вручную перепечатывали!
Это я и сам понял - со второй строчки... Хорошо, больше это ни в чём не проявилось.

Цитата (aleksusklim)
А вообще я сейчас почти сделал классную прогу на Паскале, которая поможет выровнять буковки по длине и ширине…

Отлично! Очень кстати будет.

Добавлено (23.02.2013, 17:49)
---------------------------------------------
Странно игра реагирует на изменения 007-ого WAD с помощью AWM. Ну как странно - виснет сразу после "Sony ... presents". Хоть оригинальный, только что распакованный, импортируй. Как с этим бороться?

Также я только что сыграл в увлекательную игру. Собери пазл, называется.
В эту тему заглядывают художники? Если да, я бы попросил подрисовать к логотипу Insomniac что-то вроде "Перевод от spyro-realms.com". Сам логотип чуть ниже:

 
aleksusklimСообщение # 325 Вторник, 26.02.2013, 07:42
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
#327, 25.02.13


Цитата (steeldragon)
UPDATE: Исправил.


Класс! Почти зачётно. Теперь хотелось бы улучшить оригинальные символы, а именно «/» и «%» – наклонить чёрточку чуть вертикальное, а не чтоб из угла в угол…
Ещё «ю» какая-то худенькая. И давайте уже кавычки да скобки вместо вопросов!
Ну а знаки кнопок (цветные) почему в другом стиле? А где тень или градиент? Если в оригинале было только 4 цвета, это не значит, что мы не можем использовать все 15! И пусть круг будет покруглее, а квадрат поквадратнее.

Хотите пример плохого шрифта?
http://klimaleksus.narod2.ru/Files/2/bad.png

Цитата (steeldragon)
Нет, это была проблема раскрашивателя... Шрифт вставился прямо с полосками по бокам.


Да, я понял. Они были чёрные, а не ЧЁРНЫЕ !

Цитата (steeldragon)
Сама палитра не особо правильная была.


Палитра под нашим контролем. Вы чем меняете – PGG или Molester?

Цитата (steeldragon)
Громко сказано. Написана она на Construct...


Надо бы изучить его…

Цитата (steeldragon)
Исходник... Ну, если так надо...


!! Во! Братан, сразу бы так!

Цитата (steeldragon)
Скриншот "кода" программы:


…Другое дело, что я там ничего не понял… А вы можете просто объяснить алгоритм работы свое утилиты? То есть не справку, а именно описание процесса изнутри.

Цитата (steeldragon)
Отлично! Очень кстати будет.


Ну держите:

http://klimaleksus.narod2.ru/Files/2/font_table.rar



Скриншотики:
http://klimaleksus.narod2.ru/Files/STARS/ft_1.png
http://klimaleksus.narod2.ru/Files/STARS/ft_2.png
http://klimaleksus.narod2.ru/Files/STARS/ft_3.png
http://klimaleksus.narod2.ru/Files/STARS/ft_4.png

Цитата (steeldragon)
Странно игра реагирует на изменения 007-ого WAD с помощью AWM. Ну как странно - виснет сразу после "Sony ... presents". Хоть оригинальный, только что распакованный, импортируй. Как с этим бороться?


Быть не может! Перепроверьте – если повторится, то опишите подробную последовательность действий.

Цитата (steeldragon)
Также я только что сыграл в увлекательную игру. Собери пазл, называется.


А я его помню:
http://klimaleksus.narod2.ru/Files/Code9.png
В уголочке. Я всё момент оттягивал, не хотел заморачиваться…

А обратно разобрать-то сможете? А через что – PGG или Molester?

Цитата (steeldragon)
В эту тему заглядывают художники?


Ну что вы, конечно же нет….

Цитата (steeldragon)
Если да,


…нет…

Цитата (steeldragon)
я бы попросил подрисовать к логотипу Insomniac что-то вроде "Перевод от spyro-realms.com".


Не, nihonjin давно пытался. Нашим художникам проект перевода абсолютно неинтересен.
Разве что можно вКонтакте в Спайро-Клубе попробовать заявку оставить, но это Yams должен разруливать…

Добавлено (26.02.2013, 07:42)
---------------------------------------------
Я ж забыл сказать, что чтобы запустить мою программу, нужен сам PascalABC:
http://klimaleksus.narod2.ru/Files/PABCDistr.zip

И ещё, файлы SCUS, которые даны в архиве – лишь урезанные версии, их нельзя прожигать в игру! Вместо этого следует скопировать оригинальный SCUS.


but nobody came
 
steeldragonСообщение # 326 Пятница, 08.03.2013, 18:34
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата (aleksusklim)
Класс! Почти зачётно. Теперь хотелось бы улучшить оригинальные символы, а именно «/» и «%» – наклонить чёрточку чуть вертикальное, а не чтоб из угла в угол… Ещё «ю» какая-то худенькая. И давайте уже кавычки да скобки вместо вопросов!
Ну а знаки кнопок (цветные) почему в другом стиле? А где тень или градиент? Если в оригинале было только 4 цвета, это не значит, что мы не можем использовать все 15! И пусть круг будет покруглее, а квадрат поквадратнее.
"ю" я уже подправил, с символами и знаками поработаю.

Цитата (aleksusklim)
Вы чем меняете – PGG или Molester?
PGG.

Цитата (aleksusklim)
Быть не может! Перепроверьте – если повторится, то опишите подробную последовательность действий.
Перепроверял раз сто. Последовательность: берём AWM, вытаскиваем из главного WAD 007-ой подфайл, импортируем обратно его же, заменяем WAD c помощью RipBIN и усё - готова испорченная версия игры. Причём, виснет только меню, если его проскочить savestate-ом, то всё работает.

UPDATE: Ан нет, работает, зар-раза. Будем проводить углублённые тесты.
UPDATE2: C только что извлечённым файлом работает. С этим, вытащенным тем же AVM - нет.
UPDATE3: Гадство. Работает. С изменённым.
Цитата (aleksusklim)
А обратно разобрать-то сможете?
Поверьте, обратно разобрать легче...

Цитата (aleksusklim)
Ну что вы, конечно же нет….
Как и всегда. Ладненько, есть пара идей, как не очень трудозатратно приклеить надпись...

Цитата (aleksusklim)
А вы можете просто объяснить алгоритм работы свое утилиты? То есть не справку, а именно описание процесса изнутри.

Проще некуда:


UPDATE#MainDatabaseError: Number not found - Вот так лого разработчиков очень даже ничего получилось:


Версия временная и ещё будет меняться.

Добавлено (28.02.2013, 18:13)
---------------------------------------------
Новый шрифт:


"@" мне так и не удалось уместить в 12х9.

Добавлено (08.03.2013, 18:34)
---------------------------------------------
Тут, так сказать, всплыла еще проблема, суть которой на этом рисунке:


У Атласа свой собственный шрифт! И чихать он хотел на изменения в основном. Нужно взломать и его, что может быть сложнее, так как что-то мешало разработчикам размещать ресурсы в нормальном виде.

Сообщение отредактировал steeldragon - Вторник, 26.02.2013, 19:55
 
aleksusklimСообщение # 327 Четверг, 21.03.2013, 15:41
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Эй, программисты!

Делаю новый PGG и упёрся в какую-то тупость.

Вот два файла:
http://klimaleksus.narod2.ru/Files/2/wrong.rar

Кто-нить может объяснить, почему оба имеют одинаковое разрешение, одинаковую глубину цвета и одинаковый формат, одинаковые размеры, но РАЗНЫЙ ОБЪЁМ ФАЙЛА!?




#334, 24.03.13


Есть! Я закончил новую версию PGG !

С проблемой ошибочного размера изображения так и не разобрался, зато выяснил, что обычный MsPaint после сохранения такой картинки делает её «нормальной» и вполне читаемой моим Дельфи. (То есть меньшая становится такая же, как и большая)

Взломал сам Paint (добавил горячие клавиши), написал к нему автоматизирующий скрипт на AutoIt и пихнул опцию в PGG. Ну короче, всё работает теперь.

Значит ещё раз, что я изменил в PGG2 :

1) Промежуточный формат хранения картинок.
Помните, как было? Сначала Any2pvV, потом вся череда PVV, Pvv2bmP , PGG, Bmp2Pvv, PVV, Pvv2anY… Плюс, каждая из них сильно тормозила.
Поэтому я переписал все свои Xxx2yyY на Sphinx C--. А он-то быстрый!
Только теперь я решил делать расчёт цветов не на стадии конвертирования, а только непосредственно в PGG2. То есть промежуточный BMP (рядом с DIB) очень тёмный, и не предназначен для иного редактирования, кроме как в PGG2. (Если что, можно выгрузить весь 15 бит и грузануть обратно).

2) Сопоставление цветов.
Раньше я делил на 31 и умножал на 255. Теперь я взял непосредственные значения из PVV. То есть поэкспериментировал и выяснил, каким цветам он сопоставляет 32 значения канала. Обратное преобразование делаю старым методом (деление на 255 и умножение на 31; однако я уже не доверил этот процесс функции Round(), а всё рассчитал сам на калькуляторе, вбив потом результаты в массив).
Однако исследования PVV привели к двум странностям:
– В режиме обычного просмотра 15 бит, «31» обозначает «255».
– В режиме 8/4 бит в палитре белый цвет «31» обозначает «248».
Получается, что PVV по-разному интерпретирует цвета, получаемые из пяти бит. Если это 15-битовое изображение, то происходит сглаживание. А если же это те же самые цвета, но используемые как палитра, то он тупо умножает на 8 каждое линейное значение битов.
Что делать? Сравнить с TileMolester!
Результат – он так вообще во ВСЕХ случаях линейно умножает на восемь. То есть, белого «255, 255, 255» цвета никогда не получится.
У меня было три варианта: либо делать сглаживание как в просмотре PVV, либо не делать его как в TileMolester, либо предложить пользователю опцию.
Я подумал-подумал, и принял первый вариант. Molester никогда не был для меня авторитетом, а вот PVV заслуживает уважения…

3) Целевой файл.
Отныне это не пара BMP-DIB, а наш самый обычный субфайл или суб-субфайл. Ничем предварительно не обработанный! Применяете свежеизвлечённый первый суб-субфайл любого субфайла уровня, и PGG2 сам передаёт его на конвейер Xxx2yyY, который вмиг (благодаря CMM) обрабатывает и возвращает ему пару BMP-DIB. Тот перезапускается и подбирает её.
При сохранении прямо противоположный процесс – он сохраняет пару, передаёт её конвейеру и конечным шагом копирует итоговый «.any» по заданному файлу для сохранения.
Однако есть недостаток – теперь конвейер жёстко привязан к системе PlayStation, хотя бы из-за 512 и 1024 по горизонтали. Теперь стало невозможно редактировать в PGG2 небольшие изображения в маленьких файлах (типа текстур драконьих яиц). Но можно что-нибудь придумать, если возникнет крайняя нужда.

4) Связь с PVV.
Я решил привязать PGG2 к всё тому же PVV. Теперь даже не придётся вручную устанавливать координаты копируемой области и местоположение палитры! Достаточно будет сделать это в визуальном режиме в PVV, закрыть его, и одним нажатием перенести все числа в PGG2, да сразу же экспортировать/импортировать части картинки.
PVV даже открывается сразу при старте PGG2 (с загруженным изображением), отображая то, что загрузилось. Ну потому что для того, чтобы что-то делать, пользователю всё равно придётся открывать картинку в PVV, прежде чем что-либо выгружать из неё. Теперь PVV открывается автоматически (а вообще, PGG2 сейчас работает только с загруженной в него картинкой – при запуске без параметров предлагает выбрать – то есть нельзя открыть его «вхолостую», вам обязательно нужно хоть что-то ему дать!), а ещё это каким-то образом устранило мощный глюк, при котором портились изображения в памяти – я не знаю, почему так происходило, но выяснил, что после запуска PVV такое более не повторяется, значит PVV будет запускаться самостоятельно каждый раз.

5) Автоматическая загрузка палитры
…теперь происходит ПОСЛЕ внедрения изображения. Прямо поверх него, если области перекрываются. Это был самый первый глюк, который следовало исправить. Отныне шрифт можно загружать одним действием, и его палитра появится в нём самом на нужном месте (правда там есть вторая палитра… Но её уже можно грузить отдельно, вместе с цветными кнопочками, к которым она относится)
А вообще, вместо флажка «Серый/Палитра» я сделал выбор из четырёх: «Серый, Только картинка, Только палитра, Всё сразу» (старый флажок соответствует первому и последнему варианту). По умолчанию стоит загрузка всего сразу (а это подразумевает исключительно восьмибитные картинки для PUT 8/4 бит). Отдельная загрузка только палитры поможет вытащить палитру из существующего BMP (не как внедрение палитры-цветной-полоски, а именно извлечение индексных цветов 8-битного изображения). Оставшиеся «Серый» и игнор палитры («Только картинка») тоже могут пригодиться, да и сделать их было не трудно.

6) Исправление плохих изображений.
Как раз то, с чего я начал. Флажок, действует на все PUT-команды. Предварительно копирует выбранный файл, открывает его через взломанный Paint, немного теребит его (инвертирует, отменяет, сохраняет, закрывает) через AutoIt, а потом отдаёт в PGG2. Можно поставить в том случае, если при обычной загрузке картинка внедрилась неправильно или не полностью.

Вот так:
http://klimaleksus.narod2.ru/Files/2/PGG2.PNG
(Нелогично да: прогу назвал PGG2, версия v1.1 а файл просто PGG.exe …)

Чтобы открыть файл, нужно перетащить его на EXE. Это должен быть первый суб-субфайл любого субфайла уровня (или что-то того же типа – редактор карты памяти, атлас, текстуры сценок, и.т.д…)
Либо можно запустить и выбрать в диалоговом окне. (Ну ещё можно перетащить BMP и DIB держа за BMP, но только те, которые были ранее скопированы из рабочей поддиректории \PGG.exe.res\ )

Основной процесс работы нового Палитрового Гения почти такой же, как и в прошлый раз:
http://www.spyro-realms.com/forum/48-11461-151384-16-1337284187
Объясню только новое:

1) Выставляете в PVV красную рамку и зелёную полоску на нужную область (например, шрифт или логотип)
2) Закрываете PVV и нажимаете «From PVV».
3) Извлекаете картинку нужной кнопкой.
Загрузить обратно изменённую ещё проще. Только не забудьте нажать «From PVV», если PGG2 был уже закрыт.

Флажок «Fix before put» – отметьте, если обычное внедрение не завершается успехом.

Ещё при внедрении полезно знать: (режимы 8 и 4 бит:)
«Full 8 bit» – внедрение сначала изображения, а потом его палитры;
«Image 8 bit» – внедрение только изображения, без его палитры;
«Palette 8 bit» – внедрение только палитры, без самого изображения;
«Grayscale 32 bit» (наверное надо было написать 24 бит…) – используйте только если выгружали с этой же опцией. Для четырёхбитных выглядит очень темновато…

Кнопка «View» немедленно открывает PVV ! В него также можно передать свои координаты из полей ввода, нажатием «To PVV».
Что за текстовое поле справа? Это пропуск нескольких верхних строк изображения. Потому что PVV отображает только 512, независимо от того, сколько ему передали.
А если вам нужно отредактировать 800-ю строку? Поставьте этот счётчик на 650 и увидите нижнюю часть своего файла.
Да более того, ещё и все координаты будут корректно сдвинуты, если выполнять два правила:
1) Перед каждым нажатием «View» давать команду «To PVV»
2) После закрытия PVV всегда нажимать «From PVV».

Ну а с «Save !» всё должно быть понятно. И да, если в файле ничего не менять или же внедрить изменённое содержимое обратно, то весь файл (претерпев многократное конвейерное конвертирование) будет снова один в один совпадать с оригинальным вплоть до CRC суммы! А это значит, что не надо бояться сохранять и загружать ранее сохранённую работу – ни одно сохранение не ухудшает качество!

Качайте:
http://klimaleksus.narod2.ru/Files/2/PGG2.rar

Исходники присутствуют – весь PGG, всё из CMM (4 штуки), AU3 – автоматизатор взломанного Paint (к последнему разумеется исходник не приложен, хотя я мог выдать патч от Ресторатора, но он вообще не будет никому нужен), и всё из папки «source» от PVV без каких-либо изменений.

Батами из «PGG.exe.res» можно пользоваться и самостоятельно. Все работают на перетаскивание одного файла:

«Any2pvV.bat» – раздвигает файл нулями так, чтобы сместить изображение на правую сторону для нормального открытия в PVV (и соответственно, PGG). Сохраняет в «*.pvv»
«Pvv2anY.bat» – обратное действие, удаляет холостые данные, чтобы вернуть файл в первоначальное состояние. Сохраняет в «*.any»
«Pvv2bmP.bat» – расшифровывает файл и расщепляет его на BMP и DIB. Где в BMP хранится раздельно результирующее значение цвета каждого пикселя (от 0 до 31, тёмно), а в DIB – белый, если шестнадцатый бит единичный, и чёрный, если нулевой. Сохраняет в «*.bmp» и «*.bmp.dib»
«Bmp2pvV.bat» – обратное действие, сливает пару BMP и DIB в единый 15-битный файл. Перетаскивать надо только BMP, при этом DIB берётся как «*.dib». Побочный эффект – сперва создаются копии «*~.bmp» и «*.dib~.dib» – они будут отражёнными по вертикали (необходимо для корректного считывания, ибо все файлы Bitmap хранятся задом наперёд). Сохраняет в «*.pvv»
«Any2bmP.bat» – конвейерно производит сразу два действия – «Any2pvV.bat» и «Pvv2bmP.bat», предварительно копируя оригинал в «file.any»
«Bmp2pgG.bat» – передаёт пару BMP и DIB (перетащенные за BMP, а DIB как «*.dib») в родительский каталог в PGG.exe
«Any2pgG.bat» – конвейерно все действия: «Any2bmP.bat» (который сам состоит из двух) и «Bmp2pgG.bat».
«Pgg2anY.bat» – берёт пару «file.any.pvv.bmp.new.bmp» + «file.any.pvv.bmp.new.bmp.dib» и передаёт её конвейерно на «Bmp2pvV.bat» и «Pvv2anY.bat». После чего копирует «file.any.pvv.bmp.new.bmp.pvv.any» в «*».
«Mspaint_use.bat» – копирует перетащенный файл в «file.mspaint.bmp», а потом запускает на него «Mspaint_use.exe», который заставляет «Mspaint_mini.exe» пересохранить файл по тому же имени.

Во всех командах я обозначил звёздочкой «*» – тот файл, который был перетащен.
Все мои программы из CMM нельзя просто так запускать или перетаскивать на них что-либо непосредственно, я поставил защиту как переменную «set f0=!!!» без которой они автоматически закрываются, но всё же лучше не рисковать, ибо никакого отлова ошибок
(например, несуществующие или заблокированные файлы, неверные символы, папки только для чтения и.т.д.) я не предусмотрел. Программы могут зависнуть или испортить целевые файлы (бесконечно заполнять нулями), но обычно они просто закрываются, ничего не делая.
В «Mspaint_mini.exe» мои горячие клавиши – «F5 = Ctrl+I», «F6 = Ctrl+Z», «F7 = Ctrl+S».
«Mspaint_use.exe» по сути делает запуск с параметром, затем «F5, F6, F7, Alt+F4», на время блокируя пользовательский ввод (мышь перестаёт отвечать – обычно на 1-2 секунды, ограничение худшего случая – 10 сек; но Ctrl+Alt+Delete вернёт движение в любом случае, если что) и требует, чтобы открываемое изображение обязательно называлось «file.mspaint.bmp» (хотя можно было и как опциональный аргумент запрограммировать…)

«PVV.exe» – всё тот же PVV (ужатый через UPX, как и остальное). PGG2 принимает все координаты из файла «PVV.ini» (благо, PVV написан на Delphi как и мой PGG, так что библиотека парсинга ini-файлов универсальна и удобна в применении).


*Продолжение ниже…*


Сообщение отредактировал aleksusklim - Воскресенье, 24.03.2013, 23:08
 
steeldragonСообщение # 328 Воскресенье, 24.03.2013, 19:18
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата (aleksusklim)
Кто-нить может объяснить, почему оба имеют одинаковое разрешение, одинаковую глубину цвета и одинаковый формат, одинаковые размеры, но РАЗНЫЙ ОБЪЁМ ФАЙЛА!?
Начало файла разное. У меньшего последовательность байтов и сразу нули, а у большего (пересохранённого Paint.NETом меньшего) между ними еще и последовательность 00-00-00-FF-00-00-00-FF (которая, собственно, и занимает лишний объём).



У вашего большего файла (тот, который 01.bmp) там лишние нули, без FF. Щас попробую привести размер за их счёт к размеру меньшего файла...
EDIT. Не получилось, но вот это вот 000000ff явно занимает этот спорный объём.

Добавлено (24.03.2013, 19:18)
---------------------------------------------
Патч для меню: https://dl.dropbox.com/u....u_s3.7z
Добавлен перевод текста, немного изменённая табличка и новый логотип.

Сообщение отредактировал steeldragon - Четверг, 21.03.2013, 21:58
 
aleksusklimСообщение # 329 Воскресенье, 24.03.2013, 23:06
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
*…Начало выше*


Теперь немного про Сфинкса и UPX.

Чёрт с ним с Дельфи, его сможет скомпилировать любой, у кого есть этот самый Дельфи (ну на тот случай, если кто пожелает изменить мой код).
А вот Це-Минус-Минус я искал довольно долго и нашёл только тут.
Собрал и вот выкладываю довольно полноценную версию с всунутыми библиотеками:
http://klimaleksus.narod2.ru/Files/2/sphinx.rar
Большинство библиотек для DOS, я же использую только «windows.h--» для всех API (к сожалению, без справки… её я беру в MSDN к Visual Studio, да и то там издевательски не всё!!) да «MSVCRT.H--» чисто для отладки (с неё вообще язык превращается на 99% в обычный С++)

Чтобы перекомпилировать мои проги (если кому захочется), то просто скопируйте ВСЁ из папки «\source\CMM\» архива «PGG2.rar» в одну папку с «c--.exe» и перетаскивайте любой «.cmm» на «c--.exe» (либо храните .cmm рядом с .lnk - ярлыком на «c--.exe» (и перетаскивайте код на ярлык), а в папку Сфинкса положите только «head» и «null»).

Почему мои проги весят намного меньше, чем заново скомпилированные? Я их ужимаю через UPX. Он, кстати, тоже лежит в отдельной в архиве «sphinx.rar».
Мой любимый ключ – «upx.exe –ultra-brute *». Реализовал в «upx_ultra_brute.bat» – перетаскиваете на него программу, и она ужимается.
Распаковка – перетащите на «upx_decompress.bat»

Так вот что интересно, справку к этому UPX (а он был выдран из Universal Extractor, и был новее чем полноценный пакет в Restorator, в котором и была справка. А вообще, не мешало бы скачать версию посвежее…) я не читал до тех пор, пока не решил сейчас выложить его.

Оказывается, он умеет сжимать PS1 EXE ! (Даже тремя способами…)

Это поразительно. Перетаскиваете наш SCUS на «upx_ultra_brute.bat» и получаете вдвое меньший файл!
Его содержимое полностью шифровано, а в шапку добавлена своя сигнатурка UPX со ссылкой на свой сайт и критической информацией для распаковки.

Ну и что? Я прожёг образ с новым файлом, и он работал!!
Я сдампил память с него и с обычного (прожжённого так же, но с оригинальным SCUS) примерно в одном месте игры (никаких savestate!) и сравнил дампы.
Оказывается, сжатый EXE полностью распаковался и превратился в нормальный. Поэтому дампы _почти_ не отличаются.
Скорее всего, UPX добавляет программе такой код, который заставляет её распаковывать саму себя на этапе загрузки. И в памяти она выглядит, работает и занимает столько же места, сколько несжатая.

Ещё интереснее то, что собственная сигнатура UPX точно так же присутствовала в дапме памяти. А это означает, что в EXE есть немного (ну нам-то достаточно) свободного места прямо в шапке SCUS.
Раньше я почему-то думал, что 2 Кб нулей там не просто так – мне казалось, что они игнорируются системой и даже не выгружаются в RAM, поэтому записывать что-то в них будет бесполезно.
Но теперь я вижу, что место свободно, относительно свободно. Да, его никак не хватит, чтобы всунуть туда все тексты персонажей, которые мы не сможем уместить обычным образом. Но вот на новый Вихрь, прочие взломы и немного наших ассемблерных функций должно хватить!

Оставшиеся исследования с ужатого SCUS привели меня к полной уверенности, что мой пиратский SPYRO3.EXE был зашифрован именно через UPX. Скорее всего очень, очень старый UPX…
И естественно, пираты отрезали его сигнатуру. Теперь распаковать обратно я не могу – он не распознаёт своё же сжатие, а если вписать туда сигнатуру от другого сжатого файла, то пишет, ошибка CRC. Форсировать распаковку невозможно. А может быть он даже не совместим с UPX.

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

Что же дальше… Получается, что любой код ассемблера может быть размещён в области заголовка SCUS и выполнять любую операцию, которую мы зададим. А любая инфа, в теории, может быть сжата каким-либо алгоритмом. И распаковываться в реальном времени…

Короче, у меня возникла идея сжатия текста!

Каждый символ – это байт из восьми бит. При этом самый старший никогда не используется (нет кодов > 127).
Если предположить, что у нас не будет второго регистра (все буквы маленькие, а заглавных нет), то нам в принципе, хватит и шести бит (не более 63 символов). Это будут 33 буквы + 10 цифр + 4 кнопки + «! ? . , … + - – ] * % / : ; » + пробел + управляющая собачка. Всего 63 штуки.

Но это впритык. А нужно освободить немного кодов, чтобы создать управляющие символы. Их действия такие:
– Сделать все последующие буквы заглавными;
– Сделать все последующие буквы маленькими.
– Сделать одну следующую букву заглавной.

Чтобы они не увеличивали {Разницу} их можно совместить с обычными знаками препинания. Например «. ! ?» всегда могут делать следующую букву заглавной. В дополнение можно создать особый пробел, который тоже создаёт одну заглавную букву (его надо будет например использовать перед написанием имён собственный вместо обычного пробела)

Байты будут кодироваться так:

1111-1122 = 2222-3333 = 3344-4444

Это три байта. И в них втиснуто четыре символа! Старшенство как есть, то бишь
5432-1054 = 3210-5432 = 1054-3210

Однако первый байт придётся потратить на служебные нужды, и обозначить в нём старший байт единицей, если строка кодирована нами. Чтобы наша функция не пыталась раскодировать строки, построенные «at runtime» – то есть игрой на лету (например, многие цифровые значения, которые отсутствуют в ресурсах, а вычисляются по ходу игры).
В этом же байте можно указать отдельный флаг (функция: {читать его только если байт «наш» (старший бит = 1); иначе вообще ничего со строкой не делать и отправить как есть}), который может обозначить, что все буквы должны быть заглавные (а таких строк немало!), а ещё можно и цвет для всей строки задать (но ещё лучше определить его так: первый бит (старший) – всегда «1», второй бит «1» для заглавных и «0» для маленьких; оставшиеся шесть бит – первая буква из текста)

Тогда в результате мы получим, что из каждых трёх символов мы возымеем четыре! И {Разница} уменьшиться почти на треть! Из 10 букв получим 13, из 20 – 26! Из 31 – 41!

Оно того стоит? Некоторые дополнительные символы и переключатели цвета можно будет всунуть в действие «заглавных» букв.

А ещё нам открывается диакритика! Точки над Ё и черту над Й теперь можно будет выводить НАД буквами, а не вшивать их в шрифт. То есть вместо Ё будут стоять только две точки, которые потом наша функция преобразует в последовательность «Е@i» (или вроде того), которую игра отобразит как диакритику. На {Разнице} это никак не скажется, а просто улучшит дизайн шрифта, нам не придётся уменьшать Ё, чтобы втиснуть туда точечки.

В чём минусы метода? Нужно будет всё тщательно проверить. Переработать таблицу соответствия и очень хорошо продумать 63-кодовую кодировку. И кончено, потребуются новые программы для кодировки текста, потому что никакой Перетасовщик Символов не справится с развёртыванием битов. Плюс, нужно будет автоматизировать удаление пробелов после знаков препинания и кучу других фитчей.
И для внедрения текста потребуется новая программа (а у нас-то по сути и ни одной нет…) Я уже придумал, как она будет работать.
Зато вроде бы, в «яичную зону» нас совсем не понадобиться лазить, может быть в очень-очень крайних случаях.

А теперь требуется доказательство. Что мы вообще способны обрабатывать игровой текст на лету и менять его. Чтобы это работало, работало быстро (не тормозя игру) и работало везде.

Для начала я (отталкиваясь от таблицы соответствия в памяти), нашёл все функции, пользующиеся ей:

800667c8 – Таблица
8002ebd4 – Центровка
8002e980 – По правому
8002e76c – Текст

Где «Таблица» – таблица соответствия (та самая, с которой работает «font_table»),
«Центровка» – функция, которая проходится по тексту, но ничего не рисует на экране, а лишь отсчитывает количество символов и результирующую длину строки. Используется во всех надписях, где текст выровнен по центру; без неё всё будет в столбик и уйдёт за экран.
«По правому» – при уничтожении её, весь текст, отформатированный по правому краю (в меню Помощи – комбинации клавиш) перестаёт отображаться правильно.
«Текст» – основная функция, отрисовывающая весь игровой текст (за исключением Атласа). Она обрабатывает и речь персонажей, и названия сценок, и пункты в меню. Ей передаётся много всего непонятного, но главное – указатель на строку, который можно спокойно менять…

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

http://klimaleksus.narod2.ru/Files/STARS/back_1.jpg

Вы подумали, что это просто непотный набор символов? Присмотритесь повнимательнее: это строчки, записанные задом наперёд:

http://klimaleksus.narod2.ru/Files/STARS/back_2.jpg

И да, текст ресурсов нетронут. Я лишь написал функцию, которая копирует каждую строку задом наперёд, и передаёт её основной функции отрисовки.

Как я смог втиснуть в чужую функцию свой код? Да никак! Я забрал у них две первые команды. Вместо них написал «j $xxxxxxxx» и «nop». Прыжок на мою функцию!

А уже в начале своей функции я вставил те две первые команды, а затем полностью свои операторы. Возврат ещё проще – просто прыжок на третий оператор их функции.

Я как бы раздвинул код, позволяя себе написать сколько угодно команд, ибо места в заголовке очень много…

Зная, что оригинальная функция отрисовки сама модифицирует регистры «t0» и «t1» ДО того, как прочитает их значение, я сделал вывод, что могу их как угодно менять, и ничего мне за это не будет. Также я не собираюсь использовать стек, что сильно упростит код.

Экспериментами было выяснено, что указатель на строку лежит в регистре «a0». Длина или начальный символ тоже как-то передаются, но пока я плюнул на них.

Мой код:
1) Занести a0 в t0.
2) Приравнять a0 некоторому адресу на свободное пространство в конце «шапки».
3) Загрузить байт по адресу t0 в регистр t1.
4) Записать байт из регистра t1 по адресу a0.
5) Если t1 равен нулю, то перейти к пункту 10.
6) Загрузить в t1 число «1»
7) К регистру t0 прибавить t1.
8) Из регистра a0 вычесть t1.
9) Вернуться к пункту 3.
10) Прибавить к a0 число «1».

Дальше просто выйти из функции, но чтобы узнать, сколько раз и как часто выполняется этот кусок кода, я решил добавить счётчик:

11) Приравнять t1 некоторому адресу в шапке (немногим дальше самой функции).
12) Загрузить байт по адресу t1 в регистр t0.
13) Прибавить к t0 число «1».
14) Записать байт из регистра t0 по адресу t1.
15) Записать байт из регистра t0 по адресу a0.
16) Выйти из функции.

Данный отрывок увеличивает код первого символа в каждой строке. Постоянно увеличивает! По изменению символов будет видно, как часто вызывается эта функция.

Результат – да постоянно! Много, много раз в секунду. В каждом FPS происходит неоднократный вызов. И это ни сколько не тормозит игру. Следовательно, мы вполне можем себе позволить постоянную-постоянную расшифровку игровых текстов.

Однако мне следовало взломать передачу длины строки, ибо речь героев игры отображается неправильно:

http://klimaleksus.narod2.ru/Files/STARS/back_3.jpg

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

Хочу показать видео, на котором видны постоянно движущиеся символы, но проги для записи с экрана где-то далеко; вроде как-то в эмуляторе можно было, но короче вот видео, записанное самым неправильным способом, но зато всё сразу понятно:

http://klimaleksus.narod2.ru/Files/STARS/back_4.avi
(Вначале идёт чуть-чуть замедлено, это неправильно сконвертировалось…)

Красные вспышки – графические глюки, вызванные запрещёнными символами (скорее всего «собачка»). Благо, они сразу исчезают. Но однажды я умудрился как-то запороть весь VRAM, и у меня дракончик стал совсем голенький…

Осталось описать взлом, а именно сам код. Лучше на скриншотах:
http://klimaleksus.narod2.ru/Files/STARS/back_5.png

Вход в функцию отрисовки. Запомните первые две команды, они ещё понадобятся. То что в a0 лежит адрес строки тут никак не видно, я вычислил это логикой и экспериментами. Зато ясно, что t0 и t1 перезаписываются – в любом случае, даже если на строке «bne t2, zero…» произойдёт ветвление.

Итак, мой код:
http://klimaleksus.narod2.ru/Files/STARS/back_6.png

Изменены только две первых команды: прыжок в мою функцию и пустота для него, ибо перед любым прыжком исполняется следующий за ним оператор.

Вот как выглядит область, в которой я разместил тело своей функции:
http://klimaleksus.narod2.ru/Files/STARS/back_7.png

Странно, да? Дизассемблер автоматически не копирует заголовок… Другое дело, если указать дамп памяти:
http://klimaleksus.narod2.ru/Files/STARS/back_8.png

Сразу после слова «…area» всунут ассемблерный код. Строка текста копируется задом наперёд, поэтому точка отсчёта для буфера – возле самого конца нижеследующей пустоты.
Ячейка для счётчика выбрана сразу после кода (нижняя метка b150). Основной выход реализован обратным прыжком на третью команду функции отрисовки, а первые две её команды как видно располагаются в самом начале моей функции.

Теперь вариант без счётчика, но с комментариями:
http://klimaleksus.narod2.ru/Files/STARS/back_9.png

Красным подсвечен основной цикл. То что названо «ветка» – прыжок за цикл, то есть выход из него. При этом (после недолгих соображений) понятно, что a0 будет указывать на нулевой байт ПЕРЕД инвертированной сдублированной строкой.
Значит, к нему надо просто добавить единицу.

От варианта со счётчиком это вариант без него отличается не физическим отсутсвием этого счётчика, а просто тем, что команда, записывающая значение счётчика в первый символ строки (то есть a0) занулена, а в комментарии я написал «Да копируем в a0», хотя это относится к предыдущему скриншоту (здесь ничего не копируется!)

Чтобы совсем ликвидировать счётчик, можно удалить всё после прибавления к a0 единицы (первая команда после цикла), а прыжок - выход из функции поставить сразу за ней.
Ну и остаётся заметить, что адреса как обычно грузятся в две команды – сначала старшая половина, затем остальное. А если по адресу надо ещё и что-то считать, то целых три команды. Но зато многое можно вручную оптимизировать, например в цикле нужно было не приравнивать t1 единице, а заранее использовать другой регистр (но опять-таки, его оригинальное значение придётся куда-то сохранить, а это же снова загрузка адреса… Или со стеком нужно разбираться), а ещё лучше – отнимать не как регистр, а как обычное число. Только вот команду такую я не нашёл… Можно было попробовать «addi a0, a0, $ffff», а вообще мне точно нужна более подробная справка по всем командам ассемблера PlayStation 1…
Чтобы не ставить пустоту после прыжков, надо лишь поменять местами прыжок с предшествующей ему командой. Без разницы какая она – выполнится либо как и надо перед прыжком, либо без прыжка просто. Впредь надо всё это учитывать…

Могу выложить результат в качестве патча:
http://klimaleksus.narod2.ru/Files/STARS/flip.rar

Это снова QuickPatcher, так было удобнее.
Патчей сразу девять: на сам образ GH, только на SCUS или же на дамп памяти (DUMP). И каждого по три вида: «1» – со счётчиком, «2» – без счётчика, «Restore» – восстановление, снятие патча.

Проще всего наложить на весь образ. На дамп памяти тоже можно, но почему-то не всегда срабатывает. Я так делаю: в Epsxe – F1, затем F3 и тут же Esc; в MemGet выгружаю дамп, перетаскиваю на патч, внедряю дамп обратно; перехожу в Epsxe и возобновляю эмуляцию.




Цитата (steeldragon)
"ю" я уже подправил, с символами и знаками поработаю.


Ещё я бы предложил убрать толстый правый бок у «Ф», добавить хоть намёк на ножки у «Д», а у маленькой «д» на верхушку, чуть поравней поставить правую ногу у «М», поднять выше шапочку у «б» и «в», сделать маленькую «т» менее похожей на могильный крест, пририсовать длинную ножку маленькой «ф» (не забывайте, что высота каждой буквы относительно базовой строки настраивается отдельно, и даже если в шрифте она будет торчать выше всех, мы её опустим!), повернуть по часовой стрелке оригинальную шестёрку «6» и против часовой косую черту «/», сделать скобки круглее, а кавычки «» попарно ближе и не такие большие по высоте; пусть «щ», «ъ», «ь» не стыдятся своих выпирающих конечностей, которые можно будет опустить или поднять, и да, почему кнопка «круг» больше похожа на ромб, а треугольник такой острый?

Цитата (steeldragon)
PGG


Теперь будет удобнее!

Цитата (steeldragon)
UPDATE3: Гадство. Работает. С изменённым.


О, я пока на дизассемблере свою функцию взламывал, у меня такое сто раз было: сделаю что-то – не работает. Упрощаю – не работает. До нереально простого понижаю – хоп, заработало! Усложняю – работает. Максимально сложно – пашет! Делаю точно так, как было в первый раз – и снова работает, собака…

Цитата (steeldragon)
Причём, виснет только меню, если его проскочить savestate-ом, то всё работает.


После savestate вообще никакие изменения не вступают в силу! Надо хотя бы жизнь проиграть или из уровня выйти. Да и то, на глобальные данные не повлияет.

Цитата (steeldragon)
Проще некуда:


А почему градиент исключительно горизонтальный? Можно же было как-то под углом…

Цитата (steeldragon)
UPDATE#MainDatabaseError: Number not found


??

Цитата (steeldragon)
"@" мне так и не удалось уместить в 12х9.


Ой, да ладно!? А как на Спектруме её в 8х8 засовывали?
Может весь шрифт показать:

http://klimaleksus.narod2.ru/Files/2/scr1.png

Но это из оригинального Спектрума 1982-года, биос которого стоит во всех эмуляторах. А у меня же физически есть Синклер от 1990-года, в котором все символы стали жирнее:

http://klimaleksus.narod2.ru/Files/2/scr2.png

Его биос я собственноручно сдампил (пересылкой нижней половины ОЗУ по звуковому каналу выхода Спектрума прямо на линейный вход звуковой карты, а потом загрузив трек в эмулятор и сдампив уже его память в файл), и даже никуда пока не выложил, сделаю-ка это здесь:
http://klimaleksus.narod2.ru/Files/2/MY90_ZX48.rar

Ну короче, не можете в 12х9? А в 12х16 слабо? Возможно ведь разбить её по вертикали на два символа, а отрисовывать как диакритические знаки через (как бы тавтологично не звучало) «собачку». И это хорошо вписывается в алгоритм шифровки, который я описал выше (подумаете над ним?)

Цитата (steeldragon)
У Атласа свой собственный шрифт!


Вот и до очередной бочки дёгтя руки дошли…

Цитата (steeldragon)
И чихать он хотел на изменения в основном.


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

Цитата (steeldragon)
Нужно взломать и его, что может быть сложнее, так как что-то мешало разработчикам размещать ресурсы в нормальном виде.


Кажется, там будет гораздо интереснее – должны быть заданы координаты противоположных углов копирования + ширина наложения. Если так, то скорее всего любая другая графика описывается точно так же, а это ценная информация…

Так а вы опробовали мой FontTable ?


but nobody came

Сообщение отредактировал aleksusklim - Воскресенье, 24.03.2013, 23:31
 
steeldragonСообщение # 330 Среда, 27.03.2013, 11:24
Аватар steeldragon
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
Цитата (aleksusklim)
Ещё я бы предложил убрать толстый правый бок у «Ф», добавить хоть намёк на ножки у «Д», а у маленькой «д» на верхушку, чуть поравней поставить правую ногу у «М», поднять выше шапочку у «б» и «в», сделать маленькую «т» менее похожей на могильный крест, пририсовать длинную ножку маленькой «ф» (не забывайте, что высота каждой буквы относительно базовой строки настраивается отдельно, и даже если в шрифте она будет торчать выше всех, мы её опустим!), повернуть по часовой стрелке оригинальную шестёрку «6» и против часовой косую черту «/», сделать скобки круглее, а кавычки «» попарно ближе и не такие большие по высоте; пусть «щ», «ъ», «ь» не стыдятся своих выпирающих конечностей, которые можно будет опустить или поднять, и да, почему кнопка «круг» больше похожа на ромб, а треугольник такой острый?

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

Цитата (aleksusklim)
А почему градиент исключительно горизонтальный? Можно же было как-то под углом…
Да хоть круговой. После исправлений подумаю над градиентом.

Цитата (aleksusklim)
Ой, да ладно!? А как на Спектруме её в 8х8 засовывали?
Долго и с большими мучениями. Всё равно некрасиво получилось, а мне ещё на этот символ градиент и тень добавлять.

Цитата (aleksusklim)
Ну короче, не можете в 12х9? А в 12х16 слабо? Возможно ведь разбить её по вертикали на два символа, а отрисовывать как диакритические знаки через (как бы тавтологично не звучало) «собачку». И это хорошо вписывается в алгоритм шифровки, который я описал выше
Можно попробовать.

Цитата (aleksusklim)
(подумаете над ним?)
Обязательно.

Цитата (aleksusklim)
И для внедрения текста потребуется новая программа
Наконец-то! Только чтобы работала по принципу "всё включено", а то старыми программами у меня вся папка с переводами завалена.

Цитата (aleksusklim)
Однако он питается теми же надписями, которые используются золотыми буквами.
И которые зашиты в SCUS, правильно?

Цитата (aleksusklim)
Так а вы опробовали мой FontTable ?
Ага. Что из этого получилось, можно посмотреть в патче чуть выше. В принципе, удобная программа с неплохим интерфейсом (не как, например, в Текст-О-Вытаскивателе 2.1, на этот хотя бы можно смотреть без опасения).

Добавлено (26.03.2013, 19:52)
---------------------------------------------

Цитата (aleksusklim)
В принципе, если убедится, что ни одна «золотая» надпись никогда не вырисовывается обычным игровым шрифтом
Вырисовывается. Помните "Entering *** world*? Названия уровней из SCUS используются повсеместно.
Кстати, шрифт Атласа размазан по всему файлу. Ещё два куска увидел. Кошмар какой-то. Хорошо, хоть он одноцветный... В смысле, шрифт, не кошмар.

Добавлено (27.03.2013, 11:24)
---------------------------------------------

Цитата (aleksusklim)
...обрабатывает и возвращает ему пару BMP-DIB. Тот (PGG2) перезапускается и подбирает её.
Не всегда. В случае с тем же 007-ым вылетает с окном "Files not found!". Попробую потом вручную погонять через новые конвертеры.

По поводу золотых букв также есть идейка. Я ни разу не видел, чтобы где-то использовались цифры 3,4,6,7,8,9. Шесть дополнительных знакомест обеспечены, 26+6=32, ну а без твёрдого знака или "Ё" как-нибудь обойдёмся.


Сообщение отредактировал steeldragon - Понедельник, 25.03.2013, 14:57
 
Поиск:

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

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