It seems that you're using an outdated browser. Some things may not work as they should (or don't work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera

×
I just finished KQ7 yesterday and was really excited to finally play KQ8. After finally figuring out how to get dgVoodoo 2 to work I got to a point where after finally getting a weapon, an axe, a bunch of spears come down and turn into an enemy. However, after this cutsceen it doesn't give me back control. The enemy and Connor just stand there staring at each other while the mask icon spins in the lower right. Anyone know how to get past this?
This question / problem has been solved by arablizzard2413image
This is a very common part of the game that frequently freezes. The characters keep moving, but you can't progress further in the game. There are several posts about the game freezing with many different suggestions to "fix" the problem. I'd suggest looking through the forums and trying the different suggestions to see if any of them will work for you
Run the game in DOSBox! Ironically, that's actually possible.

Alternatively, you can buy the CD-ROM copy of the game for $5 (off Amazon, Ebay, or Half.com), send an email to GOG support complaining that they still have not fixed this bug, and then use this cd installer to enjoy the game with a partial fix (messy script workarounds) and blissfully short loading times.

kqmoe_cdinstaller2014.zip
Attachments:
Post edited February 19, 2014 by arablizzard2413
avatar
arablizzard2413: Run the game in DOSBox! Ironically, that's actually possible.
I'm confused. How is that possible? Where did you learn this from?
Note: Unfortunately, I can't mark my own post as a solution but I do list the solution I found in this post
avatar
arablizzard2413: Run the game in DOSBox! Ironically, that's actually possible.
avatar
flashpulse: I'm confused. How is that possible? Where did you learn this from?
I'm wondering this as well. One thing I have found from trying to find a solution to this problem is that a lot of people seem to like telling you that something is possible, but few are actually nice enough to tell you how or at least give a link to where they found out how.

Anyway, after searching for around an hour and a half I finally found a solution to this problem thanks to iondrive in this topic. Just in case the link breaks or something, here is how to fix it:

1. Locate your KQ8 folder. If you are using the GOG release it will likely be at C:\GOG Games\Kings Quest 7-8\KQ8 or C:\Program Files (x86)\GOG.com\KQ78\KQ8 if you have the older GOG release (in which case I would suggest you re-download it if for no other reason than the fact that it fixes the title on the main menu).
2. go into the folder named "daventry" and then "kq" and look for AX.CS (it should be capitalized just as I wrote).
3. Open notepad and drag the AX.CS file onto the notepad window.
4. Scroll to the bottom. You should see a line like this about 14 lines from the bottom:
if eval KQMonster::testMessage $3 $4 $5 $6 $7 1000 3 0 6 4
5. Change the 4 into a 1.
6. Save and run the game. The "copying files to hard drive" screen will likely appear again, but after that you should be able to progress past the lockup. The only issue is rather minor in that it gives you back control before the cutsceen is done (spoiler: I believe it is when the henchmen says "Enough talk, hand over the mask piece" that it gives you back control.), but I think that is much preferable to not being able to get past the cutsceen at all. Also, you might think, as I did, that you could set it to something between 4 and 1 so it would give you back control a little later but, at least in my experiments, this did not work. Anything higher than 1 would cause it to lockup again.

I hope this helps someone. I am highly irritated at the lack of people actually explaining how to fix anything regarding this game (don't even get me started on my experience of trying to get dgVoodoo to work). After I finish Mask of Eternity I plan to offer tutorials and possibly even a patch (that DOESN'T require the CD version) to streamline getting this game to work correctly on modern systems because so far I think this is a really fun game and I want other people to be able to experience it for the first time without having to spend hours trying to fix it.
Post edited February 20, 2014 by OCD_Monkey
avatar
OCD_Monkey: if eval KQMonster::testMessage $3 $4 $5 $6 $7 1000 3 0 6 4
5. Change the 4 into a 1.

...

I hope this helps someone. I am highly irritated at the lack of people actually explaining how to fix anything regarding this game (don't even get me started on my experience of trying to get dgVoodoo to work). After I finish Mask of Eternity I plan to offer tutorials and possibly even a patch (that DOESN'T require the CD version) to streamline getting this game to work correctly on modern systems because so far I think this is a really fun game and I want other people to be able to experience it for the first time without having to spend hours trying to fix it.
Hate to burst your bubble, but that fix won't work all the time. Trust me, I've run through this scene (and 5 others) more times than I can count and the only way to pass this particular bug 100% of the time is to rewrite the script to use a timed KQCueEvent. The problem lies in the way the TalkComplete event is handled on Windows 2000 and later. I've sent GOG support several emails on how to reproduce the bug, sent them save files for the areas it happens most commonly, and said exactly where it's happening in the scripts and got blown off.

Unless this bug is fixed the game can hang at any point, I've even had it happen starting a new game before you get control of Connor. If you're really unlucky, you can also miss out on experience points that would otherwise level Connor up after completing an event. It's also worth mentioning that if you follow those directions, the fix will get deleted as soon as you load a new area.

The scripts aren't the only thing that's broken because of a bug, there's also GOG's broken copy protection bypass, and a memory error that no one caught, just to name a few.

Btw, that's Yhkwong's DOSBox svn build running Windows 95 OSR1 with dgVoodoo 2. You can find a guide for how to set that up on the official DOSBox forum.
avatar
arablizzard2413: Run the game in DOSBox! Ironically, that's actually possible.
avatar
flashpulse: I'm confused. How is that possible? Where did you learn this from?
DOSBox is mentioned in the dgVoodoo 2 readme file, there's also been a post about running Win9x games on the official DOSBox forum for several years.
Post edited February 21, 2014 by arablizzard2413
avatar
OCD_Monkey: if eval KQMonster::testMessage $3 $4 $5 $6 $7 1000 3 0 6 4
5. Change the 4 into a 1.

...

I hope this helps someone. I am highly irritated at the lack of people actually explaining how to fix anything regarding this game (don't even get me started on my experience of trying to get dgVoodoo to work). After I finish Mask of Eternity I plan to offer tutorials and possibly even a patch (that DOESN'T require the CD version) to streamline getting this game to work correctly on modern systems because so far I think this is a really fun game and I want other people to be able to experience it for the first time without having to spend hours trying to fix it.
avatar
arablizzard2413: Hate to burst your bubble, but that fix won't work all the time. Trust me, I've run through this scene (and 5 others) more times than I can count and the only way to pass this particular bug 100% of the time is to rewrite the script to use a timed KQCueEvent. The problem lies in the way the TalkComplete event is handled on Windows 2000 and later. I've sent GOG support several emails on how to reproduce the bug, sent them save files for the areas it happens most commonly, and said exactly where it's happening in the scripts and got blown off.

Unless this bug is fixed the game can hang at any point, I've even had it happen starting a new game before you get control of Connor. If you're really unlucky, you can also miss out on experience points that would otherwise level Connor up after completing an event. It's also worth mentioning that if you follow those directions, the fix will get deleted as soon as you load a new area.

The scripts aren't the only thing that's broken because of a bug, there's also GOG's broken copy protection bypass, and a memory error that no one caught, just to name a few.
Well, that stinks. I don't suppose you could explain (or link to somewhere that would explain) how to use a timed KQCueEvent? It really is too bad how glitchy this game is, but I guess we just have to work with what we have and try to enjoy this game despite the bugs.
Post edited February 21, 2014 by OCD_Monkey
avatar
OCD_Monkey: Well, that stinks. I don't suppose you could explain (or link to somewhere that would explain) how to use a timed KQCueEvent? It really is too bad how glitchy this game is, but I guess we just have to work with what we have and try to enjoy this game despite the bugs.
The only place to look would be other scripts, nothing in this game is documented anywhere... but I'm about to eat my words after looking through more of the disassembly today.

Apparently the game programmers knew about this issue and for whatever reason it became more prevalent on newer systems. There is a command "KQGame::letCatchUp" used quite extensively in the Frozen Reaches, and a few scripts across Daventry, the Realm of the Dead, and the Underground Realm of the Gnomes. The in game ticker can fall behind and as a result it fails to execute some lines in the script, that command lets the game pause and catch up.

It's not the ideal fix, but it's a lot better to use some extra CPU cycles and make sure everything is caught then have something slip through. I'm sure there's a way to fix this globally in the executable, but this will have to do for now I guess. The good news is, this will work for every localized version of the game (I had already manually timed the scripts for English, French, and Brazilian Portuguese but I still had German, Italian, and Spanish left to do).

For the Henchman lockup in Daventry:

1) Copy AX.CS from Daventry\KQ to Daventry\patch
2) Make a new line at the very top of the script
3) Add "KQGame::letCatchUp" (without the quotes)
4) Save and run the game

Normally this command would be used in one of the Cue sections, but to make it easy we're adding it to the top since the script is called after each line of dialog is completed.

This same fix can be applied to Shaftman.cs and TW_WEIRD.CS in Barren\KQ; and also apothgnm.cs, ARMORGNM.CS, and WEAPNGNM.CS in Gnome\KQ. Just make sure to save them in the patch folder for their respective regions. These are only the most common areas, like I said before this bug can affect anything in the game under the right conditions.
avatar
OCD_Monkey: Well, that stinks. I don't suppose you could explain (or link to somewhere that would explain) how to use a timed KQCueEvent? It really is too bad how glitchy this game is, but I guess we just have to work with what we have and try to enjoy this game despite the bugs.
avatar
arablizzard2413: The only place to look would be other scripts, nothing in this game is documented anywhere... but I'm about to eat my words after looking through more of the disassembly today.

Apparently the game programmers knew about this issue and for whatever reason it became more prevalent on newer systems. There is a command "KQGame::letCatchUp" used quite extensively in the Frozen Reaches, and a few scripts across Daventry, the Realm of the Dead, and the Underground Realm of the Gnomes. The in game ticker can fall behind and as a result it fails to execute some lines in the script, that command lets the game pause and catch up.

It's not the ideal fix, but it's a lot better to use some extra CPU cycles and make sure everything is caught then have something slip through. I'm sure there's a way to fix this globally in the executable, but this will have to do for now I guess. The good news is, this will work for every localized version of the game (I had already manually timed the scripts for English, French, and Brazilian Portuguese but I still had German, Italian, and Spanish left to do).

For the Henchman lockup in Daventry:

1) Copy AX.CS from Daventry\KQ to Daventry\patch
2) Make a new line at the very top of the script
3) Add "KQGame::letCatchUp" (without the quotes)
4) Save and run the game

Normally this command would be used in one of the Cue sections, but to make it easy we're adding it to the top since the script is called after each line of dialog is completed.

This same fix can be applied to Shaftman.cs and TW_WEIRD.CS in Barren\KQ; and also apothgnm.cs, ARMORGNM.CS, and WEAPNGNM.CS in Gnome\KQ. Just make sure to save them in the patch folder for their respective regions. These are only the most common areas, like I said before this bug can affect anything in the game under the right conditions.
It works perfectly! Thank you so much! The only problem now is that the game won't read it from the patch folder (which I had to create as there wasn't one there already) so I had to edit the one that is in the KQ folder which from your previous post I am guessing will get deleted when I finally get to the next area. Any suggestions?

EDIT: Nevermind, I was able to get it to read from the patch folder by removing all the other folders in the daventry folder and thus forcing it to go through the "copying files to hard drive" step again. Thank you again for your help!
Post edited February 21, 2014 by OCD_Monkey
Just wanted to give an update on this fix using "KQGame::letCatchUp". I've been able to get consistent results on my laptop with an AMD E-350 1.6 GHz processor. However, on my desktop with an Intel Core 2 Duo E8400 3.0 GHz, the results are the same as if there were no patched script present. I suspect there is a processor speed component to this bug.

Using a Win32 debugger (I'm using IDA Pro), there is a line that keeps showing up in the debug output: "CAUGHTUP:" with a number afterwards. Searching the disassembly for this text it appears to be part of the game loop, but I'm unfortunately not skilled enough to decipher it and say definitely why it's doing it or how to fix it.

As the script is processed, successful TalkComplete tests are followed by this "CAUGHTUP:" debug message. On tests which fail there is no debug output with this line, "CAUGHTUP:" will not appear in Mask.log if it is enabled in console.cs and seems to only show up using a debugger.
avatar
OCD_Monkey: if eval KQMonster::testMessage $3 $4 $5 $6 $7 1000 3 0 6 4
5. Change the 4 into a 1.

...

I hope this helps someone. I am highly irritated at the lack of people actually explaining how to fix anything regarding this game (don't even get me started on my experience of trying to get dgVoodoo to work). After I finish Mask of Eternity I plan to offer tutorials and possibly even a patch (that DOESN'T require the CD version) to streamline getting this game to work correctly on modern systems because so far I think this is a really fun game and I want other people to be able to experience it for the first time without having to spend hours trying to fix it.
avatar
arablizzard2413: Hate to burst your bubble, but that fix won't work all the time. Trust me, I've run through this scene (and 5 others) more times than I can count and the only way to pass this particular bug 100% of the time is to rewrite the script to use a timed KQCueEvent. The problem lies in the way the TalkComplete event is handled on Windows 2000 and later. I've sent GOG support several emails on how to reproduce the bug, sent them save files for the areas it happens most commonly, and said exactly where it's happening in the scripts and got blown off.

Unless this bug is fixed the game can hang at any point, I've even had it happen starting a new game before you get control of Connor. If you're really unlucky, you can also miss out on experience points that would otherwise level Connor up after completing an event. It's also worth mentioning that if you follow those directions, the fix will get deleted as soon as you load a new area.

The scripts aren't the only thing that's broken because of a bug, there's also GOG's broken copy protection bypass, and a memory error that no one caught, just to name a few.

Btw, that's Yhkwong's DOSBox svn build running Windows 95 OSR1 with dgVoodoo 2. You can find a guide for how to set that up on the official DOSBox forum.
avatar
flashpulse: I'm confused. How is that possible? Where did you learn this from?
avatar
arablizzard2413: DOSBox is mentioned in the dgVoodoo 2 readme file, there's also been a post about running Win9x games on the official DOSBox forum for several years.
Bless You, OCD_Monkey!!! You are so right about folks needing to explain HOW to fix, not just that it is possible. And for future folks who are clueless (like me) you change only the last digit in the string (not the $4). hahaha and thank you so much for your help!!
avatar
jackierobison: Bless You, OCD_Monkey!!! You are so right about folks needing to explain HOW to fix, not just that it is possible.
There were several explanations of HOW to fix it right above you. Or if you mean DOSBox specifically, the information can be found on the site I linked to (I really don't recommend doing it that way, it's just possible if you REALLY want to.)

The problem is, scripts do not address the underlying cause for the bug which can strike at any point in the game. Just changing the number at the end will "fix" this instance of the bug (there are MANY others) maybe 60% of the time because that section of the script still relies on TalkComplete working correctly, which it does not.

For the technical description of the bug:

Maskrt.c
/*********************************************************************************/
/* The KQTalkMessageCompleteEvent handler of KQMonster (`vftable' + 0x009C) and */
/* subclasses (KQDeath, KQDragonBody, KQDragonHead, KQGeometryTalker, KQLucreto, */
/* KQMandragorTree, KQMandragorRoot, and KQTowerSkeleton) is, among other stuff, */
/* sending a KQTalkMessageCompleteEvent to the current KQStateChangeNotifyGroup. */
/* To avoid an endless loop the KQMonster scans the group for itself and stores */
/* the event source (pointer to a KQSound or KQSound3D instance) in a dedicated */
/* member variable (this + 0x0FF4) if present. The following events are ignored */
/* as long as the current event source is equal to the saved pointer. This does */
/* not only skip creating the events - but also the "TalkComplete" script event. */
/* With the Win32 Heap optimizations in Windows 2000 and Windows NT 4.0 Service */
/* Pack 4 (look-aside lists) and later Windows Vista (low-fragmentation heap is */
/* enabled by default) memory allocation requests very often return the address */
/* of a recently freed block with a similar size - this leads to missing events */
/* whenever the current event source has the same address as the previous one... */
/*********************************************************************************/
NicoDE made a proper fix for the game to address this: http://svn.nicode.net/kqmoefix/bin/
Post edited August 16, 2014 by arablizzard2413
avatar
arablizzard2413: NicoDE made a proper fix for the game to address this: http://svn.nicode.net/kqmoefix/bin/
I'm currently rewriting the library for release build logging and working on an "installer" application to make it easier to use for the average user (no hex-editing of the Mask.exe).
Next public release is planned for the next week. However, I still have to debug and solve another important problem (the event manager seems to access references that might have been freed already, or more worse, is pointing to other/random data, because the memory block has been reused). And there is still a problem with nGlide that I want to workaround in the next release...
Hey Nico, did you get a chance to look at this any further? I've had an Inno Setup script for a couple years that patches Mask.exe (doesn't matter what version, VPatch.dll can handle multiple copies of a file in a single patch) and unpacks everything if you wanted to take a look at it. Btw, it's not just nGlide either, dgvoodoo seems to do it too.
No progress yet. During the last weeks I had to manage a lot of important things and all private projects are on hold. But I will be back to KQ as soon as possible.