2005-01-09 16:06:29 +00:00
|
|
|
/* ScummVM - Scumm Interpreter
|
|
|
|
* Copyright (C) 2004-2005 The ScummVM project
|
2004-10-15 06:06:47 +00:00
|
|
|
*
|
|
|
|
* 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
|
2005-10-18 01:30:26 +00:00
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2004-10-15 06:06:47 +00:00
|
|
|
*
|
|
|
|
* $Header$
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2005-06-24 15:23:51 +00:00
|
|
|
#include "common/stdafx.h"
|
2005-06-24 16:01:42 +00:00
|
|
|
#include "kyra/kyra.h"
|
|
|
|
#include "kyra/script.h"
|
2005-10-29 18:37:40 +00:00
|
|
|
#include "kyra/screen.h"
|
|
|
|
#include "kyra/sprites.h"
|
|
|
|
#include "common/system.h"
|
2004-10-15 06:06:47 +00:00
|
|
|
|
|
|
|
namespace Kyra {
|
2004-11-14 20:11:22 +00:00
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_jmpTo() {
|
|
|
|
_curScript->ip = _curScript->dataPtr->data + (_parameter << 1);
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_setRetValue() {
|
|
|
|
_curScript->retValue = _parameter;
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_pushRetOrPos() {
|
|
|
|
switch (_parameter) {
|
|
|
|
case 0:
|
|
|
|
_curScript->stack[--_curScript->sp] = _curScript->retValue;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
_curScript->stack[--_curScript->sp] = (_curScript->ip - _curScript->dataPtr->data) / 2 + 1;
|
|
|
|
_curScript->stack[--_curScript->sp] = _curScript->bp;
|
|
|
|
_curScript->bp = _curScript->sp + 2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
_continue = false;
|
|
|
|
_curScript->ip = 0;
|
|
|
|
break;
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_push() {
|
|
|
|
_curScript->stack[--_curScript->sp] = _parameter;
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_pushVar() {
|
|
|
|
_curScript->stack[--_curScript->sp] = _curScript->variables[_parameter];
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_pushBPNeg() {
|
2005-10-16 10:29:10 +00:00
|
|
|
_curScript->stack[--_curScript->sp] = _curScript->stack[(-(int32)(_parameter + 2)) + _curScript->bp];
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_pushBPAdd() {
|
|
|
|
_curScript->stack[--_curScript->sp] = _curScript->stack[(_parameter - 1) + _curScript->bp];
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_popRetOrPos() {
|
|
|
|
switch (_parameter) {
|
|
|
|
case 0:
|
2005-12-09 17:36:57 +00:00
|
|
|
_curScript->retValue = _curScript->stack[_curScript->sp++];
|
2005-10-13 18:05:04 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
if (_curScript->sp >= 60) {
|
|
|
|
_continue = false;
|
|
|
|
_curScript->ip = 0;
|
|
|
|
} else {
|
2005-12-09 17:36:57 +00:00
|
|
|
_curScript->bp = _curScript->stack[_curScript->sp++];
|
|
|
|
_curScript->ip = _curScript->dataPtr->data + (_curScript->stack[_curScript->sp++] << 1);
|
2005-10-13 18:05:04 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
_continue = false;
|
|
|
|
_curScript->ip = 0;
|
|
|
|
break;
|
2004-10-15 06:06:47 +00:00
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_popVar() {
|
2005-12-09 17:36:57 +00:00
|
|
|
_curScript->variables[_parameter] = _curScript->stack[_curScript->sp++];
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_popBPNeg() {
|
2005-12-09 17:36:57 +00:00
|
|
|
_curScript->stack[(-(int32)(_parameter + 2)) + _curScript->bp] = _curScript->stack[_curScript->sp++];
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_popBPAdd() {
|
2005-12-09 17:36:57 +00:00
|
|
|
_curScript->stack[(_parameter - 1) + _curScript->bp] = _curScript->stack[_curScript->sp++];
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_addSP() {
|
|
|
|
_curScript->sp += _parameter;
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_subSP() {
|
|
|
|
_curScript->sp -= _parameter;
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_execOpcode() {
|
2005-11-13 19:35:01 +00:00
|
|
|
assert((uint8)_parameter < _curScript->dataPtr->opcodeSize);
|
|
|
|
if (_curScript->dataPtr->opcodes[(uint8)_parameter] == &KyraEngine::cmd_dummy)
|
|
|
|
debug("calling unimplemented opcode(0x%.02X)", (uint8)_parameter);
|
|
|
|
_curScript->retValue = (_vm->*_curScript->dataPtr->opcodes[(uint8)_parameter])(_curScript);
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_ifNotJmp() {
|
2005-11-10 14:08:50 +00:00
|
|
|
if (!_curScript->stack[_curScript->sp++]) {
|
2005-10-13 18:05:04 +00:00
|
|
|
_parameter &= 0x7FFF;
|
|
|
|
_curScript->ip = _curScript->dataPtr->data + (_parameter << 1);
|
2004-10-15 06:06:47 +00:00
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_negate() {
|
|
|
|
int16 value = _curScript->stack[_curScript->sp];
|
|
|
|
switch (_parameter) {
|
|
|
|
case 0:
|
|
|
|
if (!value) {
|
|
|
|
_curScript->stack[_curScript->sp] = 1;
|
2005-11-18 23:55:31 +00:00
|
|
|
} else {
|
|
|
|
_curScript->stack[_curScript->sp] = 0;
|
2005-10-13 18:05:04 +00:00
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 1:
|
|
|
|
_curScript->stack[_curScript->sp] = -value;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 2:
|
|
|
|
_curScript->stack[_curScript->sp] = ~value;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
default:
|
|
|
|
_continue = false;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_eval() {
|
|
|
|
int16 ret = 0;
|
|
|
|
bool error = false;
|
|
|
|
|
2005-12-09 17:36:57 +00:00
|
|
|
int16 val1 = _curScript->stack[_curScript->sp++];
|
|
|
|
int16 val2 = _curScript->stack[_curScript->sp++];
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
switch (_parameter) {
|
|
|
|
case 0:
|
|
|
|
if (!val2 || !val1) {
|
|
|
|
ret = 0;
|
|
|
|
} else {
|
|
|
|
ret = 1;
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 1:
|
|
|
|
if (val2 || val1) {
|
|
|
|
ret = 1;
|
|
|
|
} else {
|
|
|
|
ret = 0;
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 2:
|
|
|
|
if (val1 == val2) {
|
|
|
|
ret = 1;
|
|
|
|
} else {
|
|
|
|
ret = 0;
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 3:
|
|
|
|
if (val1 != val2) {
|
|
|
|
ret = 1;
|
|
|
|
} else {
|
|
|
|
ret = 0;
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 4:
|
|
|
|
if (val1 > val2) {
|
|
|
|
ret = 1;
|
|
|
|
} else {
|
|
|
|
ret = 0;
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 5:
|
|
|
|
if (val1 >= val2) {
|
|
|
|
ret = 1;
|
|
|
|
} else {
|
|
|
|
ret = 0;
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 6:
|
|
|
|
if (val1 < val2) {
|
|
|
|
ret = 1;
|
|
|
|
} else {
|
|
|
|
ret = 0;
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 7:
|
|
|
|
if (val1 <= val2) {
|
|
|
|
ret = 1;
|
|
|
|
} else {
|
|
|
|
ret = 0;
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 8:
|
|
|
|
ret = val1 + val2;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 9:
|
|
|
|
ret = val2 - val1;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 10:
|
|
|
|
ret = val1 * val2;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 11:
|
|
|
|
ret = val2 / val1;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 12:
|
|
|
|
ret = val2 >> val1;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 13:
|
|
|
|
ret = val2 << val1;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 14:
|
|
|
|
ret = val1 & val2;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 15:
|
|
|
|
ret = val1 | val2;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 16:
|
|
|
|
ret = val2 % val1;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
case 17:
|
|
|
|
ret = val1 ^ val2;
|
2004-11-14 20:11:22 +00:00
|
|
|
break;
|
2005-10-13 18:05:04 +00:00
|
|
|
|
|
|
|
default:
|
|
|
|
warning("Unknown evaluate func: %d", _parameter);
|
|
|
|
error = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (error) {
|
|
|
|
_curScript->ip = 0;
|
|
|
|
_continue = false;
|
|
|
|
} else {
|
|
|
|
_curScript->stack[--_curScript->sp] = ret;
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
2004-10-15 10:42:44 +00:00
|
|
|
|
2005-10-13 18:05:04 +00:00
|
|
|
void ScriptHelper::c1_setRetAndJmp() {
|
|
|
|
if (_curScript->sp >= 60) {
|
|
|
|
_continue = false;
|
|
|
|
_curScript->ip = 0;
|
|
|
|
} else {
|
2005-12-09 17:36:57 +00:00
|
|
|
_curScript->retValue = _curScript->stack[_curScript->sp++];
|
|
|
|
uint16 temp = _curScript->stack[_curScript->sp++];
|
2005-10-13 18:05:04 +00:00
|
|
|
_curScript->stack[60] = 0;
|
|
|
|
_curScript->ip = &_curScript->dataPtr->data[temp*2];
|
|
|
|
}
|
2004-11-14 20:11:22 +00:00
|
|
|
}
|
2004-10-15 10:42:44 +00:00
|
|
|
|
2005-10-29 18:37:40 +00:00
|
|
|
#pragma mark -
|
|
|
|
#pragma mark - Opcode implementations
|
|
|
|
#pragma mark -
|
|
|
|
|
|
|
|
#define stackPos(x) script->stack[script->sp+x]
|
2005-11-13 19:35:01 +00:00
|
|
|
#define stackPosString(x) (char*)&script->dataPtr->text[READ_BE_UINT16(&((uint16 *)script->dataPtr->text)[stackPos(x)])]
|
2005-10-29 18:37:40 +00:00
|
|
|
|
|
|
|
int KyraEngine::cmd_magicInMouseItem(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_magicInMouseItem");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_characterSays(ScriptState *script) {
|
2005-11-10 14:08:50 +00:00
|
|
|
// Japanese version?
|
|
|
|
/*const char *str1 = "âuâëâôââôüAé?é¢ùêé¢é+é®üH";
|
|
|
|
const char *str2 = "âuâëâôâ\\âôüAé?é¢ùêé¢é+é®üH";
|
|
|
|
|
|
|
|
if (strcmp(stackPosString(0), str1) == 0)
|
|
|
|
characterSays((char *)str2, stackPos(1), stackPos(2));
|
|
|
|
else*/
|
2005-11-27 05:24:35 +00:00
|
|
|
|
|
|
|
if (_features & GF_TALKIE) {
|
|
|
|
debug(3, "cmd_characterSays(0x%X) (%d, '%s', %d, %d)", script, stackPos(0), stackPosString(1), stackPos(2), stackPos(3));
|
2005-12-10 17:51:40 +00:00
|
|
|
while (snd_voicePlaying() && !_fastMode) {
|
|
|
|
delay(10);
|
2005-11-27 10:02:23 +00:00
|
|
|
}
|
|
|
|
snd_playVoiceFile(stackPos(0));
|
2005-11-27 05:24:35 +00:00
|
|
|
characterSays(stackPosString(1), stackPos(2), stackPos(3));
|
|
|
|
} else {
|
|
|
|
debug(3, "cmd_characterSays(0x%X) ('%s', %d, %d)", script, stackPosString(0), stackPos(1), stackPos(2));
|
|
|
|
characterSays(stackPosString(0), stackPos(1), stackPos(2));
|
|
|
|
}
|
2005-11-10 14:08:50 +00:00
|
|
|
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_pauseTicks(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_pauseTicks");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_drawSceneAnimShape(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_drawSceneAnimShape(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-11-10 14:08:50 +00:00
|
|
|
_screen->drawShape(stackPos(4), _sprites->_sceneShapes[stackPos(0)], stackPos(1), stackPos(2), 0, stackPos(3));
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_queryGameFlag(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_queryGameFlag(0x%X) (0x%X)", script, stackPos(0));
|
2005-10-29 18:37:40 +00:00
|
|
|
return queryGameFlag(stackPos(0));
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setGameFlag(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setGameFlag(0x%X) (0x%X)", script, stackPos(0));
|
2005-10-29 18:37:40 +00:00
|
|
|
return setGameFlag(stackPos(0));
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_resetGameFlag(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_resetGameFlag(0x%X) (0x%X)", script, stackPos(0));
|
2005-10-29 18:37:40 +00:00
|
|
|
return resetGameFlag(stackPos(0));
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_runNPCScript(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_runNPCScript");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setSpecialExitList(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setSpecialExitList(0x%X) (%d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7), stackPos(8), stackPos(9));
|
2005-10-29 18:37:40 +00:00
|
|
|
|
|
|
|
for (int i = 0; i < 10; ++i) {
|
|
|
|
_exitList[i] = stackPos(i);
|
|
|
|
}
|
|
|
|
_exitListPtr = _exitList;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_blockInWalkableRegion(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_blockInWalkableRegion(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-11-10 21:42:42 +00:00
|
|
|
blockInRegion(stackPos(0), stackPos(1), stackPos(2)-stackPos(0)+1, stackPos(3)-stackPos(1)+1);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_blockOutWalkableRegion(ScriptState *script) {
|
2005-12-14 17:56:12 +00:00
|
|
|
debug(3, "cmd_blockOutWalkableRegion(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-10-29 18:37:40 +00:00
|
|
|
blockOutRegion(stackPos(0), stackPos(1), stackPos(2)-stackPos(0)+1, stackPos(3)-stackPos(1)+1);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_walkPlayerToPoint(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_walkPlayerToPoint(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-11-11 22:17:06 +00:00
|
|
|
|
2005-11-26 16:37:20 +00:00
|
|
|
int normalTimers = stackPos(2);
|
|
|
|
if (!normalTimers) {
|
2005-11-11 22:17:06 +00:00
|
|
|
disableTimer(19);
|
|
|
|
disableTimer(14);
|
|
|
|
disableTimer(18);
|
|
|
|
}
|
|
|
|
|
2005-11-09 22:26:12 +00:00
|
|
|
int reinitScript = handleSceneChange(stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-11-11 22:17:06 +00:00
|
|
|
|
2005-11-26 16:37:20 +00:00
|
|
|
if (!normalTimers) {
|
2005-11-11 22:17:06 +00:00
|
|
|
enableTimer(19);
|
|
|
|
enableTimer(14);
|
|
|
|
enableTimer(18);
|
|
|
|
}
|
|
|
|
|
2005-11-09 22:26:12 +00:00
|
|
|
if (reinitScript) {
|
|
|
|
_scriptInterpreter->initScript(script, script->dataPtr);
|
|
|
|
}
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_dropItemInScene(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_dropItemInScene(0x%X) (%d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2));
|
2005-10-29 18:37:40 +00:00
|
|
|
int item = stackPos(0);
|
|
|
|
int xpos = stackPos(1);
|
|
|
|
int ypos = stackPos(2);
|
|
|
|
|
|
|
|
byte freeItem = findFreeItemInScene(_currentCharacter->sceneId);
|
|
|
|
if (freeItem != 0xFF) {
|
|
|
|
int sceneId = _currentCharacter->sceneId;
|
|
|
|
Room *room = &_roomTable[sceneId];
|
|
|
|
room->itemsXPos[freeItem] = xpos;
|
|
|
|
room->itemsYPos[freeItem] = ypos;
|
|
|
|
room->itemsTable[freeItem] = item;
|
|
|
|
|
2005-12-09 23:02:16 +00:00
|
|
|
animAddGameItem(freeItem, sceneId);
|
2005-12-08 17:19:18 +00:00
|
|
|
updateAllObjectShapes();
|
2005-10-29 18:37:40 +00:00
|
|
|
} else {
|
|
|
|
if (item == 43) {
|
|
|
|
placeItemInGenericMapScene(item, 0);
|
|
|
|
} else {
|
|
|
|
placeItemInGenericMapScene(item, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_drawAnimShapeIntoScene(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_drawAnimShapeIntoScene(0x%X) (%d, %d, %d, %d)", stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
|
|
|
_screen->hideMouse();
|
|
|
|
restoreAllObjectBackgrounds();
|
|
|
|
int shape = stackPos(0);
|
|
|
|
int xpos = stackPos(1);
|
|
|
|
int ypos = stackPos(2);
|
|
|
|
int flags = (stackPos(3) != 0) ? 1 : 0;
|
|
|
|
_screen->drawShape(2, _sprites->_sceneShapes[shape], xpos, ypos, 0, flags);
|
|
|
|
_screen->drawShape(0, _sprites->_sceneShapes[shape], xpos, ypos, 0, flags);
|
|
|
|
flagAllObjectsForBkgdChange();
|
|
|
|
preserveAnyChangedBackgrounds();
|
|
|
|
flagAllObjectsForRefresh();
|
|
|
|
updateAllObjectShapes();
|
|
|
|
_screen->showMouse();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_createMouseItem(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_createMouseItem(0x%X) (%d)", stackPos(0));
|
|
|
|
createMouseItem(stackPos(0));
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_savePageToDisk(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_savePageToDisk");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_sceneAnimOn(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_sceneAnimOn(0x%X) (%d)", script, stackPos(0));
|
2005-11-10 14:08:50 +00:00
|
|
|
_sprites->_anims[stackPos(0)].play = true;
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_sceneAnimOff(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_sceneAnimOff(0x%X) (%d)", script, stackPos(0));
|
2005-11-10 14:08:50 +00:00
|
|
|
_sprites->_anims[stackPos(0)].play = false;
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getElapsedSeconds(ScriptState *script) {
|
2005-12-10 19:02:56 +00:00
|
|
|
debug(3, "cmd_getElapsedSeconds(0x%X) ()");
|
|
|
|
return _system->getMillis() / 1000;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_mouseIsPointer(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_mouseIsPointer(0x%X) ()", script);
|
|
|
|
if (_itemInHand == -1) {
|
|
|
|
return 1;
|
|
|
|
}
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_destroyMouseItem(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_destroyMouseItem(0x%X) ()", script);
|
|
|
|
destroyMouseItem();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_runSceneAnimUntilDone(ScriptState *script) {
|
2005-11-27 00:12:07 +00:00
|
|
|
debug(3, "cmd_runSceneAnimUntilDone(0x%X) (%d)", script, stackPos(0));
|
|
|
|
_sprites->_anims[stackPos(0)].play = true;
|
|
|
|
_sprites->_animObjects[stackPos(0)].active = 1;
|
|
|
|
_screen->hideMouse();
|
|
|
|
restoreAllObjectBackgrounds();
|
|
|
|
flagAllObjectsForBkgdChange();
|
|
|
|
preserveAnyChangedBackgrounds();
|
|
|
|
while (_sprites->_anims[stackPos(0)].play) {
|
|
|
|
_sprites->updateSceneAnims();
|
|
|
|
updateAllObjectShapes();
|
|
|
|
}
|
|
|
|
restoreAllObjectBackgrounds();
|
|
|
|
_screen->showMouse();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_fadeSpecialPalette(ScriptState *script) {
|
2005-12-22 18:14:52 +00:00
|
|
|
debug(3, "cmd_fadeSpecialPalette(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
|
|
|
_screen->fadeSpecialPalette(stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_playAdlibSound(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_playAdlibSound");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_playAdlibScore(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_playAdlibScore");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_phaseInSameScene(ScriptState *script) {
|
2005-12-09 23:02:16 +00:00
|
|
|
debug(3, "cmd_phaseInSameScene(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
|
|
|
transcendScenes(stackPos(0), stackPos(1));
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setScenePhasingFlag(ScriptState *script) {
|
2005-12-09 23:02:16 +00:00
|
|
|
debug(3, "cmd_setScenePhasingFlag(0x%X) ()");
|
|
|
|
_scenePhasingFlag = 1;
|
|
|
|
return 1;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_resetScenePhasingFlag(ScriptState *script) {
|
2005-12-09 23:02:16 +00:00
|
|
|
debug(3, "cmd_resetScenePhasingFlag(0x%X) ()");
|
|
|
|
_scenePhasingFlag = 0;
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_queryScenePhasingFlag(ScriptState *script) {
|
2005-12-09 23:02:16 +00:00
|
|
|
debug(3, "cmd_queryScenePhasingFlag(0x%X) ()");
|
|
|
|
return _scenePhasingFlag;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_sceneToDirection(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_sceneToDirection");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setBirthstoneGem(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setBirthstoneGem(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
2005-10-29 18:37:40 +00:00
|
|
|
int index = stackPos(0);
|
|
|
|
if (index < 4 && index >= 0) {
|
|
|
|
_birthstoneGemTable[index] = stackPos(1);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_placeItemInGenericMapScene(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_placeItemInGenericMapScene(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
2005-10-29 18:37:40 +00:00
|
|
|
placeItemInGenericMapScene(stackPos(0), stackPos(1));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setBrandonStatusBit(ScriptState *script) {
|
2005-12-09 23:02:16 +00:00
|
|
|
debug(3, "cmd_setBrandonStatusBit(0x%X) (%d)", script, stackPos(0));
|
|
|
|
_brandonStatusBit |= stackPos(0);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_pauseSeconds(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_pauseSeconds(0x%X) (%d)", script, stackPos(0));
|
2005-12-09 14:52:31 +00:00
|
|
|
if (stackPos(0) > 0)
|
2005-12-22 19:31:38 +00:00
|
|
|
delay(stackPos(0)*1000, true);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getCharactersLocation(ScriptState *script) {
|
2005-12-09 23:02:16 +00:00
|
|
|
debug(3, "cmd_getCharactersLocation(0x%X) (%d)", script, stackPos(0));
|
|
|
|
return _characterList[stackPos(0)].sceneId;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_runNPCSubscript(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_runNPCSubscript");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_magicOutMouseItem(ScriptState *script) {
|
2005-12-23 17:49:14 +00:00
|
|
|
debug(3, "cmd_magicOutMouseItem(0x%X) (%d)", script, stackPos(0));
|
|
|
|
magicOutMouseItem(stackPos(0), -1);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_internalAnimOn(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_internalAnimOn(0x%X) (%d)", script, stackPos(0));
|
2005-11-10 14:08:50 +00:00
|
|
|
_sprites->_animObjects[stackPos(0)].active = 1;
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_forceBrandonToNormal(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_forceBrandonToNormal(0x%X) ()", script);
|
2005-12-09 14:52:31 +00:00
|
|
|
checkAmuletAnimFlags();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_poisonDeathNow(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_poisonDeathNow");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setScaleMode(ScriptState *script) {
|
2005-12-14 17:56:12 +00:00
|
|
|
debug(3, "cmd_setScaleMode(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
|
|
|
int len = stackPos(0);
|
|
|
|
int setValue1 = stackPos(1);
|
|
|
|
int start2 = stackPos(2);
|
|
|
|
int setValue2 = stackPos(3);
|
|
|
|
for (int i = 0; i < len; ++i) {
|
|
|
|
_scaleTable[i] = setValue1;
|
|
|
|
}
|
|
|
|
int temp = setValue2 - setValue1;
|
|
|
|
int temp2 = start2 - len;
|
|
|
|
for (int i = len, offset = 0; i < start2; ++i, ++offset) {
|
|
|
|
_scaleTable[i] = (offset * temp) / temp2 + setValue1;
|
|
|
|
}
|
|
|
|
for (int i = start2; i < 145; ++i) {
|
|
|
|
_scaleTable[i] = setValue2;
|
|
|
|
}
|
|
|
|
_scaleMode = 1;
|
|
|
|
return _scaleMode;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_openWSAFile(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_openWSAFile(0x%X) ('%s', %d)", script, stackPosString(0), stackPos(1));
|
2005-10-29 18:37:40 +00:00
|
|
|
|
2005-11-10 14:08:50 +00:00
|
|
|
char *filename = stackPosString(0);
|
|
|
|
int wsaIndex = stackPos(1);
|
2005-10-29 18:37:40 +00:00
|
|
|
|
2005-11-18 23:55:31 +00:00
|
|
|
_wsaObjects[wsaIndex] = wsa_open(filename, 1, 0);
|
2005-10-29 18:37:40 +00:00
|
|
|
assert(_wsaObjects[wsaIndex]);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_closeWSAFile(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_closeWSAFile(0x%X) (%d)", script, stackPos(0));
|
2005-10-29 18:37:40 +00:00
|
|
|
|
|
|
|
int wsaIndex = stackPos(0);
|
|
|
|
if (_wsaObjects[wsaIndex]) {
|
|
|
|
wsa_close(_wsaObjects[wsaIndex]);
|
|
|
|
_wsaObjects[wsaIndex] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_runWSAFromBeginningToEnd(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_runWSAFromBeginningToEnd(0x%X) (%d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
|
2005-10-29 18:37:40 +00:00
|
|
|
|
|
|
|
_screen->hideMouse();
|
|
|
|
|
|
|
|
bool running = true;
|
|
|
|
|
|
|
|
int xpos = stackPos(0);
|
|
|
|
int ypos = stackPos(1);
|
|
|
|
int waitTime = stackPos(2);
|
|
|
|
int wsaIndex = stackPos(3);
|
|
|
|
int worldUpdate = stackPos(4);
|
|
|
|
int wsaFrame = 0;
|
|
|
|
|
|
|
|
while (running) {
|
|
|
|
wsa_play(_wsaObjects[wsaIndex], wsaFrame++, xpos, ypos, 0);
|
2005-12-20 10:58:07 +00:00
|
|
|
_updateScreen = true;
|
2005-10-29 18:37:40 +00:00
|
|
|
if (wsaFrame >= wsa_getNumFrames(_wsaObjects[wsaIndex]))
|
|
|
|
running = false;
|
2005-11-18 23:55:31 +00:00
|
|
|
|
2005-12-20 10:58:07 +00:00
|
|
|
uint32 continueTime = waitTime * _tickLength + _system->getMillis();
|
|
|
|
while (_system->getMillis() < continueTime) {
|
|
|
|
if (worldUpdate) {
|
|
|
|
_sprites->updateSceneAnims();
|
|
|
|
updateAllObjectShapes();
|
|
|
|
} else {
|
|
|
|
_screen->updateScreen();
|
|
|
|
}
|
|
|
|
delay(10);
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_screen->showMouse();
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_displayWSAFrame(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_displayWSAFrame(0x%X) (%d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
|
|
|
|
int frame = stackPos(0);
|
|
|
|
int xpos = stackPos(1);
|
|
|
|
int ypos = stackPos(2);
|
|
|
|
int waitTime = stackPos(3);
|
|
|
|
int wsaIndex = stackPos(4);
|
|
|
|
_screen->hideMouse();
|
|
|
|
wsa_play(_wsaObjects[wsaIndex], frame, xpos, ypos, 0);
|
2005-12-20 10:58:07 +00:00
|
|
|
uint32 continueTime = waitTime * _tickLength + _system->getMillis();
|
|
|
|
while (_system->getMillis() < continueTime) {
|
|
|
|
_sprites->updateSceneAnims();
|
|
|
|
updateAllObjectShapes();
|
|
|
|
delay(10);
|
|
|
|
}
|
2005-12-10 17:51:40 +00:00
|
|
|
_updateScreen = true;
|
2005-11-18 23:55:31 +00:00
|
|
|
_screen->showMouse();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_enterNewScene(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_enterNewScene(0x%X) (%d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
|
2005-10-29 18:37:40 +00:00
|
|
|
enterNewScene(stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setSpecialEnterXAndY(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setSpecialEnterXAndY(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
2005-10-29 18:37:40 +00:00
|
|
|
_brandonPosX = stackPos(0);
|
|
|
|
_brandonPosY = stackPos(1);
|
|
|
|
if (_brandonPosX + 1 == 0 && _brandonPosY + 1 == 0)
|
|
|
|
_currentCharacter->currentAnimFrame = 88;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_runWSAFrames(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_runWSAFrames");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_popBrandonIntoScene(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_popBrandonIntoScene(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-11-10 18:58:44 +00:00
|
|
|
int changeScaleMode = stackPos(3);
|
2005-12-09 23:02:16 +00:00
|
|
|
int xpos = (int16)(stackPos(0) & 0xFFFC);
|
|
|
|
int ypos = (int16)(stackPos(1) & 0xFFFE);
|
2005-11-10 18:58:44 +00:00
|
|
|
int facing = stackPos(2);
|
|
|
|
_currentCharacter->x1 = _currentCharacter->x2 = xpos;
|
|
|
|
_currentCharacter->y1 = _currentCharacter->y2 = ypos;
|
|
|
|
_currentCharacter->facing = facing;
|
|
|
|
_currentCharacter->currentAnimFrame = 7;
|
|
|
|
int xOffset = _defaultShapeTable[0].xOffset;
|
|
|
|
int yOffset = _defaultShapeTable[0].yOffset;
|
|
|
|
int width = _defaultShapeTable[0].w << 3;
|
|
|
|
int height = _defaultShapeTable[0].h;
|
|
|
|
AnimObject *curAnim = _charactersAnimState;
|
|
|
|
|
|
|
|
if (changeScaleMode) {
|
|
|
|
curAnim->x1 = _currentCharacter->x1;
|
|
|
|
curAnim->y1 = _currentCharacter->y1;
|
|
|
|
_brandonScaleY = _scaleTable[_currentCharacter->y1];
|
|
|
|
_brandonScaleX = _brandonScaleY;
|
|
|
|
|
|
|
|
int animWidth = fetchAnimWidth(curAnim->sceneAnimPtr, _brandonScaleX) >> 1;
|
|
|
|
int animHeight = fetchAnimHeight(curAnim->sceneAnimPtr, _brandonScaleY);
|
|
|
|
|
|
|
|
animWidth = (xOffset * animWidth) / width;
|
|
|
|
animHeight = (yOffset * animHeight) / height;
|
|
|
|
|
|
|
|
curAnim->x2 = curAnim->x1 += animWidth;
|
|
|
|
curAnim->y2 = curAnim->y1 += animHeight;
|
|
|
|
} else {
|
|
|
|
curAnim->x2 = curAnim->x1 = _currentCharacter->x1 + xOffset;
|
|
|
|
curAnim->y2 = curAnim->y1 = _currentCharacter->y1 + yOffset;
|
|
|
|
}
|
|
|
|
|
|
|
|
int scaleModeBackup = _scaleMode;
|
|
|
|
if (changeScaleMode) {
|
|
|
|
_scaleMode = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
animRefreshNPC(0);
|
|
|
|
preserveAllBackgrounds();
|
|
|
|
prepDrawAllObjects();
|
|
|
|
copyChangedObjectsForward(0);
|
|
|
|
|
|
|
|
_scaleMode = scaleModeBackup;
|
|
|
|
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_restoreAllObjectBackgrounds(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_restoreAllObjectBackgrounds(0x%X) ()", script);
|
2005-11-10 14:08:50 +00:00
|
|
|
restoreAllObjectBackgrounds();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setCustomPaletteRange(ScriptState *script) {
|
2005-12-22 18:14:52 +00:00
|
|
|
debug(3, "cmd_setCustomPaletteRange(0x%X) (%d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2));
|
|
|
|
uint8 *screenPal = _screen->_currentPalette;
|
|
|
|
memcpy(&screenPal[stackPos(1)*3], _specialPalettes[stackPos(0)], stackPos(2)*3);
|
|
|
|
_screen->setScreenPalette(screenPal);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_loadPageFromDisk(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_loadPageFromDisk");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_customPrintTalkString(ScriptState *script) {
|
2005-11-27 05:49:35 +00:00
|
|
|
if (_features & GF_TALKIE) {
|
2005-12-22 18:14:52 +00:00
|
|
|
debug(3, "cmd_customPrintTalkString(0x%X) (%d, '%s', %d, %d, %d)", script, stackPos(0), stackPosString(1), stackPos(2), stackPos(3), stackPos(4) & 0xFF);
|
2005-12-10 17:51:40 +00:00
|
|
|
while (snd_voicePlaying() && !_fastMode) {
|
|
|
|
delay(10);
|
2005-11-27 10:02:23 +00:00
|
|
|
}
|
|
|
|
snd_playVoiceFile(stackPos(0));
|
2005-11-27 05:49:35 +00:00
|
|
|
printTalkTextMessage(stackPosString(1), stackPos(2), stackPos(3), stackPos(4) & 0xFF, 0, 2);
|
|
|
|
} else {
|
|
|
|
debug(3, "cmd_customPrintTalkString(0x%X) ('%s', %d, %d, %d)", script, stackPosString(0), stackPos(1), stackPos(2), stackPos(3) & 0xFF);
|
|
|
|
printTalkTextMessage(stackPosString(0), stackPos(1), stackPos(2), stackPos(3) & 0xFF, 0, 2);
|
|
|
|
}
|
2005-12-10 17:51:40 +00:00
|
|
|
_updateScreen = true;
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_restoreCustomPrintBackground(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_restoreCustomPrintBackground(0x%X) ()", script);
|
|
|
|
restoreTalkTextMessageBkgd(2, 0);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_hideMouse(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_hideMouse(0x%X) ()", script);
|
2005-10-29 18:37:40 +00:00
|
|
|
_screen->hideMouse();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_showMouse(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_showMouse(0x%X) ()", script);
|
2005-10-29 18:37:40 +00:00
|
|
|
_screen->showMouse();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getCharacterX(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_getCharacterX(0x%X) (%d)", script, stackPos(0));
|
2005-10-29 18:37:40 +00:00
|
|
|
return _characterList[stackPos(0)].x1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getCharacterY(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_getCharacterY(0x%X) (%d)", script, stackPos(0));
|
2005-10-29 18:37:40 +00:00
|
|
|
return _characterList[stackPos(0)].y1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_changeCharactersFacing(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_changeCharactersFacing(0x%X) (%d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2));
|
2005-11-10 18:58:44 +00:00
|
|
|
int character = stackPos(0);
|
|
|
|
int facing = stackPos(1);
|
|
|
|
int newAnimFrame = stackPos(2);
|
|
|
|
|
|
|
|
restoreAllObjectBackgrounds();
|
|
|
|
if (newAnimFrame != -1) {
|
|
|
|
_characterList[character].currentAnimFrame = newAnimFrame;
|
|
|
|
}
|
|
|
|
_characterList[character].facing = facing;
|
|
|
|
animRefreshNPC(character);
|
|
|
|
preserveAllBackgrounds();
|
|
|
|
prepDrawAllObjects();
|
|
|
|
copyChangedObjectsForward(0);
|
|
|
|
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2005-11-18 23:55:31 +00:00
|
|
|
int KyraEngine::cmd_copyWSARegion(ScriptState *script) {
|
|
|
|
debug(3, "cmd_copyWSARegion(0x%X) (%d, %d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
|
|
|
|
int xpos = stackPos(0);
|
|
|
|
int ypos = stackPos(1);
|
|
|
|
int width = stackPos(2);
|
|
|
|
int height = stackPos(3);
|
|
|
|
int srcPage = stackPos(4);
|
|
|
|
int dstPage = stackPos(5);
|
|
|
|
_screen->copyRegion(xpos, ypos, xpos, ypos, width, height, srcPage, dstPage, 0);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_printText(ScriptState *script) {
|
2005-12-10 19:02:56 +00:00
|
|
|
debug(3, "cmd_printText(0x%X) ('%s', %d, %d, 0x%X, 0x%X)", script, stackPosString(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
|
|
|
|
_screen->printText(stackPosString(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
|
|
|
|
_screen->updateScreen();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_random(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_random(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
2005-10-29 18:37:40 +00:00
|
|
|
assert(stackPos(0) < stackPos(1));
|
|
|
|
return _rnd.getRandomNumberRng(stackPos(0), stackPos(1));
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_loadSoundFile(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_loadSoundFile");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_displayWSAFrameOnHidPage(ScriptState *script) {
|
2005-12-20 14:06:47 +00:00
|
|
|
debug(3, "cmd_displayWSAFrameOnHidPage(0x%X) (%d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
|
2005-11-27 00:12:07 +00:00
|
|
|
int frame = stackPos(0);
|
|
|
|
int xpos = stackPos(1);
|
|
|
|
int ypos = stackPos(2);
|
|
|
|
int waitTime = stackPos(3);
|
|
|
|
int wsaIndex = stackPos(4);
|
|
|
|
|
|
|
|
_screen->hideMouse();
|
|
|
|
wsa_play(_wsaObjects[wsaIndex], frame, xpos, ypos, 2);
|
2005-12-20 10:58:07 +00:00
|
|
|
uint32 continueTime = waitTime * _tickLength + _system->getMillis();
|
|
|
|
while (_system->getMillis() < continueTime) {
|
|
|
|
_sprites->updateSceneAnims();
|
|
|
|
updateAllObjectShapes();
|
|
|
|
delay(10);
|
|
|
|
}
|
2005-11-27 00:12:07 +00:00
|
|
|
_screen->showMouse();
|
|
|
|
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_displayWSASequentialFrames(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_displayWSASequentialFrames(0x%X) (%d, %d, %d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6));
|
|
|
|
int startFrame = stackPos(0);
|
|
|
|
int endFrame = stackPos(1);
|
|
|
|
int xpos = stackPos(2);
|
|
|
|
int ypos = stackPos(3);
|
|
|
|
int waitTime = stackPos(4);
|
|
|
|
int wsaIndex = stackPos(5);
|
|
|
|
int maxTime = stackPos(6);
|
|
|
|
if (maxTime - 1 <= 0)
|
|
|
|
maxTime = 1;
|
|
|
|
|
|
|
|
int curTime = 0;
|
|
|
|
_screen->hideMouse();
|
|
|
|
while (curTime < maxTime) {
|
|
|
|
if (endFrame >= startFrame) {
|
|
|
|
int frame = startFrame;
|
|
|
|
while (endFrame >= frame) {
|
|
|
|
wsa_play(_wsaObjects[wsaIndex], frame, xpos, ypos, 0);
|
2005-12-10 17:51:40 +00:00
|
|
|
_updateScreen = true;
|
2005-12-20 10:58:07 +00:00
|
|
|
uint32 continueTime = waitTime * _tickLength + _system->getMillis();
|
|
|
|
while (_system->getMillis() < continueTime) {
|
|
|
|
_sprites->updateSceneAnims();
|
|
|
|
updateAllObjectShapes();
|
|
|
|
delay(10);
|
|
|
|
}
|
2005-11-18 23:55:31 +00:00
|
|
|
++frame;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
int frame = endFrame;
|
|
|
|
while (startFrame <= frame) {
|
|
|
|
wsa_play(_wsaObjects[wsaIndex], frame, xpos, ypos, 0);
|
2005-12-10 17:51:40 +00:00
|
|
|
_updateScreen = true;
|
2005-12-20 10:58:07 +00:00
|
|
|
uint32 continueTime = waitTime * _tickLength + _system->getMillis();
|
|
|
|
while (_system->getMillis() < continueTime) {
|
|
|
|
_sprites->updateSceneAnims();
|
|
|
|
updateAllObjectShapes();
|
|
|
|
delay(10);
|
|
|
|
}
|
2005-11-18 23:55:31 +00:00
|
|
|
--frame;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
++curTime;
|
|
|
|
}
|
|
|
|
_screen->showMouse();
|
|
|
|
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_drawCharacterStanding(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_drawCharacterStanding(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-10-29 18:37:40 +00:00
|
|
|
int character = stackPos(0);
|
|
|
|
int animFrame = stackPos(1);
|
|
|
|
int newFacing = stackPos(2);
|
|
|
|
int updateShapes = stackPos(3);
|
|
|
|
_characterList[character].currentAnimFrame = animFrame;
|
|
|
|
if (newFacing != -1) {
|
|
|
|
_characterList[character].facing = newFacing;
|
|
|
|
}
|
|
|
|
animRefreshNPC(character);
|
|
|
|
if (updateShapes) {
|
|
|
|
updateAllObjectShapes();
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_internalAnimOff(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_internalAnimOff(0x%X) (%d)", script, stackPos(0));
|
2005-11-10 14:08:50 +00:00
|
|
|
_sprites->_animObjects[stackPos(0)].active = 0;
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_changeCharactersXAndY(ScriptState *script) {
|
2005-12-13 13:27:58 +00:00
|
|
|
debug(3, "cmd_changeCharactersXAndY(0x%X) (%d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2));
|
|
|
|
Character *ch = &_characterList[stackPos(0)];
|
|
|
|
int16 x = stackPos(1);
|
|
|
|
int16 y = stackPos(2);
|
|
|
|
if (x != -1 && y != -1) {
|
|
|
|
x &= 0xFFFC;
|
|
|
|
y &= 0xFFFE;
|
|
|
|
}
|
|
|
|
restoreAllObjectBackgrounds();
|
|
|
|
ch->x1 = ch->x2 = x;
|
|
|
|
ch->y1 = ch->y2 = y;
|
|
|
|
preserveAllBackgrounds();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_clearSceneAnimatorBeacon(ScriptState *script) {
|
2005-12-22 01:49:59 +00:00
|
|
|
debug(3, "cmd_clearSceneAnimatorBeacon(0x%X) ()");
|
|
|
|
_sprites->_sceneAnimatorBeaconFlag = 0;
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_querySceneAnimatorBeacon(ScriptState *script) {
|
2005-12-22 01:49:59 +00:00
|
|
|
debug(3, "cmd_querySceneAnimatorBeacon(0x%X) ()");
|
|
|
|
return _sprites->_sceneAnimatorBeaconFlag;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_refreshSceneAnimator(ScriptState *script) {
|
2005-12-22 01:49:59 +00:00
|
|
|
debug(3, "cmd_refreshSceneAnimator(0x%X) ()");
|
|
|
|
_sprites->updateSceneAnims();
|
|
|
|
updateAllObjectShapes();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_placeItemInOffScene(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_placeItemInOffScene(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-10-29 18:37:40 +00:00
|
|
|
int item = stackPos(0);
|
|
|
|
int xpos = stackPos(1);
|
|
|
|
int ypos = stackPos(2);
|
|
|
|
int sceneId = stackPos(3);
|
|
|
|
|
|
|
|
byte freeItem = findFreeItemInScene(sceneId);
|
|
|
|
if (freeItem != 0xFF) {
|
|
|
|
assert(sceneId < _roomTableSize);
|
|
|
|
Room *room = &_roomTable[sceneId];
|
|
|
|
|
|
|
|
room->itemsTable[freeItem] = item;
|
|
|
|
room->itemsXPos[freeItem] = xpos;
|
|
|
|
room->itemsYPos[freeItem] = ypos;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_wipeDownMouseItem(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_wipeDownMouseItem(0x%X) (%d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2));
|
|
|
|
_screen->hideMouse();
|
|
|
|
wipeDownMouseItem(stackPos(1), stackPos(2));
|
|
|
|
destroyMouseItem();
|
|
|
|
_screen->showMouse();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_placeCharacterInOtherScene(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_placeCharacterInOtherScene(0x%X) (%d, %d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
|
2005-10-29 18:37:40 +00:00
|
|
|
int id = stackPos(0);
|
|
|
|
int sceneId = stackPos(1);
|
2005-12-09 23:02:16 +00:00
|
|
|
int xpos = (int16)(stackPos(2) & 0xFFFC);
|
|
|
|
int ypos = (int16)(stackPos(3) & 0xFFFE);
|
2005-10-29 18:37:40 +00:00
|
|
|
int facing = stackPos(4);
|
|
|
|
int animFrame = stackPos(5);
|
|
|
|
|
|
|
|
_characterList[id].sceneId = sceneId;
|
|
|
|
_characterList[id].x1 = _characterList[id].x2 = xpos;
|
|
|
|
_characterList[id].y1 = _characterList[id].y2 = ypos;
|
|
|
|
_characterList[id].facing = facing;
|
|
|
|
_characterList[id].currentAnimFrame = animFrame;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getKey(ScriptState *script) {
|
2005-12-10 19:02:56 +00:00
|
|
|
debug(3, "cmd_getKey(0x%X) ()");
|
|
|
|
waitForEvent();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_specificItemInInventory(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_specificItemInInventory");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_popMobileNPCIntoScene(ScriptState *script) {
|
2005-12-09 23:02:16 +00:00
|
|
|
debug(3, "cmd_popMobileNPCIntoScene(0x%X) (%d, %d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), (int16)(stackPos(4) & 0xFFFC), (int8)(stackPos(5) & 0xFE));
|
|
|
|
int character = stackPos(0);
|
|
|
|
int sceneId = stackPos(1);
|
|
|
|
int animFrame = stackPos(2);
|
|
|
|
int facing = stackPos(3);
|
|
|
|
int16 xpos = (int16)(stackPos(4) & 0xFFFC);
|
|
|
|
int8 ypos = (int16)(stackPos(5) & 0xFFFE);
|
|
|
|
Character *curChar = &_characterList[character];
|
|
|
|
|
|
|
|
curChar->sceneId = sceneId;
|
|
|
|
curChar->currentAnimFrame = animFrame;
|
|
|
|
curChar->facing = facing;
|
|
|
|
curChar->x1 = curChar->x2 = xpos;
|
|
|
|
curChar->y1 = curChar->y2 = ypos;
|
|
|
|
|
|
|
|
animAddNPC(character);
|
|
|
|
updateAllObjectShapes();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_mobileCharacterInScene(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_mobileCharacterInScene");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_hideMobileCharacter(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_hideMobileCharacter");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_unhideMobileCharacter(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_unhideMobileCharacter");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setCharactersLocation(ScriptState *script) {
|
2005-12-13 13:27:58 +00:00
|
|
|
debug(3, "cmd_setCharactersLocation(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
|
|
|
Character *ch = &_characterList[stackPos(0)];
|
|
|
|
AnimObject *animObj = &_charactersAnimState[stackPos(0)];
|
|
|
|
int newScene = stackPos(1);
|
|
|
|
if (_currentCharacter->sceneId == ch->sceneId) {
|
|
|
|
if (_currentCharacter->sceneId != newScene)
|
|
|
|
animObj->active = 0;
|
|
|
|
} else if (_currentCharacter->sceneId == newScene) {
|
|
|
|
if (_currentCharacter->sceneId != ch->sceneId)
|
|
|
|
animObj->active = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
ch->sceneId = stackPos(1);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_walkCharacterToPoint(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_walkCharacterToPoint(0x%X) (%d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2));
|
2005-11-09 22:26:12 +00:00
|
|
|
int character = stackPos(0);
|
2005-11-01 14:19:50 +00:00
|
|
|
int toX = stackPos(1);
|
|
|
|
int toY = stackPos(2);
|
|
|
|
_pathfinderFlag2 = 1;
|
2005-11-11 22:17:06 +00:00
|
|
|
uint32 nextFrame;
|
2005-11-01 14:19:50 +00:00
|
|
|
int findWayReturn = findWay(_characterList[character].x1, _characterList[character].y1, toX, toY, _movFacingTable, 150);
|
|
|
|
_pathfinderFlag2 = 0;
|
|
|
|
if (_lastFindWayRet < findWayReturn) {
|
|
|
|
_lastFindWayRet = findWayReturn;
|
|
|
|
}
|
|
|
|
if (findWayReturn == 0x7D00 || findWayReturn == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
int *curPos = _movFacingTable;
|
|
|
|
bool running = true;
|
|
|
|
while (running) {
|
|
|
|
bool forceContinue = false;
|
|
|
|
switch (*curPos) {
|
|
|
|
case 0:
|
|
|
|
_characterList[character].facing = 2;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
_characterList[character].facing = 1;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
_characterList[character].facing = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
_characterList[character].facing = 7;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
_characterList[character].facing = 6;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 5:
|
|
|
|
_characterList[character].facing = 5;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 6:
|
|
|
|
_characterList[character].facing = 4;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 7:
|
|
|
|
_characterList[character].facing = 3;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 8:
|
|
|
|
running = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
++curPos;
|
|
|
|
forceContinue = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (forceContinue || !running) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
setCharacterPosition(character, 0);
|
|
|
|
++curPos;
|
2005-11-11 22:17:06 +00:00
|
|
|
|
2005-11-18 23:55:31 +00:00
|
|
|
nextFrame = getTimerDelay(5 + character) * _tickLength + _system->getMillis();
|
2005-11-11 22:17:06 +00:00
|
|
|
while (_system->getMillis() < nextFrame) {
|
|
|
|
_sprites->updateSceneAnims();
|
2005-11-18 23:55:31 +00:00
|
|
|
updateMousePointer();
|
2005-11-11 22:17:06 +00:00
|
|
|
updateGameTimers();
|
|
|
|
updateAllObjectShapes();
|
2005-12-09 14:52:31 +00:00
|
|
|
updateTextFade();
|
2005-11-11 22:17:06 +00:00
|
|
|
if ((nextFrame - _system->getMillis()) >= 10)
|
2005-11-18 23:55:31 +00:00
|
|
|
delay(10);
|
2005-11-11 22:17:06 +00:00
|
|
|
}
|
2005-11-01 14:19:50 +00:00
|
|
|
}
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_specialEventDisplayBrynnsNote(ScriptState *script) {
|
2005-12-10 19:02:56 +00:00
|
|
|
debug(3, "cmd_specialEventDisplayBrynnsNote(0x%X) ()", script);
|
|
|
|
_hidPage = (uint8*)malloc(320*200);
|
|
|
|
_screenPage = (uint8*)malloc(320*200);
|
|
|
|
assert(_hidPage && _screenPage);
|
|
|
|
_screen->hideMouse();
|
|
|
|
_screen->copyRegionToBuffer(0, 0, 0, 320, 200, _screenPage);
|
|
|
|
_screen->copyRegionToBuffer(2, 0, 0, 320, 200, _hidPage);
|
2005-12-12 20:30:23 +00:00
|
|
|
if (_features & GF_TALKIE) {
|
|
|
|
if (_features & GF_ENGLISH) {
|
|
|
|
loadBitmap("NOTEENG.CPS", 3, 3, 0);
|
|
|
|
} else if (_features & GF_FRENCH) {
|
|
|
|
loadBitmap("NOTEFRE.CPS", 3, 3, 0);
|
|
|
|
} else if (_features & GF_GERMAN) {
|
|
|
|
loadBitmap("NOTEGER.CPS", 3, 3, 0);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
loadBitmap("NOTE.CPS", 3, 3, 0);
|
|
|
|
}
|
2005-12-10 19:02:56 +00:00
|
|
|
_screen->copyRegion(63, 8, 63, 8, 194, 128, 2, 0);
|
|
|
|
_screen->updateScreen();
|
|
|
|
_screen->showMouse();
|
|
|
|
_screen->setFont(Screen::FID_6_FNT);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_specialEventRemoveBrynnsNote(ScriptState *script) {
|
2005-12-10 19:02:56 +00:00
|
|
|
debug(3, "cmd_specialEventRemoveBrynnsNote(0x%X) ()", script);
|
|
|
|
_screen->hideMouse();
|
|
|
|
assert(_hidPage && _screenPage);
|
|
|
|
_screen->copyBlockToPage(0, 0, 0, 320, 200, _screenPage);
|
|
|
|
_screen->copyBlockToPage(2, 0, 0, 320, 200, _hidPage);
|
|
|
|
free(_screenPage);
|
|
|
|
free(_hidPage);
|
|
|
|
_screen->updateScreen();
|
|
|
|
_screen->showMouse();
|
|
|
|
_screen->setFont(Screen::FID_8_FNT);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setLogicPage(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setLogicPage");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_fatPrint(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_fatPrint");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_preserveAllObjectBackgrounds(ScriptState *script) {
|
2005-12-09 14:52:31 +00:00
|
|
|
debug(3, "cmd_preserveAllObjectBackgrounds(0x%X) ()", script);
|
|
|
|
preserveAllBackgrounds();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_updateSceneAnimations(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_updateSceneAnimations(0x%X) (%d)", script, stackPos(0));
|
2005-11-10 14:08:50 +00:00
|
|
|
if (stackPos(0)) {
|
|
|
|
_sprites->updateSceneAnims();
|
|
|
|
updateAllObjectShapes();
|
|
|
|
}
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_sceneAnimationActive(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_sceneAnimationActive(0x%X) (%d)", script, stackPos(0));
|
2005-11-10 14:08:50 +00:00
|
|
|
return _sprites->_anims[stackPos(0)].play;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setCharactersMovementDelay(ScriptState *script) {
|
2005-12-09 23:02:16 +00:00
|
|
|
debug(3, "cmd_setCharactersMovementDelay(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
2005-12-09 23:48:52 +00:00
|
|
|
setTimerDelay(stackPos(0)+5, stackPos(1));
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getCharactersFacing(ScriptState *script) {
|
2005-12-14 17:56:12 +00:00
|
|
|
debug(3, "cmd_getCharactersFacing(0x%X) (%d)", script, stackPos(0));
|
2005-11-18 23:55:31 +00:00
|
|
|
return _characterList[stackPos(0)].facing;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_bkgdScrollSceneAndMasksRight(ScriptState *script) {
|
2005-12-10 15:52:38 +00:00
|
|
|
debug(3, "cmd_bkgdScrollSceneAndMasksRight(0x%X) (%d)", script, stackPos(0));
|
|
|
|
copyBackgroundBlock(stackPos(0), 2, 0);
|
|
|
|
copyBackgroundBlock2(stackPos(0));
|
|
|
|
// update the whole screen
|
|
|
|
_screen->copyRegion(7, 7, 7, 7, 305, 129, 3, 0);
|
|
|
|
_screen->updateScreen();
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_dispelMagicAnimation(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_dispelMagicAnimation");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_findBrightestFireberry(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_findBrightestFireberry");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setFireberryGlowPalette(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setFireberryGlowPalette");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setDeathHandlerFlag(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setDeathHandlerFlag");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_drinkPotionAnimation(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_drinkPotionAnimation");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_makeAmuletAppear(ScriptState *script) {
|
2005-12-20 12:42:22 +00:00
|
|
|
debug(3, "cmd_makeAmuletAppear(0x%X) ()", script);
|
|
|
|
WSAMovieV1 *amulet = wsa_open("AMULET.WSA", 1, 0);
|
|
|
|
if (amulet) {
|
|
|
|
assert(_amuleteAnim);
|
|
|
|
_screen->hideMouse();
|
|
|
|
// snd_kyraPlaySound(0x70);
|
|
|
|
uint32 nextTime = 0;
|
|
|
|
for (int i = 0; _amuleteAnim[i] != 0xFF; ++i) {
|
|
|
|
nextTime = _system->getMillis() + 5 * _tickLength;
|
|
|
|
|
|
|
|
uint8 code = _amuleteAnim[i];
|
|
|
|
if (code == 3 || code == 7) {
|
|
|
|
// snd_kyraPlaySound(0x71);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (code == 5) {
|
|
|
|
// snd_kyraPlaySound(0x72);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (code == 14) {
|
|
|
|
// snd_kyraPlaySound(0x73);
|
|
|
|
}
|
|
|
|
|
|
|
|
wsa_play(amulet, code, 224, 152, 0);
|
|
|
|
_updateScreen = true;
|
|
|
|
|
|
|
|
while (_system->getMillis() < nextTime) {
|
|
|
|
_sprites->updateSceneAnims();
|
|
|
|
updateAllObjectShapes();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_screen->showMouse();
|
|
|
|
}
|
|
|
|
wsa_close(amulet);
|
|
|
|
setGameFlag(0x2D);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_drawItemShapeIntoScene(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_drawItemShapeIntoScene");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setCharactersCurrentFrame(ScriptState *script) {
|
2005-12-13 13:27:58 +00:00
|
|
|
debug(3, "cmd_setCharactersCurrentFrame(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
|
|
|
_characterList[stackPos(0)].currentAnimFrame = stackPos(1);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_waitForConfirmationMouseClick(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_waitForConfirmationMouseClick");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_pageFlip(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_pageFlip");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setSceneFile(ScriptState *script) {
|
2005-12-22 19:31:38 +00:00
|
|
|
debug(3, "cmd_setSceneFile(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
|
|
|
setSceneFile(stackPos(0), stackPos(1));
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getItemInMarbleVase(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_getItemInMarbleVase(0x%X) ()", script);
|
|
|
|
return _marbleVaseItem;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setItemInMarbleVase(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setItemInMarbleVase(0x%X) (%d)", script, stackPos(0));
|
2005-10-29 18:37:40 +00:00
|
|
|
_marbleVaseItem = stackPos(0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_addItemToInventory(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_addItemToInventory");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_intPrint(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_intPrint");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_shakeScreen(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_shakeScreen");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_createAmuletJewel(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_createAmuletJewel");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setSceneAnimCurrXY(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setSceneAnimCurrXY(0x%X) (%d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2));
|
2005-11-10 14:08:50 +00:00
|
|
|
_sprites->_anims[stackPos(0)].x = stackPos(1);
|
|
|
|
_sprites->_anims[stackPos(0)].y = stackPos(2);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2005-12-09 14:52:31 +00:00
|
|
|
int KyraEngine::cmd_poisonBrandonAndRemaps(ScriptState *script) {
|
2005-12-09 17:36:57 +00:00
|
|
|
warning("STUB: cmd_poisonBrandonAndRemaps");
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_fillFlaskWithWater(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_fillFlaskWithWater");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getCharactersMovementDelay(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_getCharactersMovementDelay");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getBirthstoneGem(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_getBirthstoneGem");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_queryBrandonStatusBit(ScriptState *script) {
|
2005-12-09 23:02:16 +00:00
|
|
|
debug(3, "cmd_queryBrandonStatusBit(0x%X) (%d)", script, stackPos(0));
|
|
|
|
if (_brandonStatusBit & stackPos(0)) {
|
|
|
|
return 1;
|
|
|
|
}
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_playFluteAnimation(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_playFluteAnimation");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_playWinterScrollSequence(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_playWinterScrollSequence");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getIdolGem(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_getIdolGem");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setIdolGem(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setIdolGem(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
2005-10-29 18:37:40 +00:00
|
|
|
_idolGemsTable[stackPos(0)] = stackPos(1);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_totalItemsInScene(ScriptState *script) {
|
2005-12-08 17:19:18 +00:00
|
|
|
debug(3, "cmd_totalItemsInScene(0x%X) (%d)", script, stackPos(0));
|
|
|
|
return countItemsInScene(stackPos(0));
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_restoreBrandonsMovementDelay(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_restoreBrandonsMovementDelay");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setMousePos(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setMousePos(0x%X) (%d, %d)", script, stackPos(0), stackPos(1));
|
|
|
|
_system->warpMouse(stackPos(0), stackPos(1));
|
|
|
|
_mouseX = stackPos(0);
|
|
|
|
_mouseY = stackPos(1);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getMouseState(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_getMouseState(0x%X) ()", script);
|
|
|
|
return _mouseState;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setEntranceMouseCursorTrack(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setEntranceMouseCursorTrack(0x%X) (%d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
|
2005-10-29 18:37:40 +00:00
|
|
|
_entranceMouseCursorTracks[0] = stackPos(0);
|
|
|
|
_entranceMouseCursorTracks[1] = stackPos(1);
|
|
|
|
_entranceMouseCursorTracks[2] = stackPos(0) + stackPos(2) - 1;
|
|
|
|
_entranceMouseCursorTracks[3] = stackPos(1) + stackPos(3) - 1;
|
2005-11-18 23:55:31 +00:00
|
|
|
_entranceMouseCursorTracks[4] = stackPos(4);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_itemAppearsOnGround(ScriptState *script) {
|
2005-12-08 17:19:18 +00:00
|
|
|
debug(3, "cmd_itemAppearsOnGround(0x%X) (%d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2));
|
2005-12-09 19:49:47 +00:00
|
|
|
processItemDrop(_currentCharacter->sceneId, stackPos(0), stackPos(1), stackPos(2), 2, 0);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setNoDrawShapesFlag(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setNoDrawShapesFlag");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_fadeEntirePalette(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_fadeEntirePalette");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_itemOnGroundHere(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_itemOnGroundHere");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_queryCauldronState(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_queryCauldronState");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setCauldronState(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setCauldronState");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_queryCrystalState(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_queryCrystalState");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setCrystalState(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setCrystalState");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setPaletteRange(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setPaletteRange");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_shrinkBrandonDown(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_shrinkBrandonDown");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_growBrandonUp(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_growBrandonUp");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setBrandonScaleXAndY(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setBrandonScaleXAndY");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_resetScaleMode(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_resetScaleMode");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getScaleDepthTableValue(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_getScaleDepthTableValue");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setScaleDepthTableValue(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setScaleDepthTableValue");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_message(ScriptState *script) {
|
2005-11-27 05:49:35 +00:00
|
|
|
if (_features & GF_TALKIE) {
|
2005-11-27 10:02:23 +00:00
|
|
|
debug(3, "cmd_message(0x%X) (%d, '%s', %d)", script, stackPos(0), stackPosString(1), stackPos(2));
|
2005-11-27 05:49:35 +00:00
|
|
|
drawSentenceCommand(stackPosString(1), stackPos(2));
|
|
|
|
} else {
|
2005-11-27 10:02:23 +00:00
|
|
|
debug(3, "cmd_message(0x%X) ('%s', %d)", script, stackPosString(0), stackPos(1));
|
2005-11-27 05:49:35 +00:00
|
|
|
drawSentenceCommand(stackPosString(0), stackPos(1));
|
|
|
|
}
|
|
|
|
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_checkClickOnNPC(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_checkClickOnNPC");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_getFoyerItem(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_getFoyerItem");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setFoyerItem(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setFoyerItem");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setNoItemDropRegion(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_setNoItemDropRegion(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
2005-10-29 18:37:40 +00:00
|
|
|
addToNoDropRects(stackPos(0), stackPos(1), stackPos(2), stackPos(3));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_walkMalcolmOn(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_walkMalcolmOn");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_passiveProtection(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_passiveProtection");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setPlayingLoop(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_setPlayingLoop");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_brandonToStoneSequence(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_brandonToStoneSequence");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_brandonHealingSequence(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_brandonHealingSequence");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_protectCommandLine(ScriptState *script) {
|
2005-12-09 14:52:31 +00:00
|
|
|
debug(3, "cmd_protectCommandLine(0x%X) (%d)", script, stackPos(0));
|
|
|
|
return stackPos(0);
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_pauseMusicSeconds(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_pauseMusicSeconds");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_resetMaskRegion(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_resetMaskRegion");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_setPaletteChangeFlag(ScriptState *script) {
|
2005-12-10 15:52:38 +00:00
|
|
|
debug(3, "cmd_setPaletteChangeFlag(0x%X) (%d)", script, stackPos(0));
|
|
|
|
_paletteChanged = stackPos(0);
|
|
|
|
return _paletteChanged;
|
2005-10-29 18:37:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_fillRect(ScriptState *script) {
|
|
|
|
warning("STUB: cmd_fillRect");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int KyraEngine::cmd_dummy(ScriptState *script) {
|
2005-11-18 23:55:31 +00:00
|
|
|
debug(3, "cmd_dummy(0x%X) ()", script);
|
2005-10-29 18:37:40 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2004-10-15 06:06:47 +00:00
|
|
|
} // end of namespace Kyra
|