From a9abe40a124a6f7ab492906581674033d2d40942 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 9 Oct 2011 11:24:43 +0200 Subject: CGE: Add come comments in inventory functions --- engines/cge/snail.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp index 34adeb3a8e..966a372be4 100644 --- a/engines/cge/snail.cpp +++ b/engines/cge/snail.cpp @@ -613,15 +613,23 @@ int CGEEngine::findPocket(Sprite *spr) { return -1; } +/** + * Check if an item is in the inventory, and returns its position + * @param Inventory slot number Sprite pointer + */ void CGEEngine::selectPocket(int n) { debugC(1, kCGEDebugEngine, "CGEEngine::selectPocket(%d)", n); if (n < 0 || (_pocLight->_seqPtr && _pocPtr == n)) { + // If no slot specified, or another slot already selected + // stop the blinking animation _pocLight->step(0); n = findPocket(NULL); if (n >= 0) _pocPtr = n; } else { + // If slot specified, check if the slot if used. + // Is so, start the blinking animation if (_pocket[n] != NULL) { _pocPtr = n; _pocLight->step(1); @@ -630,13 +638,18 @@ void CGEEngine::selectPocket(int n) { _pocLight->gotoxy(kPocketX + _pocPtr * kPocketDX + kPocketSX, kPocketY + kPocketSY); } +/** + * Logic used when all the inventory slots are full and the user tries to pick + * another object. + * @param Inventory slot number Sprite pointer + */ void CGEEngine::pocFul() { debugC(1, kCGEDebugEngine, "CGEEngine::pocFul()"); _hero->park(); _commandHandler->addCommand(kCmdWait, -1, -1, _hero); _commandHandler->addCommand(kCmdSeq, -1, kSeqPocketFull, _hero); - _commandHandler->addCommand(kCmdSound, -1, 2, _hero); + _commandHandler->addCommand(kCmdSound, -1, 2, _hero); // Play the 'hum-hum" sound (fx00002) _commandHandler->addCommand(kCmdWait, -1, -1, _hero); _commandHandler->addCommand(kCmdSay, 1, kPocketFull, _hero); } -- cgit v1.2.3 From 727afcf4bd65fbdf1af9de2eab6657ccf653d5bf Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 21 Oct 2011 17:27:34 +0200 Subject: CGE: Add some doxygen comments --- engines/cge/cge_main.cpp | 9 +++++++++ engines/cge/snail.cpp | 25 ++++++++++++++++++++++--- engines/cge/walk.cpp | 8 +++++++- 3 files changed, 38 insertions(+), 4 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 51cf3bb621..1c2759bd97 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -847,6 +847,9 @@ void System::tick() { _time = kSystemRate; } +/** + * Switch greyscale mode on/off + */ void CGEEngine::switchColorMode() { debugC(1, kCGEDebugEngine, "CGEEngine::switchColorMode()"); @@ -855,6 +858,9 @@ void CGEEngine::switchColorMode() { _vga->setColors(_vga->_sysPal, 64); } +/** + * Switch music on/off + */ void CGEEngine::switchMusic() { debugC(1, kCGEDebugEngine, "CGEEngine::switchMusic()"); @@ -867,6 +873,9 @@ void CGEEngine::switchMusic() { _midiPlayer->killMidi(); } +/** + * Shutdown game + */ void CGEEngine::startCountDown() { debugC(1, kCGEDebugEngine, "CGEEngine::startCountDown()"); diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp index 966a372be4..cbc463ced2 100644 --- a/engines/cge/snail.cpp +++ b/engines/cge/snail.cpp @@ -1002,7 +1002,6 @@ void CGEEngine::snSetZ(Sprite *spr, int z) { if (spr) { spr->_z = z; - //SNPOST_(SNZTRIM, -1, 0, spr); snZTrim(spr); } } @@ -1098,6 +1097,11 @@ void CGEEngine::snKeep(Sprite *spr, int stp) { selectPocket(-1); } +/** + * Remove an object from the inventory and (if specified) trigger an animation + * @param spr Inventory item + * @param stp Animation + */ void CGEEngine::snGive(Sprite *spr, int stp) { debugC(1, kCGEDebugEngine, "CGEEngine::snGive(spr, %d)", stp); @@ -1149,8 +1153,13 @@ void CGEEngine::snLevel(Sprite *spr, int lev) { _maxScene = _maxSceneArr[_lev]; } -void CGEEngine::snFlag(int indx, bool v) { - _flag[indx] = v; +/** + * Set a flag to a value + * @param indx Flag index + * @param val Flag value + */ +void CGEEngine::snFlag(int indx, bool val) { + _flag[indx] = val; } void CGEEngine::snSetRef(Sprite *spr, int nr) { @@ -1193,12 +1202,22 @@ void CGEEngine::snLight(bool in) { _dark = !in; } +/** + * Set an horizontal boundary + * @param scene Scene number + * @param barX Horizontal boundary value + */ void CGEEngine::snHBarrier(const int scene, const int barX) { debugC(1, kCGEDebugEngine, "CGEEngine::snHBarrier(%d, %d)", scene, barX); _barriers[(scene > 0) ? scene : _now]._horz = barX; } +/** + * Set a vertical boundary + * @param scene Scene number + * @param barY Vertical boundary value + */ void CGEEngine::snVBarrier(const int scene, const int barY) { debugC(1, kCGEDebugEngine, "CGEEngine::snVBarrier(%d, %d)", scene, barY); diff --git a/engines/cge/walk.cpp b/engines/cge/walk.cpp index 31ea1909d8..22c06a17c1 100644 --- a/engines/cge/walk.cpp +++ b/engines/cge/walk.cpp @@ -126,7 +126,10 @@ int Walk::distance(Sprite *spr) { return dz - 1; } - +/** + * Turn the character to a given direction + * @param d Direction + */ void Walk::turn(Dir d) { Dir dir = (_dir == kDirNone) ? kDirSouth : _dir; if (d != _dir) { @@ -135,6 +138,9 @@ void Walk::turn(Dir d) { } } +/** + * Stop the character and reset his direction + */ void Walk::park() { if (_time == 0) _time++; -- cgit v1.2.3 From 52c42a13d29d246a5b3377099707146a4db4a205 Mon Sep 17 00:00:00 2001 From: Thierry Crozat Date: Sun, 23 Oct 2011 14:07:30 +0100 Subject: CGE: Remove end of line in error message. This caused the punctuation mark to be displayed on the next line. --- engines/cge/text.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp index 64f9959442..58acb5548c 100644 --- a/engines/cge/text.cpp +++ b/engines/cge/text.cpp @@ -38,7 +38,7 @@ namespace CGE { Text::Text(CGEEngine *vm, const char *fname) : _vm(vm) { _vm->mergeExt(_fileName, fname, kSayExt); if (!_vm->_resman->exist(_fileName)) - error("No talk (%s)\n", _fileName); + error("No talk (%s)", _fileName); int16 txtCount = count() + 1; if (!txtCount) error("Unable to read dialog file %s", _fileName); -- cgit v1.2.3 From 32972a5ffb180c9e8a6a9eae51d0e7564ce76d9e Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sun, 23 Oct 2011 17:52:43 +0100 Subject: AD: Switched rest of the engines to new GUIO --- engines/cge/detection.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp index 8b90bd1483..f2f5764e54 100644 --- a/engines/cge/detection.cpp +++ b/engines/cge/detection.cpp @@ -35,8 +35,6 @@ static const PlainGameDescriptor CGEGames[] = { namespace CGE { -using Common::GUIO_NONE; - static const ADGameDescription gameDescriptions[] = { { @@ -46,7 +44,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "f9ae2e7f8f7cac91378cdafca43faf1e", 8437572}, AD_LISTEND }, - Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO_NONE + Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO1(GUIO_NONE) }, { "soltys", "Soltys Freeware", @@ -55,7 +53,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "f9ae2e7f8f7cac91378cdafca43faf1e", 8437676}, AD_LISTEND }, - Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO_NONE + Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO1(GUIO_NONE) }, // English ScummVM version { @@ -65,7 +63,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "f9ae2e7f8f7cac91378cdafca43faf1e", 8428832}, AD_LISTEND }, - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO_NONE + Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO1(GUIO_NONE) }, { "soltys", "Soltys Demo (not supported)", @@ -74,7 +72,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "75d385a6074c58b69f7730481f256051", 1796710}, AD_LISTEND }, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO , GUIO_NONE + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO , GUIO1(GUIO_NONE) }, { "soltys", "Soltys Demo (not supported)", @@ -83,7 +81,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "c5d9b15863cab61dc125551576dece04", 1075272}, AD_LISTEND }, - Common::PL_POL, Common::kPlatformPC, ADGF_DEMO , GUIO_NONE + Common::PL_POL, Common::kPlatformPC, ADGF_DEMO , GUIO1(GUIO_NONE) }, AD_TABLE_END_MARKER }; -- cgit v1.2.3 From a95820956e046c13249bc75f6e1fa26bcddc9d52 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Wed, 2 Nov 2011 23:58:29 +0000 Subject: CGE: Fix array bounds check --- engines/cge/snail.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp index cbc463ced2..5ab8f6314b 100644 --- a/engines/cge/snail.cpp +++ b/engines/cge/snail.cpp @@ -406,7 +406,7 @@ void CGEEngine::snGame(Sprite *spr, int num) { Stage++; if (hand && Stage > kDressed) ++hand; - if (i >= 0 || (dup[i] == spr && newRandom(3) == 0)) { + if (i >= 0 && (dup[i] == spr && newRandom(3) == 0)) { _commandHandler->addCommand(kCmdSeq, -1, 3, dup[0]); // Yes _commandHandler->addCommand(kCmdSeq, -1, 3, dup[1]); // Yes _commandHandler->addCommand(kCmdSeq, -1, 3, dup[2]); // Yes -- cgit v1.2.3 From 558a499a02d7f9e5ff772ad65d18044b6a35486d Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Thu, 3 Nov 2011 00:03:04 +0000 Subject: CGE: Fix warning --- engines/cge/cge_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 1c2759bd97..8798a7f793 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -185,7 +185,7 @@ void CGEEngine::syncHeader(Common::Serializer &s) { s.syncAsUint16LE(checksum); } else { // Read checksum and validate it - uint16 checksum; + uint16 checksum = 0; s.syncAsUint16LE(checksum); if (checksum != kSavegameCheckSum) error("%s", _text->getText(kBadSVG)); -- cgit v1.2.3 From b1c10ef2f05bbad9c907c4a4f8d120ca84734642 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 8 Nov 2011 20:32:41 +1100 Subject: CGE: Don't allow saving game during cut-scenes --- engines/cge/cge.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp index 4ed2932cd9..74a855f442 100644 --- a/engines/cge/cge.cpp +++ b/engines/cge/cge.cpp @@ -214,7 +214,8 @@ bool CGEEngine::canLoadGameStateCurrently() { } bool CGEEngine::canSaveGameStateCurrently() { - return (_startupMode == 0) && _mouse->_active; + return (_startupMode == 0) && _mouse->_active && + _commandHandler->idle() && !_hero->_flags._hide; } } // End of namespace CGE -- cgit v1.2.3 From 09a48a08789502a619e3512135fd29729319932f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 8 Nov 2011 20:37:14 +1100 Subject: CGE: Bugfixes for the save/load game keys --- engines/cge/events.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index cc22d9075a..2c134baf92 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -113,7 +113,6 @@ bool Keyboard::getKey(Common::Event &event, int &cgeCode) { return true; } if (keycode == Common::KEYCODE_F5) { - warning("keycode %d", event.kbd.ascii); if (_vm->canSaveGameStateCurrently()) { const EnginePlugin *plugin = NULL; EngineMan.findGame(_vm->_gameDescription->gameid, &plugin); @@ -123,7 +122,9 @@ bool Keyboard::getKey(Common::Event &event, int &cgeCode) { int16 savegameId = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName()); Common::String savegameDescription = dialog->getResultString(); delete dialog; - _vm->saveGameState(savegameId, savegameDescription); + + if (savegameId != -1) + _vm->saveGameState(savegameId, savegameDescription); } return false; } else if (keycode == Common::KEYCODE_F7) { @@ -135,7 +136,9 @@ bool Keyboard::getKey(Common::Event &event, int &cgeCode) { dialog->setSaveMode(false); int16 savegameId = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName()); delete dialog; - _vm->loadGameState(savegameId); + + if (savegameId != -1) + _vm->loadGameState(savegameId); } return false; } -- cgit v1.2.3 From 17027a7afc8db73ee136d481781fe4cdfd7ea7ef Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 9 Nov 2011 19:34:43 +1100 Subject: CGE: Properly stop player moving when saving or restoring --- engines/cge/cge_main.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 8798a7f793..cb03517963 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -277,6 +277,7 @@ Common::String CGEEngine::generateSaveName(int slot) { Common::Error CGEEngine::loadGameState(int slot) { // Clear current game activity sceneDown(); + _hero->park(); resetGame(); // Load the game @@ -295,6 +296,7 @@ void CGEEngine::resetGame() { Common::Error CGEEngine::saveGameState(int slot, const Common::String &desc) { sceneDown(); + _hero->park(); _oldLev = _lev; // Write out the user's progress @@ -692,6 +694,7 @@ void CGEEngine::qGame() { debugC(1, kCGEDebugEngine, "CGEEngine::qGame()"); sceneDown(); + _hero->park(); _oldLev = _lev; // Write out the user's progress -- cgit v1.2.3 From 8097aeb43a916dac160bda11201a6fc79a933c40 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 13 Nov 2011 12:33:36 +0100 Subject: CGE: F1 now displays Soltys version and translators. This is only available in versions modified or translated by the team --- engines/cge/cge_main.h | 1 + engines/cge/events.cpp | 9 ++++++++- engines/cge/text.cpp | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.h b/engines/cge/cge_main.h index bdb3121d63..d5f2e4f5fb 100644 --- a/engines/cge/cge_main.h +++ b/engines/cge/cge_main.h @@ -56,6 +56,7 @@ namespace CGE { #define kSystemRate 6 // 12 Hz #define kHeroFun0 (40 * 12) #define kHeroFun1 ( 2 * 12) +#define kShowScummVMVersion 15 #define kGetNamePrompt 50 #define kGetNameTitle 51 #define kTSeq 96 diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index 2c134baf92..8f76d2efd5 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -112,7 +112,14 @@ bool Keyboard::getKey(Common::Event &event, int &cgeCode) { cgeCode = 28; return true; } - if (keycode == Common::KEYCODE_F5) { + if (keycode == Common::KEYCODE_F1) { + if (event.type == Common::EVENT_KEYUP) + return false; + // Display ScummVM version and translation strings + for (int i = 0; i < 5; i++) + _vm->_commandHandler->addCommand(kCmdInf, 1, kShowScummVMVersion + i, NULL); + return false; + } else if (keycode == Common::KEYCODE_F5) { if (_vm->canSaveGameStateCurrently()) { const EnginePlugin *plugin = NULL; EngineMan.findGame(_vm->_gameDescription->gameid, &plugin); diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp index 58acb5548c..021dad5709 100644 --- a/engines/cge/text.cpp +++ b/engines/cge/text.cpp @@ -177,6 +177,8 @@ void Text::say(const char *text, Sprite *spr) { void CGEEngine::inf(const char *text) { debugC(1, kCGEDebugEngine, "CGEEngine::inf(%s)", text); + if (!text) + return; killText(); _talk = new Talk(this, text, kTBRect); -- cgit v1.2.3 From c6c9620ff2a0ef8c7c7b074445a3886660f02bba Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 13 Nov 2011 12:48:09 +0100 Subject: CGE: Remove some useless constants --- engines/cge/cge_main.cpp | 2 +- engines/cge/cge_main.h | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index cb03517963..53078fe8f8 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -200,7 +200,7 @@ bool CGEEngine::loadGame(int slotNumber, SavegameHeader *header, bool tiny) { if (slotNumber == -1) { // Loading the data for the initial game state - kSavegame0File file = kSavegame0File(this, kSavegame0Name); + EncryptedStream file = EncryptedStream(this, kSavegame0Name); int size = file.size(); byte *dataBuffer = (byte *)malloc(size); file.read(dataBuffer, size); diff --git a/engines/cge/cge_main.h b/engines/cge/cge_main.h index d5f2e4f5fb..87199ee524 100644 --- a/engines/cge/cge_main.h +++ b/engines/cge/cge_main.h @@ -57,10 +57,7 @@ namespace CGE { #define kHeroFun0 (40 * 12) #define kHeroFun1 ( 2 * 12) #define kShowScummVMVersion 15 -#define kGetNamePrompt 50 -#define kGetNameTitle 51 #define kTSeq 96 -#define kNoMusic 98 #define kBadSVG 99 #define kSeqHTalk (kTSeq + 4) #define kSeqTooFar (kTSeq + 5) @@ -83,7 +80,6 @@ namespace CGE { #define kStackSize 2048 #define kSavegameCheckSum (1956 + _now + _oldLev + _game + _music + _demoText) #define kSavegame0Name ("{{INIT}}" kSvgExt) -#define kSavegame0File EncryptedStream #define kSavegameStrSize 11 #define kGameFrameDelay (1000 / 50) #define kGameTickDelay (1000 / 62) -- cgit v1.2.3 From d2027b029090bbfabd78c64786d70fadb597d54a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 14 Nov 2011 18:24:11 +0100 Subject: CGE: Rename a structure member using double-underscore (reserved) Also removed a useless comment --- engines/cge/cge_main.cpp | 2 -- engines/cge/vga13h.cpp | 4 ++-- engines/cge/vga13h.h | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 53078fe8f8..532ebdc9a6 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -1339,9 +1339,7 @@ void CGEEngine::runGame() { _vga->_showQ->append(_mouse); -// ___________ loadUser(); -// ~~~~~~~~~~~ if ((_sprite = _vga->_spareQ->locate(121)) != NULL) _commandHandlerTurbo->addCommand(kCmdSeq, -1, _vga->_mono, _sprite); diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp index 49cfcd3084..47b77688f7 100644 --- a/engines/cge/vga13h.cpp +++ b/engines/cge/vga13h.cpp @@ -492,7 +492,7 @@ void Sprite::sync(Common::Serializer &s) { _flags._near = flags & 0x0002 ? true : false; _flags._drag = flags & 0x0004 ? true : false; _flags._hold = flags & 0x0008 ? true : false; - _flags._____ = flags & 0x0010 ? true : false; + _flags._dummy = flags & 0x0010 ? true : false; _flags._slav = flags & 0x0020 ? true : false; _flags._syst = flags & 0x0040 ? true : false; _flags._kill = flags & 0x0080 ? true : false; @@ -516,7 +516,7 @@ void Sprite::sync(Common::Serializer &s) { flags = (flags << 1) | _flags._kill; flags = (flags << 1) | _flags._syst; flags = (flags << 1) | _flags._slav; - flags = (flags << 1) | _flags._____; + flags = (flags << 1) | _flags._dummy; flags = (flags << 1) | _flags._hold; flags = (flags << 1) | _flags._drag; flags = (flags << 1) | _flags._near; diff --git a/engines/cge/vga13h.h b/engines/cge/vga13h.h index 0c514c4a66..559fa78cdb 100644 --- a/engines/cge/vga13h.h +++ b/engines/cge/vga13h.h @@ -91,7 +91,7 @@ public: uint16 _near : 1; // Near action lock uint16 _drag : 1; // sprite is moveable uint16 _hold : 1; // sprite is held with mouse - uint16 _____ : 1; // intrrupt driven animation + uint16 _dummy : 1; // intrrupt driven animation uint16 _slav : 1; // slave object uint16 _syst : 1; // system object uint16 _kill : 1; // dispose memory after remove -- cgit v1.2.3 From 1f405afbda0c74f0c1ca02921c299a50da87d7d1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 14 Nov 2011 18:27:26 +0100 Subject: CGE: Add check in order to avoid the display of empty text-boxes --- engines/cge/text.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'engines/cge') diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp index 021dad5709..d426787ed4 100644 --- a/engines/cge/text.cpp +++ b/engines/cge/text.cpp @@ -135,6 +135,13 @@ char *Text::getText(int ref) { void Text::say(const char *text, Sprite *spr) { _vm->killText(); + + if (!text) + return; + + if (*text == 0) + return; + _vm->_talk = new Talk(_vm, text, kTBRound); if (!_vm->_talk) return; @@ -180,6 +187,9 @@ void CGEEngine::inf(const char *text) { if (!text) return; + if (*text == 0) + return; + killText(); _talk = new Talk(this, text, kTBRect); if (!_talk) -- cgit v1.2.3 From f028edb491c5c81df92cf00bcb458db38dc91842 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 14 Nov 2011 23:46:17 +0100 Subject: CGE: Add detection for our Freeware versions of Soltys --- engines/cge/detection.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp index f2f5764e54..3ee65a3370 100644 --- a/engines/cge/detection.cpp +++ b/engines/cge/detection.cpp @@ -55,16 +55,6 @@ static const ADGameDescription gameDescriptions[] = { }, Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO1(GUIO_NONE) }, - // English ScummVM version - { - "soltys", "", - { - {"vol.cat", 0, "bd08969b5f1acea0f92d195f750c17d5", 50176}, - {"vol.dat", 0, "f9ae2e7f8f7cac91378cdafca43faf1e", 8428832}, - AD_LISTEND - }, - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO1(GUIO_NONE) - }, { "soltys", "Soltys Demo (not supported)", { @@ -83,6 +73,24 @@ static const ADGameDescription gameDescriptions[] = { }, Common::PL_POL, Common::kPlatformPC, ADGF_DEMO , GUIO1(GUIO_NONE) }, + { + "soltys", "Soltys Freeware v1.0", + { + {"vol.cat", 0, "f1675684c68ab90272f5776f8f2c3974", 50176}, + {"vol.dat", 0, "4ffeff4abc99ac5999b55ccfc56ab1df", 8430868}, + AD_LISTEND + }, + Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS , GUIO_NONE + }, + { + "soltys", "Soltys Freeware v1.0", + { + {"vol.cat", 0, "20fdce799adb618100ef9ee2362be875", 50176}, + {"vol.dat", 0, "0e43331c846094d77f5dd201827e0a3b", 8439339}, + AD_LISTEND + }, + Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO1(GUIO_NONE) + }, AD_TABLE_END_MARKER }; -- cgit v1.2.3 From 3d59d9a13765b841fb7bc6495dcaabf17ee45c60 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 16 Nov 2011 00:00:07 +0100 Subject: CGE: Add RTL, hook Main Menu to right click on audio button --- engines/cge/cge.cpp | 8 +++----- engines/cge/cge.h | 1 + engines/cge/cge_main.cpp | 19 +++++++++++-------- engines/cge/events.cpp | 5 ----- engines/cge/events.h | 2 -- 5 files changed, 15 insertions(+), 20 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp index 74a855f442..87654c53f4 100644 --- a/engines/cge/cge.cpp +++ b/engines/cge/cge.cpp @@ -53,9 +53,7 @@ CGEEngine::CGEEngine(OSystem *syst, const ADGameDescription *gameDescription) _oldLev = 0; _pocPtr = 0; _bitmapPalette = NULL; - - - + _quitFlag = false; } void CGEEngine::initSceneValues() { @@ -144,7 +142,6 @@ void CGEEngine::deinit() { DebugMan.clearAllDebugChannels(); delete _console; - _midiPlayer->killMidi(); // Delete engine objects delete _vga; @@ -161,8 +158,9 @@ void CGEEngine::deinit() { delete _keyboard; delete _mouse; delete _eventManager; - delete _fx; delete _sound; + delete _fx; + delete _midiPlayer; delete _font; delete _commandHandler; delete _commandHandlerTurbo; diff --git a/engines/cge/cge.h b/engines/cge/cge.h index 2ce154a4fb..2aada420ed 100644 --- a/engines/cge/cge.h +++ b/engines/cge/cge.h @@ -140,6 +140,7 @@ public: virtual Common::Error saveGameState(int slot, const Common::String &desc); static const int _maxSceneArr[5]; + bool _quitFlag; const ADGameDescription *_gameDescription; int _startupMode; diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 532ebdc9a6..e5831400ee 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -923,7 +923,7 @@ void CGEEngine::optionTouch(int opt, uint16 mask) { if (mask & kMouseLeftUp) switchMusic(); else if (mask & kMouseRightUp) - warning("TODO: Use ScummVM sound dialog"); + openMainMenuDialog(); break; case 3: if (mask & kMouseLeftUp) @@ -1255,12 +1255,15 @@ void CGEEngine::mainLoop() { // Handle any pending events _eventManager->poll(); + + // Check shouldQuit() + _quitFlag = shouldQuit(); } void CGEEngine::handleFrame() { // Game frame delay uint32 millis = g_system->getMillis(); - while (!_eventManager->_quitFlag && (millis < (_lastFrame + kGameFrameDelay))) { + while (!_quitFlag && (millis < (_lastFrame + kGameFrameDelay))) { // Handle any pending events _eventManager->poll(); @@ -1309,7 +1312,7 @@ void CGEEngine::loadUser() { } void CGEEngine::runGame() { - if (_eventManager->_quitFlag) + if (_quitFlag) return; loadHeroXY(); @@ -1407,7 +1410,7 @@ void CGEEngine::runGame() { _keyboard->setClient(_sys); // main loop - while (!_finis && !_eventManager->_quitFlag) { + while (!_finis && !_quitFlag) { if (_flag[3]) _commandHandler->addCallback(kCmdExec, -1, 0, kQGame); mainLoop(); @@ -1430,7 +1433,7 @@ void CGEEngine::runGame() { void CGEEngine::movie(const char *ext) { assert(ext); - if (_eventManager->_quitFlag) + if (_quitFlag) return; char fn[12]; @@ -1442,7 +1445,7 @@ void CGEEngine::movie(const char *ext) { feedSnail(_vga->_showQ->locate(999), kTake); _vga->_showQ->append(_mouse); _keyboard->setClient(_sys); - while (!_commandHandler->idle() && !_eventManager->_quitFlag) + while (!_commandHandler->idle() && !_quitFlag) mainLoop(); _keyboard->setClient(NULL); @@ -1454,7 +1457,7 @@ void CGEEngine::movie(const char *ext) { } bool CGEEngine::showTitle(const char *name) { - if (_eventManager->_quitFlag) + if (_quitFlag) return false; _bitmapPalette = _vga->_sysPal; @@ -1487,7 +1490,7 @@ bool CGEEngine::showTitle(const char *name) { _mouse->on(); for (; !_commandHandler->idle() || Vmenu::_addr;) { mainLoop(); - if (_eventManager->_quitFlag) + if (_quitFlag) return false; } diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index 8f76d2efd5..e277d79ee1 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -282,7 +282,6 @@ void Mouse::newMouse(Common::Event &event) { /*----------------- EventManager interface -----------------*/ EventManager::EventManager(CGEEngine *vm) : _vm(vm){ - _quitFlag = false; _eventQueueHead = 0; _eventQueueTail = 0; memset(&_eventQueue, 0, kEventMax * sizeof(CGEEvent)); @@ -292,10 +291,6 @@ EventManager::EventManager(CGEEngine *vm) : _vm(vm){ void EventManager::poll() { while (g_system->getEventManager()->pollEvent(_event)) { switch (_event.type) { - case Common::EVENT_QUIT: - // Signal to quit - _quitFlag = true; - return; case Common::EVENT_KEYDOWN: case Common::EVENT_KEYUP: // Handle keyboard events diff --git a/engines/cge/events.h b/engines/cge/events.h index a4cdfed793..ac1e6231fe 100644 --- a/engines/cge/events.h +++ b/engines/cge/events.h @@ -140,8 +140,6 @@ private: void handleEvents(); public: - bool _quitFlag; - EventManager(CGEEngine *vm); void poll(); void clearEvent(Sprite *spr); -- cgit v1.2.3 From a1ff0ec7442069ccd1f236ae6459ff0edf944611 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 16 Nov 2011 00:03:24 +0100 Subject: CGE: Fix GUIO1 on an entry for consistency in detection --- engines/cge/detection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp index 3ee65a3370..58f84d0c3e 100644 --- a/engines/cge/detection.cpp +++ b/engines/cge/detection.cpp @@ -80,7 +80,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "4ffeff4abc99ac5999b55ccfc56ab1df", 8430868}, AD_LISTEND }, - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS , GUIO_NONE + Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS , GUIO1(GUIO_NONE) }, { "soltys", "Soltys Freeware v1.0", -- cgit v1.2.3 From 61795739f8f45c5de4cfd0fe57af459146c5173c Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Wed, 16 Nov 2011 18:06:30 +0100 Subject: COMMON: Rename Common::set_to to Common::fill. This makes the name match with the name of the STL function with the same behavior. --- engines/cge/events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index e277d79ee1..73bef63129 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -86,7 +86,7 @@ const uint16 Keyboard::_scummVmCodes[0x60] = { }; Keyboard::Keyboard(CGEEngine *vm) : _client(NULL), _vm(vm) { - Common::set_to(&_key[0], &_key[0x60], false); + Common::fill(&_key[0], &_key[0x60], false); _current = 0; } -- cgit v1.2.3 From bab4b6f7295f6fb960ebbf44b009bd6adbd0d33e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 16 Nov 2011 22:38:58 +0100 Subject: LAUNCHER: Introduce GUIO0() in order to replace GUIO1(GUIO_NONE) --- engines/cge/detection.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp index 58f84d0c3e..3fa3dbd7ff 100644 --- a/engines/cge/detection.cpp +++ b/engines/cge/detection.cpp @@ -44,7 +44,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "f9ae2e7f8f7cac91378cdafca43faf1e", 8437572}, AD_LISTEND }, - Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO1(GUIO_NONE) + Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO0() }, { "soltys", "Soltys Freeware", @@ -53,7 +53,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "f9ae2e7f8f7cac91378cdafca43faf1e", 8437676}, AD_LISTEND }, - Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO1(GUIO_NONE) + Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO0() }, { "soltys", "Soltys Demo (not supported)", @@ -62,7 +62,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "75d385a6074c58b69f7730481f256051", 1796710}, AD_LISTEND }, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO , GUIO1(GUIO_NONE) + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO , GUIO0() }, { "soltys", "Soltys Demo (not supported)", @@ -71,7 +71,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "c5d9b15863cab61dc125551576dece04", 1075272}, AD_LISTEND }, - Common::PL_POL, Common::kPlatformPC, ADGF_DEMO , GUIO1(GUIO_NONE) + Common::PL_POL, Common::kPlatformPC, ADGF_DEMO , GUIO0() }, { "soltys", "Soltys Freeware v1.0", @@ -80,7 +80,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "4ffeff4abc99ac5999b55ccfc56ab1df", 8430868}, AD_LISTEND }, - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS , GUIO1(GUIO_NONE) + Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS , GUIO0() }, { "soltys", "Soltys Freeware v1.0", @@ -89,7 +89,7 @@ static const ADGameDescription gameDescriptions[] = { {"vol.dat", 0, "0e43331c846094d77f5dd201827e0a3b", 8439339}, AD_LISTEND }, - Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO1(GUIO_NONE) + Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO0() }, AD_TABLE_END_MARKER }; -- cgit v1.2.3 From da626f786d30c59002cbd4348f01a759ae55d75c Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Sun, 27 Nov 2011 08:34:47 +0100 Subject: CGE: Remove unused functions, moveVmap() and moveShapes(). --- engines/cge/bitmap.cpp | 14 -------------- engines/cge/bitmap.h | 1 - engines/cge/vga13h.cpp | 7 ------- engines/cge/vga13h.h | 1 - 4 files changed, 23 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/bitmap.cpp b/engines/cge/bitmap.cpp index 39bafc5e98..0e599cc05b 100644 --- a/engines/cge/bitmap.cpp +++ b/engines/cge/bitmap.cpp @@ -154,20 +154,6 @@ char *Bitmap::forceExt(char *buf, const char *name, const char *ext) { return buf; } -uint16 Bitmap::moveVmap(uint8 *buf) { - debugC(1, kCGEDebugBitmap, "Bitmap::moveVmap(buf)"); - - if (!_v) - return 0; - - uint16 vsiz = (uint8 *)_b - (uint8 *)_v; - uint16 siz = vsiz + _h * sizeof(HideDesc); - memcpy(buf, _v, siz); - delete[] _v; - _b = (HideDesc *)((_v = buf) + vsiz); - return siz; -} - BitmapPtr Bitmap::code() { debugC(1, kCGEDebugBitmap, "Bitmap::code()"); diff --git a/engines/cge/bitmap.h b/engines/cge/bitmap.h index aa6282705c..e7179f3b0b 100644 --- a/engines/cge/bitmap.h +++ b/engines/cge/bitmap.h @@ -77,7 +77,6 @@ public: void show(int16 x, int16 y); void xShow(int16 x, int16 y); bool solidAt(int16 x, int16 y); - uint16 moveVmap(uint8 *buf); }; diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp index 47b77688f7..e271895935 100644 --- a/engines/cge/vga13h.cpp +++ b/engines/cge/vga13h.cpp @@ -115,13 +115,6 @@ BitmapPtr *Sprite::setShapeList(BitmapPtr *shpP) { return r; } -void Sprite::moveShapes(uint8 *buf) { - BitmapPtr *p; - for (p = _ext->_shpList; *p; p++) { - buf += (*p)->moveVmap(buf); - } -} - bool Sprite::works(Sprite *spr) { if (!spr || !spr->_ext) return false; diff --git a/engines/cge/vga13h.h b/engines/cge/vga13h.h index 559fa78cdb..50cf5dea0d 100644 --- a/engines/cge/vga13h.h +++ b/engines/cge/vga13h.h @@ -128,7 +128,6 @@ public: virtual ~Sprite(); BitmapPtr shp(); BitmapPtr *setShapeList(BitmapPtr *shp); - void moveShapes(uint8 *buf); Sprite *expand(); Sprite *contract(); Sprite *backShow(bool fast = false); -- cgit v1.2.3 From 6e9fe4e365d05d9c3776c266aac3dc35a537f875 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Sun, 27 Nov 2011 08:40:12 +0100 Subject: CGE: Fix mismatched free() / delete / delete [] Valgrind warning. --- engines/cge/bitmap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/bitmap.cpp b/engines/cge/bitmap.cpp index 0e599cc05b..4b5034756c 100644 --- a/engines/cge/bitmap.cpp +++ b/engines/cge/bitmap.cpp @@ -136,7 +136,7 @@ Bitmap &Bitmap::operator=(const Bitmap &bmp) { } else { uint16 vsiz = (uint8 *)bmp._b - (uint8 *)v0; uint16 siz = vsiz + _h * sizeof(HideDesc); - uint8 *v1 = (uint8 *)malloc(sizeof(uint8) * siz); + uint8 *v1 = new uint8[siz]; assert(v1 != NULL); memcpy(v1, v0, siz); _b = (HideDesc *)((_v = v1) + vsiz); -- cgit v1.2.3 From e4c13058268df2ad817a2a3b835c53772f3d99dd Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 27 Nov 2011 18:42:24 +1100 Subject: CGE: Disable restoring games whilst a cut-scene is active This is because previously after restoring you could no longer move the Chief. --- engines/cge/cge.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp index 87654c53f4..8e74253f86 100644 --- a/engines/cge/cge.cpp +++ b/engines/cge/cge.cpp @@ -208,7 +208,8 @@ bool CGEEngine::hasFeature(EngineFeature f) const { } bool CGEEngine::canLoadGameStateCurrently() { - return (_startupMode == 0) && _mouse->_active; + return (_startupMode == 0) && _mouse->_active && + _commandHandler->idle() && !_hero->_flags._hide; } bool CGEEngine::canSaveGameStateCurrently() { -- cgit v1.2.3 From 50ce261dda5fd51f5313cbe0140d170a66ed35af Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 27 Nov 2011 19:57:34 +1100 Subject: CGE: Hooked up the ScummVM debugger --- engines/cge/events.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'engines/cge') diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index 73bef63129..8ace047bda 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -148,6 +148,11 @@ bool Keyboard::getKey(Common::Event &event, int &cgeCode) { _vm->loadGameState(savegameId); } return false; + } else if ((keycode == Common::KEYCODE_d) && (event.kbd.flags & Common::KBD_CTRL)) { + // Start the debugger + _vm->_console->attach(); + _vm->_console->onFrame(); + return false; } // Scan through the ScummVM mapping list -- cgit v1.2.3 From a9fb11b7042b2a20c0b154aa4d4736d3635a4ce6 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 27 Nov 2011 10:05:55 +0100 Subject: CGE: Fix Console attach code --- engines/cge/events.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index 8ace047bda..5dbae80438 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -150,8 +150,8 @@ bool Keyboard::getKey(Common::Event &event, int &cgeCode) { return false; } else if ((keycode == Common::KEYCODE_d) && (event.kbd.flags & Common::KBD_CTRL)) { // Start the debugger - _vm->_console->attach(); - _vm->_console->onFrame(); + _vm->getDebugger()->attach(); + _vm->getDebugger()->onFrame(); return false; } -- cgit v1.2.3 From 7d9caea68a28b44daee784849138dcbb195cff41 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 27 Nov 2011 21:51:13 +1100 Subject: CGE: Fix setting up scene barriers when starting a new game --- engines/cge/snail.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/snail.h b/engines/cge/snail.h index 3acbbd0e5f..6749d6bcc8 100644 --- a/engines/cge/snail.h +++ b/engines/cge/snail.h @@ -45,7 +45,7 @@ enum CommandType { kCmdSetX, kCmdSetY, kCmdSetZ, kCmdTrans, kCmdPort, kCmdNext, kCmdNNext, kCmdTNext, kCmdRNNext, kCmdRTNext, kCmdRMNear, kCmdRmTake, kCmdFlag, kCmdSetRef, kCmdBackPt, - kCmdFlash, kCmdLight, kCmdSetHBarrier, kCmdSetVBarrier, kCmdWalk, + kCmdFlash, kCmdLight, kCmdSetVBarrier, kCmdSetHBarrier, kCmdWalk, kCmdReach, kCmdCover, kCmdUncover, kCmdClear, kCmdTalk, kCmdMouse, kCmdSound, kCmdCount, kCmdExec, kCmdStep, kCmdZTrim, kCmdGhost -- cgit v1.2.3 From 37756c9ffeabcf2dfc91b2dce36dc928d580ce3d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 27 Nov 2011 22:16:52 +1100 Subject: CGE: Better fix for restoring savegames when a cut-scene is active --- engines/cge/cge.cpp | 3 +-- engines/cge/cge_main.cpp | 1 + engines/cge/snail.cpp | 4 ++++ engines/cge/snail.h | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp index 8e74253f86..87654c53f4 100644 --- a/engines/cge/cge.cpp +++ b/engines/cge/cge.cpp @@ -208,8 +208,7 @@ bool CGEEngine::hasFeature(EngineFeature f) const { } bool CGEEngine::canLoadGameStateCurrently() { - return (_startupMode == 0) && _mouse->_active && - _commandHandler->idle() && !_hero->_flags._hide; + return (_startupMode == 0) && _mouse->_active; } bool CGEEngine::canSaveGameStateCurrently() { diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index e5831400ee..01bd037315 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -292,6 +292,7 @@ Common::Error CGEEngine::loadGameState(int slot) { void CGEEngine::resetGame() { _vga->_spareQ->clear(); + _commandHandler->reset(); } Common::Error CGEEngine::saveGameState(int slot, const Common::String &desc) { diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp index 5ab8f6314b..9db5406c25 100644 --- a/engines/cge/snail.cpp +++ b/engines/cge/snail.cpp @@ -375,6 +375,10 @@ bool CommandHandler::idle() { return (_head == _tail); } +void CommandHandler::reset() { + _tail = _head; +} + /** * Handles mini-Games logic * @param com Command diff --git a/engines/cge/snail.h b/engines/cge/snail.h index 6749d6bcc8..6a9e717441 100644 --- a/engines/cge/snail.h +++ b/engines/cge/snail.h @@ -70,6 +70,7 @@ public: void addCallback(CommandType com, int ref, int val, CallbackType cbType); void insertCommand(CommandType com, int ref, int val, void *ptr); bool idle(); + void reset(); private: CGEEngine *_vm; bool _turbo; -- cgit v1.2.3 From d9e86715d6531304bc5a3826a3c151db0b56edba Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 27 Nov 2011 16:53:56 +0100 Subject: CGE: Fix Valgrind warning (thanks to digitall) --- engines/cge/fileio.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/cge') diff --git a/engines/cge/fileio.cpp b/engines/cge/fileio.cpp index 6db0818287..c50db4e929 100644 --- a/engines/cge/fileio.cpp +++ b/engines/cge/fileio.cpp @@ -235,6 +235,7 @@ int32 EncryptedStream::pos() { } EncryptedStream::~EncryptedStream() { + delete _readStream; } } // End of namespace CGE -- cgit v1.2.3 From b3c9b51e4638afa3fb2afd32d2a9b3e16153d0e3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 28 Nov 2011 18:54:01 +0100 Subject: CGE: Add to the console a function to display boundaries --- engines/cge/cge.cpp | 3 ++- engines/cge/cge.h | 6 ++++-- engines/cge/console.cpp | 14 ++++++++++++++ engines/cge/console.h | 1 + engines/cge/vga13h.cpp | 15 ++++++++++++++- engines/cge/vga13h.h | 3 ++- engines/cge/walk.h | 1 - 7 files changed, 37 insertions(+), 6 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp index 87654c53f4..34e7d3f2f9 100644 --- a/engines/cge/cge.cpp +++ b/engines/cge/cge.cpp @@ -54,6 +54,7 @@ CGEEngine::CGEEngine(OSystem *syst, const ADGameDescription *gameDescription) _pocPtr = 0; _bitmapPalette = NULL; _quitFlag = false; + _showBoundariesFl = false; } void CGEEngine::initSceneValues() { @@ -89,7 +90,7 @@ void CGEEngine::init() { _font = new Font(this, "CGE"); _text = new Text(this, "CGE"); _talk = NULL; - _vga = new Vga(); + _vga = new Vga(this); _sys = new System(this); _pocLight = new PocLight(this); for (int i = 0; i < kPocketNX; i++) diff --git a/engines/cge/cge.h b/engines/cge/cge.h index 2aada420ed..d494af0700 100644 --- a/engines/cge/cge.h +++ b/engines/cge/cge.h @@ -73,8 +73,9 @@ class Talk; #define kPathMax 128 #define kCryptSeed 0xA5 #define kMaxFile 128 -#define kMapXCnt 40 -#define kMapZCnt 20 +#define kMapXCnt 40 +#define kMapZCnt 20 +#define kMapTop 80 // our engine debug channels enum { @@ -141,6 +142,7 @@ public: static const int _maxSceneArr[5]; bool _quitFlag; + bool _showBoundariesFl; const ADGameDescription *_gameDescription; int _startupMode; diff --git a/engines/cge/console.cpp b/engines/cge/console.cpp index 71eedf34ea..105f241944 100644 --- a/engines/cge/console.cpp +++ b/engines/cge/console.cpp @@ -26,9 +26,23 @@ namespace CGE { CGEConsole::CGEConsole(CGEEngine *vm) : GUI::Debugger(), _vm(vm) { + DCmd_Register("Boundaries", WRAP_METHOD(CGEConsole, Cmd_boundaries)); } CGEConsole::~CGEConsole() { } +/** + * This command shows and hides boundaries + */ +bool CGEConsole::Cmd_boundaries(int argc, const char **argv) { + if (argc != 1) { + DebugPrintf("Usage: %s\n", argv[0]); + return true; + } + + _vm->_showBoundariesFl = !_vm->_showBoundariesFl; + return false; +} + } // End of namespace CGE diff --git a/engines/cge/console.h b/engines/cge/console.h index 25a1a4fae3..ea36dfbaae 100644 --- a/engines/cge/console.h +++ b/engines/cge/console.h @@ -36,6 +36,7 @@ public: private: CGEEngine *_vm; + bool Cmd_boundaries(int argc, const char **argv); }; } // End of namespace CGE diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp index e271895935..fb81925a7f 100644 --- a/engines/cge/vga13h.cpp +++ b/engines/cge/vga13h.cpp @@ -625,7 +625,7 @@ Sprite *Queue::locate(int ref) { return NULL; } -Vga::Vga() : _frmCnt(0), _msg(NULL), _name(NULL), _setPal(false), _mono(0) { +Vga::Vga(CGEEngine *vm) : _frmCnt(0), _msg(NULL), _name(NULL), _setPal(false), _mono(0), _vm(vm) { _oldColors = NULL; _newColors = NULL; _showQ = new Queue(true); @@ -822,6 +822,19 @@ void Vga::update() { updateColors(); _setPal = false; } + if (_vm->_showBoundariesFl) { + Vga::_page[0]->hLine(0, 200 - kPanHeight, 320, 0xee); + if (_vm->_barriers[_vm->_now]._horz != 255) { + warning("hBar %d", _vm->_barriers[_vm->_now]._horz); + for (int i = 0; i < 8; i++) + Vga::_page[0]->vLine((_vm->_barriers[_vm->_now]._horz * 8) + i, 0, 200, 0xff); + } + if (_vm->_barriers[_vm->_now]._vert != 255) { + warning("vBar %d", _vm->_barriers[_vm->_now]._vert); + for (int i = 0; i < 4; i++) + Vga::_page[0]->hLine(0, 80 + (_vm->_barriers[_vm->_now]._vert * 4) + i, 320, 0xff); + } + } g_system->copyRectToScreen((const byte *)Vga::_page[0]->getBasePtr(0, 0), kScrWidth, 0, 0, kScrWidth, kScrHeight); g_system->updateScreen(); diff --git a/engines/cge/vga13h.h b/engines/cge/vga13h.h index 50cf5dea0d..beca19f667 100644 --- a/engines/cge/vga13h.h +++ b/engines/cge/vga13h.h @@ -177,6 +177,7 @@ public: }; class Vga { + CGEEngine *_vm; bool _setPal; Dac *_oldColors; Dac *_newColors; @@ -196,7 +197,7 @@ public: Graphics::Surface *_page[4]; Dac *_sysPal; - Vga(); + Vga(CGEEngine *vm); ~Vga(); uint8 *glass(Dac *pal, const uint8 colR, const uint8 colG, const uint8 colB); diff --git a/engines/cge/walk.h b/engines/cge/walk.h index 99dc362eec..00ec080416 100644 --- a/engines/cge/walk.h +++ b/engines/cge/walk.h @@ -35,7 +35,6 @@ namespace CGE { #define kMapArrSize (kMapZCnt * kMapXCnt) -#define kMapTop 80 #define kMapHig 80 #define kMapGridX (kScrWidth / kMapXCnt) #define kMapGridZ (kMapHig / kMapZCnt) -- cgit v1.2.3 From 5954b8bfeb679e67efbd51ab5ead62a946de737d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 28 Nov 2011 18:55:13 +0100 Subject: CGE: Remove useless debugging traces --- engines/cge/vga13h.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp index fb81925a7f..186de24036 100644 --- a/engines/cge/vga13h.cpp +++ b/engines/cge/vga13h.cpp @@ -825,12 +825,10 @@ void Vga::update() { if (_vm->_showBoundariesFl) { Vga::_page[0]->hLine(0, 200 - kPanHeight, 320, 0xee); if (_vm->_barriers[_vm->_now]._horz != 255) { - warning("hBar %d", _vm->_barriers[_vm->_now]._horz); for (int i = 0; i < 8; i++) Vga::_page[0]->vLine((_vm->_barriers[_vm->_now]._horz * 8) + i, 0, 200, 0xff); } if (_vm->_barriers[_vm->_now]._vert != 255) { - warning("vBar %d", _vm->_barriers[_vm->_now]._vert); for (int i = 0; i < 4; i++) Vga::_page[0]->hLine(0, 80 + (_vm->_barriers[_vm->_now]._vert * 4) + i, 320, 0xff); } -- cgit v1.2.3 From 732006611327898436da8b58f57611ffe39b4455 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 29 Nov 2011 23:27:00 +0100 Subject: CGE: Remove key sound in System::touch(). ALTering dice no longer is no longer noisy --- engines/cge/cge_main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 01bd037315..db47c61d42 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -757,7 +757,8 @@ void System::touch(uint16 mask, int x, int y) { funTouch(); if (mask & kEventKeyb) { - _vm->keyClick(); + // The original was calling keyClick() + // The sound is uselessly annoying and noisy, so it has been removed _vm->killText(); if (_vm->_startupMode == 1) { _vm->_commandHandler->addCommand(kCmdClear, -1, 0, NULL); -- cgit v1.2.3 From d263bd26f22f4563fe5dbaa6b68ec04004cf46c6 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 30 Nov 2011 00:06:57 +0100 Subject: CGE: Remove several useless constants in Keys enum --- engines/cge/events.h | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/events.h b/engines/cge/events.h index ac1e6231fe..7ead4cbc7b 100644 --- a/engines/cge/events.h +++ b/engines/cge/events.h @@ -52,32 +52,14 @@ enum EventMask { }; enum Keys { - NoKey = 0, CtrlA, CtrlB, CtrlC, CtrlD, CtrlE, CtrlF, CtrlG, CtrlH, - CtrlI, CtrlJ, CtrlK, CtrlL, CtrlM, CtrlN, CtrlO, CtrlP, - CtrlQ, CtrlR, CtrlS, CtrlT, CtrlU, CtrlV, CtrlW, CtrlX, - CtrlY, CtrlZ, BSp = 8, Tab, Enter = 13, - Eof = 26, Esc, - AltQ = 256 + 16, AltW, AltE, AltR, AltT, AltY, AltU, AltI, AltO, AltP, - AltA = 256 + 30, AltS, AltD, AltF, AltG, AltH, AltJ, AltK, AltL, - AltZ = 256 + 44, AltX, AltC, AltV, AltB, AltN, AltM, + Esc = 27, F11 = 256 + 87, F12, F1 = 256 + 59, F2, F3, F4, F5, F6, F7, F8, F9, F10, - ShiftTab = 256 + 15, - ShiftF1 = 256 + 84, ShiftF2, ShiftF3, ShiftF4, ShiftF5, - ShiftF6, ShiftF7, ShiftF8, ShiftF9, ShiftF10, - CtrlF1 = 256 + 94, CtrlF2, CtrlF3, CtrlF4, CtrlF5, - CtrlF6, CtrlF7, CtrlF8, CtrlF9, CtrlF10, - AltF1 = 256 + 104, AltF2, AltF3, AltF4, AltF5, - AltF6, AltF7, AltF8, AltF9, AltF10, Home = 256 + 71, Up, PgUp, Left = 256 + 75, Ctr, Right, - End = 256 + 79, Down, PgDn, Ins, Del, - CtrlLeft = 256 + 115, CtrlRight, CtrlEnd, CtrlPgDn, CtrlHome, - CtrlPgUp = 256 + 132, - MouseLeft = 512 + 1, MouseRight, - TwiceLeft = 512 + 256 + 1, TwiceRight + End = 256 + 79, Down, PgDn, Ins, Del }; class Keyboard { -- cgit v1.2.3 From a12ba5f6a6fc29107b5b785203af71caa014a0da Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 30 Nov 2011 19:52:19 +0100 Subject: CGE: Simplify keyboard handling --- engines/cge/cge_main.cpp | 16 ------ engines/cge/events.cpp | 142 ++++++++++++++--------------------------------- engines/cge/events.h | 23 +------- engines/cge/snail.cpp | 2 +- 4 files changed, 46 insertions(+), 137 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index db47c61d42..5af52cd1de 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -764,22 +764,6 @@ void System::touch(uint16 mask, int x, int y) { _vm->_commandHandler->addCommand(kCmdClear, -1, 0, NULL); return; } - switch (x) { - case 'X': - if (_vm->_keyboard->_key[kKeyAlt]) - _vm->quit(); - break; - case '0': - case '1': - case '2': - case '3': - case '4': - if (_vm->_keyboard->_key[kKeyAlt]) { - _vm->_commandHandler->addCommand(kCmdLevel, -1, x - '0', NULL); - break; - } - break; - } } else { if (_vm->_startupMode) return; diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index 5dbae80438..7c98f00b7b 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -39,55 +39,8 @@ namespace CGE { /*----------------- KEYBOARD interface -----------------*/ -const uint16 Keyboard::_code[0x60] = { - 0, Esc, '1', '2', '3', - '4', '5', '6', '7', '8', - '9', '0', '-', '+', BSp, - Tab, 'Q', 'W', 'E', 'R', - 'T', 'Y', 'U', 'I', 'O', - 'P', '[', ']', Enter, 0/*Ctrl*/, - 'A', 'S', 'D', 'F', 'G', - 'H', 'J', 'K', 'L', ';', - '\'', '`', 0/*LShift*/, '\\', 'Z', - 'X', 'C', 'V', 'B', 'N', - 'M', ',', '.', '/', 0/*RShift*/, - '*', 0/*Alt*/, ' ', 0/*Caps*/, F1, - F2, F3, F4, F5, F6, - F7, F8, F9, F10, 0/*NumLock*/, - 0/*ScrollLock*/, Home, Up, PgUp, '-', - Left, Ctr, Right, '+', End, - Down, PgDn, Ins, Del, 0 * 0x54, - 0 * 0x55, 0 * 0x56, F11, F12, 0 * 0x59, - 0 * 0x5A, 0 * 0x5B, 0 * 0x5C, 0 * 0x5D, 0 * 0x5E, - 0 * 0x5F -}; - -const uint16 Keyboard::_scummVmCodes[0x60] = { - 0, Common::KEYCODE_ESCAPE, Common::KEYCODE_1, Common::KEYCODE_2, Common::KEYCODE_3, - Common::KEYCODE_4, Common::KEYCODE_5, Common::KEYCODE_6, Common::KEYCODE_7, Common::KEYCODE_8, - Common::KEYCODE_9, Common::KEYCODE_0, Common::KEYCODE_MINUS, Common::KEYCODE_PLUS, Common::KEYCODE_BACKSPACE, - Common::KEYCODE_TAB, Common::KEYCODE_q, Common::KEYCODE_w, Common::KEYCODE_e, Common::KEYCODE_r, - Common::KEYCODE_t, Common::KEYCODE_y, Common::KEYCODE_u, Common::KEYCODE_i, Common::KEYCODE_o, - Common::KEYCODE_p, Common::KEYCODE_LEFTBRACKET, Common::KEYCODE_RIGHTBRACKET, Common::KEYCODE_RETURN, 0/*Ctrl*/, - Common::KEYCODE_a, Common::KEYCODE_s, Common::KEYCODE_d, Common::KEYCODE_f, Common::KEYCODE_g, - Common::KEYCODE_h, Common::KEYCODE_j, Common::KEYCODE_k, Common::KEYCODE_l, Common::KEYCODE_SEMICOLON, - Common::KEYCODE_BACKSLASH, Common::KEYCODE_TILDE, Common::KEYCODE_LSHIFT, Common::KEYCODE_BACKSLASH, Common::KEYCODE_z, - Common::KEYCODE_x, Common::KEYCODE_c, Common::KEYCODE_v, Common::KEYCODE_b, Common::KEYCODE_n, - Common::KEYCODE_m, Common::KEYCODE_COMMA, Common::KEYCODE_PERIOD, Common::KEYCODE_SLASH, Common::KEYCODE_RSHIFT, - Common::KEYCODE_KP_MULTIPLY, 0 /*Alt*/, Common::KEYCODE_SPACE, Common::KEYCODE_CAPSLOCK, Common::KEYCODE_F1, - Common::KEYCODE_F2, Common::KEYCODE_F3, Common::KEYCODE_F4, Common::KEYCODE_F5, Common::KEYCODE_F6, - Common::KEYCODE_F7, Common::KEYCODE_F8, Common::KEYCODE_F9, Common::KEYCODE_F10, Common::KEYCODE_NUMLOCK, - Common::KEYCODE_SCROLLOCK, Common::KEYCODE_KP7, Common::KEYCODE_KP8, Common::KEYCODE_KP9, Common::KEYCODE_KP_MINUS, - Common::KEYCODE_KP4, Common::KEYCODE_KP5, Common::KEYCODE_KP6, Common::KEYCODE_KP_PLUS, Common::KEYCODE_KP1, - Common::KEYCODE_KP2, Common::KEYCODE_KP3, Common::KEYCODE_KP0, Common::KEYCODE_KP_PERIOD, 0, - 0, 0, Common::KEYCODE_F11, Common::KEYCODE_F12, 0, - 0, 0, 0, 0, 0, - 0 -}; - Keyboard::Keyboard(CGEEngine *vm) : _client(NULL), _vm(vm) { - Common::fill(&_key[0], &_key[0x60], false); - _current = 0; + _keyAlt = false; } Keyboard::~Keyboard() { @@ -98,28 +51,23 @@ Sprite *Keyboard::setClient(Sprite *spr) { return spr; } -bool Keyboard::getKey(Common::Event &event, int &cgeCode) { +bool Keyboard::getKey(Common::Event &event) { Common::KeyCode keycode = event.kbd.keycode; - if ((keycode == Common::KEYCODE_LCTRL) || (keycode == Common::KEYCODE_RCTRL)) { - cgeCode = kKeyCtrl; - return true; - } - if ((keycode == Common::KEYCODE_LALT) || (keycode == Common::KEYCODE_RALT)) { - cgeCode = kKeyAlt; - return true; - } - if (keycode == Common::KEYCODE_KP_ENTER) { - cgeCode = 28; - return true; - } - if (keycode == Common::KEYCODE_F1) { + + if ((keycode == Common::KEYCODE_LALT) || (keycode == Common::KEYCODE_RALT)) + _keyAlt = true; + else + _keyAlt = false; + + switch (keycode) { + case Common::KEYCODE_F1: if (event.type == Common::EVENT_KEYUP) return false; // Display ScummVM version and translation strings for (int i = 0; i < 5; i++) _vm->_commandHandler->addCommand(kCmdInf, 1, kShowScummVMVersion + i, NULL); return false; - } else if (keycode == Common::KEYCODE_F5) { + case Common::KEYCODE_F5: if (_vm->canSaveGameStateCurrently()) { const EnginePlugin *plugin = NULL; EngineMan.findGame(_vm->_gameDescription->gameid, &plugin); @@ -132,9 +80,9 @@ bool Keyboard::getKey(Common::Event &event, int &cgeCode) { if (savegameId != -1) _vm->saveGameState(savegameId, savegameDescription); - } + } return false; - } else if (keycode == Common::KEYCODE_F7) { + case Common::KEYCODE_F7: if (_vm->canLoadGameStateCurrently()) { const EnginePlugin *plugin = NULL; EngineMan.findGame(_vm->_gameDescription->gameid, &plugin); @@ -148,52 +96,48 @@ bool Keyboard::getKey(Common::Event &event, int &cgeCode) { _vm->loadGameState(savegameId); } return false; - } else if ((keycode == Common::KEYCODE_d) && (event.kbd.flags & Common::KBD_CTRL)) { + case Common::KEYCODE_d: + if (event.kbd.flags & Common::KBD_CTRL) { // Start the debugger - _vm->getDebugger()->attach(); - _vm->getDebugger()->onFrame(); - return false; - } - - // Scan through the ScummVM mapping list - for (int idx = 0; idx < 0x60; idx++) { - if (_scummVmCodes[idx] == event.kbd.ascii) { - cgeCode = idx; - return true; + _vm->getDebugger()->attach(); + _vm->getDebugger()->onFrame(); + return false; } + break; + case Common::KEYCODE_x: + if (event.kbd.flags & Common::KBD_ALT) { + _vm->quit(); + return false; + } + break; + case Common::KEYCODE_0: + case Common::KEYCODE_1: + case Common::KEYCODE_2: + case Common::KEYCODE_3: + case Common::KEYCODE_4: + if (event.kbd.flags & Common::KBD_ALT) { + _vm->_commandHandler->addCommand(kCmdLevel, -1, keycode - '0', NULL); + return false; + } + default: + break; } - return false; + return true; } void Keyboard::newKeyboard(Common::Event &event) { - int keycode; - if (!getKey(event, keycode)) + if (!getKey(event)) return; - if (event.type == Common::EVENT_KEYUP) { - // Key release - _key[keycode] = false; - } else if (event.type == Common::EVENT_KEYDOWN) { - // Key press - _key[keycode] = true; - _current = Keyboard::_code[keycode]; - - if (_client) { - CGEEvent &evt = _vm->_eventManager->getNextEvent(); - evt._x = _current; // Keycode - evt._mask = kEventKeyb; // Event mask - evt._spritePtr = _client; // Sprite pointer - } + if ((event.type == Common::EVENT_KEYDOWN) && (_client)) { + CGEEvent &evt = _vm->_eventManager->getNextEvent(); + evt._x = event.kbd.keycode; // Keycode + evt._mask = kEventKeyb; // Event mask + evt._spritePtr = _client; // Sprite pointer } } -uint16 Keyboard::lastKey() { - uint16 cur = _current; - _current = 0; - return cur; -} - /*----------------- MOUSE interface -----------------*/ Mouse::Mouse(CGEEngine *vm) : Sprite(vm, NULL), _busy(NULL), _hold(NULL), _hx(0), _vm(vm) { diff --git a/engines/cge/events.h b/engines/cge/events.h index 7ead4cbc7b..6bbd52e4a5 100644 --- a/engines/cge/events.h +++ b/engines/cge/events.h @@ -37,8 +37,6 @@ namespace CGE { /*----------------- KEYBOARD interface -----------------*/ -#define kKeyCtrl 29 -#define kKeyAlt 56 #define kEventMax 256 enum EventMask { @@ -51,31 +49,15 @@ enum EventMask { kEventKeyb = 1 << 7 }; -enum Keys { - BSp = 8, Tab, - Enter = 13, - Esc = 27, - F11 = 256 + 87, F12, - F1 = 256 + 59, F2, F3, F4, F5, F6, F7, F8, F9, F10, - Home = 256 + 71, Up, PgUp, - Left = 256 + 75, Ctr, Right, - End = 256 + 79, Down, PgDn, Ins, Del -}; - class Keyboard { private: - bool getKey(Common::Event &event, int &cgeCode); - uint16 _current; + bool getKey(Common::Event &event); CGEEngine *_vm; public: - static const uint16 _code[0x60]; - static const uint16 _scummVmCodes[0x60]; - Sprite *_client; - bool _key[0x60]; + bool _keyAlt; void newKeyboard(Common::Event &event); - uint16 lastKey(); Sprite *setClient(Sprite *spr); Keyboard(CGEEngine *vm); @@ -100,7 +82,6 @@ public: bool _exist; int _buttons; Sprite *_busy; - //Sprite *Touched; Mouse(CGEEngine *vm); ~Mouse(); void on(); diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp index 9db5406c25..f75510ad6c 100644 --- a/engines/cge/snail.cpp +++ b/engines/cge/snail.cpp @@ -493,7 +493,7 @@ void CGEEngine::snGame(Sprite *spr, int num) { _sprK2->step(newRandom(6)); _sprK3->step(newRandom(6)); - if (spr->_ref == 1 && _keyboard->_key[kKeyAlt]) { + if (spr->_ref == 1 && _keyboard->_keyAlt) { _sprK1->step(5); _sprK2->step(5); _sprK3->step(5); -- cgit v1.2.3 From 22263bd763c5d31c562bf0da8986e057103dd3fe Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 30 Nov 2011 21:21:34 +0100 Subject: CGE: Only skips animations when pressing ESC. This should allow tsoliman to see the end of the intro --- engines/cge/cge_main.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 5af52cd1de..c67356e545 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -757,12 +757,14 @@ void System::touch(uint16 mask, int x, int y) { funTouch(); if (mask & kEventKeyb) { - // The original was calling keyClick() - // The sound is uselessly annoying and noisy, so it has been removed - _vm->killText(); - if (_vm->_startupMode == 1) { - _vm->_commandHandler->addCommand(kCmdClear, -1, 0, NULL); - return; + if (x == Common::KEYCODE_ESCAPE) { + // The original was calling keyClick() + // The sound is uselessly annoying and noisy, so it has been removed + _vm->killText(); + if (_vm->_startupMode == 1) { + _vm->_commandHandler->addCommand(kCmdClear, -1, 0, NULL); + return; + } } } else { if (_vm->_startupMode) -- cgit v1.2.3 From ab2e5015afe136ce4ef37edbba0faa58c8a9cc61 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 3 Dec 2011 14:55:04 +0100 Subject: CGE: Soltys - Fix for bug #3448836 (losing scene number display after loading and changing scene) --- engines/cge/cge_main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index c67356e545..6bcdb0f389 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -688,6 +688,7 @@ void CGEEngine::xScene() { debugC(6, kCGEDebugEngine, "CGEEngine::xScene()"); sceneDown(); + _commandHandler->addCommand(kCmdLevel, -1, _lev, &_sceneLight); sceneUp(); } @@ -729,6 +730,7 @@ void CGEEngine::switchScene(int newScene) { keyClick(); _commandHandler->addCommand(kCmdLabel, -1, 0, NULL); // wait for repaint _commandHandler->addCallback(kCmdExec, 0, 0, kXScene); // switch scene + } } @@ -821,7 +823,7 @@ void System::tick() { if (_vm->_commandHandler->idle()) { if (_vm->_flag[0]) // Pain flag _vm->heroCover(9); - else { // CHECKME: Before, was: if (Startup::_core >= CORE_MID) { + else { int n = _vm->newRandom(100); if (n > 96) _vm->heroCover(6 + (_vm->_hero->_x + _vm->_hero->_w / 2 < kScrWidth / 2)); -- cgit v1.2.3 From 816b65ff2c2aefa6cd018da8c1505cdf9a30e5f6 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 3 Dec 2011 17:52:05 +0100 Subject: CGE: Soltys - Fix initialization of a couple of bool variables --- engines/cge/cge_main.cpp | 2 +- engines/cge/snail.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 6bcdb0f389..bd294716e2 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -721,7 +721,7 @@ void CGEEngine::switchScene(int newScene) { if (_hero) { _hero->park(); _hero->step(0); - _vga->_spareQ->_show = 0; + _vga->_spareQ->_show = false; } _sceneLight->gotoxy(kSceneX + ((_now - 1) % kSceneNx) * kSceneDx + kSceneSX, kSceneY + ((_now - 1) / kSceneNx) * kSceneDy + kSceneSY); diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp index f75510ad6c..f50f66942b 100644 --- a/engines/cge/snail.cpp +++ b/engines/cge/snail.cpp @@ -447,7 +447,7 @@ void CGEEngine::snGame(Sprite *spr, int num) { _commandHandler->addCommand(kCmdSeq, -1, 0, dup[2]); // Get Away (Her) _commandHandler->addCommand(kCmdSetXY, -1, 182 + kScrWidth * 62, dup[2]); _commandHandler->addCommand(kCmdSetZ, -1, 9, dup[2]); - _game = 0; + _game = false; return; } else { _commandHandler->addCommand(kCmdSeq, -1, 2, dup[0]); // reset animation sequence -- cgit v1.2.3 From 14cdd034a8a23312d14f6d0e0ada27d33e88e645 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 3 Dec 2011 18:25:10 +0100 Subject: CGE: Fix an assert in intro --- engines/cge/cge_main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index bd294716e2..c8ff1ee001 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -688,7 +688,8 @@ void CGEEngine::xScene() { debugC(6, kCGEDebugEngine, "CGEEngine::xScene()"); sceneDown(); - _commandHandler->addCommand(kCmdLevel, -1, _lev, &_sceneLight); + if (_lev != -1) + _commandHandler->addCommand(kCmdLevel, -1, _lev, &_sceneLight); sceneUp(); } -- cgit v1.2.3 From 9eebe512c8c0cfb7bfd73ecd9e9e163cf95f8403 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 5 Dec 2011 00:02:25 +0100 Subject: CGE: Add a hack to fix bug #3450423 (infoline too large in polish version, scene 14) --- engines/cge/talk.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'engines/cge') diff --git a/engines/cge/talk.cpp b/engines/cge/talk.cpp index 467b39be40..d9be56e798 100644 --- a/engines/cge/talk.cpp +++ b/engines/cge/talk.cpp @@ -271,7 +271,15 @@ void InfoLine::update(const char *text) { uint16 cw = _vm->_font->_widthArr[(unsigned char)*text]; uint8 *fp = _vm->_font->_map + _vm->_font->_pos[(unsigned char)*text]; - for (uint16 i = 0; i < cw; i++) { + // This hack compensates the font modification done to fix the display + // of the 'F1' text. Specifically, it reduces the width of the space + // character when it has been enlarged. + // This hack fixes bug #3450423. + int8 hackStart = 0; + if ((*text == 0x20) && (cw > 4)) + hackStart = 2; + + for (uint16 i = hackStart; i < cw; i++) { uint16 b = fp[i]; for (uint16 n = 0; n < kFontHigh; n++) { if (b & 1) -- cgit v1.2.3 From f3884d1a98c19134514a1fca6af48a59f3b57e91 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 5 Dec 2011 20:59:51 +0100 Subject: CGE: Better handling of the wide 'space' character --- engines/cge/cge.h | 2 +- engines/cge/snail.cpp | 2 +- engines/cge/talk.cpp | 42 ++++++++++++++++++++++++++++-------------- engines/cge/talk.h | 3 ++- engines/cge/text.cpp | 4 ++-- 5 files changed, 34 insertions(+), 19 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/cge.h b/engines/cge/cge.h index d494af0700..d324b293fa 100644 --- a/engines/cge/cge.h +++ b/engines/cge/cge.h @@ -225,7 +225,7 @@ public: void runGame(); bool showTitle(const char *name); void movie(const char *ext); - void inf(const char *text); + void inf(const char *text, bool wideSpace = false); void selectSound(); void dummy() {} void NONE(); diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp index f50f66942b..c26f68fa7b 100644 --- a/engines/cge/snail.cpp +++ b/engines/cge/snail.cpp @@ -194,7 +194,7 @@ void CommandHandler::runCommand() { break; case kCmdInf: if (_talkEnable) { - _vm->inf(_vm->_text->getText(tailCmd->_val)); + _vm->inf(_vm->_text->getText(tailCmd->_val), true); _vm->_sys->_funDel = kHeroFun0; } break; diff --git a/engines/cge/talk.cpp b/engines/cge/talk.cpp index d9be56e798..5a39228968 100644 --- a/engines/cge/talk.cpp +++ b/engines/cge/talk.cpp @@ -73,8 +73,8 @@ uint16 Font::width(const char *text) { return w; } -Talk::Talk(CGEEngine *vm, const char *text, TextBoxStyle mode) - : Sprite(vm, NULL), _mode(mode), _vm(vm) { +Talk::Talk(CGEEngine *vm, const char *text, TextBoxStyle mode, bool wideSpace) + : Sprite(vm, NULL), _mode(mode), _wideSpace(wideSpace), _vm(vm) { _ts = NULL; _flags._syst = true; update(text); @@ -85,6 +85,7 @@ Talk::Talk(CGEEngine *vm) : Sprite(vm, NULL), _mode(kTBPure), _vm(vm) { _ts = NULL; _flags._syst = true; + _wideSpace = false; } void Talk::update(const char *text) { @@ -103,7 +104,9 @@ void Talk::update(const char *text) { if (k > mw) mw = k; k = 2 * hmarg; - } else + } else if ((*p == 0x20) && (_vm->_font->_widthArr[(unsigned char)*p] > 4) && (!_wideSpace)) + k += _vm->_font->_widthArr[(unsigned char)*p] - 2; + else k += _vm->_font->_widthArr[(unsigned char)*p]; } if (k > mw) @@ -122,7 +125,14 @@ void Talk::update(const char *text) { } else { int cw = _vm->_font->_widthArr[(unsigned char)*text]; uint8 *f = _vm->_font->_map + _vm->_font->_pos[(unsigned char)*text]; - for (int i = 0; i < cw; i++) { + + // Handle properly space size, after it was enlarged to display properly + // 'F1' text. + int8 fontStart = 0; + if ((*text == 0x20) && (cw > 4) && (!_wideSpace)) + fontStart = 2; + + for (int i = fontStart; i < cw; i++) { uint8 *pp = m; uint16 n; uint16 b = *(f++); @@ -211,10 +221,16 @@ void Talk::putLine(int line, const char *text) { uint8 *q = v + size; while (*text) { - uint16 cw = _vm->_font->_widthArr[(unsigned char)*text], i; + uint16 cw = _vm->_font->_widthArr[(unsigned char)*text]; uint8 *fp = _vm->_font->_map + _vm->_font->_pos[(unsigned char)*text]; - for (i = 0; i < cw; i++) { + // Handle properly space size, after it was enlarged to display properly + // 'F1' text. + int8 fontStart = 0; + if ((*text == 0x20) && (cw > 4) && (!_wideSpace)) + fontStart = 2; + + for (int i = fontStart; i < cw; i++) { uint16 b = fp[i]; uint16 n; for (n = 0; n < kFontHigh; n++) { @@ -271,15 +287,13 @@ void InfoLine::update(const char *text) { uint16 cw = _vm->_font->_widthArr[(unsigned char)*text]; uint8 *fp = _vm->_font->_map + _vm->_font->_pos[(unsigned char)*text]; - // This hack compensates the font modification done to fix the display - // of the 'F1' text. Specifically, it reduces the width of the space - // character when it has been enlarged. - // This hack fixes bug #3450423. - int8 hackStart = 0; - if ((*text == 0x20) && (cw > 4)) - hackStart = 2; + // Handle properly space size, after it was enlarged to display properly + // 'F1' text. + int8 fontStart = 0; + if ((*text == 0x20) && (cw > 4) && (!_wideSpace)) + fontStart = 2; - for (uint16 i = hackStart; i < cw; i++) { + for (int i = fontStart; i < cw; i++) { uint16 b = fp[i]; for (uint16 n = 0; n < kFontHigh; n++) { if (b & 1) diff --git a/engines/cge/talk.h b/engines/cge/talk.h index 55c529b7ea..b292cf702e 100644 --- a/engines/cge/talk.h +++ b/engines/cge/talk.h @@ -52,8 +52,9 @@ protected: TextBoxStyle _mode; BitmapPtr *_ts; Bitmap *box(uint16 w, uint16 h); + bool _wideSpace; public: - Talk(CGEEngine *vm, const char *text, TextBoxStyle mode); + Talk(CGEEngine *vm, const char *text, TextBoxStyle mode, bool wideSpace = false); Talk(CGEEngine *vm); virtual void update(const char *text); diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp index d426787ed4..331dc8ac2d 100644 --- a/engines/cge/text.cpp +++ b/engines/cge/text.cpp @@ -182,7 +182,7 @@ void Text::say(const char *text, Sprite *spr) { _vm->_vga->_showQ->insert(speaker, _vm->_vga->_showQ->last()); } -void CGEEngine::inf(const char *text) { +void CGEEngine::inf(const char *text, bool wideSpace) { debugC(1, kCGEDebugEngine, "CGEEngine::inf(%s)", text); if (!text) return; @@ -191,7 +191,7 @@ void CGEEngine::inf(const char *text) { return; killText(); - _talk = new Talk(this, text, kTBRect); + _talk = new Talk(this, text, kTBRect, wideSpace); if (!_talk) return; -- cgit v1.2.3 From b94b4e631b319b48c15febff6be55b5db128bcfc Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 5 Dec 2011 21:03:21 +0100 Subject: CGE: Remove useless function --- engines/cge/talk.cpp | 55 ---------------------------------------------------- engines/cge/talk.h | 1 - 2 files changed, 56 deletions(-) (limited to 'engines/cge') diff --git a/engines/cge/talk.cpp b/engines/cge/talk.cpp index 5a39228968..f5d570b389 100644 --- a/engines/cge/talk.cpp +++ b/engines/cge/talk.cpp @@ -192,61 +192,6 @@ Bitmap *Talk::box(uint16 w, uint16 h) { return new Bitmap(_vm, w, h, b); } -void Talk::putLine(int line, const char *text) { - // Note: (_ts[0]._w % 4) must be 0 - uint16 w = _ts[0]->_w; - uint16 h = _ts[0]->_h; - uint8 *v = _ts[0]->_v; - uint16 dsiz = w >> 2; // data size (1 plane line size) - uint16 lsiz = 2 + dsiz + 2; // uint16 for line header, uint16 for gap - uint16 psiz = h * lsiz; // - last gap, but + plane trailer - uint16 size = 4 * psiz; // whole map size - uint16 rsiz = kFontHigh * lsiz; // length of whole text row map - - // set desired line pointer - v += (kTextVMargin + (kFontHigh + kTextLineSpace) * line) * lsiz; - uint8 *p = v; // assume blanked line above text - - // clear whole rectangle - assert((rsiz % lsiz) == 0); - for (int planeCtr = 0; planeCtr < 4; planeCtr++, p += psiz) { - for (byte *pDest = p; pDest < (p + (rsiz - lsiz)); pDest += lsiz) - Common::copy(p - lsiz, p, pDest); - } - - // paint text line - if (!text) - return; - p = v + 2 + (kTextHMargin / 4) + (kTextHMargin % 4) * psiz; - uint8 *q = v + size; - - while (*text) { - uint16 cw = _vm->_font->_widthArr[(unsigned char)*text]; - uint8 *fp = _vm->_font->_map + _vm->_font->_pos[(unsigned char)*text]; - - // Handle properly space size, after it was enlarged to display properly - // 'F1' text. - int8 fontStart = 0; - if ((*text == 0x20) && (cw > 4) && (!_wideSpace)) - fontStart = 2; - - for (int i = fontStart; i < cw; i++) { - uint16 b = fp[i]; - uint16 n; - for (n = 0; n < kFontHigh; n++) { - if (b & 1) - *p = kTextColFG; - b >>= 1; - p += lsiz; - } - p = p - rsiz + psiz; - if (p >= q) - p = p - size + 1; - } - text++; - } -} - InfoLine::InfoLine(CGEEngine *vm, uint16 w) : Talk(vm), _oldText(NULL), _vm(vm) { if (!_ts) { _ts = new BitmapPtr[2]; diff --git a/engines/cge/talk.h b/engines/cge/talk.h index b292cf702e..66e3d85214 100644 --- a/engines/cge/talk.h +++ b/engines/cge/talk.h @@ -58,7 +58,6 @@ public: Talk(CGEEngine *vm); virtual void update(const char *text); - void putLine(int line, const char *text); private: CGEEngine *_vm; }; -- cgit v1.2.3 From b419f739734b5f63cd4b6cf241b0a36a4fb6c7be Mon Sep 17 00:00:00 2001 From: Thierry Crozat Date: Wed, 7 Dec 2011 00:13:08 +0000 Subject: CGE: Fix issue with music not stopping when reloading game If you turn off the music and then save a game, then turn on the music again and then load the saved game, the music from the scene continue to play despite the _music flag being false. So the first time you click on the music on/off button the music restart and only the second time does it stop. This fixes the bug by stoping the music before reloading a game. --- engines/cge/cge_main.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/cge') diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index c8ff1ee001..fd7dd85c57 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -279,6 +279,10 @@ Common::Error CGEEngine::loadGameState(int slot) { sceneDown(); _hero->park(); resetGame(); + + // If music is playing, kill it. + if (_music) + _midiPlayer->killMidi(); // Load the game loadGame(slot, NULL); -- cgit v1.2.3