Post: Save Wizard Custom Quick Code Formats
09-20-2017, 10:25 PM #1
Dynamite
Vault dweller
(adsbygoogle = window.adsbygoogle || []).push({}); Notes:
Because the majority of PS4 saves use Little Endian, Save Wizard will automatically swap the values for those specific games. Therefore, writing "000039FE" in a code will post as "FE390000". This is true for all codes except for the Search Value in the Pointer Codes (Code Types 8/B/C) and the Bytes Written in the Mass Write Code (Code Type A). These values will be pasted exactly how they're written in the code.

I prefer to use Bytes instead of Bits but for a quick translation:
8-bits = 1 Byte, 16-bits = 2 Bytes, 32-bits = 4 Bytes.
I also know some veterans like to use bitwise operators when writing codes but I'm not here to confuse anyone so I'm not going to do that :P

These are not all of the codes nor are they complete translations for each code. Save Wizard / Game Genie has never really publicly posted anything about the code formats so the majority have been discovered over the course of the past decade. Shout out to every single code hunter and community! (There are way too many to name and if I start I know I'll forget some)

Code Type 0: Standard 8-bit (1 Byte) Write:
0BYYYYYY 000000XX

B = Offset Type
​0 = Default
8 = Offset from Pointer

Y = Address
X = Bytes to Write

Example:

00000456 00000063

00000456 00000063 - Normal Offset
00000456 00000063 - Writes to this Address
00000456 00000063 - Writes these Bytes

You must login or register to view this content.

Code Type 1: Standard 16-bit (2 Byte) Write:
1BYYYYYY 0000XXXX

B = Offset Type
0 = Default
8 = Offset from Pointer

Y = Address
X = Bytes to Write

Example:

10001E24 000003E7

10001E24 000003E7 - Normal Offset
10001E24 000003E7 - Writes to this Address
10001E24 000003E7- Writes these Bytes

You must login or register to view this content.

Code Type 2: Standard 32-bit (4 Byte) Write:
2BYYYYYY XXXXXXXX

B = Offset Type
0 = Default
8 = Offset from Pointer

Y = Address
X = Bytes to Write

Example:

20000250 3B9AC9FF

20000250 3B9AC9FF - Normal Offset
20000250 3B9AC9FF - Writes to this Address
20000250 3B9AC9FF - Writes these Bytes

You must login or register to view this content.

Code Type 3: Increase / Decrease Code:
3BYYYYYY XXXXXXXX

B = Byte Value & Offset Type
0 = Add 1 Byte (000000XX)
1 = Add 2 Bytes (0000XXXX)
2 = Add 4 Bytes
3 = Add 8 Bytes
4 = Sub 1 Byte (000000XX)
5 = Sub 2 Bytes (0000XXXX)
6 = Sub 4 Bytes
7 = Sub 8 Bytes
8 = Offset from Pointer; Add 1 Byte (000000XX)
9 = Offset from Pointer; Add 2 Bytes (0000XXXX)
A = Offset from Pointer; Add 4 Bytes
B = Offset from Pointer; Add 8 Bytes
C = Offset from Pointer; Sub 1 Byte (000000XX)
D = Offset from Pointer; Sub 2 Bytes (0000XXXX)
E = Offset from Pointer; Sub 4 Bytes
F = Offset from Pointer; Sub 8 Bytes

Y = Address
X = Bytes to Add/Sub

Example:

31003E3D 0000112A

31003E3D 0000112A - Add 2 Bytes Worth
31003E3D 0000112A - Add to this Address
31003E3D 0000112A - Add These Bytes

Before:
You must login or register to view this content.
After:
You must login or register to view this content.

For the 8 Byte Value Type, it will write 4 Bytes of data but will continue to write the bytes afterwards if it cannot write any more.

Code Type 4: Multi-Write Code (Repeater):
4BYYYYYY XXXXXXXX
4CCCDDDD ZZZZZZZZ

B = Byte Value & Offset Type
0 = 1 Byte (Only Writes 000000XX)
1 = 2 Bytes (Only Writes 0000XXXX)
2 = 4 Bytes
8 = Offset from Pointer; 1 Byte (Only Writes 000000XX)
9 = Offset from Pointer; 2 Bytes (Only Writes 0000XXXX)
A = Offset from Pointer; 4 Bytes

Y = Address
X = Bytes to Write
C = Amount of times to repeat Write
D = Increases Address by per Write
Z = Increases Value by per Write

Example:

41004500 00000100
4004000C 00000002
​
41004500 00000100 - Writes 2 Bytes Worth
4004000C 00000002 - Writes Four Times

41004500 00000100 - Writes to this Address
4004000C 00000002 - Distance Between Writes

41004500 00000100 - Writes these Bytes
4004000C 00000002 - Increases By 2 Per Write

You must login or register to view this content.

Code Type 5: Copy and Paste Code:
5BYYYYYY XXXXXXXX
5BZZZZZZ 00000000

B = Offset Type
0 = Default
8 = Offset from Pointer

Y = Address to Copy Bytes
X = Amount of Bytes to Copy
1 = 1 Bytes
2 = 2 Bytes
So on...

Z = Address to Paste Bytes

Example:

500000A2 00000004
500000B4 00000000

500000A2 00000004 - Normal Offset
500000B4 00000000 - Normal Offset

500000A2 00000004 - Copies the Bytes from this Address
500000B4 00000000 - Pastes Bytes to this Address

500000A2 00000004 - Copies Four Bytes Worth
500000B4 00000000

You must login or register to view this content.

Code Type 7: No More / No Less than Code:
7BYYYYYY XXXXXXXX

B = Byte Value & Offset Type
0 = No Less Than: 1 Byte (000000XX)
1 = No Less Than: 2 Bytes (0000XXXX)
2 = No Less Than: 4 Bytes
4 = No More Than: 1 Byte (000000XX)
5 = No More Than: 2 Bytes (0000XXXX)
6 = No More Than: 4 Bytes
8 = Offset from Pointer; No Less Than: 1 Byte (000000XX)
9 = Offset from Pointer; No Less Than: 2 Bytes (0000XXXX)
A = Offset from Pointer; No Less Than: 4 Bytes
C = Offset from Pointer; No More Than: 1 Byte (000000XX)
D = Offset from Pointer; No More Than: 2 Bytes (0000XXXX)
E = Offset from Pointer; No More Than: 4 Bytes

Y = Address
X = Bytes to Write
This code is the same as a standard write code however it will only write the bytes if the current value at the address is no more or no less than X.
For example, you can use a no less than value to make sure the address has more than X but will take no effect if it already has more than the value on the code.

Code Type 8: Forward Byte Search (Set Pointer):
8BCCYYYY XXXXXXXX
*Other Code Here, Use Specific Offset Type*

B = Offset Type
0 = Default
8 = Offset from Pointer

C = Amount of Times to Find until Pointer Set
Y = Amount of Bytes to Search
1 = 1 Byte
2 = 2 Bytes
and so on...

X = Bytes to Search, use Multiple Lines if Needed

Example:

80010002 01B00117 - Searches for two bytes of "01B00117" Once using Default Offset
28000010 7FFFFFFF - Standard Write code using the "8" Offset Type (Refer to Code Type 2) and offsets by 0x10

You must login or register to view this content.

Code Type 9: Pointer Manipulator:
9Y000000 XXXXXXXX

Y = Operator
0 = Set Pointer to Big Endian value at XXXXXXXX
1 = Set Pointer to Little Endian value at XXXXXXXX
2 = Add X to Pointer
3 = Sub X to Pointer
4 = Set Pointer to the end of file and subtract X
5 = Set Pointer to X

X = Value to set / change

This code is commonly used to offset the Pointer after a search or before a write.

Code Type A: Mass Write Code:
ABYYYYYY XXXXXXXX
ZZZZZZZZ ZZZZZZZZ

B = Offset Type
0 = Normal
8 = Offset from Pointer

Y = Writes to this Address
X = Amount of Bytes to Write
Z = Bytes to Write, use Multiple Lines if Needed

Example:

A0004510 00000010
11223344 55667788
99AABBCC DDEEFF00


A0004510 0000000F - Writes to this Address
11223344 55667788
99AABBCC DDEEFF00

A0004510 0000000F - Writes this many Bytes
11223344 55667788 - Bytes to Write (1)
99AABBCC DDEEFF00 - Bytes to Write (2)

You must login or register to view this content.

Code Type B: Backward Byte Search (Set Pointer):
BBCCYYYY XXXXXXXX
*Other Code Here, Use Specific Offset Type*

B = Offset Type
0 = Default
8 = Offset from Pointer

C = Amount of Times to Find until Pointer Set
Y = Amount of Bytes to Search
1 = 1 Byte
2 = 2 Bytes
and so on...

X = Bytes to Search, use Multiple Lines if Needed

This code works exactly the same as Code Type 8, however it instead searches backwards from the end of the file (or pointer)

Code Type C: Offset Byte Search (Set Pointer):
CBFFYYYY XXXXXXXX
*Other Code Here, Use Specific Offset Type*

B = Offset Type
0 = Search Forwards from Address Given
4 = Search Backwards from Address Given
8 = Offset from Pointer; Search Forwards from Address Given
C = Offset from Pointer; Search Backwards from Address Given

F = Amount of Times to Find until Pointer Set
Y = Amount of Bytes to Search from Address
1 = 1 Byte
2 = 2 Bytes
and so on...

X = Address of Bytes to Search with

Rather than searching for bytes already given such as codes 8 and B, this code will instead search using the bytes at a specific Address.

The following 97 users say thank you to Dynamite for this useful post:

18095092219, aeneax, akyuusan, alcomplus, Alexsandr194, Andrey-Shapenkov, Apo, aroun33000, axsabrzpa, barsko27, belga, billyxota, britosousa, CaptainReha, Confucius_Senpai, Cooper-Wong, coritanos, Cylas-Vidrine, d3adwalker, D4rk_0_light, danilo_BR, darkprince13, demonquenn, Dojima, doomsday400, edossari, eownddl23, ersin350, FiiZx, Frosty, GelsonSilva, gogeta62, gotexan8, guhjorn, hancoolboy, hassanxx, heather1988, hoanghieptrans, Horben, HorrorX, Idolize, iMoDzF4N4TiK, indysgill77, Izimaru, jhonny040977, juniorsp01, kensusflow, kenx, kok2009, ktp11445, Leel347, Leomoreira28, Leytonsroom, Libido, luciferous31, luix, Luiz77, LUNATIK SAINT, macflay59, mano154, mazebacebas, MOONOMAN, Mozzeyy8989, MrLibido, mroshaw, neka174, nenyko12, nono__wlm, nozomibb22, owendswang, patbz, paulolucas, ProbablyRaging, raito_kun, redmouf, revfunk28, reynaldo, Rico93, seb88230, SHAkA, shz_hossein, skylar-4me, Snake88, Suly, Tatshu Chabal, TheBlackPec, themikado, timebound, tobyrahmat, tw467, v1510n4ry, Wildarms, Wirezendee, wuhao, Xomination, yared124358, zero1986313
05-28-2019, 11:36 PM #20
Originally posted by Dynamite View Post

Great tutorial Dynamite nothing like it allover the web . I have a question though you covered the byte value 1,2,8,A but what about 9 ?
I see some codes are using 9 as well as in here :

80010017 506C6179 pointer for size of 17
65724C6F 6F745374
6F726167 6542505F
435F3
000 00000000 address ends here
88010004 365CBF5A another pointer size 4 (365CBF5A)
93000000 00000004 what does this do exactly ?
28000000 0000270F to replace 0000 with 9999
05-30-2019, 07:27 AM #21
Dynamite
Vault dweller
Originally posted by maqrashi View Post
Originally posted by Dynamite View Post

Great tutorial Dynamite nothing like it allover the web . I have a question though you covered the byte value 1,2,8,A but what about 9 ?
I see some codes are using 9 as well as in here :

80010017 506C6179 pointer for size of 17
65724C6F 6F745374
6F726167 6542505F
435F3
000 00000000 address ends here
88010004 365CBF5A another pointer size 4 (365CBF5A)
93000000 00000004 what does this do exactly ?
28000000 0000270F to replace 0000 with 9999

The code is mainly used to offset from a pointer search command. Can pretty much use it to search for some bytes and then offset backwards if needed.

9Y000000 XXXXXXXX

Y = Forward/Backward
2 = Forward
3 = Backward
X = Amount to Offset

Edit: Updated the main post to include Increase/Decrease Code, Pointer Manipulator, and Pointer Command 2.
Last edited by Dynamite ; 05-30-2019 at 04:36 PM.
05-30-2019, 10:36 PM #22
Originally posted by Dynamite View Post
Originally posted by maqrashi View Post
Originally posted by Dynamite View Post

Great tutorial Dynamite nothing like it allover the web . I have a question though you covered the byte value 1,2,8,A but what about 9 ?
I see some codes are using 9 as well as in here :

80010017 506C6179 pointer for size of 17
65724C6F 6F745374
6F726167 6542505F
435F3
000 00000000 address ends here
88010004 365CBF5A another pointer size 4 (365CBF5A)
93000000 00000004 what does this do exactly ?
28000000 0000270F to replace 0000 with 9999

The code is mainly used to offset from a pointer search command. Can pretty much use it to search for some bytes and then offset backwards if needed.

9Y000000 XXXXXXXX

Y = Forward/Backward
2 = Forward
3 = Backward
X = Amount to Offset

Edit: Updated the main post to include Increase/Decrease Code, Pointer Manipulator, and Pointer Command 2.

Thanks, its very clear now. I have one question though, how did SW came up with all of this comands or is it used somewhere else?
I have some background in programming but I never came across something like this, is it close to machine language or something relative?
05-31-2019, 02:05 AM #23
Dynamite
Vault dweller
Originally posted by maqrashi View Post
Originally posted by Dynamite View Post
Originally posted by maqrashi View Post
Originally posted by Dynamite View Post

Great tutorial Dynamite nothing like it allover the web . I have a question though you covered the byte value 1,2,8,A but what about 9 ?
I see some codes are using 9 as well as in here :

80010017 506C6179 pointer for size of 17
65724C6F 6F745374
6F726167 6542505F
435F3
000 00000000 address ends here
88010004 365CBF5A another pointer size 4 (365CBF5A)
93000000 00000004 what does this do exactly ?
28000000 0000270F to replace 0000 with 9999

The code is mainly used to offset from a pointer search command. Can pretty much use it to search for some bytes and then offset backwards if needed.

9Y000000 XXXXXXXX

Y = Forward/Backward
2 = Forward
3 = Backward
X = Amount to Offset

Edit: Updated the main post to include Increase/Decrease Code, Pointer Manipulator, and Pointer Command 2.

Thanks, its very clear now. I have one question though, how did SW came up with all of this comands or is it used somewhere else?
I have some background in programming but I never came across something like this, is it close to machine language or something relative?

Save Wizard is the same developers behind Game Genie, which -to my knowledge- created the formats and set it up the way it is. Unfortunately they won't fully reveal all of the code formats so all of the ones out there have either been discovered by users or reverse engineered.
Last edited by Dynamite ; 05-31-2019 at 02:05 AM.
05-31-2019, 03:33 AM #24
Originally posted by Dynamite View Post
Originally posted by maqrashi View Post
Originally posted by Dynamite View Post
Originally posted by maqrashi View Post
Originally posted by Dynamite View Post

Great tutorial Dynamite nothing like it allover the web . I have a question though you covered the byte value 1,2,8,A but what about 9 ?
I see some codes are using 9 as well as in here :

80010017 506C6179 pointer for size of 17
65724C6F 6F745374
6F726167 6542505F
435F3
000 00000000 address ends here
88010004 365CBF5A another pointer size 4 (365CBF5A)
93000000 00000004 what does this do exactly ?
28000000 0000270F to replace 0000 with 9999

The code is mainly used to offset from a pointer search command. Can pretty much use it to search for some bytes and then offset backwards if needed.

9Y000000 XXXXXXXX

Y = Forward/Backward
2 = Forward
3 = Backward
X = Amount to Offset

Edit: Updated the main post to include Increase/Decrease Code, Pointer Manipulator, and Pointer Command 2.

Thanks, its very clear now. I have one question though, how did SW came up with all of this comands or is it used somewhere else?
I have some background in programming but I never came across something like this, is it close to machine language or something relative?

Save Wizard is the same developers behind Game Genie, which -to my knowledge- created the formats and set it up the way it is. Unfortunately they won't fully reveal all of the code formats so all of the ones out there have either been discovered by users or reverse engineered.

I got them all figured out now but I just want to ask you what is your way in finding pointers in the game save is there an easier way or is it only memory dump every time?
05-31-2019, 04:07 AM #25
Dynamite
Vault dweller
Originally posted by maqrashi View Post
Originally posted by Dynamite View Post
Originally posted by maqrashi View Post
Originally posted by Dynamite View Post
Originally posted by maqrashi View Post

Great tutorial Dynamite nothing like it allover the web . I have a question though you covered the byte value 1,2,8,A but what about 9 ?
I see some codes are using 9 as well as in here :

80010017 506C6179 pointer for size of 17
65724C6F 6F745374
6F726167 6542505F
435F3
000 00000000 address ends here
88010004 365CBF5A another pointer size 4 (365CBF5A)
93000000 00000004 what does this do exactly ?
28000000 0000270F to replace 0000 with 9999

The code is mainly used to offset from a pointer search command. Can pretty much use it to search for some bytes and then offset backwards if needed.

9Y000000 XXXXXXXX

Y = Forward/Backward
2 = Forward
3 = Backward
X = Amount to Offset

Edit: Updated the main post to include Increase/Decrease Code, Pointer Manipulator, and Pointer Command 2.

Thanks, its very clear now. I have one question though, how did SW came up with all of this comands or is it used somewhere else?
I have some background in programming but I never came across something like this, is it close to machine language or something relative?

Save Wizard is the same developers behind Game Genie, which -to my knowledge- created the formats and set it up the way it is. Unfortunately they won't fully reveal all of the code formats so all of the ones out there have either been discovered by users or reverse engineered.

I got them all figured out now but I just want to ask you what is your way in finding pointers in the game save is there an easier way or is it only memory dump every time?

It's just a matter of guessing and checking. Best way is to compare multiple saves and see which saves have a common group of bytes before the bytes you want edited.
05-31-2019, 04:21 AM #26
Do you have a better alternative for HxD as a software to compare saves, I see its quite limited.
06-14-2020, 12:57 PM #27
Veryan
Keeper
Originally posted by another user
9Y000000 XXXXXXXX

Y = Forward/Backward
2 = Forward
3 = Backward
5 = Set to offset
X = Amount to Offset
Last edited by Veryan ; 06-14-2020 at 12:59 PM.
07-28-2020, 03:05 AM #28
alghi
Rookie
thanks

Copyright © 2024, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo