diff options
author | Walter van Niftrik | 2009-08-17 23:11:25 +0000 |
---|---|---|
committer | Walter van Niftrik | 2009-08-17 23:11:25 +0000 |
commit | 2fc7660e43f581b811fdc979c25e8c87a17d1456 (patch) | |
tree | 69f5b902d11377ba8128121b37685ce8e093983b /engines | |
parent | 4a4ae3382501da9fbd9dc25f502336d55308ca5f (diff) | |
download | scummvm-rg350-2fc7660e43f581b811fdc979c25e8c87a17d1456.tar.gz scummvm-rg350-2fc7660e43f581b811fdc979c25e8c87a17d1456.tar.bz2 scummvm-rg350-2fc7660e43f581b811fdc979c25e8c87a17d1456.zip |
SCI: Fix kernel table for multilingual SCI01 games. Cleanup.
svn-id: r43497
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/engine/kernel.cpp | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index e5a4377d2d..09d342b7fe 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -33,11 +33,7 @@ namespace Sci { -/** The string used to identify the "unknown" SCI0 function for each game */ -#define SCRIPT_UNKNOWN_FUNCTION_STRING "[Unknown]" - // Default kernel name table -#define SCI0_KNAMES_WELL_DEFINED 0x6e #define SCI_KNAMES_DEFAULT_ENTRIES_NR 0x89 static const char *sci_default_knames[SCI_KNAMES_DEFAULT_ENTRIES_NR] = { @@ -782,32 +778,40 @@ reg_t *kernel_dereference_reg_pointer(EngineState *s, reg_t pointer, int entries } void Kernel::setDefaultKernelNames() { - bool isSci0 = (_resmgr->sciVersion() <= SCI_VERSION_0_LATE); - int offset = 0; - - _kernelNames.resize(SCI_KNAMES_DEFAULT_ENTRIES_NR + (isSci0 ? 4 : 0)); - for (int i = 0; i < SCI_KNAMES_DEFAULT_ENTRIES_NR; i++) { - // In SCI0, Platform was DoAvoider - if (!strcmp(sci_default_knames[i], "Platform") && isSci0) { - _kernelNames[i + offset] = "DoAvoider"; - continue; - } + _kernelNames = Common::StringList(sci_default_knames, SCI_KNAMES_DEFAULT_ENTRIES_NR); + + switch (_resmgr->sciVersion()) { + case SCI_VERSION_0_EARLY: + case SCI_VERSION_0_LATE: + // Insert SCI0 file functions after SetCursor (0x28) + _kernelNames.insert_at(0x29, "FOpen"); + _kernelNames.insert_at(0x2A, "FPuts"); + _kernelNames.insert_at(0x2B, "FGets"); + _kernelNames.insert_at(0x2C, "FClose"); + + // Function 0x55 is DoAvoider + _kernelNames[0x55] = "DoAvoider"; + + // Cut off unused functions + _kernelNames.resize(0x72); + break; - _kernelNames[i + offset] = sci_default_knames[i]; + case SCI_VERSION_01: + // Multilingual SCI01 games have StrSplit as function 0x78 + _kernelNames[0x78] = "StrSplit"; - // SCI0 has 4 extra functions between SetCursor (0x28) and Savegame - if (!strcmp(sci_default_knames[i], "SetCursor") && isSci0) { - _kernelNames[i + 1] = "FOpen"; - _kernelNames[i + 2] = "FPuts"; - _kernelNames[i + 3] = "FGets"; - _kernelNames[i + 4] = "FClose"; - offset = 4; - } - } + // Cut off unused functions + _kernelNames.resize(0x79); + break; - if (_resmgr->sciVersion() == SCI_VERSION_1_1) { - // HACK: KQ6CD calls unimplemented function 0x26 + case SCI_VERSION_1_1: + // KQ6CD calls unimplemented function 0x26 _kernelNames[0x26] = "Dummy"; + break; + + default: + // Use default table for the other versions + break; } } |