diff options
author | Filippos Karapetis | 2012-07-05 13:58:04 +0300 |
---|---|---|
committer | Filippos Karapetis | 2012-07-05 13:58:43 +0300 |
commit | 4ced5ccf306450bc4b0bd6afd66b5bc7bec1e814 (patch) | |
tree | 26ff471b6713e243e6f107eae025b20fa81b0046 /engines | |
parent | fb215929efaefdf0b75521caab8a86e93181c5b2 (diff) | |
download | scummvm-rg350-4ced5ccf306450bc4b0bd6afd66b5bc7bec1e814.tar.gz scummvm-rg350-4ced5ccf306450bc4b0bd6afd66b5bc7bec1e814.tar.bz2 scummvm-rg350-4ced5ccf306450bc4b0bd6afd66b5bc7bec1e814.zip |
SCI: Handle calls from MessageState::outputString() to arrays
This happens during the intro of LSL6 hires (room 110)
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/engine/message.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/engines/sci/engine/message.cpp b/engines/sci/engine/message.cpp index cddd01e10c..a92d572d35 100644 --- a/engines/sci/engine/message.cpp +++ b/engines/sci/engine/message.cpp @@ -400,11 +400,21 @@ Common::String MessageState::processString(const char *s) { void MessageState::outputString(reg_t buf, const Common::String &str) { #ifdef ENABLE_SCI32 if (getSciVersion() >= SCI_VERSION_2) { - SciString *sciString = _segMan->lookupString(buf); - sciString->setSize(str.size() + 1); - for (uint32 i = 0; i < str.size(); i++) - sciString->setValue(i, str.c_str()[i]); - sciString->setValue(str.size(), 0); + if (_segMan->getSegmentType(buf.getSegment()) == SEG_TYPE_STRING) { + SciString *sciString = _segMan->lookupString(buf); + sciString->setSize(str.size() + 1); + for (uint32 i = 0; i < str.size(); i++) + sciString->setValue(i, str.c_str()[i]); + sciString->setValue(str.size(), 0); + } else if (_segMan->getSegmentType(buf.getSegment()) == SEG_TYPE_ARRAY) { + // Happens in the intro of LSL6, we are asked to write the string + // into an array + SciArray<reg_t> *sciString = _segMan->lookupArray(buf); + sciString->setSize(str.size() + 1); + for (uint32 i = 0; i < str.size(); i++) + sciString->setValue(i, make_reg(0, str.c_str()[i])); + sciString->setValue(str.size(), NULL_REG); + } } else { #endif SegmentRef buffer_r = _segMan->dereference(buf); |