diff options
| -rw-r--r-- | engines/sci/engine/vm.cpp | 13 | 
1 files changed, 11 insertions, 2 deletions
| diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp index 28e7484098..8ee60874ea 100644 --- a/engines/sci/engine/vm.cpp +++ b/engines/sci/engine/vm.cpp @@ -411,12 +411,21 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt  				printSendActions = false;  			} -			if (argc > 1) +			if (argc > 1) {  				// argc can indeed be bigger than 1 in some cases, and it seems correct  				// (i.e. we should skip that many bytes later on)... question is, why  				// does this occur? Could such calls be used to point to data after X bytes in the heap?  				// What are the skipped bytes in this case? -				warning("send_selector(): more than 1 parameter (%d) while modifying a variable selector", argc); +				// In SQ4CD, this occurs with the returnVal selector of object Sq4GlobalNarrator when the +				// game starts, and right after the narrator is heard (e.g. after he talks when examining +				// something) +				reg_t oldReg = *varp.getPointer(s->_segMan); +				reg_t newReg = argp[1]; +				warning("send_selector(): argc = %d while modifying variable selector " +						"%x (%s) of object %04x:%04x (%s) from %04x:%04x to %04x:%04x",  +						argc, selector, g_sci->getKernel()->getSelectorName(selector).c_str(), PRINT_REG(send_obj), +						s->_segMan->getObjectName(send_obj), PRINT_REG(oldReg), PRINT_REG(newReg)); +			}  			{  				CallsStruct call; | 
