diff options
author | Oystein Eftevaag | 2006-01-13 03:27:01 +0000 |
---|---|---|
committer | Oystein Eftevaag | 2006-01-13 03:27:01 +0000 |
commit | d47ae2ca9f8326dc05f95c23f6e7ee8ffa132445 (patch) | |
tree | e334b0dec0c9333e7c8e54a1b623f37c6555908e | |
parent | 37e82c8c46fa40a85f64549158a5708942bfbeb1 (diff) | |
download | scummvm-rg350-d47ae2ca9f8326dc05f95c23f6e7ee8ffa132445.tar.gz scummvm-rg350-d47ae2ca9f8326dc05f95c23f6e7ee8ffa132445.tar.bz2 scummvm-rg350-d47ae2ca9f8326dc05f95c23f6e7ee8ffa132445.zip |
Implemented a few drawing functions used by the menu, corrected a few incorrect
opcode debug messages, and blocked unnecessary sprite anim script looping.
svn-id: r19992
-rw-r--r-- | kyra/gui.cpp | 6 | ||||
-rw-r--r-- | kyra/kyra.cpp | 1 | ||||
-rw-r--r-- | kyra/kyra.h | 2 | ||||
-rw-r--r-- | kyra/screen.cpp | 73 | ||||
-rw-r--r-- | kyra/screen.h | 3 | ||||
-rw-r--r-- | kyra/script_v1.cpp | 6 | ||||
-rw-r--r-- | kyra/sprites.cpp | 2 | ||||
-rw-r--r-- | kyra/staticres.cpp | 2 |
8 files changed, 91 insertions, 4 deletions
diff --git a/kyra/gui.cpp b/kyra/gui.cpp index 84b8df406e..1d28182425 100644 --- a/kyra/gui.cpp +++ b/kyra/gui.cpp @@ -289,5 +289,11 @@ void KyraEngine::processButton(Button *button) { (this->*callback)(button); } } + +int KyraEngine::buttonMenuCallback(Button *caller) { + warning("Menu not implemented yet!"); + return 0; +} + } // end of namespace Kyra diff --git a/kyra/kyra.cpp b/kyra/kyra.cpp index d680d58508..6d4f2dc100 100644 --- a/kyra/kyra.cpp +++ b/kyra/kyra.cpp @@ -5546,6 +5546,7 @@ int KyraEngine::processSceneChange(int *table, int unk1, int frameReset) { uint32 nextFrame = 0; _abortWalkFlag = false; _mousePressFlag = false; + while (running) { if (_abortWalkFlag) { *table = 8; diff --git a/kyra/kyra.h b/kyra/kyra.h index bf1821d741..eb2ef3c7f3 100644 --- a/kyra/kyra.h +++ b/kyra/kyra.h @@ -597,6 +597,8 @@ protected: int buttonInventoryCallback(Button *caller); int buttonAmuletCallback(Button *caller); + int buttonMenuCallback(Button *caller); + Button *initButton(Button *list, Button *newButton); void processButtonList(Button *list); void processButton(Button *button); diff --git a/kyra/screen.cpp b/kyra/screen.cpp index c9d6a08687..aeeb374f19 100644 --- a/kyra/screen.cpp +++ b/kyra/screen.cpp @@ -435,6 +435,79 @@ void Screen::fillRect(int x1, int y1, int x2, int y2, uint8 color, int pageNum) } } +void Screen::drawBox(int x1, int y1, int x2, int y2, int color1, int color2) { + debug(9, "Screen::drawBox(%i, %i, %i, %i, %i, %i)", x1, y1, x2, y2, color1, color2); + + //if (_menuUnk1 == 0) + //return; + + hideMouse(); + + fillRect(x1, y1, x2, y1 + 1, color1); + fillRect(x2 - 1, y1, x2, y2, color1); + + drawClippedLine(x1, y1, x1, y2, color2); + drawClippedLine(x1 + 1, y1 + 1, x1 + 1, y2 - 1, color2); + drawClippedLine(x1, y2, x2, y2, color2); + drawClippedLine(x1, y2 - 1, x2 - 1, y2 - 1, color2); + + showMouse(); +} + +void Screen::drawClippedLine(int x1, int y1, int x2, int y2, int color) { + debug(9, "Screen::drawClippedLine(%i, %i, %i, %i, %i)", x1, y1, x2, y2, color); + + if (x1 < 0) + x1 = 0; + else if (x1 > 319) + x1 = 319; + + if (x2 < 0) + x2 = 0; + else if (x2 > 319) + x2 = 319; + + if (y1 < 0) + y1 = 0; + else if (y1 > 199) + y1 = 199; + + if (y2 < 0) + y2 = 0; + else if (y2 > 199) + y2 = 199; + + if (x1 == x2) + if (y1 > y2) + drawLine(true, x1, y2, y1 - y2 + 1, color); + else + drawLine(true, x1, y1, y2 - y1 + 1, color); + else + if (x1 > x2) + drawLine(false, x2, y1, x1 - x2 + 1, color); + else + drawLine(false, x1, y1, x2 - x1 + 1, color); +} + +void Screen::drawLine(bool horizontal, int x, int y, int length, int color) { + debug(9, "Screen::drawLine(%i, %i, %i, %i, %i)", horizontal, x, y, length, color); + + uint8 *ptr = getPagePtr(_curPage) + y * SCREEN_W + x; + + if (horizontal) { + assert((y + length) <= SCREEN_H); + int currLine = 0; + while (currLine < length) { + *ptr = color; + ptr += SCREEN_W; + currLine++; + } + } else { + assert((x + length) <= SCREEN_W); + memset(ptr, color, length); + } +} + void Screen::setAnimBlockPtr(int size) { debug(9, "Screen::setAnimBlockPtr(%d)", size); free(_animBlockPtr); diff --git a/kyra/screen.h b/kyra/screen.h index fbf00c23f0..1bc769ec18 100644 --- a/kyra/screen.h +++ b/kyra/screen.h @@ -107,6 +107,9 @@ public: void copyCurPageBlock(int x, int y, int w, int h, uint8 *dst); void shuffleScreen(int sx, int sy, int w, int h, int srcPage, int dstPage, int ticks, bool transparent); void fillRect(int x1, int y1, int x2, int y2, uint8 color, int pageNum = -1); + void drawLine(bool horizontal, int x, int y, int length, int color); + void drawClippedLine(int x1, int y1, int x2, int y2, int color); + void drawBox(int x1, int y1, int x2, int y2, int color1, int color2); void setAnimBlockPtr(int size); void setTextColorMap(const uint8 *cmap); void setTextColor(const uint8 *cmap, int a, int b); diff --git a/kyra/script_v1.cpp b/kyra/script_v1.cpp index c4544ccb4c..3d7956f894 100644 --- a/kyra/script_v1.cpp +++ b/kyra/script_v1.cpp @@ -1215,7 +1215,7 @@ int KyraEngine::cmd_setFireberryGlowPalette(ScriptState *script) { } int KyraEngine::cmd_setDeathHandlerFlag(ScriptState *script) { - debug(3, "cmd_drinkPotionAnimation(0x%X) (%d)", script, stackPos(0)); + debug(3, "cmd_setDeathHandlerFlag(0x%X) (%d)", script, stackPos(0)); _deathHandler = stackPos(0); return 0; } @@ -1375,7 +1375,7 @@ int KyraEngine::cmd_setSceneAnimCurrXY(ScriptState *script) { } int KyraEngine::cmd_poisonBrandonAndRemaps(ScriptState *script) { - debug(3, "cmd_setSceneAnimCurrXY(0x%X) ()", script); + debug(3, "cmd_poisonBrandonAndRemaps(0x%X) ()", script); setBrandonPoisonFlags(1); return 0; } @@ -1440,7 +1440,7 @@ int KyraEngine::cmd_totalItemsInScene(ScriptState *script) { } int KyraEngine::cmd_restoreBrandonsMovementDelay(ScriptState *script) { - debug(3, "cmd_restoreBrandonsMovemenyDelay(0x%X) ()", script); + debug(3, "cmd_restoreBrandonsMovementDelay(0x%X) ()", script); //TODO: Use movement set by menu, instead of 5. setTimerDelay(5, 5); return 0; diff --git a/kyra/sprites.cpp b/kyra/sprites.cpp index 3e9f3e6064..243d84e191 100644 --- a/kyra/sprites.cpp +++ b/kyra/sprites.cpp @@ -136,6 +136,8 @@ void Sprites::updateSceneAnims() { if (_anims[i].reentry == 0) { data = _anims[i].script; + if (READ_LE_UINT16(data) == 0xFF8B) + continue; } else { data = _anims[i].reentry; _anims[i].reentry = 0; diff --git a/kyra/staticres.cpp b/kyra/staticres.cpp index dc6fc4662e..ea848f9964 100644 --- a/kyra/staticres.cpp +++ b/kyra/staticres.cpp @@ -714,7 +714,7 @@ const uint8 KyraEngine::_itemPosY[] = { Button KyraEngine::_buttonData[] = { { 0, 0x02, /*XXX,*/0, 0, 0, /*XXX,*/ 0x0400, 0, 0, 0, 0, 0, 0, 0, 0x05D, 0x9E, 0x13, 0x14, /*XXX,*/ 0, &KyraEngine::buttonInventoryCallback/*, XXX*/ }, - { 0, 0x01, /*XXX,*/1, 1, 1, /*XXX,*/ 0x0487, 0, 0, 0, 0, 0, 0, 0, 0x009, 0xA4, 0x36, 0x1E, /*XXX,*/ 0, 0/*opt_handleMenu, XXX*/ }, + { 0, 0x01, /*XXX,*/1, 1, 1, /*XXX,*/ 0x0487, 0, 0, 0, 0, 0, 0, 0, 0x009, 0xA4, 0x36, 0x1E, /*XXX,*/ 0, &KyraEngine::buttonMenuCallback/*, XXX*/ }, { 0, 0x03, /*XXX,*/0, 0, 0, /*XXX,*/ 0x0400, 0, 0, 0, 0, 0, 0, 0, 0x071, 0x9E, 0x13, 0x14, /*XXX,*/ 0, &KyraEngine::buttonInventoryCallback/*, XXX*/ }, { 0, 0x04, /*XXX,*/0, 0, 0, /*XXX,*/ 0x0400, 0, 0, 0, 0, 0, 0, 0, 0x085, 0x9E, 0x13, 0x14, /*XXX,*/ 0, &KyraEngine::buttonInventoryCallback/*, XXX*/ }, { 0, 0x05, /*XXX,*/0, 0, 0, /*XXX,*/ 0x0400, 0, 0, 0, 0, 0, 0, 0, 0x099, 0x9E, 0x13, 0x14, /*XXX,*/ 0, &KyraEngine::buttonInventoryCallback/*, XXX*/ }, |