switched high score checksum calculations to md5

added high score properties for a few more games
updated docs
This commit is contained in:
thrust26 2020-12-04 13:20:13 +01:00
parent 18d2dc5321
commit b990bf2f68
11 changed files with 162 additions and 182 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -2294,9 +2294,9 @@
<p>This dialog can be opened by pressing 'Insert' any time while a game is
played. It will provide the current variation and score and allow the user
to add this as a new high score. Of course this makes most sense when a game
is over.
The dialog items are explained in the following two tables.</p>
is over. Note: In multiplayer games, only the score of the first player can be
saved.</p>
<p>The dialog items are explained in the following two tables.</p>
<table border="1" cellpadding="4">
<tr><th>Item</th><th>Description</th></tr>
@ -2325,7 +2325,6 @@
</td></tr>
<tr><td>Cancel</td><td>Closes the dialog without saving.</td></tr>
</table>
<p>For details how to configure high scores definintions for a game see
<a href="#HighScoreProps"><b>High Scores Properties</b></a></h2>.</p>
</blockquote></br>
@ -4851,59 +4850,64 @@ Ms Pac-Man (Stella extended codes):
<h3>Classic games</h3>
<ul>
<li>Asteroids (Atari)</li>
<li>Atlantis (Imagic)</li>
<li>Barnstorming (Activision)</li>
<li>Beamrider (Activision)</li>
<li>Berzerk (Atari)</li>
<li>Breakout (Atari)</li>
<li>Centipede (Atari)</li>
<li>Chopper Comand (Activision)</li>
<li>Circus Atari (Atari)</li>
<li>Cosmic Ark (Imagic)</li>
<li>Decathlon (Activision)</li>
<li>Demon Attack (Imagic)</li>
<li>Defender 2/Stargate (Atari)</li>
<li>Dig Dug (Atari)</li>
<li>Donkey Kong (Coleco)</li>
<li>Dragster (Activision)</li>
<li>Enduro (Activision)</li>
<li>Frogger (Parker Bros)</li>
<li>Frostbite (Activision)</li>
<li>Galaxian (Atari)</li>
<li>Grand Prix (Activision)</li>
<li>H.E.R.O. (Activision)</li>
<li>Jr. Pac-Man (Atari)</li>
<li>Jungle Hunt (Atari)</li>
<li>Kaboom! (Activision)</li>
<li>Keystone Kapers (Activision)</li>
<li>Mario Bros. (Atari)</li>
<li>MegaMania (Activision)</li>
<li>Millipede (Atari)</li>
<li>Missile Command (Atari)</li>
<li>Moon Patrol (Atari)</li>
<li>Ms. Pac-Man (Atari)</li>
<li>Phoenix (Atari)</li>
<li>Pitfall! (Activision)</li>
<li>Pitfall II (Activision)</li>
<li>Q-Bert (Atari)</li>
<li>Seaquest (Activision)</li>
<li>Sky Jinks (Activision)</li>
<li>Space Invaders (Atari)</li>
<li>StarMaster (Activision)</li>
<li>Super Breakout (Atari)</li>
<li>Vanguard (Atari)</li>
<li>Yars' Revenge (Atari)</li>
<li>Asteroids (Atari)</li>
<li>Atlantis (Imagic)</li>
<li>Barnstorming (Activision)</li>
<li>Beamrider (Activision)</li>
<li>Berzerk (Atari)</li>
<li>Breakout (Atari)</li>
<li>Centipede (Atari)</li>
<li>Chopper Comand (Activision)</li>
<li>Circus Atari (Atari)</li>
<li>Cosmic Ark (Imagic)</li>
<li>Decathlon (Activision)</li>
<li>Defender 2/Stargate (Atari)</li>
<li>Demon Attack (Imagic)</li>
<li>Dig Dug (Atari)</li>
<li>Donkey Kong (Coleco)</li>
<li>Dragster (Activision)</li>
<li>Enduro (Activision)</li>
<li>Frogger (Parker Bros)</li>
<li>Frostbite (Activision)</li>
<li>Galaxian (Atari)</li>
<li>Grand Prix (Activision)</li>
<li>H.E.R.O. (Activision)</li>
<li>Jr. Pac-Man (Atari)</li>
<li>Jungle Hunt (Atari)</li>
<li>Kaboom! (Activision)</li>
<li>Keystone Kapers (Activision)</li>
<li>Mario Bros. (Atari)</li>
<li>MegaMania (Activision)</li>
<li>Millipede (Atari)</li>
<li>Missile Command (Atari)</li>
<li>Moon Patrol (Atari)</li>
<li>Ms. Pac-Man (Atari)</li>
<li>Phoenix (Atari)</li>
<li>Pitfall! (Activision)</li>
<li>Pitfall II (Activision)</li>
<li>Q-Bert (Atari)</li>
<li>Seaquest (Activision)</li>
<li>Sky Jinks (Activision)</li>
<li>Solaris (Atari)</li>
<li>Space Invaders (Atari)</li>
<li>Star Wars - The Empire Strikes Back (Parker Bros)</li>
<li>StarMaster (Activision)</li>
<li>Super Breakout (Atari)</li>
<li>Vanguard (Atari)</li>
<li>Yars' Revenge (Atari)</li>
</ul>
<h3>Homebrews</h3>
<ul>
<li>Draconian (SpiceWare, Darrell Spice Jr.)</li>
<li>Lady Bug (ChampGames, John W. Champeau)</li>
<li>Oystron (Piero Cavina)</li>
<li>Seawolf (Manuel Rotschkar)</li>
<li>Stay Frosty 2 (SpiceWare, Darrell Spice Jr.)</li>
<li>SWOOPS! (Thomas Jentzsch)</li>
<li>Ultra SCSIcide (Joe Grand)</li>
<li>Conquest of Mars (ChampGames, John W. Champeau)</li>
<li>Draconian (SpiceWare, Darrell Spice Jr.)</li>
<li>Lady Bug (ChampGames, John W. Champeau)</li>
<li>Oystron (Piero Cavina)</li>
<li>Qb (Andrew Davie)</li>
<li>Seawolf (Manuel Rotschkar)</li>
<li>Star Fire (Manuel Rotschkar)</li>
<li>Stay Frosty 2 (SpiceWare, Darrell Spice Jr.)</li>
<li>SWOOPS! (Thomas Jentzsch)</li>
<li>Ultra SCSIcide (Joe Grand)</li>
</ul>
<p>Everyone is more than welcome to help us to fill the gaps by defining more
games.</p>

View File

@ -49,6 +49,7 @@
#include "Console.hxx"
#include "Launcher.hxx"
#include "Base.hxx"
#include "MD5.hxx"
#include "HighScoresManager.hxx"
@ -130,7 +131,6 @@ bool HighScoresManager::get(const Properties& props, uInt32& numVariationsR,
numVariationsR = numVariations(jprops);
//info.armRAM = armRAM(jprops);
info.numDigits = numDigits(jprops);
info.trailingZeroes = trailingZeroes(jprops);
info.scoreBCD = scoreBCD(jprops);
@ -196,9 +196,6 @@ void HighScoresManager::set(Properties& props, uInt32 numVariations,
if(!info.notes.empty())
jprops[NOTES] = info.notes;
//if(info.armRAM != DEFAULT_ARM_RAM)
// jprops[""] = info.armRAM;
props.set(PropType::Cart_Highscore, jprops.dump());
}
@ -262,12 +259,6 @@ const string HighScoresManager::notes(const json& jprops) const
return getPropStr(jprops, NOTES);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/*bool HighScoresManager::armRAM(const json& jprops) const
{
return getPropStr(jprops, ARM_RAM);
}*/
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt16 HighScoresManager::varAddress(const json& jprops) const
{
@ -406,64 +397,26 @@ const string HighScoresManager::formattedScore(Int32 score, Int32 width) const
return buf.str();
}
void HighScoresManager::addCheckByte(uInt32& sum, uInt16& r, uInt8 value) const
{
constexpr uInt16 C1 = 52845, C2 = 22719;
uInt8 cipher = (value ^ (r >> 8));
r = (cipher + r) * C1 + C2;
sum += cipher;
}
void HighScoresManager::addCheckWord(uInt32& sum, uInt16& r, uInt16 value) const
{
addCheckByte(sum, r, value >> 8);
addCheckByte(sum, r, value & 0xff);
}
string HighScoresManager::checkSumProps() const
string HighScoresManager::md5Props() const
{
json jprops;
properties(jprops);
ostringstream buf;
uInt32 sum = 0;
uInt16 r = 55665;
addCheckWord(sum, r, varAddress(jprops));
addCheckByte(sum, r, numVariations());
//addCheckByte(sum, r, variation());
addCheckByte(sum, r, varBCD(jprops));
addCheckByte(sum, r, varZeroBased(jprops));
buf << varAddress(jprops) << numVariations() << varBCD(jprops)
<< varZeroBased(jprops);
uInt32 addrBytes = numAddrBytes(jprops);
HSM::ScoreAddresses addr = getPropScoreAddr(jprops);
for(uInt32 a = 0; a < addrBytes; ++a)
addCheckWord(sum, r, addr[a]);
addCheckByte(sum, r, numDigits(jprops));
addCheckByte(sum, r, trailingZeroes(jprops));
addCheckByte(sum, r, scoreBCD(jprops));
addCheckWord(sum, r, scoreInvert(jprops));
buf << addr[a];
buf << numDigits(jprops) << trailingZeroes(jprops) << scoreBCD(jprops)
<< scoreInvert(jprops) << specialAddress(jprops) << specialBCD(jprops)
<< specialZeroBased(jprops);
addCheckWord(sum, r, specialAddress(jprops));
addCheckByte(sum, r, specialBCD(jprops));
addCheckByte(sum, r, specialZeroBased(jprops));
buf << specialAddress(jprops) << specialBCD(jprops) << specialZeroBased(jprops);
ostringstream ss;
ss << Base::HEX4 << (sum & 0xffff ^ (sum >> 16) ^ r);
return ss.str();
}
string HighScoresManager::checkSumScores(const string& data) const
{
uInt32 sum = 0;
uInt16 r = 55665;
for(auto& c : data)
addCheckByte(sum, r, c);
ostringstream ss;
ss << Base::HEX4 << (sum & 0xffff ^ (sum >> 16) ^ r);
return ss.str();
return MD5::hash(buf.str());
}
bool HighScoresManager::scoreInvert() const
@ -511,7 +464,8 @@ const string HighScoresManager::notes() const
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Int32 HighScoresManager::convert(Int32 val, uInt32 maxVal, bool isBCD, bool zeroBased) const
{
maxVal += zeroBased ? 0 : 1;
//maxVal += zeroBased ? 0 : 1;
maxVal -= zeroBased ? 1 : 0;
Int32 bits = isBCD
? ceil(log(maxVal) / log(10) * 4)
: ceil(log(maxVal) / log(2));
@ -680,15 +634,13 @@ void HighScoresManager::loadHighScores(const string& cartName, ScoresData& data)
<< data.variation << ".";
else
{
if(load(hsData, data))
if(!load(hsData, data)
|| !hsData.contains(PROPCHECK) || hsData.at(PROPCHECK) != md5Props()
|| !hsObject.contains(CHECKSUM) || hsObject.at(CHECKSUM) != MD5::hash(hsData.dump()))
invalid = true;
else
return;
invalid = true;
}
if(!hsData.contains(PROPCHECK)
|| hsData.at(PROPCHECK) != checkSumProps()
|| !hsObject.contains(CHECKSUM)
|| hsObject.at(CHECKSUM) != checkSumScores(hsData.dump()))
invalid = true;
}
else
invalid = true;
@ -729,10 +681,10 @@ bool HighScoresManager::save(FilesystemNode& node, const ScoresData& data) const
jScores.push_back(jScore);
}
hsData[SCORES] = jScores;
hsData[PROPCHECK] = checkSumProps();
hsData[PROPCHECK] = md5Props();
hsObject[DATA] = hsData;
hsObject[CHECKSUM] = checkSumScores(hsData.dump());
hsObject[CHECKSUM] = MD5::hash(hsData.dump());
stringstream ss(hsObject.dump());
node.write(ss);

View File

@ -29,7 +29,7 @@ class OSystem;
using json = nlohmann::json;
/**
This class provides an interface to all things related to high myScores.
This class provides an interface to all things related to high scores.
@author Thomas Jentzsch
*/
@ -62,7 +62,6 @@ namespace HSM {
bool specialBCD;
bool specialZeroBased;
string notes;
//bool armRAM;
// Addresses
ScoreAddresses scoreAddr;
uInt16 varsAddr;
@ -84,7 +83,7 @@ namespace HSM {
} // namespace HSM
/**
This class provides an interface to define, load and save myScores. It is meant
This class provides an interface to define, load and save scores. It is meant
for games which do not support saving highscores.
@author Thomas Jentzsch
@ -145,10 +144,8 @@ class HighScoresManager
Int32 special() const;
const string notes() const;
// Get simple property definition checksum
string checkSumProps() const;
// Get simple highscores data checksum
string checkSumScores(const string& data) const;
// Get md5 property definition checksum
string md5Props() const;
// Peek into memory
Int16 peek(uInt16 addr) const;
@ -175,7 +172,6 @@ class HighScoresManager
static constexpr uInt32 MAX_VARIATIONS = 256;
static constexpr uInt32 MAX_TRAILING = 3;
static constexpr bool DEFAULT_ARM_RAM = false;
static constexpr uInt32 DEFAULT_DIGITS = 4;
static constexpr uInt32 DEFAULT_TRAILING = 0;
static constexpr bool DEFAULT_SCORE_BCD = true;
@ -215,7 +211,6 @@ class HighScoresManager
bool specialBCD(const json& jprops) const;
bool specialZeroBased(const json& jprops) const;
const string notes(const json& jprops) const;
//bool armRAM(const json& jprops) const;
// Calculate the number of bytes for one player's score from property parameters
uInt32 numAddrBytes(const json& jprops) const;
@ -238,12 +233,8 @@ class HighScoresManager
uInt16 fromHexStr(const string& addr) const;
Int32 fromBCD(uInt8 bcd) const;
// Add new value to checksum
void addCheckByte(uInt32& sum, uInt16& r, uInt8 value) const;
void addCheckWord(uInt32& sum, uInt16& r, uInt16 value) const;
/**
Saves the current high myScores for this game and variation to the given file system node.
Saves the current high scores for this game and variation to the given file system node.
@param node The file system node to save to.
@param scores The saved high score data
@ -253,7 +244,7 @@ class HighScoresManager
bool save(FilesystemNode& node, const HSM::ScoresData& scores) const;
/**
Loads the current high myScores for this game and variation from the given JSON object.
Loads the current high scores for this game and variation from the given JSON object.
@param hsData The JSON to parse
@param scores The loaded high score data

View File

@ -173,7 +173,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "0acaf71e60b89f6b6eab63db6ab84510", "", "", "This Planet Sucks (Greg Troutman) [a2]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "0aceb7c3bd13fe048b77a1928ed4267d", "Imagic, Bob Smith", "720102-2B, IA3201P, EIX-011-04I", "Star Voyager (1982) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "0ad9a358e361256b94f3fb4f2fa5a3b1", "Atari, Carol Shaw, Nick 'Sandy Maiwald' Turner - Sears", "CX2608 - 49-75165", "Super Breakout (1982 - 1981) (Atari) [a]", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "01 45", "", "", "", "", "{\"score_addresses\":[\"0xdc\",\"0xdd\"],\"variations_address\":\"0xc0\",\"variations_count\":9}" },
{ "0adb21206de92e8aec5ef295805ebb90", "", "", "Solaris (Genesis)", "Genesis controller (C switches to map mode)", "Hack of Solaris", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "0adb21206de92e8aec5ef295805ebb90", "", "", "Solaris (Genesis)", "Genesis controller (C switches to map mode)", "Hack of Solaris", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}" },
{ "0ae3497e731ca0bf6a77b23441d9d9f9", "", "", "Analog Clock (V0.0) (20-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "0af51ceb4aecc7a8fc89781ac44a1973", "Barry Laws Jr.", "", "Face Invaders Deluxe (Barry Laws Jr.) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Only player 1 supported\",\"score_addresses\":[\"0xe6\",\"0xe8\"],\"variations_address\":\"0xdc\",\"variations_bcd\":false,\"variations_bcd_A\":false,\"variations_count\":112,\"variations_zero_based\":true}" },
{ "0afe6ae18966795b89314c3797dd2b1e", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692, CX2692P", "Moon Patrol (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xea\",\"0xeb\",\"0xec\"],\"score_digits\":6,\"variations_address\":\"0xf9\",\"variations_count\":6,\"variations_zero_based\":true}" },
@ -239,7 +239,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "0f2e09c71cc216f79d22a804152ba24b", "Bob Colbert", "", "Scroller Demo (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "0f341d1f4e144e3163d9a5fc5a662b79", "", "", "RUN Platform Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "0f39fc03d579d0d93a6b729a3746843e", "Atari, Sam Comstock, Richard Dobbis, Nick 'Sandy Maiwald' Turner", "CX26111", "Snoopy and the Red Baron (05-27-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "0f604cd4c9d2795cf5746e8af7948064", "Champ Games", "CG-02-N", "Conquest Of Mars (2010) (NTSC)", "Rev 2 release", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "0f604cd4c9d2795cf5746e8af7948064", "Champ Games", "CG-02-N", "Conquest Of Mars (2010) (NTSC)", "Rev 2 release", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x92\",\"0x94\",\"0x96\"],\"score_digits\":6,\"special_address\":\"0x9a\",\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x89\",\"variations_count\":4,\"variations_zero_based\":true}" },
{ "0f643c34e40e3f1daafd9c524d3ffe64", "Atari, Robert C. Polaro, Alan J. Murphy - Sears", "CX2609 - 49-75186", "Defender (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "0f6676b05621f80c670966e2995b227a", "", "", "Globe Trotter Demo 1 (24-03-2003) (Weston)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "0f738dc44437557624eb277ed7ad91c9", "", "", "Grand Prix (Unknown) (PAL)", "AKA Grand Prix", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Time/score shows extra digit\",\"score_addresses\":[\"0xeb\",\"0xec\",\"0xed\"],\"score_digits\":5,\"score_inverted\":true,\"variations_address\":\"0x80\",\"variations_count\":4,\"variations_zero_based\":true}" },
@ -755,7 +755,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "34b269387fa1aa5a396636f5ecdd63dd", "", "", "Marble Craze (mc7_23) (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "34c808ad6577dbfa46169b73171585a3", "Apollo", "AP-2012", "Squoosh (1983) (Apollo) (Prototype)", "AKA Vat's Incredible!, The Grape Escape", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "34ca2fcbc8ba4a0b544acd94991cfb50", "Atari, Robert C. Polaro", "", "Dukes of Hazzard (1980) (Atari) (Prototype) (4K)", "AKA Stunt Cycle", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "34e37eaffc0d34e05e40ed883f848b40", "Retroactive", "", "Qb (2.15) (Retroactive) (Stella)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "34e37eaffc0d34e05e40ed883f848b40", "Retroactive", "", "Qb (2.15) (Retroactive) (Stella)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}" },
{ "34f4b1d809aa705ace6e46b13253fd3b", "Aaron Bergstrom", "", "Nothern Alliance (Aaron Bergstrom) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Only player 1 supported\",\"score_addresses\":[\"0xe6\",\"0xe8\"],\"variations_address\":\"0xdc\",\"variations_bcd\":false,\"variations_bcd_A\":false,\"variations_count\":112,\"variations_zero_based\":true}" },
{ "34fd4fcb40ff5babce67f8b806d5969c", "", "", "Boxing (Dactari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "350e0f7b562ec5e457b3f5af013648db", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26119", "Saboteur (06-09-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -866,7 +866,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "3c7a96978f52b2b15426cdd50f2c4048", "", "", "Overhead Adventure Demo 3 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3c82e808fe0e6a006dc0c4e714d36209", "Activision, David Crane", "AG-004", "Fishing Derby (1980) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3c853d864a1d5534ed0d4b325347f131", "Telesys, Don 'Donyo' Ruffcorn", "1002", "Cosmic Creeps (1982) (Telesys)", "AKA Space Maze, Spaze Maze", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "3c8e57a246742fa5d59e517134c0b4e6", "Parker Brothers, Rex Bradford, Sam Kjellman", "PB5050", "Star Wars - The Empire Strikes Back (1982) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3c8e57a246742fa5d59e517134c0b4e6", "Parker Brothers, Rex Bradford, Sam Kjellman", "PB5050", "Star Wars - The Empire Strikes Back (1982) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xe0\",\"0xe1\"],\"variations_address\":\"0xea\",\"variations_bcd\":false,\"variations_count\":32,\"variations_zero_based\":true}" },
{ "3ca51b5c08f5a0ecfb17d0c1ec6d0942", "Atari, James Andreasen - Sears", "CX2654 - 49-75141", "Haunted House (09-28-81) (Atari) (Prototype)", "AKA Mystery Mansion, Graves' Manor, Nightmare Manor", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3caa902ac0ce4509308990645876426a", "Atari - GCC, Dave Payne", "CX2669, CX2669P", "Vanguard (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Score is for current player\",\"score_addresses\":[\"0x99\",\"0x98\",\"0x97\"],\"score_digits\":6,\"variations_count\":1}" },
{ "3cbdf71bb9fd261fbc433717f547d738", "CCE", "C-803", "Bobby Is Going Home (1983) (CCE) (PAL)", "AKA Bobby Vai Para Casa", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -901,7 +901,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "3ec12372ca3e870b11ca70edc7ec26a4", "CommaVid, John Bronstein", "CM-002", "Video Life (1981) (CommaVid) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "3eccf9f363f5c5de0c8b174a535dc83b", "", "", "Plaque Attack (Unknown) (PAL)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3ef9573536730dcd6d9c20b6822dbdc4", "Atari, Larry Wagner, Bob Whitehead", "CX2645, CX2645P", "Video Chess (1979) (Atari) (PAL)", "AKA Computer Chess", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3f01bd6d059396f495a4cde7de0ab180", "", "", "Qb (Special Edition) (NTSC) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "3f01bd6d059396f495a4cde7de0ab180", "", "", "Qb (Special Edition) (NTSC) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}" },
{ "3f039981255691d3859d04ef813a1264", "Xonox, John Perkins", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox) [a]", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3f251c50aa7237e61a38ab42315ebed4", "Thomas Jentzsch", "", "Ikari Warriors (1990) (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3f3ad2765c874ca13c015ca6a44a40a1", "CCE", "C-862", "Crackpots (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -1129,7 +1129,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "4f7b07ec2bef5ccffe06403a142f80db", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1982) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "4f82d8d78099dd71e8e169646e799d05", "", "", "Miniature Golf (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "4f89b897444e7c3b36aed469b8836839", "Atari", "CX26190", "BMX Air Master (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "4fae08027365d31c558e400b687adf21", "", "", "Qb (V2.17) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "4fae08027365d31c558e400b687adf21", "", "", "Qb (V2.17) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}" },
{ "4faeb04b1b7fb0fa25db05753182a898", "", "", "2600 Digital Clock (V x.xx) (PD) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "4fbe0f10a6327a76f83f83958c3cbeff", "CCE", "C-816", "Keystone Kappers (1983) (CCE)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x9a\",\"0x9b\",\"0x9c\"],\"score_digits\":6,\"variations_count\":1}" },
{ "4fc1b85b8074b4b9436d097900e34f29", "John K. Harvey", "", "John K. Harvey's Equalizer (John K. Harvey)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
@ -1664,7 +1664,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "7574480ae2ab0d282c887e9015fdb54c", "Atari, Jerome Domurat, Steve Woita", "CX2699", "Taz (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7576dd46c2f8d8ab159d97e3a3f2052f", "Goliath - Hot Shot", "83-112", "Time Machine (1983) (Goliath) (PAL)", "AKA Asteroid Fire", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "757f529026696e13838364dea382a4ed", "Activision, David Crane - Ariola", "EAX-014, PAX-014, EAX-014-04B, EAX-014-04I - 711 014-720", "Grand Prix (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Time/score shows extra digit\",\"score_addresses\":[\"0xeb\",\"0xec\",\"0xed\"],\"score_digits\":5,\"score_inverted\":true,\"variations_address\":\"0x80\",\"variations_count\":4,\"variations_zero_based\":true}" },
{ "75893a9dc5de4b91cc426959b82a1da0", "Champ Games", "CG-02-P", "Conquest Of Mars (2010) (PAL60)", "Rev 2 release", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "75893a9dc5de4b91cc426959b82a1da0", "Champ Games", "CG-02-P", "Conquest Of Mars (2010) (PAL60)", "Rev 2 release", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x92\",\"0x94\",\"0x96\"],\"score_digits\":6,\"special_address\":\"0x9a\",\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x89\",\"variations_count\":4,\"variations_zero_based\":true}" },
{ "75a303fd46ad12457ed8e853016815a0", "ZiMAG - Emag - Vidco", "715-111 - GN-060", "Immies & Aggies (1983) (ZiMAG) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "75b22fdf632d76e246433db1ebccd3c4", "", "", "Skeleton+ (05-05-2003) (Eric Ball) (PAL)", "", "", "STEREO", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "75b557be7f08db84ec5b242207b9f241", "", "", "Space Treat (30-12-2002) (Fabrizio Zavagli) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -1895,7 +1895,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "8597f66dd37d9c855663804669d69d7a", "Tigervision, Warren Schwader", "7-003", "Threshold (1982) (Tigervision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "85a4133f6dcf4180e36e70ad0fca0921", "CCE", "C-827", "Chopper Command (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xec\",\"0xee\",\"0xf0\"],\"score_digits\":6,\"variations_address\":\"0xe0\",\"variations_count\":4,\"variations_zero_based\":true}" },
{ "85b1bca93e69f13905107cc802a02470", "Atari, Craig Nelson", "CX2617, CX2617P", "Backgammon (1979) (Atari) (PAL)", "Uses the Paddle Controllers", "Extremely Rare", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "", "", "", "", "", "", "AUTO 80", "", "", "", "", "" },
{ "85bbefb90e16bf386b304c1e9a1f6084", "Champ Games", "CG-02-P", "Conquest Of Mars (PAL60)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "85bbefb90e16bf386b304c1e9a1f6084", "Champ Games", "CG-02-P", "Conquest Of Mars (PAL60)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x92\",\"0x94\",\"0x96\"],\"score_digits\":6,\"special_address\":\"0x9a\",\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x89\",\"variations_count\":4,\"variations_zero_based\":true}" },
{ "85e48d68c8d802e3ba9d494a47d6e016", "", "", "Ship Demo (V 15) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "85e564dae5687e431955056fbda10978", "Milton Bradley Company - Renaissance Technology, Ty Roberts", "4362", "Survival Run (1983) (Milton Bradley)", "AKA Cosmic Commander", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "86128001e69ab049937f265911ce7e8a", "Apollo - Games by Apollo, Steve Stringfellow", "AP-2005", "Lochjaw (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2047,7 +2047,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "9222b25a0875022b412e8da37e7f6887", "Panda", "106", "Dice Puzzle (1983) (Panda)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "9245a84e9851565d565cb6c9fac5802b", "Bomb - Onbase", "CA282", "Great Escape (1983) (Bomb)", "AKA Asteroid Fire", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "927d422d6335018da469a9a07cd80390", "Activision, Carol Shaw - Ariola", "EAX-020, EAX-020-04B, EAX-020-04I - 711 020-720", "River Raid (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "9281eccd7f6ef4b3ebdcfd2204c9763a", "Retroactive", "", "Qb (2.15) (Retroactive) (PAL)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "9281eccd7f6ef4b3ebdcfd2204c9763a", "Retroactive", "", "Qb (2.15) (Retroactive) (PAL)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}" },
{ "9295570a141cdec18074c55dc7229d08", "Telegames", "7045 A015", "Bump 'n' Jump (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "929e8a84ed50601d9af8c49b0425c7ea", "Bit Corporation", "PG205", "Dancing Plate (1982) (BitCorp) (PAL)", "AKA Dishaster, Dancing Plates, Tanzende Teller", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "92a1a605b7ad56d863a56373a866761b", "U.S. Games Corporation - Western Technologies, Dave Hampton", "VC2006", "Raft Rider (1983) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2382,7 +2382,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "ac0ddbcff34d064009591607746e33b8", "Thomas Jentzsch", "", "Atlantis FH (2003) (TJ) (Hack)", "Hack of Atlantis", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xa3\",\"0xa2\"],\"score_digits\":6,\"score_trailing_zeroes\":2,\"variations_address\":\"0x8d\",\"variations_count\":4,\"variations_zero_based\":true}" },
{ "ac26d7d37248d1d8eac5eccacdbef8db", "", "", "Snail Against Squirrel (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ac3dd22dd945724be705ddd2785487c2", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (06-15-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ac53b83e1b57a601eeae9d3ce1b4a458", "Retroactive", "", "Qb (2.15) (Retroactive) (NTSC)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "ac53b83e1b57a601eeae9d3ce1b4a458", "Retroactive", "", "Qb (2.15) (Retroactive) (NTSC)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}" },
{ "ac5f78bae0638cf3f2a0c8d07eb4df69", "", "", "Minesweeper (V.99) (Soren Gust) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ac7c2260378975614192ca2bc3d20e0b", "Activision, David Crane", "AG-930-04, AZ-030", "Decathlon (1983) (Activision)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"Decathlon & 100m dash share variation 1\",\"score_addresses\":[\"0x95\",\"0x96\"],\"variations_address\":\"0x80\",\"variations_bcd\":false,\"variations_count\":10,\"variations_zero_based\":true}" },
{ "ac9adbd6de786a242e19d4bec527982b", "Activision, Alan Miller - Ariola", "EAG-012-04I, EAX-012, EAX-012-04B - 711 012-720", "Ice Hockey (1981) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2567,7 +2567,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "bc24440b59092559a1ec26055fd1270e", "", "", "Private Eye (1984) (Activision) [a]", "", "", "", "0", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "bc3057a35319aae3a5cd87a203736abe", "CCE", "C-845", "Time Warp (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "bc33c685e6ffced83abe7a43f30df7f9", "Dynacom", "", "Seaquest (1983) (Dynacom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"notes\":\"High score is from current player\",\"score_addresses\":[\"0xb8\",\"0xb9\",\"0xba\"],\"score_digits\":6,\"variations_count\":1}" },
{ "bc4cf38a4bee45752dc466c98ed7ad09", "Atari, Douglas Neubauer, Mimi Nyden", "CX26136", "Solaris (1986) (Atari) (PAL)", "AKA Universe, Star Raiders II, The Last Starfighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "bc4cf38a4bee45752dc466c98ed7ad09", "Atari, Douglas Neubauer, Mimi Nyden", "CX26136", "Solaris (1986) (Atari) (PAL)", "AKA Universe, Star Raiders II, The Last Starfighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}" },
{ "bc526185ad324241782dc68ba5d0540b", "", "", "Dodge Demo 1 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "bc5389839857612cfabeb810ba7effdc", "Atari, Tod Frye", "CX2671", "SwordQuest - WaterWorld (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "bc703ea6afb20bc089f04d8c9d79a2bd", "", "", "Gunfight 2600 - Not mergeable with Colbert wizardry... (2001) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2588,7 +2588,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "bdc381baf7c252c63739c5e9ed087a5c", "", "", "Vertical Ship Demo 1 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "bdecc81f740200780db04a107c3a1eba", "Quelle", "874.254 6", "Super-Cowboy beim Rodeo (1983) (Quelle) (PAL)", "AKA Stampede", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "bdf1996e2dd64baf8eff5511811ca6ca", "Tron", "", "H.E.R.O. (Tron)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xb7\",\"0xb8\",\"0xb9\"],\"score_digits\":6,\"special_address\":\"0xf5\",\"special_bcd\":false,\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x80\",\"variations_count\":5,\"variations_zero_based\":true}" },
{ "be060a704803446c02e6f039ab12eb91", "Parker Brothers, Rex Bradford, Sam Kjellman", "931501", "Star Wars - The Empire Strikes Back (1982) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "be060a704803446c02e6f039ab12eb91", "Parker Brothers, Rex Bradford, Sam Kjellman", "931501", "Star Wars - The Empire Strikes Back (1982) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xe0\",\"0xe1\"],\"variations_address\":\"0xea\",\"variations_bcd\":false,\"variations_count\":32,\"variations_zero_based\":true}" },
{ "be1922bd8e09d74da471287e1e968653", "Cropsy", "", "Hangman Pacman Demo (Cropsy) (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "be2870a0120fd28d25284e9ccdcbdc99", "", "", "Tomb Raider 2600 [REV 01] (Montezuma's Revenge Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "be35d8b37bbc03848a5f020662a99909", "Atari, Joe Decuir, Steve Mayer, Larry Wagner - Sears", "CX2601 - 99801, 6-99801, 49-75124", "Combat (1977) (Atari) (4K) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2653,7 +2653,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "c2c7a11717e255593e54d0acaf653ee5", "", "", "Chopper Command (208 in 1) (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xec\",\"0xee\",\"0xf0\"],\"score_digits\":6,\"variations_address\":\"0xe0\",\"variations_count\":4,\"variations_zero_based\":true}" },
{ "c2c8eb642765137bb82b83a65232961f", "Thomas Jentzsch", "", "Challenge of... Nexar, The - Atari Mouse Hack v1.1 (PAL) (TJ)", "Uses Atari Mouse Controller", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c2dea467f4a02fa1f06d66f52bc12e6e", "Thomas Jentzsch", "", "Missile Command Atari Trak-Ball Hack v1.3 (NTSC) (TJ)", "Uses Atari Trak-Ball Controller", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "{\"score_addresses\":[\"0xf3\",\"0xf1\",\"0xef\"],\"score_digits\":6,\"variations_address\":\"0xe9\",\"variations_count\":34}" },
{ "c2fbef02b6eea37d8df3e91107f89950", "Champ Games", "CG-02-N", "Conquest Of Mars (NTSC)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c2fbef02b6eea37d8df3e91107f89950", "Champ Games", "CG-02-N", "Conquest Of Mars (NTSC)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x92\",\"0x94\",\"0x96\"],\"score_digits\":6,\"special_address\":\"0x9a\",\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x89\",\"variations_count\":4,\"variations_zero_based\":true}" },
{ "c31a17942d162b80962cb1f7571cd1d5", "Home Vision - Gem International Corp. - VDI", "VCS83112", "Sky Alien (1983) (Home Vision) (PAL)", "AKA Sky Aliem", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c3205e3707f646e1a106e09c5c49c1bf", "", "", "Unknown Title (bin00003 (200206)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c3472fa98c3b452fa2fd37d1c219fb6f", "Atari, Carla Meninsky - Sears", "CX2637 - 49-75158", "Dodge 'Em (1980) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2974,7 +2974,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "d97fd5e6e1daacd909559a71f189f14b", "M Network, Steve Crandall, Patricia Lewis Du Long", "MT4646", "Rocky & Bullwinkle (04-20-1983) (M Network) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "d9ab6b67a17da51e5ad13717e93fa2e2", "Thomas Jentzsch", "", "Turbo (Coleco) Prototype Fake v0.1 (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "d9b49f0678776e04916fa5478685a819", "Activision, John Van Ryzin - Ariola", "EAZ-036-04, EAZ-036-04B, EAZ-036-04I - 711 036-720", "H.E.R.O. (1984) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xb7\",\"0xb8\",\"0xb9\"],\"score_digits\":6,\"special_address\":\"0xf5\",\"special_bcd\":false,\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x80\",\"variations_count\":5,\"variations_zero_based\":true}" },
{ "d9bd343533b61389b270c0787210943b", "Atari, Douglas 'Solaris' Neubauer", "CX26134", "Last Starfighter (1984) (Atari) (Prototype)", "Genesis controller (C switches to map mode)", "Hack of Last Starfighter (Solaris prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "d9bd343533b61389b270c0787210943b", "Atari, Douglas 'Solaris' Neubauer", "CX26134", "Last Starfighter (1984) (Atari) (Prototype)", "Genesis controller (C switches to map mode)", "Hack of Last Starfighter (Solaris prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}" },
{ "d9c9cece2e769c7985494b1403a25721", "SOLID Corp. (D. Scott Williamson)", "CX2655*", "Star Castle 2600 (SolidCorp)", "http://starcastle2600.blogspot.com/p/star-castle-2600-story.html", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "d9da2ae7c7894a29b43b3c6b79f3b7a2", "Atari, Rob Fulop", "CX2633, CX2633P", "Night Driver (1980) (Atari) (PAL) (4K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AUTO 65", "", "", "YES", "", "" },
{ "d9fbf1113114fb3a3c97550a0689f10f", "ZiMAG - Emag - Vidco", "713-111 - GN-050", "Pizza Chef (1983) (ZiMAG) (Prototype)", "AKA Pizza Time", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -3113,7 +3113,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "e24d7d879281ffec0641e9c3f52e505a", "Parker Brothers, Mark Lesser", "PB5950", "Lord of the Rings (1983) (Parker Bros) (Prototype)", "Journey to Rivendell (The Lord of the Rings I)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e25e173740f7ecc0e23025445c4591f3", "Greg Zumwalt", "", "Comitoid (Greg Zumwalt)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e275cbe7d4e11e62c3bfcfb38fca3d49", "M Network - INTV - APh Technological Consulting, Ken Smith", "MT5658", "Super Challenge Football (1982) (M Network)", "AKA Pro Football", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e27d518993b0a010f16e92b971ecdcdd", "Manuel Polik", "", "Star Fire (2003) (XYPE) (PAL)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e27d518993b0a010f16e92b971ecdcdd", "Manuel Polik", "", "Star Fire (2003) (XYPE) (PAL)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x81\",\"0x82\",\"0x83\"],\"score_digits\":6,\"special_address\":\"0x84\",\"special_label\":\"Wave\",\"special_zero_based\":true,\"variations_count\":1}" },
{ "e28113d10c0c14cc3b5f430b0d142fcb", "CCE", "C-816", "Keystone Kappers (1983) (CCE) [a]", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x9a\",\"0x9b\",\"0x9c\"],\"score_digits\":6,\"variations_count\":1}" },
{ "e2846af3e4d172b251ab77cbdd01761e", "Steve Engelhardt", "", "Adventure Plus (2003) (Steve Engelhardt) (Hack)", "Hack of Adventure", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e2904748da63dfefc8816652b924b642", "Jone Yuan Telephonic Enterprise Co", "", "Catch Time (Jone Yuan)", "AKA Plaque Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -3185,7 +3185,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "e6e5bb0e4f4350da573023256268313d", "Thomas Jentzsch", "", "Missile Control (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e6f49a1053c79211f82be4d90dc9fe3d", "", "", "Gunfight 2600 - Little progress... (2001) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e723ad8f406cb258b89681ef4cef0eff", "Thomas Jentzsch", "", "Sadoom (TJ) (PAL) (Hack)", "Hack of Kaboom!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "01 50", "", "", "", "", "{\"score_addresses\":[\"0xa3\",\"0xa4\",\"0xa5\"],\"score_digits\":6,\"special_address\":\"0xa2\",\"special_bcd\":false,\"special_label\":\"Group\",\"variations_count\":1,\"variations_zero_based\":true}" },
{ "e72eb8d4410152bdcb69e7fba327b420", "Atari, Douglas Neubauer, Mimi Nyden", "CX26136", "Solaris (1986) (Atari)", "AKA Universe, Star Raiders II, The Last Starfighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e72eb8d4410152bdcb69e7fba327b420", "Atari, Douglas Neubauer, Mimi Nyden", "CX26136", "Solaris (1986) (Atari)", "AKA Universe, Star Raiders II, The Last Starfighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}" },
{ "e72ee2d6e501f07ec5e8a0efbe520bee", "Imagic, Dave Johnson", "720119-2A, 13211, EIX-004-04I", "Quick Step! (1983) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e73838c43040bcbc83e4204a3e72eef4", "CCE", "", "Apples and Dolls (CCE)", "AKA Open, Sesame!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "e74022cfe31ec8908844718dfbdedf7a", "", "", "Space Treat (30-12-2002) (Fabrizio Zavagli) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -3329,7 +3329,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "f16c709df0a6c52f47ff52b9d95b7d8d", "Atari, Alan Miller - Sears", "CX2662 - 6-99811", "Hangman (1978) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f16ef574d2042ed8fe877d6541f4dba4", "Spectravision - Spectravideo", "SA-201", "Gangster Alley (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f1929bb9b5db22d98dd992aa3fe72920", "", "", "Cube Conquest (Improved Interlace) (Billy Eno) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "f19aba18f86e415812480ad2be221425", "Chris Larkin", "", "Solaris Trainer (2002) (Chris Larkin) (Hack)", "Hack of Solaris", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f19aba18f86e415812480ad2be221425", "Chris Larkin", "", "Solaris Trainer (2002) (Chris Larkin) (Hack)", "Hack of Solaris", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}" },
{ "f1a0a23e6464d954e3a9579c4ccd01c8", "20th Century Fox, Douglas 'Dallas North' Neubauer", "11006", "Alien (1982) (20th Century Fox)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "f1ae6305fa33a948e36deb0ef12af852", "Andreas Dietrich", "", "Donkey Kong VCS (2017) (1.0)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "f1b2ea568b3e156e3f2849dac83591f6", "", "", "Sprite Demo (1997) (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -3489,7 +3489,7 @@ static const BSPF::array2D<const char*, DEF_PROPS_SIZE, 28> DefProps = {{
{ "fb5c8af97bd8ffe88323656f462645a7", "", "", "Interlace Demo (Glenn Saunders)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
{ "fb833ed50c865a9a505a125fc9d79a7e", "ITT Family Games", "", "Pumuckl I (1983) (ITT Family Games) (PAL)", "AKA Panda Chase", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fb884ffd89013331a6f01ae3f6abd214", "Activision, David Crane", "", "Venetian Blinds Demo (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fb88baa01afd34e0e4b601e1d29bc806", "Manuel Polik", "", "Star Fire (2003) (XYPE)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fb88baa01afd34e0e4b601e1d29bc806", "Manuel Polik", "", "Star Fire (2003) (XYPE)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "{\"score_addresses\":[\"0x81\",\"0x82\",\"0x83\"],\"score_digits\":6,\"special_address\":\"0x84\",\"special_label\":\"Wave\",\"special_zero_based\":true,\"variations_count\":1}" },
{ "fb88c400d602fe759ae74ef1716ee84e", "20th Century Fox Video Games, Bill Aspromonte", "11031", "Crash Dive (1983) (20th Century Fox)", "AKA Voyage to the Bottom of the Sea", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fb91da78455d9b1606913fbf8c859772", "", "", "Split Screen (Ballblazer) Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fb91dfc36cddaa54b09924ae8fd96199", "Parker Brothers, Mark Lesser", "PB5590", "Frogger II (1984) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },

View File

@ -306,6 +306,13 @@ static void Decode(uInt32* output, const uInt8* input, uInt32 len)
((uInt32(input[j+2])) << 16) | ((uInt32(input[j+3])) << 24);
}
string hash(const string& buffer)
{
std::vector<uint8_t> vec(buffer.begin(), buffer.end());
return hash(vec.data(), vec.size());
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string hash(const ByteBuffer& buffer, size_t length)
{

View File

@ -24,30 +24,37 @@ class FilesystemNode;
namespace MD5 {
/**
Get the MD5 Message-Digest of the specified message with the
given length. The digest consists of 32 hexadecimal digits.
/**
Get the MD5 Message-Digest of the specified message with the
given length. The digest consists of 32 hexadecimal digits.
Note that currently, the length is truncated internally to
32 bits, until the MD5 routines are rewritten for 64-bit.
Based on the size of data we currently use, this may never
actually happen.
Note that currently, the length is truncated internally to
32 bits, until the MD5 routines are rewritten for 64-bit.
Based on the size of data we currently use, this may never
actually happen.
@param buffer The message to compute the digest of
@param length The length of the message
@return The message-digest
*/
string hash(const ByteBuffer& buffer, size_t length);
string hash(const uInt8* buffer, size_t length);
@param buffer The message to compute the digest of
@param length The length of the message
@return The message-digest
*/
string hash(const ByteBuffer& buffer, size_t length);
string hash(const uInt8* buffer, size_t length);
/**
Dito.
/**
Get the MD5 Message-Digest of the file contained in 'node'.
The digest consists of 32 hexadecimal digits.
@param buffer The message to compute the digest of
@return The message - digest
*/
string hash(const string& buffer);
@param node The file node to compute the digest of
@return The message-digest
*/
string hash(const FilesystemNode& node);
/**
Get the MD5 Message-Digest of the file contained in 'node'.
The digest consists of 32 hexadecimal digits.
@param node The file node to compute the digest of
@return The message-digest
*/
string hash(const FilesystemNode& node);
} // Namespace MD5

View File

@ -909,6 +909,7 @@
"Cart.Name" "Solaris (Genesis)"
"Cart.Note" "Genesis controller (C switches to map mode)"
"Cart.Rarity" "Hack of Solaris"
"Cart.Highscore" "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}"
""
"Cart.MD5" "0ae3497e731ca0bf6a77b23441d9d9f9"
@ -1326,6 +1327,7 @@
"Cart.Name" "Conquest Of Mars (2010) (NTSC)"
"Cart.Note" "Rev 2 release"
"Cart.Rarity" "Homebrew"
"Cart.Highscore" "{\"score_addresses\":[\"0x92\",\"0x94\",\"0x96\"],\"score_digits\":6,\"special_address\":\"0x9a\",\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x89\",\"variations_count\":4,\"variations_zero_based\":true}"
""
"Cart.MD5" "0f643c34e40e3f1daafd9c524d3ffe64"
@ -4565,6 +4567,7 @@
"Cart.Name" "Qb (2.15) (Retroactive) (Stella)"
"Cart.Rarity" "New Release"
"Display.Phosphor" "YES"
"Cart.Highscore" "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}"
""
"Cart.MD5" "34f4b1d809aa705ace6e46b13253fd3b"
@ -5254,6 +5257,7 @@
"Cart.Manufacturer" "Parker Brothers, Rex Bradford, Sam Kjellman"
"Cart.ModelNo" "PB5050"
"Cart.Name" "Star Wars - The Empire Strikes Back (1982) (Parker Bros)"
"Cart.Highscore" "{\"score_addresses\":[\"0xe0\",\"0xe1\"],\"variations_address\":\"0xea\",\"variations_bcd\":false,\"variations_count\":32,\"variations_zero_based\":true}"
""
"Cart.MD5" "3ca51b5c08f5a0ecfb17d0c1ec6d0942"
@ -5480,6 +5484,7 @@
"Cart.MD5" "3f01bd6d059396f495a4cde7de0ab180"
"Cart.Name" "Qb (Special Edition) (NTSC) (Retroactive)"
"Display.Phosphor" "YES"
"Cart.Highscore" "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}"
""
"Cart.MD5" "3f039981255691d3859d04ef813a1264"
@ -6872,6 +6877,7 @@
"Cart.MD5" "4fae08027365d31c558e400b687adf21"
"Cart.Name" "Qb (V2.17) (NTSC) (2001) (Retroactive)"
"Display.Phosphor" "YES"
"Cart.Highscore" "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}"
""
"Cart.MD5" "4faeb04b1b7fb0fa25db05753182a898"
@ -10222,6 +10228,7 @@
"Cart.Name" "Conquest Of Mars (2010) (PAL60)"
"Cart.Note" "Rev 2 release"
"Cart.Rarity" "Homebrew"
"Cart.Highscore" "{\"score_addresses\":[\"0x92\",\"0x94\",\"0x96\"],\"score_digits\":6,\"special_address\":\"0x9a\",\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x89\",\"variations_count\":4,\"variations_zero_based\":true}"
""
"Cart.MD5" "75a303fd46ad12457ed8e853016815a0"
@ -11669,6 +11676,7 @@
"Cart.ModelNo" "CG-02-P"
"Cart.Name" "Conquest Of Mars (PAL60)"
"Cart.Rarity" "Homebrew"
"Cart.Highscore" "{\"score_addresses\":[\"0x92\",\"0x94\",\"0x96\"],\"score_digits\":6,\"special_address\":\"0x9a\",\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x89\",\"variations_count\":4,\"variations_zero_based\":true}"
""
"Cart.MD5" "85e48d68c8d802e3ba9d494a47d6e016"
@ -12603,6 +12611,7 @@
"Cart.Name" "Qb (2.15) (Retroactive) (PAL)"
"Cart.Rarity" "New Release"
"Display.Phosphor" "YES"
"Cart.Highscore" "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}"
""
"Cart.MD5" "9295570a141cdec18074c55dc7229d08"
@ -14661,6 +14670,7 @@
"Cart.Name" "Qb (2.15) (Retroactive) (NTSC)"
"Cart.Rarity" "New Release"
"Display.Phosphor" "YES"
"Cart.Highscore" "{\"score_addresses\":[\"0xe6\",\"0xe5\",\"0xe4\"],\"score_digits\":6,\"variations_count\":1}"
""
"Cart.MD5" "ac5f78bae0638cf3f2a0c8d07eb4df69"
@ -15823,6 +15833,7 @@
"Cart.ModelNo" "CX26136"
"Cart.Name" "Solaris (1986) (Atari) (PAL)"
"Cart.Note" "AKA Universe, Star Raiders II, The Last Starfighter"
"Cart.Highscore" "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}"
""
"Cart.MD5" "bc526185ad324241782dc68ba5d0540b"
@ -15941,6 +15952,7 @@
"Cart.Manufacturer" "Parker Brothers, Rex Bradford, Sam Kjellman"
"Cart.ModelNo" "931501"
"Cart.Name" "Star Wars - The Empire Strikes Back (1982) (Parker Bros) (PAL)"
"Cart.Highscore" "{\"score_addresses\":[\"0xe0\",\"0xe1\"],\"variations_address\":\"0xea\",\"variations_bcd\":false,\"variations_count\":32,\"variations_zero_based\":true}"
""
"Cart.MD5" "be1922bd8e09d74da471287e1e968653"
@ -16347,6 +16359,7 @@
"Cart.ModelNo" "CG-02-N"
"Cart.Name" "Conquest Of Mars (NTSC)"
"Cart.Rarity" "Homebrew"
"Cart.Highscore" "{\"score_addresses\":[\"0x92\",\"0x94\",\"0x96\"],\"score_digits\":6,\"special_address\":\"0x9a\",\"special_label\":\"Level\",\"special_zero_based\":true,\"variations_address\":\"0x89\",\"variations_count\":4,\"variations_zero_based\":true}"
""
"Cart.MD5" "c31a17942d162b80962cb1f7571cd1d5"
@ -18344,6 +18357,7 @@
"Cart.Name" "Last Starfighter (1984) (Atari) (Prototype)"
"Cart.Note" "Genesis controller (C switches to map mode)"
"Cart.Rarity" "Hack of Last Starfighter (Solaris prototype)"
"Cart.Highscore" "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}"
""
"Cart.MD5" "d9c9cece2e769c7985494b1403a25721"
@ -19199,6 +19213,7 @@
"Cart.Manufacturer" "Manuel Polik"
"Cart.Name" "Star Fire (2003) (XYPE) (PAL)"
"Cart.Rarity" "Homebrew"
"Cart.Highscore" "{\"score_addresses\":[\"0x81\",\"0x82\",\"0x83\"],\"score_digits\":6,\"special_address\":\"0x84\",\"special_label\":\"Wave\",\"special_zero_based\":true,\"variations_count\":1}"
""
"Cart.MD5" "e28113d10c0c14cc3b5f430b0d142fcb"
@ -19655,6 +19670,7 @@
"Cart.ModelNo" "CX26136"
"Cart.Name" "Solaris (1986) (Atari)"
"Cart.Note" "AKA Universe, Star Raiders II, The Last Starfighter"
"Cart.Highscore" "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}"
""
"Cart.MD5" "e72ee2d6e501f07ec5e8a0efbe520bee"
@ -20538,6 +20554,7 @@
"Cart.Name" "Solaris Trainer (2002) (Chris Larkin) (Hack)"
"Cart.Note" "Hack of Solaris"
"Cart.Rarity" "Hack"
"Cart.Highscore" "{\"score_addresses\":[\"0xde\",\"0xdd\",\"0xdc\"],\"score_digits\":6,\"score_trailing_zeroes\":1,\"variations_count\":1}"
""
"Cart.MD5" "f1a0a23e6464d954e3a9579c4ccd01c8"
@ -21523,6 +21540,7 @@
"Cart.Manufacturer" "Manuel Polik"
"Cart.Name" "Star Fire (2003) (XYPE)"
"Cart.Rarity" "Homebrew"
"Cart.Highscore" "{\"score_addresses\":[\"0x81\",\"0x82\",\"0x83\"],\"score_digits\":6,\"special_address\":\"0x84\",\"special_label\":\"Wave\",\"special_zero_based\":true,\"variations_count\":1}"
""
"Cart.MD5" "fb88c400d602fe759ae74ef1716ee84e"

View File

@ -1283,7 +1283,7 @@ void GameInfoDialog::updateHighScoresWidgets()
setAddressVal(mySpecialAddress, mySpecialAddressVal, mySpecialBCD->getState(),
mySpecialZeroBased->getState());
// update score RAM values and resulting myScores
// update score RAM values and resulting scores
HSM::ScoreAddresses scoreAddr;
for(uInt32 a = 0; a < HSM::MAX_SCORE_ADDR; ++a)

View File

@ -186,18 +186,19 @@ HighScoresDialog::HighScoresDialog(OSystem& osystem, DialogContainer& parent,
ypos += VGAP;
_w = std::max(myDeleteButtons[0]->getRight() + HBORDER,
HBORDER * 2 + ifont.getMaxCharWidth() * (5 + 32 + 2 + 11));
HBORDER * 2 + ifont.getMaxCharWidth() * (5 + 17 + 2 + 7 + 17));
myNotesWidget = new StaticTextWidget(this, ifont, xpos, ypos + 1, _w - HBORDER * 2,
infoLineHeight, "Note: ");
ypos += infoLineHeight + VGAP;
// Note: Only display the first 16 md5 chars + "..."
myMD5Widget = new StaticTextWidget(this, ifont, xpos, ypos + 1,
"MD5: 12345678901234567890123456789012");
"MD5: 1234567890123456.");
myCheckSumWidget = new StaticTextWidget(this, ifont,
_w - HBORDER - ifont.getStringWidth("Props: 1234"),
ypos + 1, "Props: 1234");
_w - HBORDER - ifont.getStringWidth("Props: 1234567890123456."),
ypos + 1, "Props: 1234567890123456.");
_h = myMD5Widget->getBottom() + VBORDER + buttonHeight + VBORDER;
@ -276,7 +277,7 @@ void HighScoresDialog::loadConfig()
myScores.md5 = instance().launcher().selectedRomMD5();
myMD5Widget->setLabel("MD5: " + myScores.md5);
myCheckSumWidget->setLabel("Props: " + instance().highScores().checkSumProps());
myCheckSumWidget->setLabel("Props: " + instance().highScores().md5Props());
// requires the current MD5
myGameNameWidget->setLabel(cartName());

View File

@ -37,7 +37,7 @@ using json = nlohmann::json;
/**
The dialog for displaying high myScores in Stella.
The dialog for displaying high scores in Stella.
@author Thomas Jentzsch
*/