[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