Ingredients of secret potion: Whistle Crystal seeds Sweets Feather pen
Translated:
[quote="Malkolmovich"] If you aren't wondering how to construct kyrandian scripts and their interpreter, you can start from the end.)
Intro.
So, Kyrandia is in danger again, and Zanthia will not be so inspired to fight with Hand without secret potion. =)
Let's find it! The secret potion is mixed, poured, and even works, but how to get it without any editors and debuggers?
The first thing that occurred to me, is to grasp the message that we found this potion, and now the keyboard is a magical sound toy. =) It is in the file MYSTRM.PAK, and unpack it, we can see the hidden phrase in MYSTRM.EMC. Since this pack is responsible for the rainbow room, it immediately clear that the secret potion only works in the rainbow room .
Location 1: Darkmoor Script.
So, parse the script. Convert it to text extractor will help EMC-scripts dekyra of scummvm-tools.
Unpacked script attached to the message (for those who wish to understand it), here I will section of code, translated into a language like C.
Code: Select all
// begin section of code:
// Function_2 ():
// Var [4] - most likely, is that in the hands of
// It seems that this function is performed when the content of the mouse (ie Zanthia's hands).
// {
0x1710: 0x00 0x00 // this is a kind of splitter features nop-s, as in the x86-executable. Here is the title of the function number 2.
0x1712: 0x0D c1_subSP 0
// If (-1 <var [4]) goto 0x172A; - check, even if we have something in their hands (-1 - it is an empty mouse)
0x1714: 0x05 c1_pushVar 4
0x1716: 0x04 c1_push -1
0x1718: 0x11 c1_eval 5; '(val1> = val2)'
0x171A: 0x0F c1_ifNotJmp 0x172A
// RandomSceneChat ();
0x171E: 0x0E c1_execOpcode o2_randomSceneChat // appear to be in the hands if anything - is to say something
// Var [3] = 1;
0x1720: 0x04 c1_push a
0x1722: 0x09 c1_popVar 3
// Retval = var [3];
0x1724: 0x05 c1_pushVar 3
0x1726: 0x08 c1_popRetOrPos 0
// Return retval;
0x1728: 0x08 c1_popRetOrPos 1 // pop bp; ret;
// If (149! = Var [4]) goto 0x17A8;
// This is just a comparison with the number of item, after all give 149 in ScummVM makes it Zanthia secret potion
0x172A: 0x05 c1_pushVar 4
0x172C: 0x03 c1_push 149
0x1730: 0x11 c1_eval 2
0x1732: 0x0F c1_ifNotJmp 0x17A8 // if there is no secret potion, then for further checks.
// GetCharacterX (0);
0x1736: 0x04 c1_push 0
0x1738: 0x0E c1_execOpcode o2_getCharacterX
0x173A: 0x0C c1_addSP a
// If (160 <retval) goto 0x1756; - check the position of Zanthia?
0x173C: 0x02 c1_pushRetOrPos 0
0x173E: 0x03 c1_push 160
0x1742: 0x11 c1_eval 5; '(val1> = val2)'
0x1744: 0x0F c1_ifNotJmp 0x1756
// RefreshCharacter (0, 18, 3, 1) - apparently, if it is not somewhere out there, let them come closer
0x1748: 0x04 c1_push a
0x174A: 0x04 c1_push 3
0x174C: 0x04 c1_push 18
0x174E: 0x04 c1_push 0
0x1750: 0x0E c1_exec o2_refreshCharacter
0x1752: 0x0C c1_addSP 4
// Goto (0x1762);
0x1754: 0x00 c1_jumpTo 0x1762
// RefreshCharacter (0, 18, 5, 1);
0x1756: 0x04 c1_push a
0x1758: 0x04 c1_push 5
0x175A: 0x04 c1_push 18
0x175C: 0x04 c1_push 0
0x175E: 0x0E c1_exec o2_refreshCharacter
0x1760: 0x0C c1_addSP 4
// 0x1762: setHandItem (18);
0x1762: 0x04 c1_push 18 // 18 - an empty bottle. Zanthia empties a bottle of secret potion - give a blank in the mouse
0x1764: 0x0E c1_exec o1_setHandItem
0x1766: 0x0C c1_addSP a
// In addition, things are done:
// Turn the keyboard at this very sound toy-mode
// Change the music (to all text messages)
// SoundFadeOut (); - turn off the old music
0x1768: 0x0E c1_exec o2_soundFadeOut // Sound-toy mode? Nowhere else in the script is not found
// PlaySoundEffect (178); - kaboom?
0x176A: 0x03 c1_push 178
0x176E: 0x0E c1_execOpcode o1_playSoundEffect
0x1770: 0x0C c1_addSP a
// Then the output lines.
// ObjectChat (0, 'Congratulations!');
0x1772: 0x04 c1_push 0
0x1774: 0x04 c1_push 31; string 'Congratulations!'
0x1776: 0x0E c1_exec o2_objectChat;
0x1778: 0x0C c1_addSP 2
// O1_playWanderScoreViaMap (87, 1) - Start cheerful music?
0x177A: 0x04 c1_push a
0x177C: 0x04 c1_push 87
0x177E: 0x0E c1_exec o1_playWanderScoreViaMap;
0x1780: 0x0C c1_addSP 2
// ObjectChat (0, 'You have found the secret potion!');
0x1782: 0x04 c1_push 0
0x1784: 0x04 c1_push 32; string 'You have found the secret potion!'
0x1786: 0x0E c1_exec o2_objectChat;
0x1788: 0x0C c1_addSP 2
// ObjectChat (0, 'Your keyboard has now become a magical sound toy ...');
0x178A: 0x04 c1_push 0
0x178C: 0x04 c1_push 33; string 'Your keyboard has now become a magical sound toy ...'
0x178E: 0x0E c1_exec o2_objectChat;
0x1790: 0x0C c1_addSP 2
// ObjectChat (0, '... Have fun!');
0x1792: 0x04 c1_push 0
0x1794: 0x04 c1_push 34; string '... Have fun!'
0x1796: 0x0E c1_exec o2_objectChat;
0x1798: 0x0C c1_addSP 2
// SetGameFlag (494) - is the inclusion of any sound-toy mode
0x179A: 0x03 c1_push 494
0x179E: 0x0E c1_exec o1_setGameFlag
0x17A0: 0x0C c1_addSP a
// Var [3] = 1;
0x17A2: 0x04 c1_push a
0x17A4: 0x09 c1_popVar 3
// Return retval;
0x17A6: 0x08 c1_popRetOrPos 1 // pop bp; ret; - obviously, the end of the function.
// Further checks
// If (3! = Var [4]) goto 0x17S0;
0x17A8: 0x05 c1_pushVar 4
0x17AA: 0x04 c1_push 3
0x17AC: 0x11 c1_eval 2; (C syntax): '(val1 == val2)'
0x17AE: 0x0F c1_ifNotJmp 0x17C0
// Yeah! the conclusion of this line is when it shows itself Blueberry, then var [4] - that in their hands, and the function is called when the object of a showing of hands)
// ObjectChat (0, 'I bet this would make a lovely indigo potion.');
0x17B2: 0x04 c1_push 0
0x17B4: 0x04 c1_push 35; string 'I bet this would make a lovely indigo potion.'
0x17B6: 0x0E c1_execOpcode 128; functionname: 'o2_unk0x80'
0x17B8: 0x0C c1_addSP 2
// Var [3] = 1;
0x17BA: 0x04 c1_push a
0x17BC: 0x09 c1_popVar 3
// Return retval;
0x17BE: 0x08 c1_popRetOrPos a
// End section of code
However, it gave us just what secret potion correctly processed only in the rainbow room, but it can not just mix it, because the references in the script about a cunning behavior cauldron there.
So, it's not in the script, and toys in the code, and will apply to the source, and since the original sources are not available to us HOF, then climb to dissect the module 'kyra' of ScummVM.
Location 2: Morningmist Sources.
The first thing to remind us to work with cauldron, we find in the engines / kyra / staticres.cpp:
Code: Select all
const int16 KyraEngine_HoF :: _cauldronMagicTable [] = {
0x0, 0x16, 0x2, 0x1A,
0x7, 0xA4, 0x5, 0x4D,
0x1, 0xA5, 0x3, 0xA6,
0x6, 0x6D, 0x4, 0x91,
0xA, 0x99, 0xC, 0x95,
0x9, 0xAC, -1, -1
};
const int16 KyraEngine_HoF :: _cauldronMagicTableScene77 [] = {
0x0, 0x16, 0x2, 0x1A,
0x7, 0xAB, 0x5, 0x4D,
0x1, 0xAE, 0x3, 0xAF,
0x6, 0x6D, 0x4, 0x91,
0xA, 0x99, 0xC, 0x95,
0x9, 0xAC, -1, -1
};
Referring to the number of item list (or parse the appropriate WSA, or give-th passing on all the numbers listed here), we see that:
16 - warm water is drawn from the boiler at once
1A - swampsnake potion,
A4 - sandwich potion, AB - its rainbow room version
etc.
It is unclear, however, that the numbers mean in the beginning? There is in the range 0-7, then 9-A, then C (secret potion).
What is it? Apparently, a number sequence.
Let's find out where they are generally referred to magic-table. Open gui_hof.cpp, see (my comments):
Code: Select all
// If an empty glass in his hand, then ...
if (_itemInHand == 18) {
// Yeah, that's the reference to these tables (depending on the number of rooms)
const int16 * magicTable = (_mainCharacter.sceneId == 77)? _cauldronMagicTableScene77: _cauldronMagicTable;
while (magicTable [0], = -1) {
if (_cauldronState == magicTable [0]) {// here we see that every even table element (counting from zero) - it _cauldronState.
setHandItem (magicTable [1]) // this is every odd element: it is (number of item - give a check to the ScummVM, as the frame number in the appropriate WSA)
snd_playSoundEffect (0x6C);
+ + _cauldronUseCount;
if (_cauldronStateTable [_cauldronState] <= _cauldronUseCount && _cauldronUseCount) {
showMessage (0, 0xCF);
setCauldronState (0, true);
clearCauldronTable ();
}
return 0;
}
magicTable + = 2;
}
} Else if (_itemInHand> = 0) {
int item = _itemInHand;
cauldronItemAnim (item);
addFrontCauldronTable (item);
if (! updateCauldron ()) {// yeah! Here this function is apparently calculating that stuff is not for us the potion in the cauldron, if there is a certain sequence
_cauldronState = 0;
cauldronRndPaletteFade (); // because otherwise (as the name of the function) is just a normal change in the palette for a couple of seconds, as if any thing Khitan.
}
}
We are looking for any assignment of values ​​to this variable and find that the only thing worth seeing is the assignment of kyra_hof.cpp, as a function of setCauldronState.
We are looking to access this feature, and - come together the way! - Just that we find mentioned earlier function updateCauldron!
Code: Select all
bool KyraEngine_HoF :: updateCauldron () {
for (int i = 0; i <23; + + i) {
const int16 * curStateTable = _cauldronStateTables [i];
if (* curStateTable == -2)
continue;
int cauldronState = i;
int16 cauldronTable [25];
memcpy (cauldronTable, _cauldronTable, sizeof (cauldronTable));
while (* curStateTable! = -2) {
int stateValue = * curStateTable + +;
int j = 0;
for (; j <25; + + j) {
int val = cauldronTable [j];
switch (val) {
case 68:
val = 70;
break;
case 133:
case 167:
val = 119;
break;
case 130:
case 143:
case 100:
val = 12;
break;
case 132:
case 65:
case 69:
case 74:
val = 137;
break;
case 157:
val = 134;
break;
default:
break;
}
if (val == stateValue) {
cauldronTable [j] = -1;
j = 26;
}
}
if (j == 25)
cauldronState = -1;
}
if (cauldronState> = 0) {
showMessage (0, 0xCF);
setCauldronState (cauldronState, true);
if (cauldronState == 7)
objectChat (getTableString (0xF2, _cCodeBuffer, 1), 0, 0x83, 0xF2);
clearCauldronTable ();
return true;
}
}
return false;
}
_cauldronTable - a list of what is in the boiler (maximum 25 items), as may be amended:
68 -> 70, that is the imprint of his feet on clay equal to the fingerprint on the candy;
133, 167 -> 119, ie icicles (incidentally, the second of the game did not seem to use) - in the snow;
130, 143, 100 -> 12, ie pen pyleochistitel, feathers from a pillow and a snowman "promotional pen" from Volcania - the pen out of the nest;
132, 65, 69, 74 -> 137, ie, candy, beer mug (not the bowl), candy, and candy in a bowl - a candy snowman;
and 157 -> 134, that is, cologne - a musk.
Then before the end of the recipe tables (which ends part 2) we test match, and if all the elements are, change the status of the boiler corresponding to a given potions.
Wait ... what does this mean? So I can cook potion, even if I have the boiler other trash?! Verify-ka ... start the hof, load save rainbow room, we will cast into the pot cover, goryayachy the air, now the bulb (for example), and fell asleep on top pen ... YES! Cook potions. (This happens in skumme as well as in the original version). Did you know that does not necessarily comply with the recipe? The main thing to throw the right components, and the rest - do not care =)
Then, threw down the pot all of our items, we can brew potions you want without worrying about its purity )
I wonder what would happen if we throw the last element necessary for the two potions? For example the snow, with a pot all the other components for the snowman, and for Bigfoot? Or crocodile tears for the potion of doubt and for the swamp snake ... It is interesting =)
In general, it's incredibly interesting, but how can fill the table? A function
Code: Select all
bool KyraEngine_HoF :: addToCauldronStateTable (int data, int idx) {
for (int i = 0; i <7; + + i) {
if (_cauldronStateTables [idx] [i] == -2) {
_cauldronStateTables [idx] [i] = data;
return true;
}
}
return false;
}
Code: Select all
int KyraEngine_HoF :: o2_addCauldronStateTableEntry (EMCState * script) {
debugC (3, kDebugLevelScriptFuncs, "KyraEngine_HoF :: o2_addCauldronStateTableEntry (% p) (% d,% d)", (const void *) script, stackPos (0), stackPos (1));
return addToCauldronStateTable (stackPos (0), stackPos (1))? A: 0;
}
bool KyraEngine_HoF :: addToCauldronStateTable (int data, int idx) {
for (int i = 0; i <7; + + i) {
if (_cauldronStateTables [idx] [i] == -2) {
_cauldronStateTables [idx] [i] = data;
return true;
}
}
return false;
}
Code: Select all
0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'. [/ Code]
This is probably one of the scripts that run at startup.
Then we will learn how these tables are filled with recipes, and be able to unravel the secret of the secret potions!
[b] Location 3. The Enchanted MISC_EMC. [/b]
By digging into the PAK-ax and EMC-shkah (or rather, the search sequence 0x4E 0x7A: opcode 0x0E or-structed with the 0x40, this is probably the length of the flag team - single-byte as a dvuhbayytnyh, for example, there is not 0x40, 0x20 and =) it was found that the corresponding EMC-shka contained in MISC_EMC.PAK (cap back on his guard =), the script _START_01.EMC (Cap cheers).
Here is an excerpt from there:
[code] 0x110E: 0x04 c1_push 2; could be string 'DOCK'
0x1110: 0x04 c1_push 6; could be string 'NEST'
0x1112: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1114: 0x0C c1_addSP 2
0x1116: 0x04 c1_push 2; could be string 'DOCK'
0x1118: 0x04 c1_push 1; could be string 'OUTHOME'
0x111A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x111C: 0x0C c1_addSP 2
0x111E: 0x04 c1_push 2; could be string 'DOCK'
0x1120: 0x04 c1_push 0
0x1122: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1124: 0x0C c1_addSP 2
0x1126: 0x04 c1_push 2; could be string 'DOCK'
0x1128: 0x04 c1_push 25; could be string 'ALLEY'
0x112A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x112C: 0x0C c1_addSP 2
0x112E: 0x04 c1_push 2; could be string 'DOCK'
0x1130: 0x04 c1_push 5; could be string 'FERRY'
0x1132: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1134: 0x0C c1_addSP 2
0x1136: 0x04 c1_push 2; could be string 'DOCK'
0x1138: 0x04 c1_push 23; could be string 'CELLAR'
0x113A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x113C: 0x0C c1_addSP 2
0x113E: 0x04 c1_push 7; could be string 'OUTHERB'
0x1140: 0x04 c1_push 51; could be string 'VOLC_G'
0x1142: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1144: 0x0C c1_addSP 2
0x1146: 0x04 c1_push 7; could be string 'OUTHERB'
0x1148: 0x04 c1_push 40; could be string 'ANCHOR'
0x114A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x114C: 0x0C c1_addSP 2
0x114E: 0x04 c1_push 7; could be string 'OUTHERB'
0x1150: 0x04 c1_push 33; could be string 'WHARF'
0x1152: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1154: 0x0C c1_addSP 2
0x1156: 0x04 c1_push 7; could be string 'OUTHERB'
0x1158: 0x04 c1_push 29; could be string 'STREET'
0x115A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x115C: 0x0C c1_addSP 2
0x115E: 0x04 c1_push 5; could be string 'FERRY'
0x1160: 0x04 c1_push 36; could be string 'JUNGLE'
0x1162: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1164: 0x0C c1_addSP 2
0x1166: 0x04 c1_push 5; could be string 'FERRY'
0x1168: 0x04 c1_push 70; could be string 'FIGHT'
0x116A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x116C: 0x0C c1_addSP 2
0x116E: 0x04 c1_push 5; could be string 'FERRY'
0x1170: 0x04 c1_push 59; could be string 'VOLC_O'
0x1172: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1174: 0x0C c1_addSP 2
0x1176: 0x04 c1_push 5; could be string 'FERRY'
0x1178: 0x04 c1_push 25; could be string 'ALLEY'
0x117A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x117C: 0x0C c1_addSP 2
0x117E: 0x04 c1_push 1; could be string 'OUTHOME'
0x1180: 0x04 c1_push 114; could be string 'SLR1'
0x1182: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1184: 0x0C c1_addSP 2
0x1186: 0x04 c1_push 1; could be string 'OUTHOME'
0x1188: 0x04 c1_push 99; could be string '----'
0x118A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x118C: 0x0C c1_addSP 2
0x118E: 0x04 c1_push 1; could be string 'OUTHOME'
0x1190: 0x04 c1_push 12; could be string 'FISHER'
0x1192: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1194: 0x0C c1_addSP 2
0x1196: 0x04 c1_push 3; could be string 'FLYTRAP'
0x1198: 0x04 c1_push 113; could be string 'CPTN'
0x119A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x119C: 0x0C c1_addSP 2
0x119E: 0x04 c1_push 3; could be string 'FLYTRAP'
0x11A0: 0x04 c1_push 102; could be string 'FAU4'
0x11A2: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11A4: 0x0C c1_addSP 2
0x11A6: 0x04 c1_push 3; could be string 'FLYTRAP'
0x11A8: 0x04 c1_push 104; could be string 'GRD1'
0x11AA: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11AC: 0x0C c1_addSP 2
0x11AE: 0x04 c1_push 6; could be string 'NEST'
0x11B0: 0x04 c1_push 119; could be string 'CBL3'
0x11B2: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11B4: 0x0C c1_addSP 2
0x11B6: 0x04 c1_push 6; could be string 'NEST'
0x11B8: 0x04 c1_push 118; could be string 'CBL2'
0x11BA: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11BC: 0x0C c1_addSP 2
0x11BE: 0x04 c1_push 6; could be string 'NEST'
0x11C0: 0x04 c1_push 120; could be string 'SCRB'
0x11C2: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11C4: 0x0C c1_addSP 2
0x11C6: 0x04 c1_push 4; could be string 'GNARL'
0x11C8: 0x04 c1_push 119; could be string 'CBL3'
0x11CA: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11CC: 0x0C c1_addSP 2
0x11CE: 0x04 c1_push 4; could be string 'GNARL'
0x11D0: 0x03 c1_push 134; could be string 'JESC'
0x11D4: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11D6: 0x0C c1_addSP 2
0x11D8: 0x04 c1_push 4; could be string 'GNARL'
0x11DA: 0x04 c1_push 12; could be string 'FISHER'
0x11DC: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11DE: 0x0C c1_addSP 2
0x11E0: 0x04 c1_push 4; could be string 'GNARL'
0x11E2: 0x03 c1_push 137; could be string 'JESM'
0x11E6: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11E8: 0x0C c1_addSP 2
0x11EA: 0x04 c1_push 10; could be string 'CROC'
0x11EC: 0x03 c1_push 158
0x11F0: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11F2: 0x0C c1_addSP 2
0x11F4: 0x04 c1_push 10; could be string 'CROC'
0x11F6: 0x03 c1_push 159
0x11FA: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x11FC: 0x0C c1_addSP 2
0x11FE: 0x04 c1_push 10; could be string 'CROC'
0x1200: 0x03 c1_push 160
0x1204: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1206: 0x0C c1_addSP 2
0x1208: 0x04 c1_push 12; could be string 'FISHER'
0x120A: 0x03 c1_push 137; could be string 'JESM'
0x120E: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1210: 0x0C c1_addSP 2
0x1212: 0x04 c1_push 12; could be string 'FISHER'
0x1214: 0x04 c1_push 12; could be string 'FISHER'
0x1216: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1218: 0x0C c1_addSP 2
0x121A: 0x04 c1_push 12; could be string 'FISHER'
0x121C: 0x03 c1_push 144; could be string 'POPP'
0x1220: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1222: 0x0C c1_addSP 2
0x1224: 0x04 c1_push 12; could be string 'FISHER'
0x1226: 0x04 c1_push 115; could be string 'SLR2'
0x1228: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x122A: 0x0C c1_addSP 2
0x122C: 0x04 c1_push 9; could be string 'QUICK'
0x122E: 0x04 c1_push 3; could be string 'FLYTRAP'
0x1230: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x1232: 0x0C c1_addSP 2
0x1234: 0x04 c1_push 9; could be string 'QUICK'
0x1236: 0x03 c1_push 173
0x123A: 0x0E c1_execOpcode 122; functionname: 'o2_unk0x7A'
0x123C: 0x0C c1_addSP 2 [/code]
We see the table:
Number 2: 6, 1, 0, 25, 5, 23. This potion swamp snakes. Those interested can check the numbers and the number aytemov status of the boiler (the very small number of couples in meydzhik-The Table).
№ 7: 51, 40, 33, 29. Sandwich.
Number 5: 36, 70, 59, 25. Skeptic serum (the basis for potions doubt).
Number 1: 114, 99, 12. Shoes.
Number 3: 113, 102, 104. Teddy Bear.
Number 6: 119, 118, 120. Snowman.
Number 4: 119, 134, 12, 137. Bigfoot.
№ 10: 158, 159, 160. Rainbow potion.
№ 12: ... skip until
№ 9: 3, 173. A blue potion from the first Kyrandia.
By the way, I want to see that [b] there is no trance potion, which means that it is impossible to cook [/b].
I. ... drum (which made the trees dance in the Enchanted Forest) has a fraction of impatient ... All held their breath ... kirandiytsy Zantsev chews nails with excitement (well, that still then make a new outfit, the nails can also be so for the sake of this case sgryzt do not mind) ...
[b] Location 4. The Final Battle: Zanthia vs. Secret Potion. [/b]
Warning: PG-37!! Children under 37 years old ... th ... Well, that is, those who want to open CAM recipe for potions, then DO NOT READ!!
the penultimate line is as follows:
№ 12: 137, 12, 144, 115. That is (highlight to read) ([color=#FF0000] Sweets, Feather pen, Whistle (of the rainbow potion) and Crystal seeds[/color]). And the status of number 12 - this is the SECRET POTION!
So, with trembling hands, load the save game from the rainbow room (not ScummVM, only the original HOF, running under DosBox or pure DOS). Making sure that the sound is turned on (which sound toy with no sound?!), Zanthia throws into the pot rainbow stone, dominoes, horse pulls from the shelf a bottle of hot water, burning, drink it (not the time now to think about comfort), derives from the boiler rainbow potion, pulls out a Whistle from the bottle (it is big, so the bottle must break), throws it immediately back into the pot, sprinkle the top with Crystal seeds, Sweets, Feather pen, and the liquid in the pot is painted in a transparent pink color! Complaining to myself for the fact that he broke a bottle with a whistle, Zanthia swallows another portion of hot water and the liberated draws liquid from the bottle glowing boiler (the boiler, it immediately becomes colorless - lacking only a potion of one bottle). Grabs a bottle in his hands, pulls the cork out of it - and - broads! - Congratulations!!! Music has played cheerful, and now press any button with the letter on the keyboard (ie QWERTYUIOPASDFGHJKLZXCVBNM1234567890), and point the arrow keys and Ins / Home / PgUp / End / PgDn (but not Del), and press 0 -4 and 6-9 on the numeric keypad (punctuation marks and all other access keys are silent), we can hear, perhaps, all the sound effects from the game!
After playing with the sounds of plenty, of course, Zanthia can go through the game on. =)
And yes, as mentioned above, according to the script MYSTRM.EMC, this effect is achieved only if it is done in the rainbow room. In any other location of drinking this potion will not bring anything, so put your saves editors, where they took. =)
[b] Morning. [/b]
And now the clock is 6:17, and how it would be desirable to feel royal mystic, looking in the books, hoping to find the secret recipe, I'll sleep better, yaks, Malcolm, for Kyrandia once again saved =), and the plot is searching for the secret potion fourth book, alas, is now irrelevant. =)
[b] P.S. [/b]
Total for the opening of the recipe has been spent just under 6 hours - from about 0:30 until 6:17. But it was worth it! As far as I know, none of this puzzle kyrandians still could not solve))[/quote]
[url=http://www.kyrandia.ru/forum/viewtopic.php?f=5&t=1209]Original[/url]
So, ingredients of secret potion: Whistle Crystal seeds Sweets Feather pen
Please, add secret potion support in ScummVM.