2012-04-04 00:03:41 +02:00
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers , whose names
* are too numerous to list here . Please refer to the COPYRIGHT
* file distributed with this source distribution .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
*/
# include "lilliput/lilliput.h"
# include "lilliput/script.h"
2012-04-07 14:36:04 +02:00
# include "common/debug.h"
2012-04-04 00:03:41 +02:00
2012-04-18 22:48:21 +02:00
# include "common/system.h"
2012-04-04 00:03:41 +02:00
namespace Lilliput {
2012-04-05 00:00:59 +02:00
LilliputScript : : LilliputScript ( LilliputEngine * vm ) : _vm ( vm ) , _currScript ( NULL ) {
2012-04-06 22:45:43 +02:00
_byte129A0 = 0xFF ;
2012-04-09 11:30:58 +02:00
_byte10806 = 0 ;
2012-04-11 10:59:42 +02:00
_byte12FE4 = 0xFF ;
2012-04-12 20:53:38 +02:00
_byte16F02 = 0 ;
2012-04-28 09:08:11 +02:00
_byte16F04 = 0 ;
2012-04-29 00:35:44 +02:00
_byte1881A = 0 ;
_byte18823 = 0 ;
2012-05-11 23:32:26 +02:00
_speechDisplaySpeed = 3 ;
_speechTimer = 0 ;
2012-04-06 22:45:43 +02:00
_word16F00 = - 1 ;
2012-05-08 18:36:01 +02:00
_word129A3 = 0 ;
2012-04-25 01:41:31 +02:00
_viewportCharacterTarget = - 1 ;
2012-04-25 23:51:45 +02:00
_heroismBarX = 0 ;
_heroismBarBottomY = 0 ;
2012-05-05 18:16:03 +02:00
_viewportPos . x = 0 ;
_viewportPos . y = 0 ;
2012-04-15 01:40:41 +02:00
_word18776 = 0 ;
2012-05-08 18:36:01 +02:00
_array129A5 [ 0 ] = 0 ;
_array129A5 [ 1 ] = 1 ;
_array129A5 [ 2 ] = 2 ;
_array129A5 [ 3 ] = 3 ;
2012-04-07 18:09:30 +02:00
_savedBuffer215Ptr = NULL ;
for ( int i = 0 ; i < 20 ; i + + ) {
_array122E9 [ i ] = 0 ;
_array122FD [ i ] = 0 ;
}
2012-04-08 12:54:56 +02:00
2012-04-26 08:35:47 +02:00
for ( int i = 0 ; i < 32 ; i + + )
2012-05-10 19:55:39 +02:00
_array1813BPos [ i ] = Common : : Point ( 0 , 0 ) ;
2012-04-26 08:35:47 +02:00
2012-04-08 12:54:56 +02:00
for ( int i = 0 ; i < 40 ; i + + ) {
2012-04-28 02:59:43 +02:00
_characterScriptEnabled [ i ] = 1 ;
2012-04-09 11:30:58 +02:00
_array128EF [ i ] = 15 ;
2012-04-12 00:54:12 +02:00
_array10AB1 [ i ] = 0 ;
_array12811 [ i ] = 16 ;
2012-04-12 20:53:38 +02:00
_array12839 [ i ] = 0xFF ;
2012-05-06 22:32:23 +02:00
_array16123PosX [ i ] = 0 ;
_array1614BPosY [ i ] = 0 ;
2012-04-25 23:51:45 +02:00
_array122C1 [ i ] = 0 ;
2012-04-12 20:53:38 +02:00
}
for ( int i = 0 ; i < 640 ; i + + ) {
2012-05-08 21:38:43 +02:00
_array12311 [ i ] = Common : : Point ( - 1 , - 1 ) ;
2012-04-08 12:54:56 +02:00
}
2012-05-08 20:01:11 +02:00
for ( int i = 0 ; i < 1600 ; i + + )
_array10B51 [ i ] = 0 ;
2012-04-04 00:03:41 +02:00
}
LilliputScript : : ~ LilliputScript ( ) {
}
byte LilliputScript : : handleOpcodeType1 ( int curWord ) {
2012-05-09 08:07:58 +02:00
debugC ( 2 , kDebugScript , " handleOpcodeType1(0x%x) " , curWord ) ;
2012-04-04 00:03:41 +02:00
switch ( curWord ) {
case 0x0 :
2012-05-06 10:04:09 +02:00
return OC_checkCharacterGoalPos ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x1 :
2012-05-06 10:04:09 +02:00
return OC_comparePos ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2 :
return OC_sub1740A ( ) ;
break ;
case 0x3 :
2012-05-10 08:11:45 +02:00
return OC_compareCharacterId ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x4 :
2012-05-15 01:37:00 +02:00
return OC_CompareByte16F02With ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x5 :
return OC_getRandom ( ) ;
break ;
case 0x6 :
2012-04-27 23:17:40 +02:00
return OC_for ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x7 :
return OC_compWord18776 ( ) ;
break ;
case 0x8 :
return OC_checkSaveFlag ( ) ;
break ;
case 0x9 :
2012-04-28 09:08:11 +02:00
return OC_compByte16F04 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0xA :
return OC_sub174D8 ( ) ;
break ;
case 0xB :
2012-05-15 01:37:00 +02:00
return OC_CompareCharacterVariables ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0xC :
return OC_compareCoords_1 ( ) ;
break ;
case 0xD :
return OC_compareCoords_2 ( ) ;
break ;
case 0xE :
2012-05-15 01:37:00 +02:00
return OC_CompareDistanceFromCharacterToPositionWith ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0xF :
return OC_sub1759E ( ) ;
break ;
case 0x10 :
2012-05-15 01:37:00 +02:00
return OC_IsCurrentCharacterIndex ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x11 :
return OC_sub175C8 ( ) ;
break ;
case 0x12 :
return OC_sub17640 ( ) ;
break ;
case 0x13 :
return OC_sub176C4 ( ) ;
break ;
case 0x14 :
return OC_compWord10804 ( ) ;
break ;
case 0x15 :
return OC_sub17766 ( ) ;
break ;
case 0x16 :
return OC_sub17782 ( ) ;
break ;
case 0x17 :
2012-05-15 01:37:00 +02:00
return OC_CompareMapValueWith ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x18 :
2012-05-15 01:37:00 +02:00
return OC_IsCharacterValid ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x19 :
return OC_compWord16EFE ( ) ;
break ;
case 0x1A :
2012-05-15 01:37:00 +02:00
return OC_AreCurrentCharacterVar0AndVar1EqualsTo ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x1B :
2012-05-12 18:04:07 +02:00
return OC_CurrentCharacterVar0Equals ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x1C :
return OC_sub17825 ( ) ;
break ;
case 0x1D :
return OC_sub17844 ( ) ;
break ;
case 0x1E :
2012-05-15 01:37:00 +02:00
return OC_CompareNumberOfCharacterWithVar0Equals ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x1F :
2012-05-15 01:37:00 +02:00
return OC_IsPositionInViewport ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x20 :
2012-05-06 10:04:09 +02:00
return OC_CompareGameVariables ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x21 :
2012-05-06 10:04:09 +02:00
return OC_skipNextOpcode ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x22 :
2012-05-12 18:04:07 +02:00
return OC_CurrentCharacterVar2Equals1 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x23 :
return OC_sub178D2 ( ) ;
break ;
case 0x24 :
2012-05-15 01:37:00 +02:00
return OC_CharacterVariableAnd ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x25 :
2012-05-15 01:37:00 +02:00
return OC_IsCurrentCharacterVar0LessEqualThan ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x26 :
return OC_sub1790F ( ) ;
break ;
case 0x27 :
2012-05-12 18:04:07 +02:00
return OC_CurrentCharacterVar1Equals ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x28 :
return OC_sub1793E ( ) ;
break ;
case 0x29 :
2012-05-15 01:37:00 +02:00
return OC_CurrentCharacterVar3Equals1 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2A :
2012-04-30 17:57:23 +02:00
return OC_checkCharacterDirection ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2B :
return OC_sub17984 ( ) ;
break ;
case 0x2C :
return OC_checkSavedMousePos ( ) ;
break ;
case 0x2D :
return OC_sub179AE ( ) ;
break ;
case 0x2E :
return OC_sub179C2 ( ) ;
break ;
case 0x2F :
return OC_sub179E5 ( ) ;
break ;
case 0x30 :
return OC_sub17A07 ( ) ;
break ;
case 0x31 :
2012-05-11 20:47:17 +02:00
return OC_checkViewPortCharacterTarget ( ) ;
2012-04-04 00:03:41 +02:00
break ;
default :
error ( " Unexpected opcode %d " , curWord ) ;
break ;
}
}
void LilliputScript : : handleOpcodeType2 ( int curWord ) {
2012-05-09 08:07:58 +02:00
debugC ( 2 , kDebugScript , " handleOpcodeType2(0x%x) " , curWord ) ;
2012-04-04 00:03:41 +02:00
switch ( curWord ) {
case 0x0 :
OC_setWord18821 ( ) ;
break ;
case 0x1 :
2012-05-15 01:37:00 +02:00
OC_ChangeIsoMap ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2 :
2012-05-11 23:32:26 +02:00
OC_sub17D57_speech1 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x3 :
2012-05-11 23:32:26 +02:00
OC_sub17D7F_speech2 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x4 :
2012-05-11 23:32:26 +02:00
OC_sub17DB9_speech3 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x5 :
2012-05-11 23:32:26 +02:00
OC_sub17DF9_speech1param ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x6 :
2012-05-11 23:32:26 +02:00
OC_sub17E07_speech4param ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x7 :
2012-05-11 23:32:26 +02:00
OC_sub17E15_speech2param ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x8 :
OC_sub17B03 ( ) ;
break ;
case 0x9 :
OC_getRandom_type2 ( ) ;
break ;
case 0xA :
2012-05-01 03:29:56 +02:00
OC_setCharacterPosition ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0xB :
2012-05-15 01:37:00 +02:00
OC_DisableCharacter ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0xC :
OC_saveAndQuit ( ) ;
break ;
case 0xD :
OC_sub17B93 ( ) ;
break ;
case 0xE :
2012-05-11 23:32:26 +02:00
OC_sub17E37_speech4 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0xF :
OC_resetByte1714E ( ) ;
break ;
case 0x10 :
OC_deleteSavegameAndQuit ( ) ;
break ;
case 0x11 :
OC_incByte16F04 ( ) ;
break ;
case 0x12 :
OC_sub17BA5 ( ) ;
break ;
case 0x13 :
OC_setByte18823 ( ) ;
break ;
case 0x14 :
2012-05-01 03:29:56 +02:00
OC_callScript ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x15 :
2012-05-12 18:04:07 +02:00
OC_callScriptAndReturn ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x16 :
2012-05-06 22:32:23 +02:00
OC_setCurrentScriptCharacterPos ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x17 :
OC_resetByte16F04 ( ) ;
break ;
case 0x18 :
OC_sub17AE1 ( ) ;
break ;
case 0x19 :
OC_sub17AEE ( ) ;
break ;
case 0x1A :
OC_setWord10804 ( ) ;
break ;
case 0x1B :
OC_sub17C0E ( ) ;
break ;
case 0x1C :
OC_sub17C55 ( ) ;
break ;
case 0x1D :
OC_sub17C76 ( ) ;
break ;
case 0x1E :
OC_sub17AFC ( ) ;
break ;
case 0x1F :
OC_sub17C8B ( ) ;
break ;
case 0x20 :
OC_sub17CA2 ( ) ;
break ;
case 0x21 :
OC_sub17CB9 ( ) ;
break ;
case 0x22 :
OC_sub17CD1 ( ) ;
break ;
case 0x23 :
OC_resetWord16EFE ( ) ;
break ;
case 0x24 :
OC_sub17CEF ( ) ;
break ;
case 0x25 :
2012-05-12 18:04:07 +02:00
OC_IncCurrentCharacterVar1 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x26 :
OC_sub17D23 ( ) ;
break ;
case 0x27 :
OC_sub17E6D ( ) ;
break ;
case 0x28 :
2012-05-01 00:18:26 +02:00
OC_changeCurrentCharacterSprite ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x29 :
OC_sub17E99 ( ) ;
break ;
case 0x2A :
OC_sub17EC5 ( ) ;
break ;
case 0x2B :
2012-05-06 22:32:23 +02:00
OC_setCharacterDirectionTowardsPos ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2C :
OC_sub17F08 ( ) ;
break ;
case 0x2D :
OC_sub17F4F ( ) ;
break ;
case 0x2E :
OC_sub17F68 ( ) ;
break ;
case 0x2F :
2012-05-06 22:32:23 +02:00
OC_skipNextVal ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x30 :
OC_sub17FD2 ( ) ;
break ;
case 0x31 :
OC_sub17FDD ( ) ;
break ;
case 0x32 :
OC_setByte10B29 ( ) ;
break ;
case 0x33 :
2012-05-12 18:04:07 +02:00
OC_setCurrentCharacterVar2 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x34 :
2012-05-12 18:04:07 +02:00
OC_SetCurrentCharacterVar2ToZero ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x35 :
OC_sub1801D ( ) ;
break ;
case 0x36 :
OC_sub1805D ( ) ;
break ;
case 0x37 :
OC_sub18074 ( ) ;
break ;
case 0x38 :
2012-04-30 17:57:23 +02:00
OC_setCurrentCharacterDirection ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x39 :
OC_sub18099 ( ) ;
break ;
case 0x3A :
OC_sub180C3 ( ) ;
break ;
case 0x3B :
2012-05-11 20:47:17 +02:00
OC_setViewPortPos ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x3C :
2012-05-11 20:47:17 +02:00
OC_setCurrentCharacterAltitude ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x3D :
OC_sub1817F ( ) ;
break ;
case 0x3E :
OC_sub181BB ( ) ;
break ;
case 0x3F :
OC_sub18213 ( ) ;
break ;
case 0x40 :
OC_sub18252 ( ) ;
break ;
case 0x41 :
OC_sub18260 ( ) ;
break ;
case 0x42 :
OC_sub182EC ( ) ;
break ;
case 0x43 :
2012-04-22 23:07:09 +02:00
OC_PaletteFadeOut ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x44 :
2012-04-22 23:07:09 +02:00
OC_PaletteFadeIn ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x45 :
OC_loadAndDisplayCUBESx_GFX ( ) ;
break ;
case 0x46 :
OC_sub1834C ( ) ;
break ;
case 0x47 :
2012-05-01 12:18:52 +02:00
OC_setArray122C1 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x48 :
OC_sub18367 ( ) ;
break ;
case 0x49 :
OC_sub17D04 ( ) ;
break ;
case 0x4A :
OC_sub18387 ( ) ;
break ;
case 0x4B :
2012-04-29 11:48:10 +02:00
OC_setDebugFlag ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x4C :
OC_setByte14837 ( ) ;
break ;
case 0x4D :
OC_sub183A2 ( ) ;
break ;
case 0x4E :
OC_sub183C6 ( ) ;
break ;
case 0x4F :
OC_loadFile_AERIAL_GFX ( ) ;
break ;
case 0x50 :
2012-05-11 23:32:26 +02:00
OC_sub17E22_speech1IfSoundOff ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x51 :
OC_sub1844A ( ) ;
break ;
case 0x52 :
OC_sub1847F ( ) ;
break ;
case 0x53 :
2012-04-05 00:00:59 +02:00
OC_displayVGAFile ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x54 :
OC_sub184D7 ( ) ;
break ;
case 0x55 :
2012-04-10 10:06:50 +02:00
OC_displayTitleScreen ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x56 :
OC_sub1853B ( ) ;
break ;
case 0x57 :
OC_sub1864D ( ) ;
break ;
case 0x58 :
2012-05-11 17:01:00 +02:00
OC_initSmallAnim ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x59 :
OC_sub18678 ( ) ;
break ;
case 0x5A :
OC_sub18690 ( ) ;
break ;
case 0x5B :
2012-04-30 17:57:23 +02:00
OC_setViewPortCharacterTarget ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x5C :
OC_sub186A1 ( ) ;
break ;
case 0x5D :
OC_sub186E5_snd ( ) ;
break ;
case 0x5E :
OC_sub1870A_snd ( ) ;
break ;
case 0x5F :
OC_sub18725_snd ( ) ;
break ;
case 0x60 :
OC_sub18733_snd ( ) ;
break ;
case 0x61 :
OC_sub1873F_snd ( ) ;
break ;
case 0x62 :
OC_sub18746_snd ( ) ;
break ;
case 0x63 :
OC_sub1875D_snd ( ) ;
break ;
case 0x64 :
OC_sub18764 ( ) ;
break ;
case 0x65 :
OC_sub1853B ( ) ;
break ;
default :
error ( " Unknown opcode %d " , curWord ) ;
break ;
}
}
2012-04-28 18:52:15 +02:00
static const OpCode opCodes1 [ ] = {
2012-05-06 10:04:09 +02:00
{ " OC_checkCharacterGoalPos " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
{ " OC_comparePos " , 2 , kGetValue1 , kgetPosFromScript , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_sub1740A " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-10 08:11:45 +02:00
{ " OC_compareCharacterId " , 4 , kGetValue1 , kImmediateValue , kCompareOperation , kImmediateValue , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_CompareByte16F02With " , 2 , kCompareOperation , kImmediateValue , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_getRandom " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
{ " OC_for " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
{ " OC_compWord18776 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
{ " OC_checkSaveFlag " , 0 , kNone , kNone , kNone , kNone , kNone } ,
{ " OC_compByte16F04 " , 2 , kCompareOperation , kImmediateValue , kNone , kNone , kNone } ,
{ " OC_sub174D8 " , 2 , kGetValue1 , kGetValue1 , kNone , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_CompareCharacterVariables " , 5 , kGetValue1 , kImmediateValue , kCompareOperation , kGetValue1 , kImmediateValue } ,
2012-04-28 18:52:15 +02:00
{ " OC_compareCoords_1 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
{ " OC_compareCoords_2 " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_CompareDistanceFromCharacterToPositionWith " , 3 , kgetPosFromScript , kCompareOperation , kImmediateValue , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_sub1759E " , 3 , kGetValue1 , kCompareOperation , kImmediateValue , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_IsCurrentCharacterIndex " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_sub175C8 " , 2 , kImmediateValue , kGetValue1 , kNone , kNone , kNone } ,
{ " OC_sub17640 " , 2 , kImmediateValue , kGetValue1 , kNone , kNone , kNone } ,
{ " OC_sub176C4 " , 2 , kImmediateValue , kGetValue1 , kNone , kNone , kNone } ,
{ " OC_compWord10804 " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
{ " OC_sub17766 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
{ " OC_sub17782 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_CompareMapValueWith " , 4 , kgetPosFromScript , kImmediateValue , kImmediateValue , kCompareOperation , kNone } ,
{ " OC_IsCharacterValid " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_compWord16EFE " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_AreCurrentCharacterVar0AndVar1EqualsTo " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
2012-05-12 18:04:07 +02:00
{ " OC_CurrentCharacterVar0Equals " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_sub17825 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
{ " OC_sub17844 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_CompareNumberOfCharacterWithVar0Equals " , 3 , kImmediateValue , kCompareOperation , kImmediateValue , kNone , kNone } ,
{ " OC_IsPositionInViewport " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
2012-05-06 10:04:09 +02:00
{ " OC_CompareGameVariables " , 2 , kGetValue1 , kGetValue1 , kNone , kNone , kNone } ,
{ " OC_skipNextOpcode " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-12 18:04:07 +02:00
{ " OC_CurrentCharacterVar2Equals1 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_sub178D2 " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_CharacterVariableAnd " , 3 , kGetValue1 , kImmediateValue , kImmediateValue , kNone , kNone } ,
{ " OC_IsCurrentCharacterVar0LessEqualThan " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_sub1790F " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-05-12 18:04:07 +02:00
{ " OC_CurrentCharacterVar1Equals " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_sub1793E " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_CurrentCharacterVar3Equals1 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_sub1796E " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
{ " OC_sub17984 " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
{ " OC_checkSavedMousePos " , 0 , kNone , kNone , kNone , kNone , kNone } ,
{ " OC_sub179AE " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-05 21:34:58 +02:00
{ " OC_sub179C2 " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_sub179E5 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
{ " OC_sub17A07 " , 3 , kImmediateValue , kImmediateValue , kImmediateValue , kNone , kNone } ,
2012-05-11 20:47:17 +02:00
{ " OC_checkViewPortCharacterTarget " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
} ;
2012-04-29 14:57:36 +02:00
2012-04-28 18:52:15 +02:00
static const OpCode opCodes2 [ ] = {
2012-05-01 03:29:56 +02:00
/* 0x00 */ { " OC_setWord18821 " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
/* 0x01 */ { " OC_ChangeIsoMap " , 3 , kgetPosFromScript , kImmediateValue , kImmediateValue , kNone , kNone } ,
2012-05-11 23:32:26 +02:00
/* 0x02 */ { " OC_sub17D57_speech1 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x03 */ { " OC_sub17D7F_speech2 " , 4 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kNone } ,
/* 0x04 */ { " OC_sub17DB9_speech3 " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } , // todo
/* 0x05 */ { " OC_sub17DF9_speech1param " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x06 */ { " OC_sub17E07_speech4param " , 4 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kNone } , // pb
/* 0x07 */ { " OC_sub17E15_speech2param " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x08 */ { " OC_sub17B03 " , 4 , kGetValue1 , kImmediateValue , kComputeOperation , kImmediateValue , kNone } ,
/* 0x09 */ { " OC_getRandom_type2 " , 3 , kGetValue1 , kImmediateValue , kImmediateValue , kNone , kNone } ,
2012-05-05 21:34:58 +02:00
/* 0x0a */ { " OC_setCharacterPosition " , 2 , kGetValue1 , kgetPosFromScript , kNone , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
/* 0x0b */ { " OC_DisableCharacter " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x0c */ { " OC_saveAndQuit " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x0d */ { " OC_sub17B93 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } , // todo : jump to other opcode
2012-05-11 23:32:26 +02:00
/* 0x0e */ { " OC_sub17E37_speech4 " , 0 , kNone , kNone , kNone , kNone , kNone } , // todo
2012-05-01 03:29:56 +02:00
/* 0x0f */ { " OC_resetByte1714E " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x10 */ { " OC_deleteSavegameAndQuit " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x11 */ { " OC_incByte16F04 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x12 */ { " OC_sub17BA5 " , 5 , kGetValue1 , kImmediateValue , kComputeOperation , kGetValue1 , kImmediateValue } ,
/* 0x13 */ { " OC_setByte18823 " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
/* 0x14 */ { " OC_callScript " , 2 , kImmediateValue , kGetValue1 , kNone , kNone , kNone } , // run script
2012-05-12 18:04:07 +02:00
/* 0x15 */ { " OC_callScriptAndReturn " , 2 , kImmediateValue , kGetValue1 , kNone , kNone , kNone } , // run script then stop
2012-05-06 22:32:23 +02:00
/* 0x16 */ { " OC_setCurrentScriptCharacterPos " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x17 */ { " OC_resetByte16F04 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x18 */ { " OC_sub17AE1 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x19 */ { " OC_sub17AEE " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x1a */ { " OC_setWord10804 " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x1b */ { " OC_sub17C0E " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x1c */ { " OC_sub17C55 " , 4 , kGetValue1 , kGetValue1 , kImmediateValue , kImmediateValue , kNone } ,
/* 0x1d */ { " OC_sub17C76 " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x1e */ { " OC_sub17AFC " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x1f */ { " OC_sub17C8B " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x20 */ { " OC_sub17CA2 " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x21 */ { " OC_sub17CB9 " , 3 , kImmediateValue , kGetValue1 , kImmediateValue , kNone , kNone } ,
/* 0x22 */ { " OC_sub17CD1 " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x23 */ { " OC_resetWord16EFE " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x24 */ { " OC_sub17CEF " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } , // stop script
2012-05-12 18:04:07 +02:00
/* 0x25 */ { " OC_IncCurrentCharacterVar1 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-05 21:34:58 +02:00
/* 0x26 */ { " OC_sub17D23 " , 2 , kImmediateValue , kgetPosFromScript , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x27 */ { " OC_sub17E6D " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x28 */ { " OC_sub17E7E " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x29 */ { " OC_sub17E99 " , 4 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue , kNone } ,
/* 0x2a */ { " OC_sub17EC5 " , 4 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue , kNone } ,
2012-05-06 22:32:23 +02:00
/* 0x2b */ { " OC_setCharacterDirectionTowardsPos " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x2c */ { " OC_sub17F08 " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x2d */ { " OC_sub17F4F " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x2e */ { " OC_sub17F68 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-06 22:32:23 +02:00
/* 0x2f */ { " OC_skipNextVal " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x30 */ { " OC_sub17FD2 " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x31 */ { " OC_sub17FDD " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x32 */ { " OC_setByte10B29 " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-05-12 18:04:07 +02:00
/* 0x33 */ { " OC_setCurrentCharacterVar2 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x34 */ { " OC_SetCurrentCharacterVar2ToZero " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x35 */ { " OC_sub1801D " , 5 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue } ,
/* 0x36 */ { " OC_sub1805D " , 5 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue } ,
/* 0x37 */ { " OC_sub18074 " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x38 */ { " OC_setCurrentCharacterDirection " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x39 */ { " OC_sub18099 " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x3a */ { " OC_sub180C3 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-11 20:47:17 +02:00
/* 0x3b */ { " OC_setViewPortPos " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
/* 0x3c */ { " OC_setCurrentCharacterAltitude " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x3d */ { " OC_sub1817F " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x3e */ { " OC_sub181BB " , 4 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue , kNone } ,
/* 0x3f */ { " OC_sub18213 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x40 */ { " OC_sub18252 " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-05-05 21:34:58 +02:00
/* 0x41 */ { " OC_sub18260 " , 2 , kGetValue1 , kgetPosFromScript , kNone , kNone , kNone } , // TODO
2012-05-01 03:29:56 +02:00
/* 0x42 */ { " OC_sub182EC " , 4 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kNone } ,
/* 0x43 */ { " OC_PaletteFadeOut " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x44 */ { " OC_PaletteFadeIn " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x45 */ { " OC_loadAndDisplayCUBESx_GFX " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x46 */ { " OC_sub1834C " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-01 12:18:52 +02:00
/* 0x47 */ { " OC_setArray122C1 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x48 */ { " OC_sub18367 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x49 */ { " OC_sub17D04 " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
/* 0x4a */ { " OC_sub18387 " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
/* 0x4b */ { " OC_setDebugFlag " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x4c */ { " OC_setByte14837 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x4d */ { " OC_sub183A2 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x4e */ { " OC_sub183C6 " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } , // TODO
/* 0x4f */ { " OC_loadFile_AERIAL_GFX " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-11 23:32:26 +02:00
/* 0x50 */ { " OC_sub17E22_speech1IfSoundOff " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x51 */ { " OC_sub1844A " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
/* 0x52 */ { " OC_sub1847F " , 5 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue } ,
/* 0x53 */ { " OC_displayVGAFile " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x54 */ { " OC_sub184D7 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } , // TODO
/* 0x55 */ { " OC_displayTitleScreen " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x56 */ { " OC_sub1853B " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x57 */ { " OC_sub1864D " , 4 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue , kNone } , // TODO
2012-05-11 17:01:00 +02:00
/* 0x58 */ { " OC_initSmallAnim " , 11 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue } ,
2012-05-01 03:29:56 +02:00
/* 0x59 */ { " OC_sub18678 " , 4 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kNone } ,
2012-05-05 21:34:58 +02:00
/* 0x5a */ { " OC_sub18690 " , 2 , kGetValue1 , kgetPosFromScript , kNone , kNone , kNone } , //TODO
2012-05-01 03:29:56 +02:00
/* 0x5b */ { " OC_setViewPortCharacterTarget " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x5c */ { " OC_sub186A1 " , 3 , kGetValue1 , kImmediateValue , kImmediateValue , kNone , kNone } , //TODO
/* 0x5d */ { " OC_sub186E5_snd " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
2012-05-05 21:34:58 +02:00
/* 0x5e */ { " OC_sub1870A_snd " , 2 , kgetPosFromScript , kImmediateValue , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x5f */ { " OC_sub18725_snd " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x60 */ { " OC_sub18733_snd " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-05-05 21:34:58 +02:00
/* 0x61 */ { " OC_sub1873F_snd " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x62 */ { " OC_sub18746_snd " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x63 */ { " OC_sub1875D_snd " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x64 */ { " OC_sub18764 " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
/* 0x65 */ { " OC_sub1853B " , 0 , kNone , kNone , kNone , kNone , kNone }
2012-04-28 18:52:15 +02:00
} ;
2012-05-01 14:35:19 +02:00
Common : : String LilliputScript : : getArgumentString ( KValueType type , ScriptStream & script ) {
Common : : String str ;
if ( type = = kImmediateValue ) {
str = Common : : String : : format ( " 0x%x " , script . readUint16LE ( ) ) ;
} else if ( type = = kGetValue1 ) {
int val = script . readUint16LE ( ) ;
if ( val < 1000 ) {
str = Common : : String : : format ( " 0x%x " , val ) ;
} else if ( val > 1004 ) {
str = Common : : String : : format ( " getValue1(0x%x) " , val ) ;
} else if ( val = = 1000 ) {
str = Common : : String ( " _byte129A0 " ) ;
} else if ( val = = 1001 ) {
str = Common : : String ( " characterIndex " ) ;
} else if ( val = = 1002 ) {
str = Common : : String ( " _word16F00 " ) ;
} else if ( val = = 1003 ) {
str = Common : : String ( " _currentCharacterVariables[6] " ) ;
} else if ( val = = 1004 ) {
str = Common : : String ( " _word10804 " ) ;
}
2012-05-05 21:34:58 +02:00
} else if ( type = = kgetPosFromScript ) {
2012-05-01 14:35:19 +02:00
int curWord = script . readUint16LE ( ) ;
int tmpVal = curWord > > 8 ;
switch ( tmpVal ) {
case 0xFF :
str = " (_rulesBuffer2_13[currentCharacter],_rulesBuffer2_14[currentCharacter]) " ;
break ;
case 0xFE : {
int index = curWord & 0xFF ;
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
str = Common : : String : : format ( " _vm->_rulesBuffer2_13[%d],_vm->_rulesBuffer2_14[%d] " , index , index ) ;
break ;
}
case 0xFD :
str = " _currentScriptCharacterPosition " ;
break ;
case 0xFC : {
int index = curWord & 0xFF ;
assert ( index < 40 ) ;
str = Common : : String : : format ( " (characterPositionTileX[%d], characterPositionTileY[%d]) " , index , index ) ;
break ;
}
case 0xFB : {
str = " (characterPositionTileX[_word16F00], characterPositionTileY[_word16F00]) " ;
break ;
}
case 0xFA :
2012-05-06 10:04:09 +02:00
str = Common : : String : : format ( " (_array10999PosX[currentCharacter], _array109C1PosY[currentCharacter]) " ) ;
2012-05-01 14:35:19 +02:00
break ;
case 0xF9 :
str = Common : : String : : format ( " (_currentCharacterVariables[4], _currentCharacterVariables[5]) " ) ;
break ;
case 0xF8 : {
int index = curWord & 0xFF ;
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
2012-05-06 23:38:13 +02:00
str = Common : : String : : format ( " _vm->_rulesBuffer12Pos3[%d] " , index ) ;
2012-05-01 14:35:19 +02:00
}
case 0xF7 : {
str = Common : : String : : format ( " (_characterPositionTileX[_currentCharacterVariables[6]], _characterPositionTileY[_currentCharacterVariables[6]]) " ) ;
break ;
}
case 0xF6 :
str = " _savedMousePosDivided " ;
break ;
default :
str = Common : : String : : format ( " (0x%x,0x%x) " , curWord > > 8 , curWord & 0xFF ) ;
break ;
}
} else if ( type = = kCompareOperation ) {
int comp = script . readUint16LE ( ) ;
if ( comp ! = ' < ' & & comp ! = ' > ' )
comp = ' = ' ;
str = Common : : String : : format ( " %c " , comp ) ;
}
else if ( type = = kComputeOperation ) {
int comp = script . readUint16LE ( ) ;
str = Common : : String : : format ( " %c " , comp ) ;
}
return str ;
}
2012-04-28 18:52:15 +02:00
void LilliputScript : : disasmScript ( ScriptStream script ) {
while ( ! script . eos ( ) ) {
uint16 val = script . readUint16LE ( ) ;
if ( val = = 0xFFF6 ) // end of script
return ;
bool hasIf = false ;
2012-05-12 22:21:02 +02:00
if ( val ! = 0xFFF8 ) {
2012-04-28 18:52:15 +02:00
hasIf = true ;
}
2012-05-12 22:21:02 +02:00
2012-05-01 03:29:56 +02:00
bool firstIf = true ;
2012-04-28 18:52:15 +02:00
// check the conditions.
while ( val ! = 0xFFF8 ) {
bool neg = false ;
2012-04-29 14:57:36 +02:00
if ( val > = 1000 ) {
2012-04-28 18:52:15 +02:00
val - = 1000 ;
// negative condition
neg = true ;
}
// op code type 1
assert ( val < sizeof ( opCodes1 ) / sizeof ( OpCode ) ) ;
2012-05-12 22:21:02 +02:00
const OpCode * opCode = & opCodes1 [ val ] ;
const KValueType * opArgType = & opCode - > _arg1 ;
2012-04-28 18:52:15 +02:00
Common : : String str ;
2012-05-12 22:21:02 +02:00
if ( firstIf ) {
2012-05-01 03:29:56 +02:00
str = " if ( " ;
firstIf = false ;
} else {
str = " " ;
}
2012-05-12 22:21:02 +02:00
if ( neg )
str + = " not " ;
2012-04-28 18:52:15 +02:00
str + = Common : : String ( opCode - > _opName ) ;
str + = " ( " ;
for ( int p = 0 ; p < opCode - > _numArgs ; p + + ) {
2012-05-01 14:35:19 +02:00
str + = getArgumentString ( * opArgType , script ) ;
2012-05-12 22:21:02 +02:00
if ( p ! = opCode - > _numArgs - 1 )
2012-04-28 18:52:15 +02:00
str + = " , " ;
opArgType + + ;
}
str + = " ) " ;
2012-05-01 03:29:56 +02:00
2012-04-28 18:52:15 +02:00
val = script . readUint16LE ( ) ;
2012-05-12 22:21:02 +02:00
if ( val = = 0xFFF8 ) {
2012-05-01 03:29:56 +02:00
str + = " ) " ;
}
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " %s " , str . c_str ( ) ) ;
2012-05-01 03:29:56 +02:00
}
2012-04-28 18:52:15 +02:00
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " { " ) ;
2012-04-28 18:52:15 +02:00
2012-05-01 03:29:56 +02:00
val = script . readUint16LE ( ) ;
2012-04-28 18:52:15 +02:00
while ( val ! = 0xFFF7 ) {
2012-05-01 03:29:56 +02:00
// op code type 2
2012-05-12 22:21:02 +02:00
assert ( val < sizeof ( opCodes2 ) / sizeof ( OpCode ) ) ;
const OpCode * opCode = & opCodes2 [ val ] ;
const KValueType * opArgType = & opCode - > _arg1 ;
2012-05-01 03:29:56 +02:00
Common : : String str ;
str = " " ;
str + = Common : : String ( opCode - > _opName ) ;
str + = " ( " ;
for ( int p = 0 ; p < opCode - > _numArgs ; p + + ) {
2012-05-01 14:35:19 +02:00
str + = getArgumentString ( * opArgType , script ) ;
2012-05-01 03:29:56 +02:00
if ( p ! = opCode - > _numArgs - 1 )
str + = " , " ;
2012-05-13 03:21:09 +02:00
if ( p < 4 )
2012-05-01 03:29:56 +02:00
opArgType + + ;
}
str + = " ); " ;
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " %s " , str . c_str ( ) ) ;
2012-04-28 18:52:15 +02:00
val = script . readUint16LE ( ) ;
}
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " } " ) ;
debugC ( 2 , kDebugScriptTBC , " " ) ;
2012-04-28 18:52:15 +02:00
}
}
2012-04-27 22:08:56 +02:00
int LilliputScript : : handleOpcode ( ScriptStream * script ) {
2012-05-09 08:07:58 +02:00
debugC ( 2 , kDebugScript , " handleOpcode " ) ;
2012-05-03 19:08:44 +02:00
2012-04-06 22:45:43 +02:00
_currScript = script ;
uint16 curWord = _currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
if ( curWord = = 0xFFF6 )
2012-04-09 11:30:58 +02:00
return 0xFF ;
2012-04-04 00:03:41 +02:00
2012-04-06 22:45:43 +02:00
for ( ; curWord ! = 0xFFF8 ; curWord = _currScript - > readUint16LE ( ) ) {
2012-04-04 00:03:41 +02:00
byte mask = 0 ;
if ( curWord > 1000 ) {
curWord - = 1000 ;
mask = 1 ;
}
byte result = handleOpcodeType1 ( curWord ) ;
if ( ( result ^ mask ) = = 0 ) {
do {
2012-04-06 22:45:43 +02:00
curWord = _currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
} while ( curWord ! = 0xFFF7 ) ;
return 0 ;
}
}
2012-04-06 22:45:43 +02:00
_vm - > _byte1714E = 1 ;
2012-04-04 00:03:41 +02:00
for ( ; ; ) {
2012-04-06 22:45:43 +02:00
curWord = _currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
if ( curWord = = 0xFFF7 )
2012-04-06 22:45:43 +02:00
return _vm - > _byte1714E ;
2012-04-04 00:03:41 +02:00
handleOpcodeType2 ( curWord ) ;
}
}
2012-04-27 22:08:56 +02:00
void LilliputScript : : runScript ( ScriptStream script ) {
2012-05-09 08:07:58 +02:00
debugC ( 1 , kDebugScript , " runScript " ) ;
2012-05-03 19:08:44 +02:00
2012-04-04 00:03:41 +02:00
_byte16F05_ScriptHandler = 1 ;
2012-04-06 22:45:43 +02:00
while ( handleOpcode ( & script ) ! = 0xFF )
2012-04-19 08:03:19 +02:00
_vm - > update ( ) ;
2012-04-06 22:45:43 +02:00
}
2012-04-27 22:08:56 +02:00
void LilliputScript : : runMenuScript ( ScriptStream script ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " runMenuScript " ) ;
2012-05-03 19:08:44 +02:00
2012-04-11 10:59:42 +02:00
_byte16F05_ScriptHandler = 0 ;
while ( handleOpcode ( & script ) = = 0 )
2012-04-19 08:03:19 +02:00
_vm - > update ( ) ;
2012-04-11 10:59:42 +02:00
}
2012-05-10 08:11:45 +02:00
byte LilliputScript : : compareValues ( int var1 , int oper , int var2 ) {
debugC ( 2 , kDebugScript , " compareValues(%d, %c, %d) " , var1 , oper & 0xFF , var2 ) ;
2012-05-03 19:08:44 +02:00
2012-04-06 22:45:43 +02:00
switch ( oper & 0xFF ) {
case ' < ' :
2012-05-10 08:11:45 +02:00
if ( var1 < var2 )
return 1 ;
break ;
2012-04-06 22:45:43 +02:00
case ' > ' :
2012-05-10 08:11:45 +02:00
if ( var1 > var2 )
return 1 ;
break ;
2012-04-06 22:45:43 +02:00
default :
2012-05-10 08:11:45 +02:00
if ( var1 = = var2 )
return 1 ;
2012-04-06 22:45:43 +02:00
break ;
}
2012-05-10 08:11:45 +02:00
return 0 ;
2012-04-06 22:45:43 +02:00
}
2012-04-28 09:08:11 +02:00
void LilliputScript : : computeOperation ( byte * bufPtr , int oper , int var3 ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " computeOperation(bufPtr, %c, %d) " , oper & 0xFF , var3 & 0xFF ) ;
2012-04-08 12:54:56 +02:00
switch ( oper & 0xFF ) {
case ' = ' :
2012-04-28 09:08:11 +02:00
bufPtr [ 0 ] = var3 & 0xFF ;
2012-04-08 12:54:56 +02:00
break ;
case ' + ' : {
2012-04-28 09:08:11 +02:00
int tmpVal = bufPtr [ 0 ] + var3 ;
2012-04-08 12:54:56 +02:00
if ( tmpVal > 0xFF )
bufPtr [ 0 ] = 0xFF ;
else
bufPtr [ 0 ] = ( byte ) tmpVal ;
}
break ;
case ' - ' : {
2012-04-28 09:08:11 +02:00
int tmpVal = bufPtr [ 0 ] - var3 ;
2012-04-08 12:54:56 +02:00
if ( tmpVal < 0 )
bufPtr [ 0 ] = 0 ;
else
bufPtr [ 0 ] = ( byte ) tmpVal ;
}
break ;
case ' * ' : {
2012-04-28 09:08:11 +02:00
int tmpVal = bufPtr [ 0 ] * var3 ;
2012-04-08 12:54:56 +02:00
bufPtr [ 0 ] = tmpVal & 0xFF ;
}
break ;
case ' / ' : {
2012-04-28 09:08:11 +02:00
if ( var3 ! = 0 )
bufPtr [ 0 ] / = var3 ;
2012-04-08 12:54:56 +02:00
}
break ;
default : {
warning ( " computeOperation : oper %d " , oper ) ;
2012-04-28 09:08:11 +02:00
if ( var3 ! = 0 ) {
int tmpVal = bufPtr [ 0 ] / var3 ;
2012-04-08 12:54:56 +02:00
if ( tmpVal < 0 )
bufPtr [ 0 ] = 0xFF ;
else
bufPtr [ 0 ] = 0 ;
}
break ;
}
}
}
2012-05-02 18:52:15 +02:00
void LilliputScript : : sub1823E ( byte index , byte var1 , byte * curBufPtr ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " sub1823E(%d, %d, curBufPtr) " , index , var1 ) ;
2012-04-08 12:54:56 +02:00
2012-05-02 18:52:15 +02:00
assert ( index < 40 ) ;
_characterScriptEnabled [ index ] = 1 ;
curBufPtr [ 0 ] = var1 ;
2012-04-08 12:54:56 +02:00
curBufPtr [ 1 ] = 0 ;
curBufPtr [ 2 ] = 0 ;
curBufPtr [ 3 ] = 0 ;
}
2012-04-12 00:54:12 +02:00
void LilliputScript : : sub17B6C ( int var1 ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " sub17B6C(%d) " , var1 ) ;
2012-04-12 00:54:12 +02:00
if ( var1 = = 0 ) {
int curWord = 0 ;
while ( curWord ! = 0xFFF6 )
curWord = _currScript - > readUint16LE ( ) ;
_currScript - > seek ( _currScript - > pos ( ) - 4 ) ;
return ;
}
+ + var1 ;
int curVal = 0 ;
int tmpVal ;
while ( curVal < var1 ) {
tmpVal = _currScript - > readUint16LE ( ) ;
if ( tmpVal = = 0xFFF7 )
+ + curVal ;
}
_currScript - > seek ( _currScript - > pos ( ) - 2 ) ;
}
2012-04-12 20:53:38 +02:00
void LilliputScript : : sub16C86 ( int index , byte * buf ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " sub16C86() " ) ;
2012-04-12 20:53:38 +02:00
_array12811 [ index ] = 0 ;
for ( int i = 0 ; i < 16 ; i + + ) {
2012-05-08 21:38:43 +02:00
_array12311 [ ( index * 16 ) + i ] = Common : : Point ( buf [ ( 2 * i ) + 1 ] , buf [ 2 * i ] ) ;
2012-04-12 20:53:38 +02:00
}
}
void LilliputScript : : sub16C5C ( int index , byte var3 ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " sub16C5C(%d, %d) " , index , var3 ) ;
2012-04-12 20:53:38 +02:00
assert ( index < 40 ) ;
_array12839 [ index ] = var3 ;
byte * buf = _vm - > _rulesChunk1 ;
if ( var3 ! = 0 ) {
int count = 0 ;
while ( count < var3 ) {
if ( ( buf [ 0 ] = = 0xFF ) & & ( buf [ 1 ] = = 0xFF ) )
+ + count ;
2012-05-15 01:37:00 +02:00
buf + = 2 ;
2012-04-12 20:53:38 +02:00
}
}
sub16C86 ( index , buf ) ;
}
2012-04-28 16:24:47 +02:00
void LilliputScript : : sub17D40 ( bool & forceReturnFl ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " sub17D40() " ) ;
2012-04-15 01:40:41 +02:00
2012-04-28 16:24:47 +02:00
forceReturnFl = false ;
2012-05-01 23:32:44 +02:00
if ( ( _vm - > _displayMap ! = 1 ) & & ( _vm - > _characterRelativePositionX [ _vm - > _currentScriptCharacter ] ! = 0xFF ) )
2012-04-28 16:24:47 +02:00
return ;
2012-04-15 01:40:41 +02:00
2012-04-28 16:24:47 +02:00
forceReturnFl = true ;
return ;
2012-04-15 01:40:41 +02:00
}
2012-04-29 00:35:44 +02:00
void LilliputScript : : sub189F5 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " sub189F5() " ) ;
2012-04-29 00:35:44 +02:00
int index = 0 ;
int var2 = 0x100 ;
int var1 ;
for ( ; ; ) {
2012-05-13 03:21:09 +02:00
var1 = _vm - > _displayStringBuf [ index + + ] ;
2012-04-29 00:35:44 +02:00
if ( var1 = = 0 )
break ;
if ( var1 = = ' | ' ) {
var2 & = 0xFF ;
+ + var2 ;
continue ;
}
var2 + = 0x100 ;
if ( ( var2 > > 8 ) < 61 )
continue ;
if ( ( var2 & 0xFF ) = = 1 ) {
_vm - > _displayStringBuf [ index - 1 ] = 0 ;
break ;
}
- - index ;
while ( _vm - > _displayStringBuf [ index ] ! = ' ' )
- - index ;
_vm - > _displayStringBuf [ index ] = ' | ' ;
+ + var2 ;
var2 & = 0xFF ;
+ + index ;
}
}
void LilliputScript : : sub189B8 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " sub189B8() " ) ;
2012-04-29 00:35:44 +02:00
sub189F5 ( ) ;
int index = 0 ;
for ( ; ; ) {
if ( _vm - > _displayStringBuf [ index ] = = 0 )
break ;
+ + index ;
}
2012-05-11 23:32:26 +02:00
index / = _speechDisplaySpeed ;
2012-04-29 00:35:44 +02:00
index + = 4 ;
2012-05-11 23:32:26 +02:00
_speechTimer = index ;
2012-04-29 00:35:44 +02:00
_vm - > displayFunction10 ( ) ;
_vm - > displayFunction11 ( _vm - > _displayStringBuf ) ;
}
2012-05-09 08:07:58 +02:00
void LilliputScript : : decodePackedText ( char * buf ) {
debugC ( 2 , kDebugScriptTBC , " decodePackedText(buf) " ) ;
2012-04-29 00:35:44 +02:00
static const char * nounsArrayPtr = " I am |You are |you are |hou art |in the |is the |is a |in a |To the |to the |by |going |here |The|the|and |some |build|not |way|I |a |an |from |of |him|her|by |his |ing |tion|have |you|I''ve |can''t |up |to |he |she |down |what|What|with|are |and|ent|ian|ome|ed |me|my|ai|it|is|of|oo|ea|er|es|th|we|ou|ow|or|gh|go|er|st|ee|th|sh|ch|ct|on|ly|ng|nd|nt|ty|ll|le|de|as|ie|in|ss|''s |''t |re|gg|tt|pp|nn|ay|ar|wh| " ;
_vm - > _displayStringIndex = 0 ;
_byte1881A = 0 ;
int index = 0 ;
byte var1 = 0 ;
for ( ; ; ) {
var1 = buf [ index ] ;
+ + index ;
if ( var1 = = ' ] ' )
var1 = 0 ;
if ( var1 < 0x80 ) {
if ( var1 = = ' @ ' ) {
var1 = buf [ index ] ;
+ + index ;
if ( var1 = = ' # ' ) {
_vm - > prepareGoldAmount ( _byte18823 ) ;
}
} else {
_vm - > addCharToBuf ( var1 ) ;
if ( var1 = = 0 )
break ;
}
} else {
int nounIndex = 0 ;
byte var3 = 0xFF - var1 ;
for ( int i = 0 ; i < var3 ; i + + ) {
for ( ; ; ) {
var1 = nounsArrayPtr [ nounIndex ] ;
+ + nounIndex ;
if ( var1 = = ' | ' )
break ;
}
}
for ( ; ; ) {
var1 = nounsArrayPtr [ nounIndex ] ;
+ + nounIndex ;
if ( var1 = = ' | ' )
break ;
_vm - > addCharToBuf ( var1 ) ;
}
}
}
sub189B8 ( ) ;
2012-04-15 01:40:41 +02:00
}
2012-05-03 19:08:44 +02:00
int LilliputScript : : sub18BB7 ( int index ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " sub18BB7(%d) " , index ) ;
2012-05-03 19:08:44 +02:00
2012-05-09 08:07:58 +02:00
int chunk4Index = _vm - > _packedStringIndex [ index ] ;
2012-05-03 19:08:44 +02:00
int result = 0 ;
2012-05-09 08:07:58 +02:00
while ( _vm - > _packedStrings [ chunk4Index + result ] = = 0x5B )
2012-05-03 19:08:44 +02:00
+ + result ;
return result + 1 ;
}
2012-05-12 18:04:07 +02:00
void LilliputScript : : listAllTexts ( ) {
debugC ( 1 , kDebugScriptTBC , " All Game Texts : " ) ;
for ( int i = 0 ; i < _vm - > _packedStringNumb ; i + + ) {
int index = _vm - > _packedStringIndex [ i ] ;
int variantCount = 0 ;
while ( _vm - > _packedStrings [ index + variantCount ] = = 0x5B )
+ + variantCount ;
int it = 0 ;
/*if (variantCount != 0) {
for ( int j = 0 ; j < variantCount ; j + + ) {
decodePackedText ( & _vm - > _packedStrings [ index + variantCount + it ] ) ;
warning ( " Text 0x%x variant %d : %s " , i , j , _vm - > _displayStringBuf ) ;
do {
+ + it ;
}
while ( _vm - > _packedStrings [ index + variantCount + it ] ! = 0x5B ) ;
}
} else { */
decodePackedText ( & _vm - > _packedStrings [ index + variantCount ] ) ;
debugC ( 1 , kDebugScriptTBC , " Text 0x%x variant 0 : %s " , i , _vm - > _displayStringBuf ) ;
/* }*/
}
}
2012-04-15 01:40:41 +02:00
void LilliputScript : : sub18B3C ( int var ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " sub18B3C(%d) " , var ) ;
2012-04-15 01:40:41 +02:00
2012-05-12 09:02:01 +02:00
if ( var = = - 1 )
2012-04-15 01:40:41 +02:00
return ;
_word18776 = var ;
2012-05-09 08:07:58 +02:00
int index = _vm - > _packedStringIndex [ var ] ;
2012-04-15 01:40:41 +02:00
int count = 0 ;
2012-05-12 18:04:07 +02:00
while ( _vm - > _packedStrings [ index + count ] = = 0x5B )
2012-04-15 01:40:41 +02:00
+ + count ;
int i = 0 ;
if ( count ! = 0 ) {
int tmpVal = _vm - > _rnd - > getRandomNumber ( count + 1 ) ;
if ( tmpVal ! = 0 ) {
for ( int j = 0 ; j < tmpVal ; j + + ) {
do
+ + i ;
2012-05-09 08:07:58 +02:00
while ( _vm - > _packedStrings [ index + count + i ] ! = 0x5B ) ;
2012-04-15 01:40:41 +02:00
}
}
}
2012-05-09 08:07:58 +02:00
decodePackedText ( & _vm - > _packedStrings [ index + count + i ] ) ;
2012-04-15 01:40:41 +02:00
}
2012-05-04 23:13:43 +02:00
int16 LilliputScript : : getValue1 ( ) {
2012-05-10 08:11:45 +02:00
debugC ( 2 , kDebugScript , " getValue1() " ) ;
2012-04-15 01:40:41 +02:00
2012-05-04 23:13:43 +02:00
int16 curWord = _currScript - > readUint16LE ( ) ;
2012-04-07 18:09:30 +02:00
if ( curWord < 1000 )
return curWord ;
switch ( curWord ) {
case 1000 :
return ( int ) _byte129A0 ;
case 1001 :
2012-05-01 23:32:44 +02:00
return _vm - > _currentScriptCharacter ;
2012-04-07 18:09:30 +02:00
case 1002 :
return _word16F00 ;
case 1003 :
2012-05-01 14:35:19 +02:00
return ( int ) _vm - > _currentCharacterVariables [ 6 ] ;
2012-04-07 18:09:30 +02:00
case 1004 :
2012-05-04 23:13:43 +02:00
return _vm - > _word10804 ;
2012-04-07 18:09:30 +02:00
default :
warning ( " getValue1: Unexpected large value %d " , curWord ) ;
return curWord ;
}
}
2012-05-05 21:34:58 +02:00
Common : : Point LilliputScript : : getPosFromScript ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " getPosFromScript() " ) ;
2012-04-09 11:30:58 +02:00
2012-04-07 14:36:04 +02:00
int curWord = _currScript - > readUint16LE ( ) ;
int tmpVal = curWord > > 8 ;
switch ( tmpVal ) {
case 0xFF :
2012-05-01 23:32:44 +02:00
assert ( ( _vm - > _currentScriptCharacter > = 0 ) & & ( _vm - > _currentScriptCharacter < 40 ) ) ;
2012-05-05 21:34:58 +02:00
return Common : : Point ( _vm - > _rulesBuffer2_13 [ _vm - > _currentScriptCharacter ] , _vm - > _rulesBuffer2_14 [ _vm - > _currentScriptCharacter ] ) ;
2012-04-07 14:36:04 +02:00
case 0xFE : {
2012-05-05 21:34:58 +02:00
int8 index = curWord & 0xFF ;
2012-04-07 14:36:04 +02:00
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
2012-05-05 21:34:58 +02:00
return Common : : Point ( _vm - > _rulesBuffer2_13 [ index ] , _vm - > _rulesBuffer2_14 [ index ] ) ;
2012-04-07 14:36:04 +02:00
}
case 0xFD :
2012-05-05 21:34:58 +02:00
return _vm - > _currentScriptCharacterPos ;
2012-04-08 15:03:41 +02:00
case 0xFC : {
2012-05-05 21:34:58 +02:00
int8 index = curWord & 0xFF ;
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
int16 x = _vm - > _characterPositionX [ index ] > > 3 ;
int16 y = _vm - > _characterPositionY [ index ] > > 3 ;
2012-04-08 15:03:41 +02:00
2012-05-05 21:34:58 +02:00
return Common : : Point ( x , y ) ;
2012-04-08 15:03:41 +02:00
}
case 0xFB : {
int index = _word16F00 ;
2012-05-05 21:34:58 +02:00
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
int16 x = _vm - > _characterPositionX [ index ] > > 3 ;
int16 y = _vm - > _characterPositionY [ index ] > > 3 ;
2012-04-08 15:03:41 +02:00
2012-05-05 21:34:58 +02:00
return Common : : Point ( x , y ) ;
2012-04-08 15:03:41 +02:00
}
2012-04-07 14:36:04 +02:00
case 0xFA :
2012-05-06 10:04:09 +02:00
return Common : : Point ( _vm - > _array10999PosX [ _vm - > _currentScriptCharacter ] , _vm - > _array109C1PosY [ _vm - > _currentScriptCharacter ] ) ;
2012-04-07 14:36:04 +02:00
case 0xF9 :
2012-05-05 21:34:58 +02:00
return Common : : Point ( _vm - > _currentCharacterVariables [ 4 ] , _vm - > _currentCharacterVariables [ 5 ] ) ;
2012-04-07 14:36:04 +02:00
case 0xF8 : {
2012-05-05 21:34:58 +02:00
int8 index = curWord & 0xFF ;
2012-04-07 14:36:04 +02:00
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
2012-05-06 23:38:13 +02:00
return _vm - > _rulesBuffer12Pos3 [ index ] ;
2012-04-07 14:36:04 +02:00
}
2012-04-08 15:03:41 +02:00
case 0xF7 : {
2012-05-05 21:34:58 +02:00
int8 index = _vm - > _currentCharacterVariables [ 6 ] ;
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
int16 x = _vm - > _characterPositionX [ index ] > > 3 ;
int16 y = _vm - > _characterPositionY [ index ] > > 3 ;
2012-04-08 15:03:41 +02:00
2012-05-05 21:34:58 +02:00
return Common : : Point ( x , y ) ;
2012-04-08 15:03:41 +02:00
}
2012-04-07 14:36:04 +02:00
case 0xF6 :
2012-04-11 10:59:42 +02:00
return _vm - > _savedMousePosDivided ;
2012-04-07 14:36:04 +02:00
default :
2012-05-08 18:36:01 +02:00
Common : : Point pos = Common : : Point ( curWord > > 8 , curWord & 0xFF ) ;
2012-05-15 01:37:00 +02:00
//warning("getPosFromScript - High value %d -> %d %d", curWord, pos.x, pos.y);
2012-05-08 18:36:01 +02:00
return pos ;
2012-04-07 14:36:04 +02:00
}
}
2012-04-07 18:09:30 +02:00
void LilliputScript : : sub130B6 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " sub130B6() " ) ;
2012-05-03 19:08:44 +02:00
2012-04-07 18:09:30 +02:00
assert ( _vm - > _word12F68_ERULES < = 20 ) ;
for ( int i = 0 ; i < _vm - > _word12F68_ERULES ; i + + ) {
if ( _array122E9 [ i ] = = 3 )
_array122E9 [ i ] = 2 ;
2012-04-06 22:45:43 +02:00
}
}
2012-05-01 14:35:19 +02:00
byte * LilliputScript : : getCharacterVariablePtr ( ) {
2012-05-10 08:11:45 +02:00
debugC ( 2 , kDebugScript , " getCharacterVariablePtr() " ) ;
2012-04-27 22:54:43 +02:00
2012-05-04 23:13:43 +02:00
int8 tmpVal = ( int8 ) ( getValue1 ( ) & 0xFF ) ;
int index = tmpVal * 32 ;
index + = _currScript - > readUint16LE ( ) ;
return _vm - > getCharacterVariablesPtr ( index ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-06 10:04:09 +02:00
byte LilliputScript : : OC_checkCharacterGoalPos ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " OC_checkCharacterGoalPos() " ) ;
2012-05-03 19:08:44 +02:00
2012-05-05 21:34:58 +02:00
if ( _vm - > _currentScriptCharacterPos = = getPosFromScript ( ) ) {
2012-04-28 02:59:43 +02:00
return 1 ;
}
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 22:54:43 +02:00
2012-05-06 10:04:09 +02:00
byte LilliputScript : : OC_comparePos ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " OC_comparePos() " ) ;
2012-04-27 22:54:43 +02:00
int index = getValue1 ( ) ;
2012-05-06 22:32:23 +02:00
byte d1 = _array16123PosX [ index ] ;
byte d2 = _array1614BPosY [ index ] ;
2012-05-05 21:34:58 +02:00
Common : : Point var1 = getPosFromScript ( ) ;
2012-04-27 22:54:43 +02:00
2012-05-05 21:34:58 +02:00
if ( var1 = = Common : : Point ( d1 , d2 ) )
2012-04-27 22:54:43 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 22:54:43 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub1740A ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1740A() " ) ;
2012-04-28 01:03:11 +02:00
2012-05-05 21:34:58 +02:00
Common : : Point var = _vm - > _currentScriptCharacterPos ;
if ( var = = Common : : Point ( - 1 , - 1 ) ) {
2012-04-28 01:03:11 +02:00
_currScript - > readUint16LE ( ) ;
return 0 ;
}
2012-04-28 08:19:54 +02:00
byte * isoMapBuf = getMapPtr ( var ) ;
2012-04-28 01:03:11 +02:00
int var2 = isoMapBuf [ 3 ] ;
int var3 = _currScript - > readUint16LE ( ) ;
int var4 = 8 > > var3 ;
if ( var2 & var4 ) {
return 1 ;
} else {
return 0 ;
}
2012-04-04 00:03:41 +02:00
}
2012-04-06 22:45:43 +02:00
2012-05-10 08:11:45 +02:00
byte LilliputScript : : OC_compareCharacterId ( ) {
debugC ( 1 , kDebugScript , " OC_compareCharacterId() " ) ;
2012-04-07 14:36:04 +02:00
2012-05-01 14:35:19 +02:00
byte * tmpArr = getCharacterVariablePtr ( ) ;
2012-04-06 22:45:43 +02:00
byte var1 = tmpArr [ 0 ] ;
uint16 oper = _currScript - > readUint16LE ( ) ;
int16 var2 = _currScript - > readUint16LE ( ) ;
2012-04-08 12:54:56 +02:00
return compareValues ( var1 , oper , var2 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-06 22:45:43 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_CompareByte16F02With ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CompareByte16F02With() " ) ;
2012-04-28 01:03:11 +02:00
int operation = _currScript - > readUint16LE ( ) ;
int val2 = _currScript - > readUint16LE ( ) ;
return compareValues ( _byte16F02 , operation , val2 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-06 22:45:43 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_getRandom ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_getRandom() " ) ;
2012-04-12 20:53:38 +02:00
int maxVal = _currScript - > readUint16LE ( ) ;
2012-04-15 01:40:41 +02:00
int rand = _vm - > _rnd - > getRandomNumber ( maxVal ) ;
_byte16F02 = ( rand & 0xFF ) ;
2012-04-12 20:53:38 +02:00
2012-04-15 01:40:41 +02:00
if ( rand = = 0 )
2012-04-12 20:53:38 +02:00
return 1 ;
2012-04-15 01:40:41 +02:00
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 20:53:38 +02:00
2012-04-27 23:17:40 +02:00
byte LilliputScript : : OC_for ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_for() " ) ;
2012-04-27 22:54:43 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
int tmpVal = _currScript - > readUint16LE ( ) + 1 ;
// no need to seek later, the move is already done
_currScript - > writeUint16LE ( tmpVal , - 2 ) ;
// overwrite the recently used "variable" in the script
if ( tmpVal < var1 )
return 0 ;
2012-04-27 23:17:40 +02:00
_currScript - > writeUint16LE ( 0 , - 2 ) ;
2012-04-27 22:54:43 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:18:59 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_compWord18776 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_compWord18776() " ) ;
2012-04-28 09:08:11 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
if ( var1 = = _word18776 )
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_checkSaveFlag ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_checkSaveFlag() " ) ;
2012-04-08 12:54:56 +02:00
if ( _vm - > _saveFlag )
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-08 12:54:56 +02:00
2012-04-28 09:08:11 +02:00
byte LilliputScript : : OC_compByte16F04 ( ) {
warning ( " OC_compByte16F04 " ) ;
byte var1 = _byte16F04 ;
uint16 oper = _currScript - > readUint16LE ( ) ;
int16 var2 = _currScript - > readUint16LE ( ) ;
return compareValues ( var1 , oper , var2 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub174D8 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub174D8() " ) ;
2012-04-12 00:54:12 +02:00
byte tmpVal = getValue1 ( ) & 0xFF ;
int curWord = _currScript - > readUint16LE ( ) ;
if ( curWord = = 3000 ) {
int index ;
2012-04-28 02:59:43 +02:00
for ( index = 0 ; index < _vm - > _numCharacters ; index + + ) {
2012-04-12 00:54:12 +02:00
if ( _vm - > _rulesBuffer2_5 [ index ] = = tmpVal ) {
_word16F00 = index ;
return 1 ;
}
}
} else {
_currScript - > seek ( _currScript - > pos ( ) - 2 ) ;
int index = getValue1 ( ) ;
assert ( index < 40 ) ;
if ( _vm - > _rulesBuffer2_5 [ index ] = = tmpVal ) {
_word16F00 = index ;
return 1 ;
}
}
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 00:54:12 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_CompareCharacterVariables ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CompareCharacterVariables() " ) ;
2012-04-28 18:52:15 +02:00
2012-05-01 14:35:19 +02:00
byte * buf1 = getCharacterVariablePtr ( ) ;
2012-04-28 18:52:15 +02:00
int var1 = * buf1 ;
int operation = _currScript - > readUint16LE ( ) ;
2012-05-01 14:35:19 +02:00
byte * buf2 = getCharacterVariablePtr ( ) ;
2012-04-28 18:52:15 +02:00
int var2 = * buf2 ;
return compareValues ( var1 , operation , var2 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-26 00:21:44 +02:00
2012-05-06 10:04:09 +02:00
// TODO Rename function to "Check if character pos in rectangle"
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_compareCoords_1 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_compareCoords_1() " ) ;
2012-04-26 00:21:44 +02:00
int index = _currScript - > readUint16LE ( ) ;
assert ( index < 40 ) ;
2012-05-09 08:07:58 +02:00
int16 var3 = _vm - > _rectXMinMax [ index ] ;
int16 var4 = _vm - > _rectYMinMax [ index ] ;
2012-05-05 21:34:58 +02:00
Common : : Point var1 = _vm - > _currentScriptCharacterPos ;
2012-04-26 00:21:44 +02:00
2012-05-05 21:34:58 +02:00
if ( ( var1 . x < ( var3 > > 8 ) ) | | ( var1 . x > ( var3 & 0xFF ) ) | | ( var1 . y < ( var4 > > 8 ) ) | | ( var1 . y > ( var4 & 0xFF ) ) )
2012-04-26 00:21:44 +02:00
return 0 ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-26 00:21:44 +02:00
2012-05-06 10:04:09 +02:00
// TODO Rename function to "Check if character pos in rectangle"
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_compareCoords_2 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_compareCoords_2() " ) ;
2012-04-28 18:52:15 +02:00
2012-05-09 08:07:58 +02:00
int16 index = getValue1 ( ) ;
2012-05-06 22:32:23 +02:00
Common : : Point var1 = Common : : Point ( _array16123PosX [ index ] , _array1614BPosY [ index ] ) ;
2012-05-09 08:07:58 +02:00
index = _currScript - > readUint16LE ( ) ;
uint16 var3 = _vm - > _rectXMinMax [ index ] ;
uint16 var4 = _vm - > _rectYMinMax [ index ] ;
2012-05-06 10:04:09 +02:00
if ( ( var1 . x < ( var3 > > 8 ) ) | | ( var1 . x > ( var3 & 0xFF ) ) | | ( var1 . y < ( var4 > > 8 ) ) | | ( var1 . y > ( var4 & 0xFF ) ) )
2012-04-28 18:52:15 +02:00
return 0 ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-05-06 10:04:09 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_CompareDistanceFromCharacterToPositionWith ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CompareDistanceFromCharacterToPositionWith() " ) ;
Common : : Point var1 = getPosFromScript ( ) ;
Common : : Point pos = _vm - > _currentScriptCharacterPos ;
int dx = var1 . x - pos . x ;
if ( dx < 0 ) dx = - dx ;
int dy = var1 . y - pos . y ;
if ( dy < 0 ) dy = - dy ;
int dist = dx + dy ;
uint16 operation = _currScript - > readUint16LE ( ) ;
int16 var2 = _currScript - > readUint16LE ( ) ;
return compareValues ( dist , operation , var2 ) ;
2012-04-04 00:03:41 +02:00
}
byte LilliputScript : : OC_sub1759E ( ) {
warning ( " OC_sub1759E " ) ;
return 0 ;
}
2012-04-12 00:54:12 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_IsCurrentCharacterIndex ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_IsCurrentCharacterIndex() " ) ;
2012-04-12 00:54:12 +02:00
int tmpVal = getValue1 ( ) ;
2012-05-01 23:32:44 +02:00
if ( tmpVal = = _vm - > _currentScriptCharacter )
2012-04-12 00:54:12 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub175C8 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub175C8() " ) ;
2012-04-12 20:53:38 +02:00
byte var4 = _currScript - > readUint16LE ( ) & 0xFF ;
int tmpVal = _currScript - > readUint16LE ( ) ;
if ( tmpVal < 2000 ) {
_currScript - > seek ( _currScript - > pos ( ) - 2 ) ;
int index = getValue1 ( ) ;
2012-05-01 23:32:44 +02:00
int var1 = _array10B51 [ ( _vm - > _currentScriptCharacter * 40 ) + index ] ;
2012-04-12 20:53:38 +02:00
if ( ( var1 & 0xFF ) < var4 )
return 0 ;
_word16F00 = index ;
return 1 ;
}
if ( tmpVal = = 3000 ) {
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2012-05-01 23:32:44 +02:00
int var1 = _array10B51 [ ( _vm - > _currentScriptCharacter * 40 ) + i ] ;
2012-04-12 20:53:38 +02:00
if ( ( var1 & 0xFF ) > = var4 ) {
_word16F00 = i ;
return 1 ;
}
}
return 0 ;
}
tmpVal - = 2000 ;
byte var4b = tmpVal & 0xFF ;
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2012-05-01 23:32:44 +02:00
int var1 = _array10B51 [ ( _vm - > _currentScriptCharacter * 40 ) + i ] ;
2012-04-12 20:53:38 +02:00
if ( ( var1 & 0xFF ) > = var4 ) {
if ( _vm - > _rulesBuffer2_12 [ i ] = = var4b ) {
_word16F00 = i ;
return 1 ;
}
}
}
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub17640 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub176C4() " ) ;
2012-04-26 08:35:47 +02:00
int var4 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
int index = _vm - > _currentScriptCharacter * 40 ;
2012-04-26 08:35:47 +02:00
int tmpVal = _currScript - > readUint16LE ( ) ;
if ( tmpVal > = 2000 ) {
int var1 = tmpVal ;
if ( var1 = = 3000 ) {
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2012-04-26 08:35:47 +02:00
tmpVal = _array10B51 [ index + i ] ;
byte v1 = tmpVal & 0xFF ;
byte v2 = tmpVal > > 8 ;
if ( ( v1 > = ( var4 & 0xFF ) ) & & ( v2 < ( var4 & 0xFF ) ) ) {
2012-05-12 09:02:01 +02:00
_word16F00 = i ;
2012-04-26 08:35:47 +02:00
return 1 ;
}
}
return 0 ;
} else {
var1 - = 2000 ;
var4 & = ( ( var1 & 0xFF ) < < 8 ) ;
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2012-04-26 08:35:47 +02:00
tmpVal = _array10B51 [ index + i ] ;
byte v1 = tmpVal & 0xFF ;
byte v2 = tmpVal > > 8 ;
2012-05-12 09:02:01 +02:00
if ( ( v1 > = ( var4 & 0xFF ) ) & & ( v2 < ( var4 & 0xFF ) ) & & ( _vm - > _rulesBuffer2_12 [ i ] ! = ( var4 > > 8 ) ) ) {
_word16F00 = i ;
2012-04-26 08:35:47 +02:00
return 1 ;
}
}
return 0 ;
}
} else {
_currScript - > seek ( _currScript - > pos ( ) - 2 ) ;
2012-05-12 09:02:01 +02:00
int subIndex = getValue1 ( ) ;
2012-04-26 08:35:47 +02:00
tmpVal = _array10B51 [ index + subIndex ] ;
byte v1 = tmpVal & 0xFF ;
byte v2 = tmpVal > > 8 ;
if ( ( v1 < ( var4 & 0xFF ) ) | | ( v2 > = ( var4 & 0xFF ) ) )
return 0 ;
_word16F00 = subIndex ;
return 1 ;
}
2012-04-04 00:03:41 +02:00
}
2012-04-12 20:53:38 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub176C4 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub176C4() " ) ;
2012-04-12 20:53:38 +02:00
byte var4 = _currScript - > readUint16LE ( ) & 0xFF ;
int tmpVal = _currScript - > readUint16LE ( ) ;
if ( tmpVal < 2000 ) {
_currScript - > seek ( _currScript - > pos ( ) - 2 ) ;
int index = getValue1 ( ) ;
2012-05-01 23:32:44 +02:00
int var1 = _array10B51 [ ( _vm - > _currentScriptCharacter * 40 ) + index ] ;
2012-04-12 20:53:38 +02:00
if ( ( ( var1 & 0xFF ) > = var4 ) | | ( ( var1 > > 8 ) < var4 ) )
return 0 ;
_word16F00 = index ;
return 1 ;
}
if ( tmpVal = = 3000 ) {
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2012-05-01 23:32:44 +02:00
int var1 = _array10B51 [ ( _vm - > _currentScriptCharacter * 40 ) + i ] ;
2012-04-12 20:53:38 +02:00
if ( ( ( var1 & 0xFF ) < var4 ) & & ( ( var1 > > 8 ) > = var4 ) ) {
_word16F00 = i ;
return 1 ;
}
}
return 0 ;
}
tmpVal - = 2000 ;
byte var4b = tmpVal & 0xFF ;
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2012-05-01 23:32:44 +02:00
int var1 = _array10B51 [ ( _vm - > _currentScriptCharacter * 40 ) + i ] ;
2012-04-12 20:53:38 +02:00
if ( ( ( var1 & 0xFF ) < var4 ) & & ( ( var1 > > 8 ) > = var4 ) ) {
if ( _vm - > _rulesBuffer2_12 [ i ] = = var4b ) {
_word16F00 = i ;
return 1 ;
}
}
}
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 20:53:38 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_compWord10804 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_compWord10804() " ) ;
2012-04-12 20:53:38 +02:00
byte tmpVal = getValue1 ( ) ;
2012-05-04 23:13:43 +02:00
if ( tmpVal = = _vm - > _word10804 )
2012-04-12 20:53:38 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub17766 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17766() " ) ;
2012-04-28 09:08:11 +02:00
byte var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-01 23:32:44 +02:00
if ( ( var1 = = _array12839 [ _vm - > _currentScriptCharacter ] ) & & ( _array12811 [ _vm - > _currentScriptCharacter ] ! = 16 ) )
2012-04-28 09:08:11 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-28 09:08:11 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub17782 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17782() " ) ;
2012-04-28 09:08:11 +02:00
byte var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-01 23:32:44 +02:00
if ( ( var1 = = _array12839 [ _vm - > _currentScriptCharacter ] ) & & ( _array12811 [ _vm - > _currentScriptCharacter ] = = 16 ) )
2012-04-28 09:08:11 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 17:45:46 +02:00
2012-05-05 21:34:58 +02:00
byte * LilliputScript : : getMapPtr ( Common : : Point val ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " getMapPtr(%d %d) " , val . x , val . y ) ;
2012-04-28 08:19:54 +02:00
2012-05-06 10:04:09 +02:00
return & _vm - > _bufferIsoMap [ ( val . y * 64 + val . x ) < < 2 ] ;
2012-04-27 17:45:46 +02:00
}
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_CompareMapValueWith ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CompareMapValueWith() " ) ;
2012-04-27 17:45:46 +02:00
2012-05-05 21:34:58 +02:00
Common : : Point tmpVal = getPosFromScript ( ) ;
2012-04-27 17:45:46 +02:00
2012-05-05 21:34:58 +02:00
if ( tmpVal = = Common : : Point ( - 1 , - 1 ) ) {
2012-04-27 17:45:46 +02:00
_currScript - > seek ( _currScript - > pos ( ) + 6 ) ;
return 0 ;
}
int var2 = _currScript - > readUint16LE ( ) ;
byte * buf = getMapPtr ( tmpVal ) ;
byte var1 = buf [ var2 ] ;
int oper = _currScript - > readUint16LE ( ) ;
2012-05-15 01:37:00 +02:00
var2 = _currScript - > readUint16LE ( ) ;
2012-04-27 17:45:46 +02:00
return compareValues ( var1 , oper , var2 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_IsCharacterValid ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_IsCharacterValid() " ) ;
2012-04-11 18:23:17 +02:00
2012-04-28 18:52:15 +02:00
int index = getValue1 ( ) ;
2012-05-08 18:36:01 +02:00
if ( _vm - > _characterPositionX [ index ] = = - 1 )
2012-04-11 18:23:17 +02:00
return 0 ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_compWord16EFE ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_compWord16EFE() " ) ;
2012-04-15 01:40:41 +02:00
2012-04-11 18:23:17 +02:00
byte curByte = _currScript - > readUint16LE ( ) & 0xFF ;
byte tmpVal = _vm - > _word16EFE > > 8 ;
if ( curByte ! = tmpVal )
return 0 ;
_word16F00 = ( _vm - > _word16EFE & 0xFF ) ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-11 18:23:17 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_AreCurrentCharacterVar0AndVar1EqualsTo ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_AreCurrentCharacterVar0AndVar1EqualsTo() " ) ;
2012-04-12 20:53:38 +02:00
byte var1 = _currScript - > readUint16LE ( ) & 0xFF ;
byte var2 = _currScript - > readUint16LE ( ) & 0xFF ;
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
2012-04-12 20:53:38 +02:00
2012-05-01 14:35:19 +02:00
if ( ( var1 = = _vm - > _currentCharacterVariables [ 0 ] ) & & ( var2 = = _vm - > _currentCharacterVariables [ 1 ] ) )
2012-04-12 20:53:38 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 00:54:12 +02:00
2012-05-12 18:04:07 +02:00
byte LilliputScript : : OC_CurrentCharacterVar0Equals ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CurrentCharacterVar0Equals() " ) ;
2012-04-12 00:54:12 +02:00
byte curByte = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
if ( _vm - > _currentCharacterVariables [ 0 ] = = curByte )
2012-04-12 00:54:12 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub17825 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17825() " ) ;
2012-04-11 10:59:42 +02:00
byte tmpVal = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
if ( ( _vm - > _byte16F07_menuId ! = 1 ) & & ( _vm - > _byte16F07_menuId ! = 3 ) )
return 0 ;
if ( tmpVal = = _byte12FE4 )
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub17844 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17844() " ) ;
2012-04-25 08:10:26 +02:00
int tmpVal = _currScript - > readUint16LE ( ) ;
if ( ( _vm - > _byte16F07_menuId = = 2 ) | | ( ( tmpVal & 0xFF ) ! = _byte12FE4 ) )
return 0 ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_CompareNumberOfCharacterWithVar0Equals ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CompareNumberOfCharacterWithVar0Equals() " ) ;
2012-04-12 00:54:12 +02:00
byte curByte = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
int count = 0 ;
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2012-05-04 23:13:43 +02:00
if ( curByte = = * _vm - > getCharacterVariablesPtr ( 32 * i ) )
2012-04-12 00:54:12 +02:00
+ + count ;
}
int oper = _currScript - > readUint16LE ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
return compareValues ( count , oper , var2 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_IsPositionInViewport ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_IsPositionInViewport() " ) ;
2012-04-28 18:52:15 +02:00
2012-05-05 21:34:58 +02:00
Common : : Point var1 = getPosFromScript ( ) ;
2012-04-28 18:52:15 +02:00
2012-05-05 21:34:58 +02:00
int dx = var1 . x - _viewportPos . x ;
int dy = var1 . y - _viewportPos . y ;
2012-04-28 18:52:15 +02:00
2012-05-05 21:34:58 +02:00
if ( ( dx > = 0 ) & & ( dx < 8 ) & & ( dy > = 0 ) & & ( dy < 8 ) )
2012-04-28 18:52:15 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-05-05 21:34:58 +02:00
2012-05-06 10:04:09 +02:00
byte LilliputScript : : OC_CompareGameVariables ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_CompareGameVariables() " ) ;
2012-04-28 18:52:15 +02:00
int var1 = getValue1 ( ) ;
2012-05-05 21:34:58 +02:00
int var2 = getValue1 ( ) ;
2012-04-28 18:52:15 +02:00
if ( var1 = = var2 )
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-05-05 21:34:58 +02:00
2012-05-06 10:04:09 +02:00
byte LilliputScript : : OC_skipNextOpcode ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_skipNextOpcode() " ) ;
2012-05-06 10:04:09 +02:00
2012-04-28 18:52:15 +02:00
_currScript - > readUint16LE ( ) ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-05-12 18:04:07 +02:00
byte LilliputScript : : OC_CurrentCharacterVar2Equals1 ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CurrentCharacterVar2Equals1() " ) ;
2012-04-11 18:23:17 +02:00
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
if ( _vm - > _currentCharacterVariables [ 2 ] = = 1 )
2012-04-11 18:23:17 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub178D2 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub178D2() " ) ;
2012-04-27 08:10:55 +02:00
int index = getValue1 ( ) ;
assert ( index < 40 ) ;
byte curByte = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
if ( curByte = = _vm - > _rulesBuffer2_12 [ index ] )
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 08:10:55 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_CharacterVariableAnd ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CharacterVariableAnd() " ) ;
2012-04-27 08:10:55 +02:00
2012-05-01 14:35:19 +02:00
byte * bufPtr = getCharacterVariablePtr ( ) ;
2012-04-27 08:10:55 +02:00
byte var1 = bufPtr [ 0 ] ;
byte curByte = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
if ( var1 & curByte )
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-26 00:21:44 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_IsCurrentCharacterVar0LessEqualThan ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_IsCurrentCharacterVar0LessEqualThan() " ) ;
2012-04-26 00:21:44 +02:00
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
2012-04-26 00:21:44 +02:00
byte curByte = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-01 14:35:19 +02:00
if ( curByte < = _vm - > _currentCharacterVariables [ 0 ] )
2012-04-26 00:21:44 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-26 00:21:44 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub1790F ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1790F() " ) ;
2012-04-26 00:21:44 +02:00
int index = getValue1 ( ) ;
assert ( index < 40 ) ;
if ( _vm - > _rulesBuffer2_5 [ index ] = = 0xFF )
return 0 ;
_word16F00 = _vm - > _rulesBuffer2_5 [ index ] ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-12 18:04:07 +02:00
byte LilliputScript : : OC_CurrentCharacterVar1Equals ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CurrentCharacterVar1Equals() " ) ;
2012-04-12 00:54:12 +02:00
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
2012-04-12 00:54:12 +02:00
byte curByte = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-01 14:35:19 +02:00
if ( _vm - > _currentCharacterVariables [ 1 ] = = curByte )
2012-04-12 00:54:12 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub1793E ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1793E() " ) ;
2012-04-26 00:21:44 +02:00
2012-05-05 21:34:58 +02:00
if ( _vm - > _currentScriptCharacterPos = = Common : : Point ( - 1 , - 1 ) )
2012-04-26 00:21:44 +02:00
return 0 ;
2012-05-01 23:32:44 +02:00
if ( _vm - > _array16E94 [ _vm - > _currentScriptCharacter ] = = 0 )
2012-04-26 00:21:44 +02:00
return 0 ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-15 01:37:00 +02:00
byte LilliputScript : : OC_CurrentCharacterVar3Equals1 ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_CurrentCharacterVar3Equals1() " ) ;
2012-04-11 18:23:17 +02:00
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
if ( _vm - > _currentCharacterVariables [ 3 ] = = 1 )
2012-04-11 18:23:17 +02:00
return 1 ;
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 00:54:12 +02:00
2012-04-30 17:57:23 +02:00
byte LilliputScript : : OC_checkCharacterDirection ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_checkCharacterDirection() " ) ;
2012-04-28 18:52:15 +02:00
int var1 = getValue1 ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
2012-04-30 17:57:23 +02:00
if ( _vm - > _characterDirectionArray [ var1 ] = = var2 )
2012-04-28 18:52:15 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub17984 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17984() " ) ;
2012-04-11 18:23:17 +02:00
int index = _currScript - > readUint16LE ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
assert ( index < 20 ) ;
if ( _array122E9 [ index ] = = ( var2 & 0xFF ) )
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-25 08:10:26 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_checkSavedMousePos ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_checkSavedMousePos() " ) ;
2012-04-25 08:10:26 +02:00
2012-05-05 21:34:58 +02:00
if ( ( _byte129A0 ! = 0xFF ) | | ( _vm - > _savedMousePosDivided = = Common : : Point ( - 1 , - 1 ) ) )
2012-04-25 08:10:26 +02:00
return 0 ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-25 08:10:26 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub179AE ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub179AE() " ) ;
2012-04-25 08:10:26 +02:00
if ( ( _vm - > _byte12FCE = = 1 ) | | ( _byte129A0 = = 0xFF ) )
return 0 ;
return 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-25 08:10:26 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub179C2 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub179C2() " ) ;
2012-05-05 21:34:58 +02:00
Common : : Point var1 = getPosFromScript ( ) ;
2012-04-28 18:52:15 +02:00
2012-05-06 10:04:09 +02:00
if ( ( _vm - > _array10999PosX [ _vm - > _currentScriptCharacter ] = = var1 . x )
& & ( _vm - > _array109C1PosY [ _vm - > _currentScriptCharacter ] = = var1 . y ) )
2012-04-28 18:52:15 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
byte LilliputScript : : OC_sub179E5 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17A07() " ) ;
2012-04-28 18:52:15 +02:00
static const byte _byte179DB [ 10 ] = { 0x44 , 0x3b , 0x3c , 0x3d , 0x3e , 0x3f , 0x40 , 0x41 , 0x42 , 0x43 } ;
int var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) - 0x30 ;
if ( _byte179DB [ var1 ] = = _vm - > _byte16F09 )
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-25 08:10:26 +02:00
2012-04-04 00:03:41 +02:00
byte LilliputScript : : OC_sub17A07 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17A07() " ) ;
2012-04-25 08:10:26 +02:00
static const byte _array179FD [ 10 ] = { 11 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
if ( _vm - > _byte16F07_menuId = = 6 ) {
int index = _currScript - > readUint16LE ( ) ;
if ( _array179FD [ index ] = = _vm - > _array147D1 [ 0 ] ) {
index = _currScript - > readUint16LE ( ) ;
if ( _array179FD [ index ] = = _vm - > _array147D1 [ 1 ] ) {
index = _currScript - > readUint16LE ( ) ;
if ( _array179FD [ index ] = = _vm - > _array147D1 [ 2 ] ) {
return 1 ;
}
}
}
}
_currScript - > seek ( _currScript - > pos ( ) + 6 ) ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-25 08:10:26 +02:00
2012-05-11 20:47:17 +02:00
byte LilliputScript : : OC_checkViewPortCharacterTarget ( ) {
debugC ( 1 , kDebugScript , " OC_checkViewPortCharacterTarget() " ) ;
2012-04-28 18:52:15 +02:00
int var1 = getValue1 ( ) ;
2012-05-11 20:47:17 +02:00
if ( var1 = = _viewportCharacterTarget )
2012-04-28 18:52:15 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
void LilliputScript : : OC_setWord18821 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setWord18821() " ) ;
2012-05-11 23:32:26 +02:00
2012-04-29 14:57:36 +02:00
_word18821 = getValue1 ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-11 23:32:26 +02:00
2012-05-15 01:37:00 +02:00
void LilliputScript : : OC_ChangeIsoMap ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_ChangeIsoMap() " ) ;
2012-05-05 21:34:58 +02:00
Common : : Point var1 = getPosFromScript ( ) ;
2012-05-01 03:29:56 +02:00
int var2 = _currScript - > readUint16LE ( ) ;
int var3 = _currScript - > readUint16LE ( ) ;
byte * mapPtr = getMapPtr ( var1 ) ;
int mask = 8 > > var2 ;
mask = ~ mask ;
mapPtr [ 3 ] & = mask ;
if ( var3 > 0 ) {
mask = ~ mask ;
mapPtr [ 3 ] | = mask ;
}
2012-04-04 00:03:41 +02:00
}
2012-04-15 01:40:41 +02:00
2012-05-11 23:32:26 +02:00
void LilliputScript : : OC_sub17D57_speech1 ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_sub17D57_speech1() " ) ;
2012-04-15 01:40:41 +02:00
int curWord = _currScript - > readUint16LE ( ) ;
2012-04-28 16:24:47 +02:00
bool forceReturnFl = false ;
sub17D40 ( forceReturnFl ) ;
if ( forceReturnFl )
2012-04-22 01:33:12 +02:00
return ;
2012-04-15 01:40:41 +02:00
2012-05-11 23:32:26 +02:00
_talkingCharacter = _vm - > _currentScriptCharacter ;
2012-04-15 01:40:41 +02:00
sub18B3C ( curWord ) ;
2012-04-22 01:33:12 +02:00
2012-04-04 00:03:41 +02:00
}
2012-04-15 01:40:41 +02:00
2012-04-28 16:24:47 +02:00
void LilliputScript : : sub18B7C ( int var1 , int var3 ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " sub18B7C(%d, %d) " , var1 , var3 ) ;
2012-04-28 16:24:47 +02:00
if ( var1 = = 0xFFFF )
return ;
_word18776 = var1 ;
2012-05-09 08:07:58 +02:00
int index = _vm - > _packedStringIndex [ var1 ] ;
2012-04-28 16:24:47 +02:00
2012-05-09 08:07:58 +02:00
while ( _vm - > _packedStrings [ index ] = = 91 )
2012-04-28 16:24:47 +02:00
+ + index ;
for ( int i = 0 ; i < var3 ; i + + ) {
int tmpVal = 93 ;
while ( tmpVal = = 93 ) {
2012-05-09 08:07:58 +02:00
tmpVal = _vm - > _packedStrings [ index ] ;
2012-04-28 16:24:47 +02:00
+ + index ;
}
}
2012-05-09 08:07:58 +02:00
if ( _vm - > _packedStrings [ index ] = = 0 )
2012-04-28 16:24:47 +02:00
return ;
2012-05-09 08:07:58 +02:00
decodePackedText ( & _vm - > _packedStrings [ index ] ) ;
2012-04-28 16:24:47 +02:00
}
2012-05-11 23:32:26 +02:00
void LilliputScript : : OC_sub17D7F_speech2 ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_sub17D7F_speech2() " ) ;
2012-04-28 16:24:47 +02:00
2012-05-01 14:35:19 +02:00
int var1 = getCharacterVariablePtr ( ) [ 0 ] ;
2012-04-28 16:24:47 +02:00
int var2 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
int var3 = var1 / var2 ;
var1 = _currScript - > readUint16LE ( ) ;
bool forceReturnFl = false ;
sub17D40 ( forceReturnFl ) ;
if ( forceReturnFl )
return ;
2012-05-11 23:32:26 +02:00
_talkingCharacter = _vm - > _currentScriptCharacter ;
2012-04-28 16:24:47 +02:00
sub18B7C ( var1 , var3 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 16:24:47 +02:00
2012-05-11 23:32:26 +02:00
void LilliputScript : : OC_sub17DB9_speech3 ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_sub17DB9_speech3() " ) ;
2012-05-03 19:08:44 +02:00
int index = _currScript - > readUint16LE ( ) ;
int maxValue = sub18BB7 ( index ) ;
int tmpVal = _currScript - > readUint16LE ( ) + 1 ;
int oldVal = tmpVal ;
if ( tmpVal > = maxValue )
tmpVal = 0 ;
_currScript - > writeUint16LE ( tmpVal , - 2 ) ;
bool forceReturnFl = false ;
sub17D40 ( forceReturnFl ) ;
if ( forceReturnFl )
return ;
2012-05-11 23:32:26 +02:00
_talkingCharacter = _vm - > _currentScriptCharacter ;
2012-05-03 19:08:44 +02:00
sub18B7C ( index , oldVal ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-15 01:40:41 +02:00
2012-05-11 23:32:26 +02:00
void LilliputScript : : OC_sub17DF9_speech1param ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_sub17DF9_speech1param() " ) ;
2012-05-03 19:08:44 +02:00
2012-05-11 23:32:26 +02:00
if ( _talkingCharacter = = - 1 ) {
OC_sub17D57_speech1 ( ) ;
2012-04-15 01:40:41 +02:00
return ;
}
_currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-15 01:40:41 +02:00
2012-05-11 23:32:26 +02:00
void LilliputScript : : OC_sub17E07_speech4param ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_sub17E07_speech4param() " ) ;
2012-05-03 19:08:44 +02:00
2012-05-11 23:32:26 +02:00
if ( _talkingCharacter = = - 1 ) {
OC_sub17D7F_speech2 ( ) ;
2012-04-28 03:20:29 +02:00
return ;
}
_currScript - > readUint16LE ( ) ;
_currScript - > readUint16LE ( ) ;
_currScript - > readUint16LE ( ) ;
_currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-03 19:35:53 +02:00
2012-05-11 23:32:26 +02:00
void LilliputScript : : OC_sub17E15_speech2param ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_sub17E15_speech2param() " ) ;
2012-05-03 19:35:53 +02:00
2012-05-11 23:32:26 +02:00
if ( _talkingCharacter = = - 1 ) {
OC_sub17DB9_speech3 ( ) ;
2012-04-28 03:20:29 +02:00
return ;
}
_currScript - > readUint16LE ( ) ;
_currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 20:53:38 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17B03 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17B03() " ) ;
2012-04-08 12:54:56 +02:00
2012-05-01 14:35:19 +02:00
byte * bufPtr = getCharacterVariablePtr ( ) ;
2012-04-08 12:54:56 +02:00
int oper = _currScript - > readUint16LE ( ) ;
2012-04-28 09:08:11 +02:00
int var3 = _currScript - > readUint16LE ( ) ;
2012-04-08 12:54:56 +02:00
2012-04-28 09:08:11 +02:00
computeOperation ( bufPtr , oper , var3 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 20:53:38 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_getRandom_type2 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_getRandom_type2() " ) ;
2012-04-27 22:59:48 +02:00
2012-05-01 14:35:19 +02:00
byte * bufPtr = getCharacterVariablePtr ( ) ;
2012-04-27 22:59:48 +02:00
int maxVal = _currScript - > readUint16LE ( ) ;
int randomVal = _vm - > _rnd - > getRandomNumber ( maxVal ) ;
* bufPtr = randomVal ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 20:53:38 +02:00
2012-05-01 03:29:56 +02:00
void LilliputScript : : OC_setCharacterPosition ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setCharacterPosition() " ) ;
2012-04-12 20:53:38 +02:00
int index = getValue1 ( ) ;
2012-05-05 21:34:58 +02:00
Common : : Point tmpVal = getPosFromScript ( ) ;
2012-04-12 20:53:38 +02:00
2012-05-05 21:34:58 +02:00
int var2 = ( tmpVal . x < < 3 ) + 4 ;
int var4 = ( tmpVal . y < < 3 ) + 4 ;
2012-04-12 20:53:38 +02:00
2012-05-05 21:34:58 +02:00
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
2012-04-25 01:41:31 +02:00
_vm - > _characterPositionX [ index ] = var2 ;
_vm - > _characterPositionY [ index ] = var4 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 20:53:38 +02:00
2012-05-15 01:37:00 +02:00
void LilliputScript : : OC_DisableCharacter ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_DisableCharacter() " ) ;
2012-04-11 18:23:17 +02:00
2012-05-15 01:37:00 +02:00
int characterIndex = getValue1 ( ) ;
assert ( characterIndex < 40 ) ;
2012-04-11 18:23:17 +02:00
2012-05-15 01:37:00 +02:00
if ( characterIndex = = _vm - > _word10804 )
2012-05-11 20:47:17 +02:00
_viewportCharacterTarget = - 1 ;
2012-04-11 18:23:17 +02:00
2012-05-15 01:37:00 +02:00
_vm - > _characterPositionX [ characterIndex ] = - 1 ;
_vm - > _characterPositionY [ characterIndex ] = - 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_saveAndQuit ( ) {
warning ( " OC_saveAndQuit " ) ;
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17B93 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17B93() " ) ;
2012-04-12 00:54:12 +02:00
2012-04-28 09:08:11 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
2012-04-12 00:54:12 +02:00
sub17B6C ( var1 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-11 23:32:26 +02:00
void LilliputScript : : OC_sub17E37_speech4 ( ) {
warning ( " OC_sub17E37_speech4 " ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 09:08:11 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_resetByte1714E ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_resetByte1714E() " ) ;
2012-04-28 09:08:11 +02:00
2012-04-28 03:20:29 +02:00
_vm - > _byte1714E = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 09:08:11 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_deleteSavegameAndQuit ( ) {
warning ( " OC_deleteSavegameAndQuit " ) ;
}
2012-05-03 19:35:53 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_incByte16F04 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_incByte16F04() " ) ;
2012-04-28 09:08:11 +02:00
+ + _byte16F04 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17BA5 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17BA5() " ) ;
2012-04-12 00:54:12 +02:00
2012-05-01 14:35:19 +02:00
byte * tmpArr = getCharacterVariablePtr ( ) ;
2012-04-12 00:54:12 +02:00
byte oper = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-01 14:35:19 +02:00
byte var3 = getCharacterVariablePtr ( ) [ 0 ] ;
2012-04-28 09:08:11 +02:00
computeOperation ( tmpArr , oper , var3 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_setByte18823 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setByte18823() " ) ;
2012-05-03 19:35:53 +02:00
2012-05-01 14:35:19 +02:00
byte * tmpArr = getCharacterVariablePtr ( ) ;
2012-04-29 14:57:36 +02:00
_byte18823 = * tmpArr ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-05-01 03:29:56 +02:00
void LilliputScript : : OC_callScript ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_callScript() " ) ;
2012-04-12 00:54:12 +02:00
int index = _currScript - > readUint16LE ( ) ;
int var1 = getValue1 ( ) ;
_vm - > sub170EE ( var1 ) ;
2012-05-01 23:32:44 +02:00
int tmpIndex = _vm - > _currentScriptCharacter ;
2012-04-12 00:54:12 +02:00
assert ( index < _vm - > _gameScriptIndexSize ) ;
int scriptIndex = _vm - > _arrayGameScriptIndex [ index ] ;
_scriptStack . push ( _currScript ) ;
2012-04-16 23:16:01 +02:00
2012-04-12 00:54:12 +02:00
if ( _byte16F05_ScriptHandler = = 0 ) {
_vm - > _byte1714E = 0 ;
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " ========================== Menu Script %d============================== " , scriptIndex ) ;
2012-04-27 22:08:56 +02:00
runMenuScript ( ScriptStream ( & _vm - > _arrayGameScripts [ scriptIndex ] , _vm - > _arrayGameScriptIndex [ index + 1 ] - _vm - > _arrayGameScriptIndex [ index ] ) ) ;
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " ========================== End of Menu Script============================== " ) ;
2012-04-12 00:54:12 +02:00
} else {
2012-04-27 22:08:56 +02:00
runScript ( ScriptStream ( & _vm - > _arrayGameScripts [ scriptIndex ] , _vm - > _arrayGameScriptIndex [ index + 1 ] - _vm - > _arrayGameScriptIndex [ index ] ) ) ;
2012-04-12 00:54:12 +02:00
}
2012-04-16 23:16:01 +02:00
2012-04-12 00:54:12 +02:00
_currScript = _scriptStack . pop ( ) ;
_vm - > sub170EE ( tmpIndex ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-12 18:04:07 +02:00
void LilliputScript : : OC_callScriptAndReturn ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_callScriptAndReturn() " ) ;
2012-04-12 00:54:12 +02:00
2012-05-01 03:29:56 +02:00
OC_callScript ( ) ;
2012-04-12 00:54:12 +02:00
sub17B6C ( 0 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-06 22:32:23 +02:00
void LilliputScript : : OC_setCurrentScriptCharacterPos ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setCurrentScriptCharacterPos() " ) ;
2012-04-29 14:57:36 +02:00
2012-05-06 22:32:23 +02:00
Common : : Point pos = getPosFromScript ( ) ;
_vm - > _array10999PosX [ _vm - > _currentScriptCharacter ] = pos . x ;
_vm - > _array109C1PosY [ _vm - > _currentScriptCharacter ] = pos . y ;
_vm - > _array109E9PosX [ _vm - > _currentScriptCharacter ] = - 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 09:08:11 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_resetByte16F04 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_resetByte16F04() " ) ;
2012-04-28 09:08:11 +02:00
_byte16F04 = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 20:53:38 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17AE1 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17AE1() " ) ;
2012-04-12 20:53:38 +02:00
byte var3 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-01 23:32:44 +02:00
sub16C5C ( _vm - > _currentScriptCharacter , var3 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 20:53:38 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17AEE ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17AEE() " ) ;
2012-04-12 20:53:38 +02:00
byte var3 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-01 23:32:44 +02:00
sub16C5C ( _vm - > _currentScriptCharacter + 1 , var3 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 20:53:38 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_setWord10804 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setWord10804() " ) ;
2012-04-07 18:09:30 +02:00
2012-05-04 23:13:43 +02:00
_vm - > _word10804 = getValue1 ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17C0E ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17C0E() " ) ;
2012-04-27 22:54:43 +02:00
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
2012-05-05 21:34:58 +02:00
Common : : Point var1 = Common : : Point ( _vm - > _currentCharacterVariables [ 4 ] , _vm - > _currentCharacterVariables [ 5 ] ) ;
2012-05-01 14:35:19 +02:00
byte b2 = _vm - > _currentCharacterVariables [ 6 ] ;
2012-04-27 22:54:43 +02:00
byte * mapPtr = getMapPtr ( var1 ) ;
2012-05-01 14:35:19 +02:00
mapPtr [ b2 ] = _vm - > _currentCharacterVariables [ 7 ] ;
mapPtr [ 3 ] = _vm - > _currentCharacterVariables [ 8 ] ;
2012-04-27 22:54:43 +02:00
if ( b2 = = 0 ) {
_byte12A09 = 1 ;
2012-05-10 08:11:45 +02:00
_vm - > displayLandscape ( ) ;
2012-04-27 22:54:43 +02:00
_byte12A09 = 0 ;
}
2012-04-04 00:03:41 +02:00
}
2012-04-27 22:54:43 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17C55 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17C55() " ) ;
2012-05-03 19:35:53 +02:00
2012-04-27 22:59:48 +02:00
int var1 = getValue1 ( ) ;
int var2 = getValue1 ( ) ;
int var3 = _currScript - > readUint16LE ( ) ;
int var4 = _currScript - > readUint16LE ( ) ;
_vm - > _rulesBuffer2_5 [ var2 ] = var1 & 0xFF ;
_vm - > _rulesBuffer2_6 [ var2 ] = var3 & 0xFF ;
_vm - > _rulesBuffer2_7 [ var2 ] = var4 & 0xFF ;
2012-04-04 00:03:41 +02:00
}
void LilliputScript : : OC_sub17C76 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17C76() " ) ;
2012-04-29 14:57:36 +02:00
int var1 = getValue1 ( ) ;
_vm - > _rulesBuffer2_5 [ var1 ] = 0xFF ;
2012-05-01 14:35:19 +02:00
_vm - > _characterPositionAltitude [ var1 ] = 0 ;
2012-04-29 14:57:36 +02:00
_characterScriptEnabled [ var1 ] = 1 ;
2012-04-04 00:03:41 +02:00
}
void LilliputScript : : OC_sub17AFC ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17AFC() " ) ;
2012-04-29 14:57:36 +02:00
int var1 = getValue1 ( ) ;
_vm - > sub170EE ( var1 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 10:13:03 +02:00
void LilliputScript : : sub171AF ( int var1 , int var2 , int var4 ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " sub171AF() " ) ;
2012-04-28 10:13:03 +02:00
int index = 0 ;
for ( int i = 0 ; i < 10 ; i + + ) {
if ( _vm - > _array12861 [ index + 1 ] = = 0xFFFF ) {
_vm - > _array12861 [ index + 1 ] = var1 ;
_vm - > _array12861 [ index + 2 ] = var2 ;
_vm - > _array12861 [ index + 0 ] = _vm - > _word1289D + var4 ;
}
index + = 3 ;
}
}
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17C8B ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17C8B() " ) ;
2012-04-28 10:13:03 +02:00
int var1 = 2 < < 8 ;
int var4 = _currScript - > readUint16LE ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
var2 = ( ( var2 & 0xFF ) < < 8 ) + _vm - > _currentScriptCharacter ;
2012-04-28 10:13:03 +02:00
sub171AF ( var1 , var2 , var4 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 10:13:03 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17CA2 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17CA2() " ) ;
2012-04-28 10:13:03 +02:00
int var1 = 1 < < 8 ;
int var4 = _currScript - > readUint16LE ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
var2 = ( ( var2 & 0xFF ) < < 8 ) + _vm - > _currentScriptCharacter ;
2012-04-28 10:13:03 +02:00
sub171AF ( var1 , var2 , var4 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 10:13:03 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17CB9 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17CB9() " ) ;
2012-04-28 10:13:03 +02:00
int var4 = _currScript - > readUint16LE ( ) ;
int var1 = getValue1 ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
var2 = ( ( var2 & 0xFF ) < < 8 ) + _vm - > _currentScriptCharacter ;
2012-04-28 10:13:03 +02:00
sub171AF ( var1 , var2 , var4 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 10:13:03 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17CD1 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17CD1() " ) ;
2012-04-28 10:13:03 +02:00
int var1 = 3 < < 8 ;
int var4 = _currScript - > readUint16LE ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
var2 = ( ( var2 & 0xFF ) < < 8 ) + _vm - > _currentScriptCharacter ;
2012-04-28 10:13:03 +02:00
sub171AF ( var1 , var2 , var4 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 09:08:11 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_resetWord16EFE ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_resetWord16EFE() " ) ;
2012-04-28 09:08:11 +02:00
_vm - > _word16EFE = 0xFFFF ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17CEF ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17CEF() " ) ;
2012-04-25 23:51:45 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
sub1823E ( _vm - > _currentScriptCharacter , var1 , _vm - > _currentCharacterVariables ) ;
2012-04-25 23:51:45 +02:00
sub17B6C ( 0 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-12 18:04:07 +02:00
void LilliputScript : : OC_IncCurrentCharacterVar1 ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_IncCurrentCharacterVar1() " ) ;
2012-04-12 00:54:12 +02:00
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
+ + _vm - > _currentCharacterVariables [ 1 ] ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17D23 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17D23() " ) ;
2012-04-29 14:57:36 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
2012-05-05 21:34:58 +02:00
Common : : Point var2 = getPosFromScript ( ) ;
2012-05-01 14:35:19 +02:00
byte * buf = _vm - > _currentCharacterVariables + 4 ;
2012-05-05 21:34:58 +02:00
computeOperation ( buf , var1 , var2 . x ) ;
computeOperation ( buf + 1 , var1 , var2 . y ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-30 17:57:23 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17E6D ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17E6D() " ) ;
2012-04-29 14:57:36 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
_vm - > _rulesBuffer2_12 [ _vm - > _currentScriptCharacter ] = ( var1 - 2000 ) & 0xFF ;
2012-04-04 00:03:41 +02:00
}
2012-04-30 17:57:23 +02:00
2012-05-01 00:18:26 +02:00
void LilliputScript : : OC_changeCurrentCharacterSprite ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " OC_changeCurrentCharacterSprite() " ) ;
2012-04-29 14:57:36 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
_vm - > _characterFrameArray [ _vm - > _currentScriptCharacter ] = var1 ;
_vm - > _spriteSizeArray [ _vm - > _currentScriptCharacter ] = var2 ;
2012-04-29 14:57:36 +02:00
2012-04-04 00:03:41 +02:00
}
2012-04-28 09:08:11 +02:00
byte * LilliputScript : : sub173D2 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " sub173D2() " ) ;
2012-04-28 09:08:11 +02:00
int index = _currScript - > readUint16LE ( ) ;
2012-05-01 14:35:19 +02:00
return & _vm - > _currentCharacterVariables [ index ] ;
2012-04-28 09:08:11 +02:00
}
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17E99 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17E99() " ) ;
2012-04-28 09:08:11 +02:00
byte * compBuf = sub173D2 ( ) ;
int oper = _currScript - > readUint16LE ( ) ;
int index = _currScript - > readUint16LE ( ) ;
byte * buf = sub173D2 ( ) ;
byte var1 = buf [ 0 ] ;
byte var3 = _vm - > _rulesChunk11 [ var1 + _vm - > _rulesChunk10 [ index ] ] ;
computeOperation ( compBuf , oper , var3 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 09:08:11 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17EC5 ( ) {
2012-05-08 18:36:01 +02:00
//debugC(1, kDebugScriptTBC, "OC_sub17EC5()");
2012-04-04 00:03:41 +02:00
warning ( " OC_sub17EC5 " ) ;
2012-04-29 14:57:36 +02:00
/*byte *compBuf = sub173D2();
int oper = _currScript - > readUint16LE ( ) ;
int index = _currScript - > readUint16LE ( ) ;
byte * buf = sub173D2 ( ) ;
byte var1 = buf [ 0 ] ;
byte var3 = _vm - > _rulesChunk11 [ var1 + _vm - > _rulesChunk10 [ index ] ] ;
computeOperation ( compBuf , oper , var3 ) ; */
2012-04-04 00:03:41 +02:00
}
2012-04-29 14:57:36 +02:00
2012-05-06 22:32:23 +02:00
Common : : Point LilliputScript : : getCharacterTilePos ( int index ) {
2012-05-08 18:36:01 +02:00
debugC ( 2 , kDebugScriptTBC , " getCharacterTilePos(%d) " , index ) ;
2012-05-06 22:32:23 +02:00
2012-05-05 21:34:58 +02:00
return Common : : Point ( _vm - > _characterPositionX [ index ] > > 3 , _vm - > _characterPositionY [ index ] > > 3 ) ;
2012-04-29 14:57:36 +02:00
}
2012-05-06 22:32:23 +02:00
void LilliputScript : : OC_setCharacterDirectionTowardsPos ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setCharacterDirectionTowardsPos() " ) ;
2012-04-29 14:57:36 +02:00
2012-05-05 21:34:58 +02:00
Common : : Point pos1 = getPosFromScript ( ) ;
2012-05-06 22:32:23 +02:00
Common : : Point tilePos = getCharacterTilePos ( _vm - > _currentScriptCharacter ) ;
int dir = _vm - > getDirection ( tilePos , pos1 ) ;
2012-05-01 23:32:44 +02:00
_vm - > _characterDirectionArray [ _vm - > _currentScriptCharacter ] = dir ;
2012-04-04 00:03:41 +02:00
}
2012-05-01 00:18:26 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17F08 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17F08() " ) ;
2012-04-29 14:57:36 +02:00
2012-04-30 17:57:23 +02:00
int index = getValue1 ( ) ;
2012-04-29 14:57:36 +02:00
2012-04-30 17:57:23 +02:00
static const byte _directionsArray [ ] = { 0 , 2 , 0 , 1 , 3 , 2 , 3 , 1 } ;
2012-04-29 14:57:36 +02:00
2012-05-01 23:32:44 +02:00
int dx = _vm - > _characterPositionX [ index ] - _vm - > _characterDisplayX [ _vm - > _currentScriptCharacter ] ;
int dy = _vm - > _characterPositionY [ index ] - _vm - > _characterDisplayY [ _vm - > _currentScriptCharacter ] ;
2012-04-29 14:57:36 +02:00
int flag = 0 ;
if ( dx < 0 ) {
dx = - dx ;
flag | = 4 ;
}
if ( dy < 0 ) {
dy = - dy ;
flag | = 2 ;
}
if ( dx < dy ) {
flag | = 1 ;
}
2012-05-01 23:32:44 +02:00
_vm - > _characterDirectionArray [ _vm - > _currentScriptCharacter ] = _directionsArray [ flag ] ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 14:57:36 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17F4F ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17F4F() " ) ;
2012-05-05 21:34:58 +02:00
2012-04-29 14:57:36 +02:00
int var = getValue1 ( ) ;
2012-05-06 22:32:23 +02:00
_array10A39 [ _vm - > _currentScriptCharacter ] = var & 0xFF ;
_vm - > _array109E9PosX [ _vm - > _currentScriptCharacter ] = - 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-30 17:57:23 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17F68 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17F68() " ) ;
2012-05-05 21:34:58 +02:00
2012-05-01 23:32:44 +02:00
if ( _vm - > _currentScriptCharacter ! = _viewportCharacterTarget )
2012-05-01 00:14:57 +02:00
return ;
2012-05-05 21:34:58 +02:00
static const char _byte17F60 [ ] = { - 1 , - 3 , - 3 , - 6 } ;
static const char _byte17F64 [ ] = { - 3 , - 6 , - 1 , - 3 } ;
2012-05-01 00:14:57 +02:00
2012-05-05 21:34:58 +02:00
int cx = _byte17F60 [ _vm - > _characterDirectionArray [ _vm - > _currentScriptCharacter ] ] ;
int cy = _byte17F64 [ _vm - > _characterDirectionArray [ _vm - > _currentScriptCharacter ] ] ;
2012-05-01 00:14:57 +02:00
2012-05-06 22:32:23 +02:00
Common : : Point pos = getCharacterTilePos ( _vm - > _currentScriptCharacter ) ;
2012-05-01 00:14:57 +02:00
2012-05-05 21:34:58 +02:00
int newPosX = pos . x + cx ;
int newPosY = pos . y + cy ;
2012-05-01 00:14:57 +02:00
if ( newPosX < 0 )
newPosX = 0 ;
if ( newPosX > 56 )
newPosX = 56 ;
if ( newPosY < 0 )
newPosY = 0 ;
if ( newPosY > 56 )
newPosY = 56 ;
_byte12A09 = 1 ;
2012-05-05 21:34:58 +02:00
_vm - > viewportScrollTo ( Common : : Point ( newPosX , newPosY ) ) ;
2012-05-01 00:14:57 +02:00
_byte12A09 = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-05-06 22:32:23 +02:00
void LilliputScript : : OC_skipNextVal ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_skipNextVal() " ) ;
2012-05-06 22:32:23 +02:00
2012-05-01 00:14:57 +02:00
_currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-06 22:32:23 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17FD2 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17FD2() " ) ;
2012-05-01 00:14:57 +02:00
int var1 = getValue1 ( ) ;
2012-05-01 14:35:19 +02:00
_vm - > _currentCharacterVariables [ 6 ] = var1 & 0xFF ;
2012-05-01 00:14:57 +02:00
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17FDD ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17FDD() " ) ;
2012-04-12 00:54:12 +02:00
int index = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
int tmpVal = ( _vm - > _currentScriptCharacter * 32 ) + index ;
2012-04-12 00:54:12 +02:00
assert ( tmpVal < 40 * 32 ) ;
2012-05-01 23:32:44 +02:00
_array10AB1 [ _vm - > _currentScriptCharacter ] = _vm - > _rulesBuffer2_16 [ tmpVal ] ;
_array12811 [ _vm - > _currentScriptCharacter ] = 16 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_setByte10B29 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setByte10B29() " ) ;
2012-05-01 00:14:57 +02:00
int var1 = getValue1 ( ) ;
_characterScriptEnabled [ var1 ] = 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-12 18:04:07 +02:00
void LilliputScript : : OC_setCurrentCharacterVar2 ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_setCurrentCharacterVar2() " ) ;
2012-04-11 18:23:17 +02:00
int curWord = _currScript - > readUint16LE ( ) ;
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
_vm - > _currentCharacterVariables [ 2 ] = curWord & 0xFF ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-12 18:04:07 +02:00
void LilliputScript : : OC_SetCurrentCharacterVar2ToZero ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_SetCurrentCharacterVar2ToZero() " ) ;
2012-04-12 00:54:12 +02:00
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
_vm - > _currentCharacterVariables [ 2 ] = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1801D ( ) {
2012-05-12 18:04:07 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_SetCurrentCharacterVar2ToZero() " ) ;
2012-05-01 00:14:57 +02:00
int var1 = getValue1 ( ) ;
int x = _vm - > _characterPositionX [ var1 ] & 0xFFF8 ;
x + = _currScript - > readUint16LE ( ) ;
_vm - > _characterPositionX [ var1 ] = x ;
int y = _vm - > _characterPositionY [ var1 ] & 0xFFF8 ;
y + = _currScript - > readUint16LE ( ) ;
_vm - > _characterPositionY [ var1 ] = y ;
2012-05-01 14:35:19 +02:00
_vm - > _characterPositionAltitude [ var1 ] = _currScript - > readUint16LE ( ) ;
2012-05-01 00:14:57 +02:00
_vm - > _characterDirectionArray [ var1 ] = _currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
}
void LilliputScript : : OC_sub1805D ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1805D() " ) ;
_word129A3 = getValue1 ( ) ;
for ( int i = 0 ; i < 4 ; i + + )
_array129A5 [ i ] = _currScript - > readUint16LE ( ) & 0xFF ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 11:48:10 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18074 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18074() " ) ;
2012-04-29 11:48:10 +02:00
int var2 = _currScript - > readUint16LE ( ) ;
byte var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-01 23:32:44 +02:00
_vm - > _rulesBuffer2_16 [ ( _vm - > _currentScriptCharacter * 32 ) + var2 ] = var1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 11:48:10 +02:00
2012-04-30 17:57:23 +02:00
void LilliputScript : : OC_setCurrentCharacterDirection ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setCurrentCharacterDirection() " ) ;
2012-04-29 11:48:10 +02:00
2012-05-01 23:32:44 +02:00
_vm - > _characterDirectionArray [ _vm - > _currentScriptCharacter ] = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18099 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18099() " ) ;
2012-04-07 18:09:30 +02:00
int index = _currScript - > readUint16LE ( ) ;
assert ( ( index > = 0 ) & & ( index < 20 ) ) ;
int curWord = _currScript - > readUint16LE ( ) ;
_array122E9 [ index ] = ( curWord & 0xFF ) ;
_array122FD [ index ] = ( curWord > > 8 ) ;
2012-05-05 18:16:03 +02:00
_vm - > displayInterfaceHotspots ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub180C3 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub180C3() " ) ;
2012-05-11 20:47:17 +02:00
_viewportCharacterTarget = - 1 ;
2012-05-01 00:14:57 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
static const char _byte180B3 [ ] = { 6 , 0 , 0 , - 6 } ;
static const char _byte180BB [ ] = { 0 , - 6 , 6 , 0 } ;
2012-05-05 18:16:03 +02:00
int x = _viewportPos . x + _byte180B3 [ var1 ] ;
int y = _viewportPos . y + _byte180BB [ var1 ] ;
2012-05-01 00:14:57 +02:00
if ( x < 0 )
x = 0 ;
if ( y < 0 )
y = 0 ;
if ( x > 56 )
x = 56 ;
if ( y > 56 )
y = 56 ;
_byte12A09 = 1 ;
2012-05-05 21:34:58 +02:00
_vm - > viewportScrollTo ( Common : : Point ( x , y ) ) ;
2012-05-01 00:14:57 +02:00
_byte12A09 = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-05-01 00:14:57 +02:00
2012-05-11 20:47:17 +02:00
void LilliputScript : : OC_setViewPortPos ( ) {
debugC ( 1 , kDebugScript , " OC_setViewPortPos() " ) ;
2012-05-01 00:14:57 +02:00
2012-05-11 20:47:17 +02:00
_viewportCharacterTarget = - 1 ;
2012-05-05 21:34:58 +02:00
_viewportPos = getPosFromScript ( ) ;
2012-05-01 00:14:57 +02:00
2012-05-10 08:11:45 +02:00
_vm - > displayLandscape ( ) ;
2012-05-11 20:47:17 +02:00
_vm - > prepareGameArea ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-05-11 20:47:17 +02:00
void LilliputScript : : OC_setCurrentCharacterAltitude ( ) {
debugC ( 1 , kDebugScript , " OC_setCurrentCharacterAltitude() " ) ;
2012-04-12 00:54:12 +02:00
2012-05-01 23:32:44 +02:00
_vm - > _characterPositionAltitude [ _vm - > _currentScriptCharacter ] = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1817F ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1817F() " ) ;
2012-04-26 01:42:48 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
int b1 = var1 & 0xFF ;
int b2 = var2 & 0xFF ;
2012-05-10 19:55:39 +02:00
sub1818B ( Common : : Point ( b1 , b2 ) ) ;
2012-04-26 01:42:48 +02:00
}
2012-05-08 18:36:01 +02:00
//TODO checkme: parameter order is maybe wrong
2012-05-10 19:55:39 +02:00
void LilliputScript : : sub1818B ( Common : : Point pos ) {
debugC ( 2 , kDebugScriptTBC , " sub1818B(%d - %d) " , pos . x , pos . y ) ;
2012-04-26 01:42:48 +02:00
for ( int i = 0 ; i < _vm - > _word1817B ; i + + ) {
2012-05-10 19:55:39 +02:00
if ( _array1813BPos [ i ] . x = = pos . x ) {
pos . y + = _array1813BPos [ i ] . y ;
if ( pos . y > 0xFF )
pos . y = 0xFF ;
_array1813BPos [ i ] = pos ;
2012-04-26 01:42:48 +02:00
return ;
}
}
2012-05-10 19:55:39 +02:00
_array1813BPos [ _vm - > _word1817B ] = pos ;
+ + _vm - > _word1817B ;
2012-04-04 00:03:41 +02:00
}
2012-04-26 01:42:48 +02:00
2012-05-08 18:36:01 +02:00
//TODO checkme: case 0x2D is dubious
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub181BB ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub181BB() " ) ;
2012-04-26 01:42:48 +02:00
int b = _currScript - > readUint16LE ( ) ;
int d = _currScript - > readUint16LE ( ) & 0xFF ;
int s = _currScript - > readUint16LE ( ) ;
2012-05-01 14:35:19 +02:00
int c = _vm - > _currentCharacterVariables [ s ] ;
2012-04-26 01:42:48 +02:00
int c2 = 0 ;
if ( d = = 0x2D ) {
c = - 1 - c ;
} else if ( d = = 0x3E ) {
c = c - 0x80 ;
if ( c < 0 )
c = 0 ;
c = c * 2 ;
} else if ( d = = 0x3C ) {
c = - 1 - c ;
c = c - 0x80 ;
if ( c < 0 )
c = 0 ;
c = c * 2 ;
}
2012-05-08 18:36:01 +02:00
int a = ( _currScript - > readUint16LE ( ) * c ) + ( c & 0xFF ) ;
b = ( b & 0xFF00 ) + a ;
2012-05-10 19:55:39 +02:00
sub1818B ( Common : : Point ( b > > 8 , b & 0xFF ) ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18213 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18213() " ) ;
2012-04-26 01:42:48 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
int maxValue = 0 ;
int maxItem = var1 & 0xFF ;
for ( int i = 0 ; i < _vm - > _word1817B ; i + + ) {
2012-05-10 19:55:39 +02:00
if ( _array1813BPos [ i ] . y > maxValue ) {
maxValue = _array1813BPos [ i ] . y ;
maxItem = _array1813BPos [ i ] . x ;
2012-04-26 01:42:48 +02:00
}
}
2012-05-02 00:50:40 +02:00
sub1823E ( _vm - > _currentScriptCharacter , maxItem , _vm - > _currentCharacterVariables ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18252 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18252() " ) ;
2012-04-29 11:48:10 +02:00
int index = getValue1 ( ) ;
assert ( index < 40 ) ;
_vm - > _array12299 [ index ] = 4 ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 11:48:10 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18260 ( ) {
2012-05-05 21:34:58 +02:00
warning ( " OC_sub18260() " ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 11:48:10 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub182EC ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub182EC() " ) ;
2012-04-29 11:48:10 +02:00
2012-05-01 14:35:19 +02:00
byte * tmpArr = getCharacterVariablePtr ( ) ;
2012-04-29 11:48:10 +02:00
byte var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
byte var2 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
if ( var2 = = 0 )
tmpArr [ 0 ] = ( 0xFF ^ var1 ) ;
else
tmpArr [ 0 ] | = var1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-22 23:07:09 +02:00
void LilliputScript : : OC_PaletteFadeOut ( ) {
2012-05-09 08:07:58 +02:00
debugC ( 1 , kDebugScript , " OC_PaletteFadeOut() " ) ;
2012-04-27 08:10:55 +02:00
2012-04-29 10:04:15 +02:00
_byte12A09 = 1 ;
_vm - > paletteFadeOut ( ) ;
_byte12A09 = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-22 23:07:09 +02:00
void LilliputScript : : OC_PaletteFadeIn ( ) {
2012-05-09 08:07:58 +02:00
debugC ( 1 , kDebugScript , " OC_PaletteFadeIn() " ) ;
2012-04-18 22:48:21 +02:00
2012-04-29 10:04:15 +02:00
_byte12A09 = 1 ;
_vm - > paletteFadeIn ( ) ;
_byte12A09 = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-07 14:36:04 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_loadAndDisplayCUBESx_GFX ( ) {
2012-05-10 08:11:45 +02:00
debugC ( 1 , kDebugScript , " OC_loadAndDisplayCUBESx_GFX() " ) ;
2012-04-07 14:36:04 +02:00
2012-05-10 08:11:45 +02:00
int curWord = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-04-07 14:36:04 +02:00
assert ( ( curWord > = 0 ) & & ( curWord < = 9 ) ) ;
Common : : String fileName = Common : : String : : format ( " CUBES%d.GFX " , curWord ) ;
2012-05-10 08:11:45 +02:00
_byte10806 = curWord + 0x30 ; // Useless?
2012-04-16 23:16:01 +02:00
2012-05-08 19:47:16 +02:00
_vm - > _bufferCubegfx = _vm - > loadVGA ( fileName , 61440 , false ) ;
2012-05-10 08:11:45 +02:00
_vm - > displayLandscape ( ) ;
2012-05-11 20:47:17 +02:00
_vm - > prepareGameArea ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-07 14:36:04 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1834C ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1834C() " ) ;
2012-04-11 18:23:17 +02:00
byte curWord = _currScript - > readUint16LE ( ) & 0xFF ;
2012-05-01 14:35:19 +02:00
assert ( _vm - > _currentCharacterVariables ! = NULL ) ;
2012-04-11 18:23:17 +02:00
2012-05-01 14:35:19 +02:00
_vm - > _currentCharacterVariables [ 3 ] = curWord ;
2012-04-04 00:03:41 +02:00
}
2012-04-17 23:48:11 +02:00
2012-05-01 12:18:52 +02:00
void LilliputScript : : OC_setArray122C1 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setArray122C1() " ) ;
2012-04-25 23:51:45 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
_array122C1 [ _vm - > _currentScriptCharacter ] = var1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 11:48:10 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18367 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18367() " ) ;
2012-04-29 11:48:10 +02:00
2012-05-01 23:32:44 +02:00
_characterScriptEnabled [ _vm - > _currentScriptCharacter ] = 1 ;
_vm - > _currentCharacterVariables [ 0 ] = _array122C1 [ _vm - > _currentScriptCharacter ] ;
2012-05-01 14:35:19 +02:00
_vm - > _currentCharacterVariables [ 1 ] = 0 ;
_vm - > _currentCharacterVariables [ 2 ] = 0 ;
_vm - > _currentCharacterVariables [ 3 ] = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-17 23:48:11 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17D04 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17D04() " ) ;
2012-04-08 12:54:56 +02:00
2012-05-05 00:10:55 +02:00
int16 index = getValue1 ( ) ;
2012-04-08 12:54:56 +02:00
byte var2 = _currScript - > readUint16LE ( ) & 0xFF ;
2012-05-05 00:10:55 +02:00
sub1823E ( index , var2 , _vm - > getCharacterVariablesPtr ( index * 32 ) ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-08 12:54:56 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18387 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18387() " ) ;
2012-04-29 11:48:10 +02:00
int index = getValue1 ( ) ;
byte var1 = _currScript - > readUint16LE ( ) & 0xFF ;
assert ( index < 40 ) ;
_vm - > _rulesBuffer2_10 [ index ] = var1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 11:48:10 +02:00
void LilliputScript : : OC_setDebugFlag ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setDebugFlag() " ) ;
2012-04-29 11:48:10 +02:00
_vm - > _debugFlag = 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 11:48:10 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_setByte14837 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setByte14837() " ) ;
2012-04-29 11:48:10 +02:00
_vm - > _byte14837 = 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 11:48:10 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub183A2 ( ) {
warning ( " OC_sub183A2 " ) ;
}
void LilliputScript : : OC_sub183C6 ( ) {
2012-05-15 01:37:00 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub183C6() " ) ;
int var1 = _currScript - > readUint16LE ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
_array122FD [ var1 ] = ( var2 & 0xff ) ;
_array122E9 [ var1 ] = 1 ;
_vm - > displayInterfaceHotspots ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-01 00:18:26 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_loadFile_AERIAL_GFX ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_loadFile_AERIAL_GFX() " ) ;
2012-04-26 00:42:30 +02:00
int var1 = _currScript - > readUint16LE ( ) & 0xff ;
_vm - > _byte15EAD = var1 ;
_byte12A09 = 1 ;
2012-05-11 23:32:26 +02:00
_talkingCharacter = - 1 ;
2012-04-26 00:42:30 +02:00
OC_PaletteFadeOut ( ) ;
_vm - > _word15AC2 = 1 ;
_vm - > displayVGAFile ( " AERIAL.GFX " ) ;
OC_PaletteFadeIn ( ) ;
_vm - > displayCharactersOnMap ( ) ;
_vm - > _byte16F08 = 1 ;
_vm - > _keyboard_oldIndex = 0 ;
_vm - > _keyboard_nextIndex = 0 ;
_vm - > _byte12A09 = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-26 00:42:30 +02:00
2012-05-11 23:32:26 +02:00
void LilliputScript : : OC_sub17E22_speech1IfSoundOff ( ) {
warning ( " OC_sub17E22_speech1IfSoundOff " ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-11 23:32:26 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1844A ( ) {
2012-05-15 01:37:00 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1847F() " ) ;
int var1 = getValue1 ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
_vm - > _rulesBuffer2_11 [ var1 ] = ( var2 & 0xFF ) ;
for ( int i = 0 ; i < 40 ; i + + ) {
_array10B51 [ 40 * var1 + i ] = 0 ;
_array10B51 [ var1 + 40 * i ] = 0 ;
}
2012-04-04 00:03:41 +02:00
}
2012-04-17 23:48:11 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1847F ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1847F() " ) ;
2012-04-17 23:48:11 +02:00
2012-05-01 14:35:19 +02:00
byte * buf215Ptr = getCharacterVariablePtr ( ) ;
2012-04-07 18:09:30 +02:00
byte tmpVal = buf215Ptr [ 0 ] ;
int curWord = _currScript - > readUint16LE ( ) ;
assert ( curWord ! = 0 ) ;
2012-04-21 21:19:13 +02:00
int var1 = tmpVal / ( curWord & 0xFF ) ;
2012-04-07 18:09:30 +02:00
int var2 = _currScript - > readUint16LE ( ) ;
2012-04-21 21:19:13 +02:00
int var4 = _currScript - > readUint16LE ( ) ;
2012-04-07 18:09:30 +02:00
2012-04-29 10:04:15 +02:00
if ( _vm - > _displayMap ! = 1 ) {
2012-05-09 08:07:58 +02:00
_vm - > restoreSurfaceUnderMousePointer ( ) ;
2012-04-21 21:19:13 +02:00
sub18BE6 ( var1 & 0xFF , var2 , var4 ) ;
2012-05-09 08:07:58 +02:00
_vm - > displayMousePointer ( ) ;
2012-04-07 18:09:30 +02:00
}
2012-04-04 00:03:41 +02:00
}
2012-04-09 20:19:58 +02:00
2012-04-21 21:19:13 +02:00
void LilliputScript : : sub18BE6 ( byte var1 , int var2 , int var4 ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " sub18BE6(%d, %d, %d) " , var1 , var2 , var4 ) ;
2012-04-21 10:56:47 +02:00
2012-04-21 21:19:13 +02:00
_vm - > _displayStringIndex = 0 ;
_vm - > _displayStringBuf [ 0 ] = 32 ;
_vm - > _displayStringBuf [ 1 ] = 32 ;
_vm - > _displayStringBuf [ 2 ] = 32 ;
_vm - > _displayStringBuf [ 3 ] = 0 ;
2012-04-21 10:56:47 +02:00
2012-04-22 00:05:02 +02:00
_vm - > prepareGoldAmount ( var1 ) ;
_vm - > displayString ( _vm - > _displayStringBuf , var2 , var4 ) ;
2012-04-21 10:56:47 +02:00
}
2012-04-05 00:00:59 +02:00
void LilliputScript : : OC_displayVGAFile ( ) {
2012-05-09 08:07:58 +02:00
debugC ( 1 , kDebugScript , " OC_displayVGAFile() " ) ;
2012-04-07 14:36:04 +02:00
2012-04-06 22:45:43 +02:00
_byte12A09 = 1 ;
2012-05-09 08:07:58 +02:00
_vm - > paletteFadeOut ( ) ;
2012-04-05 00:00:59 +02:00
int curWord = _currScript - > readUint16LE ( ) ;
2012-05-09 08:07:58 +02:00
int index = _vm - > _packedStringIndex [ curWord ] ;
Common : : String fileName = Common : : String ( ( const char * ) & _vm - > _packedStrings [ index ] ) ;
2012-05-11 23:32:26 +02:00
_talkingCharacter = - 1 ;
2012-04-09 20:19:58 +02:00
_vm - > displayVGAFile ( fileName ) ;
2012-05-09 08:07:58 +02:00
_vm - > paletteFadeIn ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-17 23:48:11 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub184D7 ( ) {
warning ( " OC_sub184D7 " ) ;
}
2012-04-17 23:48:11 +02:00
2012-04-10 10:06:50 +02:00
void LilliputScript : : OC_displayTitleScreen ( ) {
2012-05-09 23:13:15 +02:00
debugC ( 1 , kDebugScript , " OC_displayTitleScreen() " ) ;
2012-04-07 14:36:04 +02:00
2012-04-06 08:15:22 +02:00
_vm - > _byte184F4 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
_vm - > _sound_byte16F06 = _vm - > _byte184F4 ;
2012-04-10 10:06:50 +02:00
// TODO: Rewrite keyboard handling (this code was in a separated function)
_vm - > _keyboard_nextIndex = 0 ;
_vm - > _keyboard_oldIndex = 0 ;
2012-04-06 08:15:22 +02:00
//
2012-04-10 00:57:59 +02:00
_vm - > _mouseButton = 0 ;
2012-04-06 08:15:22 +02:00
_vm - > _byte16F09 = 0 ;
2012-05-09 23:13:15 +02:00
while ( ! _vm - > _shouldQuit ) {
2012-05-11 17:01:00 +02:00
_vm - > displaySmallAnims ( ) ;
2012-04-19 08:03:19 +02:00
_vm - > update ( ) ;
2012-04-06 08:15:22 +02:00
if ( _vm - > _keyboard_nextIndex ! = _vm - > _keyboard_oldIndex ) {
_vm - > _byte16F09 = _vm - > _keyboard_getch ( ) ;
_vm - > _keyboard_getch ( ) ;
break ;
}
2012-04-10 00:57:59 +02:00
if ( _vm - > _mouseButton & 1 )
2012-04-06 08:15:22 +02:00
break ;
if ( ( _vm - > _byte184F4 ! = 0 ) & & ( _vm - > _sound_byte16F06 = = 0 ) )
break ;
}
2012-04-10 00:57:59 +02:00
_vm - > _mouseButton = 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-07 18:09:30 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1853B ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1853B() " ) ;
2012-04-07 18:09:30 +02:00
2012-04-22 23:07:09 +02:00
OC_PaletteFadeOut ( ) ;
2012-04-29 10:04:15 +02:00
_vm - > _displayMap = 0 ;
2012-04-25 23:51:45 +02:00
_heroismLevel = 0 ;
2012-04-07 18:09:30 +02:00
sub130B6 ( ) ;
2012-04-16 23:16:01 +02:00
_vm - > displayFunction12 ( ) ;
2012-04-22 23:07:09 +02:00
OC_PaletteFadeIn ( ) ;
2012-04-07 18:09:30 +02:00
_byte12A09 = 0 ;
2012-04-20 19:43:31 +02:00
_vm - > _soundHandler - > contentFct5 ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-07 18:09:30 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1864D ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1864D() " ) ;
2012-05-03 19:08:44 +02:00
byte * tmpArr = getCharacterVariablePtr ( ) ;
int var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
int var3 = ( ( 70 * tmpArr [ 0 ] ) / ( _currScript - > readUint16LE ( ) & 0xFF ) & 0xFF ) ;
int var2 = _currScript - > readUint16LE ( ) ;
int var4 = _currScript - > readUint16LE ( ) ;
_vm - > displayFunction18 ( var1 , var2 , var3 , var4 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-09 11:30:58 +02:00
2012-05-11 17:01:00 +02:00
void LilliputScript : : OC_initSmallAnim ( ) {
debugC ( 1 , kDebugScript , " OC_initSmallAnim() " ) ;
2012-04-07 14:36:04 +02:00
2012-05-09 23:13:15 +02:00
int index = _currScript - > readUint16LE ( ) ;
assert ( index < 4 ) ;
2012-05-11 17:01:00 +02:00
_vm - > _smallAnims [ index ] . _active = true ;
_vm - > _smallAnims [ index ] . _pos . x = _currScript - > readSint16LE ( ) ;
_vm - > _smallAnims [ index ] . _pos . y = _currScript - > readSint16LE ( ) ;
2012-04-09 11:30:58 +02:00
2012-04-06 08:15:22 +02:00
for ( int i = 0 ; i < 8 ; i + + )
2012-05-11 17:01:00 +02:00
_vm - > _smallAnims [ index ] . _frameIndex [ i ] = _currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-09 11:30:58 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18678 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_initArr18578() " ) ;
2012-05-01 14:35:19 +02:00
_savedBuffer215Ptr = getCharacterVariablePtr ( ) ;
2012-04-25 23:51:45 +02:00
_heroismBarX = _currScript - > readUint16LE ( ) ;
_heroismBarBottomY = _currScript - > readUint16LE ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-17 23:48:11 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18690 ( ) {
warning ( " OC_sub18690 " ) ;
}
2012-04-17 23:48:11 +02:00
2012-04-30 17:57:23 +02:00
void LilliputScript : : OC_setViewPortCharacterTarget ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_setViewPortCharacterTarget() " ) ;
2012-04-07 18:09:30 +02:00
2012-04-25 01:41:31 +02:00
_viewportCharacterTarget = getValue1 ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-15 01:40:41 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub186A1 ( ) {
2012-05-15 01:37:00 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub186A1() " ) ;
int var1 = getValue1 ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
int var3 = _currScript - > readUint16LE ( ) ;
int var4 = 16 ;
_vm - > fill16x16Rect ( var4 , var2 , var3 ) ;
int frame = _vm - > _characterFrameArray [ var1 ] ;
byte * buf = _vm - > _bufferMen ;
if ( frame > 0xF0 ) {
buf = _vm - > _bufferMen2 ;
frame - = 0xF0 ;
}
_vm - > display16x16IndexedBuf ( buf , frame , Common : : Point ( var2 , var3 ) ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-15 01:40:41 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub186E5_snd ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub186E5_snd() " ) ;
2012-04-15 01:40:41 +02:00
int index = getValue1 ( ) ;
assert ( index < 40 ) ;
2012-05-09 23:13:15 +02:00
Common : : Point var4 = Common : : Point ( 0xFF , index & 0xFF ) ;
int var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
_vm - > _soundHandler - > contentFct2 ( var1 , _viewportPos , Common : : Point ( _array16123PosX [ index ] , _array1614BPosY [ index ] ) , var4 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-07 14:36:04 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1870A_snd ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1870A_snd() " ) ;
2012-04-07 14:36:04 +02:00
2012-05-05 21:34:58 +02:00
Common : : Point var3 = getPosFromScript ( ) ;
Common : : Point var4 = var3 ;
Common : : Point var2 = _viewportPos ;
2012-04-07 18:09:30 +02:00
int var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-04-20 19:43:31 +02:00
2012-05-09 23:13:15 +02:00
_vm - > _soundHandler - > contentFct2 ( var1 , var2 , var3 , var4 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-07 14:36:04 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18725_snd ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18725_snd() " ) ;
2012-04-09 11:30:58 +02:00
int var4 = getValue1 ( ) | 0xFF00 ;
2012-04-20 19:43:31 +02:00
_vm - > _soundHandler - > contentFct3 ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-09 11:30:58 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18733_snd ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18733_snd() " ) ;
2012-04-09 11:30:58 +02:00
2012-05-05 21:34:58 +02:00
Common : : Point var4 = getPosFromScript ( ) ;
2012-04-20 19:43:31 +02:00
_vm - > _soundHandler - > contentFct3 ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-09 11:30:58 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1873F_snd ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1873F_snd() " ) ;
2012-04-09 11:30:58 +02:00
2012-04-20 19:43:31 +02:00
_vm - > _soundHandler - > contentFct4 ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-09 11:30:58 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18746_snd ( ) {
2012-05-09 23:13:15 +02:00
debugC ( 1 , kDebugScript , " OC_sub18746_snd() " ) ;
2012-04-07 14:36:04 +02:00
2012-05-09 23:13:15 +02:00
Common : : Point var4 = Common : : Point ( - 1 , - 1 ) ;
Common : : Point var2 = _viewportPos ;
int var1 = _currScript - > readSint16LE ( ) & 0xFF ;
warning ( " OC_sub18746_snd: unknown value for var3 " ) ;
Common : : Point var3 = Common : : Point ( - 1 , - 1 ) ;
2012-04-20 19:43:31 +02:00
2012-05-09 23:13:15 +02:00
_vm - > _soundHandler - > contentFct2 ( var1 , var2 , var3 , var4 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-09 11:30:58 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub1875D_snd ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1875D_snd() " ) ;
2012-04-09 11:30:58 +02:00
2012-04-20 19:43:31 +02:00
_vm - > _soundHandler - > contentFct6 ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-09 11:30:58 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub18764 ( ) {
2012-05-08 18:36:01 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18764() " ) ;
2012-04-09 11:30:58 +02:00
int index = getValue1 ( ) ;
int var1 = _currScript - > readUint16LE ( ) ;
assert ( index < 40 ) ;
_array128EF [ index ] = var1 & 0xFF ;
2012-04-04 00:03:41 +02:00
}
2012-04-09 11:30:58 +02:00
2012-04-04 00:03:41 +02:00
} // End of namespace