Community
SCI Programming => SCI Development Tools => Topic started by: Collector on October 13, 2018, 09:39:47 PM
-
Rather than continuing to hijack the QfG1 EGA source thread I thought we could have a separate thread for the decompilation and archiving of the SCI game scripts.
Here is Iceman version 1.023, interpreter 0.000.668. It has two compile errors that I have yet to track down.
-
In my own fresh Iceman decompile, I see an --UNKNOWN-PROP-NAME-- in Feature.sc Act::canBeHere. Comparing this against SQ3, that should be ignAct.
The other error is in secondCoordsScript.sc secondCoordsScript::changeState: (13 (checkThrottle active: 1 value: 1 0))
From what I can tell, this should just be value: 1.
-
The other error is in secondCoordsScript.sc secondCoordsScript::changeState: (13 (checkThrottle active: 1 value: 1 0))
From what I can tell, this should just be value: 1.
This is a script bug, not a decompilation bug.
-
This is a script bug, not a decompilation bug.
Considering the PMachine code literally pushes those two values and a parameter count of two, I think I'd agree. Did I say it was a decompilation bug, though?
(13
; KAWA -- There was an extra push here making a mess of this case:
; (asm
; pushi #active
; push1
; push1
; pushi #value
; push2
; push1
; push0
; lofsa checkThrottle
; send 14
; )
; correctly decompiles to the uncompilable
; (checkThrottle active: 1 value: 1 0)
(checkThrottle active: 1 value: 1)
)
(Edit to correct asm annotation, had the lofsa and send switched around)
-
Here's my take on Iceman, with those two fixes and a bunch of renamed globals and procedures in Main and Print.
-
Added.
-
When I recompile KQ1, the remake of course, everything seems to work... until the portcullis is closed and I get handsOn.
Suddenly, Graham turns invisible (cyan outline) and the goat's there, trying to pathfind its way around the portcullis.
It's not one of my hacks that did it either -- I have an unaltered SCI Companion in the archives that ended up with the same thing. And a freshly-unzipped KQ1 doesn't do it either. So that's something to investigate before I bother to upload a copy of KQ1_v1.000.051_intS.old.010_SRC.zip
-
that was the next one I was thinking about.
-
Strange minds think alike.
-
Must be.
-
Here is my work on Quest for Glory II v1.102 (from GOG.com). I managed to write up a game.sh file to go with it, which lists all the skills, ego walk modes, and much of the event flags. Thanks go to Charles for the QFG1EGA code (which helped me identify procedures and global variables, and whose game.sh file I based mine off of) and OmerMor for some code snippets he posted previously. The scripts compile fine, with a few exceptions listed below.
Error: (CharSheet.sc) The rest modifier must be followed by a parameter name. Line: 27, col: 9
Error: (CharSheet.sc) The rest modifier must be followed by a parameter name. Line: 42, col: 9
Warning: (rm130.sc) Duplicate case values. Already encountered a case for '54' Line: 1003, col: 5
Error: (BoxSelector.sc) The rest modifier must be followed by a parameter name. Line: 32, col: 9
239 scripts compiled.
-
Interesting... that seems like a bug in the compiler, actually. It always assumes &rest is the last thing in a function call (not sure why), or is followed by a parameter name. But I guess this is valid usage.
I wonder how difficult this is to fix...
-
To work around it, you can replace
(procedure (SomeProc x y)
(Display &rest #at x y ....)
)
with
(procedure (SomeProc x y moreParams)
(Display &rest moreParams #at x y ....)
)
-
Here is my work on LSL1VGA. Some tweaks were made to allow the game to compile fully. I played though the entire game with no known issues (except maybe for sometimes freezing when entering the casino, but I think that's an original speed bug)
-
And now for something a little different...
Here is decompiled code for the QFG2 demo! So far, everything seems to run fine... up until the Iblis Unleashed scene, where it immediately crashes with an "Oops!" error!
By the way, I've been working on a new EGA template game, using the QFG2 demo as the foundation and the interpreter from the EGA 1990 Christmas Card (it's compatible with QFG2, and still has its internal debugger!). So far, things seem to work okay. I'll upload this template sometime soon.
-
So, an SCI01 template game?
-
Here is my work on QFG1VGA.
With the exceptions of a few scripts, everything seems to compile okay. I even enabled the hidden "Where to, Hero?" dialog at startup, so you can test each individual room!
I was thinking of doing a patch that would fix various script bugs in the game, and restore some unused messages and interactivity. This source could work well as the basis.
This code is best compiled without any SCR and HEP patch files in the directory, so you can be sure that the game only uses the RESOURCE files. The scripts, of course, were decompiled from the patches to ensure that all official bug fixes are present.
Here is the compile log:
Error: (WizardGame.sc) Duplicate label 'code_0448' Line: 145, col: 0
Error: (WizardGame.sc) Duplicate label 'code_0453' Line: 152, col: 0
Error: (inputBox.sc) Undeclared identifier '--UNKNOWN-PROP-NAME--' . Line: 1281, col: 32
Error: (egoFight.sc) Undeclared identifier '--UNKNOWN-PROP-NAME--' . Line: 332, col: 32
252 scripts compiled.
--------------------------------
Time elapsed: 7.56 seconds.
-
Here we go again, my new and improved decompile of QFG2! This time, I used 1.105 from the QFG Anthology, to be sure that I had the latest code. The only difference I could see is that the import patch was integrated into the resource files. The game seems to compile and run okay, but going into the actual game, it freezes when attempting to enter the maze of alleys! This might be a tough one for us to crack, but thankfully, "suck blue frog" and the EGA 1990 Christmas interpreter's internal debugger are there to help us.
Credit goes to Omer Mor for unearthing the original import and export scripts for the game. This helped me identify quite a bit of the original defines for the game, and the export script even has the original "saveHero" (which SCI Companion can't decompile).
-
Here is a decompile of the Slater and Charlie demo. Surprisingly, it has nearly all of the system scripts! Which is odd, since it's a demo version of an interactive storybook, and would have no use for all of them. So I nabbed the original system scripts from the SCI16 archive, adapted them for Companion, and compiled them. Everything seems to work okay.
The only script I couldn't adapt for Companion was SMOOPER, since it frequently uses equational defines, which Companion doesn't support.
-
The only script I couldn't adapt for Companion was SMOOPER, since it frequently uses equational defines, which Companion doesn't support.
Perhaps make a mention of this in the Companion thread for Phil?
-
Here are decompiles of the demos for SQ1VGA, PQ3, Conquests of the Longbow, and Ms. Astro Chicken. They seem to be good stock for a possible SCI1.0 template. Ms. Astro Chicken's main script even seems to have been largely taken from the full floppy version of SQ4!
-
Somewhat off-topic possibly, but I decided to look for the text in SQ4EGA (the alternate floppy version) that gives different text dialogue for the Monochrome Bikers on your appearance whether you're playing with the EGA, CGA, or Hercules Monochrome drivers. Strangely, while the VGA floppy version lists the text in the Display kernel function as strings right in the script (620), in the EGA version the string doesn't appear at all and just shows up as "LOOKUP_ERROR". Now, I haven't searched through all the TEXT resources yes to find the actual line if it wasn't a string like in the VGA floppy version, and I couldn't find if LOOKUP_ERROR was a mislabeled variable for a TEXT resource (it didn't seem to be defined in the 620 script), or if it's some kind of error that Companion returns on trying to decompile. Now, the fact that in the VGA floppy version it's a fixed string (not included in any TEXT resources, from what I can tell) and that in the EGA version it's possibly some kind of variable makes sense because it's based on what driver you're running.
Any ideas on how to find these text strings?
-
Decompilation error. The text is in the scripts like in the VGA version but it messes up. It's there in the script's string pool. The logic goes like this:
register 1:
global105 > 16: "Well, lookee here! If it ain't Mister Look-at-me-I'm-in-VGA."
else: "Well, lookee here! If it ain't Mister Look-at-me-I'm-in-EGA."
register 2: "Whatsamatter, monochrome not good enough for you?"
register 3:
global105 > 16: "What's dis? 256 colors all for one little bitmapped WIMP?! Whatta waste of VGA. Har, har!"
else: "What's dis? 16 colors all for one little bitmapped WIMP?! Whatta waste of EGA. Har, har!"
Even though by all means the EGA version should never have global105 be higher than 16.
-
And here we go again! A decompile of the Freddy Pharkas floppy demo! Everything compiles without error, and the game has been tested to completion without any problems that I could see.
-
Can't seem to stop... here are decompiles of both the demo and full game of the other SCI01 game, KQ1SCI!
Both compile without errors, and have been tested to completion.
-
Excellent.
-
Okay, here are some new decompiles for the QFG2 demo and Seasoned Professional. I have managed to put together a list of DoSound defines in the KERNEL.SH file that correspond to those games specifically. I'll have to implement those in the SCI01 template soon.
Also, Seasoned Professional has no VOCAB.900 file, making Companion crash when it attempts to decompile the User script. The required file is included in the archive, taken from the QFG2 demo.
4/9/2019 UPDATE: And here are new decompiles for Ms. Astro Chicken and the PQ3 demo! The DoSound defines closely match that of SCI1.1, so the only thing I really need to do is change them to Sierra's original names in the SCI1.0 template.
-
And here are decompiles of the Codename Iceman and Hero's Quest demos!
The tricky part here was that important VOCAB files were missing. Iceman had the Vocab.999 file (kernel function list), so that was used in both decompiles. Neither had the VOCAB.997 (selector list), so I had to use the one from the SCI0 version of Mixed-Up Mother Goose, which uses the same interpreter version (0.000.685, which is also the newest SCI0 interpreter).
With the exception of the DiceRm script, everything compiles and plays with no obvious issues.
-
I've done a bit of touch-up work on Eric's excellent QFG1EGA src (v3). A lot of minor changes:
- replaced all view reference numbers with defines
- replaced all OnControl and IllegalBits with defines
- replaced all EncRoom::entrances with defines
- replaced some StudioScript constants with SSCI constante (evKEYBOARD->keyDown, evJOYSTICK->direction)
- gave names to all default global variables
- renamed gCast, gRegions, gSounds, etc to their original SSCI names
- fixed the (= controls controls) bug I mentioned in another thread
- converted FLAGS to enum instead of individual defines
- converted all Btst, Bclr, Bset flags to use the enum constant instead of a number. If I didn't know what the flag did, i named it FLAG_#, to make it easier to search for and trace later
- added comments describing how the TrySkill and SkillUsed functions work
- added defines for certain hardcoded values, like Ogre, kobold, Brutus Max HP; and the skill level needed to solve certain puzzles
- I think that's the gist of it, but there were many little touches here and there so I may have missed mentioning something
It compiles, and I've done a quick play-through of a couple rooms without noticing any problems, but I haven't done an extensive start-to-finish run yet.
-
Made some more improvements:
- fixed two incorrect decompilation lines in rm171 (arenaBearChange)
- split game.sh into multiple headers
- manually decompiled Main.sc::EgoDead asm into Sierra Script (script 0)
- manually decompiled BoxSelector.sc::chAlloc::init asm into Sierra Script (script 203)
- manually decompiled TargetRange.sc::rm73::init asm into Sierra Script (script 73)
edit: fixed a variable name I copy/pasted incorrectly in arenaBearChange.sc, and fixed a long-standing bug in RandomEncounter.sc, where escaping from a fight sets Ego to Walk instead of Run.
-
Here is the decompile for the SQ6 demo! It includes a specific interpreter (taken from the SCI tools here (http://sciprogramming.com/community/index.php?topic=1631.msg9564#msg9564)) which has an internal debugger and no version stamp check. The latter part is important, as the original interpreter will refuse to run if the RESOURCE file has been modified, saying that it has not been version-stamped.
The game has been tested to completion, and seems like a good basis for a possible SCI32 template.
All of the system scripts are based from the newest SCI32 source from 10-12-1995, with the exceptions of:
ACTOR.SC (06-28-1995)
TALKER.SC (decompiled original)
MESSAGER.SC (decompiled original)
PLANE.SC (decompiled original)
DTEXT.SC (06-28-1995)
STYLER.SC (06-28-1995)
The reasons:
Plane causes the title bar to lose its custom font.
Talker is incompatible with the game, causing a "Not an Object" error when someone talks.
Messager is incompatible, as anyone talking just gives a small "ALT" character and no voice.
Actor and Styler are incompatible with the game, causing a "Not an Object" error at startup.
DText causes the ComPost text's lines to leak out of the ComPost screen.
With Actor, Styler, and DText, it was just a matter of using the earlier script revisions from June 1995, more closely matching the game's release.
On the other hand, Plane, Talker, and Messager appear to have been specially modified for SQ6's custom talker and messager, which, in turn, seem to be based on the ones for LSL6 hr-res (to the point that some views for LSL6 are hidden in the resource files!).
There's only one bug that I can find. Specifically, the game's icon bar stops working after closing the control panel. It seems to be a decompilation error in the icon bar's doit, which can't be decompiled and thus is in assembly. For this reason, I've intentionally prevented it from compiling until it can be fixed.
-
Very nice!
-
Here are some deconmpiles of the demos for Conquests of Camelot, QFG1VGA, PQ2, and the Fun Seeker's Guide!
They all fully compile and have been tested to completion. The only issue I found was a graphical error in the PQ2 demo; specifically, at the motel scene.
-
The only issue I found was a graphical error in the PQ2 demo; specifically, at the motel scene.
For a very long time the only available PQ2 demo was a corrupt copy.
In 2016 I managed to find a collector which had working copy (https://forums.scummvm.org/viewtopic.php?p=83298#83298), and now you can find it here:
https://www.scummvm.org/frs/demos/sci/pq2-dos-ni-demo-en.zip (https://www.scummvm.org/frs/demos/sci/pq2-dos-ni-demo-en.zip)
-
Oh oh oh oh!
-
Regarding PQ2demo's graphical error: No, it's actually related to the SWAT team arriving at the motel. One cop erases part of the police car. I think it's related to a decompilation error in the "swatArrives" script.
In any case, here's more decompiles! They are of the demos for LSL2, The Colonel's Bequest, SQ3, and Astro Chicken. All have been tested to completion.
-
Here's another one: the Gabriel Knight 1 demo. It seems to have been based off a beta version of the game, judging by the large amount of placeholder messages and the fact that it uses SCI1.1 rather than SCI2 like the full game does. Expect some bugs, but thankfully there are only two asm blocks (in proc211_0 and QScript). There's the needed script and interpreter to debug this thing.
I wonder why the demos for GK1, QFG4, and PQ4 used SCI1.1 instead of SCI2? My guess is that the 32-bit engine was not yet ready to be used, so the designers used the older 16-bit engine during development, then ported it to SCi2 when the full games were completed.
-
I wonder why the demos for GK1, QFG4, and PQ4 used SCI1.1 instead of SCI2? My guess is that the 32-bit engine was not yet ready to be used, so the designers used the older 16-bit engine during development, then ported it to SCi2 when the full games were completed.
Well, things like the polygon editor do not work in SCI2. If you try, you're told to use SCI16 (i.e. SCI1.1), so they definitely had to use it for some things. And we all know how buggy QfG4 was on release (we are getting script patches for the QfG4 bugs in ScummVM, but the number of patches is crazy).
-
To be fair, the PQ4 demo is merely a slideshow with some music and a short SEQ. You don't really need the full power of SCI2 for that. I find QFG4's RemapColors differences more interesting to be honest.
I have no excuse in mind for GK1.
-
Here's a new and improved decompile for QFG1EGA!
A major change here is that all of the system scripts and globals are based on the original SCI0 source, which is much more accurate. As a result, there should be no compatibility or decompiler issues on that side
The game generally seems to work okay, but the game crashes in certain areas (entering Meep's Peep, working at the stables, dispelling the bear), which seem to be related to decompilation errors.
Oh, yeah, there's also new decompiles for Seasoned Professional (EGA and VGA use exactly the same scripts) and the QFG2 demo. Both have been fully tested to completion.
7/31/2019 EDIT: Oops! I goofed up with the SCI01 decompiles, as I worked at adapting the original SCI0 header files for them, but uploaded incomplete versions. That has been fixed. Now they really have been tested to completion.
-
Here are decompiles of the KQ4 demo and full game (version 1.006.004, interpreter 0.000.502)
The demo plays through without issue. Since it has no VOCAB.997, I had to use the one from the full game. The demo is pretty much just a stripped-down version of the full game anyway.
The full game starts up and plays normally... but there is a high risk of the game crashing with "Out of Heap space" errors, particularly when cleaning the dwarves' house.
Man, this game does not use memory efficiently! Of course, it is the first-ever SCI game, and the programmers were still used to AGI, so we can't blame them for that.
Next on my agenda is LSL2...
-
Know that your work is very much appreciated.
-
And now here are decompiles of the LSL2 demo and full game (version 1.002.000, interpreter 0.000.409)
The demo plays through to completion.
The full game starts up and plays normally. Unlike KQ4, LSL2 uses heap much more efficiently. There have been cases of views vanishing and other graphical glitches, which appear to be priority bugs. This should not affect gameplay.
Next up, PQ2!
I would have done the 1988 Christmas Card, but that game was never upgraded to the newer SCI0 format. SCICompanion does not properly support the older SCI0 format, so you get things like "BAD_SELECTOR" errors in decompiled scripts (this seems to be due to the two-bit selectors, whereas later SCI games used one-bit selectors). I already posted this issue here (https://github.com/icefallgames/SCICompanion/issues/21).
-
And here are decompilations of PQ2, both the full game (1.002.011) and demo!
The demo plays through to completion.
In the full game, I've gotten up to the Cotton Cove, but haven't gotten farther than that. Other than a "Memory Fragmented" warning at the beginning, the game seems to play okay so far, and debugging has been enabled.
Next up is SQ3...
-
Here are decompiles of SQ3 -- full game (version 1.018, interpreter 0.000.685), demo, and Astro Chicken. There's also a decompile of Fun Seeker's Guide.
SQ3 plays through with no known issues... until you get to ScumSoft HQ. Attempting to get into Elmo's office crashes the game with an "Out of Heap space" error. The demo, Astro Chicken, and Fun Seeker's Guide have been fully tested.
I guess next up is LSL3!
-
Thanks Eric!
Here's an idea for a fun project which could be based on your decompilations:
Make a mini-games collection with all the little games that weren't packaged as Nick's Picks, e.g. Dag-Nab-It and Mage's Maze from QfG1, Iceman's Dice game, etc.
-
Thanks Eric!
Here's an idea for a fun project which could be based on your decompilations:
Make a mini-games collection with all the little games that weren't packaged as Nick's Picks, e.g. Dag-Nab-It and Mage's Maze from QfG1, Iceman's Dice game, etc.
That sounds like a good idea. Of course, QFG1's minigames take Ego's stats into account, so those may be hard to implement.
Things like Iceman's Dice game, Astro Chicken, and LSL3's river ride, on the other hand, would be trivial to put into one package. And no saving or restoring allowed - that takes away the challenge!
-
Thanks Eric!
Here's an idea for a fun project which could be based on your decompilations:
Make a mini-games collection with all the little games that weren't packaged as Nick's Picks, e.g. Dag-Nab-It and Mage's Maze from QfG1, Iceman's Dice game, etc.
That sounds like a good idea. Of course, QFG1's minigames take Ego's stats into account, so those may be hard to implement.
Things like Iceman's Dice game, Astro Chicken, and LSL3's river ride, on the other hand, would be trivial to put into one package. And no saving or restoring allowed - that takes away the challenge!
If that's of any help, I once made a list of all the mini games I could think of:
https://docs.google.com/spreadsheets/d/1mVmIC16Ku1z5XaXPAO3INQ4Up5DXaO60oWQVmWTjQCk/edit?usp=sharing (https://docs.google.com/spreadsheets/d/1mVmIC16Ku1z5XaXPAO3INQ4Up5DXaO60oWQVmWTjQCk/edit?usp=sharing)
-
That sounds like a good idea. Of course, QFG1's minigames take Ego's stats into account, so those may be hard to implement.
I've thought about that one before, and I figure that could be mitigated with a difficulty setting. Easy uses maxxed out stats, hard uses new-character stats, etc... with extra magic potions... maybe a little play-testing to find the right balance between hard and impossible.
-
I dream of an "Ultimate Nick's Picks Deluxe" or something with like every Sierra minigame ever in it. How possible would that be? Even across SCI versions. A lot of it would need to be rescripted to be compatible of course. But that'd be something.
-
I've thought about that one before, and I figure that could be mitigated with a difficulty setting. Easy uses maxxed out stats, hard uses new-character stats, etc... with extra magic potions... maybe a little play-testing to find the right balance between hard and impossible.
Or, if you're working on the formulae/at the source level, simply redo the formulae without any reference to player stats. Find something reasonable/playable.
-
Here's a little something random - decompiles of the KQ6 demo and the 1992 Christmas Card!
At this point, there's a new issue I'd come across during my digital archeology: missing system scripts.
For example, in the Christmas Card, the main (and only) game-specific script refers to vital scripts like INTRFACE, PRINT, and DIALOG. Without these scripts, the game's handleEvent: method can't decompile!
Fortunately, with a little work of transplanting the missing decompiled scripts and 997.voc from the EcoQuest 2 demo, that problem is solved. Now both fully compile and play to completion.
One thing I've noticed about the demos is that some of them are practically just stripped-down versions of the full games. As a result, there tend to be unused scripts remaining in the resource files, even those that a demo wouldn't logically use at all. This may just be to ensure that no errors occur from omitted scripts.
Next is LSL3 for sure!
Another note: I think it'd be a good idea to start the whole minigame compilation idea in a new topic.
-
Finally, here is LSL3. The game plays fine so far, and I've made sure to fix the speed bugs. I also managed to recreate the death handler.
Here's also a decompile of the Amiga version of LSL2! Its scripts are newer, and I recreated the death handler for that too. Now there is no assembly code at all in this one. Perhaps it can be used to make an ultimate patch for the game, similar to the Amiga sounds update for KQ4.
Finally, here is updated source for SQ3. The game's doit: has been fully recreated in script code thanks to researching Astro Chicken's doit:.
-
Game and interpreter versions?
-
Game and interpreter versions?
Ah, yes, I forgot to mention that.
LSL3 is version 1.021, interpreter 0.000.572, and SQ3 is version 1.018, interpreter 0.000.685. These are the versions used in compilations and digital distribution.
LSL2 Amiga is version 1.003, interpreter x.yyy.zzz.
-
Thanks
-
Here are new decompiles of KQ1SCI (demo and full), as well as the demos for HQ1 and Iceman.
The demos all play to completion with no known issues.
HQ1 and Iceman demos use interpreter 0.000.685, while KQ1 (both demo and full) uses S.old.010.
KQ1SCI has an issue where the game sometimes hangs at the rooms where you can plant the beanstalk.
And sometimes, the giant never falls asleep when he gets tired.
These seem to happen intermittently, and I've managed to play through the game to completion with full points.
And one more thing - I manually recreated the death handler.
-
Here are new decompiles of the QFG2 demo and full game (1.105).
The demo plays to completion without any known issues.
The full game, however, is a different story. Script 2 causes the game to glitch up when restoring a save, and 702 (the alley index) freezes the game when entering the alleyways.
It's not possible to visit the Moneychanger without debug (decompilation error in alley 151?), and the prompt to input gold to exchange doesn't appear (this seems to be an issue with INTRFACE.SC)
On the plus side, I did manage to recreate a few disassembly blocks in script code, such as BlueFrogTP, script 810's chAlloc cue: method, and Talker's messages: method. Much of the defines in GAME.SH have been placed into enums, and more global variables have been identified.
And since it's a week away from Christmas, here's a new decompile of Seasoned Professional! It's been tested to compietion.
Now there are no disassembly blocks in this or the QFG2 demo. The reason some functions would not decompile is because they relied on scripts that the game doesn't have. With those scripts spliced in, those functions decompile as intended.
Time for me to move on to SQ4...
-
And here are decompiles of SQ4 CD, Ms. Astro Chicken, and the LSL1 and LSL5 demos!
The LSL1 demo has wide exports, but SCICompanion didn't realize this at first. That confused me when I found that all the procedures were even-numbered. Once I checked the "Wide exports" option in the version detector, the scripts decompile fine.
The demos and Ms. Astro Chicken play through to completion, and SQ4 CD seems to work okay, with a few bugs related to the fact that the game still uses some of the older dialog classes and procedures (moved into their own scripts)
So, what's next? I guess I'll work on LSL1VGA!
-
Whew! Here are new decompilations of the LSL1, LSL5, SQ1, and PQ3 demos.
Here, I went through the system scripts, and identified all of the temp variables and parameters I could. The demos all play to completion with no known issues.
As for the full LSL1VGA, I've gone through that game's system scripts as well. I should have a ready decompilation of that soon.
-
COMBO BREAKER!
for real though, nice work!
-
And here is the decompilation for LSL1VGA, version 2.1.
So far, there are no known issues, and I've fixed a few script errors I found while playing.
For example, I realized that with the DSelector class, I mistakenly identified the type as "dSelected" instead of the correct "dSelector". This made the list of save games not appear in the save/restore dialog. Obviously, I didn't catch that with the demos.
Next up, SQ1VGA!
-
How about KQ6 CD? Be nice to see this with the actual system scripts and with the original Sierra names for defines, globals, scripts, and procedures, etc.
-
Here's a new one - Space Quest I VGA!
Also, here's an updated decompile of QFG1EGA.
Several bugs have been fixed:
Cleaning the stables no longer crashes the game
Entering Meep's Peep no longer crashes the game
The Fairy Ring now works properly
Some code that was undecompilable has been recreated and works properly.
The following new procedure names were taken from their equivalent methods and instances in QFG3 and QFG4.
DisposeCode -> StartARoom
AddToScore -> SolvePuzzle
EatRation -> EatMeal
SetGameTime -> FixTime
ReduceSP -> UseStamina
ReduceMP -> UseMana
ReduceHP -> TakeDamage
PrintGameTime -> ShowTime
IncrementGameTime -> AdvanceTime
ChangeEgoWalk -> ChangeGait
SleepUntil -> EgoSleeps
Rest -> EgoRests
GetMaxMana -> MaxMana
GetMaxStamina -> MaxStamina
GetMaxHealth -> MaxHealth
GetTotalWeight -> WtCarried
Oh, and I decided to post what I did for a KQ6 decompile, if anyone wants to finish it up. Nearly all of the original system scripts are there, as are all of the system globals. Quite a few defines (including talkers and verbs) are present as well.
Now, I think I should get to work on QFG1VGA. With my newly-gained experience, I should run through that one again.
-
Oooh, neat. Updated QFG procedure names. I'll have to update my QFG1EGA mod project.
Does this mean you've made work decompiling QFG4? I keep running into problems when I try it due to the fact they moved all the system scripts into the 65000 range.
-
SQ1SCI source will be invaluable for SQ1VGA Retro! Thanks!
-
I've built off of Eric's latest QFG1EGA source. There was one more bug that needed fixing -- the Goblin Ambush could crash when the goblins follow you -- and I've also manually decompiled all the remaining asm code.
There are now zero asm bits in QFG1EGA. It fully compiles and the manually decompiled bits appears to play properly.
-
Great. Now if we could only restore the original comments.
-
This archive is great.
But maybe it's possible to have all the information in one place?
Maybe update the first post in the thread all the decompilations?
Or maybe it's already collected together and I have just missed the link? ???
If so, maybe it'd be nice to put the link in first post in the thread...
-
This archive is great.
But maybe it's possible to have all the information in one place?
Maybe update the first post in the thread all the decompilations?
Or maybe it's already collected together and I have just missed the link? ???
If so, maybe it'd be nice to put the link in first post in the thread...
Agreed.
Or - even better - put the decompiled sources on Github.
-
Github would be a great choice, that will open up pull requests to make it easier to add new stuff.
-
Or - even better - put the decompiled sources on Github.
"Masterful stroke, Mr. Scruemall."
-
Another vote for Github.
-
Here you go, (https://github.com/EricOakford/SCI-Decompilation-Archive) the first wave of decompilations is up.
-
Thanks Eric!
Why are the binary SCO files needed?
Do they contain any information not contained in the script files?
If they're needed for SCI Companion, would it be possible to re-create them from the scripts?
-
Great. Could we have game/interpreter version info included for each decompiled source?
-
Just added a readme file containing the interpreter and game versions (where available). For the most part, though, it's only really important for the full games.
-
Great. I just noticed that you have the LSL2Demo under funseek. This is ambiguous since there is the Fun "Seekers Guide to East Madera County".
-
Not to get too pedantic, but what about a readme in each game's entry with the versions info? I am not sure if it is possible with GitHub, but it would be nice if there was a way to download each repo separately as individual zips instead of the entire thing..
-
Gave each game its own readme file with version info and known issues.
I just noticed that you have the LSL2Demo under funseek.
You must be referring to this commit (https://github.com/EricOakford/SCI-Decompilation-Archive/commit/cd55e0807c9e488ba2a32eda778cdc79c93dd36f).
No, I think you might have been confused by the fact that I touched up a few scripts for the Fun Seeker's Guide at the same time as the LSL2 demo.
-
Thanks for uploading these games to GitHub.
Can you please also upload the other games, such as SQ3 (and I don't remember what else there is in this thread...)
-
I'm sure he's getting to it. It's probably a lengthy process.
-
It is indeed a lengthy process. But now I have decompilations of LSL2 and SQ3 ready! SQ3 has been tested to completion with no known issues, and LSL2 is currently being tested.
-
Appreciate your hard work!
-
Thanks Eric!
Why are the binary SCO files needed?
Do they contain any information not contained in the script files?
If they're needed for SCI Companion, would it be possible to re-create them from the scripts?
I think my question was overlooked. :)
Can anyone here please answer?
-
I think my question was overlooked. :)
Can anyone here please answer?
Back in the old days I had a tool that created (SCI Studio) .SCO files from script files. That's how I created my first SCI games. The main things they gave you that the script files don't have were the names of exports and variables. I think what they mainly give you nowadays (what with the decompiler and everything) is not needing to do full builds all the time.
-
They contain names and exports and such, so the compiler can link smarter than Sierra's did. I don't think they're actually needed for present purposes.
-
I believe I could have gotten rid of them for SCI Companion (along with the 'use' statements), but I just made it have "compatibility" with SCI Studio as a first step, so they got left in.
If there are any scripts with cross dependencies (script A calls procedure in script B, and script B calls procedure in script A), then they are kind of needed with the current setup. Otherwise you'd need to remove the dependencies temporarily to get one of the scripts to build and produce a .sco.
-
Thanks for the answers!
I'm only bothered because they add some friction when maintaining SCI projects over source control such as github.
I guess if there was some CLI tool (like Lars mentioned he once wrote) that could create SCO files from scripts, then with a bit of automation we would be able to get rid of these files altogether.
-
I think there is a command line compiler. SCI Studio (or maybe a tool that Brian made) had this capability.
Edit: scc.exe?
-
I believe I could have gotten rid of them for SCI Companion (along with the 'use' statements), but I just made it have "compatibility" with SCI Studio as a first step, so they got left in.
If we could convert all of the fan games to Sierra Script then we could dump all of the backwards compatibility stuff and leave Studio and its script in the past.
-
If we could convert all of the fan games to Sierra Script then we could dump all of the backwards compatibility stuff and leave Studio and its script in the past.
The linkage system in original SCI was terrible (it involved a text file on a network drive...). I don't thhk I'd prefer it. And if Companion is able to do a build from scratch, then it doesn't matter anyway. Just put *.SCO in .gitignore and be done with it.
But everyone ships those files, so I'm not sure about that.
-
Just put *.SCO in .gitignore and be done with it.
This is what I was aiming for. I tried a bit to see if I can drop the SCO files, but failed.
That's why I was asking.
Have someone managed to build a game using just the script files?
-
It should work if you compile over and over (unless two scripts have cross dependencies). It probably wouldn't be difficult to modify SCI Companion to just automatically generate the .sco file if none exists (e.g. it doesn't need a successful compilation, just syntax pass).
-
unless two scripts have cross dependencies
Main and ColorInit come to mind.
-
The recently-added fixes for QFG1V got me to update SCI Companion.
- (and (<= `a evtMsg) (<= evtMsg `z))
+ ;EO: For some reason, `a and `A compile exactly the same,
+ ;despite the different cases.
+ ;This makes inputting a proper name (e.g. Eric)
+ ;impossible without the keys.sh defines.
+ (and (<= KEY_a evtMsg) (<= evtMsg KEY_z))
This is because indeed the part of the compiler that works out backtic sequences uppercases what follows. This should now be fixed. There's a build that should leave the case alone in the stash linked in my signature.
-
Yes, it seems to work properly now. There's a similar instance of this in the Monolith Burger menu in SQ3.
If we could convert all of the fan games to Sierra Script then we could dump all of the backwards compatibility stuff and leave Studio and its script in the past.
I have actually been doing this, like I did with LockerGnome Quest and Betrayed Alliance Book I. With my templates and decompilations, I've done away with the Studio defines, using the original Sierra defines instead. With backtic sequences now being case-sensitive, I can finally dump key.sh.
-
What about the Studio games that used assembly?
-
Eric, Did you ever anything with a decompile of LB1 or 2?
-
Eric, Did you ever anything with a decompile of LB1 or 2?
I've done the demos, but not the full games, since I have never played them that much.
-
Do you have them? If not, PM me.
-
I do in fact have the games (taken from the 1997 KQ collection). I guess I should start work on them.
-
What about the Studio games that used assembly?
You mean with (asm ...) blocks in 'em? I don't see why those would be a problem.
-
Finally, the LB1 decompilation is ready for testing! You can find the code here (https://github.com/EricOakford/SCI-Decompilation-Archive/tree/master/lb1), or for convenience, attached here.
On to LB2!
-
Nice! Looking forward to the LB2 decompile.
-
And here (https://github.com/EricOakford/SCI-Decompilation-Archive/tree/master/lb2) is the decompilation for LB2CD. All scripts can be compiled. It's ready for testing!
-
Great! What version of the game?
Edit: Never mind. I see it's in the readme.
-
I'm really happy you're slowly getting through these. Hope you keep doing as many as possible! ;D
-
Some short ones that might not be as involved are the Nick's Picks. Again, anything that you want to take on that you don't have, let me know.
-
Eugh, minigames. They make the decompiler give up so often, it seems...
-
Eugh, minigames. They make the decompiler give up so often, it seems...
The Nick's Picks might be a problem. Of the five, only Leisure Suit Larry's Casino has a selector table. Also, they are missing certain scripts like SAVE, hence why Game's save: and restore: methods don't decompile. I came across this problem with other games like the 1992 Christmas Card. Transplanting the missing scripts allowed them to decompile properly.
-
I was more worried about the decompiler giving up and spawning asm blocks.
-
I wonder if Omer might have the source for any of these? If so, I wonder if it would allow a glimpse into these issues that could help with the others Nick's.
-
I wonder if Omer might have the source for any of these? If so, I wonder if it would allow a glimpse into these issues that could help with the others Nick's.
Probably not, but these are stripped down versions of the full games. I could use the full games' selector tables to help in decompiling Nick's Picks.
King Graham's Board Game challenge = hoyle3
Roger Wilco's Spaced Out Game Pack = sq4
Leisure Suit Larry's Casino = lsl1
Parlor Games with Laura Bow = ??? (doesn't decompile right at all)
Robin Hood's Game of Skill and Change = RH
They all appear to have been built on June 5, 1992, well after their full games.
-
I wonder if Omer might have the source for any of these?
Unfortunately, I don't.
-
I wonder if Omer might have the source for any of these?
Unfortunately, I don't.
Yeah, I thought not. If a game doesn't have a vocab.997, and the one in another game isn't fully compatible, I can't do a decompilation of it.
On the plus side, I've just put up a decompilation (https://github.com/EricOakford/SCI-Decompilation-Archive/tree/master/kq7demo) of the KQ7 demo. It plays to completion with no known issues. And I've noticed that there's a LOT of placeholder messages and unused code in the scripts, suggesting that it was based off of a beta build.
-
What about the released Sierra tools that can compile vocab resources? Could that be used in some way I wonder?
-
What about the released Sierra tools that can compile vocab resources? Could that be used in some way I wonder?
Way I understand it, the issue is that the correct vocabs are missing altogether. Does it really matter how replacements are acquired when you don't know if they'll be correct?
-
Well, it's quite easy to write a vocab file from scratch without the original tools. And the system classes are known, for the most part. So if these weren't just ripped-out parts of games that we can decompile, a custom tool to fill in parts of the puzzle would be quite doable. As it is, I'm not sure it's worth the trouble.
-
And here's (https://github.com/EricOakford/SCI-Decompilation-Archive/tree/master/casino) the decompilation for Larry's Casino. I haven't found any issues as of yet. It's much like LSL1 (https://github.com/EricOakford/SCI-Decompilation-Archive/tree/master/lsl1) with a bit of LSL5 (https://github.com/EricOakford/SCI-Decompilation-Archive/tree/master/lsl5) thrown in, both of which I've already got covered.
-
Thanks.
-
For a moment there you got me confused... I thought you meant this 1998 non-SCI game (https://www.mobygames.com/game/leisure-suit-larrys-casino), while you meant the 1992 Nick's Picks (https://www.mobygames.com/game/crazy-nicks-software-picks-leisure-suit-larrys-casino) one. :)
-
Hah, thank you for clarify it, because until you said otherwise I still thought it was the 1998 one.
All I could think was: "Ohh, a mix of LSL1 and LSL5? I would have thought LSL7. Oh well, that's a peculiar bit of trivia."
-
Well, we had mentioned that were were talking about the Nick's Picks mini games. In fact I had assumed that Omer knew we were since he said that he had no source for any of them.
http://wiki.sierrahelp.com/index.php?title=Nick%27s_Picks_Series
-
Yup, makes total sense. I was just on a different line of thought -- I forgot the Larry Nick's Pick's was called Larry's Casino, and assumed Eric had moved on to another game after mentioning the difficulties with Nick's Picks in general.
EDIT: Just took a look through my collection, and turns out that's the only Nick's Pick floppy I don't have. Guess I never really played that one after all. Certainly knew of it's existence though.
-
It was included on a couple of the last LSL collections (not the 2006 VU warez compilation)
-
Another one down - Codename ICEMAN (https://github.com/EricOakford/SCI-Decompilation-Archive/tree/master/iceman) is ready for testing! This is based on version 1.033, which is the version that GOG sells.
I can see that this game extensively uses feature sorting, a special MouseDown handler, and the procedures in GoToSaid. Not too many games used those.
-
Perhaps someone motivated enough now could make a patch to skip the dreaded sub sequences that make so many give up on the game.
-
Has anyone looked at KQ5? The floppy versions are SCI0, but the MPC version is one of those with the x.yyy.yyy interpreters.
-
Has anyone looked at KQ5? The floppy versions are SCI0, but the MPC version is one of those with the x.yyy.yyy interpreters.
The floppy versions are actually very early SCI1 (so early that the Seasoned Professional VGA interpreter will work with the first release). The CD MPC version is later SCI1 (its system scripts most closely match that of Ms. Astro Chicken).
-
Any chance of you taking them on?
-
Any chance of you taking them on?
Yes. I have been doing the CD version, due to its availability on GOG and Steam as well as the collections.
-
Do you need the floppy version?
-
Do you need the floppy version?
When I do decompilations, I do the newest version of the games. I don't think I need the floppy version. But I think I've got it stored away somewhere in my files, so no, I'm fine.
-
Do you need the floppy version?
When I do decompilations, I do the newest version of the games. I don't think I need the floppy version. But I think I've got it stored away somewhere in my files, so no, I'm fine.
Please please please please consider also doing the floppy versions. There are big differences (that goes for all Sierra CD/floppy versions). For one thing, more of KQ5CD is decompilable in Companion than the KQ5VGA/EGA floppy versions (which fall back to assembly more often). I ask because I've been patiently waiting for them so I can continue my No Dead Ends script patches for each version of KQ5.
-
Yeah, I was going to note about significant differences between the two, as well.
-
I don't think we necessarily have to do the EGA floppy versions with the VGA floppy versions as they're mostly the same, but yeah. Big differences between CD and floppy. Most notably KQ5 and SQ4.
-
Isn't the main differences between EGA and VGA just the graphical resources? I would imagine that there would be little, if any script differences.
-
If stuff like the Chronostream in SQ4, or the siren lights in the title screen of PQ3 is any indication, I'd be surprised if there was anything at all.
-
Yeah that's what I mean.
-
As to KQ6 about the only real differences are the Windows "high-res" dialog images and the AVI support. Unlike KQ5, the CD includes the text display, even if only with the DOS dialog images.
-
Yeah, one of my ground rules is that I only do the newest versions of games, since they tend to be the most stable and available.
Maybe one idea is to reinstate the text dialog back into the CD version. Frankly, I don't care for the voice acting, and a No Dead-Ends mod would require additional lines not covered by the existing voice clips.
I have posted what's been done here (https://github.com/EricOakford/SCI-Decompilation-Archive/tree/master/kq5cd). There's lots to be done!
As a side-note, I have ordered the NES version of KQ5 on eBay. I plan to dump it to a ROM and check for any new text which could be implemented in a possible mod.
-
The text is one of the reasons that I thought it would be nice to have both. I agree with you about doing the latest for the most part. It is only the ones that have significant differences between the diskette and CD versions that would be nice. One other that might be worth while is Freddy. There was a lot of interactive dialog that was cut from the MPC version because there was so much to record for the narrator vocal track.
-
As a side-note, I have ordered the NES version of KQ5 on eBay. I plan to dump it to a ROM and check for any new text which could be implemented in a possible mod.
It still amuses me that they basically rewrote the whole damn game, and still left the "poisonous snake" line.
-
I'm very sorry to hear that. I was specifically waiting for the floppy versions. :( And yeah, there are many cases where the floppy versions are superior. Most notably with KQ5, SQ4, and Freddy. But far be it from me to demand anything from someone else's spare time project. I'll deal with it. :)
-
(switch (event message?)
(JOY_UPRIGHT
(SpeakAudio 2)
(event claimed: 1)
)
(JOY_RIGHT
(SpeakAudio 9)
(event claimed: 1)
)
(JOY_DOWN
(SpeakAudio 14)
(event claimed: 1)
)
(JOY_DOWNRIGHT
(if (== (inventory indexOf: (theIconBar curInvIcon?)) 28)
(event claimed: 0)
else
(SpeakAudio 21)
(event claimed: 1)
)
)
)
what the frik even is this game ;D
-
(switch (event message?)
(JOY_UPRIGHT
(SpeakAudio 2)
(event claimed: 1)
)
(JOY_RIGHT
(SpeakAudio 9)
(event claimed: 1)
)
(JOY_DOWN
(SpeakAudio 14)
(event claimed: 1)
)
(JOY_DOWNRIGHT
(if (== (inventory indexOf: (theIconBar curInvIcon?)) 28)
(event claimed: 0)
else
(SpeakAudio 21)
(event claimed: 1)
)
)
)
what the frik even is this game ;D
Those are obviously meant to be the verbs. Since this game tends not to use doVerb: for most of its features, the decompiler doesn't know this, so it used the wrong defines. JOY_UPRIGHT should be verbLook, JOY_RIGHT should be verbDo, JOY_DOWN should be verbTalk, and JOY_DOWNRIGHT should be verbUse.
-
(if (== (inventory indexOf: (theIconBar curInvIcon?)) 28)
And there's one thing that I've wondered about. Making an O(n) pass through a list (calling FirstNode/NextNode) to see what the current item is. Could be done in a single ScriptID call. It doesn't even hit the disk; they know that script 0 is in memory. For even faster execution, special-case (ScriptID 0). There are worse things they could special-case.
-
I'm very sorry to hear that. I was specifically waiting for the floppy versions. :( And yeah, there are many cases where the floppy versions are superior. Most notably with KQ5, SQ4, and Freddy. But far be it from me to demand anything from someone else's spare time project. I'll deal with it. :)
By all means. The KQ5CD decompilation will help significantly in your efforts, since I'll be identifying event flags and globals along the way.
-
That may work with KQ5 but not for SQ4. Such a different beast between the CD and floppy versions. Even KQ5 has an entirely different icon bar and doesn't even have a control panel.
Oh and I didn't mean I would handle the decompilation. I meant I would handle my disappointment. :D I'm not qualified to translate all that disassembly.
-
Oh and I didn't mean I would handle the decompilation. I meant I would handle my disappointment. :D I'm not qualified to translate all that disassembly.
LOL, I took it exactly the way you meant it. It didn't even occur to me any other way, but then disassembly is well over my head as well. Pity, since it would be nice if there were more than just one person doing it. I am very grateful for EricOakford's efforts.
-
Me as well!
-
It still amuses me that they basically rewrote the whole damn game, and still left the "poisonous snake" line.
They did this because even Guybrush Threepwood thinks snakes are poisonous. And he's a mighty pirate.
-
They... didn't correct the line in a remake of a game that is not the first in its series to have poisonous snakes in... because a rival company's game also has poisonous snakes in, and a well-known jab at how Sierra games want you to die.
Makes perfect sense, and you are not ATMachine.
(also, Guybrush wants to be a mighty pirate but never actually brought back proof of his completing the trials so technically...)
-
Okay, now I've been going through the code and adding comments to them, mostly in the Main script. These comments are meant to show what each global variable, procedure, and method does. So far, I have managed to do this with LSL2, LSL3, SQ3, the demos for HQ1 and Iceman, and the Fun Seeker's Guide.
And I've also been cleaning it up and making it look well-organized.
-
Yeah, one of my ground rules is that I only do the newest versions of games, since they tend to be the most stable and available.
Maybe one idea is to reinstate the text dialog back into the CD version. Frankly, I don't care for the voice acting, and a No Dead-Ends mod would require additional lines not covered by the existing voice clips.
I have posted what's been done here (https://github.com/EricOakford/SCI-Decompilation-Archive/tree/master/kq5cd). There's lots to be done!
As a side-note, I have ordered the NES version of KQ5 on eBay. I plan to dump it to a ROM and check for any new text which could be implemented in a possible mod.
In that case, you may want to find a copy of the 2 disc King's Quest 15th Anniversary Collector's Edition (1994) since it includes the dual-language KQ5 French floppy disk release that came out after the CD audio version. It retains the original Roland MT-32 midi tracks instead of recordings like the CD version and added digital audio effects present in the CD version that were never included in the original floppy disk release. The code would be more similar to the CD version at least.
-
Oooooo
-
Earlier, I caught my sleep-addled mind thinking of an SCI11 port of KQ5. With bugfixes, quality tweaks, and redone voices.
-
First things' first. We need a voiced SQ5. ;D
-
Has anyone tried training an AI text-to-speech model on the narrator or Wilco? They are getting surprising results these days.
-
First things' first. We need a voiced SQ5. ;D
Hear, hear!
-
Has anyone tried training an AI text-to-speech model on the narrator or Wilco? They are getting surprising results these days.
Sort of what Gumby's SCI Narrate was about.
-
Yeah, Gary Owens has a humongous body of work that could be catalogued for AI.
-
I was wondering about how to handle the need for Owens for such a project.
-
First things' first. We need a voiced SQ5. ;D
Literally one of the first things I tried when Companion got the required features.
Edit: I just did it again just to make sure of things. Text and Speech mode work fine, but as I once wrote about on my blog, Both is a bugged-out mess.
https://www.youtube.com/watch?v=a2wu08P28ZE
-
In that case, you may want to find a copy of the 2 disc King's Quest 15th Anniversary Collector's Edition (1994) since it includes the dual-language KQ5 French floppy disk release that came out after the CD audio version. It retains the original Roland MT-32 midi tracks instead of recordings like the CD version and added digital audio effects present in the CD version that were never included in the original floppy disk release. The code would be more similar to the CD version at least.
I think I've got a better idea: the Amiga version of KQ5! It's also close to the CD version, and I already did a decompilation of the Amiga version of LSL2.
Also, with a bit of trial and error, I've successfully managed to properly decompile a few things that were previously undecompilable. As a result, KQ4 is now entirely in script code! KQ4:handleEvent and Room78:handleEvent were all that was left. This actually freed up quite a bit of heap space.
I've been similarly successful for LSL3, with rm370:handleEvent and rm340's comedian script. Only room 140's RoomScript is left to be decompiled.
There may be bugs in the newly-decompiled code, but at least it's much more serviceable now.
-
EricOakford
When you will decompile the Police Quest 3, pay attention that there is a serious error in the English VGA version. The game is impassable. If on the morning of the sixth day you do not give the locket to Marie and come to the Judge with it, then the Judge requires another third piece of evidence. And on this dialogue, the game hangs deadly. The error is missing in other versions: German, Spanish, English EGA. Here is the code of this place. Skipped line (= seconds 10).
(instance givenTwo of rmnScript
(properties)
(method (changeState newState)
(switch (= state newState)
(0 (iEgo init:) (= cycles 1))
(1
(= save1 1)
(proc0_16 iEgo 44 15)
(= seconds 9)
)
(2
(if global25 (global25 dispose:))
(iEgo dispose:)
(= cycles 1)
)
(3
(if (not (global0 has: 37))
(client setScript: givenThree)
else
(= cycles 1)
)
)
(4 (ijudge init:) (= cycles 1))
(5
(= save1 1)
(proc0_16 ijudge 44 16)
//(= seconds 10) --- missed line
)
(6
(if global25 (global25 dispose:))
(ijudge dispose:)
(proc0_3)
(self dispose:)
)
)
)
)
-
I've just put up decompilations of the demos for Torin's Passge and RAMA! Slowly, I work my way up to the later part of SCI2.1...
From the ScummVM wiki:
These are mainly SCI21 game demos of SCI3 games and exhibit behavior where strings and arrays are mixed together (they were cleanly separated in earlier versions). kString subcalls are of a new variant, variant was also used in SCI3.