diff --git a/app/build.gradle b/app/build.gradle index f498728..152f75a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -83,6 +83,7 @@ dependencies { compile 'com.anjlab.android.iab.v3:library:1.0.36' compile 'commons-io:commons-io:2.5' compile 'org.sufficientlysecure:html-textview:3.0' + compile 'org.commonjava.googlecode.markdown4j:markdown4j:2.2-cj-1.1' compile 'com.afollestad.material-dialogs:core:0.9.1.0' } diff --git a/app/src/main/java/org/emunix/unipatcher/ui/fragment/AboutFragment.java b/app/src/main/java/org/emunix/unipatcher/ui/fragment/AboutFragment.java index 4b29250..909e7b8 100644 --- a/app/src/main/java/org/emunix/unipatcher/ui/fragment/AboutFragment.java +++ b/app/src/main/java/org/emunix/unipatcher/ui/fragment/AboutFragment.java @@ -21,6 +21,7 @@ package org.emunix.unipatcher.ui.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -28,9 +29,12 @@ import android.widget.TextView; import org.emunix.unipatcher.R; import org.emunix.unipatcher.Utils; +import org.markdown4j.Markdown4jProcessor; import org.sufficientlysecure.htmltextview.HtmlResImageGetter; import org.sufficientlysecure.htmltextview.HtmlTextView; +import java.io.IOException; + public class AboutFragment extends Fragment { @Override @@ -41,7 +45,13 @@ public class AboutFragment extends Fragment { TextView versionText = (TextView) view.findViewById(R.id.versionText); versionText.setText(getString(R.string.help_activity_about_tab_version, Utils.getAppVersion(getActivity()))); HtmlTextView aboutText = (HtmlTextView) view.findViewById(R.id.aboutText); - aboutText.setHtml(R.raw.about, new HtmlResImageGetter(aboutText)); + try { + String html = new Markdown4jProcessor().process( + getActivity().getResources().openRawResource(R.raw.about)); + aboutText.setHtml(html, new HtmlResImageGetter(aboutText)); + } catch (IOException e) { + Log.e("UniPatcher", "IOException", e); + } return view; } diff --git a/app/src/main/java/org/emunix/unipatcher/ui/fragment/ChangelogFragment.java b/app/src/main/java/org/emunix/unipatcher/ui/fragment/ChangelogFragment.java index 7592087..721975d 100644 --- a/app/src/main/java/org/emunix/unipatcher/ui/fragment/ChangelogFragment.java +++ b/app/src/main/java/org/emunix/unipatcher/ui/fragment/ChangelogFragment.java @@ -21,14 +21,18 @@ package org.emunix.unipatcher.ui.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import org.emunix.unipatcher.R; +import org.markdown4j.Markdown4jProcessor; import org.sufficientlysecure.htmltextview.HtmlResImageGetter; import org.sufficientlysecure.htmltextview.HtmlTextView; +import java.io.IOException; + public class ChangelogFragment extends Fragment { public ChangelogFragment() { @@ -41,7 +45,13 @@ public class ChangelogFragment extends Fragment { View view = inflater.inflate(R.layout.fragment_changelog, container, false); HtmlTextView changelogText = (HtmlTextView) view.findViewById(R.id.changelogText); - changelogText.setHtml(R.raw.changelog, new HtmlResImageGetter(changelogText)); + try { + String html = new Markdown4jProcessor().process( + getActivity().getResources().openRawResource(R.raw.changelog)); + changelogText.setHtml(html, new HtmlResImageGetter(changelogText)); + } catch (IOException e) { + Log.e("UniPatcher", "IOException", e); + } return view; } diff --git a/app/src/main/java/org/emunix/unipatcher/ui/fragment/FaqFragment.java b/app/src/main/java/org/emunix/unipatcher/ui/fragment/FaqFragment.java index f4f4553..a602af7 100644 --- a/app/src/main/java/org/emunix/unipatcher/ui/fragment/FaqFragment.java +++ b/app/src/main/java/org/emunix/unipatcher/ui/fragment/FaqFragment.java @@ -21,23 +21,32 @@ package org.emunix.unipatcher.ui.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import org.emunix.unipatcher.R; +import org.markdown4j.Markdown4jProcessor; import org.sufficientlysecure.htmltextview.HtmlResImageGetter; import org.sufficientlysecure.htmltextview.HtmlTextView; +import java.io.IOException; + public class FaqFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_faq, container, false); - HtmlTextView faqText = (HtmlTextView) view.findViewById(R.id.faqText); - faqText.setHtml(R.raw.faq, new HtmlResImageGetter(faqText)); + try { + String html = new Markdown4jProcessor().process( + getActivity().getResources().openRawResource(R.raw.faq)); + faqText.setHtml(html, new HtmlResImageGetter(faqText)); + } catch (IOException e) { + Log.e("UniPatcher", "IOException", e); + } return view; } diff --git a/app/src/main/res/raw-it/about.html b/app/src/main/res/raw-it/about.html deleted file mode 100644 index 44e30fa..0000000 --- a/app/src/main/res/raw-it/about.html +++ /dev/null @@ -1,32 +0,0 @@ -
UniPatcher è un patcher che supporta i tipi di patch IPS, UPS, BPS, APS (GBA), APS (N64), PPF, DPS, EBP e XDelta3.
-Funzioni aggiuntive:
-UniPatcher è uno strumento per Android per applicare delle patch alle ROM di varie console per videogiochi.
- -L'app supporta le patch IPS, UPS, BPS, APS (GBA), APS (N64), PPF, DPS, EBP e XDelta3.
- -No. UniPatcher non è progettato per hackerare i giochi di Android.
- -Una immagine ROM è un file del computer che contiene una copia dei dati da una memoria di sola lettura della cartuccia di un videogioco. Il termine è utilizzato nel contesto dell'emulazione, dove i giochi vengono copiati in un file ROM e possono essere eseguiti in un computer o un telefono, usando un programma chiamato emulatore.
- -L'hackeraggio di una ROM è la modifica dei dati in una immagine ROM. Questo può esprimersi come l'alterazione grafica, il cambiamento dei livelli, il ritocco del fattore di difficoltà, o anche la traduzione in un linguaggio per cui il gioco non è stato reso disponibile in origine.
- -Una patch è un file che contiene le differenze tra la versione originale della ROM e la versione hackerata.
-La patch è distribuita, e gli utenti applicazione la patch ad una copia della ROM originale, che produce una versione avviabile dell'hack.
- -Gli hack e le traduzioni sono generalmente distribuiti come patch per ridurre la dimensione del download ed evitare problemi di copyright.
- -É molto semplice: devi scegliere il file ROM e la patch, quindi premi sul pulsante rotondo rosso.
-Come risultato, hai una ROM patchata, che verrà posizionata nella stessa cartella con la ROM originale.
- -Il file che hai selezionato è un archivio. L'archivio contiene le cartelle e i file in un file compresso.
-Al momento attuale UniPatcher non può estrarre archivi, quindi c'è bisogno di spacchettare il tuo archivio in un programma differente. Raccomandiamo un programma gratuito ZArchiver.
- -L'app mostrerà questo errore se il checksum memorizzato nella patch non coincide con il checksum della ROM. Questo significa che la ROM non è compatibile con la patch. Devi scegliere una ROM differente. Di solito ci sono diverse ROM per ogni gioco (ad esempio la versione per Europa, USA, Giappone, buoni o brutti dettagli, etc).
-Gli hacker delle ROM speso pubblicano il checksum del file ROM ( su una pagina web o su un file Readme). Devi compararlo con la tua ROM. Tieni premuto sul file nel gestore di file e vedrai 3 linee: CRC21, SHA1 e MD5. Se una di queste linee coincide con il checksum che è stato scritto dall'hacker della ROM, allora hai la ROM corretta.
- -La maggior parte del gioco funziona con la ROM "Pokemon - Emerald Version (U) [f1] (Save Type).gba".
- -Le patch con il formato IPS non contengono un checksum. Perciò, la patch verrà applicata ad ogni ROM (anche sbagliate). In questo caso, devi cercare un'altra ROM.
- -ECM è un formato di compressione progettato specificamente per i dischi immagine. Puoi decomprimere il file usando il programma ZArchiver.
- -L'errore appare su alcuni dispositivi con Android 4.4. Soluzioni possibili:
-Forse c'è un bug nel mio programma. Ti prego di contattarmi alla e-mail e allega la patch alla mail.
- -Si. UniPatcher può:
-Il Sega Mega Drive (Genesis) ha delle protezioni dalle modifiche del gioco. La ROM contiene il valore checksum, e se è diverso dal checksum effettivo il gioco mostra uno schermo rosso e smette di funzionare. Questa funzione scrive il checksum corretto nella ROM.
-Attenzione: Questa funzione non crea una ROM di backup.
- -Un'intestazione SMC sono 512 byte che si trova all'inizio di alcune immagini ROM del SNES. Questi byte non hanno uno scopo, ma cambiano la locazione dei dati rimanenti. La rimozione o l'aggiunta dell'intestazione è usata a volte con lo scopo di applicare correttamente la patch.
-Attenzione: Questa funzione non crea una ROM di backup.
- -Se ti piacerebbe tradurre l'app in una lingua diversa o migliorare una traduzione esistente, puoi farlo sul Transifex sito.
- -Contattami alla e-mail mashin87@gmail.com. Per favore, scrivi in inglese o in russo. Se hai qualche problema con il patch, allega la patch alla mail e scrivi il nome della tua ROM, ti farà risparmiare tempo.
- -UniPatcher jest programem do łatkowania ROM-ów. Wsparcie dla typów łatek: IPS, UPS, BPS, APS (GBA), APS (N64), PPF, DPS, EBP i XDelta3.
-Dodatkowe funkcje:
-UniPatcher jest narzędziem do łatkowania ROM-ów różnych konsol
- -The app supports IPS, UPS, BPS, APS (GBA), APS (N64), PPF, DPS, EBP and XDelta3 patches.
- -Nie. UniPatcher nie został stworzony do hakowania gier Androida
- -ROM (Ang.Read-Only-Memory) image jest plikiem komputerowym który zawiera kopię danych z tylko-do-odczytu chipu pamięci kartridża gry komputerowej. -Określenie jest używane w kontekście emulacji, gdzie starsze gry są skopiowane do pliku ROM i za pomocą emulatorów (oprogramowania do emulacji) mogą być puszczone na komputerze, urządzenie przenośnym albo na Android TV.
- -ROM haking jet modyfikowaniem danych w ROM image. To może być zmana kolorów, zmienianie poziomów gry czy nawet tłumaczenie na język w którym gra nie była oryginalnie dostępna.
- -Łatka jest plikiem który zawiera różnicę między oryginalną wersją ROM-u, a shakowaną wersją.
-Łatka jest wypuszczona i finalni użytkownicy aplikują łatkę do oryginalego ROM-u, który produkuję grywalną wersję haku.
- -Haki i tłumaczenia są generalnie wypuszczanie jako łatki aby zredukować wielkość pliku i aby ominąć problemy z prawami autorskimi
- -To bardzo proste: musisz wybrać plik ROM, łatkę i nacisnąć okrągły czerwony przycisk.
-Jako wynik, dostajesz złatkowany ROM, który będzie zlokalizowany w tej samej ścieżce co oryginalny ROM
- -Plik który wybrałeś jest archiwum. Archiwa zawierają ścieżki i pliki w skompresowanym formacie
-Narazie UniPatcher nie może wypakowywać archiw, więc musisz wypakować je w zewnętrznym programie. Rekomenduje darmowy program ZArchiver.
- -Aplikacja będzie wyświetlać ten błąd jeżeli suma kontrolna przechowywana w łatce nie jest taka sama jak suma kontrolna ROM-u. To znaczy że ROM nie jest kompatybilny z łatką. Potrzebujesz wybrać inny ROM . Często jest kilka wersji ROM-u dla danej gry (Np. mamy wersję Europejską, Amerykańską, Japońską, lepszy dump lub gorszy itp.).
-Romhakerzy często publikują sumę kontrolną pliku ROM (na stronie internetowej albo w pliku Readme.txt razem z łatką). Potrzebujesz ją porównać z twoim ROM-em. Dłużej przytrzymaj na pliku w menedżerze plików i wtedy zobaczysz trzy linijki: CRC2, SHA1 i MD5. Masz poprawny ROM jeżeli jedna z tych linijek równa się z sumą kontrolną podaną przez Romhakera. Jeżeli sumy kontrolne się nie równają poszukaj innego ROM-u.
- -Większość łatek do gry ,,Pokémon - Emerald Version" działa z ROM-em "Pokemon - Emerald Version (U) [f1] (Save Type).gba".
- -IPS format patches do not contain a checksum. Therefore, the patch will apply to any (even wrong) ROM. In this case, you need to look for another ROM.
- -ECM is a data compression format designed specifically for disc images. You can decompress the file using ZArchiver program.
- -The error occurs on some devices with Android 4.4. Possible solutions:
-Maybe it's a bug in my program. Please contact me at e-mail and attach the patch to the letter.
- -Tak. UniPatcher może:
-Sega Mega Drive (Genesis) has protection from game modification. ROM stores the checksum value, and if it differs from the actual checksum the game displays a red screen and stops running. This function writes the correct checksum in the ROM.
-Warning: This function does not create a backup ROM.
- -An SMC header is 512 bytes found at the start of some SNES ROM images. These bytes have no purpose, but they change the location of the remaining data. Removing or adding a header is sometimes used for the purpose of correctly applying a patch.
-Warning: This function does not create a backup ROM.
- -If you would like to translate the app into another language or improve an existing translation, you can do it on Transifex site.
- -Contact me at e-mail mashin87@gmail.com. Please write in English or Russian. If you have problems with patching, attach the patch to the letter and write the name of your ROM, it will save our time.
- -UniPatcher это ROM патчер поддерживающий патчи в форматах IPS, UPS, BPS, APS (GBA), APS (N64), PPF, DPS, EBP и XDelta3.
-Дополнительные функции:
-Это приложение для Android предназначенное для наложения патчей на ROM файлы различных игровых видеоконсолей.
- -Приложение поддерживает патчи в форматах IPS, UPS, BPS, APS (GBA), APS (N64), PPF, DPS, EBP и XDelta3.
- -Нет. Приложение не предназначено для взлома Android игр.
- -ROM файл это компьютерный файл содержащий копию данных из чипа памяти игрового картриджа. Этот файл может быть запущен с помощью программы эмулятора. Таким образом можно играть в консольные игры на компьютере или телефоне.
- -ROM хакинг это процесс модификации ROM файла с целью изменить графику, уровни, геймплей или язык игры.
- -Патч это файл содержащий разницу между оригинальной и изменённой версиями ROM'а.
-Ромхакеры распространяют патч, а пользователи применяют этот патч к оригинальной версии ROM'а, тем самым получая модифицированную версию.
- -Хаки и переводы распространяются в виде патчей для того, что бы уменьшить размер скачиваемых данных и не нарушать авторские права на игру.
- -Довольно просто: необходимо выбрать ROM файл и патч, затем нажать на круглую красную кнопку с изображением дискеты
-В результате вы получите пропатченый ROM, который будет находиться в одной директории с исходным ROM'ом.
- -Файл который вы выбрали является архивом. Архив содержит в себе директории и файлы в сжатом виде.
-В настоящее время UniPatcher не умеет распаковывать архивы, поэтому вам необходимо распаковать свой архив в другой программе. Я рекомендую бесплатную программу ZArchiver.
- -Эта ошибка появляется, когда контрольная сумма сохранённая в патче не совпадает с контрольной суммой ROM'а. Это означает, что данный ROM не совместим с патчем. Вам необходимо выбрать другой ROM. Обычно существует несколько версий ROM'а для каждой игры (например, версии для Европы, США, Японии, хорошие или плохие дампы и т.д.).
-Ромхакеры часто публикуют контрольную сумму необходимого ROM файла (на веб странице или в файле Readme). Вам необходимо сравнить её с вашим ROM'ом. Для этого в окне выбора файла сделайте долгий тап на ROM файле и вы увидите 3 строки: CRC32, SHA1 и MD5. Если одна из строк совпадает с контрольной суммой которую указал ромхакер, то у вас подходящий ROM. Если же не совпадает, то вам нужно поискать дугой ROM.
- -Большинство патчей этой игры работают с ROM'ом "Pokemon - Emerald Version (U) [f1] (Save Type).gba".
- -Патчи в формате IPS не содержат контрольной суммы. Поэтому, такой патч наложится на любой (даже неподходящий) ROM. В этом случае нужно использовать ROM другого региона.
- -ECM это формат сжатия данных созданный специально для образов дисков. Программа ZArchiver умеет распаковывать этот формат.
- -Эта ошибка появляется на некоторых устройствах с Android 4.4. Возможные решения:
-Возможен баг в моей программе. Пожалуйста, напишите мне на e-mail и прикрепите патч к письму.
- -Да. Приложение может:
-В Sega Mega Drive есть защита от модификации игр. В ROM'е хранится значение контрольной суммы и если оно отличается от реальной, то игра не запускается, отображая красный экран. Эта функция записывает корректную контрольную сумму в ROM.
-Предупреждение: эта функция не создаёт резервной копии ROM'а.
- -SMC заголовок это 512 байт находящиеся в начале некоторых SNES ROM'ов. Эти байты не имеют значения, но они меняют расположение данных. Удаление или добавление заголовка иногда используется с целью корректного наложения патчей.
-Предупреждение: эта функция не создаёт резервной копии ROM'а.
- -Если вы хотите перевести приложение на другой язык или улучшить существующий перевод, вы можете сделать это на сайте Transifex.
- -Вы можете связаться со мной по электронной почте, мой адрес mashin87@gmail.com. Прошу писать по-английски или по-русски. Если у вас проблема с наложением патча, то прикрепите патч к письму и напишите название вашего ROM'а, это сэкономит наше время.
- -UniPatcher is a ROM patcher that supports IPS, UPS, BPS, APS (GBA), APS (N64), PPF, DPS, EBP and XDelta3 patch types.
-Additional features:
-UniPatcher is an Android tool for applying patches to ROM images of various video game consoles.
- -The app supports IPS, UPS, BPS, APS (GBA), APS (N64), PPF, DPS, EBP and XDelta3 patches.
- -No. UniPatcher is not designed to hack the Android games.
- -A ROM image is a computer file which contains a copy of the data from a read-only memory chip of a video game cartridge. The term is used in the context of emulation, whereby older games are copied to ROM files and can, using a piece of software known as an emulator, be run on a computer or a phone.
- -ROM hacking is modifying the data in a ROM image. This may take the form of altering graphics, changing game levels, tweaking difficulty factor, or even translation into a language for which a game was not originally made available.
- -A patch is a file that contains the differences between the original version of a ROM and the hacked version.
-The patch is distributed, and end users apply the patch to a copy of the original ROM, which produces a playable version of the hack.
- -Hacks and translations are generally distributed as patches to reduce download size and avoid copyright issues.
- -It's very simple: you must choose the ROM file and the patch, then tap on the red round button.
-As a result, you get a patched ROM, which will be located in the same directory with the original ROM.
- -The file you have selected is an archive. The archive contains the directories and files in a compressed format.
-Currently UniPatcher can not extract archives, so you need to unpack your archive in a different program. I recommend a free program ZArchiver.
- -The app will show this error if the checksum stored in the patch does not match the checksum of the ROM. This means that the ROM is not compatible with the patch. You need to choose a different ROM. Usually there are several ROMs for each game (such as the version for Europe, USA, Japan, good or bad dumps, etc).
-Romhackers often publish checksum of the ROM file (on a web page or in Readme file). You need to compare it with your ROM. Long tap on the file in the file manager and You will see 3 lines: CRC32, SHA1 and MD5. You have the correct ROM if one of these lines is equal to the checksum which was written by a romhacker. If the checksums do not match then look for another ROM.
- -Most of the patches of the game work with ROM "Pokemon - Emerald Version (U) [f1] (Save Type).gba".
- -IPS format patches do not contain a checksum. Therefore, the patch will apply to any (even wrong) ROM. In this case, you need to look for another ROM.
- -ECM is a data compression format designed specifically for disc images. You can decompress the file using ZArchiver program.
- -The error occurs on some devices with Android 4.4. Possible solutions:
-Maybe it's a bug in my program. Please contact me at e-mail and attach the patch to the letter.
- -Yes. UniPatcher can:
-Sega Mega Drive (Genesis) has protection from game modification. ROM stores the checksum value, and if it differs from the actual checksum the game displays a red screen and stops running. This function writes the correct checksum in the ROM.
-Warning: This function does not create a backup ROM.
- -An SMC header is 512 bytes found at the start of some SNES ROM images. These bytes have no purpose, but they change the location of the remaining data. Removing or adding a header is sometimes used for the purpose of correctly applying a patch.
-Warning: This function does not create a backup ROM.
- -If you would like to translate the app into another language or improve an existing translation, you can do it on Transifex site.
- -Contact me at e-mail mashin87@gmail.com. Please write in English or Russian. If you have problems with patching, attach the patch to the letter and write the name of your ROM, it will save our time.
- - diff --git a/app/src/main/res/raw/faq.md b/app/src/main/res/raw/faq.md new file mode 100644 index 0000000..18d0011 --- /dev/null +++ b/app/src/main/res/raw/faq.md @@ -0,0 +1,99 @@ +## Frequently Asked Questions: + +#### What is UniPatcher? + +UniPatcher is an Android tool for applying patches to ROM images of various video game consoles. + +#### What patch formats are supported? + +The app supports IPS, UPS, BPS, APS (GBA), APS (N64), PPF, DPS, EBP and XDelta3 patches. + +#### Can I hack or crack Android game using this app? + +No. UniPatcher is not designed to hack the Android games. + +#### What is ROM image? + +A ROM image is a computer file which contains a copy of the data from a read-only memory chip of a video game cartridge. The term is used in the context of emulation, whereby older games are copied to ROM files and can, using a piece of software known as an emulator, be run on a computer or a phone. + +#### What is ROM hacking? + +ROM hacking is modifying the data in a ROM image. This may take the form of altering graphics, changing game levels, tweaking difficulty factor, or even translation into a language for which a game was not originally made available. + +#### What is a patch? + +A patch is a file that contains the differences between the original version of a ROM and the hacked version. + +The patch is distributed, and end users apply the patch to a copy of the original ROM, which produces a playable version of the hack. + +#### Why romhackers do not distribute modified games? + +Hacks and translations are generally distributed as patches to reduce download size and avoid copyright issues. + +#### How to apply a patch to ROM? + +It's very simple: you must choose the ROM file and the patch, then tap on the red round button. + +As a result, you get a patched ROM, which will be located in the same directory with the original ROM. + +#### App shows a message after file selection: "Archive should be unpacked in an external program". + +The file you have selected is an archive. The archive contains the directories and files in a compressed format. + +Currently UniPatcher can not extract archives, so you need to unpack your archive in a different program. I recommend a free program [ZArchiver](https://play.google.com/store/apps/details?id=ru.zdevs.zarchiver). + +#### The app shows the error: "This ROM is not compatible with the patch". + +The app will show this error if the checksum stored in the patch does not match the checksum of the ROM. This means that the ROM is not compatible with the patch. You need to choose a different ROM. Usually there are several ROMs for each game (such as the version for Europe, USA, Japan, good or bad dumps, etc). + +Romhackers often publish checksum of the ROM file (on a web page or in Readme file). You need to compare it with your ROM. Long tap on the file in the file manager and You will see 3 lines: CRC32, SHA1 and MD5. You have the correct ROM if one of these lines is equal to the checksum which was written by a romhacker. If the checksums do not match then look for another ROM. + +#### I can not find the correct ROM for the game "Pokemon Emerald". + +Most of the patches of the game work with ROM "Pokemon - Emerald Version (U) \[f1\] (Save Type).gba". + +#### I apply the IPS patch and then the game is not working / contains graphic glitches. What am I doing wrong? + +IPS format patches do not contain a checksum. Therefore, the patch will apply to any (even wrong) ROM. In this case, you need to look for another ROM. + +#### What can I do with .ECM file type? + +ECM is a data compression format designed specifically for disc images. You can decompress the file using [ZArchiver](https://play.google.com/store/apps/details?id=ru.zdevs.zarchiver) program. + +#### The app shows the error: "Could not copy file". + +The error occurs on some devices with Android 4.4. Possible solutions: + +- Copy the ROM file on the memory card in the folder **Android/data/org.emunix.unipatcher/**. Then you need to select the ROM from this directory. +- Install [SDFix](https://play.google.com/store/apps/details?id=nextapp.sdfix) application (requires ROOT access). + +#### The app shows the error: "File have the wrong checksum after it was patched". + +Maybe it's a bug in my program. Please contact me at [e-mail](mailto:mashin87@gmail.com) and attach the patch to the letter. + +#### Has UniPatcher some additional features? + +Yes. UniPatcher can: + +- fix checksum for a Sega Mega Drive / Sega Genesis games. +- add or remove SMC header for a Super Nintendo games. + +#### Why do I have to fix checksum for the Sega Mega Drive games? + +Sega Mega Drive (Genesis) has protection from game modification. ROM stores the checksum value, and if it differs from the actual checksum the game displays a red screen and stops running. This function writes the correct checksum in the ROM. + +**Warning:** This function does not create a backup ROM. + +#### Why it's needed sometimes to add or remove SMC headers from Super Nintendo games? + +An SMC header is 512 bytes found at the start of some SNES ROM images. These bytes have no purpose, but they change the location of the remaining data. Removing or adding a header is sometimes used for the purpose of correctly applying a patch. + +**Warning:** This function does not create a backup ROM. + +#### How to translate the app? + +If you would like to translate the app into another language or improve an existing translation, you can do it on [Transifex](https://www.transifex.com/unipatcher/unipatcher/dashboard/) site. + +#### I have a question, a feature request or a bug report. + +Contact me at e-mail