Implemented opcode 30: o2_addItemToCurScene

svn-id: r31140
This commit is contained in:
Johannes Schickel 2008-03-16 13:39:40 +00:00
parent 2a95c653eb
commit 3bfa70bc3e
3 changed files with 24 additions and 1 deletions

View File

@ -2117,7 +2117,7 @@ void KyraEngine_v2::setupOpcodeTable() {
// 0x1c
OpcodeUnImpl(),
OpcodeUnImpl(),
OpcodeUnImpl(),
Opcode(o2_addItemToCurScene),
OpcodeUnImpl(),
// 0x20
Opcode(o2_checkForItem),

View File

@ -952,6 +952,7 @@ protected:
int o2_wsaOpen(ScriptState *script);
int o2_displayWsaSequentialFrames(ScriptState *script);
int o2_displayWsaSequence(ScriptState *script);
int o2_addItemToCurScene(ScriptState *script);
int o2_checkForItem(ScriptState *script);
int o2_defineItem(ScriptState *script);
int o2_removeItemFromInventory(ScriptState *script);

View File

@ -311,6 +311,28 @@ int KyraEngine_v2::o2_displayWsaSequence(ScriptState *script) {
return 0;
}
int KyraEngine_v2::o2_addItemToCurScene(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "o2_addItemToCurScene(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
const int16 id = stackPos(0);
int x = stackPos(1);
int y = stackPos(2);
int freeItem = findFreeItem();
x = MAX(14, x);
x = MIN(304, x);
y = MAX(14, y);
y = MIN(136, y);
if (freeItem >= 0) {
_itemList[freeItem].id = id;
_itemList[freeItem].x = x;
_itemList[freeItem].y = y;
_itemList[freeItem].sceneId = _mainCharacter.sceneId;
addItemToAnimList(freeItem);
refreshAnimObjectsIfNeed();
}
return 0;
}
int KyraEngine_v2::o2_checkForItem(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "o2_checkForItem(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
return findItem(stackPos(0), stackPos(1)) == -1 ? 0 : 1;