diff options
Diffstat (limited to 'engines/bladerunner/ui/kia.cpp')
-rw-r--r-- | engines/bladerunner/ui/kia.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/engines/bladerunner/ui/kia.cpp b/engines/bladerunner/ui/kia.cpp index 3e9011e0c0..9ec9d686c0 100644 --- a/engines/bladerunner/ui/kia.cpp +++ b/engines/bladerunner/ui/kia.cpp @@ -599,6 +599,48 @@ void KIA::playImage(const Graphics::Surface &image) { _playerImage.convertToInPlace(screenPixelFormat()); } +const char *KIA::scrambleSuspectsName(const char *name) { + static char buffer[32]; + + unsigned char *bufferPtr = (unsigned char *)buffer; + const unsigned char *namePtr = (const unsigned char *)name; + + for (int i = 0 ; i < 6; ++i) { + if (_vm->_language == Common::RU_RUS && _vm->_russianCP1251) { + // Algorithm added by Siberian Studio in R4 patch + if (*namePtr >= 0xC0) { + unsigned char upper = *namePtr & 0xDF; + if (upper < 201) { + *bufferPtr++ = upper - 143; /* Map А-И to 1-9 */ + } else { + *bufferPtr++ = upper - 136; /* Map Й-Я to A-W */ + } + } else { + *bufferPtr++ = '0'; + } + } else { + if (Common::isAlpha(*namePtr)) { + char upper = toupper(*namePtr); + if ( upper < 'J' ) { + *bufferPtr++ = upper - 16; /* Map A-I to 1-9 */ + } else { + *bufferPtr++ = upper - 9; /* Map J-Z to A-Q */ + } + } else { + *bufferPtr++ = '0'; + } + } + if (*namePtr) { + ++namePtr; + } + if (i == 1) { + *bufferPtr++ = '-'; + } + } + *bufferPtr = 0; + return buffer; +} + void KIA::mouseDownCallback(int buttonId, void *callbackData) { KIA *self = (KIA *)callbackData; switch (buttonId) { |