diff options
Diffstat (limited to 'engines/sci/engine/kernel.cpp')
| -rw-r--r-- | engines/sci/engine/kernel.cpp | 31 | 
1 files changed, 26 insertions, 5 deletions
| diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index 13a836ab77..68a09e9935 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -905,11 +905,6 @@ void Kernel::loadKernelNames(GameFeatures *features) {  		} else {  			// Normal SCI2.1 kernel table  			_kernelNames = Common::StringArray(sci21_default_knames, kKernelEntriesSci21); - -			// Used by script patcher to remove CPU spinning on kGetTime -			if (g_sci->getGameId() == GID_HOYLE5) { -				_kernelNames[0x4f] = "Wait"; -			}  		}  		break; @@ -936,6 +931,32 @@ void Kernel::loadKernelNames(GameFeatures *features) {  		break;  	} +#ifdef ENABLE_SCI32 +	// Reserve a high range of kernel call IDs (0xe0 to 0xef) that can be used +	// by ScummVM to improve integration and fix bugs in games that require +	// more help than can be provided by a simple script patch (e.g. spinloops +	// in Hoyle5). +	// Using a new high range instead of just replacing dummied kernel calls in +	// the normal kernel range is intended to avoid any conflicts with fangames +	// that might try to add their own kernel calls in the same manner. It also +	// helps to separate ScummVM interpreter's kernel calls from SSCI's standard +	// kernel calls. +	if (getSciVersion() >= SCI_VERSION_2) { +		const uint kernelListSize = _kernelNames.size(); +		_kernelNames.resize(0xe2); +		for (uint id = kernelListSize; id < 0xe0; ++id) { +			_kernelNames[id] = "Dummy"; +		} + +		// Used by Hoyle5 script patches to remove CPU spinning on kGetTime +		// (this repurposes the existing SCI16 kWait call that was removed in SCI32) +		_kernelNames[kScummVMWaitId] = "Wait"; + +		// Used by GuestAdditions to support integrated save/load dialogue +		_kernelNames[kScummVMSaveLoadId] = "ScummVMSaveLoad"; +	} +#endif +  	mapFunctions();  } | 
