infoprint, FDS moviefix, alignment bugfixing
[fceu.git] / Documentation / cheat.txt
CommitLineData
c62d2810 1FCE Ultra Cheat Guide
2 version .4
3---------------------------
4
5Table of Contents:
6
7 1: Introduction
8 1.0) Introduction
9 1.1) Cheat Files
10
11 2: The Windows Interface
12 2.0) The Main Cheat Window
13 2.1) The Add Cheat Window
14 2.1.1) The Cheat Search Interface
15
16 3: The DOS/Linux Interface - UNFINISHED(read "The Windows Interface" for now)
17 3.0) The Main Cheat Menu
18 3.0.1) The Cheat List
19 3.1) The Add Cheat Menu
20 3.1.1) The Cheat Search Interface
21
22 4: Finding Cheats
23 4.0) "Mega Man 3" Windows Example
24 4.1) "Over Horizon" DOS/Linux Example
25 4.2) Hints
26
27/******** Section 1.0: */
28
29 FCE Ultra allows cheating by the periodic "patching" of arbitrary addresses
30 in the 6502's memory space with arbitrary values. Currently, only RAM
31 patching is allowed(trying to patch an address where ROM is will silently
32 fail).
33
34 The patches are all applied a short time before the emulated
35 vertical blanking period. This detail shouldn't concern most people, though.
36 However, this does mean that cheating with games that use
37 bank-switched RAM may be problematic. Fortunately, such games are not very
38 common(in relation to the total number of NES and Famicom games).
39
40/******** Section 1.1: */
41
42 Cheats are stored in the "cheats" subdirectory under the base FCE Ultra
43 directory. The files are in a simple plain-text format. Each line represents
44 a one-byte memory patch. The format is:
45
46 Address(hex):Value(hex):Description
47
48 Example:
49
50 040e:05:Infinite super power.
51
52 A colon(:) can be prefixed to the beginning of a line to disable that cheat.
53
54
55/******** Section 2.0 */
56
57 All addresses listed in the Cheats and Add Cheat windows are in a
58 16-bit hexadecimal format and all values in these windows are in an
59 unsigned 8-bit decimal format(the range for values is 0 through 255).
60
61
62 The main Cheats window contains the list of cheats for the currently
63 loaded game, places to view and edit the attributes of the selected cheat,
64 a button to delete the selected cheat, a button to open the Add Cheat
65 window, and a button to close the Cheats window.
66
67/******** Section 2.1 */
68
69 To the left in the Add Cheat window are text edit boxes for inputting
70 attributes of a cheat and a button to add that cheat. To the right is
71 the cheat searching interface.
72
73 /******* Section 2.1.1 */
74
75 The cheat search interface consists of several components: a list of
76 addresses and associated data for a search, several command buttons,
77 and the search paramters.
78
79 The list of addresses is in the format of:
80 "Address:Original Value:Current Value".
81
82 The address is the location in the 6502's address space, the original
83 value is the value that was stored at this address when the search was
84 reset, and the current value is the value that is currently stored at
85 that address. Selecting an item in this list will automatically cause
86 the "Address" field in the "Add Cheat" box to be updated with the
87 selected address.
88
89 The "Reset Search" button resets the search process; all valid addresses
90 are displayed in the cheat list and the data values at those addresses noted.
91
92 The "Do Search" buttons performs a search based on the search parameters
93 and removes any non-matching addresses from the address list.
94
95 The "Set Original to Current" button sets the remembered original values
96 to the current values. It is like the "Reset Search" button, but it does
97 not affect which addresses are shown in the address list. This command is
98 especially useful when used in conjunction with the "O!=C" search filter.
99
100 The "Unhide Excluded" button shows all addresses that are excluded as a
101 result of any previous searches. It is like the "Reset Search" button
102 except that it does not affect the remembered original values.
103
104 The numbers assigned the names "V1" and "V2" have different meanings based
105 on which filter is selected. A list of the names of the filters and detailed
106 information on what they do follows("original value" corresponds to the value
107 remembered for a given addres and "current value" is the value currently
108 at that address. Also, if a value is not explicitly said to be shown
109 under a certain condition, then it is obviously excluded.):
110
111 "O==V1 && C==V2":
112 Show the address if the original value is equal to "V1" AND
113 the current value is equal to "V2".
114
115 "O==V1 && |O-C|==V2":
116 Show the address if the original value is equal to "V1" AND
117 the difference between the current value and the original
118 value is equal to "V2".
119
120 "|O-C|==V2":
121 Show the address if the difference between the current value
122 and the original value is equal to "V2".
123 "O!=C":
124 Show the address if the original value does not equal the
125 current value.
126
127
128/******** Section 4.0 */
129
130 This example will give Mega Man unlimited energy.
131 Immediately after entering the Top Man stage, make your way to the
132 "Add Cheat" window. Push "Reset Search".
133 Go back to playing and move right until the first enemy appears. Allow
134 yourself to be hit twice. Each hit does "2" damage, so you've lost 4 energy
135 bars. Go to the "Add Cheat" window again and select the third filter
136 ("|O-C|==V2") and enter the value 4 next to "V2". Then push "Do Search".
137
138 Several addresses will appear in the address list. You can try to find
139 the address you want through trial and error, or you can narrow the results
140 down further. We will do the latter.
141
142 Go back to playing MM3 and get hit one more time and make your way back
143 to the "Add Cheat" window. Your damage is now "6". You can probably
144 see which address that contains your life(it is 00A2). If now, change
145 V2 to 6 and push "Do Search" again. This should leave only 00A2.
146
147 Select that entry in the address list. Shift your attention to the "Add
148 Cheat" box to the left. Type in a meaningful name and the desired value(156;
149 it was the value when you had no damage, so it's safe to assume it's the
150 maximum value you can use). Push the "Add" button and a confirmation box
151 will come up. The cheat has been added.
152
153
154/******** Section 4.1 */
155
156 This example will give you infinite lives in the NTSC(Japanese) version
157 of "Over Horizon".
158
159 Start a new game. Notice that when you press "Start" during gameplay,
160 the number of lives you have left is indicated. With no cheating, you
161 start with 3 lives(2 lives left).
162
163 Activate the cheat interface immediately after starting a new game.
164 Select the "New Cheats" menu and "Reset Search".
165
166 I'll assume that the number of lives left shown in the game is the same number
167 that's stored in RAM. Now, "Do Search". You're going to use the first search
168 filter. For V1, enter the value 2. For V2, enter the same value. This,
169 coupled with the fact that you just reset the search, will allow you to search
170 for a value "absolutely"(as opposed to changes in the value).
171
172 Now, "Show Results". When I did it, I received 11 results:
173
174 1) $0000:002:002
175 2) $001c:002:002
176 3) $001e:002:002
177 4) $009d:002:002
178 5) $00b9:002:002
179 6) $00e3:002:002
180 7) $0405:002:002
181 8) $0406:002:002
182 9) $0695:002:002
183 10) $07d5:002:002
184 11) $07f8:002:002
185
186 You really can't do much yet(unless you want to spend time doing trial
187 and error cheat additions). Return to the game.
188
189 After losing a life, go back to the cheat interface, to the "New Cheats"
190 menu, and "Show Results". Here are my results:
191
192 1) $0000:002:002
193 2) $001c:002:002
194 3) $001e:002:002
195 4) $009d:002:002
196 5) $00b9:002:041
197 6) $00e3:002:002
198 7) $0405:002:001
199 8) $0406:002:002
200 9) $0695:002:002
201 10) $07d5:002:001
202 11) $07f8:002:002
203
204 Notice that two addresses seem to hold the number of lives($0405 and
205 $07d5). You can lose another life and go "Show Results" again, and you
206 should see that $07d5 is the address that holds the number of lives.
207
208 Now that you know the address that holds the number of lives, you can
209 add a cheat. You can either type in the number from the cheat results list
210 corresponding to the address you want to add a cheat for, or you can
211 remember the address and select "Add Cheat" from the "New Cheats" menu.
212 Do the former.
213
214 Now you will need to enter a name for the cheat. I suggest something short,
215 but descriptive. "Infinite lives" will work fine. Next, a prompt for
216 the address will show up. Since you selected an item from the list, you
217 can press enter to use the associated address($07d5). Next, you will
218 need to enter a value. It doesn't need to be large(in fact, it probably
219 shouldn't be; abnormally high numbers can cause some games to misbehave).
220 I suggest a value of 2. After this, you should get a prompt that looks like
221 this:
222
223 Add cheat "Infinite lives" for address $07d5 with value 002?(Y/N)[N]:
224
225 Answer "Y". You now have infinite lives.
226
227/******** Section 4.2 */
228
229 Games store player information in many different ways. For example,
230 if you have "3" lives in Super Wacky Dodgeball 1989, the game might store
231 it in memory as 2, 3, or 4, or perhaps a different number all together.
232 Also, say that you have 69 life points out of 200 in Mole Mashers. The
233 game might store how many life points you have, or how much damage you have
234 taken. Relative value searches are very valuable because you probably
235 don't know the way that the game stores its player data.
236
237 Some games, especially RPGs, deal with individual numbers greater than
238 8-bits in size. Most that I've seen seem to store the multiple-byte data
239 least significant byte(lower byte of number) first in memory, though
240 conceivably, it could be stored most significant byte first, or the component
241 bytes of the number could be non-contiguous, though the latter is very unlikely.
242 For example, say I have 5304 experience points in Boring Quest for the
243 Overused Plot Device. To split the number into two eight bit decimal numbers,
244 take 5304 %(modulus) 256. This will give a number that is the lower 8 bits.
245 Next, take 5304 / 256. The integral component of your answer will be the
246 upper 8 bits(or the next 8 bits, if the number is or can be larger than 16
247 bits) of 5304. Now you will need to search for these numbers. Fortunately,
248 most(all?) RPGs seem to store large numbers exactly as they are shown in the
249 game.