mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
SCUMM: introduce constants for _userState for cleaner and easier to understand code
This commit is contained in:
@@ -456,7 +456,7 @@ void ScummEngine_v0::drawSentenceObject(int object) {
|
||||
void ScummEngine_v0::drawSentenceLine() {
|
||||
_redrawSentenceLine = false;
|
||||
|
||||
if (!(_userState & 32))
|
||||
if (!(_userState & USERSTATE_IFACE_SENTENCE))
|
||||
return;
|
||||
|
||||
clearSentenceLine();
|
||||
@@ -627,22 +627,32 @@ void ScummEngine_v0::o_unlockRoom() {
|
||||
}
|
||||
|
||||
void ScummEngine_v0::setMode(byte mode) {
|
||||
int state = 0;
|
||||
int state;
|
||||
|
||||
_currentMode = mode;
|
||||
|
||||
switch (_currentMode) {
|
||||
case kModeCutscene:
|
||||
_redrawSentenceLine = false;
|
||||
state = 7;
|
||||
// Note: do not change freeze state here
|
||||
state = USERSTATE_SET_IFACE |
|
||||
USERSTATE_SET_CURSOR |
|
||||
USERSTATE_SET_FREEZE;
|
||||
break;
|
||||
case kModeKeypad:
|
||||
state = 23;
|
||||
_redrawSentenceLine = false;
|
||||
state = USERSTATE_SET_IFACE |
|
||||
USERSTATE_SET_CURSOR | USERSTATE_CURSOR_ON |
|
||||
USERSTATE_SET_FREEZE;
|
||||
break;
|
||||
case kModeNormal:
|
||||
case kModeNoNewKid:
|
||||
state = 247;
|
||||
state = USERSTATE_SET_IFACE | USERSTATE_IFACE_ALL |
|
||||
USERSTATE_SET_CURSOR | USERSTATE_CURSOR_ON |
|
||||
USERSTATE_SET_FREEZE;
|
||||
break;
|
||||
default:
|
||||
error("Invalid mode: %d", mode);
|
||||
}
|
||||
|
||||
setUserState(state);
|
||||
|
||||
+15
-12
@@ -993,7 +993,8 @@ void ScummEngine_v2::o2_drawSentence() {
|
||||
const byte *temp;
|
||||
int slot = getVerbSlot(VAR(VAR_SENTENCE_VERB), 0);
|
||||
|
||||
if (!((_userState & 32) || (_game.platform == Common::kPlatformNES && _userState & 0xe0)))
|
||||
if (!((_userState & USERSTATE_IFACE_SENTENCE) ||
|
||||
(_game.platform == Common::kPlatformNES && (_userState & USERSTATE_IFACE_ALL))))
|
||||
return;
|
||||
|
||||
if (getResourceAddress(rtVerb, slot))
|
||||
@@ -1303,7 +1304,7 @@ void ScummEngine_v2::o2_findObject() {
|
||||
int x = getVarOrDirectByte(PARAM_1) * V12_X_MULTIPLIER;
|
||||
int y = getVarOrDirectByte(PARAM_2) * V12_Y_MULTIPLIER;
|
||||
obj = findObject(x, y);
|
||||
if (obj == 0 && (_game.platform == Common::kPlatformNES) && (_userState & 0x40)) {
|
||||
if (obj == 0 && (_game.platform == Common::kPlatformNES) && (_userState & USERSTATE_IFACE_INVENTORY)) {
|
||||
if (_mouseOverBoxV2 >= 0 && _mouseOverBoxV2 < 4)
|
||||
obj = findInventory(VAR(VAR_EGO), _mouseOverBoxV2 + _inventoryOffset + 1);
|
||||
}
|
||||
@@ -1485,7 +1486,9 @@ void ScummEngine_v2::o2_cutscene() {
|
||||
VAR(VAR_CURSORSTATE) = 200;
|
||||
|
||||
// Hide inventory, freeze scripts, hide cursor
|
||||
setUserState(15);
|
||||
setUserState(USERSTATE_SET_IFACE |
|
||||
USERSTATE_SET_CURSOR |
|
||||
USERSTATE_SET_FREEZE | USERSTATE_FREEZE_ON);
|
||||
|
||||
_sentenceNum = 0;
|
||||
stopScript(SENTENCE_SCRIPT);
|
||||
@@ -1504,7 +1507,7 @@ void ScummEngine_v2::o2_endCutscene() {
|
||||
VAR(VAR_CURSORSTATE) = vm.cutSceneData[1];
|
||||
|
||||
// Reset user state to values before cutscene
|
||||
setUserState(vm.cutSceneData[0] | 7);
|
||||
setUserState(vm.cutSceneData[0] | USERSTATE_SET_IFACE | USERSTATE_SET_CURSOR | USERSTATE_SET_FREEZE);
|
||||
|
||||
if ((_game.id == GID_MANIAC) && !(_game.platform == Common::kPlatformNES)) {
|
||||
camera._mode = (byte) vm.cutSceneData[3];
|
||||
@@ -1570,24 +1573,24 @@ void ScummEngine_v2::o2_cursorCommand() { // TODO: Define the magic numbers
|
||||
}
|
||||
|
||||
void ScummEngine_v2::setUserState(byte state) {
|
||||
if (state & 4) { // Userface
|
||||
if (state & USERSTATE_SET_IFACE) { // Userface
|
||||
if (_game.platform == Common::kPlatformNES)
|
||||
_userState = (_userState & ~0xE0) | (state & 0xE0);
|
||||
_userState = (_userState & ~USERSTATE_IFACE_ALL) | (state & USERSTATE_IFACE_ALL);
|
||||
else
|
||||
_userState = state & (32 | 64 | 128);
|
||||
_userState = state & USERSTATE_IFACE_ALL;
|
||||
}
|
||||
|
||||
if (state & 1) { // Freeze
|
||||
if (state & 8)
|
||||
if (state & USERSTATE_SET_FREEZE) { // Freeze
|
||||
if (state & USERSTATE_FREEZE_ON)
|
||||
freezeScripts(0);
|
||||
else
|
||||
unfreezeScripts();
|
||||
}
|
||||
|
||||
if (state & 2) { // Cursor Show/Hide
|
||||
if (state & USERSTATE_SET_CURSOR) { // Cursor Show/Hide
|
||||
if (_game.platform == Common::kPlatformNES)
|
||||
_userState = (_userState & ~0x10) | (state & 0x10);
|
||||
if (state & 16) {
|
||||
_userState = (_userState & ~USERSTATE_CURSOR_ON) | (state & USERSTATE_CURSOR_ON);
|
||||
if (state & USERSTATE_CURSOR_ON) {
|
||||
_userPut = 1;
|
||||
_cursor.state = 1;
|
||||
} else {
|
||||
|
||||
@@ -303,6 +303,19 @@ struct SaveStateMetaInfos {
|
||||
uint32 playtime;
|
||||
};
|
||||
|
||||
enum UserStates {
|
||||
USERSTATE_SET_FREEZE = 0x01, // freeze scripts if USERSTATE_FREEZE_ON is set, unfreeze otherwise
|
||||
USERSTATE_SET_CURSOR = 0x02, // shows cursor if USERSTATE_CURSOR_ON is set, hides it otherwise
|
||||
USERSTATE_SET_IFACE = 0x04, // change user-interface (sentence-line, inventory, verb-area)
|
||||
USERSTATE_FREEZE_ON = 0x08, // only interpreted if USERSTATE_SET_FREEZE is set
|
||||
USERSTATE_CURSOR_ON = 0x10, // only interpreted if USERSTATE_SET_CURSOR is set
|
||||
USERSTATE_IFACE_SENTENCE = 0x20, // only interpreted if USERSTATE_SET_IFACE is set
|
||||
USERSTATE_IFACE_INVENTORY = 0x40, // only interpreted if USERSTATE_SET_IFACE is set
|
||||
USERSTATE_IFACE_VERBS = 0x80 // only interpreted if USERSTATE_SET_IFACE is set
|
||||
};
|
||||
|
||||
#define USERSTATE_IFACE_ALL (USERSTATE_IFACE_SENTENCE | USERSTATE_IFACE_INVENTORY | USERSTATE_IFACE_VERBS)
|
||||
|
||||
/**
|
||||
* A list of resource types.
|
||||
* WARNING: Do not change the order of these, as the savegame format relies
|
||||
|
||||
@@ -272,7 +272,7 @@ void ScummEngine_v2::checkV2MouseOver(Common::Point pos) {
|
||||
int i, x, y, new_box = -1;
|
||||
|
||||
// Don't do anything unless the inventory is active
|
||||
if (!(_userState & 64)) {
|
||||
if (!(_userState & USERSTATE_IFACE_INVENTORY)) {
|
||||
_mouseOverBoxV2 = -1;
|
||||
return;
|
||||
}
|
||||
@@ -368,7 +368,7 @@ void ScummEngine_v2::redrawV2Inventory() {
|
||||
|
||||
_mouseOverBoxV2 = -1;
|
||||
|
||||
if (!(_userState & 64)) // Don't draw inventory unless active
|
||||
if (!(_userState & USERSTATE_IFACE_INVENTORY)) // Don't draw inventory unless active
|
||||
return;
|
||||
|
||||
// Clear on all invocations
|
||||
@@ -432,7 +432,7 @@ void ScummEngine_v2::redrawV2Inventory() {
|
||||
}
|
||||
|
||||
void ScummEngine::redrawVerbs() {
|
||||
if (_game.version <= 2 && !(_userState & 128)) // Don't draw verbs unless active
|
||||
if (_game.version <= 2 && !(_userState & USERSTATE_IFACE_VERBS)) // Don't draw verbs unless active
|
||||
return;
|
||||
|
||||
int i, verb = 0;
|
||||
@@ -875,7 +875,7 @@ void ScummEngine_v0::checkExecVerbs() {
|
||||
|
||||
void ScummEngine::verbMouseOver(int verb) {
|
||||
// Don't do anything unless verbs are active
|
||||
if (_game.version <= 2 && !(_userState & 128))
|
||||
if (_game.version <= 2 && !(_userState & USERSTATE_IFACE_VERBS))
|
||||
return;
|
||||
|
||||
if (_game.id == GID_FT)
|
||||
|
||||
Reference in New Issue
Block a user