[Scummvm-cvs-logs] SF.net SVN: scummvm:[41041] scummvm/trunk/engines/kyra
athrxx at users.sourceforge.net
athrxx at users.sourceforge.net
Sat May 30 21:48:14 CEST 2009
Revision: 41041
http://scummvm.svn.sourceforge.net/scummvm/?rev=41041&view=rev
Author: athrxx
Date: 2009-05-30 19:48:13 +0000 (Sat, 30 May 2009)
Log Message:
-----------
LOL: implemented some opcodes required for yvel city
Modified Paths:
--------------
scummvm/trunk/engines/kyra/lol.cpp
scummvm/trunk/engines/kyra/lol.h
scummvm/trunk/engines/kyra/script_lol.cpp
scummvm/trunk/engines/kyra/script_tim.cpp
scummvm/trunk/engines/kyra/script_tim.h
scummvm/trunk/engines/kyra/text_lol.cpp
Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp 2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/lol.cpp 2009-05-30 19:48:13 UTC (rev 41041)
@@ -101,7 +101,6 @@
_monsterShapesEx = 0;
_gameShapeMap = 0;
memset(_monsterAnimType, 0, 3);
- _pageSavedFlag = false;
_healOverlay = 0;
_swarmSpellStatus = 0;
@@ -833,7 +832,7 @@
_currentLevel = 1;
giveCredits(41, 0);
- _inventory[0] = makeItem(132, 0, 0);
+ _inventory[0] = makeItem(216, 0, 0);
_inventory[1] = makeItem(217, 0, 0);
_inventory[2] = makeItem(218, 0, 0);
@@ -1635,25 +1634,6 @@
_tim->updateBackgroundAnimation(i);
}
-void LoLEngine::savePage5() {
- if (_pageSavedFlag)
- return;
-
- _screen->copyRegionToBuffer(5, 0, 0, 320, 200, _pageBuffer2);
- _pageSavedFlag = true;
-}
-
-void LoLEngine::restorePage5() {
- if (!_pageSavedFlag)
- return;
-
- for (int i = 0; i < 6; i++)
- _tim->freeAnimStruct(i);
-
- _screen->copyBlockToPage(5, 0, 0, 320, 200, _pageBuffer2);
- _pageSavedFlag = false;
-}
-
void LoLEngine::loadTalkFile(int index) {
char file[8];
Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h 2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/lol.h 2009-05-30 19:48:13 UTC (rev 41041)
@@ -740,8 +740,10 @@
int olol_getNextActiveCharacter(EMCState *script);
int olol_paralyzePoisonCharacter(EMCState *script);
int olol_drawCharPortrait(EMCState *script);
+ int olol_getAnimationLastPart(EMCState *script);
int olol_assignSpecialGuiShape(EMCState *script);
int olol_findInventoryItem(EMCState *script);
+ int olol_restoreFadePalette(EMCState *script);
int olol_changeItemTypeOrFlag(EMCState *script);
int olol_placeInventoryItemInHand(EMCState *script);
int olol_castSpell(EMCState *script);
@@ -750,6 +752,8 @@
int olol_disableControls(EMCState *script);
int olol_enableControls(EMCState *script);
int olol_gasExplosion(EMCState *script);
+ int olol_calcNewBlockPosition(EMCState *script);
+ int olol_updateDrawPage2(EMCState *script);
int olol_characterSays(EMCState *script);
int olol_queueSpeech(EMCState *script);
int olol_getItemPrice(EMCState *script);
@@ -816,9 +820,7 @@
void generateBrightnessPalette(uint8 *src, uint8 *dst, int brightness, int modifier);
void generateFlashPalette(uint8 *src, uint8 *dst, int colorFlags);
void updateSequenceBackgroundAnimations();
- void savePage5();
- void restorePage5();
-
+
bool _dialogueField;
uint8 **_itemIconShapes;
int _numItemIconShapes;
@@ -836,8 +838,6 @@
uint8 *_characterFaceShapes[40][3];
- bool _pageSavedFlag;
-
// characters
bool addCharacter(int id);
void setTemporaryFaceFrame(int charNum, int frame, int updateDelay, int redraw);
Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp 2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/script_lol.cpp 2009-05-30 19:48:13 UTC (rev 41041)
@@ -1729,13 +1729,19 @@
int LoLEngine::olol_savePage5(EMCState *script) {
debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_savePage5(%p)", (const void *)script);
- savePage5();
+ // Not implemented: The original code uses this to back up and restore page 5 which is used
+ // to load WSA files. Since our WSA player provides its own memory buffers we don't
+ // need to use page 5.
return 1;
}
int LoLEngine::olol_restorePage5(EMCState *script) {
debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restorePage5(%p)", (const void *)script);
- restorePage5();
+ // Not implemented: The original code uses this to back up and restore page 5 which is used
+ // to load WSA files. Since our WSA player provides its own memory buffers we don't
+ // need to use page 5.
+ for (int i = 0; i < 6; i++)
+ _tim->freeAnimStruct(i);
return 1;
}
@@ -1869,7 +1875,7 @@
}
int LoLEngine::olol_drawCharPortrait(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_drawCharPortrait(%p) (%d)", (const void *)script, stackPos(0));
+ debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_drawCharPortrait(%p) (%d)", (const void *)script, stackPos(0));
int charNum = stackPos(0);
if (charNum == -1)
gui_drawAllCharPortraitsWithStats();
@@ -1878,8 +1884,13 @@
return 1;
}
+int LoLEngine::olol_getAnimationLastPart(EMCState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_getAnimationLastPart(%p) (%d)", (const void *)script, stackPos(0));
+ return _tim->resetAnimationLastPart(stackPos(0));
+}
+
int LoLEngine::olol_assignSpecialGuiShape(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_assignSpecialGuiShape(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
+ debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_assignSpecialGuiShape(%p) (%d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4));
if (stackPos(0)) {
_specialGuiShape = _levelShapes[_levelShapeProperties[_wllShapeMap[stackPos(0)]].shapeIndex[stackPos(1)]];
_specialGuiShapeX = stackPos(2);
@@ -1894,7 +1905,7 @@
}
int LoLEngine::olol_findInventoryItem(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_findInventoryItem(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
+ debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_findInventoryItem(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
if (stackPos(0) == 0) {
for (int i = 0; i < 48; i++) {
if (!_inventory[i])
@@ -1922,8 +1933,16 @@
return -1;
}
+int LoLEngine::olol_restoreFadePalette(EMCState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restoreFadePalette(%p)", (const void *)script);
+ memcpy(_screen->_currentPalette, _screen->getPalette(1), 384);
+ _screen->fadePalette(_screen->_currentPalette, 10);
+ _screen->_fadeFlag = 0;
+ return 1;
+}
+
int LoLEngine::olol_changeItemTypeOrFlag(EMCState *script) {
- debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_changeItemTypeOrFlag(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
+ debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_changeItemTypeOrFlag(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
if (stackPos(0) < 1)
return 0;
@@ -2050,6 +2069,17 @@
return 1;
}
+int LoLEngine::olol_calcNewBlockPosition(EMCState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_calcNewBlockPosition(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+ return calcNewBlockPosition(stackPos(0), stackPos(1));
+}
+
+int LoLEngine::olol_updateDrawPage2(EMCState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_updateDrawPage2(%p)", (const void *)script);
+ updateDrawPage2();
+ return 1;
+}
+
int LoLEngine::olol_characterSays(EMCState *script) {
debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_characterSays(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
if (stackPos(0) == -1) {
@@ -2576,13 +2606,13 @@
OpcodeUnImpl();
OpcodeUnImpl();
OpcodeUnImpl();
- OpcodeUnImpl();
+ Opcode(olol_getAnimationLastPart);
// 0xA4
Opcode(olol_assignSpecialGuiShape);
Opcode(olol_findInventoryItem);
+ Opcode(olol_restoreFadePalette);
OpcodeUnImpl();
- OpcodeUnImpl();
// 0xA8
OpcodeUnImpl();
@@ -2606,12 +2636,12 @@
Opcode(olol_enableControls);
OpcodeUnImpl();
Opcode(olol_gasExplosion);
- OpcodeUnImpl();
+ Opcode(olol_calcNewBlockPosition);
// 0xB8
OpcodeUnImpl();
+ Opcode(olol_updateDrawPage2);
OpcodeUnImpl();
- OpcodeUnImpl();
Opcode(olol_characterSays);
// 0xBC
Modified: scummvm/trunk/engines/kyra/script_tim.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.cpp 2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/script_tim.cpp 2009-05-30 19:48:13 UTC (rev 41041)
@@ -1065,6 +1065,13 @@
}
}
+int TIMInterpreter_LoL::resetAnimationLastPart(int animIndex) {
+ Animation *anim = &_animations[animIndex];
+ int8 res = -1;
+ SWAP(res, anim->lastPart);
+ return res;
+}
+
void TIMInterpreter_LoL::drawDialogueButtons() {
int cp = _screen->setCurPage(0);
Screen::FontId of = _screen->setFont(Screen::FID_6_FNT);
Modified: scummvm/trunk/engines/kyra/script_tim.h
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.h 2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/script_tim.h 2009-05-30 19:48:13 UTC (rev 41041)
@@ -144,6 +144,7 @@
virtual void stopBackgroundAnimation(int animIndex) {}
virtual void updateBackgroundAnimation(int animIndex) {}
virtual void playAnimationPart(int animIndex, int firstFrame, int lastFrame, int delay) {}
+ virtual int resetAnimationLastPart(int animIndex) { return -1; }
virtual void resetDialogueState(TIM *tim) {}
@@ -238,6 +239,7 @@
void stopBackgroundAnimation(int animIndex);
void updateBackgroundAnimation(int animIndex);
void playAnimationPart(int animIndex, int firstFrame, int lastFrame, int delay);
+ int resetAnimationLastPart(int animIndex);
private:
KyraEngine_v1 *vm();
Modified: scummvm/trunk/engines/kyra/text_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text_lol.cpp 2009-05-30 18:22:55 UTC (rev 41040)
+++ scummvm/trunk/engines/kyra/text_lol.cpp 2009-05-30 19:48:13 UTC (rev 41041)
@@ -77,11 +77,10 @@
for (int i = 177; i > 141; i--) {
uint32 endTime = _vm->_system->getMillis() + _vm->_tickLength;
- _screen->hideMouse();
_screen->copyRegion(83, i, 83, i - 1, 235, 3, 0, 0, Screen::CR_NO_P_CHECK);
_screen->copyRegion(83, i + 1, 83, i + 1, 235, 1, 2, 0, Screen::CR_NO_P_CHECK);
+ _vm->updateInput();
_screen->updateScreen();
- _screen->showMouse();
_vm->delayUntil(endTime);
}
@@ -98,7 +97,7 @@
}
void TextDisplayer_LoL::expandField() {
- uint8 *tmp = _vm->_pageBuffer1 + 1300;
+ uint8 *tmp = _vm->_pageBuffer1 + 13000;
if (_vm->textEnabled()) {
_vm->_fadeText = false;
@@ -110,10 +109,9 @@
for (int i = 140; i < 177; i++) {
uint32 endTime = _vm->_system->getMillis() + _vm->_tickLength;
- _screen->hideMouse();
_screen->copyRegion(0, 0, 83, i, 235, 3, 2, 0, Screen::CR_NO_P_CHECK);
+ _vm->updateInput();
_screen->updateScreen();
- _screen->showMouse();
_vm->delayUntil(endTime);
}
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