Cheats/Patches (#493)

* Cheats/Patches

Adds the possibility of applying cheats/patches according to the specific game serial+version

The logic for adding modifications has not yet been implemented!

Interface based on issues/372 https://github.com/shadps4-emu/shadPS4/issues/372

[X]Front-end
[]Back-end

Create a synchronized fork of the cheats/patches repository

* Clang Format

* separate files

The code has been separated into separate files as suggested by georgemoralis.
Added the Patch tab, which has not been implemented yet.
Added the 'applyCheat' area to apply the modification, not implemented yet...
And added LOG_INFO.

* reuse

* initial implementation of cheat functionality

* Update cheats_patches.cpp

sets all added buttons to the size of the largest button.
and fixes some aesthetic issues.

* move eboot_address to module.h

fixes the non-qt builds and makes more sense to be there anyway

* Patchs menu and fixes

adds the possibility to download Patches, it does not modify the memory yet.
and some other fixes

* MemoryPatcher namespace, activate cheats on start

* format

* initial patch implementation

* format

* format again...

* convertValueToHex

* Fixes

Choosing which cheat file to use.
And some other fixes

* fix bytes16, bytes32, bytes64 type patches

If a patch is any of these types we convert it from little endian to big endian

* format

* format again :(

* Implement pattern scanning for mask type patches

* add check to stop patches applying to wrong game

previously if you added a patch to a game, but closed the window and opened a different game it would still try to apply the patch, this is now fixed

* format

* Fix 'Hint' 0x400000 |  and Author

* Management |save checkbox | shadps4 repository

MENU - Cheats/Patches Management (implementing Patches)
save patches checkbox
add shadps4 repository

* Load saved patches, miscellaneous fixes

* Fix an issue with mask patches not being saved

* format + remove debug log

* multiple patches | TR translation for cheats/patches

* clang

* ENABLE_QT_GUI

* OK

* move memory_patcher to qt_gui

* clang

* add cheats hu_HU

* fix log

* Remove the item from the patchesListView if no patches were added (the game has patches, but not for the current version)

---------

Co-authored-by: CrazyBloo <CrazyBloo@users.noreply.github.com>
This commit is contained in:
DanielSvoboda 2024-08-29 01:18:50 -03:00 committed by GitHub
parent a6a9fff666
commit 614a23b369
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
35 changed files with 12003 additions and 798 deletions

View file

@ -81,67 +81,72 @@
<context>
<name>GuiContextMenus</name>
<message>
<location filename="../gui_context_menus.h" line="39"/>
<location filename="../gui_context_menus.h" line="46"/>
<source>Create Shortcut</source>
<translation>Create Shortcut</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="40"/>
<location filename="../gui_context_menus.h" line="47"/>
<source>Open Game Folder</source>
<translation>Open Game Folder</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="41"/>
<location filename="../gui_context_menus.h" line="48"/>
<source>Cheats / Patches</source>
<translation>Kodikí / Enimeróseis</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="49"/>
<source>SFO Viewer</source>
<translation>SFO Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="42"/>
<location filename="../gui_context_menus.h" line="50"/>
<source>Trophy Viewer</source>
<translation>Trophy Viewer</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="50"/>
<location filename="../gui_context_menus.h" line="59"/>
<source>Copy info</source>
<translation>Copy info</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="51"/>
<location filename="../gui_context_menus.h" line="60"/>
<source>Copy Name</source>
<translation>Copy Name</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="52"/>
<location filename="../gui_context_menus.h" line="61"/>
<source>Copy Serial</source>
<translation>Copy Serial</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="53"/>
<location filename="../gui_context_menus.h" line="62"/>
<source>Copy All</source>
<translation>Copy All</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="173"/>
<location filename="../gui_context_menus.h" line="195"/>
<source>Shortcut creation</source>
<translation>Shortcut creation</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="174"/>
<location filename="../gui_context_menus.h" line="196"/>
<source>Shortcut created successfully!\n %1</source>
<translation>Shortcut created successfully!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="177"/>
<location filename="../gui_context_menus.h" line="199"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="178"/>
<location filename="../gui_context_menus.h" line="200"/>
<source>Error creating shortcut!\n %1</source>
<translation>Error creating shortcut!\n %1</translation>
</message>
<message>
<location filename="../gui_context_menus.h" line="253"/>
<location filename="../gui_context_menus.h" line="275"/>
<source>Install PKG</source>
<translation>Install PKG</translation>
</message>
@ -248,6 +253,11 @@
<source>Game Install Directory</source>
<translation>Game Install Directory</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="343"/>
<source>Download Cheats/Patches</source>
<translation>Κατεβάστε Κωδικούς / Ενημερώσεις</translation>
</message>
<message>
<location filename="../main_window_ui.h" line="345"/>
<source>Dump Game List</source>
@ -487,5 +497,396 @@
<source>Enable RenderDoc Debugging</source>
<translation>Enable RenderDoc Debugging</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../main_window.cpp" line="168"/>
<source> * Unsupported Vulkan Version</source>
<translation> * Μη υποστηριζόμενη έκδοση Vulkan</translation>
</message>
<message>
<location filename="../main_window.cpp" line="326"/>
<source>Download Cheats For All Installed Games</source>
<translation>Λήψη Cheats για όλα τα εγκατεστημένα παιχνίδια</translation>
</message>
<message>
<location filename="../main_window.cpp" line="328"/>
<source>Download Patches For All Games</source>
<translation>Λήψη Patches για όλα τα παιχνίδια</translation>
</message>
<message>
<location filename="../main_window.cpp" line="363"/>
<source>Download Complete</source>
<translation>Η λήψη ολοκληρώθηκε</translation>
</message>
<message>
<location filename="../main_window.cpp" line="364"/>
<source>You have downloaded cheats for all the games you have installed.</source>
<translation>Έχετε κατεβάσει cheats για όλα τα εγκατεστημένα παιχνίδια.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="391"/>
<source>Patches Downloaded Successfully!</source>
<translation>Τα Patches κατέβηκαν επιτυχώς!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="392"/>
<source>All Patches available for all games have been downloaded.</source>
<translation>Όλα τα διαθέσιμα Patches για όλα τα παιχνίδια έχουν κατέβει.</translation>
</message>
<message>
<location filename="../main_window.cpp" line="549"/>
<source>Games: </source>
<translation>Παιχνίδια: </translation>
</message>
<message>
<location filename="../main_window.cpp" line="575"/>
<source>PKG File (*.PKG)</source>
<translation>Αρχείο PKG (*.PKG)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="594"/>
<source>ELF files (*.bin *.elf *.oelf)</source>
<translation>Αρχεία ELF (*.bin *.elf *.oelf)</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Game Boot</source>
<translation>Εκκίνηση παιχνιδιού</translation>
</message>
<message>
<location filename="../main_window.cpp" line="600"/>
<source>Only one file can be selected!</source>
<translation>Μπορεί να επιλεγεί μόνο ένα αρχείο!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="623"/>
<source>PKG Extraction</source>
<translation>Εξαγωγή PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="633"/>
<source>Patch detected!\nPKG and Game versions match!: %1\nWould you like </source>
<translation>Ανίχνευση Patch!\nΟι εκδόσεις PKG και παιχνιδιού ταιριάζουν!: %1\nΘέλετε </translation>
</message>
<message>
<location filename="../main_window.cpp" line="634"/>
<source>to overwrite?</source>
<translation>να αντικαταστήσετε;</translation>
</message>
<message>
<location filename="../main_window.cpp" line="639"/>
<source>Patch detected!\nPKG Version %1 is older </source>
<translation>Ανίχνευση Patch!\nΗ έκδοση PKG %1 είναι παλαιότερη </translation>
</message>
<message>
<location filename="../main_window.cpp" line="640"/>
<source>than installed version!: %2\nWould you like </source>
<translation>από την εγκατεστημένη έκδοση!: %2\nΘέλετε </translation>
</message>
<message>
<location filename="../main_window.cpp" line="641"/>
<source>to overwrite?</source>
<translation>να αντικαταστήσετε;</translation>
</message>
<message>
<location filename="../main_window.cpp" line="646"/>
<source>Patch detected!\nGame is installed: %1\nWould you like </source>
<translation>Ανίχνευση Patch!\nΤο παιχνίδι είναι εγκατεστημένο: %1\nΘέλετε </translation>
</message>
<message>
<location filename="../main_window.cpp" line="647"/>
<source>to install Patch: %2?</source>
<translation>να εγκαταστήσετε το Patch: %2;</translation>
</message>
<message>
<location filename="../main_window.cpp" line="659"/>
<source>Game already installed\n%1\nWould you like to overwrite?</source>
<translation>Το παιχνίδι είναι ήδη εγκατεστημένο\n%1\nΘέλετε να αντικαταστήσετε;</translation>
</message>
<message>
<location filename="../main_window.cpp" line="674"/>
<source>PKG is a patch, please install the game first!</source>
<translation>Το PKG είναι patch, παρακαλώ εγκαταστήστε πρώτα το παιχνίδι!</translation>
</message>
<message>
<location filename="../main_window.cpp" line="681"/>
<source>PKG ERROR</source>
<translation>ΣΦΑΛΜΑ PKG</translation>
</message>
<message>
<location filename="../main_window.cpp" line="693"/>
<source>Extracting PKG %1/%2</source>
<translation>Εξαγωγή PKG %1/%2</translation>
</message>
<message>
<location filename="../main_window.cpp" line="703"/>
<source>Extraction Finished</source>
<translation>Η εξαγωγή ολοκληρώθηκε</translation>
</message>
<message>
<location filename="../main_window.cpp" line="704"/>
<source>Game successfully installed at %1</source>
<translation>Το παιχνίδι εγκαταστάθηκε επιτυχώς στο %1</translation>
</message>
<message>
<location filename="../main_window.cpp" line="725"/>
<source>File doesn't appear to be a valid PKG file</source>
<translation>Η αρχείο δεν φαίνεται να είναι έγκυρο αρχείο PKG</translation>
</message>
</context>
<context>
<name>CheatsPatches</name>
<message>
<location filename="../cheats_patches.cpp" line="44"/>
<source>Cheats / Patches</source>
<translation>Cheats / Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="50"/>
<source>defaultTextEdit_MSG</source>
<translation>Οι cheats/patches είναι πειραματικά.\nΧρησιμοποιήστε τα με προσοχή.\n\nΚατεβάστε τους cheats μεμονωμένα επιλέγοντας το αποθετήριο και κάνοντας κλικ στο κουμπί λήψης.\nΣτην καρτέλα Patches, μπορείτε να κατεβάσετε όλα τα patches ταυτόχρονα, να επιλέξετε ποια θέλετε να χρησιμοποιήσετε και να αποθηκεύσετε την επιλογή.\n\nΔεδομένου ότι δεν αναπτύσσουμε τους cheats/patches,\αρακαλώ αναφέρετε προβλήματα στον δημιουργό του cheat.\n\nΔημιουργήσατε ένα νέο cheat; Επισκεφθείτε:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="69"/>
<source>No Image Available</source>
<translation>Δεν διατίθεται εικόνα</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="79"/>
<source>Serial: </source>
<translation>Σειριακός αριθμός: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="83"/>
<source>Version: </source>
<translation>Έκδοση: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="87"/>
<source>Size: </source>
<translation>Μέγεθος: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="126"/>
<source>Select Cheat File:</source>
<translation>Επιλέξτε αρχείο Cheat:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="133"/>
<source>Repository:</source>
<translation>Αποθετήριο:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="149"/>
<source>Download Cheats</source>
<translation>Λήψη Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="155"/>
<source>Delete File</source>
<translation>Διαγραφή αρχείου</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="169"/>
<source>No files selected.</source>
<translation>Δεν έχουν επιλεγεί αρχεία.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="170"/>
<source>You can delete the cheats you don't want after downloading them.</source>
<translation>Μπορείτε να διαγράψετε τα cheats που δεν θέλετε μετά τη λήψη τους.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="178"/>
<source>Do you want to delete the selected file?\n%1</source>
<translation>Θέλετε να διαγράψετε το επιλεγμένο αρχείο;\n%1</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="213"/>
<source>Select Patch File:</source>
<translation>Επιλέξτε αρχείο Patch:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="241"/>
<source>Download Patches</source>
<translation>Λήψη Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="248"/>
<source>Save</source>
<translation>Αποθήκευση</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="256"/>
<source>Cheats</source>
<translation>Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="257"/>
<source>Patches</source>
<translation>Patches</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>Error</source>
<translation>Σφάλμα</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="278"/>
<source>No patch selected.</source>
<translation>Δεν έχει επιλεγεί κανένα patch.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="292"/>
<source>Unable to open files.json for reading.</source>
<translation>Αδυναμία ανοίγματος του files.json για ανάγνωση.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="316"/>
<source>No patch file found for the current serial.</source>
<translation>Δεν βρέθηκε αρχείο patch για τον τρέχοντα σειριακό αριθμό.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="323"/>
<source>Unable to open the file for reading.</source>
<translation>Αδυναμία ανοίγματος του αρχείου για ανάγνωση.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="422"/>
<source>Unable to open the file for writing.</source>
<translation>Αδυναμία ανοίγματος του αρχείου για εγγραφή.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="432"/>
<source>Failed to parse XML: </source>
<translation>Αποτυχία ανάλυσης XML: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Success</source>
<translation>Επιτυχία</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="434"/>
<source>Options saved successfully.</source>
<translation>Οι ρυθμίσεις αποθηκεύτηκαν επιτυχώς.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="470"/>
<source>Invalid Source</source>
<translation>Μη έγκυρη Πηγή</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="471"/>
<source>The selected source is invalid.</source>
<translation>Η επιλεγμένη πηγή είναι μη έγκυρη.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="519"/>
<source>File Exists</source>
<translation>Η αρχείο υπάρχει</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="520"/>
<source>File already exists. Do you want to replace it?</source>
<translation>Η αρχείο υπάρχει ήδη. Θέλετε να την αντικαταστήσετε;</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="539"/>
<source>Failed to save file:</source>
<translation>Αποτυχία αποθήκευσης αρχείου:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="545"/>
<source>Failed to download file:</source>
<translation>Αποτυχία λήψης αρχείου:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>Cheats Not Found</source>
<translation>Δεν βρέθηκαν Cheats</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="556"/>
<source>CheatsNotFound_MSG</source>
<translation>Δεν βρέθηκαν cheats για αυτό το παιχνίδι στην τρέχουσα έκδοση του επιλεγμένου αποθετηρίου. Δοκιμάστε να κατεβάσετε από άλλο αποθετήριο ή άλλη έκδοση του παιχνιδιού.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="593"/>
<source>Cheats Downloaded Successfully</source>
<translation>Cheats κατεβάστηκαν επιτυχώς</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="594"/>
<source>CheatsDownloadedSuccessfully_MSG</source>
<translation>Κατεβάσατε επιτυχώς cheats για αυτή την έκδοση του παιχνιδιού από το επιλεγμένο αποθετήριο. Μπορείτε να δοκιμάσετε να κατεβάσετε από άλλο αποθετήριο. Αν είναι διαθέσιμο, μπορείτε να το επιλέξετε επιλέγοντας το αρχείο από τη λίστα.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="747"/>
<source>Failed to save:</source>
<translation>Αποτυχία αποθήκευσης:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="754"/>
<source>Failed to download:</source>
<translation>Αποτυχία λήψης:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="762"/>
<source>Download Complete</source>
<translation>Η λήψη ολοκληρώθηκε</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="763"/>
<source>DownloadComplete_MSG</source>
<translation>Τα Patches κατεβάστηκαν επιτυχώς! Όλα τα Patches για όλα τα παιχνίδια έχουν κατέβει, δεν είναι απαραίτητο να τα κατεβάσετε ένα-ένα για κάθε παιχνίδι, όπως με τα Cheats.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="773"/>
<source>Failed to parse JSON data from HTML.</source>
<translation>Αποτυχία ανάλυσης δεδομένων JSON από HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="778"/>
<source>Failed to retrieve HTML page.</source>
<translation>Αποτυχία ανάκτησης σελίδας HTML.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="801"/>
<source>Failed to open file:</source>
<translation>Αποτυχία ανοίγματος αρχείου:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="819"/>
<source>XML ERROR:</source>
<translation>ΣΦΑΛΜΑ XML:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="826"/>
<source>Failed to open files.json for writing</source>
<translation>Αποτυχία ανοίγματος του files.json για εγγραφή</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="925"/>
<source>Author: </source>
<translation>Συγγραφέας: </translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="997"/>
<source>Directory does not exist:</source>
<translation>Ο φάκελος δεν υπάρχει:</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Failed to open files.json for reading.</source>
<translation>Αποτυχία ανοίγματος του files.json για ανάγνωση.</translation>
</message>
<message>
<location filename="../cheats_patches.cpp" line="1006"/>
<source>Name:</source>
<translation>Όνομα:</translation>
</message>
</context>
</TS>