MM: MM1: Fixes for original Detect Magic view

This commit is contained in:
Paul Gilbert
2023-06-02 22:51:25 -07:00
parent fcce523edb
commit da0e6444cb
6 changed files with 127 additions and 52 deletions
+69
View File
@@ -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 <http://www.gnu.org/licenses/>.
*
*/
#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
+46
View File
@@ -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 <http://www.gnu.org/licenses/>.
*
*/
#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
+1 -1
View File
@@ -627,7 +627,7 @@ SpellResult SpellsParty::cleric75_sunRay() {
}
SpellResult SpellsParty::wizard12_detectMagic() {
Views::Spells::DetectMagic::show();
g_events->replaceView("DetectMagic");
return SR_SUCCESS_SILENT;
}
+6 -43
View File
@@ -27,13 +27,6 @@ namespace MM1 {
namespace Views {
namespace Spells {
void DetectMagic::show() {
UIElement *view = dynamic_cast<DetectMagic *>(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;
}
+4 -8
View File
@@ -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
+1
View File
@@ -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 \