diff --git a/bsnes/data/cheats.xml b/bsnes/data/cheats.xml
index d82bc1ed8..ff2092ad6 100755
--- a/bsnes/data/cheats.xml
+++ b/bsnes/data/cheats.xml
@@ -6198,6 +6198,14 @@
EE6E-1FF1
406E-1FB1
+
+ Hit anywhere - both players
+ 40C2-44B9
+ 40C2-4729
+ 40CC-4D99
+ 40CD-1DF9
+ 40CE-4429
+
Have Lots of Kills - P1
7E0C34FF
@@ -7787,6 +7795,13 @@
Infinite health - P2
7E089332
+
+ Hit anywhere (throws are disabled)
+ 6DF1-846D
+ 6DF9-74DF
+ 6DFA-7D0F
+ 95F9-740F
+
One hit kills - Both players
76F4-57DF
@@ -8941,6 +8956,10 @@
Infinite lives
3C8B-1D69
+
+ Hit anywhere
+ DD8F-CF60
+
One hit kills on normal enemies
CBBC-3F6B
@@ -9082,6 +9101,10 @@
DDA3-670F
40AE-6FAF
+
+ Unlock all characters in vs mode
+ 7E1EE710
+
Congo's Caper (USA)
@@ -9438,6 +9461,12 @@
One hit kills
B33A-67A4
+
+ Hit anywhere
+ 403D-64D4
+ 6D33-0464
+ 6D3D-6FA4
+
Cutthroat Island (USA)
@@ -14570,11 +14599,8 @@
8267-0D62
- Infinite use of items outside of battle except for the Whistle
+ Infinite items outside of battle
C3CE-6F09
-
-
- Infinite Whistles
C3C4-A4D0
@@ -14588,15 +14614,24 @@
C262-D763
- No random battles
- DDD6-B28B
+ 65,536+ GP after each battle
+ 3336-0FAE
- No random battles (alt)
- 1D60-0704
+ 65,000+ exp points after each battle
+ 7E3592FF
+ 7E359EFF
- automatically win battles (no EXP or gold gained)
+ Get 99 of items that you are given or find in a pot, treasure chest, ect
+ 17BF-D404
+
+
+ Get 99 arrows when you find them in a pot or treasure chest
+ 17B4-D4D4
+
+
+ Automatically win battles (no EXP or gold gained)
7E180102
7E180008
@@ -14624,47 +14659,28 @@
Gunslinger Code
00CE-6D69
+
+ No random battles
+ DDD6-B28B
+
+
+ No random battles (alt)
+ 1D60-0704
+
Save anywhere
CBBA-07A4
- Get at least 150 GP after each battle
- 1B35-0D6E
- B135-0DAE
- 3C35-0FDE
-
-
- Get at least 255 GP after each battle
- 3335-076E
-
-
- Get at least 65,536 GP after each battle
- 3336-0FAE
-
-
- Get 65,000+ exp points after each battle
- 7E3592FF
- 7E359EFF
-
-
- Get 99 of items that you are given or find in a pot, treasure chest, ect
- 17BF-D404
-
-
- Get 99 arrows when you find them in a pot or treasure chest
- 17B4-D4D4
-
-
- Item Cure2 is ultra strong
+ Cure2 is ultra strong
A6B7-A4E2
- Item Cure2 restores HP to all members in the party during battle
+ Cure2 restores HP to all members in the party during battle
0DB7-A482
- Item Cure2 restores all HP/MP during battle
+ Cure2 restores all HP/MP during battle
F1B7-A752
@@ -14693,17 +14709,17 @@
Character 1 - Max HP
+ 7E10470F
+ 7E104827
7E10490F
- 7E20890F
7E104A27
- 7E208A27
Character 1 - Max MP
- 7E104DE7
- 7E208DE7
- 7E104E03
- 7E208E03
+ 7E104B0F
+ 7E104C27
+ 7E104D0F
+ 7E104E27
Character 1 - Max Agility
@@ -14732,17 +14748,17 @@
Character 2 - Max HP
+ 7E10C70F
+ 7E10C827
7E10C90F
- 7E21890F
7E10CA27
- 7E218A27
Character 2 - Max MP
- 7E10CDE7
- 7E218DE7
- 7E10CE03
- 7E218E03
+ 7E10CB0F
+ 7E10CC27
+ 7E10CD0F
+ 7E10CE27
Character 2 - Max Agility
@@ -14771,17 +14787,17 @@
Character 3 - Max HP
+ 7E10070F
+ 7E100827
7E10090F
- 7E20090F
7E100A27
- 7E200A27
Character 3 - Max MP
- 7E100DE7
- 7E200DE7
- 7E100E03
- 7E200E03
+ 7E100B0F
+ 7E100C27
+ 7E100D0F
+ 7E100E27
Character 3 - Max Agility
@@ -14810,17 +14826,17 @@
Character 4 - Max HP
+ 7E11070F
+ 7E110827
7E11090F
- 7E20890F
7E110A27
- 7E208A27
Character 4 - Max MP
- 7E110DE7
- 7E208DE7
- 7E110E03
- 7E208D03
+ 7E110B0F
+ 7E110C27
+ 7E110D0F
+ 7E110E27
Character 4 - Max Agility
@@ -14849,17 +14865,17 @@
Character 5 - Max HP
+ 7E10870F
+ 7E108827
7E10890F
- 7E20890F
7E108A27
- 7E208A27
Character 5 - Max MP
- 7E108DE7
- 7E208DE7
- 7E108E03
- 7E208E03
+ 7E108B0F
+ 7E108C27
+ 7E108D0F
+ 7E108E27
Character 5 - Max Agility
@@ -14918,6 +14934,14 @@
Have 99 of slot 8
7E144F63
+
+ Have 99 of slot 9
+ 7E145163
+
+
+ Have 99 of slot 10
+ 7E145363
+
Have Cure3 in slot 1
7E1440D0
@@ -14946,23 +14970,20 @@
Have Spoon in slot 7
7E144C3E
+
+ Have Adamant Armor in slot 8
+ 7E144E9A
+
Final Fantasy II (USA)
- Almost infinite HP (can make big and sometimes normal monsters invincible, disable to defeat them)
- 82A3-6F63
+ Infinite HP
+ 03CAE6BD
- Infinite MP during battles, doesn't work on twin attacks
- 8267-0D62
-
-
- Infinite use of items outside of battle except for the Whistle
+ Infinite items outside of battle
C3CE-6F09
-
-
- Infinite Whistles
C3C4-A4D0
@@ -14980,15 +15001,24 @@
C3AD-AFA9
- No random battles
- DDD6-B28B
+ 65,536+ GP after each battle
+ 3335-0D6E
- No random battles (alt)
- 1D60-0704
+ 65,000+ exp points after each battle
+ 7E3592FF
+ 7E359EFF
- automatically win battles (no EXP or gold gained)
+ Get 99 of items that you are given or find in a pot, treasure chest, ect
+ 17BF-D404
+
+
+ Get 99 arrows when you find them in a pot or treasure chest
+ 17B4-D4D4
+
+
+ Automatically win battles (no EXP or gold gained)
7E180102
7E180008
@@ -15024,44 +15054,28 @@
Gunslinger Code
00CE-6D69
+
+ No random battles
+ DDD6-B28B
+
+
+ No random battles (alt)
+ 1D60-0704
+
Save anywhere
CBBA-07A4
- Get at least 150 GP after each battle
- 1B39-070E
- B139-076E
- 3C39-07AE
-
-
- Get at least 255 GP after each battle
- 1B39-070E
- EE39-076E
- 3C39-07AE
-
-
- Get at least 65,536 GP after each battle
- 3335-0D6E
-
-
- Get 99 of items that you are given or find in a pot, treasure chest, ect
- 17BF-D404
-
-
- Get 99 arrows when you find them in a pot or treasure chest
- 17B4-D4D4
-
-
- Item Cure2 is ultra strong
+ Cure2 is ultra strong
A6B7-A4E2
- Item Cure2 restores HP to all members in the party during battle
+ Cure2 restores HP to all members in the party during battle
0DB7-A482
- Item Cure2 restores all HP/MP during battle
+ Cure2 restores all HP/MP during battle
F1B7-A752
@@ -15088,24 +15102,19 @@
Lit1 spell hits every enemy
AFB5-DD83
-
- Get 65,000+ exp points after each battle
- 7E3592FF
- 7E359EFF
-
Character 1 - Max HP
+ 7E10470F
+ 7E104827
7E10490F
- 7E20890F
7E104A27
- 7E208A27
Character 1 - Max MP
- 7E104DE7
- 7E208DE7
- 7E104E03
- 7E208E03
+ 7E104B0F
+ 7E104C27
+ 7E104D0F
+ 7E104E27
Character 1 - Max Agility
@@ -15134,17 +15143,17 @@
Character 2 - Max HP
+ 7E10C70F
+ 7E10C827
7E10C90F
- 7E21890F
7E10CA27
- 7E218A27
Character 2 - Max MP
- 7E10CDE7
- 7E218DE7
- 7E10CE03
- 7E218E03
+ 7E10CB0F
+ 7E10CC27
+ 7E10CD0F
+ 7E10CE27
Character 2 - Max Agility
@@ -15173,17 +15182,17 @@
Character 3 - Max HP
+ 7E10070F
+ 7E100827
7E10090F
- 7E20090F
7E100A27
- 7E200A27
Character 3 - Max MP
- 7E100DE7
- 7E200DE7
- 7E100E03
- 7E200E03
+ 7E100B0F
+ 7E100C27
+ 7E100D0F
+ 7E100E27
Character 3 - Max Agility
@@ -15212,17 +15221,17 @@
Character 4 - Max HP
+ 7E11070F
+ 7E110827
7E11090F
- 7E20890F
7E110A27
- 7E208A27
Character 4 - Max MP
- 7E110DE7
- 7E208DE7
- 7E110E03
- 7E208D03
+ 7E110B0F
+ 7E110C27
+ 7E110D0F
+ 7E110E27
Character 4 - Max Agility
@@ -15251,17 +15260,17 @@
Character 5 - Max HP
+ 7E10870F
+ 7E108827
7E10890F
- 7E20890F
7E108A27
- 7E208A27
Character 5 - Max MP
- 7E108DE7
- 7E208DE7
- 7E108E03
- 7E208E03
+ 7E108B0F
+ 7E108C27
+ 7E108D0F
+ 7E108E27
Character 5 - Max Agility
@@ -15320,6 +15329,14 @@
Have 99 of slot 8
7E144F63
+
+ Have 99 of slot 9
+ 7E145163
+
+
+ Have 99 of slot 10
+ 7E145363
+
Have Cure3 in slot 1
7E1440D0
@@ -15348,9 +15365,17 @@
Have Spoon in slot 7
7E144C3E
+
+ Have Adamant Armor in slot 8
+ 7E144E9A
+
Final Fantasy III (USA) (Rev 1)
+
+ Almost max HP and MP
+ EEDB-EDA8
+
Activate Terra's Morph command
DAF2-9A58
@@ -15372,43 +15397,31 @@
Infinite item use
3CB8-5DAE
-
- Infinite item use (alt)
- 3CBC-576E
-
Protect from all status ailments
3513-5147
E613-5117
+
+ Learn all spells after one battle
+ 8D17-54A6
+
+
+ Earn 65,000+ exp points after each battle
+ 0793-54D8
+
+
+ Earn tons of EXP after a battle (level 99 takes two battles)
+ 0493-54D8
+
Auto cast Float, Regen, Haste, Shell, Safe and Rflect
3813-51C7
-
- Remove curse from Cursed Shield after only 1 battle
- DD1D-7D66
-
-
- Steal command always gets the more rare item an enemy has
- DD72-57AC
-
-
- Mog never stumbles when he dances
- DDFC-ED0B
-
Party has Sprint Shoes and Moogle Charm effect
AADC-EF08
-
- Party has Sprint Shoes and Moogle Charm effect (alt)
- AADC-EDA8
-
-
- Party has Sprint Shoes and Moogle Charm effect (alt 2)
- 7E11DF22
-
Party has Offering effect
FC47-570C
@@ -15423,26 +15436,26 @@
DD97-5FDA
DD90-EFDB
-
- Party has almost max HP and MP
- EEDB-EDA8
-
Offering gives character instant kill attacks
7EF4-8F0B
+
+ Remove curse from Cursed Shield after only 1 battle
+ DD1D-7D66
+
Enable all characters (once you are able to switch)
EEF2-BE88
EEF2-BEE8
- Learn all spells after one battle
- 8D17-54A6
+ Mog never stumbles when he dances
+ DDFC-ED0B
- Earn tons of EXP after a battle (level 99)
- 0493-54D8
+ Steal command always gets the more rare item an enemy has
+ DD72-57AC
Faster up/down movement on world map
@@ -15458,70 +15471,6 @@
Save anywhere
6DDD-BA56
-
- Save anywhere (alt)
- 7E020180
-
-
- Enemy 1 has 0 HP
- DD7E-2E7C
- DD7E-2E5C
-
-
- Enemy 2 has 0 HP
- DD7E-2E8C
- DD7E-2EEC
-
-
- Enemy 3 has 0 HP
- DD7D-FA78
- DD7D-FA58
-
-
- Enemy 4 has 0 HP
- DD7D-FA88
- DD7D-FAE8
-
-
- Enemy 5 has 0 HP
- DD7D-F278
- DD7D-F258
-
-
- Enemy 6 has 0 HP
- DD7D-F288
- DD7D-F2E8
-
-
- Enemy 1 has 0 HP (alt)
- 7E3BFC00
- 7E3BFD00
-
-
- Enemy 2 has 0 HP (alt)
- 7E3BFE00
- 7E3BFF00
-
-
- Enemy 3 has 0 HP (alt)
- 7E3C0000
- 7E3C0100
-
-
- Enemy 4 has 0 HP (alt)
- 7E3C0200
- 7E3C0300
-
-
- Enemy 5 has 0 HP (alt)
- 7E3C0400
- 7E3C0500
-
-
- Enemy 6 has 0 HP (alt)
- 7E3C0600
- 7E3C0700
-
Have 94 of all items when arrange is used
CB48-8462
@@ -15529,6 +15478,11 @@
CE44-E7A2
2347-ED62
+
+ Have 99 Sprint Shoes in slot 10
+ 7E1872E6
+ 7E197263
+
Have all Blitz's
EEF4-9378
@@ -15589,6 +15543,36 @@
EEF1-B3EC
EEF1-BE7C
+
+ Enemy 1 has 0 HP
+ DD7E-2E7C
+ DD7E-2E5C
+
+
+ Enemy 2 has 0 HP
+ DD7E-2E8C
+ DD7E-2EEC
+
+
+ Enemy 3 has 0 HP
+ DD7D-FA78
+ DD7D-FA58
+
+
+ Enemy 4 has 0 HP
+ DD7D-FA88
+ DD7D-FAE8
+
+
+ Enemy 5 has 0 HP
+ DD7D-F278
+ DD7D-F258
+
+
+ Enemy 6 has 0 HP
+ DD7D-F288
+ DD7D-F2E8
+
Celes - Level 99
7E16E663
@@ -16348,6 +16332,10 @@
Final Fantasy III (USA)
+
+ Almost max HP and MP
+ EEDB-EDA8
+
Activate Terra's Morph command
DAF2-9A58
@@ -16374,30 +16362,30 @@
3513-5147
E613-5117
+
+ Learn all spells after one battle
+ 8D17-54A6
+
+
+ Earn 65,000+ exp points after each battle
+ 0793-54D8
+
+
+ Earn tons of EXP after a battle (level 99 takes two battles)
+ 0493-54D8
+
Auto Cast Float, Regen, Haste, Shell, Safe and Rflect
3813-51C7
- Remove curse from Cursed Shield after only 1 battle
- DD1D-7D66
-
-
- Steal command always gets the more rare item an enemy has
- DD72-57AC
-
-
- Mog never stumbles when he dances
- DDFC-ED0B
+ Vigor/Speed/Stamina/MagPwr becomes 255
+ D762-EF68
Party has Sprint Shoes and Moogle Charm effect
44F2-9EE6
-
- Party has Sprint Shoes and Moogle Charm effect (alt)
- 7E11DF22
-
Party has Offering effect
FC47-570C
@@ -16412,30 +16400,21 @@
DD97-5FDA
DD90-EFDB
-
- Party has almost max HP and MP
- EEDB-EDA8
-
Offering gives character instant kill attacks
7EF4-8F0B
- Enable all characters (once you are able to switch)
- EEF2-BE88
- EEF2-BEE8
+ Mog never stumbles when he dances
+ DDFC-ED0B
- Vigor/Speed/Stamina/MagPwr becomes 255
- D762-EF68
+ Steal command always gets the more rare item an enemy has
+ DD72-57AC
- Learn all spells after one battle
- 8D17-54A6
-
-
- Earn tons of EXP after a battle (level 99)
- D493-54D8
+ Remove curse from Cursed Shield after only 1 battle
+ DD1D-7D66
Faster up/down movement on world map
@@ -16448,69 +16427,14 @@
3DF0-EC78
- Save anywhere
+ Enable all characters (once you are able to switch)
+ EEF2-BE88
+ EEF2-BEE8
+
+
+ Save anywhere (disable if shops sell the wrong items)
6DDD-BA56
-
- Enemy 1 has 0 HP
- DD7E-2E7C
- DD7E-2E5C
-
-
- Enemy 2 has 0 HP
- DD7E-2E8C
- DD7E-2EEC
-
-
- Enemy 3 has 0 HP
- DD7D-FA78
- DD7D-FA58
-
-
- Enemy 4 has 0 HP
- DD7D-FA88
- DD7D-FAE8
-
-
- Enemy 5 has 0 HP
- DD7D-F278
- DD7D-F258
-
-
- Enemy 6 has 0 HP
- DD7D-F288
- DD7D-F2E8
-
-
- Enemy 1 has 0 HP (alt)
- 7E3BFC00
- 7E3BFD00
-
-
- Enemy 2 has 0 HP (alt)
- 7E3BFE00
- 7E3BFF00
-
-
- Enemy 3 has 0 HP (alt)
- 7E3C0000
- 7E3C0100
-
-
- Enemy 4 has 0 HP (alt)
- 7E3C0200
- 7E3C0300
-
-
- Enemy 5 has 0 HP (alt)
- 7E3C0400
- 7E3C0500
-
-
- Enemy 6 has 0 HP (alt)
- 7E3C0600
- 7E3C0700
-
Have 94 of all items when arrange is used
CB48-8462
@@ -16518,6 +16442,11 @@
CE44-E7A2
2347-ED62
+
+ Have 99 Sprint Shoes in slot 10
+ 7E1872E6
+ 7E197263
+
Have all Blitz's
EEF4-9378
@@ -16578,6 +16507,36 @@
EEF1-B3EC
EEF1-BE7C
+
+ Enemy 1 has 0 HP
+ DD7E-2E7C
+ DD7E-2E5C
+
+
+ Enemy 2 has 0 HP
+ DD7E-2E8C
+ DD7E-2EEC
+
+
+ Enemy 3 has 0 HP
+ DD7D-FA78
+ DD7D-FA58
+
+
+ Enemy 4 has 0 HP
+ DD7D-FA88
+ DD7D-FAE8
+
+
+ Enemy 5 has 0 HP
+ DD7D-F278
+ DD7D-F258
+
+
+ Enemy 6 has 0 HP
+ DD7D-F288
+ DD7D-F2E8
+
Celes - Level 99
7E16E663
@@ -18351,6 +18310,28 @@
4D6C-D70D
+
+ Ghost Chaser Densei (Japan)
+
+ Invincibility
+ 2D83-14AD
+
+
+ Infinite health
+ 82A9-3D6F
+
+
+ Infinite time
+ C2A4-47D1
+
+
+ Hit anywhere
+ 3D87-CFA4
+ 7D87-C464
+ 7D87-C4A4
+ D487-C404
+
+
Ghoul Patrol (USA)
@@ -18553,6 +18534,10 @@
Infinite credits (alt)
00D230AD
+
+ Hit anywhere - both players
+ 4034-A704
+
Makes Earwig Scorpion (Stage 1 mayor) much easier to defeat
DFBB-A766
@@ -19358,6 +19343,11 @@
Home Improvement (USA)
+
+ Invincibility
+ 6D62-4B82
+ 6D69-1CEA
+
Infinite lives
CB69-1FDE
@@ -22573,6 +22563,13 @@
Killer Instinct (USA) (Rev 1)
+
+ Invincibility - P1
+ 3DBB-3F07
+ A7BB-3407
+ DDBB-3F67
+ EDBB-34D7
+
Infinite health - P1
7E0D2478
@@ -22593,6 +22590,14 @@
7E0D2800
7E0D2A00
+
+ Hit anywhere - P1
+ 0AB6-3D67
+ CAB6-3DA7
+ CFB6-3FD7
+ D2B6-3D07
+ EDB6-3DD7
+
CPU cannot move from starting position
7E0E0801
@@ -22608,6 +22613,13 @@
Master code - must be entered
3C61-D4DF
+
+ Invincibility - P1
+ 3DB6-3467
+ A7B6-3767
+ DDB6-34A7
+ EDB6-3707
+
Infinite health - P1
7E0D2478
@@ -22628,6 +22640,14 @@
7E0D2800
7E0D2A00
+
+ Hit anywhere - P1
+ 0AB5-3FA7
+ CFB5-3407
+ CFB5-34D7
+ D2B5-3F67
+ EDB5-3F07
+
CPU cannot move from starting position
7E0E0801
@@ -22839,7 +22859,7 @@
King of Dragons, The (USA)
- Invincibility
+ Invincibility - both players
ED76-E4AF
@@ -22851,7 +22871,7 @@
7E0CB4FF
- Infinite health
+ Infinite health - both players
C9B5-7FDD
@@ -22907,6 +22927,14 @@
4069-EF64
4069-E4D4
+
+ Hit anywhere
+ 6D61-8DA4
+ 6D64-87A4
+ 6D66-87A4
+ 6D6E-54D4
+ 6D6E-5D04
+
Start with level 6 Sword
6351-E40D
@@ -24398,6 +24426,14 @@
Get items from anywhere
402F-07B6
+
+ Sword can destroy solid objects in Overworld
+ 6D87-611E
+
+
+ Objects that you can pick up and throw never break away
+ FD37-6FF6
+
Always get Faerie at the Pond Of Happiness (as if you threw in 100 rupees)
7EF36A64
@@ -29863,9 +29899,8 @@
7E043209
- No health loss on collision with enemies
- C2BC-D7A5
- C280-D7DD
+ Infinite continues
+ 7E042D09
Infinite support health
@@ -29880,22 +29915,15 @@
No health loss when magic is used
C2B4-6FD9
+
+ No health loss on collision with enemies
+ C2BC-D7A5
+ C280-D7DD
+
No magic counter countdown
C2CC-0F67
-
- Slower magic counter countdown
- 5ECC-0D67
-
-
- Faster magic counter countdown
- EECC-0D67
-
-
- Have powered-up attack
- 7E068A06
-
Infinite Silver Keys
7E040F09
@@ -29908,6 +29936,10 @@
Infinite Platinum Keys
7E041109
+
+ Have powered-up attack
+ 7E068A06
+
Have optimum sword
7E040A06
@@ -29920,13 +29952,29 @@
Never lose shield
7E043502
+
+ Hit anywhere
+ 3C67-046A
+ C267-0FAA
+ D667-04DA
+ ED67-04AA
+ F167-040A
+
+
+ One hit kills
+ 6D63-D40A
+
Barrier Invincibility
7E06D6FF
- Infinite continues
- 7E042D09
+ Slower magic counter countdown
+ 5ECC-0D67
+
+
+ Faster magic counter countdown
+ EECC-0D67
Set score to 90,000,000
@@ -30126,6 +30174,17 @@
DB69-07A0
+
+ Majuu Ou (Japan)
+
+ Infinite health
+ 7E009F50
+
+
+ Infinite lives
+ 7E00A301
+
+
Mario Is Missing! (USA)
@@ -30720,6 +30779,13 @@
EC00-7598
+
+ Mega lo Mania (Europe) (En,Fr,De)
+
+ Infinite number of people to use
+ 7EE8D964
+
+
Mega Man 7 (USA)
@@ -31843,6 +31909,17 @@
C243-7707
+
+ Mohawk & Headphone Jack (USA)
+
+ Infinite health
+ 7E030803
+
+
+ Infinite lives
+ 7E030605
+
+
Monopoly (USA) (Rev 1)
@@ -36324,6 +36401,13 @@
17B5-ADD7
+
+ Parodius da! - Shinwa kara Owarai e (Japan)
+
+ Infinite lives
+ 7E009803
+
+
Peace Keepers, The (USA)
@@ -36664,6 +36748,13 @@
BECC-CD0F
+
+ Pinball Fantasies (USA)
+
+ Infinite balls
+ 7E00B803
+
+
Pink Goes to Hollywood (USA)
@@ -36692,6 +36783,17 @@
7E03DE03
+
+ Pinocchio (USA)
+
+ Infinite health
+ 7E03D850
+
+
+ Infinite lives
+ 7E03DE05
+
+
Pirates of Dark Water, The (USA)
@@ -37028,6 +37130,13 @@
7E19F205
+
+ Pop'n TwinBee - Rainbow Bell Adventures (Europe)
+
+ Infinite health
+ 7E02EC64
+
+
Populous (USA)
@@ -37501,6 +37610,17 @@
F7B7-D46E
+
+ Prince of Persia 2 - The Shadow & The Flame (USA)
+
+ Infinite health
+ 7E095703
+
+
+ Infinite time
+ 7E0B9869
+
+
Psycho Dream (Japan)
@@ -43603,6 +43723,13 @@
33CC-1FAF
33CF-4707
+
+ Hit anywhere
+ 6D39-4FA7
+ 6D3D-4767
+ DD30-47A7
+ DD30-4F67
+
Increase diagnol webbing with R button
33CA-1F6F
@@ -47814,13 +47941,17 @@
9980-44DD
- Allows you to drive anywhere
+ Drive anywhere
80FA9320
Drive through walls
4FEB-CDA4
+
+ Drive through opponents
+ 97A6-CDAD
+
Mud and other land doesn't effect driving
759DC8B4
@@ -54419,6 +54550,25 @@
1A6A-67D9
+
+ True Lies (USA)
+
+ Infinite hand gun shells
+ 7E00A50F
+
+
+ Infinite big gun shells
+ 7E00A973
+
+
+ Infinite Grenades on pick-up
+ 7E00AB03
+
+
+ Infinite lives
+ 7E1A5705
+
+
Tuff E Nuff (USA)
diff --git a/bsnes/nall/bmp.hpp b/bsnes/nall/bmp.hpp
index 6649a68d8..33cdf4dcf 100755
--- a/bsnes/nall/bmp.hpp
+++ b/bsnes/nall/bmp.hpp
@@ -11,7 +11,7 @@ namespace nall {
struct bmp {
inline static bool read(const string &filename, uint32_t *&data, unsigned &width, unsigned &height);
- inline static bool write(const string &filename, const uint32_t *data, unsigned width, unsigned height, bool alpha = false);
+ inline static bool write(const string &filename, const uint32_t *data, unsigned width, unsigned height, unsigned pitch, bool alpha = false);
};
bool bmp::read(const string &filename, uint32_t *&data, unsigned &width, unsigned &height) {
@@ -56,7 +56,7 @@ bool bmp::read(const string &filename, uint32_t *&data, unsigned &width, unsigne
return true;
}
-bool bmp::write(const string &filename, const uint32_t *data, unsigned width, unsigned height, bool alpha) {
+bool bmp::write(const string &filename, const uint32_t *data, unsigned width, unsigned height, unsigned pitch, bool alpha) {
file fp;
if(fp.open(filename, file::mode::write) == false) return false;
@@ -87,7 +87,7 @@ bool bmp::write(const string &filename, const uint32_t *data, unsigned width, un
fp.writel(0, 4); //important color count
for(unsigned y = 0; y < height; y++) {
- const uint32_t *p = data + y * width;
+ const uint32_t *p = (const uint32_t*)((const uint8_t*)data + y * pitch);
for(unsigned x = 0; x < width; x++) fp.writel(*p++, bytesPerPixel);
if(paddingLength) fp.writel(0, paddingLength);
}
diff --git a/bsnes/ruby/input/sdl.cpp b/bsnes/ruby/input/sdl.cpp
index 9986a0077..9a0db1042 100755
--- a/bsnes/ruby/input/sdl.cpp
+++ b/bsnes/ruby/input/sdl.cpp
@@ -97,7 +97,7 @@ struct pInputSDL {
//Keyboard
//========
- x_poll(table);
+ x_poll(device.display, table);
//=====
//Mouse
@@ -172,7 +172,6 @@ struct pInputSDL {
}
bool init() {
- x_init();
SDL_InitSubSystem(SDL_INIT_JOYSTICK);
SDL_JoystickEventState(SDL_IGNORE);
@@ -182,6 +181,7 @@ struct pInputSDL {
XGetWindowAttributes(device.display, device.rootwindow, &attributes);
device.screenwidth = attributes.width;
device.screenheight = attributes.height;
+ x_init(device.display);
//Xlib: "because XShowCursor(false) would be too easy."
//create a fully transparent cursor named InvisibleCursor,
diff --git a/bsnes/ruby/input/x.cpp b/bsnes/ruby/input/x.cpp
index fe1440a84..7a1f7f39b 100755
--- a/bsnes/ruby/input/x.cpp
+++ b/bsnes/ruby/input/x.cpp
@@ -30,13 +30,13 @@ public:
bool poll(int16_t *table) {
memset(table, 0, Scancode::Limit * sizeof(int16_t));
- x_poll(table);
+ x_poll(display, table);
return true;
}
bool init() {
- x_init();
display = XOpenDisplay(0);
+ x_init(display);
return true;
}
diff --git a/bsnes/ruby/input/xlibkeys.hpp b/bsnes/ruby/input/xlibkeys.hpp
index 770de16d2..70b70aaad 100755
--- a/bsnes/ruby/input/xlibkeys.hpp
+++ b/bsnes/ruby/input/xlibkeys.hpp
@@ -16,11 +16,11 @@ enum XScancode {
LeftShift, RightShift, LeftControl, RightControl, LeftAlt, RightAlt, LeftSuper, RightSuper,
};
-void x_poll(int16_t *table) {
+void x_poll(Display *display, int16_t *table) {
+ if(!display) return;
+
char state[32];
- Display *display = XOpenDisplay(0);
XQueryKeymap(display, state);
- XCloseDisplay(display);
#define key(id) table[keyboard(0)[id]]
#define pressed(id) (bool)(state[scancode[id] >> 3] & (1 << (scancode[id] & 7)))
@@ -139,8 +139,9 @@ void x_poll(int16_t *table) {
#undef pressed
}
-void x_init() {
- Display *display = XOpenDisplay(0);
+void x_init(Display *display) {
+ if(!display) return;
+
memset(&scancode, 0, sizeof scancode);
#define assign(x, y) scancode[x] = XKeysymToKeycode(display, y)
@@ -259,6 +260,4 @@ void x_init() {
assign(Menu, XK_Menu);
#undef assign
-
- XCloseDisplay(display);
}
diff --git a/bsnes/snes/chip/obc1/obc1.cpp b/bsnes/snes/chip/obc1/obc1.cpp
index 6f0da8c3f..6cfc11f33 100755
--- a/bsnes/snes/chip/obc1/obc1.cpp
+++ b/bsnes/snes/chip/obc1/obc1.cpp
@@ -20,8 +20,6 @@ void OBC1::power() {
}
void OBC1::reset() {
- for(unsigned i = 0x0000; i <= 0x1fff; i++) ram_write(i, 0xff);
-
status.baseptr = (ram_read(0x1ff5) & 1) ? 0x1800 : 0x1c00;
status.address = (ram_read(0x1ff6) & 0x7f);
status.shift = (ram_read(0x1ff6) & 3) << 1;
diff --git a/bsnes/snes/snes.hpp b/bsnes/snes/snes.hpp
index b7583104b..bf31da0f3 100755
--- a/bsnes/snes/snes.hpp
+++ b/bsnes/snes/snes.hpp
@@ -1,7 +1,7 @@
namespace SNES {
namespace Info {
static const char Name[] = "bsnes";
- static const char Version[] = "080.08";
+ static const char Version[] = "081";
static const unsigned SerializerVersion = 21;
}
}
diff --git a/bsnes/ui-gameboy/main.cpp b/bsnes/ui-gameboy/main.cpp
index 4cd18582b..0a43a0a59 100755
--- a/bsnes/ui-gameboy/main.cpp
+++ b/bsnes/ui-gameboy/main.cpp
@@ -34,7 +34,7 @@ void Application::main(int argc, char **argv) {
mainWindow.setVisible();
OS::processEvents();
- #if defined(PHOENIX_WINDOWS)
+ #if defined(PLATFORM_WIN)
video.driver("Direct3D");
#else
video.driver("OpenGL");
@@ -44,7 +44,7 @@ void Application::main(int argc, char **argv) {
video.set(Video::Filter, (unsigned)0);
video.init();
- #if defined(PHOENIX_WINDOWS)
+ #if defined(PLATFORM_WIN)
audio.driver("XAudio2");
#else
audio.driver("ALSA");
@@ -58,7 +58,7 @@ void Application::main(int argc, char **argv) {
audio.set(Audio::ResampleRatio, 4194304.0 / 44100.0);
audio.init();
- #if defined(PHOENIX_WINDOWS)
+ #if defined(PLATFORM_WIN)
input.driver("RawInput");
#else
input.driver("SDL");
diff --git a/bsnes/ui/base.hpp b/bsnes/ui/base.hpp
index 34208540d..e156ba91b 100755
--- a/bsnes/ui/base.hpp
+++ b/bsnes/ui/base.hpp
@@ -1,6 +1,7 @@
#include
#include
+#include
#include
#include
#include
diff --git a/bsnes/ui/general/main-window.cpp b/bsnes/ui/general/main-window.cpp
index bcb87d725..e0e8850dd 100755
--- a/bsnes/ui/general/main-window.cpp
+++ b/bsnes/ui/general/main-window.cpp
@@ -197,6 +197,9 @@ void MainWindow::create() {
tools.append(toolsSeparator1);
+ toolsCaptureScreenshot.setText("Capture Screenshot");
+ tools.append(toolsCaptureScreenshot);
+
toolsCheatEditor.setText("Cheat Editor ...");
tools.append(toolsCheatEditor);
@@ -345,6 +348,7 @@ void MainWindow::create() {
toolsStateLoad4.onTick = [] { utility.loadState(4); };
toolsStateLoad5.onTick = [] { utility.loadState(5); };
+ toolsCaptureScreenshot.onTick = [] { interface.captureScreenshot = true; };
toolsCheatEditor.onTick = [] { cheatEditor.setVisible(); };
toolsStateManager.onTick = [] { stateManager.setVisible(); };
@@ -364,17 +368,12 @@ void MainWindow::create() {
}
void MainWindow::synchronize() {
- if(SNES::cartridge.loaded() == false) {
- systemPower.setEnabled(false);
- systemReset.setEnabled(false);
- toolsStateSave.setEnabled(false);
- toolsStateLoad.setEnabled(false);
- } else {
- systemPower.setEnabled(true);
- systemReset.setEnabled(true);
- toolsStateSave.setEnabled(true);
- toolsStateLoad.setEnabled(true);
- }
+ bool loaded = SNES::cartridge.loaded();
+ systemPower.setEnabled(loaded);
+ systemReset.setEnabled(loaded);
+ toolsStateSave.setEnabled(loaded);
+ toolsStateLoad.setEnabled(loaded);
+ toolsCaptureScreenshot.setEnabled(loaded);
}
void MainWindow::setupFiltersAndShaders() {
diff --git a/bsnes/ui/general/main-window.hpp b/bsnes/ui/general/main-window.hpp
index 07f92c838..45cdfd2b1 100755
--- a/bsnes/ui/general/main-window.hpp
+++ b/bsnes/ui/general/main-window.hpp
@@ -72,6 +72,7 @@ struct MainWindow : TopLevelWindow {
Item toolsStateLoad4;
Item toolsStateLoad5;
Separator toolsSeparator1;
+ Item toolsCaptureScreenshot;
Item toolsCheatEditor;
Item toolsStateManager;
#if defined(DEBUGGER)
diff --git a/bsnes/ui/input/hotkeys.cpp b/bsnes/ui/input/hotkeys.cpp
index 007fc8782..98da6c3b9 100755
--- a/bsnes/ui/input/hotkeys.cpp
+++ b/bsnes/ui/input/hotkeys.cpp
@@ -27,6 +27,11 @@ void InputMapper::poll_hotkeys(unsigned scancode, int16_t value) {
utility.showMessage({ "Slot ", activeSlot, " selected" });
}
+ //capture screenshot
+ if(scancode == hotkeysGeneral.captureScreenshot.scancode) {
+ interface.captureScreenshot = true;
+ }
+
//fullscreen
if(scancode == hotkeysGeneral.fullscreenToggle.scancode) {
utility.setFullScreen(!utility.fullScreen);
@@ -66,6 +71,11 @@ void InputMapper::poll_hotkeys(unsigned scancode, int16_t value) {
if(scancode == hotkeysGeneral.reset.scancode) {
mainWindow.systemReset.onTick();
}
+
+ //exit emulator
+ if(scancode == hotkeysGeneral.exitEmulator.scancode) {
+ application.quit = true;
+ }
} else {
//key released
if(mainWindow.focused() == false) return;
@@ -88,34 +98,40 @@ void InputMapper::HotkeysGeneral::create(const char *deviceName, const char *con
stateLoad.name = "Load State";
stateDecrement.name = "Decrement State";
stateIncrement.name = "Increment State";
+ captureScreenshot.name = "Capture Screenshot";
fullscreenToggle.name = "Fullscreen";
mouseCaptureToggle.name = "Mouse Capture";
pauseToggle.name = "Pause Emulation";
fastForward.name = "Fast-Forward";
power.name = "Power Cycle";
reset.name = "Reset";
+ exitEmulator.name = "Exit Emulator";
append(&stateSave);
append(&stateLoad);
append(&stateDecrement);
append(&stateIncrement);
+ append(&captureScreenshot);
append(&fullscreenToggle);
append(&mouseCaptureToggle);
append(&pauseToggle);
append(&fastForward);
append(&power);
append(&reset);
+ append(&exitEmulator);
config.attach(stateSave.mapping = "KB0::F5", string("input.", configName, ".stateSave"));
config.attach(stateLoad.mapping = "KB0::F7", string("input.", configName, ".stateLoad"));
config.attach(stateDecrement.mapping = "KB0::F6", string("input.", configName, ".stateDecrement"));
config.attach(stateIncrement.mapping = "KB0::F8", string("input.", configName, ".stateIncrement"));
+ config.attach(captureScreenshot.mapping = "", string("input.", configName, ".captureScreenshot"));
config.attach(fullscreenToggle.mapping = "KB0::F11", string("input.", configName, ".fullscreenToggle"));
config.attach(mouseCaptureToggle.mapping = "KB0::F12", string("input.", configName, ".mouseCaptureToggle"));
config.attach(pauseToggle.mapping = "KB0::P", string("input.", configName, ".pauseToggle"));
config.attach(fastForward.mapping = "KB0::Tilde", string("input.", configName, ".fastForward"));
config.attach(power.mapping = "", string("input.", configName, ".power"));
config.attach(reset.mapping = "", string("input.", configName, ".reset"));
+ config.attach(exitEmulator.mapping = "", string("input.", configName, ".exitEmulator"));
}
void InputMapper::create_hotkeys() {
diff --git a/bsnes/ui/input/hotkeys.hpp b/bsnes/ui/input/hotkeys.hpp
index 269e19adf..a56151ee9 100755
--- a/bsnes/ui/input/hotkeys.hpp
+++ b/bsnes/ui/input/hotkeys.hpp
@@ -3,12 +3,14 @@ struct HotkeysGeneral : Controller {
DigitalInput stateLoad;
DigitalInput stateDecrement;
DigitalInput stateIncrement;
+ DigitalInput captureScreenshot;
DigitalInput fullscreenToggle;
DigitalInput mouseCaptureToggle;
DigitalInput pauseToggle;
DigitalInput fastForward;
DigitalInput power;
DigitalInput reset;
+ DigitalInput exitEmulator;
void create(const char *deviceName, const char *configName);
} hotkeysGeneral;
diff --git a/bsnes/ui/interface.cpp b/bsnes/ui/interface.cpp
index 502348830..23a8259bb 100755
--- a/bsnes/ui/interface.cpp
+++ b/bsnes/ui/interface.cpp
@@ -122,6 +122,18 @@ void Interface::video_refresh(const uint16_t *data, bool hires, bool interlace,
frameCounter = 0;
previous = current;
}
+
+ if(captureScreenshot) {
+ captureScreenshot = false;
+ time_t currentTime = time(0);
+ tm *info = localtime(¤tTime);
+ string filename = { "-",
+ decimal<4, '0'>(info->tm_year + 1900), "-", decimal<2, '0'>(info->tm_mon + 1), "-", decimal<2, '0'>(info->tm_mday), " ",
+ decimal<2, '0'>(info->tm_hour), ":", decimal<2, '0'>(info->tm_min), ":", decimal<2, '0'>(info->tm_sec), ".bmp"
+ };
+ bmp::write(path(utility.slotPath(), filename), buffer, outwidth, outheight, outpitch, false);
+ utility.showMessage("Screenshot captured");
+ }
}
void Interface::audio_sample(uint16_t left, uint16_t right) {
@@ -141,3 +153,7 @@ void Interface::message(const string &text) {
string Interface::path(SNES::Cartridge::Slot slot, const string &hint) {
return ::path.load(slot, hint);
}
+
+Interface::Interface() {
+ captureScreenshot = false;
+}
diff --git a/bsnes/ui/interface.hpp b/bsnes/ui/interface.hpp
index 4ce0b154f..aacf00685 100755
--- a/bsnes/ui/interface.hpp
+++ b/bsnes/ui/interface.hpp
@@ -21,6 +21,9 @@ struct Interface : public SNES::Interface {
void message(const string &text);
string path(SNES::Cartridge::Slot slot, const string &hint);
+ Interface();
+
+ bool captureScreenshot;
};
extern Palette palette;
diff --git a/bsnes/ui/path/path.cpp b/bsnes/ui/path/path.cpp
index 9799b4eae..4776c867e 100755
--- a/bsnes/ui/path/path.cpp
+++ b/bsnes/ui/path/path.cpp
@@ -69,6 +69,7 @@ string Path::load(SNES::Cartridge::Slot slot, const string &hint) {
if(hint.endswith(".bst") && bst != "") filePath = bst;
if(hint.endswith(".cht") && cht != "") filePath = cht;
if(hint.endswith(".log") && log != "") filePath = log;
+ if(hint.endswith(".bmp") && bmp != "") filePath = bmp;
filePath = decode(filePath, basePath);
return { filePath, baseName, hint };
@@ -168,4 +169,5 @@ Path::Path() {
attach(bst = "", "bst");
attach(cht = "", "cht");
attach(log = "", "log");
+ attach(bmp = "", "bmp");
}
diff --git a/bsnes/ui/path/path.hpp b/bsnes/ui/path/path.hpp
index 85940d548..003fd64e1 100755
--- a/bsnes/ui/path/path.hpp
+++ b/bsnes/ui/path/path.hpp
@@ -26,6 +26,7 @@ struct Path : public configuration {
string bst;
string cht;
string log;
+ string bmp;
string home(const string &filename);
string load(const string &path);
diff --git a/bsnes/ui/settings/advanced.cpp b/bsnes/ui/settings/advanced.cpp
index c1fe0fe34..a074f7d90 100755
--- a/bsnes/ui/settings/advanced.cpp
+++ b/bsnes/ui/settings/advanced.cpp
@@ -4,7 +4,7 @@ void AdvancedSettings::create() {
title.setText("Advanced Settings");
title.setFont(application.titleFont);
- driverSelectionLabel.setText("Driver Selection:");
+ driverSelectionLabel.setText("Driver selection:");
driverSelectionLabel.setFont(application.proportionalFontBold);
videoDriverLabel.setText("Video:");
audioDriverLabel.setText("Audio:");
@@ -18,7 +18,7 @@ void AdvancedSettings::create() {
if(config.settings.focusPolicy == 0) focusPolicyPause.setChecked();
if(config.settings.focusPolicy == 1) focusPolicyIgnore.setChecked();
if(config.settings.focusPolicy == 2) focusPolicyAllow.setChecked();
- compositorPolicyLabel.setText("Disable Compositor:");
+ compositorPolicyLabel.setText("Disable window compositor:");
compositorPolicyLabel.setFont(application.proportionalFontBold);
compositorPolicyNever.setText("Never");
compositorPolicyFullScreen.setText("Fullscreen");
diff --git a/bsnes/ui/settings/video.cpp b/bsnes/ui/settings/video.cpp
index b21b805f5..6824341c5 100755
--- a/bsnes/ui/settings/video.cpp
+++ b/bsnes/ui/settings/video.cpp
@@ -4,7 +4,7 @@ void VideoSettings::create() {
title.setText("Video Settings");
title.setFont(application.titleFont);
- colorAdjustmentLabel.setText("Color Adjustment:");
+ colorAdjustmentLabel.setText("Color adjustment:");
colorAdjustmentLabel.setFont(application.proportionalFontBold);
brightnessLabel.setText("Brightness:");
brightnessSlider.setLength(201);
diff --git a/snespurify/sync.sh b/snespurify/sync.sh
index 853434d27..288f98ad3 100755
--- a/snespurify/sync.sh
+++ b/snespurify/sync.sh
@@ -7,4 +7,5 @@ synchronize() {
synchronize "nall"
synchronize "phoenix"
+rm -r nall/test
rm -r phoenix/test*