From 0e46c809d10dcd8fd766d7adcb966785e7955f5b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 18 Feb 2014 20:08:58 -0500 Subject: MADS: Initial implementation of MSurface class and dependant classes --- engines/mads/events.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 engines/mads/events.cpp (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp new file mode 100644 index 0000000000..8d6262aec3 --- /dev/null +++ b/engines/mads/events.cpp @@ -0,0 +1,34 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/scummsys.h" +#include "common/events.h" +#include "mads/mads.h" +#include "mads/events.h" + +namespace MADS { + +EventsManager::EventsManager(MADSEngine *vm) { + _vm = vm; +} + +} // End of namespace MADS -- cgit v1.2.3 From 58bb1383d0b11d357128ca2b0a7634f091c0fb5b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 19 Feb 2014 23:17:57 -0500 Subject: MADS: Added skeleton files for the game and dialogs --- engines/mads/events.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 8d6262aec3..0950ac02d2 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -22,6 +22,7 @@ #include "common/scummsys.h" #include "common/events.h" +#include "engines/util.h" #include "mads/mads.h" #include "mads/events.h" @@ -31,4 +32,12 @@ EventsManager::EventsManager(MADSEngine *vm) { _vm = vm; } +void EventsManager::handleEvents() { + Common::Event e; + while (!_vm->shouldQuit()) { + g_system->getEventManager()->pollEvent(e); + g_system->delayMillis(10); + } +} + } // End of namespace MADS -- cgit v1.2.3 From 82514b4a28904ead97552f6605cd3bde6924660b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 22 Feb 2014 11:13:35 -0500 Subject: MADS: Beginnings of cursor initialization --- engines/mads/events.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 0950ac02d2..ec0628710c 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -30,6 +30,25 @@ namespace MADS { EventsManager::EventsManager(MADSEngine *vm) { _vm = vm; + _cursorSprites = nullptr; +} + +EventsManager::~EventsManager() { + delete _cursorSprites; +} + +void EventsManager::loadCursors(const Common::String &spritesName) { + error("TODO: load SpriteSet"); +} + +void EventsManager::setCursor(CursorType cursorId) { + _cursorId = cursorId; + _newCursorId = cursorId; + changeCursor(); +} + +void EventsManager::changeCursor() { + } void EventsManager::handleEvents() { -- cgit v1.2.3 From 02a1d0eaa3f462425d115f4d88c3d2badbc7a236 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 22 Feb 2014 12:17:37 -0500 Subject: MADS: Further cursor/event initialisation --- engines/mads/events.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index ec0628710c..bb980af7ff 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -38,10 +38,15 @@ EventsManager::~EventsManager() { } void EventsManager::loadCursors(const Common::String &spritesName) { - error("TODO: load SpriteSet"); + _cursorSprites = new SpriteAsset(_vm, "*CURSOR.SS", 0x4000); } void EventsManager::setCursor(CursorType cursorId) { + _cursorId = cursorId; + changeCursor(); +} + +void EventsManager::setCursor2(CursorType cursorId) { _cursorId = cursorId; _newCursorId = cursorId; changeCursor(); -- cgit v1.2.3 From 6c354bccf253118d459f92f16d8f702ae07806fb Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 22 Feb 2014 17:25:30 -0500 Subject: MADS: Implemented more logic for dialog display --- engines/mads/events.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 5 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index bb980af7ff..3c50063c2e 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -21,16 +21,22 @@ */ #include "common/scummsys.h" +#include "graphics/cursorman.h" #include "common/events.h" #include "engines/util.h" #include "mads/mads.h" #include "mads/events.h" +#define GAME_FRAME_RATE 50 +#define GAME_FRAME_TIME (1000 / GAME_FRAME_RATE) + namespace MADS { EventsManager::EventsManager(MADSEngine *vm) { _vm = vm; _cursorSprites = nullptr; + _gameCounter = 0; + _priorFrameTime = 0; } EventsManager::~EventsManager() { @@ -38,7 +44,7 @@ EventsManager::~EventsManager() { } void EventsManager::loadCursors(const Common::String &spritesName) { - _cursorSprites = new SpriteAsset(_vm, "*CURSOR.SS", 0x4000); + _cursorSprites = new SpriteAsset(_vm, spritesName, 0x4000); } void EventsManager::setCursor(CursorType cursorId) { @@ -52,15 +58,86 @@ void EventsManager::setCursor2(CursorType cursorId) { changeCursor(); } +void EventsManager::showCursor() { + CursorMan.showMouse(true); +} + +void EventsManager::hideCursor() { + CursorMan.showMouse(false); +} + void EventsManager::changeCursor() { } -void EventsManager::handleEvents() { - Common::Event e; - while (!_vm->shouldQuit()) { - g_system->getEventManager()->pollEvent(e); +void EventsManager::pollEvents() { + checkForNextFrameCounter(); + _mouseClicked = false; + _mouseReleased = false; + _keyPressed = false; + + Common::Event event; + while (g_system->getEventManager()->pollEvent(event)) { + // Handle keypress + switch (event.type) { + case Common::EVENT_QUIT: + case Common::EVENT_RTL: + case Common::EVENT_KEYUP: + return; + + case Common::EVENT_KEYDOWN: + // Check for debugger + if (event.kbd.keycode == Common::KEYCODE_d && (event.kbd.flags & Common::KBD_CTRL)) { + // Attach to the debugger + _vm->_debugger->attach(); + _vm->_debugger->onFrame(); + } else { + _keyPressed = true; + } + return; + case Common::EVENT_LBUTTONDOWN: + case Common::EVENT_RBUTTONDOWN: + _mouseClicked = true; + return; + case Common::EVENT_LBUTTONUP: + case Common::EVENT_RBUTTONUP: + _mouseReleased = true; + return; + case Common::EVENT_MOUSEMOVE: + _mousePos = event.mouse; + break; + default: + break; + } + } +} + +void EventsManager::checkForNextFrameCounter() { + // Check for next game frame + uint32 milli = g_system->getMillis(); + if ((milli - _priorFrameTime) >= GAME_FRAME_TIME) { + ++_gameCounter; + _priorFrameTime = milli; + + // Give time to the debugger + _vm->_debugger->onFrame(); + + // Display the frame + _vm->_screen->updateScreen(); + + // Signal the ScummVM debugger + _vm->_debugger->onFrame(); + } +} + +void EventsManager::delay(int cycles) { + uint32 totalMilli = cycles * 1000 / GAME_FRAME_RATE; + uint32 delayEnd = g_system->getMillis() + totalMilli; + + while (!_vm->shouldQuit() && g_system->getMillis() < delayEnd) { g_system->delayMillis(10); + + pollEvents(); } } -- cgit v1.2.3 From 6b774d228495e2dc9de08520a3064889d439335d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 22 Feb 2014 18:21:18 -0500 Subject: MADS: Copy protection dialog is starting to be displayed --- engines/mads/events.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 3c50063c2e..89d1560714 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -37,6 +37,8 @@ EventsManager::EventsManager(MADSEngine *vm) { _cursorSprites = nullptr; _gameCounter = 0; _priorFrameTime = 0; + _keyPressed = false; + _mouseClicked = false; } EventsManager::~EventsManager() { @@ -72,9 +74,6 @@ void EventsManager::changeCursor() { void EventsManager::pollEvents() { checkForNextFrameCounter(); - _mouseClicked = false; - _mouseReleased = false; - _keyPressed = false; Common::Event event; while (g_system->getEventManager()->pollEvent(event)) { @@ -82,7 +81,6 @@ void EventsManager::pollEvents() { switch (event.type) { case Common::EVENT_QUIT: case Common::EVENT_RTL: - case Common::EVENT_KEYUP: return; case Common::EVENT_KEYDOWN: @@ -95,13 +93,16 @@ void EventsManager::pollEvents() { _keyPressed = true; } return; + case Common::EVENT_KEYUP: + _keyPressed = false; + return; case Common::EVENT_LBUTTONDOWN: case Common::EVENT_RBUTTONDOWN: _mouseClicked = true; return; case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONUP: - _mouseReleased = true; + _mouseClicked = false; return; case Common::EVENT_MOUSEMOVE: _mousePos = event.mouse; -- cgit v1.2.3 From 8c9420a8349b0cdb93dcace36c2bd5f93e03476f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 23 Feb 2014 19:33:26 -0500 Subject: MADS: Added game initialisation code --- engines/mads/events.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 89d1560714..23d2e72eeb 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -42,7 +42,7 @@ EventsManager::EventsManager(MADSEngine *vm) { } EventsManager::~EventsManager() { - delete _cursorSprites; + freeCursors(); } void EventsManager::loadCursors(const Common::String &spritesName) { @@ -68,8 +68,22 @@ void EventsManager::hideCursor() { CursorMan.showMouse(false); } +void EventsManager::resetCursor() { + CursorType cursorId = (CursorType)MIN(_cursorSprites->getCount(), (int)CURSOR_WAIT); + _newCursorId = cursorId; + if (_cursorId != _newCursorId) { + changeCursor(); + _cursorId = _newCursorId; + } +} + void EventsManager::changeCursor() { + warning("TODO: changeCursor"); +} +void EventsManager::freeCursors() { + delete _cursorSprites; + _cursorSprites = nullptr; } void EventsManager::pollEvents() { -- cgit v1.2.3 From c9057bd6a8ee2b039e2ba528b1e2e59814b8ef88 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 25 Feb 2014 09:21:19 -0500 Subject: MADS: Moved scene data classes into their own code file --- engines/mads/events.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 23d2e72eeb..8f177f2c20 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -46,6 +46,7 @@ EventsManager::~EventsManager() { } void EventsManager::loadCursors(const Common::String &spritesName) { + delete _cursorSprites; _cursorSprites = new SpriteAsset(_vm, spritesName, 0x4000); } -- cgit v1.2.3 From b816b9990d98633794f42ba49aeb971d6f9d930b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 2 Mar 2014 19:29:54 -0500 Subject: MADS: Added skeleton class for actions --- engines/mads/events.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 8f177f2c20..5d905ca8d6 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -157,4 +157,10 @@ void EventsManager::delay(int cycles) { } } +void EventsManager::initVars() { + _mousePos = Common::Point(-1, -1); + _vD4 = _vCC; + _vD2 = _vD8 = 0; +} + } // End of namespace MADS -- cgit v1.2.3 From a0996b7384e5c3321af97347613120d2f90ab64e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 2 Mar 2014 20:50:35 -0500 Subject: MADS: Implemented more of the multi-scene loop --- engines/mads/events.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 5d905ca8d6..56bd87cbc6 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -39,6 +39,7 @@ EventsManager::EventsManager(MADSEngine *vm) { _priorFrameTime = 0; _keyPressed = false; _mouseClicked = false; + _currentTimer = 0; } EventsManager::~EventsManager() { -- cgit v1.2.3 From 3a842a079c668e9dfc52a6056119d4932e8ef56d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 2 Mar 2014 23:09:17 -0500 Subject: MADS: Bulk of implementation of ScreenObjects::check --- engines/mads/events.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 56bd87cbc6..0c2e2f2aea 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -39,7 +39,13 @@ EventsManager::EventsManager(MADSEngine *vm) { _priorFrameTime = 0; _keyPressed = false; _mouseClicked = false; + _mouseReleased = false; _currentTimer = 0; + _mouseButtons = 0; + _vD2 = 0; + _vD4 = 0; + _vD6 = 0; + _vD8 = 0; } EventsManager::~EventsManager() { @@ -115,6 +121,7 @@ void EventsManager::pollEvents() { case Common::EVENT_LBUTTONDOWN: case Common::EVENT_RBUTTONDOWN: _mouseClicked = true; + _mouseButtons = 1; return; case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONUP: -- cgit v1.2.3 From 1607a9104700e987cacfec41aaafd25d979aeb98 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 4 Mar 2014 20:06:48 -0500 Subject: MADS: Finished remainder of Scene::doFrame --- engines/mads/events.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 0c2e2f2aea..1acb081d8a 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -35,7 +35,8 @@ namespace MADS { EventsManager::EventsManager(MADSEngine *vm) { _vm = vm; _cursorSprites = nullptr; - _gameCounter = 0; + _frameCounter = 0; + _frameNumber = 0; _priorFrameTime = 0; _keyPressed = false; _mouseClicked = false; @@ -140,7 +141,7 @@ void EventsManager::checkForNextFrameCounter() { // Check for next game frame uint32 milli = g_system->getMillis(); if ((milli - _priorFrameTime) >= GAME_FRAME_TIME) { - ++_gameCounter; + ++_frameCounter; _priorFrameTime = milli; // Give time to the debugger @@ -165,6 +166,12 @@ void EventsManager::delay(int cycles) { } } +void EventsManager::waitForNextFrame() { + uint32 frameNum = getFrameCounter(); + while (!_vm->shouldQuit() && !_vm->_game->_abortTimers && frameNum == _frameNumber) + delay(1); +} + void EventsManager::initVars() { _mousePos = Common::Point(-1, -1); _vD4 = _vCC; -- cgit v1.2.3 From 568fc31b3090a70aa922479991540d4f5c2e918c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 4 Mar 2014 22:33:27 -0500 Subject: MADS: Beginnings of code support for Scene::drawElements --- engines/mads/events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 1acb081d8a..7fa31d7616 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -148,7 +148,7 @@ void EventsManager::checkForNextFrameCounter() { _vm->_debugger->onFrame(); // Display the frame - _vm->_screen->updateScreen(); + _vm->_screen.updateScreen(); // Signal the ScummVM debugger _vm->_debugger->onFrame(); -- cgit v1.2.3 From c2587af8f29b2b79beae7fda5a9b983614840b17 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 8 Mar 2014 14:05:17 -0500 Subject: MADS: Clarified Events::_currentTimer as Scene::_frameStartTime --- engines/mads/events.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 7fa31d7616..59cdfbfffb 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -41,7 +41,6 @@ EventsManager::EventsManager(MADSEngine *vm) { _keyPressed = false; _mouseClicked = false; _mouseReleased = false; - _currentTimer = 0; _mouseButtons = 0; _vD2 = 0; _vD4 = 0; -- cgit v1.2.3 From 709fcc6fac4e1449064c4ddd5de3c443d0290c93 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 11 Mar 2014 23:42:20 -0400 Subject: MADS: Fix inter-frame wait loop --- engines/mads/events.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 59cdfbfffb..182d6cbea7 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -36,7 +36,6 @@ EventsManager::EventsManager(MADSEngine *vm) { _vm = vm; _cursorSprites = nullptr; _frameCounter = 0; - _frameNumber = 0; _priorFrameTime = 0; _keyPressed = false; _mouseClicked = false; @@ -166,8 +165,8 @@ void EventsManager::delay(int cycles) { } void EventsManager::waitForNextFrame() { - uint32 frameNum = getFrameCounter(); - while (!_vm->shouldQuit() && !_vm->_game->_abortTimers && frameNum == _frameNumber) + uint32 frameCtr = getFrameCounter(); + while (!_vm->shouldQuit() && frameCtr == _frameCounter) delay(1); } -- cgit v1.2.3 From 4ab73a89abd66890391a977ebf4a23eb361a44a4 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 19 Mar 2014 20:12:32 -0400 Subject: MADS: Preliminary code to show game cursor --- engines/mads/events.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 182d6cbea7..32d3a09c18 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -85,7 +85,12 @@ void EventsManager::resetCursor() { } void EventsManager::changeCursor() { - warning("TODO: changeCursor"); + if (_cursorSprites) { + MSprite *cursor = _cursorSprites->getFrame(_cursorId - 1); + CursorMan.replaceCursor(cursor->getData(), cursor->w, cursor->h, 0, 0, + cursor->getTransparencyIndex()); + showCursor(); + } } void EventsManager::freeCursors() { -- cgit v1.2.3 From 79f51c4ebd377ae91ec639ecf935c5fc4b2d2a32 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 20 Mar 2014 21:59:43 -0400 Subject: MADS: Minor initial sprite slots loading fixes, missing code from SequenceList::loadSprites --- engines/mads/events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 32d3a09c18..90393d665f 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -35,7 +35,7 @@ namespace MADS { EventsManager::EventsManager(MADSEngine *vm) { _vm = vm; _cursorSprites = nullptr; - _frameCounter = 0; + _frameCounter = 10; _priorFrameTime = 0; _keyPressed = false; _mouseClicked = false; -- cgit v1.2.3 From 7cdaa9648c0c49345460a0ab194a4ca97869e6bd Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 22 Mar 2014 12:02:17 -0400 Subject: MADS: Implemented ScreenObjects::checkScroller --- engines/mads/events.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 90393d665f..fe2a2532c5 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -41,9 +41,10 @@ EventsManager::EventsManager(MADSEngine *vm) { _mouseClicked = false; _mouseReleased = false; _mouseButtons = 0; + _vCC = 0; _vD2 = 0; _vD4 = 0; - _vD6 = 0; + _mouseMoved = false; _vD8 = 0; } @@ -100,6 +101,7 @@ void EventsManager::freeCursors() { void EventsManager::pollEvents() { checkForNextFrameCounter(); + _mouseMoved = false; Common::Event event; while (g_system->getEventManager()->pollEvent(event)) { @@ -130,9 +132,12 @@ void EventsManager::pollEvents() { case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONUP: _mouseClicked = false; + _mouseMoved = true; return; case Common::EVENT_MOUSEMOVE: _mousePos = event.mouse; + _currentPos = event.mouse; + _mouseMoved = true; break; default: break; -- cgit v1.2.3 From ce9a15f010d84c8596380eec5226ef22704022e5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 23 Mar 2014 21:52:18 -0400 Subject: MADS: Fix the setting/clearing of _mouseReleased flag --- engines/mads/events.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index fe2a2532c5..a4e1a96a5a 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -132,6 +132,7 @@ void EventsManager::pollEvents() { case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONUP: _mouseClicked = false; + _mouseReleased = true; _mouseMoved = true; return; case Common::EVENT_MOUSEMOVE: @@ -186,4 +187,9 @@ void EventsManager::initVars() { _vD2 = _vD8 = 0; } +void EventsManager::resetMouseFlags() { + _mouseClicked = false; + _mouseReleased = false; +} + } // End of namespace MADS -- cgit v1.2.3 From fc03e5a4fadaa30efa98902f6650eb3a98651abb Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 26 Mar 2014 22:22:50 -0400 Subject: MADS: Fix for selecting actions from the list --- engines/mads/events.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index a4e1a96a5a..70ca166aab 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -128,6 +128,7 @@ void EventsManager::pollEvents() { case Common::EVENT_RBUTTONDOWN: _mouseClicked = true; _mouseButtons = 1; + _mouseMoved = true; return; case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONUP: @@ -190,6 +191,7 @@ void EventsManager::initVars() { void EventsManager::resetMouseFlags() { _mouseClicked = false; _mouseReleased = false; + _mouseButtons = 0; } } // End of namespace MADS -- cgit v1.2.3 From 0a4c4c8eda3500915372a6c9987e524016ec566f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 26 Mar 2014 22:58:24 -0400 Subject: MADS: Walking is now sort of working --- engines/mads/events.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 70ca166aab..4b143ec0e2 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -177,9 +177,27 @@ void EventsManager::delay(int cycles) { } void EventsManager::waitForNextFrame() { + _mouseClicked = false; + _mouseReleased = false; + _mouseButtons = 0; + + bool mouseClicked = false; + bool mouseReleased = false; + int mouseButtons = 0; + uint32 frameCtr = getFrameCounter(); - while (!_vm->shouldQuit() && frameCtr == _frameCounter) + while (!_vm->shouldQuit() && frameCtr == _frameCounter) { delay(1); + + mouseClicked |= _mouseClicked; + mouseReleased |= _mouseReleased; + mouseButtons |= _mouseButtons; + } + + _mouseClicked = mouseClicked; + _mouseReleased = mouseReleased; + _mouseButtons = mouseButtons; + _mouseMoved = _mouseClicked || _mouseReleased; } void EventsManager::initVars() { @@ -188,10 +206,4 @@ void EventsManager::initVars() { _vD2 = _vD8 = 0; } -void EventsManager::resetMouseFlags() { - _mouseClicked = false; - _mouseReleased = false; - _mouseButtons = 0; -} - } // End of namespace MADS -- cgit v1.2.3 From 377cbbe77d5c7f16aba086e4fb1707de843ddc1a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 27 Mar 2014 21:04:27 -0400 Subject: MADS: Cleanup of game and player fields used during initialization --- engines/mads/events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 4b143ec0e2..37a1eec969 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -76,7 +76,7 @@ void EventsManager::hideCursor() { CursorMan.showMouse(false); } -void EventsManager::resetCursor() { +void EventsManager::waitCursor() { CursorType cursorId = (CursorType)MIN(_cursorSprites->getCount(), (int)CURSOR_WAIT); _newCursorId = cursorId; if (_cursorId != _newCursorId) { -- cgit v1.2.3 From 87124b4380abf077a3c97f3997777228f7d825cf Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 30 Mar 2014 23:03:11 -0400 Subject: MADS: Fix for hotspot highlighting when mouse moves --- engines/mads/events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 37a1eec969..c61512ca90 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -197,7 +197,7 @@ void EventsManager::waitForNextFrame() { _mouseClicked = mouseClicked; _mouseReleased = mouseReleased; _mouseButtons = mouseButtons; - _mouseMoved = _mouseClicked || _mouseReleased; + _mouseMoved |= _mouseClicked || _mouseReleased; } void EventsManager::initVars() { -- cgit v1.2.3 From 74c6bafed4eb80f93284a60219f27c150eb2baf5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 2 Apr 2014 22:41:25 -0400 Subject: MADS: Further clean up/renaming of checkActionAtMousePos --- engines/mads/events.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index c61512ca90..29ea927bbc 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -46,6 +46,7 @@ EventsManager::EventsManager(MADSEngine *vm) { _vD4 = 0; _mouseMoved = false; _vD8 = 0; + _anyStroke = false; } EventsManager::~EventsManager() { @@ -129,17 +130,20 @@ void EventsManager::pollEvents() { _mouseClicked = true; _mouseButtons = 1; _mouseMoved = true; + _anyStroke = true; return; case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONUP: _mouseClicked = false; _mouseReleased = true; _mouseMoved = true; + _anyStroke = true; return; case Common::EVENT_MOUSEMOVE: _mousePos = event.mouse; _currentPos = event.mouse; _mouseMoved = true; + _anyStroke = true; break; default: break; -- cgit v1.2.3 From ebe4d369a54d852b7d789ac247a872799e68e495 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 5 Apr 2014 12:43:50 -0400 Subject: MADS: Fixes for actions triggering prematurely --- engines/mads/events.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 29ea927bbc..244ae727e3 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -130,20 +130,20 @@ void EventsManager::pollEvents() { _mouseClicked = true; _mouseButtons = 1; _mouseMoved = true; - _anyStroke = true; + //_anyStroke = true; return; case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONUP: _mouseClicked = false; _mouseReleased = true; _mouseMoved = true; - _anyStroke = true; + //_anyStroke = true; return; case Common::EVENT_MOUSEMOVE: _mousePos = event.mouse; _currentPos = event.mouse; _mouseMoved = true; - _anyStroke = true; + //_anyStroke = true; break; default: break; -- cgit v1.2.3 From 06aeba275acb80df86ff103880c07ccc0e9738b1 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 5 Apr 2014 14:27:33 -0400 Subject: MADS: Fix right mouse button handling --- engines/mads/events.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 244ae727e3..ecc7a528fd 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -46,7 +46,7 @@ EventsManager::EventsManager(MADSEngine *vm) { _vD4 = 0; _mouseMoved = false; _vD8 = 0; - _anyStroke = false; + _rightMousePressed = false; } EventsManager::~EventsManager() { @@ -129,21 +129,20 @@ void EventsManager::pollEvents() { case Common::EVENT_RBUTTONDOWN: _mouseClicked = true; _mouseButtons = 1; + _rightMousePressed = event.type == Common::EVENT_RBUTTONDOWN; _mouseMoved = true; - //_anyStroke = true; return; case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONUP: _mouseClicked = false; _mouseReleased = true; _mouseMoved = true; - //_anyStroke = true; + _rightMousePressed = false; return; case Common::EVENT_MOUSEMOVE: _mousePos = event.mouse; _currentPos = event.mouse; _mouseMoved = true; - //_anyStroke = true; break; default: break; -- cgit v1.2.3 From 531ebab4da814aac23a9b084772a6156bfb3b9b8 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 8 Apr 2014 22:04:43 -0400 Subject: MADS: Added preliminary keyboard handling and keypress process stub --- engines/mads/events.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index ecc7a528fd..85c62e30bd 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -37,13 +37,12 @@ EventsManager::EventsManager(MADSEngine *vm) { _cursorSprites = nullptr; _frameCounter = 10; _priorFrameTime = 0; - _keyPressed = false; _mouseClicked = false; _mouseReleased = false; _mouseButtons = 0; - _vCC = 0; + _mouseStatus = 0; _vD2 = 0; - _vD4 = 0; + _mouseStatusCopy = 0; _mouseMoved = false; _vD8 = 0; _rightMousePressed = false; @@ -119,18 +118,22 @@ void EventsManager::pollEvents() { _vm->_debugger->attach(); _vm->_debugger->onFrame(); } else { - _keyPressed = true; + _pendingKeys.push(event); } return; case Common::EVENT_KEYUP: - _keyPressed = false; return; case Common::EVENT_LBUTTONDOWN: case Common::EVENT_RBUTTONDOWN: _mouseClicked = true; _mouseButtons = 1; - _rightMousePressed = event.type == Common::EVENT_RBUTTONDOWN; _mouseMoved = true; + if (event.type == Common::EVENT_RBUTTONDOWN) { + _rightMousePressed = true; + _mouseStatus |= 2; + } else { + _mouseStatus |= 1; + } return; case Common::EVENT_LBUTTONUP: case Common::EVENT_RBUTTONUP: @@ -138,6 +141,11 @@ void EventsManager::pollEvents() { _mouseReleased = true; _mouseMoved = true; _rightMousePressed = false; + if (event.type == Common::EVENT_RBUTTONUP) { + _mouseStatus &= ~2; + } else { + _mouseStatus &= ~1; + } return; case Common::EVENT_MOUSEMOVE: _mousePos = event.mouse; @@ -205,7 +213,7 @@ void EventsManager::waitForNextFrame() { void EventsManager::initVars() { _mousePos = Common::Point(-1, -1); - _vD4 = _vCC; + _mouseStatusCopy = _mouseStatus; _vD2 = _vD8 = 0; } -- cgit v1.2.3 From 1362414e77bfbd17d7a0224ce5fb7275c793c7c4 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Apr 2014 22:49:14 -0400 Subject: MADS: Implement palette animation code --- engines/mads/events.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 85c62e30bd..ac03dd5665 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -26,6 +26,7 @@ #include "engines/util.h" #include "mads/mads.h" #include "mads/events.h" +#include "mads/scene.h" #define GAME_FRAME_RATE 50 #define GAME_FRAME_TIME (1000 / GAME_FRAME_RATE) @@ -165,6 +166,9 @@ void EventsManager::checkForNextFrameCounter() { ++_frameCounter; _priorFrameTime = milli; + // Do any palette cycling + _vm->_game->_scene.animatePalette(); + // Give time to the debugger _vm->_debugger->onFrame(); -- cgit v1.2.3 From a770419abcf109ca45b047f2bb361887632db00c Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Tue, 29 Apr 2014 12:56:22 +0300 Subject: MADS: Add an isCursorVisible() method This will probably be used by the menu class, but it's nice to have nonetheless --- engines/mads/events.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index ac03dd5665..6ec16402ef 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -77,6 +77,10 @@ void EventsManager::hideCursor() { CursorMan.showMouse(false); } +bool EventsManager::isCursorVisible() { + return CursorMan.isVisible(); +} + void EventsManager::waitCursor() { CursorType cursorId = (CursorType)MIN(_cursorSprites->getCount(), (int)CURSOR_WAIT); _newCursorId = cursorId; -- cgit v1.2.3 From a54aeaccce5d3db455a0017ce302065b29e6c215 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 2 May 2014 21:29:33 -0400 Subject: MADS: Misc savegame fixes and added meta query info --- engines/mads/events.cpp | 3 --- 1 file changed, 3 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 6ec16402ef..5d6a16ff1f 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -28,9 +28,6 @@ #include "mads/events.h" #include "mads/scene.h" -#define GAME_FRAME_RATE 50 -#define GAME_FRAME_TIME (1000 / GAME_FRAME_RATE) - namespace MADS { EventsManager::EventsManager(MADSEngine *vm) { -- cgit v1.2.3 From 49866d442fdd816a89a5c1bd4ddb1e68013c8d9e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 25 May 2014 18:32:54 -0400 Subject: MADS: Properly implement cursor hotspot handling --- engines/mads/events.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 5d6a16ff1f..870a902866 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -90,9 +90,38 @@ void EventsManager::waitCursor() { void EventsManager::changeCursor() { if (_cursorSprites) { MSprite *cursor = _cursorSprites->getFrame(_cursorId - 1); - CursorMan.replaceCursor(cursor->getData(), cursor->w, cursor->h, 0, 0, - cursor->getTransparencyIndex()); + assert(cursor->w == cursor->h); + byte transIndex = cursor->getTransparencyIndex(); + + // Check for hotspot indication pixels along the right-hand and bottom + // row. Put together, these give the cursor's hotspot x,y + int hotspotX = 0, hotspotY = 0; + byte *cursorData = cursor->getData(); + for (int idx = 0; idx < cursor->w; ++idx) { + if (cursorData[(cursor->h - 1) * cursor->w + idx] != transIndex) + hotspotX = idx; + + if (cursorData[(cursor->h + 1) * cursor->w - 1] != transIndex) + hotspotY = idx; + } + + // Reduce the cursor data to remove the last column from each row, since + // the cursor routines don't have a pitch option + byte *destCursor = new byte[(cursor->w - 1) * (cursor->h - 1)]; + byte *srcP = cursorData; + byte *destP = destCursor; + + for (int idx = 0; idx < (cursor->h - 1); ++idx) { + Common::copy(srcP, srcP + cursor->w - 1, destP); + srcP += cursor->w; + destP += cursor->w - 1; + } + + // Set the raw cursor data to use + CursorMan.replaceCursor(destCursor, cursor->w - 1, cursor->h - 1, + hotspotX, hotspotY, transIndex); showCursor(); + delete[] destCursor; } } -- cgit v1.2.3 From feb02eaea93a3bbbc4b2c651285c99a184cbc086 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 25 May 2014 20:15:10 -0400 Subject: MADS: Further fix for setting cursor hotspot position --- engines/mads/events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 870a902866..3f2a7390fb 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -101,7 +101,7 @@ void EventsManager::changeCursor() { if (cursorData[(cursor->h - 1) * cursor->w + idx] != transIndex) hotspotX = idx; - if (cursorData[(cursor->h + 1) * cursor->w - 1] != transIndex) + if (cursorData[(idx + 1) * cursor->w - 1] != transIndex) hotspotY = idx; } -- cgit v1.2.3 From 8f4859df33f06bbfc16792bcac95f77d6a6d8fe9 Mon Sep 17 00:00:00 2001 From: D G Turner Date: Mon, 26 May 2014 23:08:07 +0100 Subject: MADS: Fix missing initialization in EventsManager class. Fixes CID #1216233. --- engines/mads/events.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index 3f2a7390fb..e1240da030 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -33,6 +33,8 @@ namespace MADS { EventsManager::EventsManager(MADSEngine *vm) { _vm = vm; _cursorSprites = nullptr; + _cursorId = CURSOR_NONE; + _newCursorId = CURSOR_NONE; _frameCounter = 10; _priorFrameTime = 0; _mouseClicked = false; -- cgit v1.2.3 From e7f467c41f96d2eaf7ffb017e635815105417bea Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 27 May 2014 00:05:07 +0200 Subject: MADS: Initialize some variables in EventsManager --- engines/mads/events.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index e1240da030..b72d3f42e7 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -46,6 +46,7 @@ EventsManager::EventsManager(MADSEngine *vm) { _mouseMoved = false; _vD8 = 0; _rightMousePressed = false; + _cursorId = _newCursorId = CURSOR_NONE; } EventsManager::~EventsManager() { -- cgit v1.2.3 From c2ece0c82e57e29da2695b6915df6e3aecd9a608 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 27 May 2014 00:09:16 +0200 Subject: MADS: Avoid double-initialization in EventsManager --- engines/mads/events.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index b72d3f42e7..e1240da030 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -46,7 +46,6 @@ EventsManager::EventsManager(MADSEngine *vm) { _mouseMoved = false; _vD8 = 0; _rightMousePressed = false; - _cursorId = _newCursorId = CURSOR_NONE; } EventsManager::~EventsManager() { -- cgit v1.2.3 From f8b08874c4819d85d493f42081a336326bff1035 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 28 May 2014 23:18:51 +0200 Subject: MADS: Janitorial - Trim trailing spaces and tabs --- engines/mads/events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/mads/events.cpp') diff --git a/engines/mads/events.cpp b/engines/mads/events.cpp index e1240da030..c3e6d5c122 100644 --- a/engines/mads/events.cpp +++ b/engines/mads/events.cpp @@ -120,7 +120,7 @@ void EventsManager::changeCursor() { } // Set the raw cursor data to use - CursorMan.replaceCursor(destCursor, cursor->w - 1, cursor->h - 1, + CursorMan.replaceCursor(destCursor, cursor->w - 1, cursor->h - 1, hotspotX, hotspotY, transIndex); showCursor(); delete[] destCursor; -- cgit v1.2.3