* Renamed Mem Scanner Op Text&added Virtual Address
Renamed the Memory Scanner Operator Text for clarity. Replaced '...' with 'Value' and 'Previous' with 'Previous Result'.
Also changed "Any Value" to "Any Value ('New Search' or 'Reset Result Value')", Any Valur should really be at the top of the index and the Previous Results should come before the other Value operators. But that's a job for another time.
The Virtual Address extra will display the virtual address of DuckStation's PSX RAM so it can be easily edited with the likes of HXD or another tool where the location of the virtual memory needs to be known.
* Replaced Mem Scanner Op Text with latest English text
Not touched the translations, just added the updated english text for the Memory Scanner "Operator:" text
* Rearranged Memory Scanner Operator class
Re-arranged Memory Scanner Operator class into a more logical order - with likely frequency of use moving item up the list.
New Order:-
Better Order:-
Any Value ('New Search' or 'Reset Result Value') x Any.
Less Than Previous Result x LessThanLast,
Less or Equal to Previous Result x LessEqualLast,
Greater Than Previous Result x GreaterThanLast,
Greater or Equal to Previous Result x GreaterEqualLast,
Not Equal to Previous Result (Changed Value) x NotEqualLast,
Equal to Previous Result (Unchanged Value) x EqualLast,
Decreased By Value x DecreasedBy,
Increased By Value x IncreasedBy,
Changed By Value x ChangedBy,
Equal to Value x Equal,
Not Equal to Value x NotEqual,
Less Than Value x LessThan,
Less or Equal to Value x LessEqual,
Greater Than Value x GreaterThan,
Greater or Equal to Value x GreaterEqual
* Rearranged Memory Scanner Operator class
Changes operator order to:-
Any Value ('New Search' or 'Reset Result Value')
Less Than Previous Result
Less or Equal to Previous Result
Greater Than Previous Result
Greater or Equal to Previous Result
Not Equal to Previous Result (Changed Value)
Equal to Previous Result (Unchanged Value)
Decreased By Value
Increased By Value
Changed By Value
Equal to Value
Not Equal to Value
Less Than Value
Less or Equal to Value
Greater Than Value
Greater or Equal to Value
* Memory Scanner line references updates
Updated <location filename="../memoryscannerwindow.ui" line="???"/> line numbers for the Memory Scanner operation re-ordering.
These are currently the only 4 translation files that make reference to memoryscannerwindow.ui, the other 12 still reference cheatmanagerdialog.ui so not replicated for them as this would only partially fix them - so I left them alone as I hope there's some automated tools to handle it.
* Update src/duckstation-qt/memoryscannerwindow.cpp
Cheat Type F6 lets you perform cheats in IF / ELSE IF / ELSE constructs along
with multiple conditions for each one.
It supports conditions D0, D1, D2, D3, E0, E1, E2, E3, A0, A1, A2, A3, D7 and
two new types that will only be available in the F6 conditions :-
E4 & E5 which are bit comparisons on bytes (set and clear).
Any of those types which are "block conditionals" like D7 will be treated as a
single condition with the other conditions so you wont need to worry about
extra 00000000 FFFFs just for them (infact you can drop them completely apart
from the last 00000000 FFFF, which you can also drop if you have no trailing
cheat lines after the end of the construct.
#IF / ELSE IF / ELSE Statement Example with Notes
80001000 00000001 Setup Test Condition 1
80001004 00000002 Setup Test Condition 2
80001008 00000003 Setup Test Condition 3
8000100C 00000004 Setup Test Condition 4
1F = IF, last two digits determine the number of conditions to check
F600000x x = 0 All conditions must be true, x = 1 At least One condition must be true
F6000000 1F000004 Check the next 4 lines as the conditions for the IF loop to be taken
D0001000 00000001 )
D0001004 00000002 )Conditions
D0001008 00000003 )
D000100C 00000004 )
80001010 00005555 Poke(s)
00000000 0000FFFF End of IF Statement
F6000000 E15E1F02 E15E1F = ELSE IF (same format as IF) - Can have multiple ELSE IF Blocks or none at all
D0001008 00000003 )
D000100C 00000005 )Conditions
80001010 00008888 Poke(s)
00000000 0000FFFF End of ELSE IF Statement
F6000000 E15E0000 E15E = ELSE (no need for conditions - this will poke if the others dont)
80001010 0000AAAA Poke(s)
00000000 0000FFFF End of ELSE Statement
#Multiple Test Using Joypad Left Thumb Directions, Look at Address 1100 in Debugger
F6000000 1F000001
D7020002 00100000
90001100 50205055
90001104 53534552
90001108 20204445
9000110C 20202020
F6000000 E15E1F01
D7020002 00400000
90001100 4E574F44
90001104 45525020
90001108 44455353
9000110C 20202020
F6000000 E15E1F01
D7020002 00800000
90001100 5446454C
90001104 45525020
90001108 44455353
9000110C 20202020
F6000000 E15E1F01
D7020002 00200000
90001100 48474952
90001104 52502054
90001108 45535345
9000110C 20202044
F6000000 E15E0000
90001100 20202020
90001104 20202020
90001108 20202020
9000110C 20202020
00000000 0000FFFF
Chtdb.txt
=========
Updated the header to document all the new cheat types, added some more cheats
and cleaned up others.
New Cheat Types:-
=================
F5 - 16-Bit toggle cheat, predominatly used with the D7 cheat to enable/disable
ASM cheats with the same key presses. See chtdb.txt for more information.
52 - Register Block Conditionals for use with the type 51 cheats. There are 128
sub types. See chtdb.txt for more information.
53 - Improved Slide Code cheat type, with support for 65536 addresses and a 16
bit step and easily configurable step direction for value and address.
See chtdb.txt for more information.
Other Changes:-
===============
51 - Cleaned up - renumbered/renamed, Tested & Bugfixed. See chtdb.txt for more
information.
C3-C7 are variants of C0
D7 is a BIT based joker to rule them all. It includes the analog sticks (@ggrtk thanks for adding the analog reading capability). Also added the facility of making dual single key joker by varying the amount of time a button is held down.
51 is a complicated beast that I still need to document
* C3XXXXXX 00YY - 8-Bit Master Code, if ($XXXXXX) is less than 0xYY poke all
00000000 FFFF following codes for rest of the cheat or until it reaches the
00000000 FFFF line.
* C4XXXXXX 00YY - 8-Bit Master Code, if ($XXXXXX) is greater than 0xYY poke all
00000000 FFFF following codes for rest of the cheat or until it reaches the
00000000 FFFF line.
* C5XXXXXX YYYY - 16-Bit Master Code, if ($XXXXXX) is less than 0xYYYY poke all
00000000 FFFF following codes for rest of the cheat or until it reaches the
00000000 FFFF line.
* C6XXXXXX YYYY - 16-Bit Master Code, if ($XXXXXX) is greater than 0xYYYY poke all
00000000 FFFF following codes for rest of the cheat or until it reaches the
00000000 FFFF line.
* D7PQRRRR TTYYYYYY - 24-Bit Universal BIT Joker, OR the hex values to
combine into a multi-button joker. Because it is BIT
based it is better than D4, D5, D6 or using a D0 joker as you
do not need to worry about any other buttons being
pressed at the same time and you get both analog
sticks for extra functionality. Note if you want to use it
just as a enhanced joker just use D7000000 00YYYYYY when
the buttons/directions are pressed or D7100000 00YYYYYY
when you want to ensure they are not all pressed.
QRRRR TT provides the capability of only activating the
following codes after the keys have been held in for a set
amount of frames. 003C = 60 Frames = 1 Second at 100% Speed
YYYYYY = 000001 L2 Button
YYYYYY = 000002 R2 Button
YYYYYY = 000004 L1 Button
YYYYYY = 000008 R1 Button
YYYYYY = 000010 Triangle Button
YYYYYY = 000020 Circle Button
YYYYYY = 000040 X Button
YYYYYY = 000080 Square Button
YYYYYY = 000100 Select Button
YYYYYY = 000200 L3 Button
YYYYYY = 000400 R3 Button
YYYYYY = 000800 Start Button
YYYYYY = 001000 Up (Digital)
YYYYYY = 002000 Right (Digital)
YYYYYY = 004000 Down (Digital)
YYYYYY = 008000 Left (Digital)
YYYYYY = 010000 Up (Right Thumb)
YYYYYY = 020000 Right (Right Thumb)
YYYYYY = 040000 Down (Right Thumb)
YYYYYY = 080000 Left (Right Thumb)
YYYYYY = 100000 Up (Left Thumb)
YYYYYY = 200000 Right (Left Thumb)
YYYYYY = 400000 Down (Left Thumb)
YYYYYY = 800000 Left (Left Thumb)
NOTE: The 0s in the code are reserved for possible
future use.
TT=Temp Internal Variable 00-FF, 00 will mean it wont be
used, if it's not 00 do not use the same value for
jokers using different keypress combinations for
the same game.
P = 0 or 1. 0 = Check ALL YYYYYY Bits are ON
1 = Check ALL YYYYYY Bits are OFF
Q = Frame Comparison 0 = Dont do any comparison
1 = Check that the button combination
has been held down for exactly
RRRR frames.
2 = Check that the button combination
has been held down for more than
RRRR frames.
3 = Check that the button combination
has been held down for less than
RRRR frames.
4 = Check that the button combination
has been held down for anything
but RRRR frames.
RRRR = 0000 to FFFF, Frame Comparison Value
It will then poke all following codes for rest of cheat
00000000 FFFF or until it reaches the 00000000 FFFF line.
* Add new Cheat Type F4, Find & Replace Bytes
Also knows as 'AOB' apparently. Information about how it works will be in the next chtdb.txt header or you can read/ask about it on the discord channel.
* Add new Cheat Type F4, Find & Replace Bytes
Also knows as 'AOB' apparently. Information about how it works will be in the next chtdb.txt header or you can read/ask about it on the discord channel.
* Added error trapping for cheat type F4
As suggested