Community
SCI Programming => SCI Community How To's & Tutorials => Topic started by: miracle.flame on June 14, 2025, 03:02:35 PM
-
Maybe not so surprisingly we're working on LSL7 localization to Czech.
The manually typed "Other" verbs pose a challenge here, mostly because the words contain special accented characters which can't be typed naturally while playing. There is an idea to have each verb substituted with the same word unaccented and maybe also leave one untranslated for those following existing walkthroughs with English words. Even this cheesy solution is not so easily implemented because for example verbs Milk or Unzip don't have any substitutes in the pool while command for verb Masturbate has another four substitutes.
Is there a way.. maybe through modified script patch to extend pool for each command to have for example 5 slots for verb substitutes? That way 13.msg would not have 159 verbs but way more, that is five times each command. Would someone be willing to provide such a patch if possible?
-
The German version of lsl7 seems to contain extended characters in 13.msg. Perhaps that is a good starting point? Though, AFAIK we can't recompile SCI32 scripts, so it's probably going to be difficult to make changes.
-
The German version of lsl7 actually is a great starting point. They got 299 verbs in 13.msg instead of the original 159 so it means this can be done. If only I had an idea which file is responsible for extending the word list script-wise. The are three 1.pat, 3.pat and 4.pat which are patches I suppose but the same are part of the vanilla release. There are no scr files like it was with previous Larry games. They also managed to somehow get all the files in Ressci.000 and Resmap.000 to distribute the localization patch that way. I thought that's not entirely possible with the publicly available tools. Any hints?
-
Those .pat files should be audio instruments, not SCI "Patch" files.
I did a quick test with the English version, and in ScummVM extended characters are already supported (didn't test dosbox). You can try this by using SCIViewer to export 13.msg. Then open just the patch file in SCICompanion for editing.
I was able to add a 2nd word that matches for milk as m?lk. Just set the same Verb and Talker number and use the next available seq number.
-
Looks like this method works fine in DOSBox too. They likely made it so easy to modify for translation's sake.
-
Oh wow. I didn't know opening a single msg patch file in SCIC brings the editing interface to a whole new level. This solves everything! The most natural way to address this whole issue.
-
One question, if I open the file without loading a game in SC, it wants to export the file as message.013 instead of 13.msg. Renaming it on export worked in my test, but are there any significant differences in the message format or did they just change the naming convention?
-
The naming convention is bound to the fact that SCI 0.x could only handle up to 1000 resources of each type (000-999). I'm pretty sure messages came around after the switch to wider resource numbers.
The bigger issue is that there's at least three message format revisions in SCI 1.x alone. As far as I can tell, SCI 2 and 3 use the latest one from SCI 1.1, and that's the one that has the full verb noun case sequence talker thing seen in your screenshot. So you should be safe just renaming the file to 13.msg.
-
I'm pretty sure messages came around after the switch to wider resource numbers.
So should SC not suggest exporting them as .013? Completely trivial, of course
-
SCI 0 formats and naming patterns are just SCI Companion's default state. No game's been loaded to tell it otherwise.
-
Well I sorta knew it would be too easy. The modified file works well but only verbs with known positions are taken into consideration. Whichever newly added entry is not recognized in game. I'll test the German version if those extra positions can be used with translated verbs.
It would be most helpful to know what exactly controls the usage of 13.msg here.
-
Doomlazer's screenshot shows the extra item appear in the Other menu, and looking at this part of oPopupMenuHandler.sc (https://github.com/sluicebox/sci-scripts/blob/12c1ab894c4bd5fbf4157eb18a9e86653ec15d1b/lsl7-dos-1.01/src/oPopupMenuHandler.sc#L197) seems to imply the game tries to count how many entries there are.
Or something like that.
-
:D So it is this easy after all! Clumsy me had the older 13.msg in Patches dir taking priority.
You two realize that Czech localizations of these games wouldn't be what they are without you, don't you?
-
Well I certainly freakin' didn't until you had to say it!
(I jest, I jest...)
-
One question though, Doomlazer. How did you manage to type accented e (even these forums struggle with the encoding when trying to type it) in the game? It reacts to switching keyboard layout with alt+shift but the accented characters are not really typed in. There is some space inserted when typing them in but even if I write the word not minding that it doesn't look as expected the word is not recognized even though it is in the list.
-
If you type ' and e in that order and get an e-acute, you're using dead keys.
If you hold right-alt and type e, and that gets you an e-acute, you're using AltGr.
And then there's alt-0233, on the number pad, which is the value for e-acute in decimal.
And if you try to use dead keys but your system isn't set up to expect it, you get 'e instead, which is technically exactly what you typed, after all. And "m ' e l k" (five bytes/characters) is not the same as "m e-acute l k" (four bytes/chars). So of course if you type "m'elk" it's not gonna be recognized.
So Doomlazer, which was it?
-
I switched my keyboard to the French layout because I knew I could type [e acute] directly using the number 2 key. That's how I both edited the message patch and entered the commands in-game.
Take anther look at the German 13.msg because I noticed the encoding is different from my test with e-acute. The German extended characters are not what I'd expect to see in game or typed by the player. I should know the answer to this but my brain refuses to remember this or anything to do with codepages
-
You took a fourth option, right, lol.
As for encoding, is it the whole DOS 437 vs Windows 1252 codepage thing?
-
I feel like that has to be it. Wish my brain remembered more gooder. There was mention of alt-shift to switch keyboards. I have an option in my menu bar to switch between french and english. I always switch before launching scummvm or dosbox because I don't think they respect the change after launch. Maybe that's a contributing factor? I know you can dictate which keyboard is used in the config files.
As for other resources, you might like to connect with the French (https://www.abandonware-forums.org/forum/autres/les-aventuriers-de-la-traduction-perdue) and Spanish (https://abandonsocios.org/index.php?board=65.0) translation forums. I just use deepl to post on those, but I could provide a warm introduction to SCI translators if that would help. Lots of cool people on either site who might have some insight.
-
I was refreshing the page for days until I realized there won't be anything new on page one and I have to switch to page two.
German msg are using OEM850 or something like that to view them properly in Notepad++.
Right Alt plus e gives me (Euro symbol) on Czech KBL but I get the point of using AltGr.
ASCII typing with alt+0233 works but no one is gonna play like that.
So I take it you've typed the character normally like anyone would using the proper KB layout set. The thing is when I do the same, that is I launch the game in ScummVM while having CZ layout set, the game types quite puzzling characters and patterns:
1=+ (the only expected character for CZ layout)
2=2
3=3
4=4
5=5
6=6
7=?
8=Whitespace
9=Whitespace
0=Whitespace
So that's why I was asking how did you manage to type it? CZ characters in fon file have accented e on the same 0233 spot both in CZ and FR.
Seems to be more like a question what KB layout ScummVM thinks it's using?
I would very much like to get introduced to the right party and forum board at Abandonware Forums, I've registered as miracle.flame there. Could you please make the post there and send me the link, Doomlazer?
-
Another issue to keep in mind is that Alt-0233 means character 233 or 0xE9. That's e-acute in Unicode, Windows 1252, and ISO-8859-1 aka Latin-1. This is because Unicode's first 256 characters are quite literally in the same order as ISO-8859-1.
Codepage 850 (DOS Latin-1) has the e-acute at position 130 or 0x82. So does 437 (Latin-US), and a few other DOS codepages that use the Latin alphabet.
This is why recent SCI Companion has a feature to automatically map between DOS 437 and Windows 1252. You type 0xE9, it's automagically translated to and from 0x82.
-
In ScummVM, each game should have it's own language setting. Have you tried setting it to Czech (if that is an option)? In my test, I believe I left it set to english, but changing it might resolve the problems you're seeing. I'll check when I'm home from work and make sure I didn't set it to French or something. The language is usually deturmined in ScummVM by the detection table for each game, but should also be manually assignable.
As for Abandonware France, you need to post a few times before Direct Messages are enabled, so I'd recommend starting by posting a brief introduction in this thread (https://www.abandonware-forums.org/forum/forum-ltf-abandonware-france/le-bar-des-amis/17322-pr%C3%A9sentation-des-nouveaux-membres/page185#post902861).
The game translation sub-forum is here (https://www.abandonware-forums.org/forum/autres/les-aventuriers-de-la-traduction-perdue). Feel free also start a new thread there as well. I'm going to let my friend Theepwang know you've joined and see if they can bypass the post requirements for DMs.
Edit: looking at ScummVM with LSL7, I can't change the language - it's set by the detection tables (https://github.com/scummvm/scummvm/blob/82061bdd81e3769b0ef9094b81bc597c9eb03c50/engines/sci/detection_tables.h#L3914). That means a custom version of scummvm would be needed to change the setting to Czech. If it works in testing and the translation is completed, the Czech version could be submitted for inclusion in tables. Are you comfortable compiling a custom version of ScummVM?
-
Changing the game language in ScummVM was the first thing I've checked but it is fixed on English without an option to switch it. If I am comfortable to compile a custom build of ScummVM is a good question. I've never done that, not even tried MSYS2 so going through the docs was not very comfortable for me but I guess it's worth the shot when I have a fit-brain day... which is probably not today ;D but it will come and I'll let you know how my first attempt went.
I was trying to find a way how to post on the Intro board at the AW forums but couldn't. There are no other functional buttons besides Subscribe, not matter if I switch the forums to French or English language. Also strange is that opening My profile gives me "Sorry, you're not allowed to see this page." while I can actually configure the profile in another section. I am sure I have activated the account via e-mail activation link yesterday. No change today.
-
You guys use MSYS2 to compile your custom ScummVMs? /j
Anyway, with regards to how type a given character: on today's modern fully Unicode OSes, or at the very least modern Windows, the keyboard layout merely determines which characters you can type, and how. Pressing the "E" key doesn't tell the application to process "E", it tells the system you pressed a key with scancode 0x12. The system then determines from the layout you specified that scancode 0x12 means "E" and sends that to the focused application. Likewise, on a French layout, scancode 0x03 with no modifiers means e-acute, but for me an unmodified scancode 0x03 means "2". And on a Hungarian keyboard, the dedicated e-acute key is next to the "L" with scancode 0x27. For me, that's a semicolon.
But no matter if you use deadkeys, altgr, or a physical dedicated e-acute key, you're getting character U+00E9 and that's how it's understood.
However! I don't know how ScummVM's language settings are supposed to influence keyboard layouts. And even in the year of our Luigi 2025, there are applications that are not made Unicode-aware. Such as SCI Companion, which is violently non-Unicode! If you run it on your average American or Western European Latin alphabet using computer, it'll use the Win-1252 code page. If your system is set up to use Greek for non-Unicode applications (or you used AppLocale or its ilk to switch locales for just that application) it'll implicitly use Win-1253 instead, replacing the upper 128 characters and changing the meaning of the byte 0xE9 from e-acute (U+00E9) to lowercase kappa (U+03BA).
And if you set it to Japanese and disable the DOS to Windows remap feature in SCI Companion, it can correctly show and edit the text for PC-98 Police Quest II. Isn't that wild.
-
I used these instructions (https://wiki.scummvm.org/index.php?title=Compiling_ScummVM/Visual_Studio) and Visual Studio 2019 to compile. It's a bit of a process for me, but the wiki did provide enough info to work through it.
Do you not have the "Envoiyer la reponse" button (see attached)? If not I'll ping one of the admins to look into it.
And if you set it to Japanese and disable the DOS to Windows remap feature in SCI Companion, it can correctly show and edit the text for PC-98 Police Quest II. Isn't that wild.
That is pretty cool.
-
I have realized there is no way for me to get the desired characters in game. Even typing Alt+0233 actually types 0233 and one bonus whitespace as a result of the combo I guess. Typing Alt+0100 types 0100d though.
As for the AW forums, this is how I have it.
-
I'm asking how to get that forums issue fixed.
Did you see there is a polish (https://github.com/scummvm/scummvm/blob/82061bdd81e3769b0ef9094b81bc597c9eb03c50/engines/sci/detection_tables.h#L3914) version of LSL7 in the Scummvm detection tables. Says GOG.com release, but is it an official Sierra release? Pardon my ignorance, but is the character set similar to Czech? If they were able to do it, I'd imaging it must be possible somehow.
-
Polish is using the same cp1250 as Czech so it should work. What exactly is the snippet in detection tables indicating and how can this be used for our profit?
-
Eventually, you'd create a separate entry for the translation, but for testing I'd suggest changing this line (https://github.com/scummvm/scummvm/blob/82061bdd81e3769b0ef9094b81bc597c9eb03c50/engines/sci/detection_tables.h#L3865C3-L3865C17) in the English LSL7 from "Common::EN_ANY" to the Czech language identifier; would need to verify what that is exactly, but probably something like CZ_CZH. That should cause the english version lsl7 to set the lang as Czech when added to ScummVM.
Edit: Looks like it is actually CS_CZE (https://github.com/scummvm/scummvm/blob/191b7c8b284f15ead21c358394f20f4f7deb2b5c/common/language.cpp#L62).
FYI, for the full detection table entry, you'll probably want to add the MD5 hash for the PATCHES/13.msg as well as the english resmap.000 & ressci.000 to distinguish it from the english version. Wouldn't want to do that during testing/development though because every time 13.msg changes, it would require recompile of the custom scummvm.exe
// Larry 7 - English DOS CD (from spookypeanut)
// SCI interpreter version 3.000.000
{"lsl7", "", {
{"resmap.000", 0, "eae93e1b1d1ccc58b4691c371281c95d", 8188},
{"ressci.000", 0, "89353723488219e25589165d73ed663e", 66965678},
AD_LISTEND},
Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL7 },
// Larry 7 - Czech DOS CD (fan translation by miracle.flame)
// SCI interpreter version 3.000.000
{"lsl7", "", {
{"resmap.000", 0, "eae93e1b1d1ccc58b4691c371281c95d", 8188},
{"ressci.000", 0, "89353723488219e25589165d73ed663e", 66965678},
{"PATCHES/13.msg", 0, "xxxxxxxxxxxxxxxxxxxxxxxxxxxx", xxxx},
AD_LISTEND},
Common::CS_CZE, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL7 },
You use scummvm.exe from the command line to generate the MD5 information (https://docs.scummvm.org/en/v2.6.1/advanced_topics/command_line.html#:~:text=%2D%2D-,md5,-Shows%20MD5%20hash).
c:\scummvm.exe --md5 --md5-path=path/to/13.msg --md5-engine=SCI
-
Sorry for the inconvenience here but I have received another activation e-mail which results in failed activation, asking me to use activation form instead entering an activation code. When I do that it basically throws the same error about invalid address with suggestion to use this same procedure instead. The activation e-mail says the identifier is miracle.flame and not an e-mail address. Might as well forget about this altogether.
Thank you for the extra info for compilation. I won't be here for the weekend so I might respond way later when I get my hands to trying the compilation.
-
Looks like you might be able to email that administrator at the link in the error message the key and they would activate the account, but I understand if you're done.
Here's a little tip about compiling a custom version of ScummVM. The official exe is like 180MB and takes a long time to compile because of all the different engines. Since you only need SCI engine, you can exclude everything else. When you get to the build create_project step (https://wiki.scummvm.org/index.php?title=Compiling_ScummVM/Visual_Studio#Building_create_project), instead of running dists/msvc/create_msvc.bat, do this:
CD to "dists\msvc", then run the command ".\create_project ..\.. --msvc --disable-all-engines --enable-engine=sci32". This will disable all engines, then enable only SCI & SCI32. You can see in the output below how much we're excluding.
C:\GitHub\scummvm\dists\msvc>.\create_project ..\.. --msvc --disable-all-engines --enable-engine=sci32
Feature ENet networking support is disabled as unused by enabled engines
Feature libgif support is disabled as unused by enabled engines
Feature HNM is disabled as unused by enabled engines
Feature Dear ImGui based debugger is disabled as unused by enabled engines
Feature Indeo 3 is disabled as unused by enabled engines
Feature Indeo 4&5 is disabled as unused by enabled engines
Feature Lua is disabled as unused by enabled engines
Feature VP8/VP9 decoding support is disabled as unused by enabled engines
Feature Theora decoding support is disabled as unused by enabled engines
Feature Musepack support is disabled as unused by enabled engines
Feature MPEG-2 support is disabled as unused by enabled engines
Feature QDM2 is disabled as unused by enabled engines
Feature SID audio is disabled as unused by enabled engines
Feature Sorenson Video 1 is disabled as unused by enabled engines
Feature TinyGL is disabled as unused by enabled engines
Feature External Tracker Libraries is disabled as unused by enabled engines
Feature VGMTrans Soundfont audio is disabled as unused by enabled engines
Disabling MikMod and OpenMPT because Universal Tracker playback is unused by enabled engines
Enabled engines:
SCI
SCI32 games
Disabled engines:
SCUMM
v7 & v8 games
HE71+ games
Access
ADL
AGI
AGOS
AGOS 2 games
Adventure Game Studio
American Laser Games
Sanitarium
Lord Avalot d'Argent
Another World
BAGEL
Beavis and Butthead in Virtual Stupidity
Blade Runner
The Journeyman Project 2: Buried in Time
CGE
CGE2
Chamber
Chewy: Esc from F5
Cinematique evo 1
Magic Composer
CRAB
Cinematique evo 2
Lost Eden
Cryo Omni3D games
Versailles 1685
Darkseed
Dynamix Game Development System
Macromedia Director
Dungeon Master
Dragon History
Blazing Dragons
Drascula: The Vampire Strikes Back
Dreamweb
Escape From Hell
Freescape
Glk Interactive Fiction games
UFOs
Gobli*ns
Got
The Griffon Legend
Grim
Escape from Monkey Island
Groovie
Groovie 2 games
Hades Challenge
Hyperspace Delivery Boy!
Hopkins FBI
Hpl1
Hugo Trilogy
Hypnotix Inc.
In Cold Blood
Illusions Engine
The Immortal
Kingdom: The Far Reaches
Kyra
Lands of Lore
Eye of the Beholder
Labyrinth of Time
The Last Express
Lilliput
Lure of the Temptress
M4
MacVenture
MADE
MADS
MADS V2
Media Station
Might and Magic
Might and Magic 1
Might and Magic Xeen
Mohawk
Where in Time is Carmen Sandiego?
Riven: The Sequel to Myst
Myst
Myst ME
Mortevielle
mTropolis
Mutation of JB
Myst 3
Nancy Drew
Neverhood
Nikita Game Interface
Parallaction
The Journeyman Project: Pegasus Prime
Red Comrades
Pink Panther
Playground 3D: the testing and playground environment for 3d renderers
Plumbers Don't Wear Ties
The Prince and The Coward
Private Eye
QD Engine
Flight of the Amazon Queen
SAGA
IHNM
SAGA2
The Lost Files of Sherlock Holmes
Beneath a Steel Sky
Sludge
The Longest Journey
Star Trek 25th Anniversary/Judgment Rites
Mission Supernova
Broken Sword
Broken Sword II
Broken Sword 2.5
Teen Agent
TestBed: the Testing framework
Tetraedge
Tinsel
Starship Titanic
3 Skulls of the Toltecs
Tony Tough and the Night of Roasted Moths
Toonstruck
Touche: The Adventures of the Fifth Musketeer
Trecision Adventure Module
TsAGE
Ringworld: Revenge of the Patriarch
Blue Force
Return to Ringworld
Bud Tucker in Double Trouble
Little Big Adventure
Thimbleweed Park
Ultima
Ultima I - The First Age of Darkness
Ultima IV - Quest of the Avatar
Ultima VI = The False Prophet
Ultima VIII - Pagan
V-Cruise
Voyeur
WAGE
The Watchmaker
Wintermute
Wintermute3D
FoxTail
HeroCraft
Z-Vision
Enabled features:
zlib (compression) support
libmad (MP3) support
BiDi support
Ogg support
Vorbis support
FLAC support
libpng support
FreeType support
libjpeg support
FluidSynth support
libcurl support
SDL_net support
Bink video support
Scalers
HQ scalers
Edge scalers
Aspect ratio correction
16bit color support
3D rendering
high resolution
integrated MT-32 emulator
IA-32 assembly support
OpenGL support
OpenGL support (classic) in 3d games
OpenGL support (shaders) in 3d games
Taskbar integration support
Cloud integration support
Translation support
System dialogs support
System language detection support
Text to speech support
include resources (e.g. engine data, fonts) into the binary
Include detection objects for all engines
Static linking of detection objects for engines.
FM-TOWNS/PC98 audio
MIDI synthesis
Disabled features:
Tremor support
libgif support
AAC support
libmikmod support
libopenmpt support
MPEG-2 support
Theora decoding support
VP8/VP9 decoding support
FluidLite support
Discord support
RetroWave OPL3 support
ATSC A/52 support
Musepack support
ENet networking support
Virtual keyboard support
Event recorder support
Updates support
Text console debugger
HNM
Dear ImGui based debugger
Indeo 3
Indeo 4&5
Lua
QDM2
SID audio
Sorenson Video 1
TinyGL
External Tracker Libraries
VGMTrans Soundfont audio
Building against SDL 2.0
Visual Studio 16 detected
Now open scummvm.sln in visual studio, update the scummvm detection tables and compile!
-
Ugh, Since I already have everything setup, I built a custom scummvm.exe that identifies the English CD version as Czech and it still has the same issue (See pic).
Edit: Strange that 1, 8, 9, 0 (maybe more) input the correct Czech characters for me, but 2-7 do not.
Furthermore, your previous comment (https://sciprogramming.com/community/index.php?topic=9286.msg76359#msg76359) says you got whitespaces for 8, 9, & 0. When I try the vanilla English LSL7 CD version with a Czech keyboard I get the same correct and incorrect values as I do with my pseudo 'Czech' game - no whitespaces.
I tried the same with a polish keyboard and couldn't produce any accented characters, in or out of of game, with the "polish programmers keyboard" win10 installed. Just an observation that pol and cze seem significantly different in my experience.
There must be a clue in why 2-7 don't map correctly; and another in why you see whitespaces 8-0 and I don't.
-
Oh wow, you are way ahead already and saved me troubles with compiling that custom ScummVM.
I can explain why you can see the the actual character instead of whitespaces. We have had our localization and fonts adapted for cp1250 but then thanks to the German files we've tried to work with OEM852 instead and now we can see the the same results as you are in ScummVM. And if DosBox is configured to use CZ keyboard we can type all characters normally there.
So we are half way there, now it's just about making ScummVM compatible with CZ keyboard layout which is probably not the same as Polish although they use the same codepage 1250.
-
That's great it's working in DOSBox. Do you think you'll find a solution for ScummVM as well?
I got word that the Abandonware France mods fixed the account if you'd like to try again.
-
Might be way off on this, but are there any other Czech ScummVM games besides Teen Agent? Could the Czech Lang scummvm input be bugged?
I believe you've translated most of the LSL SCI games, so is it seems unlikely. Could it be only a SCI32 scummvm issue?
-
There's some code in ScummVM to support Polish games (I guess fan translations), but none for Czech. It is not enough for ScummVM to have a constant in the Common namespace. I suppose the effort needed would be similar to Polish.
-
You're right, polish support was add as a series of commits (https://github.com/scummvm/scummvm/commits/master/engines/sci/event.cpp) back in 2019 between Dec 25 & 27.
Looks like it might require using ALT keys. It would be preferable to just fix the incorrect 2-5 keys