diff options
| -rw-r--r-- | engines/access/access.cpp | 1 | ||||
| -rw-r--r-- | engines/access/access.h | 1 | ||||
| -rw-r--r-- | engines/access/martian/martian_resources.cpp | 11 | ||||
| -rw-r--r-- | engines/access/martian/martian_resources.h | 1 | ||||
| -rw-r--r-- | engines/access/room.cpp | 85 | ||||
| -rw-r--r-- | engines/access/room.h | 2 | ||||
| -rw-r--r-- | engines/access/scripts.cpp | 8 | ||||
| -rw-r--r-- | engines/access/scripts.h | 1 | 
8 files changed, 107 insertions, 3 deletions
diff --git a/engines/access/access.cpp b/engines/access/access.cpp index 8e9d52f3c4..7c21b420f1 100644 --- a/engines/access/access.cpp +++ b/engines/access/access.cpp @@ -106,6 +106,7 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)  	BOXSELECTYOLD = -1;  	NUMBLINES = 0;  	TEMPLIST = nullptr; +	_pictureTaken = 0;  	_vidEnd = false;  } diff --git a/engines/access/access.h b/engines/access/access.h index 2a2d48e49b..e649088cab 100644 --- a/engines/access/access.h +++ b/engines/access/access.h @@ -223,6 +223,7 @@ public:  	byte _byte26CB5;  	int BCNT;  	byte *TEMPLIST; +	int _pictureTaken;  	//  	bool _vidEnd; diff --git a/engines/access/martian/martian_resources.cpp b/engines/access/martian/martian_resources.cpp index 9196395756..7ffb256e44 100644 --- a/engines/access/martian/martian_resources.cpp +++ b/engines/access/martian/martian_resources.cpp @@ -819,5 +819,16 @@ const byte _byte1EEB5[] = {  	1  }; +const int PICTURERANGE[][2] = { +// { min X, max X}, {min Y, max Y} +	{ 20, 30 },  { 82, 87 }, +	{ 20, 30 },  { 105, 110 }, +	{ 0, 8 },    { 92, 100 }, +	{ 42, 46 },  { 92, 100 }, +	{ 9, 41 },   { 88, 104 }, +	{ 9, 41 },   { 117, 133 }, +	{ -1, -1 } +}; +  } // End of namespace Martian  } // End of namespace Access diff --git a/engines/access/martian/martian_resources.h b/engines/access/martian/martian_resources.h index f416cff16c..7503ae4e0f 100644 --- a/engines/access/martian/martian_resources.h +++ b/engines/access/martian/martian_resources.h @@ -67,6 +67,7 @@ extern const byte DEATH_SCREENS[];  extern const char *const DEATHMESSAGE[];  extern const byte _byte1EEB5[]; +extern const int PICTURERANGE[][2];  } // End of namespace Martian  } // End of namespace Access diff --git a/engines/access/room.cpp b/engines/access/room.cpp index 5ad576ec90..0767bf111e 100644 --- a/engines/access/room.cpp +++ b/engines/access/room.cpp @@ -72,8 +72,91 @@ void Room::freeTileData() {  	_tile = nullptr;  } +void Room::clearCamera() { +	_vm->_player->_scrollFlag = true; +	_vm->_events->hideCursor(); + +	_vm->_screen->_orgX1 = 48; +	_vm->_screen->_orgY1 = 24; +	_vm->_screen->_orgX2 = 274; +	_vm->_screen->_orgY2 = 152; +	_vm->_screen->_lColor = 0; +	_vm->_screen->drawRect(); + +	_vm->_events->showCursor(); + +	_vm->_events->_vbCount = 4; +	while (!_vm->shouldQuit() && _vm->_events->_vbCount > 0) +		_vm->_events->pollEventsAndWait(); +} +  void Room::takePicture() { -	warning("TODO: takePicture"); +	_vm->_events->pollEvents(); +	if (!_vm->_events->_leftButton) +		return; + +	Common::Array<Common::Rect> pictureCoords; +	for (int i = 0; Martian::PICTURERANGE[i][0] != -1; i += 2) { +		pictureCoords.push_back(Common::Rect(Martian::PICTURERANGE[i][0], Martian::PICTURERANGE[i + 1][0], +			                                 Martian::PICTURERANGE[i][1], Martian::PICTURERANGE[i + 1][1])); +	} + +	int result = _vm->_events->checkMouseBox1(pictureCoords); + +	if (result == 4) { +		warning("TODO case 4"); +		_vm->_events->debounceLeft(); +		if (_vm->_inventory->_inv[44]._value != ITEM_IN_INVENTORY) { +			Common::String msg = "YOU HAVE NO MORE FILM."; +			_vm->_scripts->doCmdPrint_v1(msg); +			return; +		} + +		// TODO: simplify the second part of the test when tested +		if ((_vm->_scrollCol < 35) || ((_vm->_scrollRow >= 10) && (_vm->_scrollRow >= 20))){ +			Common::String msg = "THAT ISN'T INTERESTING ENOUGH TO WASTE FILM ON."; +			_vm->_scripts->doCmdPrint_v1(msg); +			return; +		} + +		if (_vm->_inventory->_inv[26]._value != ITEM_USED) { +			Common::String msg = "ALTHOUGH IT WOULD MAKE A NICE PICTURE, YOU MAY FIND SOMETHING MORE INTERESTING TO USE YOUR FILM ON."; +			_vm->_scripts->doCmdPrint_v1(msg); +			return; +		} + +		Common::String msg = "THAT PHOTO MAY COME IN HANDY SOME DAY."; +		_vm->_scripts->doCmdPrint_v1(msg); +		_vm->_inventory->_inv[8]._value = ITEM_IN_INVENTORY; +		_vm->_pictureTaken++; +		if (_vm->_pictureTaken == 16) +			_vm->_inventory->_inv[44]._value = ITEM_USED; + +		_vm->_events->debounceLeft(); +		_vm->_sound->playSound(0); +		clearCamera(); +		return; +	} else if (result == 5) { +		if (_vm->_flags[26] != 2) { +			_vm->_video->closeVideo(); +			_vm->_video->_videoEnd = true; +		} +		_vm->_player->_roomNumber = 7; +		_vm->_room->_function = FN_CLEAR1; +		return; +	} else if (result >= 0)  +		_vm->_player->_move = (Direction)(result + 1); + +	_vm->_player->_scrollFlag = false; +	if (_vm->_player->_move == UP) +		warning("TODO: loc_163E9 2"); +	else if (_vm->_player->_move == DOWN) +		warning("TODO: loc_1644A 2"); +	else if (_vm->_player->_move == LEFT) +		warning("TODO: loc_1631E 2"); +	else if (_vm->_player->_move == RIGHT) +		warning("TODO: loc_1637F 2"); +	else return;  }  void Room::doRoom() { diff --git a/engines/access/room.h b/engines/access/room.h index 2ecc1e8538..022d940fa0 100644 --- a/engines/access/room.h +++ b/engines/access/room.h @@ -105,6 +105,8 @@ protected:  	 */  	void executeCommand(int commandId); +	void clearCamera(); +  	virtual void reloadRoom() = 0;  	virtual void reloadRoom1() = 0; diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp index 1e055e45b9..c1f21680e0 100644 --- a/engines/access/scripts.cpp +++ b/engines/access/scripts.cpp @@ -306,10 +306,9 @@ void Scripts::cmdPrint_v2() {  	printString(msg);  } -void Scripts::cmdPrint_v1() { +void Scripts::doCmdPrint_v1(Common::String msg) {  	_vm->_screen->_printOrg = Common::Point(20, 42);  	_vm->_screen->_printStart = Common::Point(20, 32); -	Common::String msg = readString();  	_vm->_bubbleBox->placeBubble(msg);  	_vm->_events->waitKeyMouse();  	_vm->_events->hideCursor(); @@ -318,6 +317,11 @@ void Scripts::cmdPrint_v1() {  	findNull();  } +void Scripts::cmdPrint_v1() { +	Common::String msg = readString(); +	doCmdPrint_v1(msg); +} +  void Scripts::printString(const Common::String &msg) {  	if (_vm->getGameID() != GType_MartianMemorandum) {  		_vm->_screen->_printOrg = Common::Point(20, 42); diff --git a/engines/access/scripts.h b/engines/access/scripts.h index a035087d48..f157e73c3c 100644 --- a/engines/access/scripts.h +++ b/engines/access/scripts.h @@ -165,6 +165,7 @@ public:  	int executeScript();  	void findNull(); +	void doCmdPrint_v1(Common::String msg);  	/**  	 * Print a given message to the screen in a bubble box  | 
