Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/scummvm/scummvm
Browse files Browse the repository at this point in the history
  • Loading branch information
uruk committed Jan 15, 2014
2 parents f6c1440 + b5498bc commit b4af4dc
Show file tree
Hide file tree
Showing 5 changed files with 328 additions and 3 deletions.
5 changes: 4 additions & 1 deletion engines/fullpipe/constants.h
Expand Up @@ -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
Expand Down Expand Up @@ -199,14 +201,15 @@ 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
#define SC_FINAL4 2460
#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
Expand Down
291 changes: 290 additions & 1 deletion engines/fullpipe/modal.cpp
Expand Up @@ -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"

Expand Down Expand Up @@ -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() {
Expand Down
31 changes: 31 additions & 0 deletions engines/fullpipe/modal.h
Expand Up @@ -25,6 +25,8 @@

namespace Fullpipe {

class PictureObject;

class BaseModalObject {
public:

Expand Down Expand Up @@ -75,6 +77,35 @@ class ModalVideoPlayer : public BaseModalObject {
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 */
3 changes: 2 additions & 1 deletion engines/wintermute/base/base_game.h
Expand Up @@ -251,6 +251,8 @@ class BaseGame: public BaseObject {
void addMem(int32 bytes);
bool _touchInterface;
bool _constrainedMemory;

bool stopVideo();
protected:
BaseFont *_systemFont;
BaseFont *_videoFont;
Expand Down Expand Up @@ -319,7 +321,6 @@ class BaseGame: public BaseObject {
BaseGameMusic *_musicSystem;

bool isVideoPlaying();
bool stopVideo();

BaseArray<BaseQuickMsg *> _quickMessages;
BaseArray<UIWindow *> _windows;
Expand Down

0 comments on commit b4af4dc

Please sign in to comment.