diff options
-rw-r--r-- | engines/sci/console.cpp | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index 6d04b82dc6..32db2e9d69 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -2802,10 +2802,49 @@ bool Console::cmdViewReference(int argc, const char **argv) { switch (_engine->_gamestate->_segMan->getSegmentType(reg.getSegment())) { #ifdef ENABLE_SCI32 case SEG_TYPE_ARRAY: { - debugPrintf("SCI32 array:\n"); - // TODO: Different prints for different types const SciArray *array = _engine->_gamestate->_segMan->lookupArray(reg); - hexDumpReg((reg_t *)array->getRawData(), array->size(), 4, 0, true); + const char *arrayType; + switch (array->getType()) { + case kArrayTypeID: + arrayType = "reg_t"; + break; + case kArrayTypeByte: + arrayType = "byte"; + break; + case kArrayTypeInt16: + arrayType = "int16"; + break; + case kArrayTypeString: + arrayType = "string"; + break; + default: + arrayType = "invalid"; + break; + } + debugPrintf("SCI32 %s array (%u entries):\n", arrayType, array->size()); + switch (array->getType()) { + case kArrayTypeID: + hexDumpReg((reg_t *)array->getRawData(), array->size(), 4, 0, true); + break; + case kArrayTypeByte: + case kArrayTypeString: { + Common::hexdump((byte *)array->getRawData(), array->size(), 16, 0); + break; + } + case kArrayTypeInt16: { + const int16 *data = (const int16 *)array->getRawData(); + for (int i = 0; i < array->size(); ++i) { + debugN("% 6d ", *data++); + if ((i % 8) == 0) { + debugN("\n"); + } + } + break; + } + default: + break; + } + break; } case SEG_TYPE_BITMAP: { |