aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlukaslw2014-06-19 14:53:56 +0200
committerlukaslw2014-06-22 20:09:18 +0200
commitdaf91dcf74e63e7f38ce2d794cf51f36e52387dd (patch)
tree1cc0228570ecf104d3eb8199cfc0db08587a9646
parent25f51bfb8223044a6cb7766a8ab361106b9923fc (diff)
downloadscummvm-rg350-daf91dcf74e63e7f38ce2d794cf51f36e52387dd.tar.gz
scummvm-rg350-daf91dcf74e63e7f38ce2d794cf51f36e52387dd.tar.bz2
scummvm-rg350-daf91dcf74e63e7f38ce2d794cf51f36e52387dd.zip
PRINCE: Inventory LMB update, VariaTxt::getString fix
-rw-r--r--engines/prince/prince.cpp54
-rw-r--r--engines/prince/script.cpp29
-rw-r--r--engines/prince/script.h1
-rw-r--r--engines/prince/variatxt.cpp8
4 files changed, 66 insertions, 26 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp
index bda91af137..ae07bebfad 100644
--- a/engines/prince/prince.cpp
+++ b/engines/prince/prince.cpp
@@ -883,15 +883,6 @@ void PrinceEngine::showTexts(Graphics::Surface *screen) {
}
int leftBorderText = 6;
- /*
- if (text._x + wideLine / 2 > _picWindowX + kNormalWidth - leftBorderText) {
- text._x = _picWindowX + kNormalWidth - leftBorderText - wideLine / 2;
- }
-
- if (text._x - wideLine / 2 < _picWindowX + leftBorderText) {
- text._x = _picWindowX + leftBorderText + wideLine / 2;
- }
- */
if (text._x + wideLine / 2 > kNormalWidth - leftBorderText) {
text._x = kNormalWidth - leftBorderText - wideLine / 2;
}
@@ -902,7 +893,7 @@ void PrinceEngine::showTexts(Graphics::Surface *screen) {
for (uint8 i = 0; i < lines.size(); i++) {
int x = text._x - getTextWidth(lines[i].c_str()) / 2;
- int y = text._y - (lines.size() - i) * (_font->getFontHeight());
+ int y = text._y - (lines.size() - i) * (_font->getFontHeight()); // to fix
if (x < 0) {
x = 0;
}
@@ -1673,7 +1664,10 @@ void PrinceEngine::leftMouseButton() {
//_script->_scriptInfo.stdUse;
} else {
debug("selectedMob: %d", _selectedMob);
- _script->scanMobEvents(_mobList[_selectedMob]._mask, _room->_itemUse);
+ int mobEvent = _script->scanMobEventsWithItem(_mobList[_selectedMob - 1]._mask, _room->_itemUse, _selectedItem);
+ if (mobEvent == -1) {
+
+ }
}
}
@@ -1723,7 +1717,20 @@ void PrinceEngine::inventoryLeftMouseButton() {
//do_option
} else {
//use_item_on_item
+ int invObjUU = _script->scanMobEventsWithItem(_invMobList[_selectedMob - 1]._mask, _script->_scriptInfo.invObjUU, _selectedItem);
+ if (invObjUU == -1) {
+ int textNr = 11;
+ if (_selectedItem == 31 || _invMobList[_selectedMob - 1]._mask == 31) {
+ textNr = 20;
+ }
+ printAt(0, 216, _variaTxt->getString(textNr), kNormalWidth / 2, 100);
+ //loadVoice(0, 28, Common::String::format("%05d-00.WAV", text));
+ //playSample(28, 0);
+ } else {
+ //store_new_pc
+ // storeNewPC();
+ }
}
} else {
return;
@@ -1731,7 +1738,7 @@ void PrinceEngine::inventoryLeftMouseButton() {
}
//do_option
if (_optionEnabled == 0) {
- int invObjExamEvent = _script->scanMobEvents(_selectedMob, _script->_scriptInfo.invObjExam);
+ int invObjExamEvent = _script->scanMobEvents(_invMobList[_selectedMob - 1]._mask, _script->_scriptInfo.invObjExam);
if (invObjExamEvent == -1) {
// do_standard
printAt(0, 216, _invMobList[_selectedMob - 1]._examText.c_str(), kNormalWidth / 2, _invExamY);
@@ -1751,12 +1758,12 @@ void PrinceEngine::inventoryLeftMouseButton() {
}
} else if (_optionEnabled == 1) {
// not_examine
- int invObjUse = _script->scanMobEvents(_selectedMob, _script->_scriptInfo.invObjUse);
+ int invObjUse = _script->scanMobEvents(_invMobList[_selectedMob - 1]._mask, _script->_scriptInfo.invObjUse);
if (invObjUse == -1) {
// do_standard_use
_selectedMode = 0;
- _selectedItem = _selectedMob;
- makeInvCursor(_selectedMob);
+ _selectedItem = _invMobList[_selectedMob - 1]._mask;
+ makeInvCursor(_invMobList[_selectedMob - 1]._mask);
_currentPointerNumber = 2;
changeCursor(2);
//exit_normally
@@ -1772,14 +1779,27 @@ void PrinceEngine::inventoryLeftMouseButton() {
// not_use_inv
// do_standard_give
_selectedMode = 1;
- _selectedItem = _selectedMob;
- makeInvCursor(_selectedMob);
+ _selectedItem = _invMobList[_selectedMob - 1]._mask;
+ makeInvCursor(_invMobList[_selectedMob - 1]._mask);
_currentPointerNumber = 2;
changeCursor(2);
//exit_normally
} else {
// use_item_on_item
+ int invObjUU = _script->scanMobEventsWithItem(_invMobList[_selectedMob - 1]._mask, _script->_scriptInfo.invObjUU, _selectedItem);
+ if (invObjUU == -1) {
+ int textNr = 11;
+ if (_selectedItem == 31 || _invMobList[_selectedMob - 1]._mask == 31) {
+ textNr = 20;
+ }
+ printAt(0, 216, _variaTxt->getString(textNr), kNormalWidth / 2, 100);
+ //loadVoice(0, 28, Common::String::format("%05d-00.WAV", text));
+ //playSample(28, 0);
+ } else {
+ //store_new_pc
+ // storeNewPC();
+ }
}
//exit_normally
_selectedMob = 0;
diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp
index 5c81ee682c..a8efe71ca8 100644
--- a/engines/prince/script.cpp
+++ b/engines/prince/script.cpp
@@ -212,10 +212,10 @@ int Script::scanMobEvents(int mobMask, int dataEventOffset) {
int32 code;
do {
mob = (int)READ_UINT16(&_data[dataEventOffset + i * 6]);
- debug("mob: %d", mob);
- code = (int)READ_UINT32(&_data[dataEventOffset + i * 6 + 2]);
- debug("code: %d", code);
if (mob == mobMask) {
+ code = (int)READ_UINT32(&_data[dataEventOffset + i * 6 + 2]);
+ debug("mob: %d", mob);
+ debug("code: %d", code);
return code;
}
i++;
@@ -223,6 +223,29 @@ int Script::scanMobEvents(int mobMask, int dataEventOffset) {
return -1;
}
+int Script::scanMobEventsWithItem(int mobMask, int dataEventOffset, int itemNr) {
+ debug("mobMask: %d", mobMask);
+ int i = 0;
+ int16 mob;
+ int16 item;
+ int32 code;
+ do {
+ mob = (int)READ_UINT16(&_data[dataEventOffset + i * 8]);
+ if (mob == mobMask) {
+ item = (int)READ_UINT16(&_data[dataEventOffset + i * 8 + 2]);
+ if (item == itemNr) {
+ code = (int)READ_UINT32(&_data[dataEventOffset + i * 8 + 4]);
+ debug("mob: %d", mob);
+ debug("item: %d", item);
+ debug("code: %d", code);
+ return code;
+ }
+ }
+ i++;
+ } while (mob != -1);
+ return -1;
+}
+
void Script::installSingleBackAnim(Common::Array<BackgroundAnim> &_backanimList, int offset) {
BackgroundAnim newBackgroundAnim;
diff --git a/engines/prince/script.h b/engines/prince/script.h
index 489647ad91..4a7316c9d5 100644
--- a/engines/prince/script.h
+++ b/engines/prince/script.h
@@ -140,6 +140,7 @@ public:
bool loadAllMasks(Common::Array<Mask> &maskList, int offset);
int scanMobEvents(int mobMask, int dataEventOffset);
+ int scanMobEventsWithItem(int mobMask, int dataEventOffset, int item);
const char *getString(uint32 offset) {
return (const char *)(&_data[offset]);
diff --git a/engines/prince/variatxt.cpp b/engines/prince/variatxt.cpp
index 4270444793..fdca8c2c77 100644
--- a/engines/prince/variatxt.cpp
+++ b/engines/prince/variatxt.cpp
@@ -42,15 +42,11 @@ bool VariaTxt::loadFromStream(Common::SeekableReadStream &stream) {
return true;
}
-const char * VariaTxt::getString(uint32 stringId) {
- uint32 stringOffset = READ_LE_UINT32(_data + stringId);
-
+const char *VariaTxt::getString(uint32 stringId) {
+ uint32 stringOffset = READ_LE_UINT32(_data + stringId * 4);
if (stringOffset > _dataSize) {
assert(false);
}
-
- debug("VariaTxt::getString %04X %04X", stringId, stringOffset);
-
return (const char *)_data + stringOffset;
}