From 3c6639eb86e8328af84c190878b09c331fe4c1ac Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Sun, 20 Jun 2010 18:20:05 +0000 Subject: SCI: implemented kPalVary(reverse) for pharkas, although there is a bug somewhere, not working 100% svn-id: r50089 --- engines/sci/engine/kgraphics.cpp | 19 +++++++++++++++---- engines/sci/engine/message.cpp | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) (limited to 'engines/sci/engine') diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 090af4fb1f..1c69afc48a 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -647,7 +647,7 @@ reg_t kPalVary(EngineState *s, int argc, reg_t *argv) { case 0: { // Init GuiResourceId paletteId; uint16 ticks, stepStop; - int16 direction; + uint16 direction; if ((argc >= 3) && (argc <= 5)) { paletteId = argv[1].toUint16(); ticks = argv[2].toUint16(); @@ -661,9 +661,20 @@ reg_t kPalVary(EngineState *s, int argc, reg_t *argv) { } break; } - case 1: { // Unknown - warning("kPalVary(1) called with parameter %d (argc %d)", argv[1].toUint16(), argc); - break; + case 1: { // Reverse + int16 ticks, stepStop, direction; + + if ((argc >= 1) && (argc <= 4)) { + ticks = argc >= 2 ? argv[1].toUint16() : -1; + stepStop = argc >= 3 ? argv[2].toUint16() : 0; + direction = argc >= 4 ? argv[3].toSint16() : -1; + + int16 result = g_sci->_gfxPalette->kernelPalVaryReverse(ticks, stepStop, direction); + warning("kPalVary(reverse) called with ticks = %d, stop = %d, direction = %d", ticks, stepStop, direction); + return make_reg(0, result); + } else { + warning("kPalVary(1) called with parameter %d (argc %d)", argv[1].toUint16(), argc); + } } case 2: { // Get Current Step if (argc == 1) { diff --git a/engines/sci/engine/message.cpp b/engines/sci/engine/message.cpp index a4bde9b582..18e60eb521 100644 --- a/engines/sci/engine/message.cpp +++ b/engines/sci/engine/message.cpp @@ -380,7 +380,7 @@ void MessageState::outputString(reg_t buf, const Common::String &str) { if ((unsigned)buffer_r.maxSize >= str.size() + 1) { _segMan->strcpy(buf, str.c_str()); } else { - error("Message: buffer %04x:%04x invalid or too small to hold the following text of %i bytes: '%s'", PRINT_REG(buf), str.size() + 1, str.c_str()); + warning("Message: buffer %04x:%04x invalid or too small to hold the following text of %i bytes: '%s'", PRINT_REG(buf), str.size() + 1, str.c_str()); // Set buffer to empty string if possible if (buffer_r.maxSize > 0) -- cgit v1.2.3