diff --git a/engines/mm/mm1/game/detect_magic.cpp b/engines/mm/mm1/game/detect_magic.cpp new file mode 100644 index 00000000000..6ebf7ef31af --- /dev/null +++ b/engines/mm/mm1/game/detect_magic.cpp @@ -0,0 +1,69 @@ +/* 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 3 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, see . + * + */ + +#include "mm/mm1/game/detect_magic.h" +#include "mm/mm1/globals.h" + +namespace MM { +namespace MM1 { +namespace Game { + +void DetectMagic::getMagicStrings() { + Inventory &inv = g_globals->_currCharacter->_backpack; + for (uint i = 0; i < inv.size(); ++i) { + Common::String s; + + int itemId = inv[i]._id; + bool flag = false; + if (itemId < 12) + flag = false; + else if (itemId < 61) + flag = true; + else if (itemId < 66) + flag = false; + else if (itemId < 86) + flag = true; + else if (itemId < 93) + flag = false; + else if (itemId < 121) + flag = true; + else if (itemId < 128) + flag = false; + else if (itemId < 156) + flag = true; + else if (itemId < 158) + flag = false; + else if (itemId < 255) + flag = true; + else + flag = false; + + if (flag) { + _strings[i] = Common::String::format("Y (%d)", inv[i]._charges); + } else { + _strings[i] = "N"; + } + } +} + +} // namespace Game +} // namespace MM1 +} // namespace MM diff --git a/engines/mm/mm1/game/detect_magic.h b/engines/mm/mm1/game/detect_magic.h new file mode 100644 index 00000000000..256d22703bf --- /dev/null +++ b/engines/mm/mm1/game/detect_magic.h @@ -0,0 +1,46 @@ +/* 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 3 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, see . + * + */ + +#ifndef MM1_GAME_DETECT_MAGIC_H +#define MM1_GAME_DETECT_MAGIC_H + +#include "common/rect.h" +#include "mm/mm1/data/character.h" + +namespace MM { +namespace MM1 { +namespace Game { + +class DetectMagic { +protected: + Common::String _strings[INVENTORY_COUNT]; + + /** + * Gets the magic flags + */ + void getMagicStrings(); +}; + +} // namespace Game +} // namespace MM1 +} // namespace MM + +#endif diff --git a/engines/mm/mm1/game/spells_party.cpp b/engines/mm/mm1/game/spells_party.cpp index ad2070a7625..4fd06cc1930 100644 --- a/engines/mm/mm1/game/spells_party.cpp +++ b/engines/mm/mm1/game/spells_party.cpp @@ -627,7 +627,7 @@ SpellResult SpellsParty::cleric75_sunRay() { } SpellResult SpellsParty::wizard12_detectMagic() { - Views::Spells::DetectMagic::show(); + g_events->replaceView("DetectMagic"); return SR_SUCCESS_SILENT; } diff --git a/engines/mm/mm1/views/spells/detect_magic.cpp b/engines/mm/mm1/views/spells/detect_magic.cpp index 6dfd4fe5f56..8439869c1ae 100644 --- a/engines/mm/mm1/views/spells/detect_magic.cpp +++ b/engines/mm/mm1/views/spells/detect_magic.cpp @@ -27,13 +27,6 @@ namespace MM1 { namespace Views { namespace Spells { -void DetectMagic::show() { - UIElement *view = dynamic_cast(g_events->findView("DetectMagic")); - assert(view); - - view->open(); -} - DetectMagic::DetectMagic() : SpellView("DetectMagic") { _bounds = getLineBounds(20, 24); } @@ -46,44 +39,12 @@ void DetectMagic::draw() { _textPos.x = 20; _textPos.y = 0; + getMagicStrings(); Inventory &inv = g_globals->_currCharacter->_backpack; for (uint i = 0; i < inv.size(); ++i) { writeChar('A' + i); writeChar(')'); - - int itemId = inv[i]._id; - bool flag = false; - if (itemId < 12) - flag = false; - else if (itemId < 61) - flag = true; - else if (itemId < 66) - flag = false; - else if (itemId < 86) - flag = true; - else if (itemId < 93) - flag = false; - else if (itemId < 121) - flag = true; - else if (itemId < 128) - flag = false; - else if (itemId < 156) - flag = true; - else if (itemId < 158) - flag = false; - else if (itemId < 255) - flag = true; - else - flag = false; - - if (flag) { - writeString("Y ("); - writeNumber(inv[i]._charges); - writeChar(')'); - - } else { - writeChar('N'); - } + writeString(_strings[i]); // Move to write position for next item (if any) if (_textPos.x < 30) { @@ -95,8 +56,10 @@ void DetectMagic::draw() { } } -bool DetectMagic::msgKeypress(const KeypressMessage &msg) { - close(); +bool DetectMagic::msgAction(const ActionMessage &msg) { + if (msg._action == KEYBIND_SELECT || msg._action == KEYBIND_ESCAPE) + close(); + return true; } diff --git a/engines/mm/mm1/views/spells/detect_magic.h b/engines/mm/mm1/views/spells/detect_magic.h index e00a04247de..0d9310be5bb 100644 --- a/engines/mm/mm1/views/spells/detect_magic.h +++ b/engines/mm/mm1/views/spells/detect_magic.h @@ -23,18 +23,14 @@ #define MM1_VIEWS_SPELLS_DETECT_MAGIC_H #include "mm/mm1/views/spells/spell_view.h" +#include "mm/mm1/game/detect_magic.h" namespace MM { namespace MM1 { namespace Views { namespace Spells { -class DetectMagic : public SpellView { -public: - /** - * Show the view - */ - static void show(); +class DetectMagic : public SpellView, public MM1::Game::DetectMagic { public: /** * Constructor @@ -52,9 +48,9 @@ public: void draw() override; /** - * Keypress handler + * Action handler */ - bool msgKeypress(const KeypressMessage &msg) override; + bool msgAction(const ActionMessage &msg) override; }; } // namespace Spells diff --git a/engines/mm/module.mk b/engines/mm/module.mk index db98e669b93..06c8c8bf419 100644 --- a/engines/mm/module.mk +++ b/engines/mm/module.mk @@ -38,6 +38,7 @@ MODULE_OBJS += \ mm1/data/treasure.o \ mm1/game/arenko.o \ mm1/game/arrested.o \ + mm1/game/detect_magic.o \ mm1/game/game_logic.o \ mm1/game/combat.o \ mm1/game/encounter.o \