From 064ca4c6267f5e60a0b32a1a4b3f41848797a4a9 Mon Sep 17 00:00:00 2001 From: Tim Allen Date: Fri, 12 Aug 2011 22:33:07 +1000 Subject: [PATCH] Update to v081 release. byuu says: This release polishes up the GUI, adds some more features, and fixes a few minor issues. Changelog (since v080): - rewrote S-DD1 module to decompress individual bytes at a time - simplified SPC7110 deinterleaving code - OBC1 should not clear RAM on reset [Jonas Quinn] - fixed enum-cast compilation errors with the latest GCC 4.6.x releases - added bsnes logo to about screen - make phoenix=gtk will now build the GTK+ port on Linux - added settings.startFullScreen to the config file for front-end users - added advanced settings option to disable window compositor (only works on Windows and Xfce) - merged settings windows into the panel approach used by bsnes/Qt in the past - fixed a crashing bug on input settings window - fixed GTK+ auto-geometry sizing - added screenshot capture capability - added exit emulator hotkey (defaults to being unmapped) - Xorg keyboard polling now uses cached Display variable [Bisqwit] - cheat code database updated [mightymo] --- bsnes/data/cheats.xml | 854 ++++++++++++++++++------------- bsnes/nall/bmp.hpp | 6 +- bsnes/ruby/input/sdl.cpp | 4 +- bsnes/ruby/input/x.cpp | 4 +- bsnes/ruby/input/xlibkeys.hpp | 13 +- bsnes/snes/chip/obc1/obc1.cpp | 2 - bsnes/snes/snes.hpp | 2 +- bsnes/ui-gameboy/main.cpp | 6 +- bsnes/ui/base.hpp | 1 + bsnes/ui/general/main-window.cpp | 21 +- bsnes/ui/general/main-window.hpp | 1 + bsnes/ui/input/hotkeys.cpp | 16 + bsnes/ui/input/hotkeys.hpp | 2 + bsnes/ui/interface.cpp | 16 + bsnes/ui/interface.hpp | 3 + bsnes/ui/path/path.cpp | 2 + bsnes/ui/path/path.hpp | 1 + bsnes/ui/settings/advanced.cpp | 4 +- bsnes/ui/settings/video.cpp | 2 +- snespurify/sync.sh | 1 + 20 files changed, 575 insertions(+), 386 deletions(-) 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*