[Scummvm-tracker] [ScummVM :: Bugs] #17198: AGI: Add German extended-character input support (ä/ö/ü/ß)

ScummVM :: Bugs trac at scummvm.org
Tue Sep 15 17:32:05 UTC 2026


#17198: AGI: Add German extended-character input support (ä/ö/ü/ß)
----------------------------+------------------------------------
Reporter:  Cologran         |      Owner:  (none)
    Type:  feature request  |     Status:  new
Priority:  normal           |  Component:  Engine: AGI
 Version:                   |   Keywords:  german fan translation
    Game:  King's Quest 1   |
----------------------------+------------------------------------
 Hello,

 I am working on a complete German fan translation of the AGI version of
 King's Quest I (DOS 2.0F / AGI 2.917).

 The translation itself is already playable in ScummVM. The remaining
 limitation is German extended-character input in the AGI parser.
 Displaying German characters is not the main problem; parser input such as

     öffne tür
     sprich mit könig
     nimm schlüssel

 currently cannot be handled by an AGI game detected/configured as German
 in the same way as French extended input.

 ScummVM already has most of the infrastructure needed for this:

 * AGI automatically detects and loads `words.tok.extended` when it is
 present (since PR #7084 / commit
 f490e6ac4a5f7e8f5c14a99de52927dce3c48390).
 * The extended dictionary supports bytes above 0x7f.
 * `TextMgr::promptKeyPress()` and `TextMgr::stringKeyPress()` already
 allow 8-bit input for languages such as French, Russian and Hebrew.
 * `keyboard.cpp` already converts French ISO-8859-1 keyboard input to the
 DOS character set used by AGI.

 German currently falls through the normal AGI input path, which limits
 accepted input to 7-bit characters. A small German-specific extension
 appears to be sufficient.

 Proposed behavior for `Common::DE_DEU`:

 1. Allow input bytes from 0x20 through 0xff in the AGI prompt/string input
 handlers.
 2. Convert the German ISO-8859-1 characters to their DOS/CP437-compatible
 byte values before the AGI parser sees them:

     ä  0xe4 -> 0x84
     ö  0xf6 -> 0x94
     ü  0xfc -> 0x81
     Ä  0xc4 -> 0x8e
     Ö  0xd6 -> 0x99
     Ü  0xdc -> 0x9a
     ß  0xdf -> 0xe1

 These byte positions are also compatible with the relevant DOS code pages
 for these German characters.

 The translation would ship an extended dictionary containing both native
 and ASCII aliases mapped to the same AGI word groups, for example:

     könig / koenig
     tür / tuer
     öffne / oeffne
     schlüssel / schluessel

 This keeps the traditional ASCII spellings working while allowing native
 German input.

 I have attached a minimal proposed patch touching only:

 * `engines/agi/text.cpp`
 * `engines/agi/keyboard.cpp`

 No loader changes are needed because current ScummVM already auto-detects
 `words.tok.extended`.

 Once the German KQ1 translation is finalized, I can also provide the final
 files/hashes for a German (`Common::DE_DEU`) detection entry. I would
 prefer to keep that detection entry separate until the translation data is
 stable.

 For reference, Sierra's later German SCI games use the same general
 approach: German parser vocabulary is stored using DOS extended
 characters. For example, the German Space Quest III vocabulary contains
 words such as `abwärts`, `aufhören`, `brücke`, `drücke`, `fülle` and
 `öffne`.

 Would this approach be acceptable for the AGI engine, or would you prefer
 the character conversion to be implemented through an existing/common
 code-page helper instead of a small language-specific switch?

 Thanks!
-- 
Ticket URL: <https://bugs.scummvm.org/ticket/17198>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM


More information about the Scummvm-tracker mailing list