Въведение в romhacking
Съдържанието на статията
Преди появата на лазерните дискове и облаците, истинските игри излизаха на касети. Хваналите деветдесетте сигурно си спомнят най-популярните игрови конзоли у нас Dendy (български клонинг на японската Famicom) и Sega Mega Drive. Ако наистина искате да се "върнете към основите" - винаги можете да стартирате емулатора. Но можете да отидете малко по-далеч - какво ще стане, ако се разровите в самата игра? Добре дошли на сцената на ему.
Ему сцената е общност от ентусиасти, която се формира около определена конзола. Тези хора се ровят в любимата си платформа нагоре-надолу: те публикуват пълни копия на касети (ROM), измислят начини да ги модифицират и понякога постигат най-необичайни резултати. Най-честият пример е локализацията на играта. Но можете да отидете по-далеч. Как ви харесва историята за пича, който хакна ROM-овете на игрите на NES, заменяйки мъжки герои с женски? Какво друго можете да направите, ако дъщеря му иска да играе за момичета, а Donkey Kong не предоставя такава възможност?
Кратка екскурзия
Основният тласък за появата на romhacking беше историята на играта Final Fantasy V през 1992 г. Японската компания Squaresoft реши да не публикува играта в Съединените щати, считайки я за твърде трудна за западните играчи. С появата на емулацията западните ентусиасти не се съгласиха с японците и не само го играха, но и пуснаха първия любителски превод на изображението на касетата. Нямаше официален превод на английски до преиздаването на FFV в края на 1999 г. за PlayStation. Именно от превода на Final Fantasy V се появи българската romhacking сцена, това беше дебютният проект на група Shedevr през 2001 г.
През 1994 г. историята отчасти се повтори с Final Fantasy VI. Този път играта беше пусната в САЩ (под името Final Fantasy III),няколко месеца след издаването в Япония (1994). Локализацията обаче се оказа изключително неуспешна: преводът на цялата игра беше извършен само от един човек (Тед Улси) за изключително кратко време. Например, в този превод бяха изхвърлени скрити препратки към по-нататъшното развитие на сюжета и значението на едно от изреченията беше променено на обратното поради неразбрана японска фраза (фраза, близка по значение до „бизнесът се изпари“, беше възприета от Тед като „бизнесът се покачи“). Самият Тед оправдава лошото качество на превода си с факта, че е трябвало да направи текста възможно най-кратък, тъй като не се побира в касетата, докато японският текст очевидно е по-компактен. Въпреки това феновете, недоволни от официалния превод, се справиха доста успешно със задачата да поставят английския текст близо до оригинала в рома.
Ние формулираме условията на проблема
Romhacking може да бъде или с модификация на машинния код - език за сглобяване, който всяка платформа има свой собствен (в този случай, ако промените са кардинални, тогава модифицираният ром или дисков образ се нарича хак), и без него. Във втория случай не е необходимо да докосвате машинния код и да работите само с данни: графики, шрифтове, текст, указатели (текстови разделители) или дори музика. Но дори и в този случай местоположението и форматът на тези данни първоначално са неизвестни.
Помислете за най-честата цел на romhacking - любителски превод. Промяната на шрифтовете е необходима, ако азбуките на изходния и целевия език се различават, например, ако искате да замените латиница с кирилица. Същото важи и за превод от японски на английски или български.
No$gba - Дебъгер за платформи GameBoy Advance и Nintendo DSХакер #185. Докажете грешка!
Абсолютно всякакви данни (и особено текст)могат да бъдат опаковани и това може да направи живота още по-труден за romhacker. В особено пренебрегвани случаи локализаторът ще трябва да разбере асемблерния език за конкретна платформа: ако „с докосване“ е невъзможно да разберете формата за пакетиране на данни, можете да прибягвате до отстраняване на грешки, за да разберете алгоритъма за разопаковане. Но тъй като всяка платформа има свой собствен асемблер, ще разгледам техники, общи за всички платформи, достъпни дори за тези, които нямат желание или възможност да редактират машинния код на съответната игрова конзола.
Намиране на цел
Translhextion е една от помощните програми за romhacking, която ви позволява да търсите текст в неизвестно кодиране, избирайки го автоматично чрез изброяване на опциите. Нека ви напомня, че този трик работи само ако азбуката е кодирана по ред и текстът не е пакетиранВъпреки това решението на проблема с гарантираното намиране на всички необходими данни изглежда доста просто. Софтуерът Romhacking, който трябва да използвате преди всичко, се нарича corruptor. Неговата задача е временно да развали рома в определена зона, да пусне рома за проверка и след това да го върне в първоначалното му състояние. По избор това може да бъде стойности за увеличаване/намаляване, произволни стойности или зададени стойности (последната опция също е полезна за определяне на кодирането на текста, когато бъде намерен).
Пример за таблица със символи с тях в неправилен ред (действителен пример от Final Fantasy VI Advance за GBA). В този случай Translhextion не може автоматично да открие местоположението и кодирането на текста, но те могат да бъдат определени ръчно с помощта на корумпатораНапример, можете да започнете, като разделите текста на осем раздела и преминете през всеки раздел. Ако въпреки факта, че някои данни в rom са повредени, шрифтът и текстът се показват нормално, тогаваняма такива данни на верифицирания сайт и можем да го маркираме като напълно проверен и никога да не се връщаме към него. Ако играта замръзне след повреда на данните, най-вероятно програмният машинен код е бил засегнат, което означава, че все още не е известно дали в тази област има текст или шрифт в допълнение към програмния код. За да разберете, трябва да разделите тази голяма област на по-малки и да преминете през тях, като разбира се рекурсивно намалявате размера на изследваните области. И накрая, ако видим, че текстът или шрифтът в тази област е повреден, тогава ще бъде възможно незабавно да се съсредоточим върху него и, постепенно намалявайки изследваните интервали, да установим точно началото и края на интересуващите ни данни.
Има и друг начин за намиране на текст. Това е по-бързо, но не гарантира резултата и ще работи само ако текстът не е опакован и азбуката е кодирана по ред, тоест, например, ако a = 2D, тогава b = 2E, c = 2F, d = 30 и т.н. Можете първо да опитате да вземете някоя не много кратка дума, намерена в текста на играта, само малки (или само главни) букви, и след това да оставите самостоятелно написания или готов софтуер да премине през рома в търсене на тази дума (256 - 26 = 230) пъти. Ако не се намери нищо, тогава препоръчвам да не се къпете и просто да използвате корумпира.
Правене на промени
Възможно е да се провери дали текстът не излиза извън зададените му граници не ръчно, а автоматично.
Методи за компресиране на данни
MTE Най-лесният метод за разбиране е речниковата система, която обикновено се използва за компресиране на текст. Методът се нарича MTE, когато се използват един или два байта, няколко (и вероятно дори много) знака се кодират наведнъж, чиято комбинация често се среща в текста. Най-общо казано, MTE може да се счита не за метод на компресия, а простообичайното кодиране, коригирано за факта, че един / два / няколко байта могат да съответстват не само на един знак, но и на няколко / много.
Прословутите комбинации от знаци са регистрирани в речника, който също се съхранява някъде в рума. Форматът на речника може да бъде различен: думи, разделени със специален знак; думи, написани слято, + указатели към тях; думи, написани слято + таблица с дължина. В този случай думата означава произволен набор от знаци, сред които може да има интервали. Тоест, такава „дума“ в някои случаи може да бъде няколко думи, например някаква фраза, която често се среща в текста. От друга страна, може да бъде и част от дума, като например ing. Дори ако думата съвпада с езика, тя може да се използва и като част от по-дълги думи. Например, ако членът the съответства на стойността, тогава местоимението те най-вероятно ще бъде намалено до два байта навсякъде: y.
Ако все още имате въпроси, можете да прочетете кратка статия за това как да разбиете MTE на уебсайта на групата Chief-Net romhacking.
Инструментът Kruptar, за който сме говорили много пъти в тази статия, поддържа MTE от кутията просто защото поддържа таблици със знаци, в които произволен брой байтове могат да съответстват на произволен брой знаци. Благодарение на поддръжката на такива таблици също е възможно да обозначите специални байт кодове, които могат да се появят в текста и които не искате да запомните със специални кодове, които са разбираеми за човек и лесни за запомняне.
Можете също да споменете DTE - това е специален случай на MTE, когато често срещана комбинация от два знака (например комбинацията th) е кодирана в един байт.
Методът RLE (Run Length Encoding) също е доста прост. Не е много добър за компресия.текст, но може да бъде полезно за компресиране на графики. И е просто, защото трикът му е просто да замени дълга последователност от едни и същи елементи, повтарящи се много пъти - байтове или последователности от байтове, например, отговорни за показването на пиксели от един и същи цвят. Многократното повторение на елемент се заменя само с едно копие на този елемент и число, което отговаря за броя на повторенията на този елемент.
Идеята е да се използват връзки към вече срещана информация, докато този метод е реализиран по такъв начин, че всъщност вече включва RLE чипа.
Следните платформи са най-популярни сред romhackers: Nes/Dendy/Famicom, SNES/Super Famicom, Sega Mega Drive / Genesis, Game Boy, Game Boy Advance, Nintendo DS, Nintendo 64, Game Cube, Wii, PSP, PlayStation 1, 2.