[Scummvm-cvs-logs] SF.net SVN: scummvm: [31131] scummvm/trunk/engines/kyra
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Sat Mar 15 20:55:05 CET 2008
Revision: 31131
http://scummvm.svn.sourceforge.net/scummvm/?rev=31131&view=rev
Author: lordhoto
Date: 2008-03-15 12:55:05 -0700 (Sat, 15 Mar 2008)
Log Message:
-----------
Implemented opcodes:
- 36: o2_removeItemFromInventory
- 64: o2_disableAnimObject
- 65: o2_enableAnimObject
- 101: o2_showLetter
- 115: o2_setSceneAnimPosAndUpdate
Modified Paths:
--------------
scummvm/trunk/engines/kyra/gui_v2.cpp
scummvm/trunk/engines/kyra/kyra_v2.cpp
scummvm/trunk/engines/kyra/kyra_v2.h
scummvm/trunk/engines/kyra/script_v2.cpp
Modified: scummvm/trunk/engines/kyra/gui_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_v2.cpp 2008-03-15 15:25:49 UTC (rev 31130)
+++ scummvm/trunk/engines/kyra/gui_v2.cpp 2008-03-15 19:55:05 UTC (rev 31131)
@@ -642,6 +642,23 @@
return 0;
}
+int KyraEngine_v2::getInventoryItemSlot(uint16 item) {
+ for (int i = 0; i < 20; ++i) {
+ if (_mainCharacter.inventory[i] == item)
+ return i;
+ }
+ return -1;
+}
+
+void KyraEngine_v2::removeItemFromInventory(int slot) {
+ _mainCharacter.inventory[slot] = 0xFFFF;
+ if (slot < 10) {
+ _screen->hideMouse();
+ clearInventorySlot(slot, 0);
+ _screen->showMouse();
+ }
+}
+
bool KyraEngine_v2::checkInventoryItemExchange(uint16 handItem, int slot) {
bool removeItem = false;
uint16 newItem = 0xFFFF;
Modified: scummvm/trunk/engines/kyra/kyra_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.cpp 2008-03-15 15:25:49 UTC (rev 31130)
+++ scummvm/trunk/engines/kyra/kyra_v2.cpp 2008-03-15 19:55:05 UTC (rev 31131)
@@ -1210,6 +1210,20 @@
_screen->copyBlockToPage(2, 0, 0, 320, 144, _gamePlayBuffer);
}
+void KyraEngine_v2::backUpPage0() {
+ if (_screenBuffer) {
+ _screen->hideMouse();
+ memcpy(_screenBuffer, _screen->getCPagePtr(0), 64000);
+ _screen->showMouse();
+ }
+}
+
+void KyraEngine_v2::restorePage0() {
+ restorePage3();
+ if (_screenBuffer)
+ _screen->copyBlockToPage(0, 0, 0, 320, 200, _screenBuffer);
+}
+
void KyraEngine_v2::updateCharPal(int unk1) {
static bool unkVar1 = false;
@@ -2112,7 +2126,7 @@
OpcodeUnImpl(),
Opcode(o2_defineItem),
// 0x24
- OpcodeUnImpl(),
+ Opcode(o2_removeItemFromInventory),
Opcode(o2_countItemInInventory),
OpcodeUnImpl(),
Opcode(o2_queryGameFlag),
@@ -2147,8 +2161,8 @@
Opcode(o2_drawSceneShape),
Opcode(o2_drawSceneShapeOnPage),
// 0x40
- OpcodeUnImpl(),
- OpcodeUnImpl(),
+ Opcode(o2_disableAnimObject),
+ Opcode(o2_enableAnimObject),
Opcode(o2_dummy),
OpcodeUnImpl(),
// 0x44
@@ -2193,8 +2207,8 @@
OpcodeUnImpl(),
// 0x64
OpcodeUnImpl(),
+ Opcode(o2_showLetter),
OpcodeUnImpl(),
- OpcodeUnImpl(),
Opcode(o2_fillRect),
// 0x68
OpcodeUnImpl(),
@@ -2210,7 +2224,7 @@
Opcode(o2_defineSceneAnim),
Opcode(o2_updateSceneAnim),
Opcode(o2_updateSceneAnim),
- OpcodeUnImpl(),
+ Opcode(o2_setSceneAnimPosAndUpdate),
// 0x74
Opcode(o2_useItemOnMainChar),
Opcode(o2_startDialogue),
Modified: scummvm/trunk/engines/kyra/kyra_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.h 2008-03-15 15:25:49 UTC (rev 31130)
+++ scummvm/trunk/engines/kyra/kyra_v2.h 2008-03-15 19:55:05 UTC (rev 31131)
@@ -327,6 +327,9 @@
void restorePage3();
uint8 *_screenBuffer;
+ void backUpPage0();
+ void restorePage0();
+
uint8 *_maskPage;
uint8 *_gfxBackUpRect;
@@ -567,6 +570,8 @@
static const int _inventoryY[];
static const uint16 _itemMagicTable[];
+ int getInventoryItemSlot(uint16 item);
+ void removeItemFromInventory(int slot);
bool checkInventoryItemExchange(uint16 item, int slot);
void drawInventoryShape(int page, uint16 item, int slot);
void clearInventorySlot(int slot, int page);
@@ -946,6 +951,7 @@
int o2_wsaOpen(ScriptState *script);
int o2_checkForItem(ScriptState *script);
int o2_defineItem(ScriptState *script);
+ int o2_removeItemFromInventory(ScriptState *script);
int o2_countItemInInventory(ScriptState *script);
int o2_queryGameFlag(ScriptState *script);
int o2_resetGameFlag(ScriptState *script);
@@ -965,6 +971,8 @@
int o2_setCharPalEntry(ScriptState *script);
int o2_drawSceneShape(ScriptState *script);
int o2_drawSceneShapeOnPage(ScriptState *script);
+ int o2_disableAnimObject(ScriptState *script);
+ int o2_enableAnimObject(ScriptState *script);
int o2_restoreBackBuffer(ScriptState *script);
int o2_update(ScriptState *script);
int o2_fadeScenePal(ScriptState *script);
@@ -977,6 +985,7 @@
int o2_playWanderScoreViaMap(ScriptState *script);
int o2_playSoundEffect(ScriptState *script);
int o2_getRand(ScriptState *script);
+ int o2_showLetter(ScriptState *script);
int o2_fillRect(ScriptState *script);
int o2_encodeShape(ScriptState *script);
int o2_defineRoomEntrance(ScriptState *script);
@@ -984,6 +993,7 @@
int o2_setSpecialSceneScriptRunTime(ScriptState *script);
int o2_defineSceneAnim(ScriptState *script);
int o2_updateSceneAnim(ScriptState *script);
+ int o2_setSceneAnimPosAndUpdate(ScriptState *script);
int o2_useItemOnMainChar(ScriptState *script);
int o2_startDialogue(ScriptState *script);
int o2_zanthRandomChat(ScriptState *script);
Modified: scummvm/trunk/engines/kyra/script_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v2.cpp 2008-03-15 15:25:49 UTC (rev 31130)
+++ scummvm/trunk/engines/kyra/script_v2.cpp 2008-03-15 19:55:05 UTC (rev 31131)
@@ -273,6 +273,15 @@
return freeItem;
}
+int KyraEngine_v2::o2_removeItemFromInventory(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "o2_removeItemFromInventory(%p) (%d)", (const void *)script, stackPos(0));
+ uint16 item = stackPos(0);
+ int slot = -1;
+ while ((slot = getInventoryItemSlot(stackPos(0))) != -1)
+ removeItemFromInventory(slot);
+ return 0;
+}
+
int KyraEngine_v2::o2_countItemInInventory(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "o2_countItemInInventory(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
uint16 item = stackPos(1);
@@ -424,6 +433,18 @@
return 0;
}
+int KyraEngine_v2::o2_disableAnimObject(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "o2_disableAnimObject(%p) (%d)", (const void *)script, stackPos(0));
+ _animObjects[stackPos(0)+1].enabled = false;
+ return 0;
+}
+
+int KyraEngine_v2::o2_enableAnimObject(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "o2_enableAnimObject(%p) (%d)", (const void *)script, stackPos(0));
+ _animObjects[stackPos(0)+1].enabled = true;
+ return 0;
+}
+
int KyraEngine_v2::o2_restoreBackBuffer(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "o2_restoreBackBuffer(%p) (%d)", (const void *)script, stackPos(0));
int disable = stackPos(0);
@@ -543,6 +564,66 @@
return _rnd.getRandomNumberRng(stackPos(0), stackPos(1));
}
+int KyraEngine_v2::o2_showLetter(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "o2_showLetter(%p) (%d)", (const void *)script, stackPos(0));
+ const int letter = stackPos(0);
+ char filename[16];
+
+ _screen->hideMouse();
+
+ showMessage(0, 0xCF);
+ displayInvWsaLastFrame();
+ backUpPage0();
+
+ memcpy(_screen->getPalette(2), _screen->getPalette(0), 768);
+
+ _screen->clearPage(3);
+ _screen->loadBitmap("_NOTE.CPS", 3, 3, 0);
+
+ sprintf(filename, "_NTEPAL%.1d.COL", letter+1);
+ _res->loadFileToBuf(filename, _screen->getPalette(0), 768);
+
+ _screen->fadeToBlack(0x14);
+
+ sprintf(filename, "LETTER%.1d.", letter);
+ strcat(filename, _languageExtension[_lang]);
+
+ uint8 *letterBuffer = _res->fileData(filename, 0);
+ if (letterBuffer) {
+ bookDecodeText(letterBuffer);
+ bookPrintText(2, letterBuffer, 0xC, 0xA, 0x20);
+ }
+
+ _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
+ _screen->fadePalette(_screen->getPalette(0), 0x14);
+ _screen->setMouseCursor(0, 0, getShapePtr(0));
+ _system->warpMouse(280, 160);
+
+ _screen->showMouse();
+
+ bool running = true;
+ while (running) {
+ int inputFlag = checkInput(0);
+ removeInputTop();
+
+ if (inputFlag == 198 || inputFlag == 199)
+ running = false;
+
+ _screen->updateScreen();
+ _system->delayMillis(10);
+ }
+
+ _screen->hideMouse();
+ _screen->fadeToBlack(0x14);
+ restorePage0();
+ memcpy(_screen->getPalette(0), _screen->getPalette(2), 768);
+ _screen->fadePalette(_screen->getPalette(0), 0x14);
+ setHandItem(_itemInHand);
+ _screen->showMouse();
+
+ return 0;
+}
+
int KyraEngine_v2::o2_fillRect(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "o2_fillRect(%p) (%d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
_screen->fillRect(stackPos(1), stackPos(2), stackPos(1)+stackPos(3), stackPos(2)+stackPos(4), stackPos(5), stackPos(0));
@@ -640,6 +721,20 @@
return 0;
}
+int KyraEngine_v2::o2_setSceneAnimPosAndUpdate(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "o2_updateSceneAnim(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3));
+ const int anim = stackPos(0);
+ _sceneAnims[anim].x2 = stackPos(1);
+ _sceneAnims[anim].y2 = stackPos(2);
+ if (_sceneAnims[anim].flags & 2) {
+ _sceneAnims[anim].x = stackPos(1);
+ _sceneAnims[anim].y = stackPos(2);
+ }
+ updateSceneAnim(anim, stackPos(3));
+ _specialSceneScriptRunFlag = false;
+ return 0;
+}
+
int KyraEngine_v2::o2_useItemOnMainChar(ScriptState *script) {
ScriptState tmpScript;
_scriptInterpreter->initScript(&tmpScript, &_npcScriptData);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list