[Scummvm-git-logs] scummvm master -> f3b5bc7ccfa3fc7320e1c3d88cee0c22defb16e6
sev-
sev at scummvm.org
Tue Mar 10 15:34:48 UTC 2020
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
992828b2ab PRINCE: Drop platform in target generation on detection
f3b5bc7ccf PRINCE: Convert flag lookup into hashmap. This is more stable
Commit: 992828b2ab82a378dc3bb0b2c1beaa653d7f0407
https://github.com/scummvm/scummvm/commit/992828b2ab82a378dc3bb0b2c1beaa653d7f0407
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-03-10T16:30:49+01:00
Commit Message:
PRINCE: Drop platform in target generation on detection
Changed paths:
engines/prince/detection.cpp
diff --git a/engines/prince/detection.cpp b/engines/prince/detection.cpp
index 2332118775..5d710102d6 100644
--- a/engines/prince/detection.cpp
+++ b/engines/prince/detection.cpp
@@ -62,7 +62,7 @@ static const PrinceGameDescription gameDescriptions[] = {
AD_ENTRY1s("databank.ptc", "5fa03833177331214ec1354761b1d2ee", 3565031),
Common::DE_DEU,
Common::kPlatformWindows,
- ADGF_USEEXTRAASTITLE,
+ ADGF_USEEXTRAASTITLE | ADGF_DROPPLATFORM,
GUIO1(GUIO_NONE)
},
kPrinceDataDE
@@ -74,7 +74,7 @@ static const PrinceGameDescription gameDescriptions[] = {
AD_ENTRY1s("databank.ptc", "48ec9806bda9d152acbea8ce31c93c49", 3435298),
Common::PL_POL,
Common::kPlatformWindows,
- ADGF_USEEXTRAASTITLE,
+ ADGF_USEEXTRAASTITLE | ADGF_DROPPLATFORM,
GUIO1(GUIO_NONE)
},
kPrinceDataPL
@@ -86,7 +86,7 @@ static const PrinceGameDescription gameDescriptions[] = {
AD_ENTRY1s("talktxt.dat", "02bb2372f19aca3c65896ed81b2cefb3", 125702),
Common::RU_RUS,
Common::kPlatformWindows,
- GF_EXTRACTED,
+ GF_EXTRACTED | ADGF_DROPPLATFORM,
GUIO1(GUIO_NONE)
},
kPrinceDataDE
@@ -98,7 +98,7 @@ static const PrinceGameDescription gameDescriptions[] = {
AD_ENTRY1s("databank.ptc", "a67b55730f3d7064921bd2a59e1063a3", 3892982),
Common::RU_RUS,
Common::kPlatformWindows,
- GF_NOVOICES,
+ GF_NOVOICES | ADGF_DROPPLATFORM,
GUIO1(GUIO_NONE)
},
kPrinceDataDE
@@ -114,7 +114,7 @@ static const PrinceGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformWindows,
- GF_TRANSLATED,
+ GF_TRANSLATED | ADGF_DROPPLATFORM,
GUIO1(GUIO_NONE)
},
kPrinceDataDE
@@ -130,7 +130,7 @@ static const PrinceGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformWindows,
- GF_TRANSLATED,
+ GF_TRANSLATED | ADGF_DROPPLATFORM,
GUIO1(GUIO_NONE)
},
kPrinceDataPL
Commit: f3b5bc7ccfa3fc7320e1c3d88cee0c22defb16e6
https://github.com/scummvm/scummvm/commit/f3b5bc7ccfa3fc7320e1c3d88cee0c22defb16e6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-03-10T16:30:49+01:00
Commit Message:
PRINCE: Convert flag lookup into hashmap. This is more stable
Changed paths:
engines/prince/flags.cpp
engines/prince/flags.h
engines/prince/script.cpp
engines/prince/script.h
diff --git a/engines/prince/flags.cpp b/engines/prince/flags.cpp
index 7877b276f5..5cef17dae6 100644
--- a/engines/prince/flags.cpp
+++ b/engines/prince/flags.cpp
@@ -21,32 +21,13 @@
*/
#include "prince/flags.h"
-#include "prince/script.h"
namespace Prince {
-const char *Flags::getFlagName(uint16 flagId) {
- FlagDebug *flagd = nullptr;
- flagd = (FlagDebug *)bsearch(&flagId, _flagNames, kFlagDebugAmount, sizeof(FlagDebug), Flags::compareFlagDebug);
- if (flagd != nullptr) {
- return flagd->flagName;
- } else {
- return "unknown_flag";
- }
-}
-
-int Flags::compareFlagDebug(const void *a, const void *b) {
- const uint32 *flagId = (const uint32 *)a;
- const FlagDebug *entry = (const FlagDebug *)b;
- if (*flagId < (uint32)entry->id) {
- return -1;
- } else if (*flagId > (uint32)entry->id) {
- return 1;
- }
- return 0;
-}
-
-const Flags::FlagDebug Flags::_flagNames[Flags::kFlagDebugAmount] = {
+struct FlagDebug {
+ uint id;
+ char flagName[30];
+} static const flagNames[] = {
{ Flags::FLAGA1, "FLAGA1" },
{ Flags::FLAGA2, "FLAGA2" },
{ Flags::FLAGA3, "FLAGA3" },
@@ -417,4 +398,18 @@ const Flags::FlagDebug Flags::_flagNames[Flags::kFlagDebugAmount] = {
{ Flags::ESCAPED2, "ESCAPED2" },
};
+
+Flags::Flags() {
+ for (uint i = 0; i < ARRAYSIZE(flagNames); i++) {
+ _flagMap[flagNames[i].id] = flagNames[i].flagName;
+ }
+}
+
+const char *Flags::getFlagName(uint16 flagId) {
+ if (_flagMap.contains(flagId))
+ return _flagMap[flagId];
+
+ return "unknown_flag";
+}
+
} // End of namespace Prince
diff --git a/engines/prince/flags.h b/engines/prince/flags.h
index 23c0998db7..545eb330b0 100644
--- a/engines/prince/flags.h
+++ b/engines/prince/flags.h
@@ -24,13 +24,14 @@
#define PRINCE_FLAGS_H
#include "common/scummsys.h"
+#include "common/hashmap.h"
namespace Prince {
class Flags {
public:
- static int compareFlagDebug(const void *a, const void *b);
- static const char *getFlagName(uint16 flagId);
+ Flags();
+ const char *getFlagName(uint16 flagId);
enum Id {
FLAGA1 = 0x8000,
@@ -407,13 +408,8 @@ public:
ESCAPED2 = 0x8470
};
- struct FlagDebug {
- Id id;
- char flagName[30];
- };
-
- static const int kFlagDebugAmount = 368;
- static const FlagDebug _flagNames[kFlagDebugAmount];
+private:
+ Common::HashMap<uint, const char *> _flagMap;
};
} // End of namespace Prince
diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp
index 80d6e85480..87e69131e1 100644
--- a/engines/prince/script.cpp
+++ b/engines/prince/script.cpp
@@ -876,14 +876,14 @@ void Interpreter::O__SETFLAG() {
Flags::Id flagId = readScriptFlagId();
int32 value = readScriptFlagValue();
_flags->setFlagValue((Flags::Id)(flagId), value);
- debugInterpreter("O__SETFLAG 0x%04X (%s) = %d", flagId, Flags::getFlagName(flagId), value);
+ debugInterpreter("O__SETFLAG 0x%04X (%s) = %d", flagId, _flagMap.getFlagName(flagId), value);
}
void Interpreter::O_COMPARE() {
Flags::Id flagId = readScriptFlagId();
int32 value = readScriptFlagValue();
_result = _flags->getFlagValue(flagId) != value;
- debugInterpreter("O_COMPARE flagId 0x%04X (%s), value %d == %d (%d)", flagId, Flags::getFlagName(flagId), value, _flags->getFlagValue(flagId), _result);
+ debugInterpreter("O_COMPARE flagId 0x%04X (%s), value %d == %d (%d)", flagId, _flagMap.getFlagName(flagId), value, _flags->getFlagValue(flagId), _result);
}
void Interpreter::O_JUMPZ() {
@@ -921,7 +921,7 @@ void Interpreter::O_ADDFLAG() {
} else {
_result = 0;
}
- debugInterpreter("O_ADDFLAG flagId %04x (%s), value %d", flagId, Flags::getFlagName(flagId), value);
+ debugInterpreter("O_ADDFLAG flagId %04x (%s), value %d", flagId, _flagMap.getFlagName(flagId), value);
}
void Interpreter::O_TALKANIM() {
@@ -1188,7 +1188,7 @@ void Interpreter::O_COMPAREHI() {
} else {
_result = 1;
}
- debugInterpreter("O_COMPAREHI flag %04x - (%s), value %d, flagValue %d, result %d", flag, Flags::getFlagName(flag), value, flagValue, _result);
+ debugInterpreter("O_COMPAREHI flag %04x - (%s), value %d, flagValue %d, result %d", flag, _flagMap.getFlagName(flag), value, flagValue, _result);
}
void Interpreter::O_COMPARELO() {
@@ -1200,7 +1200,7 @@ void Interpreter::O_COMPARELO() {
} else {
_result = 1;
}
- debugInterpreter("O_COMPARELO flag %04x - (%s), value %d, flagValue %d, result %d", flag, Flags::getFlagName(flag), value, flagValue, _result);
+ debugInterpreter("O_COMPARELO flag %04x - (%s), value %d, flagValue %d, result %d", flag, _flagMap.getFlagName(flag), value, flagValue, _result);
}
// Not used in script
@@ -1301,7 +1301,7 @@ void Interpreter::O_GETHERODATA() {
if (hero != nullptr) {
_flags->setFlagValue(flagId, hero->getData((Hero::AttrId)heroOffset));
}
- debugInterpreter("O_GETHERODATA flag %04x - (%s), heroId %d, heroOffset %d", flagId, Flags::getFlagName(flagId), heroId, heroOffset);
+ debugInterpreter("O_GETHERODATA flag %04x - (%s), heroId %d, heroOffset %d", flagId, _flagMap.getFlagName(flagId), heroId, heroOffset);
}
// No need of implementation here
@@ -1340,7 +1340,7 @@ void Interpreter::O_GETBACKANIMDATA() {
int currAnim = _vm->_backAnimList[animNumber]._seq._currRelative;
int16 value = _vm->_backAnimList[animNumber].backAnims[currAnim].getAnimData((Anim::AnimOffsets)(animDataOffset));
_flags->setFlagValue((Flags::Id)(flagId), value);
- debugInterpreter("O_GETBACKANIMDATA flag %04X (%s), animNumber %d, animDataOffset %d, value %d", flagId, Flags::getFlagName(flagId), animNumber, animDataOffset, value);
+ debugInterpreter("O_GETBACKANIMDATA flag %04X (%s), animNumber %d, animDataOffset %d, value %d", flagId, _flagMap.getFlagName(flagId), animNumber, animDataOffset, value);
}
void Interpreter::O_GETANIMDATA() {
@@ -1350,7 +1350,7 @@ void Interpreter::O_GETANIMDATA() {
if (_vm->_normAnimList[anim]._animData != nullptr) {
_flags->setFlagValue(flagId, _vm->_normAnimList[anim].getAnimData((Anim::AnimOffsets)(animOffset)));
}
- debugInterpreter("O_GETANIMDATA flag %04X (%s), anim %d, animOffset %d", flagId, Flags::getFlagName(flagId), anim, animOffset);
+ debugInterpreter("O_GETANIMDATA flag %04X (%s), anim %d, animOffset %d", flagId, _flagMap.getFlagName(flagId), anim, animOffset);
}
void Interpreter::O_SETBGCODE() {
@@ -1395,14 +1395,14 @@ void Interpreter::O_GETCHAR() {
Flags::Id flagId = readScriptFlagId();
_flags->setFlagValue(flagId, *_string);
_string++;
- debugInterpreter("O_GETCHAR %04X (%s) %02x", flagId, Flags::getFlagName(flagId), _flags->getFlagValue(flagId));
+ debugInterpreter("O_GETCHAR %04X (%s) %02x", flagId, _flagMap.getFlagName(flagId), _flags->getFlagValue(flagId));
}
void Interpreter::O_SETDFLAG() {
Flags::Id flagId = readScriptFlagId();
int32 address = readScript32();
_flags->setFlagValue((Flags::Id)(flagId), _currentInstruction + address - 4);
- debugInterpreter("O_SETDFLAG 0x%04X (%s) = 0x%04X", flagId, Flags::getFlagName(flagId), _currentInstruction + address - 4);
+ debugInterpreter("O_SETDFLAG 0x%04X (%s) = 0x%04X", flagId, _flagMap.getFlagName(flagId), _currentInstruction + address - 4);
}
void Interpreter::O_CALLDFLAG() {
@@ -1410,7 +1410,7 @@ void Interpreter::O_CALLDFLAG() {
_stack[_stacktop] = _currentInstruction;
_stacktop++;
_currentInstruction = _flags->getFlagValue(flagId);
- debugInterpreter("O_CALLDFLAG 0x%04X (%s) = 0x%04X", flagId, Flags::getFlagName(flagId), _currentInstruction);
+ debugInterpreter("O_CALLDFLAG 0x%04X (%s) = 0x%04X", flagId, _flagMap.getFlagName(flagId), _currentInstruction);
}
void Interpreter::O_PRINTAT() {
@@ -1759,7 +1759,7 @@ void Interpreter::O_SETBACKANIMDATA() {
uint16 value = _flags->getFlagValue((Flags::Id)(flagId));
int currAnim = _vm->_backAnimList[animNumber]._seq._currRelative;
_vm->_backAnimList[animNumber].backAnims[currAnim].setAnimData((Anim::AnimOffsets)(animDataOffset), value);
- debugInterpreter("O_SETBACKANIMDATA flag %04X (%s), animNumber %d, animDataOffset %d, value %d", flagId, Flags::getFlagName(flagId), animNumber, animDataOffset, value);
+ debugInterpreter("O_SETBACKANIMDATA flag %04X (%s), animNumber %d, animDataOffset %d, value %d", flagId, _flagMap.getFlagName(flagId), animNumber, animDataOffset, value);
}
void Interpreter::O_VIEWFLC() {
diff --git a/engines/prince/script.h b/engines/prince/script.h
index b8b8735ec1..5b118afc5b 100644
--- a/engines/prince/script.h
+++ b/engines/prince/script.h
@@ -229,6 +229,8 @@ private:
uint32 _currentString;
const char *_mode;
+ Flags _flagMap;
+
// Helper functions
uint32 step(uint32 opcodePC);
uint16 readScript16();
More information about the Scummvm-git-logs
mailing list