diff options
| author | uruk | 2014-01-15 16:23:12 +0100 | 
|---|---|---|
| committer | uruk | 2014-01-15 16:23:12 +0100 | 
| commit | b4af4dc8c201460699cce544e71dc2de252b821c (patch) | |
| tree | da33af9435586751742f49bd61109da6dadd8672 | |
| parent | f6c14408a3fe486abcab170d34def40e6e521e40 (diff) | |
| parent | b5498bc31462e9e055339447aaddd221c99ad7e3 (diff) | |
| download | scummvm-rg350-b4af4dc8c201460699cce544e71dc2de252b821c.tar.gz scummvm-rg350-b4af4dc8c201460699cce544e71dc2de252b821c.tar.bz2 scummvm-rg350-b4af4dc8c201460699cce544e71dc2de252b821c.zip | |
Merge branch 'master' of https://github.com/scummvm/scummvm
| -rw-r--r-- | engines/fullpipe/constants.h | 5 | ||||
| -rw-r--r-- | engines/fullpipe/modal.cpp | 291 | ||||
| -rw-r--r-- | engines/fullpipe/modal.h | 31 | ||||
| -rw-r--r-- | engines/wintermute/base/base_game.h | 3 | ||||
| -rw-r--r-- | engines/wintermute/base/saveload.cpp | 1 | 
5 files changed, 328 insertions, 3 deletions
| diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h index 00ae4258cd..1a6ecbbec8 100644 --- a/engines/fullpipe/constants.h +++ b/engines/fullpipe/constants.h @@ -100,6 +100,8 @@ namespace Fullpipe {  #define PIC_MAP_A12 5274  #define PIC_MAP_A13 5275  #define PIC_MAP_A14 5276 +#define PIC_MAP_I01 5295 +#define PIC_MAP_I02 5296  #define PIC_MAP_P01 5277  #define PIC_MAP_P02 5278  #define PIC_MAP_P03 5279 @@ -199,7 +201,6 @@ namespace Fullpipe {  #define SC_38 2072  #define SC_COMMON 321  #define SC_DBGMENU 726 -#define SC_LDR 635  #define SC_FINAL1 4999  #define SC_FINAL2 5000  #define SC_FINAL3 5001 @@ -207,6 +208,8 @@ namespace Fullpipe {  #define SC_INTRO1 3896  #define SC_INTRO2 3907  #define SC_INV 858 +#define SC_LDR 635 +#define SC_MAP 5222  #define SND_CMN_031 3516  #define SND_CMN_060 4921  #define SND_CMN_061 4922 diff --git a/engines/fullpipe/modal.cpp b/engines/fullpipe/modal.cpp index 729b4035f0..ddb5b63d6a 100644 --- a/engines/fullpipe/modal.cpp +++ b/engines/fullpipe/modal.cpp @@ -28,6 +28,8 @@  #include "fullpipe/scenes.h"  #include "fullpipe/gameloader.h" +#include "fullpipe/constants.h" +  #include "graphics/palette.h"  #include "video/avi_decoder.h" @@ -267,8 +269,295 @@ void ModalVideoPlayer::play(const char *filename) {  	}  } +ModalMap::ModalMap() { +	_mapScene = 0; +	_pic = 0; +	_isRunning = false; +	_rect1 = g_fp->_sceneRect; +	_x = g_fp->_currentScene->_x; +	_y = g_fp->_currentScene->_y; +	_flag = 0; +	_mouseX = 0; +	_mouseY = 0; +	_field_38 = 0; +	_field_3C = 0; +	_field_40 = 12; +	_rect2.top = 0; +	_rect2.left = 0; +	_rect2.bottom = 600; +	_rect2.right = 800; +} + +ModalMap::~ModalMap() { +	g_fp->_gameLoader->unloadScene(SC_MAP); + +	g_fp->_sceneRect = _rect1; + +	g_fp->_currentScene->_x = _x; +	g_fp->_currentScene->_y = _y; +} + +bool ModalMap::init(int counterdiff) { +	g_fp->setCursor(PIC_CSR_ITN); + +	if (_flag) { +		_rect2.left = _mouseX + _field_38 - g_fp->_mouseScreenPos.x; +		_rect2.top = _mouseY + _field_3C - g_fp->_mouseScreenPos.y;; +		_rect2.right = _rect2.left + 800; +		_rect2.bottom = _rect2.top + 600; + +		g_fp->_sceneRect =_rect2; + +		_mapScene->updateScrolling2(); + +		_rect2 = g_fp->_sceneRect; +	} + +	_field_40--; + +	if (_field_40 <= 0) { +		_field_40 = 12; + +		if (_pic) +			_pic->_flags ^= 4; +	} + +	return _isRunning; +} + +void ModalMap::update() { +	g_fp->_sceneRect = _rect2; + +	_mapScene->draw(); + +	g_fp->drawArcadeOverlay(1); +} + +bool ModalMap::handleMessage(ExCommand *cmd) { +	if (cmd->_messageKind != 17) +		return false; + +	switch (cmd->_messageNum) { +	case 29: +		_flag = 1; +		_mouseX = g_fp->_mouseScreenPos.x; +		_mouseY = g_fp->_mouseScreenPos.x; + +		_field_3C = _rect2.top; +		_field_38 = _rect2.left; + +		break; + +	case 30: +		_flag = 0; +		break; + +	case 36: +		if (cmd->_keyCode != 9 && cmd->_keyCode != 27 ) +			return false; + +		break; + +	case 107: +		break; + +	default: +		return false; +	} + +	_isRunning = 0; + +	return true; +} + +void ModalMap::initMap() { +	_isRunning = 1; + +	_mapScene = g_fp->accessScene(SC_MAP); + +	if (!_mapScene) +		error("ModalMap::initMap(): error accessing scene SC_MAP"); + +	PictureObject *pic; + +	for (int i = 0; i < 200; i++) { +		if (!g_fp->_mapTable[i] >> 16) +			break; + +		pic = _mapScene->getPictureObjectById(g_fp->_mapTable[i] >> 16, 0); + +		if ((g_fp->_mapTable[i] & 0xffff) == 1) +			pic->_flags |= 4; +		else +			pic->_flags &= 0xfffb; +	} + +	pic = getScenePicture(); + +	Common::Point point; +	Common::Point point2; + +	if (pic) { +		pic->getDimensions(&point); + +		_rect2.left = point.x / 2 + pic->_ox - 400; +		_rect2.top = point.y / 2 + pic->_oy - 300; +		_rect2.right = _rect2.left + 800; +		_rect2.bottom = _rect2.top + 600; + +		_mapScene->updateScrolling2(); + +		_pic = _mapScene->getPictureObjectById(PIC_MAP_I02, 0); +		_pic->getDimensions(&point2); + +		_pic->setOXY(pic->_ox + point.x / 2 - point2.x / 2, point.y - point2.y / 2 + pic->_oy - 24); +		_pic->_flags |= 4; + +		_pic = _mapScene->getPictureObjectById(PIC_MAP_I01, 0); +		_pic->getDimensions(&point2); + +		_pic->setOXY(pic->_ox + point.x / 2 - point2.x / 2, point.y - point2.y / 2 + pic->_oy - 25); +		_pic->_flags |= 4; +	} + +	g_fp->setArcadeOverlay(PIC_CSR_MAP); +} + +PictureObject *ModalMap::getScenePicture() { +	int picId = 0; + +	switch (g_fp->_currentScene->_sceneId) { +	case SC_1: +        picId = PIC_MAP_S01; +        break; +	case SC_2: +        picId = PIC_MAP_S02; +        break; +	case SC_3: +        picId = PIC_MAP_S03; +        break; +	case SC_4: +        picId = PIC_MAP_S04; +        break; +	case SC_5: +        picId = PIC_MAP_S05; +        break; +	case SC_6: +		picId = PIC_MAP_S06; +		break; +	case SC_7: +		picId = PIC_MAP_S07; +		break; +	case SC_8: +		picId = PIC_MAP_S08; +		break; +	case SC_9: +		picId = PIC_MAP_S09; +		break; +	case SC_10: +		picId = PIC_MAP_S10; +		break; +	case SC_11: +		picId = PIC_MAP_S11; +		break; +	case SC_12: +		picId = PIC_MAP_S12; +		break; +	case SC_13: +		picId = PIC_MAP_S13; +		break; +	case SC_14: +		picId = PIC_MAP_S14; +		break; +	case SC_15: +		picId = PIC_MAP_S15; +		break; +	case SC_16: +		picId = PIC_MAP_S16; +		break; +	case SC_17: +		picId = PIC_MAP_S17; +		break; +	case SC_18: +	case SC_19: +		picId = PIC_MAP_S1819; +		break; +	case SC_20: +		picId = PIC_MAP_S20; +		break; +	case SC_21: +        picId = PIC_MAP_S21; +		break; +	case SC_22: +		picId = PIC_MAP_S22; +		break; +	case SC_23: +		picId = PIC_MAP_S23_1; +		break; +	case SC_24: +		picId = PIC_MAP_S24; +		break; +	case SC_25: +		picId = PIC_MAP_S25; +		break; +	case SC_26: +		picId = PIC_MAP_S26; +		break; +	case SC_27: +		picId = PIC_MAP_S27; +		break; +	case SC_28: +		picId = PIC_MAP_S28; +		break; +	case SC_29: +		picId = PIC_MAP_S29; +		break; +	case SC_30: +		picId = PIC_MAP_S30; +		break; +	case SC_31: +		picId = PIC_MAP_S31_1; +		break; +	case SC_32: +		picId = PIC_MAP_S32_1; +		break; +	case SC_33: +		picId = PIC_MAP_S33; +		break; +	case SC_34: +		picId = PIC_MAP_S34; +		break; +	case SC_35: +		picId = PIC_MAP_S35; +		break; +	case SC_36: +		picId = PIC_MAP_S36; +		break; +	case SC_37: +		picId = PIC_MAP_S37; +		break; +	case SC_38: +		picId = PIC_MAP_S38; +		break; +	case SC_FINAL1: +		picId = PIC_MAP_S38; +		break; +	} + +	if (picId) +		return _mapScene->getPictureObjectById(picId, 0); + +	error("ModalMap::getScenePicture(): Unknown scene id: %d", g_fp->_currentScene->_sceneId); +} +  void FullpipeEngine::openMap() { -	warning("STUB: FullpipeEngine::openMap()"); +	if (!_modalObject) { +		ModalMap *map = new ModalMap; + +		_modalObject = map; + +		map->initMap(); +	}  }  void FullpipeEngine::openHelp() { diff --git a/engines/fullpipe/modal.h b/engines/fullpipe/modal.h index b57d1fbd06..af52e1b6a9 100644 --- a/engines/fullpipe/modal.h +++ b/engines/fullpipe/modal.h @@ -25,6 +25,8 @@  namespace Fullpipe { +class PictureObject; +  class BaseModalObject {   public: @@ -75,6 +77,35 @@ public:  	void play(const char *fname);  }; +class ModalMap : public BaseModalObject { +	Scene *_mapScene; +	PictureObject *_pic; +	bool _isRunning; +	Common::Rect _rect1; +	int _x; +	int _y; +	int _flag; +	int _mouseX; +	int _mouseY; +	int _field_38; +	int _field_3C; +	int _field_40; +	Common::Rect _rect2; + + public: +	ModalMap(); +	virtual ~ModalMap(); + +	virtual bool pollEvent() { return true; } +	virtual bool handleMessage(ExCommand *message); +	virtual bool init(int counterdiff); +	virtual void update(); +	virtual void saveload() {} + +	void initMap(); +	PictureObject *getScenePicture(); +}; +  } // End of namespace Fullpipe  #endif /* FULLPIPE_MODAL_H */ diff --git a/engines/wintermute/base/base_game.h b/engines/wintermute/base/base_game.h index 742d6f548d..29d312fe97 100644 --- a/engines/wintermute/base/base_game.h +++ b/engines/wintermute/base/base_game.h @@ -251,6 +251,8 @@ public:  	void addMem(int32 bytes);  	bool _touchInterface;  	bool _constrainedMemory; + +	bool stopVideo();  protected:  	BaseFont *_systemFont;  	BaseFont *_videoFont; @@ -319,7 +321,6 @@ private:  	BaseGameMusic *_musicSystem;  	bool isVideoPlaying(); -	bool stopVideo();  	BaseArray<BaseQuickMsg *> _quickMessages;  	BaseArray<UIWindow *> _windows; diff --git a/engines/wintermute/base/saveload.cpp b/engines/wintermute/base/saveload.cpp index 8d37909bb4..402041cda4 100644 --- a/engines/wintermute/base/saveload.cpp +++ b/engines/wintermute/base/saveload.cpp @@ -48,6 +48,7 @@ bool SaveLoad::loadGame(const Common::String &filename, BaseGame *gameRef) {  	bool ret; +	gameRef->stopVideo();  	gameRef->_renderer->initSaveLoad(false);  	gameRef->_loadInProgress = true; | 
