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-07-01 18:16:56 +02:00
# include <climits>
2012-04-18 22:48:21 +02:00
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-09 11:30:58 +02:00
_byte10806 = 0 ;
2012-05-20 09:45:10 +02:00
_lastRandomValue = 0 ;
2012-06-23 18:01:01 +02:00
_scriptForVal = 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-06-23 10:47:10 +02:00
_word16F00_characterId = - 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-05-20 15:09:32 +02:00
_currentSpeechId = 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 ;
2012-06-15 23:34:17 +02:00
_word1825E = Common : : Point ( 0 , 0 ) ;
2012-04-07 18:09:30 +02:00
for ( int i = 0 ; i < 20 ; i + + ) {
2012-05-18 19:24:03 +02:00
_interfaceHotspotStatus [ i ] = kHotspotOff ;
2012-07-01 01:58:15 +02:00
_interfaceButtonActivationDelay [ i ] = 0 ;
2012-04-07 18:09:30 +02:00
}
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-06-20 01:35:57 +02:00
_characterMapPixelColor [ i ] = 15 ;
2012-04-12 00:54:12 +02:00
_array10AB1 [ i ] = 0 ;
_array12811 [ i ] = 16 ;
2012-05-24 21:11:00 +02:00
_array12839 [ i ] = - 1 ;
2012-06-20 07:49:21 +02:00
_characterTilePosX [ i ] = 0 ;
_characterTilePosY [ 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 + + )
2018-03-20 07:45:32 +01:00
_interactions [ 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 :
2012-05-25 01:34:24 +02:00
return OC_checkIsoMap3 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x3 :
2012-05-17 02:27:17 +02:00
return OC_compareCharacterVariable ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x4 :
2012-05-20 09:45:10 +02:00
return OC_CompareLastRandomValue ( ) ;
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 :
2012-05-20 15:09:32 +02:00
return OC_compCurrentSpeechId ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x8 :
return OC_checkSaveFlag ( ) ;
break ;
case 0x9 :
2012-06-23 18:01:01 +02:00
return OC_compScriptForVal ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0xA :
2018-03-20 07:45:32 +01:00
return OC_isCarrying ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-16 17:56:46 +02:00
return OC_compareRandomCharacterId ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2018-03-20 07:45:32 +01:00
return OC_hasVisibilityLevel ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x12 :
2018-03-20 07:45:32 +01:00
return OC_hasGainedVisibilityLevel ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x13 :
2018-03-20 07:45:32 +01:00
return OC_hasReducedVisibilityLevel ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x14 :
2018-03-20 07:45:32 +01:00
return OC_isHost ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-18 19:24:03 +02:00
return OC_checkLastInterfaceHotspotIndexMenu13 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x1D :
2012-05-18 19:24:03 +02:00
return OC_checkLastInterfaceHotspotIndexMenu2 ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-20 09:45:10 +02:00
return OC_isCurrentCharacterActive ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-18 19:24:03 +02:00
return OC_checkLastInterfaceHotspotIndex ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2C :
2012-06-17 14:09:52 +02:00
return OC_checkSelectedCharacter ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2D :
2012-07-01 00:59:06 +02:00
return OC_checkDelayedReactivation ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2E :
return OC_sub179C2 ( ) ;
break ;
case 0x2F :
2012-06-03 13:25:40 +02:00
return OC_checkFunctionKeyPressed ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x30 :
2012-06-23 10:47:10 +02:00
return OC_checkCodeEntered ( ) ;
2012-04-04 00:03:41 +02:00
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-20 15:09:32 +02:00
OC_startSpeech ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x3 :
2012-06-19 08:21:46 +02:00
OC_getComputedVariantSpeech ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x4 :
2012-06-19 08:21:46 +02:00
OC_getRotatingVariantSpeech ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x5 :
2012-05-20 15:09:32 +02:00
OC_startSpeechIfMute ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x6 :
2012-06-19 08:21:46 +02:00
OC_getComputedVariantSpeechIfMute ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x7 :
2012-05-29 22:54:02 +02:00
OC_startSpeechIfSilent ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x8 :
2012-05-17 02:27:17 +02:00
OC_ComputeCharacterVariable ( ) ;
2012-04-04 00:03:41 +02:00
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-06-19 08:21:46 +02:00
OC_startSpeech5 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0xF :
OC_resetByte1714E ( ) ;
break ;
case 0x10 :
OC_deleteSavegameAndQuit ( ) ;
break ;
case 0x11 :
2012-06-23 18:01:01 +02:00
OC_incScriptForVal ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-06-23 18:01:01 +02:00
OC_initScriptFor ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-19 14:25:30 +02:00
OC_setCurrentCharacter ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-18 16:48:49 +02:00
OC_enableCurrentCharacterScript ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-26 10:41:13 +02:00
OC_turnCharacterTowardsAnother ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2D :
OC_sub17F4F ( ) ;
break ;
case 0x2E :
2012-05-25 01:34:24 +02:00
OC_scrollAwayFromCharacter ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x2F :
2012-05-06 22:32:23 +02:00
OC_skipNextVal ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x30 :
2012-05-28 23:51:53 +02:00
OC_setCurrentCharacterVar6 ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x31 :
OC_sub17FDD ( ) ;
break ;
case 0x32 :
2012-05-29 22:54:02 +02:00
OC_setCharacterScriptEnabled ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-26 02:06:12 +02:00
OC_setCharacterProperties ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-18 19:24:03 +02:00
OC_setInterfaceHotspot ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x3A :
2012-06-17 14:44:30 +02:00
OC_scrollViewPort ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-17 02:27:17 +02:00
OC_CharacterVariableAddOrRemoveFlag ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-20 09:45:10 +02:00
OC_setCurrentCharacterVar3 ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-05-18 16:48:49 +02:00
OC_enableCharacterScript ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x4A :
2012-07-01 18:16:56 +02:00
OC_setRulesBuffer2Element ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-06-01 08:18:33 +02:00
OC_waitForEvent ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x4E :
2012-05-18 19:24:03 +02:00
OC_disableInterfaceHotspot ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x4F :
2012-06-20 01:35:57 +02:00
OC_loadFileAerial ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x50 :
2012-06-19 08:21:46 +02:00
OC_startSpeechIfSoundOff ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x51 :
OC_sub1844A ( ) ;
break ;
case 0x52 :
2012-05-17 20:35:20 +02:00
OC_displayNumericCharacterVariable ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x53 :
2012-04-05 00:00:59 +02:00
OC_displayVGAFile ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x54 :
2012-05-29 22:54:02 +02:00
OC_startSpeechWithoutSpeeker ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x55 :
2012-04-10 10:06:50 +02:00
OC_displayTitleScreen ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x56 :
2012-05-17 20:35:20 +02:00
OC_initGameAreaDisplay ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x57 :
2012-05-23 07:40:05 +02:00
OC_displayCharacterStatBar ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x58 :
2012-05-11 17:01:00 +02:00
OC_initSmallAnim ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x59 :
2012-05-18 16:48:49 +02:00
OC_setCharacterHeroismBar ( ) ;
2012-04-04 00:03:41 +02:00
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 :
2012-06-20 07:49:21 +02:00
OC_setCharacterMapColor ( ) ;
2012-04-04 00:03:41 +02:00
break ;
case 0x65 :
2012-05-17 20:35:20 +02:00
OC_initGameAreaDisplay ( ) ;
2012-04-04 00:03:41 +02:00
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-05-25 01:34:24 +02:00
{ " OC_checkIsoMap3 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-17 02:27:17 +02:00
{ " OC_compareCharacterVariable " , 4 , kGetValue1 , kImmediateValue , kCompareOperation , kImmediateValue , kNone } ,
2012-05-20 09:45:10 +02:00
{ " OC_CompareLastRandomValue " , 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 } ,
2012-05-20 15:09:32 +02:00
{ " OC_compCurrentSpeechId " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " OC_checkSaveFlag " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-06-23 18:01:01 +02:00
{ " OC_compScriptForVal " , 2 , kCompareOperation , kImmediateValue , kNone , kNone , kNone } ,
2018-03-20 07:45:32 +01:00
{ " OC_isCarrying " , 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-05-16 17:56:46 +02:00
{ " OC_compareRandomCharacterId " , 3 , kGetValue1 , kCompareOperation , kImmediateValue , kNone , kNone } ,
2012-05-15 01:37:00 +02:00
{ " OC_IsCurrentCharacterIndex " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2018-03-20 07:45:32 +01:00
{ " OC_hasVisibilityLevel " , 2 , kImmediateValue , kGetValue1 , kNone , kNone , kNone } ,
{ " OC_hasGainedVisibilityLevel " , 2 , kImmediateValue , kGetValue1 , kNone , kNone , kNone } ,
{ " OC_hasReducedVisibilityLevel " , 2 , kImmediateValue , kGetValue1 , kNone , kNone , kNone } ,
{ " OC_isHost " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-04-28 18:52:15 +02:00
{ " 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-05-18 19:24:03 +02:00
{ " OC_checkLastInterfaceHotspotIndexMenu13 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
{ " OC_checkLastInterfaceHotspotIndexMenu2 " , 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-05-20 09:45:10 +02:00
{ " OC_isCurrentCharacterActive " , 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 } ,
2012-05-18 19:24:03 +02:00
{ " OC_checkLastInterfaceHotspotIndex " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
2012-06-17 14:09:52 +02:00
{ " OC_checkSelectedCharacter " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-07-01 00:59:06 +02:00
{ " OC_checkDelayedReactivation " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-05 21:34:58 +02:00
{ " OC_sub179C2 " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
2012-06-03 13:25:40 +02:00
{ " OC_checkFunctionKeyPressed " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-06-23 10:47:10 +02:00
{ " OC_checkCodeEntered " , 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-20 15:09:32 +02:00
/* 0x02 */ { " OC_startSpeech " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-06-19 08:21:46 +02:00
/* 0x03 */ { " OC_getComputedVariantSpeech " , 4 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kNone } ,
/* 0x04 */ { " OC_getRotatingVariantSpeech " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } , // todo
2012-05-20 15:09:32 +02:00
/* 0x05 */ { " OC_startSpeechIfMute " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-06-19 08:21:46 +02:00
/* 0x06 */ { " OC_getComputedVariantSpeechIfMute " , 4 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kNone } , // pb
2012-05-29 22:54:02 +02:00
/* 0x07 */ { " OC_startSpeechIfSilent " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
2012-05-17 02:27:17 +02:00
/* 0x08 */ { " OC_ComputeCharacterVariable " , 4 , kGetValue1 , kImmediateValue , kComputeOperation , kImmediateValue , kNone } ,
2012-05-01 03:29:56 +02:00
/* 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-06-19 08:21:46 +02:00
/* 0x0e */ { " OC_startSpeech5 " , 0 , kNone , kNone , kNone , kNone , kNone } , // todo
2018-03-20 12:33:50 +01:00
/* 0x0f */ { " OC_resetByte1714E " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x10 */ { " OC_deleteSavegameAndQuit " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x11 */ { " OC_incScriptForVal " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x12 */ { " OC_sub17BA5 " , 5 , kGetValue1 , kImmediateValue , kComputeOperation , kGetValue1 , kImmediateValue } ,
2018-03-20 12:33:50 +01:00
/* 0x13 */ { " OC_setByte18823 " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 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
2018-03-20 12:33:50 +01:00
/* 0x16 */ { " OC_setCurrentScriptCharacterPos " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
/* 0x17 */ { " OC_initScriptFor " , 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_setCurrentCharacter " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x1f */ { " OC_sub17C8B " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
2018-03-20 12:33:50 +01:00
/* 0x20 */ { " OC_sub17CA2 " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x21 */ { " OC_sub17CB9 " , 3 , kImmediateValue , kGetValue1 , kImmediateValue , kNone , kNone } ,
2012-05-01 03:29:56 +02:00
/* 0x22 */ { " OC_sub17CD1 " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
2018-03-20 12:33:50 +01:00
/* 0x23 */ { " OC_resetWord16EFE " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-18 16:48:49 +02:00
/* 0x24 */ { " OC_enableCurrentCharacterScript " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } , // stop script
2018-03-20 12:33:50 +01:00
/* 0x25 */ { " OC_IncCurrentCharacterVar1 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x26 */ { " OC_sub17D23 " , 2 , kImmediateValue , kgetPosFromScript , kNone , kNone , kNone } ,
/* 0x27 */ { " OC_sub17E6D " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x28 */ { " OC_changeCurrentCharacterSprite " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x29 */ { " OC_sub17E99 " , 4 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue , kNone } ,
/* 0x2a */ { " OC_sub17EC5 " , 4 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue , kNone } ,
/* 0x2b */ { " OC_setCharacterDirectionTowardsPos " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
/* 0x2c */ { " OC_turnCharacterTowardsAnother " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x2d */ { " OC_sub17F4F " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x2e */ { " OC_scrollAwayFromCharacter " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-06 22:32:23 +02:00
/* 0x2f */ { " OC_skipNextVal " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2018-03-20 12:33:50 +01:00
/* 0x30 */ { " OC_setCurrentCharacterVar6 " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x31 */ { " OC_sub17FDD " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x32 */ { " OC_setCharacterScriptEnabled " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x33 */ { " OC_setCurrentCharacterVar2 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x34 */ { " OC_SetCurrentCharacterVar2ToZero " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x35 */ { " OC_setCharacterProperties " , 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_setInterfaceHotspot " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } ,
/* 0x3a */ { " OC_scrollViewPort " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x3b */ { " OC_setViewPortPos " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
/* 0x3c */ { " OC_setCurrentCharacterAltitude " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 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
2018-03-20 12:33:50 +01:00
/* 0x42 */ { " OC_CharacterVariableAddOrRemoveFlag " , 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_setCurrentCharacterVar3 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x47 */ { " OC_setArray122C1 " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x48 */ { " OC_sub18367 " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x49 */ { " OC_enableCharacterScript " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
/* 0x4a */ { " OC_setRulesBuffer2Element " , 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_waitForEvent " , 0 , kNone , kNone , kNone , kNone , kNone } ,
2012-05-18 19:24:03 +02:00
/* 0x4e */ { " OC_disableInterfaceHotspot " , 2 , kImmediateValue , kImmediateValue , kNone , kNone , kNone } , // TODO
2018-03-20 12:33:50 +01:00
/* 0x4f */ { " OC_loadFileAerial " , 1 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x50 */ { " OC_startSpeechIfSoundOff " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x51 */ { " OC_sub1844A " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
/* 0x52 */ { " OC_displayNumericCharacterVariable " , 5 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue } ,
/* 0x53 */ { " OC_displayVGAFile " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
2012-05-29 22:54:02 +02:00
/* 0x54 */ { " OC_startSpeechWithoutSpeeker " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } , // TODO
2018-03-20 12:33:50 +01:00
/* 0x55 */ { " OC_displayTitleScreen " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x56 */ { " OC_initGameAreaDisplay " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x57 */ { " OC_displayCharacterStatBar " , 6 , kGetValue1 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue } ,
/* 0x58 */ { " OC_initSmallAnim " , 11 , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue , kImmediateValue } ,
/* 0x59 */ { " OC_setCharacterHeroismBar " , 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
2018-03-20 12:33:50 +01:00
/* 0x5d */ { " OC_sub186E5_snd " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
/* 0x5e */ { " OC_sub1870A_snd " , 2 , kgetPosFromScript , kImmediateValue , kNone , kNone , kNone } ,
/* 0x5f */ { " OC_sub18725_snd " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x60 */ { " OC_sub18733_snd " , 1 , kGetValue1 , kNone , kNone , kNone , kNone } ,
/* 0x61 */ { " OC_sub1873F_snd " , 1 , kgetPosFromScript , kNone , kNone , kNone , kNone } ,
/* 0x62 */ { " OC_sub18746_snd " , 1 , kImmediateValue , kNone , kNone , kNone , kNone } ,
/* 0x63 */ { " OC_sub1875D_snd " , 0 , kNone , kNone , kNone , kNone , kNone } ,
/* 0x64 */ { " OC_setCharacterMapColor " , 2 , kGetValue1 , kImmediateValue , kNone , kNone , kNone } ,
2012-05-17 20:35:20 +02:00
/* 0x65 */ { " OC_initGameAreaDisplay " , 0 , kNone , kNone , kNone , kNone , kNone }
2012-04-28 18:52:15 +02:00
} ;
2018-03-20 12:37:02 +01:00
Common : : String LilliputScript : : getArgumentString ( kValueType type , ScriptStream & script ) {
2018-03-20 12:33:50 +01:00
2012-05-01 14:35:19 +02:00
Common : : String str ;
2012-05-16 20:58:41 +02:00
if ( type = = kImmediateValue ) {
2012-05-01 14:35:19 +02:00
str = Common : : String : : format ( " 0x%x " , script . readUint16LE ( ) ) ;
} else if ( type = = kGetValue1 ) {
int val = script . readUint16LE ( ) ;
2018-03-20 12:33:50 +01:00
if ( val < 1000 ) {
2012-05-01 14:35:19 +02:00
str = Common : : String : : format ( " 0x%x " , val ) ;
2018-03-20 12:33:50 +01:00
} else if ( val > 1004 ) {
2012-05-01 14:35:19 +02:00
str = Common : : String : : format ( " getValue1(0x%x) " , val ) ;
2012-05-16 20:58:41 +02:00
} else if ( val = = 1000 ) {
2012-06-17 14:09:52 +02:00
str = Common : : String ( " _selectedCharacterId " ) ;
2012-05-16 20:58:41 +02:00
} else if ( val = = 1001 ) {
2012-05-01 14:35:19 +02:00
str = Common : : String ( " characterIndex " ) ;
2012-05-16 20:58:41 +02:00
} else if ( val = = 1002 ) {
2012-06-23 10:47:10 +02:00
str = Common : : String ( " _word16F00_characterId " ) ;
2012-05-16 20:58:41 +02:00
} else if ( val = = 1003 ) {
2012-05-01 14:35:19 +02:00
str = Common : : String ( " _currentCharacterVariables[6] " ) ;
2012-05-16 20:58:41 +02:00
} else if ( val = = 1004 ) {
2012-05-01 14:35:19 +02:00
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 : {
2012-06-23 10:47:10 +02:00
str = " (characterPositionTileX[_word16F00_characterId], characterPositionTileY[_word16F00_characterId]) " ;
2012-05-01 14:35:19 +02:00
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 ) ;
2018-03-19 23:55:08 +01:00
break ;
2012-05-01 14:35:19 +02:00
}
case 0xF7 : {
str = Common : : String : : format ( " (_characterPositionTileX[_currentCharacterVariables[6]], _characterPositionTileY[_currentCharacterVariables[6]]) " ) ;
2018-03-20 12:33:50 +01:00
break ;
2012-05-01 14:35:19 +02:00
}
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 ( ) ;
2012-05-16 20:58:41 +02:00
if ( comp ! = ' < ' & & comp ! = ' > ' )
2012-05-01 14:35:19 +02:00
comp = ' = ' ;
2012-05-16 20:58:41 +02:00
str = Common : : String : : format ( " %c " , comp ) ;
2012-05-01 14:35:19 +02:00
}
else if ( type = = kComputeOperation ) {
int comp = script . readUint16LE ( ) ;
2012-05-16 20:58:41 +02:00
str = Common : : String : : format ( " %c " , comp ) ;
2012-05-01 14:35:19 +02:00
}
return str ;
}
2012-05-16 20:58:41 +02:00
void LilliputScript : : disasmScript ( ScriptStream script ) {
while ( ! script . eos ( ) ) {
2012-04-28 18:52:15 +02:00
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
2018-03-20 12:33:50 +01: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 ] ;
2018-03-20 12:37:02 +01:00
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 + = " ) " ;
val = script . readUint16LE ( ) ;
2012-05-12 22:21:02 +02:00
if ( val = = 0xFFF8 ) {
2012-05-01 03:29:56 +02:00
str + = " ) " ;
}
2012-06-23 18:01:01 +02:00
debugC ( 2 , kDebugScript , " %s " , str . c_str ( ) ) ;
2012-05-01 03:29:56 +02:00
}
2012-04-28 18:52:15 +02:00
2012-06-23 18:01:01 +02:00
debugC ( 2 , kDebugScript , " { " ) ;
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 ) {
2018-03-20 12:33:50 +01:00
// op code type 2
2012-05-12 22:21:02 +02:00
assert ( val < sizeof ( opCodes2 ) / sizeof ( OpCode ) ) ;
const OpCode * opCode = & opCodes2 [ val ] ;
2018-03-20 12:37:02 +01:00
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-16 20:58:41 +02:00
if ( p < 4 )
2012-05-01 03:29:56 +02:00
opArgType + + ;
}
str + = " ); " ;
2012-06-23 18:01:01 +02:00
debugC ( 2 , kDebugScript , " %s " , str . c_str ( ) ) ;
2012-04-28 18:52:15 +02:00
val = script . readUint16LE ( ) ;
}
2012-06-23 18:01:01 +02:00
debugC ( 2 , kDebugScript , " } " ) ;
debugC ( 2 , kDebugScript , " " ) ;
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 ( ) ) {
2018-03-20 12:33:50 +01:00
byte mask = 0 ;
2012-04-04 00:03:41 +02:00
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-06-23 18:01:01 +02:00
_vm - > _handleOpcodeReturnCode = 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-06-23 18:01:01 +02:00
return _vm - > _handleOpcodeReturnCode ;
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 ;
2018-03-20 12:33:50 +01:00
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 ;
2018-03-20 12:33:50 +01:00
2012-04-11 10:59:42 +02:00
while ( handleOpcode ( & script ) = = 0 )
2012-04-19 08:03:19 +02:00
_vm - > update ( ) ;
2012-04-11 10:59:42 +02:00
}
2012-05-20 09:45:10 +02:00
byte LilliputScript : : compareValues ( int16 var1 , uint16 oper , int16 var2 ) {
2012-05-10 08:11:45 +02:00
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-05-20 09:45:10 +02:00
void LilliputScript : : computeOperation ( byte * bufPtr , uint16 oper , int16 var3 ) {
2012-05-19 14:25:30 +02:00
debugC ( 1 , kDebugScript , " 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 ;
2018-03-20 12:33:50 +01:00
else
2012-04-08 12:54:56 +02:00
bufPtr [ 0 ] = 0 ;
}
break ;
}
}
}
2012-05-18 16:48:49 +02:00
void LilliputScript : : enableCharacterScript ( byte index , byte var1 , byte * curBufPtr ) {
debugC ( 1 , kDebugScript , " enableCharacterScript(%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-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " sub17B6C(%d) " , var1 ) ;
2012-04-12 00:54:12 +02:00
if ( var1 = = 0 ) {
int curWord = 0 ;
while ( curWord ! = 0xFFF6 )
curWord = _currScript - > readUint16LE ( ) ;
2018-03-20 12:33:50 +01:00
2012-04-12 00:54:12 +02:00
_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-21 07:51:05 +02:00
debugC ( 1 , kDebugScript , " 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
}
}
2012-05-24 21:11:00 +02:00
void LilliputScript : : sub16C5C ( int index , int8 var3 ) {
2012-05-20 15:09:32 +02:00
debugC ( 1 , kDebugScript , " 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-05-20 15:09:32 +02:00
void LilliputScript : : checkSpeechAllowed ( bool & forceReturnFl ) {
debugC ( 1 , kDebugScript , " checkSpeechAllowed() " ) ;
2012-04-15 01:40:41 +02:00
2012-04-28 16:24:47 +02:00
forceReturnFl = false ;
2012-06-21 07:33:00 +02:00
if ( ( ! _vm - > _displayMap ) & & ( _vm - > _characterRelativePositionX [ _vm - > _currentScriptCharacter ] ! = - 1 ) )
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-05-21 09:44:25 +02:00
void LilliputScript : : formatSpeechString ( ) {
debugC ( 2 , kDebugScript , " formatSpeechString() " ) ;
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-21 09:44:25 +02:00
debugC ( 2 , kDebugScript , " sub189B8() " ) ;
2012-04-29 00:35:44 +02:00
2012-05-21 09:44:25 +02:00
formatSpeechString ( ) ;
2012-04-29 00:35:44 +02:00
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-05-21 22:03:40 +02:00
_vm - > displaySpeechBubble ( ) ;
2012-05-21 09:44:25 +02:00
_vm - > displaySpeech ( _vm - > _displayStringBuf ) ;
2012-04-29 00:35:44 +02:00
}
2012-05-09 08:07:58 +02:00
void LilliputScript : : decodePackedText ( char * buf ) {
2012-05-21 09:44:25 +02:00
debugC ( 2 , kDebugScript , " decodePackedText(buf) " ) ;
2012-04-29 00:35:44 +02:00
2012-06-19 08:21:46 +02:00
// All the languages use the English dictionnary
2012-05-21 22:03:40 +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| " ;
2012-04-29 00:35:44 +02:00
_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 = = ' # ' ) {
2012-05-18 16:48:49 +02:00
_vm - > numberToString ( _byte18823 ) ;
2012-04-29 00:35:44 +02:00
}
} 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-06-19 08:21:46 +02:00
int LilliputScript : : getPackedStringStartRelativeIndex ( int index ) {
debugC ( 2 , kDebugScript , " getPackedStringStartRelativeIndex(%d) " , index ) ;
2018-03-20 12:33:50 +01: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 ;
2018-03-20 12:33:50 +01:00
2012-05-03 19:08:44 +02:00
return result + 1 ;
}
2012-06-19 08:21:46 +02:00
// Part of the script decompiler
2012-05-12 18:04:07 +02:00
void LilliputScript : : listAllTexts ( ) {
2012-06-19 08:21:46 +02:00
debugC ( 1 , kDebugScript , " listAllTexts " ) ;
2012-05-12 18:04:07 +02:00
for ( int i = 0 ; i < _vm - > _packedStringNumb ; i + + ) {
int index = _vm - > _packedStringIndex [ i ] ;
int variantCount = 0 ;
while ( _vm - > _packedStrings [ index + variantCount ] = = 0x5B )
+ + variantCount ;
2012-09-18 00:17:51 +02:00
/*
2018-03-20 12:33:50 +01:00
int it = 0 ;
2012-09-18 00:17:51 +02:00
if ( variantCount ! = 0 ) {
2012-05-12 18:04:07 +02:00
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 ) ;
2018-03-20 12:33:50 +01:00
/* }*/
2012-05-12 18:04:07 +02:00
}
}
2012-05-20 15:09:32 +02:00
void LilliputScript : : startSpeech ( int speechId ) {
2012-05-21 09:44:25 +02:00
debugC ( 2 , kDebugScript , " startSpeech(%d) " , speechId ) ;
2012-04-15 01:40:41 +02:00
2012-05-20 15:09:32 +02:00
if ( speechId = = - 1 )
2012-04-15 01:40:41 +02:00
return ;
2012-05-20 15:09:32 +02:00
_currentSpeechId = speechId ;
2012-04-15 01:40:41 +02:00
2012-05-20 15:09:32 +02:00
int index = _vm - > _packedStringIndex [ speechId ] ;
2012-04-15 01:40:41 +02:00
int count = 0 ;
2012-05-21 09:44:25 +02:00
while ( _vm - > _packedStrings [ index + count ] = = ' [ ' )
2012-04-15 01:40:41 +02:00
+ + count ;
int i = 0 ;
if ( count ! = 0 ) {
2012-06-16 00:30:42 +02:00
int tmpVal = _vm - > _rnd - > getRandomNumber ( count ) ;
2012-04-15 01:40:41 +02:00
if ( tmpVal ! = 0 ) {
for ( int j = 0 ; j < tmpVal ; j + + ) {
do
+ + i ;
2012-05-21 09:44:25 +02:00
while ( _vm - > _packedStrings [ index + count + i ] ! = ' ] ' ) ;
2012-06-16 00:30:42 +02:00
+ + i ;
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 :
2012-06-17 14:09:52 +02:00
return _vm - > _selectedCharacterId ;
2012-04-07 18:09:30 +02:00
case 1001 :
2012-05-01 23:32:44 +02:00
return _vm - > _currentScriptCharacter ;
2012-04-07 18:09:30 +02:00
case 1002 :
2012-06-23 10:47:10 +02:00
return _word16F00_characterId ;
2012-04-07 18:09:30 +02:00
case 1003 :
2012-05-28 23:51:53 +02:00
return ( int16 ) _vm - > _currentCharacterVariables [ 6 ] ;
2012-04-07 18:09:30 +02:00
case 1004 :
2018-03-20 07:45:32 +01:00
return _vm - > _host ;
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-15 08:05:20 +02:00
debugC ( 2 , kDebugScript , " 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-18 16:48:49 +02:00
return Common : : Point ( _vm - > _rulesBuffer2_13_posX [ _vm - > _currentScriptCharacter ] , _vm - > _rulesBuffer2_14_posY [ _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-18 16:48:49 +02:00
return Common : : Point ( _vm - > _rulesBuffer2_13_posX [ index ] , _vm - > _rulesBuffer2_14_posY [ 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 : {
2012-06-23 10:47:10 +02:00
int index = _word16F00_characterId ;
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 08:05:20 +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-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-20 09:45:10 +02:00
debugC ( 2 , kDebugScript , " 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-26 11:07:15 +02:00
debugC ( 2 , kDebugScript , " OC_comparePos() " ) ;
2012-04-27 22:54:43 +02:00
int index = getValue1 ( ) ;
2012-06-20 07:49:21 +02:00
int8 d1 = _characterTilePosX [ index ] ;
int8 d2 = _characterTilePosY [ 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-05-26 11:07:15 +02:00
warning ( " OC_comparePos - debug: %d-%d %d-%d " , var1 . x , var1 . y , d1 , d2 ) ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 22:54:43 +02:00
2012-05-25 01:34:24 +02:00
byte LilliputScript : : OC_checkIsoMap3 ( ) {
debugC ( 1 , kDebugScript , " OC_checkIsoMap3() " ) ;
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-05-25 01:34:24 +02:00
byte var2 = isoMapBuf [ 3 ] ;
2012-04-28 01:03:11 +02:00
2012-05-21 07:51:05 +02:00
int16 var3 = _currScript - > readUint16LE ( ) ;
2012-05-25 01:34:24 +02:00
byte var4 = 8 > > var3 ;
2012-04-28 01:03:11 +02:00
2012-05-25 01:34:24 +02:00
if ( ( var2 & var4 ) ! = 0 ) {
2012-04-28 01:03:11 +02:00
return 1 ;
}
2012-05-25 01:34:24 +02:00
return 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-06 22:45:43 +02:00
2012-05-17 02:27:17 +02:00
byte LilliputScript : : OC_compareCharacterVariable ( ) {
debugC ( 1 , kDebugScript , " OC_compareCharacterVariable() " ) ;
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-20 09:45:10 +02:00
byte LilliputScript : : OC_CompareLastRandomValue ( ) {
debugC ( 1 , kDebugScript , " OC_CompareLastRandomValue() " ) ;
2012-04-28 01:03:11 +02:00
2012-05-20 09:45:10 +02:00
uint16 operation = _currScript - > readUint16LE ( ) ;
int16 val2 = _currScript - > readSint16LE ( ) ;
return compareValues ( _lastRandomValue , 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-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " 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 ) ;
2012-05-20 09:45:10 +02:00
_lastRandomValue = ( rand & 0xFF ) ;
2018-03-20 12:33:50 +01: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-21 07:51:05 +02:00
debugC ( 1 , kDebugScript , " 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-05-20 15:09:32 +02:00
byte LilliputScript : : OC_compCurrentSpeechId ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_compCurrentSpeechId() " ) ;
2012-04-28 09:08:11 +02:00
int var1 = _currScript - > readUint16LE ( ) ;
2012-05-20 15:09:32 +02:00
if ( var1 = = _currentSpeechId )
2012-04-28 09:08:11 +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_checkSaveFlag ( ) {
2012-05-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " 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-06-23 18:01:01 +02:00
byte LilliputScript : : OC_compScriptForVal ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_compScriptForVal() " ) ;
2012-04-28 09:08:11 +02:00
uint16 oper = _currScript - > readUint16LE ( ) ;
int16 var2 = _currScript - > readUint16LE ( ) ;
2012-06-23 18:01:01 +02:00
return compareValues ( _scriptForVal , oper , var2 ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 00:54:12 +02:00
2018-03-20 07:45:32 +01:00
byte LilliputScript : : OC_isCarrying ( ) {
debugC ( 1 , kDebugScript , " OC_isCarrying() " ) ;
2012-04-12 00:54:12 +02:00
2012-05-26 17:59:38 +02:00
int8 tmpVal = getValue1 ( ) & 0xFF ;
2012-05-20 09:45:10 +02:00
uint16 curWord = _currScript - > readUint16LE ( ) ;
2018-03-20 12:33:50 +01:00
2012-04-12 00:54:12 +02:00
if ( curWord = = 3000 ) {
2012-05-20 09:45:10 +02:00
for ( int index = 0 ; index < _vm - > _numCharacters ; index + + ) {
2018-03-20 07:45:32 +01:00
if ( _vm - > _characterCarried [ index ] = = tmpVal ) {
2012-06-23 10:47:10 +02:00
_word16F00_characterId = index ;
2012-04-12 00:54:12 +02:00
return 1 ;
}
}
} else {
_currScript - > seek ( _currScript - > pos ( ) - 2 ) ;
int index = getValue1 ( ) ;
assert ( index < 40 ) ;
2018-03-20 07:45:32 +01:00
if ( _vm - > _characterCarried [ index ] = = tmpVal ) {
2012-06-23 10:47:10 +02:00
_word16F00_characterId = index ;
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-05-15 01:37:00 +02:00
byte LilliputScript : : OC_CompareCharacterVariables ( ) {
2012-05-19 14:25:30 +02:00
debugC ( 1 , kDebugScript , " 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-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " OC_compareCoords_1() " ) ;
2012-04-26 00:21:44 +02:00
int index = _currScript - > readUint16LE ( ) ;
assert ( index < 40 ) ;
2012-07-01 18:16:56 +02:00
MinMax xMinMax = _vm - > _rectXMinMax [ index ] ;
MinMax yMinMax = _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-07-01 18:16:56 +02:00
if ( ( var1 . x < xMinMax . min ) | | ( var1 . x > xMinMax . max ) | | ( var1 . y < yMinMax . min ) | | ( var1 . y > yMinMax . max ) )
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-29 08:30:34 +02:00
debugC ( 1 , kDebugScript , " OC_compareCoords_2() " ) ;
2012-04-28 18:52:15 +02:00
2012-05-09 08:07:58 +02:00
int16 index = getValue1 ( ) ;
2012-06-20 07:49:21 +02:00
Common : : Point var1 = Common : : Point ( _characterTilePosX [ index ] , _characterTilePosY [ index ] ) ;
2012-05-09 08:07:58 +02:00
index = _currScript - > readUint16LE ( ) ;
2012-07-01 18:16:56 +02:00
MinMax xMinMax = _vm - > _rectXMinMax [ index ] ;
MinMax yMinMax = _vm - > _rectYMinMax [ index ] ;
2012-05-06 10:04:09 +02:00
2012-07-01 18:16:56 +02:00
if ( ( var1 . x < xMinMax . min ) | | ( var1 . x > xMinMax . max ) | | ( var1 . y < yMinMax . min ) | | ( var1 . y > yMinMax . max ) )
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 ( ) {
2012-05-21 07:51:05 +02:00
debugC ( 1 , kDebugScript , " OC_CompareDistanceFromCharacterToPositionWith() " ) ;
2012-05-16 17:56:46 +02:00
2012-05-15 01:37:00 +02:00
Common : : Point var1 = getPosFromScript ( ) ;
Common : : Point pos = _vm - > _currentScriptCharacterPos ;
2018-03-20 12:33:50 +01:00
2012-05-15 01:37:00 +02:00
int dx = var1 . x - pos . x ;
2012-05-21 07:51:05 +02:00
if ( dx < 0 )
dx = - dx ;
2012-05-15 01:37:00 +02:00
int dy = var1 . y - pos . y ;
2012-05-21 07:51:05 +02:00
if ( dy < 0 )
dy = - dy ;
2012-05-15 01:37:00 +02:00
2012-05-21 07:51:05 +02:00
int16 dist = dx + dy ;
2018-03-20 12:33:50 +01:00
2012-05-15 01:37:00 +02:00
uint16 operation = _currScript - > readUint16LE ( ) ;
2012-05-16 17:56:46 +02:00
int16 var2 = _currScript - > readSint16LE ( ) ;
2018-03-20 12:33:50 +01:00
2012-05-15 01:37:00 +02:00
return compareValues ( dist , operation , var2 ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-21 07:51:05 +02:00
2012-05-16 17:56:46 +02:00
byte LilliputScript : : OC_compareRandomCharacterId ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_compareRandomCharacterId() " ) ;
byte * tmpArr = getCharacterVariablePtr ( ) ;
2012-05-20 09:45:10 +02:00
_lastRandomValue = _vm - > _rnd - > getRandomNumber ( tmpArr [ 0 ] + 1 ) ;
2012-05-16 17:56:46 +02:00
uint16 oper = _currScript - > readUint16LE ( ) ;
int16 var2 = _currScript - > readSint16LE ( ) ;
2012-05-20 09:45:10 +02:00
return compareValues ( _lastRandomValue , 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_IsCurrentCharacterIndex ( ) {
2012-05-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " OC_IsCurrentCharacterIndex() " ) ;
2018-03-20 12:33:50 +01:00
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
2018-03-20 07:45:32 +01:00
byte LilliputScript : : OC_hasVisibilityLevel ( ) {
debugC ( 1 , kDebugScript , " OC_hasVisibilityLevel() " ) ;
2018-03-20 12:33:50 +01:00
2012-04-12 20:53:38 +02:00
byte var4 = _currScript - > readUint16LE ( ) & 0xFF ;
int tmpVal = _currScript - > readUint16LE ( ) ;
2018-03-20 12:33:50 +01:00
2012-04-12 20:53:38 +02:00
if ( tmpVal < 2000 ) {
_currScript - > seek ( _currScript - > pos ( ) - 2 ) ;
int index = getValue1 ( ) ;
2018-03-20 07:45:32 +01:00
int var1 = _interactions [ ( _vm - > _currentScriptCharacter * 40 ) + index ] ;
2012-04-12 20:53:38 +02:00
if ( ( var1 & 0xFF ) < var4 )
return 0 ;
2018-03-20 12:33:50 +01:00
2012-06-23 10:47:10 +02:00
_word16F00_characterId = index ;
2012-04-12 20:53:38 +02:00
return 1 ;
}
if ( tmpVal = = 3000 ) {
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2018-03-20 07:45:32 +01:00
int var1 = _interactions [ ( _vm - > _currentScriptCharacter * 40 ) + i ] ;
2012-04-12 20:53:38 +02:00
if ( ( var1 & 0xFF ) > = var4 ) {
2012-06-23 10:47:10 +02:00
_word16F00_characterId = i ;
2012-04-12 20:53:38 +02:00
return 1 ;
}
}
return 0 ;
}
2018-03-20 12:33:50 +01:00
2012-04-12 20:53:38 +02:00
tmpVal - = 2000 ;
byte var4b = tmpVal & 0xFF ;
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2018-03-20 07:45:32 +01:00
int var1 = _interactions [ ( _vm - > _currentScriptCharacter * 40 ) + i ] ;
if ( ( ( var1 & 0xFF ) > = var4 ) & & ( _vm - > _characterBehaviour [ i ] = = var4b ) ) {
2012-06-23 10:47:10 +02:00
_word16F00_characterId = i ;
2012-05-18 16:48:49 +02:00
return 1 ;
2012-04-12 20:53:38 +02:00
}
2018-03-20 12:33:50 +01:00
}
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-27 08:10:55 +02:00
2018-03-20 07:45:32 +01:00
byte LilliputScript : : OC_hasGainedVisibilityLevel ( ) {
debugC ( 1 , kDebugScript , " OC_hasGainedVisibilityLevel() " ) ;
2012-04-26 08:35:47 +02:00
2012-05-26 17:59:38 +02:00
uint16 var4 = _currScript - > readUint16LE ( ) ;
2012-05-01 23:32:44 +02:00
int index = _vm - > _currentScriptCharacter * 40 ;
2012-05-26 17:59:38 +02:00
uint16 tmpVal = _currScript - > readUint16LE ( ) ;
2012-04-26 08:35:47 +02:00
2012-05-18 16:48:49 +02:00
if ( tmpVal < 2000 ) {
2012-04-26 08:35:47 +02:00
_currScript - > seek ( _currScript - > pos ( ) - 2 ) ;
2012-05-12 09:02:01 +02:00
int subIndex = getValue1 ( ) ;
2018-03-20 07:45:32 +01:00
tmpVal = _interactions [ index + subIndex ] ;
2012-04-26 08:35:47 +02:00
byte v1 = tmpVal & 0xFF ;
byte v2 = tmpVal > > 8 ;
if ( ( v1 < ( var4 & 0xFF ) ) | | ( v2 > = ( var4 & 0xFF ) ) )
return 0 ;
2012-06-23 10:47:10 +02:00
_word16F00_characterId = subIndex ;
2012-04-26 08:35:47 +02:00
return 1 ;
}
2012-05-18 16:48:49 +02:00
int var1 = tmpVal ;
if ( var1 = = 3000 ) {
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2018-03-20 07:45:32 +01:00
tmpVal = _interactions [ index + i ] ;
2012-05-18 16:48:49 +02:00
byte v1 = tmpVal & 0xFF ;
byte v2 = tmpVal > > 8 ;
if ( ( v1 > = ( var4 & 0xFF ) ) & & ( v2 < ( var4 & 0xFF ) ) ) {
2012-06-23 10:47:10 +02:00
_word16F00_characterId = i ;
2012-05-18 16:48:49 +02:00
return 1 ;
}
}
return 0 ;
2018-03-20 12:33:50 +01:00
}
2012-05-18 16:48:49 +02:00
var1 - = 2000 ;
var4 = ( ( var1 & 0xFF ) < < 8 ) + ( var4 & 0xFF ) ;
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2018-03-20 07:45:32 +01:00
tmpVal = _interactions [ index + i ] ;
2012-05-18 16:48:49 +02:00
byte v1 = tmpVal & 0xFF ;
byte v2 = tmpVal > > 8 ;
2018-03-20 07:45:32 +01:00
if ( ( v1 > = ( var4 & 0xFF ) ) & & ( v2 < ( var4 & 0xFF ) ) & & ( _vm - > _characterBehaviour [ i ] = = ( var4 > > 8 ) ) ) {
2012-06-23 10:47:10 +02:00
_word16F00_characterId = i ;
2012-05-18 16:48:49 +02:00
return 1 ;
}
}
return 0 ;
2012-04-04 00:03:41 +02:00
}
2012-04-12 20:53:38 +02:00
2018-03-20 07:45:32 +01:00
byte LilliputScript : : OC_hasReducedVisibilityLevel ( ) {
debugC ( 1 , kDebugScript , " OC_hasReducedVisibilityLevel() " ) ;
2018-03-20 12:33:50 +01:00
2012-04-12 20:53:38 +02:00
byte var4 = _currScript - > readUint16LE ( ) & 0xFF ;
int tmpVal = _currScript - > readUint16LE ( ) ;
2018-03-20 12:33:50 +01:00
2012-04-12 20:53:38 +02:00
if ( tmpVal < 2000 ) {
_currScript - > seek ( _currScript - > pos ( ) - 2 ) ;
int index = getValue1 ( ) ;
2018-03-20 07:45:32 +01:00
int var1 = _interactions [ ( _vm - > _currentScriptCharacter * 40 ) + index ] ;
2012-04-12 20:53:38 +02:00
if ( ( ( var1 & 0xFF ) > = var4 ) | | ( ( var1 > > 8 ) < var4 ) )
return 0 ;
2018-03-20 12:33:50 +01:00
2012-06-23 10:47:10 +02:00
_word16F00_characterId = index ;
2012-04-12 20:53:38 +02:00
return 1 ;
}
if ( tmpVal = = 3000 ) {
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2018-03-20 07:45:32 +01:00
int var1 = _interactions [ ( _vm - > _currentScriptCharacter * 40 ) + i ] ;
2012-04-12 20:53:38 +02:00
if ( ( ( var1 & 0xFF ) < var4 ) & & ( ( var1 > > 8 ) > = var4 ) ) {
2012-06-23 10:47:10 +02:00
_word16F00_characterId = i ;
2012-04-12 20:53:38 +02:00
return 1 ;
}
}
return 0 ;
}
2018-03-20 12:33:50 +01:00
2012-04-12 20:53:38 +02:00
tmpVal - = 2000 ;
byte var4b = tmpVal & 0xFF ;
2012-04-28 02:59:43 +02:00
for ( int i = 0 ; i < _vm - > _numCharacters ; i + + ) {
2018-03-20 07:45:32 +01:00
int var1 = _interactions [ ( _vm - > _currentScriptCharacter * 40 ) + i ] ;
2012-04-12 20:53:38 +02:00
if ( ( ( var1 & 0xFF ) < var4 ) & & ( ( var1 > > 8 ) > = var4 ) ) {
2018-03-20 07:45:32 +01:00
if ( _vm - > _characterBehaviour [ i ] = = var4b ) {
2012-06-23 10:47:10 +02:00
_word16F00_characterId = i ;
2012-04-12 20:53:38 +02:00
return 1 ;
}
}
2018-03-20 12:33:50 +01:00
}
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 20:53:38 +02:00
2018-03-20 07:45:32 +01:00
byte LilliputScript : : OC_isHost ( ) {
debugC ( 1 , kDebugScript , " OC_isHost() " ) ;
2018-03-20 12:33:50 +01:00
2012-05-18 17:06:58 +02:00
int tmpVal = getValue1 ( ) ;
2018-03-20 07:45:32 +01:00
if ( tmpVal = = _vm - > _host )
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-24 21:11:00 +02:00
debugC ( 1 , kDebugScript , " OC_sub17766() " ) ;
2012-04-28 09:08:11 +02:00
2012-05-24 21:11:00 +02:00
int8 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-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " OC_sub17782() " ) ;
2012-04-28 09:08:11 +02:00
2012-05-24 21:11:00 +02:00
int8 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-21 07:51:05 +02:00
debugC ( 1 , kDebugScript , " 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 ( ) {
2012-05-21 07:51:05 +02:00
debugC ( 1 , kDebugScript , " 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 ;
}
2012-05-21 07:51:05 +02:00
int16 var2 = _currScript - > readUint16LE ( ) ;
2012-04-27 17:45:46 +02:00
byte * buf = getMapPtr ( tmpVal ) ;
2012-05-21 07:51:05 +02:00
int16 var1 = buf [ var2 ] ;
uint16 oper = _currScript - > readUint16LE ( ) ;
var2 = _currScript - > readSint16LE ( ) ;
2018-03-20 12:33:50 +01:00
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 ( ) {
2012-05-19 14:25:30 +02:00
debugC ( 1 , kDebugScript , " 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-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " OC_compWord16EFE() " ) ;
2012-04-15 01:40:41 +02:00
2012-04-11 18:23:17 +02:00
byte curByte = _currScript - > readUint16LE ( ) & 0xFF ;
2012-06-23 10:47:10 +02:00
byte tmpVal = _vm - > _word16EFEh ;
2012-04-11 18:23:17 +02:00
if ( curByte ! = tmpVal )
return 0 ;
2012-06-23 10:47:10 +02:00
_word16F00_characterId = _vm - > _word16EFEl_characterId ;
2012-04-11 18:23:17 +02:00
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 ( ) {
2012-05-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " 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 ( ) {
2012-05-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " 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-05-18 19:24:03 +02:00
byte LilliputScript : : OC_checkLastInterfaceHotspotIndexMenu13 ( ) {
debugC ( 1 , kDebugScript , " OC_checkLastInterfaceHotspotIndexMenu13() " ) ;
2012-04-11 10:59:42 +02:00
byte tmpVal = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2018-03-20 12:33:50 +01:00
2012-06-23 18:56:08 +02:00
if ( ( _vm - > _actionType ! = 1 ) & & ( _vm - > _actionType ! = kActionTalk ) )
2012-04-11 10:59:42 +02:00
return 0 ;
2012-05-18 19:24:03 +02:00
if ( tmpVal = = _vm - > _lastInterfaceHotspotIndex )
2012-04-11 10:59:42 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-12 00:54:12 +02:00
2012-05-18 19:24:03 +02:00
byte LilliputScript : : OC_checkLastInterfaceHotspotIndexMenu2 ( ) {
2012-05-29 22:54:02 +02:00
debugC ( 1 , kDebugScript , " OC_checkLastInterfaceHotspotIndexMenu2() " ) ;
2012-04-25 08:10:26 +02:00
2012-05-18 19:24:03 +02:00
int8 hotspotIndex = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-04-25 08:10:26 +02:00
2012-06-23 10:47:10 +02:00
if ( ( _vm - > _actionType = = 2 ) & & ( hotspotIndex = = _vm - > _lastInterfaceHotspotIndex ) )
2012-05-18 19:24:03 +02:00
return 1 ;
2012-04-25 08:10:26 +02:00
2012-05-18 19:24:03 +02:00
return 0 ;
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 ( ) {
2012-05-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " OC_CompareNumberOfCharacterWithVar0Equals() " ) ;
2012-04-12 00:54:12 +02:00
byte curByte = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-20 09:45:10 +02:00
int16 count = 0 ;
2012-04-12 00:54:12 +02:00
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 ;
}
2012-05-20 09:45:10 +02:00
uint16 oper = _currScript - > readUint16LE ( ) ;
int16 var2 = _currScript - > readSint16LE ( ) ;
2012-04-12 00:54:12 +02:00
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 ( ) {
2012-05-26 02:06:12 +02:00
debugC ( 1 , kDebugScript , " 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-26 02:06:12 +02:00
int16 dx = var1 . x - _viewportPos . x ;
int16 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-28 23:51:53 +02:00
debugC ( 1 , kDebugScript , " OC_CompareGameVariables() " ) ;
2012-04-28 18:52:15 +02:00
2012-05-28 23:51:53 +02:00
int16 var1 = getValue1 ( ) ;
int16 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 ( ) {
2012-05-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " 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-26 17:59:38 +02:00
debugC ( 1 , kDebugScript , " OC_sub178D2() " ) ;
2012-04-27 08:10:55 +02:00
int index = getValue1 ( ) ;
assert ( index < 40 ) ;
byte curByte = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2018-03-20 07:45:32 +01:00
if ( curByte = = _vm - > _characterBehaviour [ index ] )
2012-04-27 08:10:55 +02:00
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 ( ) {
2012-05-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " 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 ( ) {
2012-05-23 07:40:05 +02:00
debugC ( 1 , kDebugScript , " 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-27 10:45:43 +02:00
debugC ( 1 , kDebugScript , " OC_sub1790F() " ) ;
2012-04-26 00:21:44 +02:00
2012-05-27 10:45:43 +02:00
int16 index = getValue1 ( ) ;
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
2018-03-20 07:45:32 +01:00
if ( _vm - > _characterCarried [ index ] = = - 1 )
2012-04-26 00:21:44 +02:00
return 0 ;
2018-03-20 07:45:32 +01:00
_word16F00_characterId = _vm - > _characterCarried [ index ] ;
2012-04-26 00:21:44 +02:00
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 ( ) {
2012-05-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " 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-05-20 09:45:10 +02:00
byte LilliputScript : : OC_isCurrentCharacterActive ( ) {
debugC ( 1 , kDebugScript , " OC_isCurrentCharacterActive() " ) ;
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 ( ) {
2012-05-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " 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-29 22:54:02 +02:00
debugC ( 1 , kDebugScript , " OC_checkCharacterDirection() " ) ;
2012-04-28 18:52:15 +02:00
2012-05-29 22:54:02 +02:00
int16 index = getValue1 ( ) ;
byte expectedVal = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-04-28 18:52:15 +02:00
2012-05-29 22:54:02 +02:00
if ( _vm - > _characterDirectionArray [ index ] = = expectedVal )
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-05-18 19:24:03 +02:00
byte LilliputScript : : OC_checkLastInterfaceHotspotIndex ( ) {
2012-05-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " OC_checkLastInterfaceHotspotIndex() " ) ;
2012-04-11 18:23:17 +02:00
2012-05-20 09:45:10 +02:00
uint16 index = _currScript - > readUint16LE ( ) ;
2012-05-18 19:24:03 +02:00
int8 var2 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-04-11 18:23:17 +02:00
assert ( index < 20 ) ;
2012-05-18 19:24:03 +02:00
if ( _interfaceHotspotStatus [ index ] = = var2 )
2012-04-11 18:23:17 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-25 08:10:26 +02:00
2012-06-17 14:09:52 +02:00
byte LilliputScript : : OC_checkSelectedCharacter ( ) {
debugC ( 1 , kDebugScript , " OC_checkSelectedCharacter() " ) ;
2012-04-25 08:10:26 +02:00
2012-06-17 14:09:52 +02:00
if ( ( _vm - > _selectedCharacterId ! = - 1 ) | | ( _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-07-01 00:59:06 +02:00
byte LilliputScript : : OC_checkDelayedReactivation ( ) {
debugC ( 1 , kDebugScript , " OC_checkDelayedReactivation() " ) ;
2012-04-25 08:10:26 +02:00
2012-07-01 00:59:06 +02:00
if ( _vm - > _delayedReactivationAction | | ( _vm - > _selectedCharacterId = = - 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_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 ;
}
2012-06-03 13:25:40 +02:00
byte LilliputScript : : OC_checkFunctionKeyPressed ( ) {
debugC ( 1 , kDebugScript , " OC_checkFunctionKeyPressed() " ) ;
2012-04-28 18:52:15 +02:00
2012-06-03 11:57:07 +02:00
static const Common : : KeyCode specialKeys [ 10 ] = {
Common : : KEYCODE_F10 , Common : : KEYCODE_F1 , Common : : KEYCODE_F2 , Common : : KEYCODE_F3 , Common : : KEYCODE_F4 ,
Common : : KEYCODE_F5 , Common : : KEYCODE_F6 , Common : : KEYCODE_F7 , Common : : KEYCODE_F8 , Common : : KEYCODE_F9 } ;
2012-04-28 18:52:15 +02:00
2012-05-25 01:34:24 +02:00
int8 index = ( _currScript - > readUint16LE ( ) & 0xFF ) - 0x30 ;
2018-03-20 12:33:50 +01:00
2012-06-03 11:57:07 +02:00
if ( specialKeys [ index ] = = _vm - > _lastKeyPressed . kbd . keycode )
2012-04-28 18:52:15 +02:00
return 1 ;
2012-04-04 00:03:41 +02:00
return 0 ;
}
2012-04-25 08:10:26 +02:00
2012-06-23 10:47:10 +02:00
byte LilliputScript : : OC_checkCodeEntered ( ) {
debugC ( 1 , kDebugScript , " OC_checkCodeEntered() " ) ;
2012-04-25 08:10:26 +02:00
2012-06-23 10:47:10 +02:00
static const byte solutionArr [ 10 ] = { 11 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
2012-04-25 08:10:26 +02:00
2012-06-23 10:47:10 +02:00
if ( _vm - > _actionType = = kCodeEntered ) {
2012-05-29 22:54:02 +02:00
uint16 index = _currScript - > readUint16LE ( ) ;
2012-06-23 10:47:10 +02:00
if ( solutionArr [ index ] = = _vm - > _codeEntered [ 0 ] ) {
2012-04-25 08:10:26 +02:00
index = _currScript - > readUint16LE ( ) ;
2012-06-23 10:47:10 +02:00
if ( solutionArr [ index ] = = _vm - > _codeEntered [ 1 ] ) {
2012-04-25 08:10:26 +02:00
index = _currScript - > readUint16LE ( ) ;
2012-06-23 10:47:10 +02:00
if ( solutionArr [ index ] = = _vm - > _codeEntered [ 2 ] ) {
2012-04-25 08:10:26 +02:00
return 1 ;
}
2012-05-29 22:54:02 +02:00
} else
// skip last index check
_currScript - > seek ( _currScript - > pos ( ) + 2 ) ;
} else
// skip two last index checks
_currScript - > seek ( _currScript - > pos ( ) + 4 ) ;
} else
// skip the three index checks
_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 ;
2018-03-20 12:33:50 +01:00
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() " ) ;
2018-03-20 12:33:50 +01:00
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 ) ;
2018-03-20 12:33:50 +01:00
2012-05-01 03:29:56 +02:00
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-20 15:09:32 +02:00
void LilliputScript : : OC_startSpeech ( ) {
debugC ( 1 , kDebugScript , " OC_startSpeech() " ) ;
2012-04-15 01:40:41 +02:00
int curWord = _currScript - > readUint16LE ( ) ;
2012-04-28 16:24:47 +02:00
bool forceReturnFl = false ;
2012-05-20 15:09:32 +02:00
checkSpeechAllowed ( forceReturnFl ) ;
2012-04-28 16:24:47 +02:00
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-05-20 15:09:32 +02:00
startSpeech ( curWord ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-15 01:40:41 +02:00
2012-06-19 08:21:46 +02:00
void LilliputScript : : getSpeechVariant ( int speechIndex , int speechVariant ) {
2012-06-20 01:35:57 +02:00
debugC ( 2 , kDebugScript , " getSpeechVariant(%d, %d) " , speechIndex , speechVariant ) ;
2012-06-19 08:21:46 +02:00
// The packed strings are stored by variants, enclosed by imbricated brackets.
// So the different possibilities are:
// text
// [text1]text2
// [[text1]text2]text3
// etc etc
2012-04-28 16:24:47 +02:00
2018-03-20 12:33:50 +01:00
if ( speechIndex = = - 1 )
2012-04-28 16:24:47 +02:00
return ;
2012-06-19 08:21:46 +02:00
_currentSpeechId = speechIndex ;
int index = _vm - > _packedStringIndex [ speechIndex ] ;
2012-04-28 16:24:47 +02:00
2012-06-19 08:21:46 +02:00
// Skip the speech variant opening characters
2012-05-20 15:09:32 +02:00
while ( _vm - > _packedStrings [ index ] = = ' [ ' )
2012-04-28 16:24:47 +02:00
+ + index ;
2012-06-19 08:21:46 +02:00
for ( int i = 0 ; i < speechVariant ; i + + ) {
2012-05-20 15:09:32 +02:00
byte tmpVal = ' ' ;
2012-06-19 08:21:46 +02:00
// Skip a speech variant
2012-05-20 15:09:32 +02:00
while ( tmpVal ! = ' ] ' ) {
2012-05-09 08:07:58 +02:00
tmpVal = _vm - > _packedStrings [ index ] ;
2012-04-28 16:24:47 +02:00
+ + index ;
}
}
2018-03-20 12:33:50 +01:00
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-06-19 08:21:46 +02:00
void LilliputScript : : OC_getComputedVariantSpeech ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_getComputedVariantSpeech() " ) ;
2012-04-28 16:24:47 +02:00
2012-06-19 08:21:46 +02:00
int tmpVal1 = getCharacterVariablePtr ( ) [ 0 ] ;
int tmpVal2 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
int speechVariant = tmpVal1 / tmpVal2 ;
2018-03-20 12:33:50 +01:00
2012-06-19 08:21:46 +02:00
int speechIndex = _currScript - > readUint16LE ( ) ;
2012-04-28 16:24:47 +02:00
bool forceReturnFl = false ;
2012-05-20 15:09:32 +02:00
checkSpeechAllowed ( forceReturnFl ) ;
2012-04-28 16:24:47 +02:00
if ( forceReturnFl )
return ;
2012-05-11 23:32:26 +02:00
_talkingCharacter = _vm - > _currentScriptCharacter ;
2012-06-19 08:21:46 +02:00
getSpeechVariant ( speechIndex , speechVariant ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 16:24:47 +02:00
2012-06-19 08:21:46 +02:00
void LilliputScript : : OC_getRotatingVariantSpeech ( ) {
2012-06-20 01:35:57 +02:00
debugC ( 1 , kDebugScript , " OC_getRotatingVariantSpeech() " ) ;
2012-05-03 19:08:44 +02:00
int index = _currScript - > readUint16LE ( ) ;
2012-06-19 08:21:46 +02:00
int maxValue = getPackedStringStartRelativeIndex ( index ) ;
2018-03-20 12:33:50 +01:00
2012-06-19 08:21:46 +02:00
int currVariant = _currScript - > readUint16LE ( ) ;
int nextVariant = currVariant + 1 ;
if ( nextVariant > = maxValue )
nextVariant = 0 ;
2018-03-20 12:33:50 +01:00
_currScript - > writeUint16LE ( nextVariant , - 2 ) ;
2012-05-03 19:08:44 +02:00
bool forceReturnFl = false ;
2012-05-20 15:09:32 +02:00
checkSpeechAllowed ( forceReturnFl ) ;
2012-05-03 19:08:44 +02:00
if ( forceReturnFl )
return ;
2012-05-11 23:32:26 +02:00
_talkingCharacter = _vm - > _currentScriptCharacter ;
2012-05-03 19:08:44 +02:00
2012-06-19 08:21:46 +02:00
getSpeechVariant ( index , currVariant ) ;
2018-03-20 12:33:50 +01:00
2012-04-04 00:03:41 +02:00
}
2012-04-15 01:40:41 +02:00
2012-05-20 15:09:32 +02:00
void LilliputScript : : OC_startSpeechIfMute ( ) {
debugC ( 1 , kDebugScript , " OC_startSpeechIfMute() " ) ;
2012-05-03 19:08:44 +02:00
2012-05-11 23:32:26 +02:00
if ( _talkingCharacter = = - 1 ) {
2012-05-20 15:09:32 +02:00
OC_startSpeech ( ) ;
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-06-19 08:21:46 +02:00
void LilliputScript : : OC_getComputedVariantSpeechIfMute ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_getComputedVariantSpeechIfMute() " ) ;
2012-05-03 19:08:44 +02:00
2012-05-11 23:32:26 +02:00
if ( _talkingCharacter = = - 1 ) {
2012-06-19 08:21:46 +02:00
OC_getComputedVariantSpeech ( ) ;
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-29 22:54:02 +02:00
void LilliputScript : : OC_startSpeechIfSilent ( ) {
debugC ( 1 , kDebugScript , " OC_startSpeechIfSilent() " ) ;
2012-05-03 19:35:53 +02:00
2012-05-11 23:32:26 +02:00
if ( _talkingCharacter = = - 1 ) {
2012-06-19 08:21:46 +02:00
OC_getRotatingVariantSpeech ( ) ;
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-05-17 02:27:17 +02:00
void LilliputScript : : OC_ComputeCharacterVariable ( ) {
2012-05-19 14:25:30 +02:00
debugC ( 1 , kDebugScript , " OC_ComputeCharacterVariable() " ) ;
2012-04-08 12:54:56 +02:00
2012-05-01 14:35:19 +02:00
byte * bufPtr = getCharacterVariablePtr ( ) ;
2012-05-20 09:45:10 +02:00
uint16 oper = _currScript - > readUint16LE ( ) ;
2012-05-19 14:25:30 +02:00
int16 var3 = _currScript - > readSint16LE ( ) ;
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-19 14:25:30 +02:00
debugC ( 1 , kDebugScript , " OC_getRandom_type2() " ) ;
2012-04-27 22:59:48 +02:00
2012-05-19 14:25:30 +02:00
byte * bufPtr = getCharacterVariablePtr ( ) ;
2018-03-20 12:33:50 +01:00
int maxVal = _currScript - > readUint16LE ( ) ;
2012-04-27 22:59:48 +02:00
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-19 14:25:30 +02:00
debugC ( 1 , kDebugScript , " OC_setCharacterPosition() " ) ;
2018-03-20 12:33:50 +01:00
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 ( ) {
2012-05-18 17:06:58 +02:00
debugC ( 1 , kDebugScript , " 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
2018-03-20 07:45:32 +01:00
if ( characterIndex = = _vm - > _host )
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-05-31 08:29:02 +02:00
_vm - > _shouldQuit = true ;
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_sub17B93 ( ) {
2012-05-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " 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-06-19 08:21:46 +02:00
void LilliputScript : : OC_startSpeech5 ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_startSpeech5() " ) ;
2012-05-16 17:56:46 +02:00
bool forceReturnFl = false ;
2012-05-20 15:09:32 +02:00
checkSpeechAllowed ( forceReturnFl ) ;
2012-05-16 17:56:46 +02:00
if ( forceReturnFl )
return ;
_talkingCharacter = _vm - > _currentScriptCharacter ;
2012-05-20 15:09:32 +02:00
startSpeech ( 5 ) ;
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-06-23 18:01:01 +02:00
_vm - > _handleOpcodeReturnCode = 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-31 08:29:02 +02:00
_vm - > _shouldQuit = true ;
2012-04-04 00:03:41 +02:00
}
2012-05-03 19:35:53 +02:00
2012-06-23 18:01:01 +02:00
void LilliputScript : : OC_incScriptForVal ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_incScriptForVal() " ) ;
2012-04-28 09:08:11 +02:00
2012-06-23 18:01:01 +02:00
+ + _scriptForVal ;
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-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " OC_sub17BA5() " ) ;
2018-03-20 12:33:50 +01:00
2012-05-01 14:35:19 +02:00
byte * tmpArr = getCharacterVariablePtr ( ) ;
2012-05-20 09:45:10 +02:00
uint16 oper = _currScript - > readUint16LE ( ) ;
int16 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-18 17:06:58 +02:00
debugC ( 1 , kDebugScript , " OC_callScript() " ) ;
2012-04-12 00:54:12 +02:00
int index = _currScript - > readUint16LE ( ) ;
2012-06-23 18:01:01 +02:00
int charIndex = getValue1 ( ) ;
_vm - > setCurrentCharacter ( charIndex ) ;
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 ) {
2012-06-23 18:01:01 +02:00
_vm - > _handleOpcodeReturnCode = 0 ;
debugC ( 1 , kDebugScript , " ========================== 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-06-23 18:01:01 +02:00
debugC ( 1 , kDebugScript , " ========================== 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 ( ) ;
2012-05-18 16:48:49 +02:00
_vm - > setCurrentCharacter ( 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 ( ) {
2012-05-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " 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-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " 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-06-23 18:01:01 +02:00
void LilliputScript : : OC_initScriptFor ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_initScriptFor() " ) ;
2012-04-28 09:08:11 +02:00
2012-06-23 18:01:01 +02:00
_scriptForVal = 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-20 15:09:32 +02:00
debugC ( 1 , kDebugScript , " OC_sub17AE1() " ) ;
2012-04-12 20:53:38 +02:00
2012-05-24 21:11:00 +02:00
int8 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-20 15:09:32 +02:00
debugC ( 1 , kDebugScript , " OC_sub17AEE() " ) ;
2012-04-12 20:53:38 +02:00
2012-05-24 21:11:00 +02:00
int8 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-18 17:06:58 +02:00
debugC ( 1 , kDebugScript , " OC_setWord10804() " ) ;
2012-04-07 18:09:30 +02:00
2018-03-20 07:45:32 +01:00
_vm - > _host = 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-21 22:03:40 +02:00
debugC ( 1 , kDebugScript , " 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-21 22:03:40 +02:00
byte var2 = _vm - > _currentCharacterVariables [ 6 ] ;
2012-04-27 22:54:43 +02:00
byte * mapPtr = getMapPtr ( var1 ) ;
2012-05-21 22:03:40 +02:00
mapPtr [ var2 ] = _vm - > _currentCharacterVariables [ 7 ] ;
2012-05-01 14:35:19 +02:00
mapPtr [ 3 ] = _vm - > _currentCharacterVariables [ 8 ] ;
2012-04-27 22:54:43 +02:00
2012-05-21 22:03:40 +02:00
if ( var2 = = 0 ) {
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = true ;
2012-05-10 08:11:45 +02:00
_vm - > displayLandscape ( ) ;
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = false ;
2012-04-27 22:54:43 +02:00
}
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-28 23:51:53 +02:00
debugC ( 1 , kDebugScript , " OC_sub17C55() " ) ;
2012-05-03 19:35:53 +02:00
2012-05-28 23:51:53 +02:00
int8 var1 = ( getValue1 ( ) & 0xFF ) ;
2012-05-26 17:59:38 +02:00
int16 index = getValue1 ( ) ;
2012-04-27 22:59:48 +02:00
2012-05-28 23:51:53 +02:00
int8 var3 = ( _currScript - > readSint16LE ( ) & 0xFF ) ;
2012-05-26 17:59:38 +02:00
byte var4 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-04-27 22:59:48 +02:00
2012-05-26 17:59:38 +02:00
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
2018-03-20 07:45:32 +01:00
_vm - > _characterCarried [ index ] = var1 ;
2012-05-26 17:59:38 +02:00
_vm - > _rulesBuffer2_6 [ index ] = var3 ;
_vm - > _rulesBuffer2_7 [ index ] = var4 ;
warning ( " debug - OC_sub17C55 index %d, var1 0x%x var3 0x%x var4 0x%x " , index , var1 , var3 , var4 ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-19 14:25:30 +02:00
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17C76 ( ) {
2012-05-29 22:54:02 +02:00
debugC ( 1 , kDebugScript , " OC_sub17C76() " ) ;
2018-03-20 12:33:50 +01:00
2012-05-29 22:54:02 +02:00
int index = getValue1 ( ) ;
2018-03-20 07:45:32 +01:00
_vm - > _characterCarried [ index ] = - 1 ;
2012-05-29 22:54:02 +02:00
_vm - > _characterPositionAltitude [ index ] = 0 ;
_characterScriptEnabled [ index ] = 1 ;
2012-04-29 14:57:36 +02:00
2012-04-04 00:03:41 +02:00
}
2012-05-19 14:25:30 +02:00
void LilliputScript : : OC_setCurrentCharacter ( ) {
debugC ( 1 , kDebugScript , " OC_setCurrentCharacter() " ) ;
2012-06-23 18:01:01 +02:00
int index = getValue1 ( ) ;
_vm - > setCurrentCharacter ( index ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-28 10:13:03 +02:00
2012-06-22 00:50:29 +02:00
void LilliputScript : : sub171AF ( int16 var1 , byte var2h , byte characterId , int16 var4 ) {
debugC ( 2 , kDebugScript , " sub171AF(%d, %d, %d, %d) " , var1 , var2h , characterId , var4 ) ;
2012-04-28 10:13:03 +02:00
int index = 0 ;
for ( int i = 0 ; i < 10 ; i + + ) {
2012-05-20 17:53:09 +02:00
if ( _vm - > _array12861 [ index + 1 ] = = - 1 ) {
2012-04-28 10:13:03 +02:00
_vm - > _array12861 [ index + 1 ] = var1 ;
2012-06-22 00:50:29 +02:00
_vm - > _array12861 [ index + 2 ] = ( var2h < < 8 ) + characterId ;
2012-04-28 10:13:03 +02:00
_vm - > _array12861 [ index + 0 ] = _vm - > _word1289D + var4 ;
2012-05-24 21:11:00 +02:00
return ;
2012-04-28 10:13:03 +02:00
}
index + = 3 ;
}
}
2012-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub17C8B ( ) {
2012-05-26 11:07:15 +02:00
debugC ( 1 , kDebugScript , " OC_sub17C8B() " ) ;
2012-04-28 10:13:03 +02:00
2012-05-24 00:54:34 +02:00
int16 type = 2 < < 8 ;
int16 var4 = _currScript - > readSint16LE ( ) ;
2012-06-22 00:50:29 +02:00
byte var2h = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2018-03-20 12:33:50 +01:00
2012-06-22 00:50:29 +02:00
sub171AF ( type , var2h , _vm - > _currentScriptCharacter , 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-21 22:03:40 +02:00
debugC ( 1 , kDebugScript , " OC_sub17CA2() " ) ;
2012-04-28 10:13:03 +02:00
2012-05-24 00:54:34 +02:00
int16 type = 1 < < 8 ;
2012-05-21 22:03:40 +02:00
int16 var4 = _currScript - > readSint16LE ( ) ;
2012-06-22 00:50:29 +02:00
byte var2h = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2018-03-20 12:33:50 +01:00
2012-06-22 00:50:29 +02:00
sub171AF ( type , var2h , _vm - > _currentScriptCharacter , 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-06-22 00:50:29 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17CB9() " ) ;
2012-04-28 10:13:03 +02:00
2012-05-20 17:53:09 +02:00
int16 var4 = _currScript - > readSint16LE ( ) ;
2012-06-22 00:50:29 +02:00
int16 type = getValue1 ( ) ;
byte var2h = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2018-03-20 12:33:50 +01:00
2012-06-22 00:50:29 +02:00
sub171AF ( type , var2h , _vm - > _currentScriptCharacter , 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-25 01:34:24 +02:00
debugC ( 1 , kDebugScript , " OC_sub17CD1() " ) ;
2012-04-28 10:13:03 +02:00
2012-05-24 00:54:34 +02:00
int16 type = 3 < < 8 ;
int16 var4 = _currScript - > readSint16LE ( ) ;
2012-06-22 00:50:29 +02:00
byte var2h = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2018-03-20 12:33:50 +01:00
2012-06-22 00:50:29 +02:00
sub171AF ( type , var2h , _vm - > _currentScriptCharacter , 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-06-23 10:47:10 +02:00
debugC ( 1 , kDebugScript , " OC_resetWord16EFE() " ) ;
2012-04-28 09:08:11 +02:00
2012-06-23 10:47:10 +02:00
_vm - > _word16EFEh = - 1 ;
_vm - > _word16EFEl_characterId = - 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-27 08:10:55 +02:00
2012-05-18 16:48:49 +02:00
void LilliputScript : : OC_enableCurrentCharacterScript ( ) {
2012-05-26 02:06:12 +02:00
debugC ( 1 , kDebugScript , " OC_enableCurrentCharacterScript() " ) ;
2012-04-25 23:51:45 +02:00
2012-05-26 02:06:12 +02:00
uint8 var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-18 16:48:49 +02:00
enableCharacterScript ( _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 ( ) {
2012-05-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " 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-21 22:03:40 +02:00
debugC ( 1 , kDebugScript , " OC_sub17D23() " ) ;
2012-04-29 14:57:36 +02:00
2012-05-21 22:03:40 +02:00
uint16 oper = _currScript - > readUint16LE ( ) ;
Common : : Point var1 = getPosFromScript ( ) ;
2012-05-01 14:35:19 +02:00
byte * buf = _vm - > _currentCharacterVariables + 4 ;
2012-05-21 22:03:40 +02:00
computeOperation ( buf , oper , var1 . x ) ;
computeOperation ( buf + 1 , oper , var1 . 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() " ) ;
2018-03-20 12:33:50 +01:00
2012-05-26 17:59:38 +02:00
uint16 var1 = _currScript - > readUint16LE ( ) ;
2018-03-20 07:45:32 +01:00
_vm - > _characterBehaviour [ _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-21 07:51:05 +02:00
debugC ( 2 , kDebugScript , " OC_changeCurrentCharacterSprite() " ) ;
2012-04-29 14:57:36 +02:00
2012-05-21 07:51:05 +02:00
int16 var1 = _currScript - > readSint16LE ( ) ;
byte var2 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
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
2012-05-18 19:24:03 +02:00
byte * LilliputScript : : getCurrentCharacterVarFromScript ( ) {
debugC ( 2 , kDebugScript , " getCurrentCharacterVarFromScript() " ) ;
2012-04-28 09:08:11 +02:00
2018-03-20 12:33:50 +01: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-18 19:24:03 +02:00
debugC ( 1 , kDebugScript , " OC_sub17E99() " ) ;
2012-04-28 09:08:11 +02:00
2012-05-18 19:24:03 +02:00
byte * compBuf = getCurrentCharacterVarFromScript ( ) ;
2012-05-20 09:45:10 +02:00
uint16 oper = _currScript - > readUint16LE ( ) ;
2018-03-20 12:33:50 +01:00
int index = _currScript - > readUint16LE ( ) ;
2012-04-28 09:08:11 +02:00
2012-05-18 19:24:03 +02:00
byte * buf = getCurrentCharacterVarFromScript ( ) ;
2012-04-28 09:08:11 +02:00
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-16 17:56:46 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub17EC5() " ) ;
2012-04-29 14:57:36 +02:00
2012-05-16 17:56:46 +02:00
int indexChunk10 = _currScript - > readUint16LE ( ) ;
2012-05-18 19:24:03 +02:00
byte * compBuf = getCurrentCharacterVarFromScript ( ) ;
2012-05-16 17:56:46 +02:00
int indexChunk11 = _vm - > _rulesChunk10 [ indexChunk10 ] + compBuf [ 0 ] ;
2012-04-29 14:57:36 +02:00
2012-05-20 09:45:10 +02:00
uint16 oper = _currScript - > readUint16LE ( ) ;
2012-05-16 17:56:46 +02:00
2012-05-18 19:24:03 +02:00
byte * tmpBuf = getCurrentCharacterVarFromScript ( ) ;
2012-05-20 09:45:10 +02:00
int16 var3 = tmpBuf [ 0 ] ;
2018-03-20 12:33:50 +01:00
2012-05-16 17:56:46 +02:00
computeOperation ( & _vm - > _rulesChunk11 [ indexChunk11 ] , 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-25 01:34:24 +02:00
debugC ( 2 , kDebugScript , " getCharacterTilePos(%d) " , index ) ;
2012-05-06 22:32:23 +02:00
2012-05-25 01:34:24 +02:00
return Common : : Point ( _vm - > _characterPositionX [ index ] / 8 , _vm - > _characterPositionY [ index ] / 8 ) ;
2012-04-29 14:57:36 +02:00
}
2012-05-06 22:32:23 +02:00
void LilliputScript : : OC_setCharacterDirectionTowardsPos ( ) {
2012-05-26 02:06:12 +02:00
debugC ( 1 , kDebugScript , " 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 ) ;
2012-05-26 02:06:12 +02:00
_vm - > _characterDirectionArray [ _vm - > _currentScriptCharacter ] = _vm - > getDirection ( tilePos , pos1 ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-01 00:18:26 +02:00
2012-05-26 10:41:13 +02:00
void LilliputScript : : OC_turnCharacterTowardsAnother ( ) {
debugC ( 1 , kDebugScript , " OC_turnCharacterTowardsAnother() " ) ;
2018-03-20 12:33:50 +01: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-26 10:41:13 +02:00
int dx = _vm - > _characterPositionX [ index ] - _vm - > _characterPositionX [ _vm - > _currentScriptCharacter ] ;
int dy = _vm - > _characterPositionY [ index ] - _vm - > _characterPositionY [ _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 ;
2018-03-20 12:33:50 +01:00
}
2012-04-29 14:57:36 +02:00
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-26 15:40:09 +02:00
debugC ( 1 , kDebugScript , " OC_sub17F4F() " ) ;
2012-05-05 21:34:58 +02:00
2012-05-26 15:40:09 +02:00
int16 var = getValue1 ( ) ;
_array10A39 [ _vm - > _currentScriptCharacter ] = ( byte ) ( var & 0xFF ) ;
warning ( " debug - OC_sub17F4F: _array10A39[%d] = %d " , _vm - > _currentScriptCharacter , var ) ;
2012-05-06 22:32:23 +02:00
_vm - > _array109E9PosX [ _vm - > _currentScriptCharacter ] = - 1 ;
2012-04-04 00:03:41 +02:00
}
2012-04-30 17:57:23 +02:00
2012-05-25 01:34:24 +02:00
void LilliputScript : : OC_scrollAwayFromCharacter ( ) {
debugC ( 1 , kDebugScript , " OC_scrollAwayFromCharacter() " ) ;
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-25 01:34:24 +02:00
static const char speedX [ ] = { - 1 , - 3 , - 3 , - 6 } ;
static const char speedY [ ] = { - 3 , - 6 , - 1 , - 3 } ;
2018-03-20 12:33:50 +01:00
2012-05-25 01:34:24 +02:00
int cx = speedX [ _vm - > _characterDirectionArray [ _vm - > _currentScriptCharacter ] ] ;
int cy = speedY [ _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 ;
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = true ;
2012-05-05 21:34:58 +02:00
_vm - > viewportScrollTo ( Common : : Point ( newPosX , newPosY ) ) ;
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = false ;
2012-05-01 00:14:57 +02:00
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-05-28 23:51:53 +02:00
void LilliputScript : : OC_setCurrentCharacterVar6 ( ) {
debugC ( 1 , kDebugScript , " OC_setCurrentCharacterVar6() " ) ;
2018-03-20 12:33:50 +01:00
2012-05-28 23:51:53 +02:00
uint16 var1 = ( uint16 ) getValue1 ( ) ;
warning ( " debug - OC_setCurrentCharacterVar6 %d " , var1 ) ;
2012-05-01 14:35:19 +02:00
_vm - > _currentCharacterVariables [ 6 ] = var1 & 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_sub17FDD ( ) {
2012-05-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " OC_sub17FDD() " ) ;
2012-04-12 00:54:12 +02:00
int index = _currScript - > readUint16LE ( ) ;
2018-03-20 12:33:50 +01:00
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-05-29 22:54:02 +02:00
void LilliputScript : : OC_setCharacterScriptEnabled ( ) {
debugC ( 1 , kDebugScript , " OC_setCharacterScriptEnabled() " ) ;
2012-05-16 20:44:47 +02:00
2012-05-29 22:54:02 +02:00
int16 index = getValue1 ( ) ;
_characterScriptEnabled [ index ] = 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 ( ) {
2012-05-19 14:25:30 +02:00
debugC ( 1 , kDebugScript , " 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 ( ) {
2012-05-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " 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-05-26 02:06:12 +02:00
void LilliputScript : : OC_setCharacterProperties ( ) {
debugC ( 1 , kDebugScript , " OC_setCharacterProperties() " ) ;
2012-05-01 00:14:57 +02:00
2012-05-26 02:06:12 +02:00
int16 index = getValue1 ( ) ;
2012-05-01 00:14:57 +02:00
2012-05-26 02:06:12 +02:00
int16 x = _vm - > _characterPositionX [ index ] & 0xFFF8 ;
x + = _currScript - > readSint16LE ( ) ;
_vm - > _characterPositionX [ index ] = x ;
2012-05-01 00:14:57 +02:00
2012-05-26 02:06:12 +02:00
int16 y = _vm - > _characterPositionY [ index ] & 0xFFF8 ;
y + = _currScript - > readSint16LE ( ) ;
_vm - > _characterPositionY [ index ] = y ;
2012-05-01 00:14:57 +02:00
2012-05-26 02:06:12 +02:00
_vm - > _characterPositionAltitude [ index ] = ( int8 ) ( _currScript - > readUint16LE ( ) & 0xFF ) ;
_vm - > _characterDirectionArray [ index ] = _currScript - > readUint16LE ( ) & 0xFF ;
2012-04-04 00:03:41 +02:00
}
2012-05-16 20:44:47 +02:00
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-20 15:09:32 +02:00
debugC ( 1 , kDebugScript , " 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-05-18 19:24:03 +02:00
void LilliputScript : : OC_setInterfaceHotspot ( ) {
debugC ( 1 , kDebugScript , " OC_setInterfaceHotspot() " ) ;
2012-04-07 18:09:30 +02:00
2012-05-18 19:24:03 +02:00
int16 index = _currScript - > readSint16LE ( ) ;
assert ( ( index > = 0 ) & & ( index < 20 ) ) ;
2012-05-24 20:12:21 +02:00
uint16 curWord = _currScript - > readUint16LE ( ) ;
2012-05-18 19:24:03 +02:00
_interfaceHotspotStatus [ index ] = ( curWord & 0xFF ) ;
2012-07-01 01:58:15 +02:00
_interfaceButtonActivationDelay [ index ] = ( curWord > > 8 ) ;
2012-04-07 18:09:30 +02:00
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-06-17 14:44:30 +02:00
void LilliputScript : : OC_scrollViewPort ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_scrollViewPort() " ) ;
2012-05-11 20:47:17 +02:00
_viewportCharacterTarget = - 1 ;
2012-05-01 00:14:57 +02:00
2012-06-17 14:44:30 +02:00
int direction = _currScript - > readUint16LE ( ) ;
2018-03-20 12:33:50 +01:00
2012-06-17 14:44:30 +02:00
static const char scrollValX [ ] = { 6 , 0 , 0 , - 6 } ;
static const char scrollValY [ ] = { 0 , - 6 , 6 , 0 } ;
2018-03-20 12:33:50 +01:00
2012-06-17 14:44:30 +02:00
int x = _viewportPos . x + scrollValX [ direction ] ;
int y = _viewportPos . y + scrollValY [ direction ] ;
2012-05-01 00:14:57 +02:00
2018-03-19 23:29:47 +01:00
x = CLIP ( x , 0 , 56 ) ;
y = CLIP ( y , 0 , 56 ) ;
2012-05-01 00:14:57 +02:00
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = true ;
2012-05-05 21:34:58 +02:00
_vm - > viewportScrollTo ( Common : : Point ( x , y ) ) ;
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = false ;
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-22 22:12:09 +02:00
debugC ( 1 , kDebugScript , " OC_sub1817F() " ) ;
2012-04-26 01:42:48 +02:00
2012-05-26 02:06:12 +02:00
int8 x = ( int8 ) ( _currScript - > readUint16LE ( ) & 0xFF ) ;
int8 y = ( int8 ) ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-22 22:12:09 +02:00
sub1818B ( Common : : Point ( x , y ) ) ;
2012-04-26 01:42:48 +02:00
}
2012-05-22 22:12:09 +02:00
void LilliputScript : : sub1818B ( Common : : Point point ) {
2012-05-26 02:06:12 +02:00
debugC ( 2 , kDebugScript , " sub1818B(%d - %d) " , point . x , point . y ) ;
2012-05-22 22:12:09 +02:00
Common : : Point pos = point ;
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-04-04 00:03:41 +02:00
void LilliputScript : : OC_sub181BB ( ) {
2012-05-26 02:06:12 +02:00
debugC ( 1 , kDebugScript , " OC_sub181BB() " ) ;
2018-03-20 12:33:50 +01:00
2012-05-26 02:06:12 +02:00
int8 x = ( int8 ) ( _currScript - > readUint16LE ( ) & 0xFF ) ;
byte oper = _currScript - > readUint16LE ( ) & 0xFF ;
uint16 index = _currScript - > readUint16LE ( ) ;
2012-05-22 22:12:09 +02:00
int16 c = _vm - > _currentCharacterVariables [ index ] ;
2012-04-26 01:42:48 +02:00
2012-05-22 22:12:09 +02:00
switch ( oper ) {
case ' - ' :
2012-04-26 01:42:48 +02:00
c = - 1 - c ;
2012-05-22 22:12:09 +02:00
break ;
case ' > ' :
c - = 128 ;
2018-03-20 12:33:50 +01:00
if ( c < 0 )
2012-04-26 01:42:48 +02:00
c = 0 ;
2012-05-22 22:12:09 +02:00
c * = 2 ;
break ;
case ' < ' :
c = - 1 - c - 128 ;
2012-05-16 20:58:41 +02:00
if ( c < 0 )
2012-04-26 01:42:48 +02:00
c = 0 ;
2012-05-22 22:12:09 +02:00
c * = 2 ;
break ;
2012-05-26 02:06:12 +02:00
case ' + ' :
break ;
2012-05-22 22:12:09 +02:00
default :
2012-05-26 02:06:12 +02:00
warning ( " OC_sub181BB: skipped oper %c " , oper ) ;
2012-05-22 22:12:09 +02:00
break ;
2012-04-26 01:42:48 +02:00
}
2012-05-26 02:06:12 +02:00
if ( c > 0xFF )
warning ( " OC_sub181BB- Abnormal value c = %d, should put back c &= 0xFF; " , c ) ;
2012-05-22 22:12:09 +02:00
int y = ( _currScript - > readSint16LE ( ) * c ) + c ;
y > > = 8 ;
sub1818B ( Common : : Point ( x , y ) ) ;
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-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " OC_sub18213() " ) ;
2012-04-26 01:42:48 +02:00
2012-05-20 09:45:10 +02:00
uint16 var1 = _currScript - > readUint16LE ( ) ;
2012-04-26 01:42:48 +02:00
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-18 16:48:49 +02:00
enableCharacterScript ( _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-29 22:54:02 +02:00
debugC ( 1 , kDebugScript , " OC_sub18252() " ) ;
2012-04-29 11:48:10 +02:00
2012-05-29 22:54:02 +02:00
int16 index = getValue1 ( ) ;
assert ( ( index > 0 ) & & ( index < 40 ) ) ;
2012-04-29 11:48:10 +02:00
_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-06-15 23:34:17 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18260() " ) ;
2018-03-20 12:33:50 +01:00
2012-06-15 23:34:17 +02:00
int index = getValue1 ( ) ;
Common : : Point var4 = getPosFromScript ( ) ;
Common : : Point pt = var4 + _viewportPos ;
byte * isoMapBuf = getMapPtr ( pt ) ;
if ( isoMapBuf [ 1 ] ! = 0xFF ) {
2018-03-20 12:33:50 +01:00
int minVal = INT_MAX ;
2012-06-15 23:34:17 +02:00
for ( int var2 = 7 ; var2 > = 0 ; var2 - - ) {
for ( int var3 = 7 ; var3 > = 0 ; var3 - - ) {
Common : : Point ( _viewportPos . x + var2 , _viewportPos . y + var3 ) ;
isoMapBuf = getMapPtr ( pt ) ;
if ( isoMapBuf [ 1 ] = = 0xFF ) {
int x = abs ( var2 - var4 . x ) ;
int y = abs ( var3 - var4 . y ) ;
2012-07-01 18:16:56 +02:00
if ( x + y < minVal ) {
minVal = x + y ;
2012-06-15 23:34:17 +02:00
_word1825E = Common : : Point ( var2 , var3 ) ;
}
}
}
}
var4 = _word1825E ;
}
_vm - > _characterPositionX [ index ] = ( var4 . x + _viewportPos . x ) * 8 ;
_vm - > _characterPositionY [ index ] = ( var4 . y + _viewportPos . y ) * 8 ;
2012-04-04 00:03:41 +02:00
}
2012-04-29 11:48:10 +02:00
2012-05-17 02:27:17 +02:00
void LilliputScript : : OC_CharacterVariableAddOrRemoveFlag ( ) {
2012-05-21 07:51:05 +02:00
debugC ( 1 , kDebugScript , " OC_CharacterVariableAddOrRemoveFlag() " ) ;
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 )
2012-05-17 02:27:17 +02:00
tmpArr [ 0 ] & = ~ var1 ;
2012-04-29 11:48:10 +02:00
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-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = true ;
2012-04-29 10:04:15 +02:00
_vm - > paletteFadeOut ( ) ;
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = false ;
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-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = true ;
2012-04-29 10:04:15 +02:00
_vm - > paletteFadeIn ( ) ;
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = false ;
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-05-20 09:45:10 +02:00
void LilliputScript : : OC_setCurrentCharacterVar3 ( ) {
debugC ( 1 , kDebugScript , " OC_setCurrentCharacterVar3() " ) ;
2012-04-11 18:23:17 +02:00
2012-05-20 09:45:10 +02:00
byte var1 = _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-20 09:45:10 +02:00
_vm - > _currentCharacterVariables [ 3 ] = var1 ;
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-20 09:45:10 +02:00
debugC ( 1 , kDebugScript , " OC_setArray122C1() " ) ;
2012-04-25 23:51:45 +02:00
2012-05-20 09:45:10 +02:00
byte var1 = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
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-05-18 16:48:49 +02:00
void LilliputScript : : OC_enableCharacterScript ( ) {
debugC ( 1 , kDebugScript , " OC_enableCharacterScript() " ) ;
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 ;
2018-03-20 12:33:50 +01:00
2012-05-18 16:48:49 +02:00
enableCharacterScript ( index , var2 , _vm - > getCharacterVariablesPtr ( index * 32 ) ) ;
2012-04-04 00:03:41 +02:00
}
2012-04-08 12:54:56 +02:00
2012-07-01 18:16:56 +02:00
void LilliputScript : : OC_setRulesBuffer2Element ( ) {
debugC ( 1 , kDebugScript , " OC_setRulesBuffer2Element() " ) ;
2012-04-29 11:48:10 +02:00
int index = getValue1 ( ) ;
byte var1 = _currScript - > readUint16LE ( ) & 0xFF ;
2012-07-01 18:16:56 +02:00
assert ( ( index > = 0 ) & & ( index < 40 ) ) ;
2012-04-29 11:48:10 +02:00
_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-06-01 08:18:33 +02:00
void LilliputScript : : OC_waitForEvent ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_waitForEvent() " ) ;
_vm - > _refreshScreenFlag = true ;
while ( true ) {
if ( _vm - > _keyboard_checkKeyboard ( ) ) {
_vm - > _keyboard_getch ( ) ;
break ; ;
}
2012-06-01 23:57:25 +02:00
if ( _vm - > _mouseButton = = 1 )
2012-06-01 08:18:33 +02:00
break ;
_vm - > update ( ) ;
}
_vm - > _mouseButton = 0 ;
_vm - > _refreshScreenFlag = false ;
2012-04-04 00:03:41 +02:00
}
2012-05-18 16:48:49 +02:00
2012-05-18 19:24:03 +02:00
void LilliputScript : : OC_disableInterfaceHotspot ( ) {
2012-05-29 22:54:02 +02:00
debugC ( 1 , kDebugScript , " OC_disableInterfaceHotspot() " ) ;
2012-05-18 19:24:03 +02:00
2012-05-18 16:48:49 +02:00
int index = _currScript - > readUint16LE ( ) ;
2012-07-01 01:58:15 +02:00
_interfaceButtonActivationDelay [ index ] = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
2012-05-18 19:24:03 +02:00
_interfaceHotspotStatus [ index ] = kHotspotDisabled ;
2012-05-15 01:37:00 +02:00
_vm - > displayInterfaceHotspots ( ) ;
2012-04-04 00:03:41 +02:00
}
2012-05-01 00:18:26 +02:00
2012-06-20 01:35:57 +02:00
void LilliputScript : : OC_loadFileAerial ( ) {
debugC ( 1 , kDebugScript , " OC_loadFileAerial() " ) ;
2012-06-17 11:55:06 +02:00
// Unused variable, and the script position is restored afterwards
// TODO: Check if this part of the code is present in Rome, else remove it
// int var1 = _currScript->readUint16LE() & 0xFF;
// byte _byte15EAD = var1;
2012-04-26 00:42:30 +02:00
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = true ;
2012-05-11 23:32:26 +02:00
_talkingCharacter = - 1 ;
2012-04-26 00:42:30 +02:00
OC_PaletteFadeOut ( ) ;
2012-07-02 00:27:38 +02:00
_vm - > _displayGreenHand = true ;
2012-04-26 00:42:30 +02:00
_vm - > displayVGAFile ( " AERIAL.GFX " ) ;
OC_PaletteFadeIn ( ) ;
_vm - > displayCharactersOnMap ( ) ;
2012-06-01 08:18:33 +02:00
_vm - > _displayMap = true ;
_vm - > _keyboard_resetKeyboardBuffer ( ) ;
2012-04-26 00:42:30 +02:00
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = false ;
2012-04-04 00:03:41 +02:00
}
2012-04-26 00:42:30 +02:00
2012-06-19 08:21:46 +02:00
void LilliputScript : : OC_startSpeechIfSoundOff ( ) {
debugC ( 1 , kDebugScriptTBC , " OC_startSpeechIfSoundOff() " ) ;
2012-06-15 23:47:09 +02:00
2018-03-20 12:33:50 +01:00
// HACK: In the original, OC_startSpeechIfSoundOff() only calls
2012-06-15 23:47:09 +02:00
// OC_startSpeech if sound is off. For the moment, it's always called
OC_startSpeech ( ) ;
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 08:05:20 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub1844A() " ) ;
2018-03-20 12:33:50 +01:00
2012-05-15 01:37:00 +02:00
int var1 = getValue1 ( ) ;
int var2 = _currScript - > readUint16LE ( ) ;
_vm - > _rulesBuffer2_11 [ var1 ] = ( var2 & 0xFF ) ;
for ( int i = 0 ; i < 40 ; i + + ) {
2018-03-20 07:45:32 +01:00
_interactions [ 40 * var1 + i ] = 0 ;
_interactions [ var1 + 40 * i ] = 0 ;
2012-05-15 01:37:00 +02:00
}
2012-04-04 00:03:41 +02:00
}
2012-04-17 23:48:11 +02:00
2012-05-17 20:35:20 +02:00
void LilliputScript : : OC_displayNumericCharacterVariable ( ) {
debugC ( 1 , kDebugScript , " OC_displayNumericCharacterVariable() " ) ;
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-05-17 20:35:20 +02:00
int displayVal = tmpVal / ( curWord & 0xFF ) ;
int posX = _currScript - > readSint16LE ( ) ;
int posY = _currScript - > readSint16LE ( ) ;
2012-04-07 18:09:30 +02:00
2012-06-01 08:18:33 +02:00
if ( ! _vm - > _displayMap ) {
2012-05-17 20:35:20 +02:00
displayNumber ( displayVal , Common : : Point ( posX , posY ) ) ;
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-05-16 20:44:47 +02:00
void LilliputScript : : displayNumber ( byte var1 , Common : : Point pos ) {
2012-05-17 20:35:20 +02:00
debugC ( 1 , kDebugScript , " displayNumber(%d, %d - %d) " , var1 , pos . x , pos . y ) ;
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-05-18 16:48:49 +02:00
_vm - > numberToString ( var1 ) ;
2012-05-16 20:44:47 +02:00
_vm - > displayString ( _vm - > _displayStringBuf , pos ) ;
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-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = true ;
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-05-29 22:54:02 +02:00
void LilliputScript : : OC_startSpeechWithoutSpeeker ( ) {
debugC ( 1 , kDebugScript , " OC_startSpeechWithoutSpeeker() " ) ;
int16 speechId = _currScript - > readUint16LE ( ) ;
startSpeech ( speechId ) ;
2012-04-04 00:03:41 +02:00
}
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
2012-06-01 08:18:33 +02:00
_vm - > _keyboard_resetKeyboardBuffer ( ) ;
2012-04-10 00:57:59 +02:00
_vm - > _mouseButton = 0 ;
2012-06-03 11:57:07 +02:00
_vm - > _lastKeyPressed = Common : : Event ( ) ;
2012-04-06 08:15:22 +02:00
2012-05-16 20:58:41 +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-05-31 08:29:02 +02:00
_vm - > pollEvent ( ) ;
2012-06-01 08:18:33 +02:00
if ( _vm - > _keyboard_checkKeyboard ( ) ) {
2012-06-03 11:57:07 +02:00
Common : : Event event = _vm - > _keyboard_getch ( ) ;
_vm - > _lastKeyPressed = event ;
if ( event . type = = Common : : EVENT_KEYDOWN )
_vm - > _keyboard_getch ( ) ;
2012-04-06 08:15:22 +02:00
break ;
}
2018-03-20 12:33:50 +01:00
2012-06-01 23:57:25 +02:00
if ( _vm - > _mouseButton = = 1 )
2012-04-06 08:15:22 +02:00
break ;
2018-03-20 12:33:50 +01:00
2012-04-06 08:15:22 +02:00
if ( ( _vm - > _byte184F4 ! = 0 ) & & ( _vm - > _sound_byte16F06 = = 0 ) )
break ;
2018-03-18 21:27:50 +01:00
_vm - > _system - > delayMillis ( 1 ) ;
2012-04-06 08:15:22 +02:00
}
2018-03-20 12:33:50 +01:00
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-05-17 20:35:20 +02:00
void LilliputScript : : OC_initGameAreaDisplay ( ) {
debugC ( 1 , kDebugScript , " OC_initGameAreaDisplay() " ) ;
2012-04-07 18:09:30 +02:00
2012-04-22 23:07:09 +02:00
OC_PaletteFadeOut ( ) ;
2012-06-01 08:18:33 +02:00
_vm - > _displayMap = false ;
2012-04-25 23:51:45 +02:00
_heroismLevel = 0 ;
2012-05-18 19:24:03 +02:00
_vm - > unselectInterfaceHotspots ( ) ;
2012-04-16 23:16:01 +02:00
2012-05-17 11:59:54 +02:00
_vm - > initGameAreaDisplay ( ) ;
2012-04-16 23:16:01 +02:00
2012-04-22 23:07:09 +02:00
OC_PaletteFadeIn ( ) ;
2012-05-22 22:12:09 +02:00
_vm - > _refreshScreenFlag = false ;
2018-03-20 12:33:50 +01:00
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-05-23 07:40:05 +02:00
void LilliputScript : : OC_displayCharacterStatBar ( ) {
2012-05-23 07:57:16 +02:00
debugC ( 1 , kDebugScript , " OC_displayCharacterStatBar() " ) ;
2012-05-03 19:08:44 +02:00
byte * tmpArr = getCharacterVariablePtr ( ) ;
2012-05-23 07:57:16 +02:00
int8 type = ( _currScript - > readUint16LE ( ) & 0xFF ) ;
int8 score = ( ( ( 70 * tmpArr [ 0 ] ) / ( _currScript - > readUint16LE ( ) & 0xFF ) ) & 0xFF ) ;
int16 posX = _currScript - > readSint16LE ( ) ;
int16 posY = _currScript - > readSint16LE ( ) ;
2018-03-20 12:33:50 +01:00
2012-05-23 07:57:16 +02:00
_vm - > displayCharacterStatBar ( type , posX , score , posY ) ;
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-05-18 16:48:49 +02:00
void LilliputScript : : OC_setCharacterHeroismBar ( ) {
debugC ( 1 , kDebugScript , " OC_setCharacterHeroismBar() " ) ;
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 ( ) {
2012-05-18 16:48:49 +02:00
debugC ( 1 , kDebugScriptTBC , " OC_sub18690() " ) ;
int index = getValue1 ( ) ;
Common : : Point pos = getPosFromScript ( ) ;
_vm - > _rulesBuffer2_13_posX [ index ] = pos . x ;
_vm - > _rulesBuffer2_14_posY [ index ] = pos . y ;
2012-04-04 00:03:41 +02:00
}
2012-04-17 23:48:11 +02:00
2012-04-30 17:57:23 +02:00
void LilliputScript : : OC_setViewPortCharacterTarget ( ) {
2012-05-19 14:25:30 +02:00
debugC ( 1 , kDebugScript , " 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 ( ) ;
2012-05-17 11:59:54 +02:00
int posX = _currScript - > readUint16LE ( ) ;
int posY = _currScript - > readUint16LE ( ) ;
Common : : Point pos = Common : : Point ( posX , posY ) ;
2012-05-15 01:37:00 +02:00
2012-05-17 11:59:54 +02:00
_vm - > fill16x16Rect ( 16 , pos ) ;
2012-05-15 01:37:00 +02:00
int frame = _vm - > _characterFrameArray [ var1 ] ;
byte * buf = _vm - > _bufferMen ;
if ( frame > 0xF0 ) {
buf = _vm - > _bufferMen2 ;
frame - = 0xF0 ;
}
2012-05-17 11:59:54 +02:00
_vm - > display16x16IndexedBuf ( buf , frame , pos ) ;
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-20 15:09:32 +02:00
debugC ( 1 , kDebugScript , " 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 ) ;
2018-03-20 12:33:50 +01:00
2012-06-20 07:49:21 +02:00
_vm - > _soundHandler - > contentFct2 ( var1 , _viewportPos , Common : : Point ( _characterTilePosX [ index ] , _characterTilePosY [ 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-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " 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-20 15:09:32 +02:00
debugC ( 1 , kDebugScript , " OC_sub18725_snd() " ) ;
2012-04-09 11:30:58 +02:00
2012-05-30 08:19:53 +02:00
Common : : Point var4 = Common : : Point ( - 1 , getValue1 ( ) & 0xFF ) ;
2012-04-20 19:43:31 +02:00
2012-05-30 08:19:53 +02:00
_vm - > _soundHandler - > contentFct3 ( 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_sub18733_snd ( ) {
2012-05-30 08:19:53 +02:00
debugC ( 1 , kDebugScript , " 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
2012-05-30 08:19:53 +02:00
_vm - > _soundHandler - > contentFct3 ( 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_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-18 16:48:49 +02:00
debugC ( 1 , kDebugScript , " 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-06-20 07:49:21 +02:00
void LilliputScript : : OC_setCharacterMapColor ( ) {
debugC ( 1 , kDebugScript , " OC_setCharacterMapColor() " ) ;
2012-04-09 11:30:58 +02:00
2012-06-20 07:49:21 +02:00
byte index = ( getValue1 ( ) & 0xFF ) ;
int color = _currScript - > readUint16LE ( ) ;
2012-04-09 11:30:58 +02:00
assert ( index < 40 ) ;
2012-06-20 07:49:21 +02:00
_characterMapPixelColor [ index ] = ( color & 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