diff options
author | Eugene Sandulenko | 2005-07-03 20:02:56 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2005-07-03 20:02:56 +0000 |
commit | de14b2337ff9a5a3e620c5d0a75e1df749487e61 (patch) | |
tree | e1b307f54584bd8d63b39fea303812a98374360e /saga | |
parent | 1fd2c55051821557f158fbabf8a8471a1dfa69ab (diff) | |
download | scummvm-rg350-de14b2337ff9a5a3e620c5d0a75e1df749487e61.tar.gz scummvm-rg350-de14b2337ff9a5a3e620c5d0a75e1df749487e61.tar.bz2 scummvm-rg350-de14b2337ff9a5a3e620c5d0a75e1df749487e61.zip |
Implementation of sfShowMap. This was latest unimplemented script function :)
svn-id: r18487
Diffstat (limited to 'saga')
-rw-r--r-- | saga/interface.cpp | 176 | ||||
-rw-r--r-- | saga/interface.h | 8 | ||||
-rw-r--r-- | saga/render.cpp | 5 | ||||
-rw-r--r-- | saga/render.h | 19 | ||||
-rw-r--r-- | saga/resnames.h | 4 | ||||
-rw-r--r-- | saga/script.h | 2 | ||||
-rw-r--r-- | saga/sfuncs.cpp | 9 |
7 files changed, 175 insertions, 48 deletions
diff --git a/saga/interface.cpp b/saga/interface.cpp index a803a116ba..e0ef3c5232 100644 --- a/saga/interface.cpp +++ b/saga/interface.cpp @@ -29,8 +29,10 @@ #include "saga/console.h" #include "saga/font.h" #include "saga/objectmap.h" +#include "saga/isomap.h" #include "saga/itedata.h" #include "saga/puzzle.h" +#include "saga/render.h" #include "saga/rscfile_mod.h" #include "saga/scene.h" #include "saga/script.h" @@ -38,6 +40,7 @@ #include "saga/interface.h" +#include "common/system.h" #include "common/timer.h" namespace Saga { @@ -265,8 +268,7 @@ void Interface::restoreMode() { } void Interface::setMode(int mode) { - // TODO: Is this where we should hide/show the mouse cursor? - debug(0, "Interface::setMode %i", mode); + debug(5, "Interface::setMode %i", mode); if (mode == kPanelMain) { _inMainMode = true; _saveReminderState = 1; //TODO: blinking timeout @@ -280,35 +282,38 @@ void Interface::setMode(int mode) { _panelMode = mode; switch (_panelMode) { - case kPanelMain: - _mainPanel.currentButton = NULL; - break; - case kPanelConverse: - _conversePanel.currentButton = NULL; - converseDisplayText(); - break; - case kPanelOption: - _optionPanel.currentButton = NULL; - _vm->fillSaveList(); - calcOptionSaveSlider(); - if (_optionSaveFileTitleNumber >= _vm->getDisplayInfo().optionSaveFileVisible) { - _optionSaveFileTitleNumber = _vm->getDisplayInfo().optionSaveFileVisible - 1; - } - break; - case kPanelLoad: - _loadPanel.currentButton = NULL; - break; - case kPanelQuit: - _quitPanel.currentButton = NULL; - break; - case kPanelSave: - _savePanel.currentButton = NULL; - _textInputMaxWidth = _saveEdit->width - 10; - _textInput = true; - _textInputStringLength = strlen(_textInputString); - _textInputPos = _textInputStringLength + 1; - _textInputRepeatPhase = 0; - break; + case kPanelMain: + _mainPanel.currentButton = NULL; + break; + case kPanelConverse: + _conversePanel.currentButton = NULL; + converseDisplayText(); + break; + case kPanelOption: + _optionPanel.currentButton = NULL; + _vm->fillSaveList(); + calcOptionSaveSlider(); + if (_optionSaveFileTitleNumber >= _vm->getDisplayInfo().optionSaveFileVisible) { + _optionSaveFileTitleNumber = _vm->getDisplayInfo().optionSaveFileVisible - 1; + } + break; + case kPanelLoad: + _loadPanel.currentButton = NULL; + break; + case kPanelQuit: + _quitPanel.currentButton = NULL; + break; + case kPanelSave: + _savePanel.currentButton = NULL; + _textInputMaxWidth = _saveEdit->width - 10; + _textInput = true; + _textInputStringLength = strlen(_textInputString); + _textInputPos = _textInputStringLength + 1; + _textInputRepeatPhase = 0; + break; + case kPanelMap: + mapPanelShow(); + break; } draw(); @@ -438,6 +443,9 @@ bool Interface::processAscii(uint16 ascii, bool synthetic) { break; } + case kPanelMap: + mapPanelClean(); + break; } return false; } @@ -1287,6 +1295,11 @@ void Interface::update(const Point& mousePoint, int updateFlag) { } } + if (_panelMode == kPanelMap) { + if (updateFlag & UPDATE_MOUSECLICK) + mapPanelClean(); + } + _lastMousePoint = mousePoint; } @@ -2006,5 +2019,106 @@ void Interface::loadState(Common::InSaveFile *in) { updateInventory(0); } +void Interface::mapPanelShow() { + byte *resource; + size_t resourceLength, imageLength; + SURFACE *backBuffer; + Point origin; + byte *image; + int imageWidth, imageHeight; + int result; + const byte *pal; + PALENTRY cPal[PAL_ENTRIES]; + + _vm->_gfx->showCursor(false); + + backBuffer = _vm->_gfx->getBackBuffer(); + + origin.x = 0; + origin.y = 0; + + result = RSC_LoadResource(_interfaceContext, RID_ITE_TYCHO_MAP, &resource, &resourceLength); + if ((result != SUCCESS) || (resourceLength == 0)) { + error("Interface::mapPanelShow(): unable to load Tycho map resource"); + } + + _vm->_gfx->getCurrentPal(_mapSavedPal); + + for (int i = 0; i < 6 ; i++) { + _vm->_gfx->palToBlack(backBuffer, _mapSavedPal, 0.2 * i); + _vm->_render->drawScene(); + _vm->_system->delayMillis(5); + } + + _vm->_render->setFlag(RF_MAP); + + _vm->decodeBGImage(resource, resourceLength, &image, &imageLength, &imageWidth, &imageHeight); + pal = _vm->getImagePal(resource, resourceLength); + + for (int i = 0; i < PAL_ENTRIES; i++) { + cPal[i].red = *pal++; + cPal[i].green = *pal++; + cPal[i].blue = *pal++; + } + + bufToSurface(backBuffer, image, imageWidth, imageHeight, NULL, &origin); + + // Evil Evil + for (int i = 0; i < 6 ; i++) { + _vm->_gfx->blackToPal(backBuffer, cPal, 0.2 * i); + _vm->_render->drawScene(); + _vm->_system->delayMillis(5); + } + + RSC_FreeResource(resource); + free(image); + + setSaveReminderState(false); + + _mapPanelCrossHairState = true; +} + +void Interface::mapPanelClean() { + SURFACE *backBuffer; + PALENTRY pal[PAL_ENTRIES]; + + backBuffer = _vm->_gfx->getBackBuffer(); + + _vm->_gfx->getCurrentPal(pal); + + for (int i = 0; i < 6 ; i++) { + _vm->_gfx->palToBlack(backBuffer, pal, 0.2 * i); + _vm->_render->drawScene(); + _vm->_system->delayMillis(5); + } + + _vm->_render->clearFlag(RF_MAP); + setMode(kPanelMain); + + _vm->_gfx->showCursor(true); + _vm->_render->drawScene(); + + for (int i = 0; i < 6 ; i++) { + _vm->_gfx->blackToPal(backBuffer, _mapSavedPal, 0.2 * i); + _vm->_render->drawScene(); + _vm->_system->delayMillis(5); + } +} + +void Interface::mapPanelDrawCrossHair() { + SURFACE *backBuffer; + + backBuffer = _vm->_gfx->getBackBuffer(); + _mapPanelCrossHairState = !_mapPanelCrossHairState; + + Point mapPosition = _vm->_isoMap->getMapPosition(); + Rect screen(_vm->getDisplayWidth(), _vm->getSceneHeight()); + + if (screen.contains(mapPosition)) { + _vm->_sprite->draw(backBuffer, _vm->_sprite->_mainSprites, + _mapPanelCrossHairState? RID_ITE_SPR_XHAIR1 : RID_ITE_SPR_XHAIR2, + mapPosition, 256); + } +} } // End of namespace Saga diff --git a/saga/interface.h b/saga/interface.h index 32f6884e22..fc3c89821f 100644 --- a/saga/interface.h +++ b/saga/interface.h @@ -275,6 +275,8 @@ public: void saveState(Common::OutSaveFile *out); void loadState(Common::InSaveFile *in); + void mapPanelDrawCrossHair(); + private: void handleMainUpdate(const Point& mousePoint); // main panel update void handleMainClick(const Point& mousePoint); // main panel click @@ -309,6 +311,9 @@ private: void handleSaveUpdate(const Point& mousePoint); // save panel update void handleSaveClick(const Point& mousePoint); // save panel click + void mapPanelShow(); + void mapPanelClean(); + void lockMode() { _lockedMode = _panelMode; } void unlockMode() { _panelMode = _lockedMode; } @@ -436,6 +441,9 @@ private: int _textInputRepeatPhase; uint16 _textInputRepeatChar; + + PALENTRY _mapSavedPal[PAL_ENTRIES]; + bool _mapPanelCrossHairState; }; } // End of namespace Saga diff --git a/saga/render.cpp b/saga/render.cpp index 8270c5939e..f93dadbf72 100644 --- a/saga/render.cpp +++ b/saga/render.cpp @@ -111,7 +111,7 @@ int Render::drawScene() { // Get mouse coordinates mouse_pt = _vm->mousePos(); - if (/*_vm->_interface->getMode() != kPanelPlacard*/!(_flags & RF_PLACARD)) { + if (/*_vm->_interface->getMode() != kPanelPlacard*/!(_flags & (RF_PLACARD | RF_MAP))) { // Display scene background _vm->_scene->draw(); @@ -136,6 +136,9 @@ int Render::drawScene() { } } + if (_flags & RF_MAP) + _vm->_interface->mapPanelDrawCrossHair(); + if ((_vm->_interface->getMode() == kPanelOption) || (_vm->_interface->getMode() == kPanelQuit) || (_vm->_interface->getMode() == kPanelLoad) || diff --git a/saga/render.h b/saga/render.h index 2fca248868..939e4bf9ea 100644 --- a/saga/render.h +++ b/saga/render.h @@ -32,14 +32,15 @@ namespace Saga { #define PAUSEGAME_MSG "PAWS GAME" enum RENDER_FLAGS { - RF_SHOW_FPS = 0x01, - RF_PALETTE_TEST = 0x02, - RF_TEXT_TEST = 0x04, - RF_OBJECTMAP_TEST = 0x08, - RF_RENDERPAUSE = 0x10, - RF_GAMEPAUSE = 0x20, - RF_PLACARD = 0x40, - RF_ACTOR_PATH_TEST = 0x80 + RF_SHOW_FPS = (1 << 0), + RF_PALETTE_TEST = (1 << 1), + RF_TEXT_TEST = (1 << 2), + RF_OBJECTMAP_TEST = (1 << 3), + RF_RENDERPAUSE = (1 << 4), + RF_GAMEPAUSE = (1 << 5), + RF_PLACARD = (1 << 6), + RF_ACTOR_PATH_TEST = (1 << 7), + RF_MAP = (1 << 8) }; struct BUFFER_INFO { @@ -87,7 +88,7 @@ private: unsigned int _fps; unsigned int _framecount; - unsigned int _flags; + uint32 _flags; }; } // End of namespace Saga diff --git a/saga/resnames.h b/saga/resnames.h index cd362d7ea3..02d2af24d2 100644 --- a/saga/resnames.h +++ b/saga/resnames.h @@ -71,6 +71,10 @@ namespace Saga { #define RID_ITE_ACTOR_NAMES 36 //actors names #define RID_ITE_DEFAULT_PORTRAITS 125 +#define RID_ITE_TYCHO_MAP 1686 +#define RID_ITE_SPR_XHAIR1 (73 + 9) +#define RID_ITE_SPR_XHAIR2 (74 + 9) + #define RID_IHNM_MAIN_PANEL 9 #define RID_IHNM_CONVERSE_PANEL 10 #define RID_IHNM_OPTION_PANEL 11 // TODO: verify this diff --git a/saga/script.h b/saga/script.h index 006bf7312d..80cfc78ab5 100644 --- a/saga/script.h +++ b/saga/script.h @@ -530,7 +530,7 @@ private: void sfPickClimbOutPos(SCRIPTFUNC_PARAMS); void sfTossRif(SCRIPTFUNC_PARAMS); void sfShowControls(SCRIPTFUNC_PARAMS); - void SF_showMap(SCRIPTFUNC_PARAMS); + void sfShowMap(SCRIPTFUNC_PARAMS); void sfPuzzleWon(SCRIPTFUNC_PARAMS); void sfEnableEscape(SCRIPTFUNC_PARAMS); void sfPlaySound(SCRIPTFUNC_PARAMS); diff --git a/saga/sfuncs.cpp b/saga/sfuncs.cpp index 42c5a4282d..56ec2f69c3 100644 --- a/saga/sfuncs.cpp +++ b/saga/sfuncs.cpp @@ -120,7 +120,7 @@ void Script::setupScriptFuncList(void) { OPCODE(sfPickClimbOutPos), OPCODE(sfTossRif), OPCODE(sfShowControls), - OPCODE(SF_showMap), + OPCODE(sfShowMap), OPCODE(sfPuzzleWon), OPCODE(sfEnableEscape), OPCODE(sfPlaySound), @@ -1643,11 +1643,8 @@ void Script::sfShowControls(SCRIPTFUNC_PARAMS) { } // Script function #67 (0x43) -void Script::SF_showMap(SCRIPTFUNC_PARAMS) { - for (int i = 0; i < nArgs; i++) - thread->pop(); - - debug(0, "STUB: SF_showMap(), %d args", nArgs); +void Script::sfShowMap(SCRIPTFUNC_PARAMS) { + _vm->_interface->setMode(kPanelMap); } // Script function #68 (0x44) |