MAME' Secrets


MAME has a pair of things that can be useful and they weren't in arcades. First, it's possible to prepare a button that avoids to push several buttons at once. That can be very useful in some games (Airwolf, Double Dragon, TMNT,...), but the main one is that you can cheat ;) . To be able to play with infinite lives, infinite energy (or what it is happened to you) and to get to see the end of all the games that you could not finish when they were in the recreational ones is something very practical. Although with MAME the games are free, sometimes you can't continue and when you can, does not let to you do it every time you want. Infinite lives (or infinite energy, it depends on the game) avoids all that. ;)


A) Keyboard tricks
You can use these tricks to make special moves that you have to push two or more keys at once (TMNT, Vendetta, Final Fight) without complications, and to avoid surprises when you press the keys and they don't make the move -generally this happens when you need it XDDD- . Anoter reason is the commodity, it's more practical to use a key for diagonal shoots, than to have to use both hands (one with the cursors and the other with the shoot button). And you can find some fighting games with special moves activated (for example: Vampire Savior) or bars filled (for example: KOF 98) when you press several buttons at once.

Unfortunately this trick doesn't work in olympic games (Track and Field, Hyper Sports) :( and you can't make fatalities and other moves of fighting games (Mortal Kombat II, Mortal Kombat III,...) :( .

1) Use several keys for the same button
- Enter in 'Input (this game)'
- Go to any button, for example 'P1 Button 1'.
- Press ENTER and press any key. (that deletes all the keys that button has)
- Don't select another button. Press ENTER and press another key.
(You'll see Key OR Key, Example: X OR V OR B)
- You can repeat this all times you want.

If for any reason you want to have the default keys, do this:
- Go to the button you want to undo the changes.
- Press ENTER.
- Press ESC.

2) Prepare a key to push several buttons at once:
First you must know how to set several keys for a button.
This can be used for lots of things, for example:
- Strong hits (2 keys at once): Samurai Shodown
- Special hits (2 keys at once): TMNT 1 & 2, Final Fight, Vendetta,...
- Special hits (3 keys at once): Vendetta,...
- Jump and shoot simultaneously (2 keys at once): Toki, Robocop,...
- Activate / deactivate Dark Force (2 keys at once): Vampire Savior 1 & 2
- To blow with the elbow (2 keys at once): Double Dragon
- To shoot diagonally (3 keys at once): Toki, Gauntlet, Robocop,...
- To pass bonus stages with no problems (4 keys at once): Mortal Kombat
And many more combinations than you know... ;)

3) Examples
1) Make a Dark Force in Vampire Savior:
- Enter in 'Input (This Game)'
- Go to 'P1 Button 3'
- Press ENTER and press the key it has (the default key is space).
- Press ENTER and press another key (por example: 'V').
(After this ==> P1 Button 3: Space or V)
- Go to 'P1 Button 6'
- Press ENTER and press the key it has (the default key is 'X').
- Press ENTER and press the 2nd key you have set for 'P1 Button 3' (the 'V' key).
(After this ==> P1 Button 6: X or V)

When you press 'V', the 'Dark Force' activates (if 'special' bar isn't at 0).
There are more ways to make the 'Dark Force' (the review of that game isn't available at the moment).


2) Diagonal shoots (up-right) in Toki:
- Enter in 'Input (This Game)'
- Go to 'P1 Button 1'
- Press ENTER and press the key it has (the default key is Ctrl).
- Press ENTER and press another key (por example: 'D').
(After this ==> P1 Button 1: Ctrl or D)
- Vete a 'P1 Up'
- Press ENTER and press the key it has (the default key is Up Arrow).
- Press ENTER and press the 2nd key you have set for 'P1 Button 1' (the 'D' key).
(After this ==> P1 Up: Up Arrow or D)
- Vete a 'P1 Right'
- Press ENTER and press the key it has (the default key is Right Arrow).
- Press ENTER and press the 2nd key you have set for 'P1 Button 1' (the 'D' key).
(After this ==> P1 Right: Right Arrow or D)

When you press the 'D' key the monkey will shoot in that direction, that's more mucho más practical than to use a hand for the arrows and the other for the shoot XD .
You can use this trick against monsters of levels 1 and 2.


B) Cheating (Infinite lives and those things) ;)
This is very simple. All is worth with so ensuring the victory ;) , and it doen't mind if to obtain it you hav to stop time, avoid losing energy whenever the enemy sticks a kick or hits with the fists to you (in fighting games), to empty the enemy's energy bar in order to win to him of a single blow, skip several levels, empezar un partido de fútbol ganando por 10-0 , to have unlimited ammunition (grenades, bullets or anything else),...

Before beginning, check that you have the file CHEAT.DAT. It must be in the same directory of MAME32.EXE (or MAME.EXE , it depends on the emulator used). If you haven't that file, download it.

1) How to start MAME to look for new cheats
1.1) Using MAME32
In order to show the option ' Cheat' when you are playing the games of MAME, first you must do this:
- Choose OPTIONS -> DEFAULT OPTIONS in menus.
- Enter in 'Miscellaneous' and put one [x] to 'Enable game cheats' (when doing this, appears to you the 'Cheat' menu when you are playing and press the TAB key).

1.2) Usando MAME para DOS
- Start with -cheat option. Ej: mame ghouls -cheat
- Another way is to edit MAME.CFG with a text editor and to put at the end of the file: CHEAT=1

2) The CHEAT.DAT file
This file has all the cheats of MAME games. To see Este fichero tiene todos los trucos de los juegos del MAME. In order to see what there is in that file (occupies several megas), you can use any text editor who allows to see big files (you cannot use EDIT.COM of MSDOS nor the notepad).

In that file the comments start with a semicolon (';') , for example: ;[ Super Zaxxon ]. The other lines are the cheats.
The lines of the cheats are several fields separated by colons (':'). Las lineas de los trucos son varios campos separados por el carácter ':' . They always go in this order, although the last one is not necessary.
- Name of the game: Name of the zip file (for example: kof98, mk, dkong,...)
- Number of CPU: Normally, it's 0, it can be another number in games with several CPU.
- Memory Address (in hexadecimal): Where to poke (the place where you cheat).
- Data (in hexadecimal): What to poke (you modify the value in the memory address with this).
- Special: It serves to indicate if the trick is going to be activated constantly, if a value can be chosen... Is a number between 000 and 999. Normally one puts 000 or 001.
- Description of the cheat: This is what you see when you use 'Enable/Disable Cheat'. 29 characters max.
- Extra Description: It doesn't appear when you use 'Enable/Disable Cheat'. You don't need to put it. 1024 characters max.

Values of 'Special':
 Código Qué hace
000The byte (= memory address) is poked (= value changed) every time and the cheat remains in active list. This code is used principally to get infinite lives, infinite time,...
001The byte is poked once and the cheat is removed from active list. (it shows 'Set' instead of 'On/Off' in cheats' list). This code is used to change enemy's energy in fighting games, set time to zero,... ;)
002The byte is poked every one second and the cheat remains in active list.
003The byte is poked every two second and the cheat remains in active list.
004The byte is poked every five second and the cheat remains in active list.
005The byte is poked one second after the original value has changed and the cheat remains in active list.
006The byte is poked two second after the original value has changed and the cheat remains in active list.
007The byte is poked five second after the original value has changed and the cheat remains in active list.
008The byte is poked unless the original value in being decremented by 1 each frame and the cheat remains in active list. (This is used to get infinite time in Pitfall II)
009The byte is poked unless the original value in being decremented by 2 each frame and the cheat remains in active list.
010The byte is poked unless the original value in being decremented by 3 each frame and the cheat remains in active list.
011The byte is poked unless the original value in being decremented by 4 each frame and the cheat remains in active list.
020The bits are set (they are set to 1) every time and the cheat remains in active list. Ej: Airwolf (it is used to activate invincibility)
021The bits are set (they are set to 1) once and the cheat is removed from active list.
022The bits are set (they are set to 1) every second and the cheat remains in active list.
023The bits are set (they are set to 1) every 2 seconds and the cheat remains in active list.
024The bits are set (they are set to 1) every 5 seconds and the cheat remains in active list.
040The bits are reset (they are set to 0) every time and the cheat remains in active list.
041The bits are reset (they are set to 0) once and the cheat is removed from active list. Ej: Airwolf (it is used to deactivate invincibility)
042The bits are reset (they are set to 0) every second and the cheat remains in active list.
043The bits are reset (they are set to 0) every 2 seconds and the cheat remains in active list.
044The bits are reset (they are set to 0) every 5 seconds and the cheat remains in active list.
060The user selects a decimal value from 0 to byte (display : 0 to byte) - the value is poked once when it changes and the cheat is removed from the active list.
061The user selects a decimal value from 0 to byte (display : 1 to byte+1) - the value is poked once when it changes and the cheat is removed from the active list.
062The user selects a decimal value from 1 to byte (display : 1 to byte) - the value is poked once when it changes and the cheat is removed from the active list.
063The user selects a BCD value from 0 to byte (display : 0 to byte) - the value is poked once when it changes and the cheat is removed from the active list.
064The user selects a BCD value from 0 to byte (display : 1 to byte+1) - the value is poked once when it changes and the cheat is removed from the active list.
065The user selects a BCD value from 1 to byte (display : 1 to byte) - the value is poked once when it changes and the cheat is removed from the active list.
070The user selects a decimal value from 0 to byte (display : 0 to byte) - the value is poked once and the cheat is removed from the active list.
071The user selects a decimal value from 0 to byte (display : 1 to byte+1) - the value is poked once and the cheat is removed from the active list.
072The user selects a decimal value from 1 to byte (display : 1 to byte) - the value is poked once and the cheat is removed from the active list.
073The user selects a BCD value from 0 to byte (display : 0 to byte) - the value is poked once and the cheat is removed from the active list.
074The user selects a BCD value from 0 to byte (display : 1 to byte+1) - the value is poked once and the cheat is removed from the active list.
075The user selects a BCD value from 1 to byte (display : 1 to byte) - the value is poked once and the cheat is removed from the active list.
100Constantly pokes the value to the selected CPU's ROM region, adjusting for endian issues.
101Pokes the value to the selected CPU's ROM region, adjusting for endian issues, and the cheat is removed from the active list.
102Constantly pokes the value to the selected CPU's ROM region.
103Pokes the value to the selected CPU's ROM region and the cheat is removed from the active list.
110pokes the value to the memory mapped to the memory handler, adjusting for endian issues.
111Pokes the value to the memory mapped to the memory handler, adjusting for endian issues, and the cheat is removed from the active list.
112Pokes the value to the memory mapped to the memory handler.
113Pokes the value to the memory mapped to the memory handler, and the cheat is removed from the active list.
500
-
613
These cheat types are identical to types 000 to 113 except they are used in linked cheats (i.e. of 1/8 type). The first cheat in the link list will be the normal type (eg type 000) and the remaining cheats (eg 2/8...8/8) will be of this type (eg type 500). The cheat engine treats it all as one!.
998This is used as a watch cheat (displays the walue stored in a memory address), ideal for showing answers in quiz games ('Trivial Pursuit',...).
999It's a comment. Normally surrounded by square brackets.

Ejemplos:
pitfall2:0:C461:3B:000:Infinite Time:Seconds
pitfall2:0:C462:05:500:Infinite Time (2/2):Minutes
airwolf:0:E122:01:020:Invincible "ON"
airwolf:0:E122:01:041:Invincible "OFF"
bssoccer:0:200E14:09:060:PL1 Select Number of Goals
bublbobl:0:E64B:63:061:Select Next Nevel
wc90:0:80B1:99:073:PL1 Select Number of Goals
uccops:0:000E3E7F:0A:000:PL3 Infinite lives

3) Find new cheats
When you have loaded a game, the first thing you have to do is to enter in 'Cheat' menu, choose 'Options' and to check that 'Auto Save Cheats' is set to ON.
Para empezar a buscar nuevos trucos, se usa la opción 'Start a new cheat search', pero como no tendrás la suerte de encontrar lo que buscas a la primera, tendrás que continuar la busqueda usando 'Continue Search'.
- If you have used 'Lives (or another value)', go to that option and change the number (or leave it unmodified) and press ENTER.
- If you have used 'Energy (greater or less)', go to that option and indicate if energy is greater, less, equal,... . To continue the search, press ENTER.
- If you have used 'Timers (+/- some value)', go to that option and indicate how much secons have passed from the last time. To continue the search, press ENTER.
- If you have used other options ('Flags' and 'Slow but sure ...'), you will have to indicate if the value has changed or not.
After doing that, exit from menu, wait a short space of time (a few seconds) and try again.
If you're lucky, you'll see this on the screen: '1 result found, added to list'. If you have the 'Auto Save Cheats' option activated (set to 'ON'), the cheat will be saved in CHEAT.DAT .
You can undo last search using the option 'Restore previous results' (this is useful if you see '0 results found').

If you see that after several tries, MAME always shows '2 results found' or another small number, you can do this:
- Enter in 'View Last Results', write the memory addresses (the first number of every row) and test them.
- Do the test setting '000' for the special field.
- Type those cheats at the beginning or at the end of CHEAT.DAT, to find them with no problems if they don't work and you have to delete them.

Ejemplo:
opwolf:0:00C01C:18:000:Number of soldiers?

3.1) Infinite energy
- Si estás buscando la energia infinita y aparece como una barra (por ej: KOF 2001, Mortal Kombat II, Operation Wolf, Street Fighter II,...), usa la opción 'Energy (greater or less)', al elegir esa opción te mostrará 'Saved all memory regions'.
- Si usa números (por ej: Gauntlet II, Spiderman, Captain America and the Avengers,...), puedes usar la opción 'Timers (+/- some value)' o 'Energy (greater or less)'. Puede que la vida use dos bytes (depende del juego), es mejor empezar a buscar cuando la vida (health) es 255 o menos.
Si puede tener más de 255 de vida, el otro byte será el anterior o el siguiente (ver ejemplo).
Examples:
spidey:0:20A040:FF:000:PL1 Infinite Energy
spidey:0:20A041:01:500:PL1 Infinite Energy 2/2
kof2001:0:108239:66:000:PL1 Infinite Energy
kof2001:0:108439:66:000:PL2 Infinite Energy

3.2) Enemy's energy
If you're trying to guess how much energy the enemy has, you must know thet energy can use one byte (for example: Undercover Cops) or two (for example: Cadillacs and Dinosaurs).
The strategy you must use is:
- Start a new search using 'Energy (greater or less)' when the enemy appears.
- Hit the enemy.
- Pause the game and continue the search using 'Energy (greater or less)', the value you must choose is 'Less'.
- Continue playing.
- When you hit it, pause the game, continue the search.
- If you see '0 results found' is because enemy's energy uses two bytes. That time you must use 'Greater'; after that, continue using 'Less' until you find few results. (if you're lucky, you'll see '1 result found, added to list' ;) ).

Examples:
dino:0:FFDA00:00:001:Kill Hogg with 1 hit now!
dino:0:FFDA01:01:501:Kill Hogg with 1 hit now! (2/2)
uccops:0:E073E:05:001:Kill Dr Crayborn with 1 hit now!

3.3) Infinite time
A) It displays 'TIME: seconds' (example: KOF 2001)
Start to search when last digit is '9' and use the option 'Timers (+/- some value)'. Continue the search 'cada vez que pase un segundo'. The value you must use in that option is '-1'. To make it easier, pause the game while you search :) .
After several tries, several things can happen (you can see it when you use 'View Last Results') Despues de varios intentos te puede pasar esto (lo puedes ver cuando usas 'View Last Results'):
- The time uses a byte. To indicate there are 10 seconds left, in the memory address has '10'(hex). Example: Street Fighter II
- The time uses a byte. To indicate there are 10 seconds left, in the memory address has '0A'(hex). Example: Street Fighter Alpha
- The time uses two bytes, one for each digit. To indicate there are 95 seconds left, in a memory address it has '09'(hex) y in the other it has '05' (hex).
- The time uses two bytes. This happens you can have more than 255 seconds. Start searching when time is 255 or less. Example: Toki

Example:
kof2001:0:10A702:60:000:Infinite Time

B) It displays 'TIME: minutes:seconds' (example: Ghosts'n Goblins)
Start to search when last digit is '9' and use the option 'Timers (+/- some value)'. Continue the search 'cada vez que pase un segundo'. The value you must use in that option is '-1'. To make it easier, pause the game while you search :) .
After several tries, several things can happen (you can see it when you use 'View Last Results') - Time uses a byte (the memory has the number of seconds, although it's displayed in minutes:seconds). Example: Ghosts'n Goblins
- Time uses two bytes (one for the minutes and another for the seconds). Example: Football Champ
- Time uses three bytes (one for the minutes and two for the seconds). Example: Run and Gun

Example:
rungun:0:601319:03:000:Infinite Time
rungun:0:60131A:05:500:Infinite Time (2/3)
rungun:0:60131B:09:500:Infinite Time (3/3)

C) It displays 'TIME: seconds:hundredths of second' (example: Rygar)
- These are easy, one byte for the seconds and another for the hundredths of second.

3.4) Infinite lives and similar things
You can use this to find infinite lives, potions, goals, number of enemies left,...
You can use 'Lives (or another value)', 'Energy (greater or less)' o 'Timers (+/- some value)'.
Search while the number of lives, goals is 9 or less. When you have 10 goals, potions,..., it can happen this:
- The number or lives, potions, goals,..., uses a byte. To indicate that player has scored 10 goals, in the memory address has '10'(hex). Example: World Cup 90.
- The number or lives, potions, goals,..., uses a byte. To indicate that player has 10 potions, in the memory address has '0A'(hex). Example: Golden Axe II.
- The number or lives, potions, goals,..., uses two bytes. To indicate that player has 120 points, in the memory address has '01'(hex) and '20'(hex). Example: Run And Gun (points).
- The number or lives, potions, goals,..., uses two bytes, one for each digit. Example: Dream Soccer 94 (goals).
- The number or lives, potions, goals,..., uses two bytes. (The maximum value is 'FF'(hex) in both bytes).

Examples:
rungun:0:601280:01:000:Set Team 1 Points to 120
rungun:0:601281:20:500:Set Team 1 Points to 120 (2/2)
ga2:0:20B43C:32:000:PL1 Infinite potions

3.4) Other
If you don't know how the game knows if you have an object or not (for example: the axe -in Wonder Boy-), the best thing you can do is to test with the other options: 'Flags' y 'Slow but sure (changed or not)', but you can need several hours to find anything. :(
When you continue the search you have to indicate if there are changes or not.

4) Display memory
This can be used to avoid inserting cheats that don't work in CHEAT.DAT.

4.1) Option 'View Last Results'
If you use the option 'View Last Results', you can see the memory addresses found after doing a search.
The first line indicates which block of memory adresses you're watching.
The other are the memory addresses that 'sirven' inside that block. The hexadecimal numbers that appear in brackets mean this (from left to right):
- Number that there was in memory when you started a new search.
- Number that there was in memory after last search. (last time you used 'Continue Search').
- Number that there is in memory now. (If the game is not paused, this number can change).

Example:
00101C16 (1D 1B 0A): In memory address '00101C16' (hex), the first time you searched there was '1D'(hex), the last time you searched ther was '1B'(hex) and there is '0A'(hex) now. (If you look at the image, that's the time left).

But all this is lost when you start a new search. A way not to lose is using PrintScreen key (or Alt-PrintScreen if you are not playing with full screen) and to paste the image in Paint or another program (you can't use the F12 key because it doesn't show the menus).

4.2) Opción 'Configure Watchpoints'
Another way is to use the option 'Configure Watchpoints' (inside 'Cheat' menu).
All the options that appear show this the first time you enter: '0:000000 (0)'. The first number (the one which is before the colon (':') is the number of CPU, the next one (it's between the colon and the round brackets) is the memory address and, finally, the number in brackets is the length).
Choose one of them (for example, the first one) and press ENTER. A menu appears:
- Address: Memory address you are going to display. Insert an hexadecimal number.
- CPU: CPU number. Usually leave it to 0.
- Length: How much bytes are going to be displayed. If it's set to 0, the address' value won´t be displayed. If it's set to 1, you'll see the value in that address. If it's set to 1, you'll see the value in that address and the next one...
- Element Size: Size (in bits). Default value is 8. It can be 8, 16 or 32 bits. (8 bits = 1 byte)
- Label type: Shows or hides a label. If you choose '(None)', it doesn't displays any label. If you choose 'Address', it shows the memory address (in hexadecimal). And if you choose 'String' it shows a text.
- Display Type: Como muestra lo que hay en memoria. Hay varias formas: Hexadecimal (por defecto), decimal, binario o ASCII.
- Text Label: Text displayed on screen if 'Label Type' is set to 'String'.
- X, Y: You can use these to choose where the label and the value will appear. To display it at the top-left corner of screen, X and Y must be set to 0.
- Skip bytes: With this option you can skip bytes. It's useless if 'Length' is set to 1. If you aren't sure, set it to 0.
- Elements per line: How much items (blocks of bytes) will be displayed in a line. If it's set to 0, it shows all the bytes in a line.
- Add Value, Address Shift, Data Shift, XOR: New options that appear in MAME32 v 0.62. (At the moment I haven't tested them).


Tip: You can use those options ('View Last Results' and 'Configure Watchpoints') at once. You can use 'Configure Watchpoints' to see all you have found (and to check if it works after several games) and to use 'View Last Results' to find more cheats. :)

5) Modify cheats
This serves to avoid that anyone can notice you have been playing with infinite lives, infinite time,... when you capture the screen with F12. ;)
Si usas la opción 'Add / Edit a cheat', you can see how MAME shows the cheats.
Of all those options, the only one that interest to you is 'Data'. Go to that option and change the number.
If you are not sure of which you are doing, check that you have deactivated the option 'Auto Save Cheats' (set to 'OFF'), to avoid surprises (for example: The game hangs,...), 'por si te cargas algo' .

-mike_myers-



  


(C) 2003, Marcianitos.
 Prohibited the total or partial reproduction without express permission of the holder of the rights even mentioning the origin.