[Scummvm-git-logs] scummvm master -> edc46621635d233734993fa24f3fada94676b662
dreammaster
noreply at scummvm.org
Thu Mar 2 05:32:13 UTC 2023
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
edc4662163 MM: MM1: Remainder of training view
Commit: edc46621635d233734993fa24f3fada94676b662
https://github.com/scummvm/scummvm/commit/edc46621635d233734993fa24f3fada94676b662
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-01T21:32:04-08:00
Commit Message:
MM: MM1: Remainder of training view
Changed paths:
devtools/create_mm/files/mm1/strings_en.yml
engines/mm/mm1/views/locations/training.cpp
engines/mm/mm1/views_enh/locations/location.cpp
engines/mm/mm1/views_enh/locations/location.h
engines/mm/mm1/views_enh/locations/training.cpp
engines/mm/mm1/views_enh/locations/training.h
diff --git a/devtools/create_mm/files/mm1/strings_en.yml b/devtools/create_mm/files/mm1/strings_en.yml
index db413c4bf1f..7d13522208e 100644
--- a/devtools/create_mm/files/mm1/strings_en.yml
+++ b/devtools/create_mm/files/mm1/strings_en.yml
@@ -526,6 +526,8 @@ enhdialogs:
title: "Training"
train: "\x01""37Train"
esc: "ESC"
+ needs: "%s\nneeds %d experience for level %d."
+ eligible: "%s\nis eligible for level %d."
stats:
none: "None"
inventory: "-----<Equipped>----------<Backpack>----"
diff --git a/engines/mm/mm1/views/locations/training.cpp b/engines/mm/mm1/views/locations/training.cpp
index abe0e1ccfa6..8d4b5340438 100644
--- a/engines/mm/mm1/views/locations/training.cpp
+++ b/engines/mm/mm1/views/locations/training.cpp
@@ -53,8 +53,10 @@ void Training::checkCharacter() {
Character &c = *g_globals->_currCharacter;
_currLevel = c._level._base;
- if (_currLevel >= MAX_LEVEL)
+ if (_currLevel >= MAX_LEVEL) {
+ _canTrain = false;
return;
+ }
// Initialize fields
_expTotal = 0;
diff --git a/engines/mm/mm1/views_enh/locations/location.cpp b/engines/mm/mm1/views_enh/locations/location.cpp
index cf77cb43cab..8b1249e3a2d 100644
--- a/engines/mm/mm1/views_enh/locations/location.cpp
+++ b/engines/mm/mm1/views_enh/locations/location.cpp
@@ -61,7 +61,7 @@ void Location::displayMessage(const Common::String &msg) {
infoMsg._timeoutCallback = []() {
Location *loc = dynamic_cast<Location *>(g_events->focusedView());
assert(loc);
- loc->leave();
+ loc->messageShown();
};
g_events->send(infoMsg);
diff --git a/engines/mm/mm1/views_enh/locations/location.h b/engines/mm/mm1/views_enh/locations/location.h
index f851bbfb533..0a2035964ba 100644
--- a/engines/mm/mm1/views_enh/locations/location.h
+++ b/engines/mm/mm1/views_enh/locations/location.h
@@ -71,6 +71,13 @@ public:
*/
bool msgGame(const GameMessage &msg) override;
+ /**
+ * Called when a message is finished being shown
+ */
+ virtual void messageShown() {
+ leave();
+ }
+
/**
* Leave the location, turning around
*/
diff --git a/engines/mm/mm1/views_enh/locations/training.cpp b/engines/mm/mm1/views_enh/locations/training.cpp
index 298ebf313e4..986b1c9ef99 100644
--- a/engines/mm/mm1/views_enh/locations/training.cpp
+++ b/engines/mm/mm1/views_enh/locations/training.cpp
@@ -38,33 +38,55 @@ Training::Training() : Location("Training", LOC_TRAINING) {
bool Training::msgFocus(const FocusMessage &msg) {
Location::msgFocus(msg);
+ checkCharacter();
return true;
}
void Training::draw() {
Location::draw();
+ const Character &c = *g_globals->_currCharacter;
setReduced(false);
writeLine(0, STRING["enhdialogs.training.title"], ALIGN_MIDDLE);
- writeLine(1, STRING["enhdialogs.location.options_for"], ALIGN_MIDDLE);
- writeLine(3, camelCase(g_globals->_currCharacter->_name), ALIGN_MIDDLE);
+ writeLine(1, STRING["enhdialogs.location.options"], ALIGN_MIDDLE);
+
+ if (_currLevel >= MAX_LEVEL) {
+ writeLine(3, c._name, ALIGN_MIDDLE);
+ writeLine(5, STRING["dialogs.training.no_way"], ALIGN_MIDDLE);
+
+ } else if (_remainingExp > 0) {
+ writeLine(3, Common::String::format(
+ STRING["enhdialogs.training.needs"].c_str(),
+ c._name, _remainingExp, _currLevel + 1), ALIGN_MIDDLE);
+
+ } else {
+ writeLine(3, Common::String::format(
+ STRING["enhdialogs.training.eligible"].c_str(),
+ c._name, _currLevel + 1), ALIGN_MIDDLE);
+ }
writeLine(10, STRING["enhdialogs.location.gold"]);
- writeLine(10, Common::String::format("%d",
- g_globals->_currCharacter->_gold), ALIGN_RIGHT);
+ writeLine(10, Common::String::format("%d", c._gold), ALIGN_RIGHT);
setReduced(true);
writeString(5, 122, STRING["enhdialogs.training.train"]);
writeString(43, 122, STRING["enhdialogs.training.esc"]);
}
+bool Training::msgGame(const GameMessage &msg) {
+ Location::msgGame(msg);
+ if (msg._name == "UPDATE")
+ checkCharacter();
+ return true;
+}
+
bool Training::msgKeypress(const KeypressMessage &msg) {
// If a delay is active, end it
if (endDelay())
return true;
switch (msg.keycode) {
- case Common::KEYCODE_a:
+ case Common::KEYCODE_t:
if (_canTrain)
train();
break;
@@ -73,6 +95,7 @@ bool Training::msgKeypress(const KeypressMessage &msg) {
redraw();
break;
default:
+ return Location::msgKeypress(msg);
break;
}
@@ -88,15 +111,18 @@ bool Training::msgAction(const ActionMessage &msg) {
return true;
}
- return false;
+ return Location::msgAction(msg);
}
void Training::checkCharacter() {
+ assert(g_globals->_currCharacter);
Character &c = *g_globals->_currCharacter;
_currLevel = c._level._base;
- if (_currLevel >= MAX_LEVEL)
+ if (_currLevel >= MAX_LEVEL) {
+ _canTrain = false;
return;
+ }
// Initialize fields
_expTotal = 0;
@@ -141,12 +167,12 @@ void Training::train() {
Character &c = *g_globals->_currCharacter;
if (c._condition) {
+ // Having a condition prevents characters from training
Sound::sound(SOUND_3);
- clearSurface();
- writeString(8, 5, STRING["dialogs.training.condition"]);
- delaySeconds(3);
+ displayMessage(STRING["dialogs.training.condition"]);
} else if (!_canAfford) {
+ // Can't afford training
notEnoughGold();
} else {
@@ -155,21 +181,32 @@ void Training::train() {
Character::LevelIncrease lvl = c.increaseLevel();
Sound::sound(SOUND_2);
- clearSurface();
- writeString(0, 3, STRING["dialogs.training.congrats"]);
- writeNumber(c._level._base);
+ Common::String msg = Common::String::format("%s%d",
+ STRING["dialogs.training.congrats"].c_str(),
+ c._level._base);
- writeString(7, 5, Common::String::format(
- STRING["dialogs.training.hp"].c_str(), lvl._numHP));
+ msg = Common::String::format(STRING["dialogs.training.hp"].c_str(),
+ lvl._numHP);
- if (lvl._numSpells != 0)
- writeString(7, 6, STRING["dialogs.training.new_spells"]);
+ if (lvl._numSpells != 0) {
+ msg += ". ";
+ msg += STRING["dialogs.training.new_spells"];
+ }
- Sound::sound(SOUND_2);
- delaySeconds(10);
+ displayMessage(msg);
}
}
+void Training::timeout() {
+ checkCharacter();
+ Location::timeout();
+}
+
+void Training::messageShown() {
+ checkCharacter();
+ redraw();
+}
+
} // namespace Location
} // namespace ViewsEnh
} // namespace MM1
diff --git a/engines/mm/mm1/views_enh/locations/training.h b/engines/mm/mm1/views_enh/locations/training.h
index 088c104c5c1..40f59361032 100644
--- a/engines/mm/mm1/views_enh/locations/training.h
+++ b/engines/mm/mm1/views_enh/locations/training.h
@@ -58,8 +58,11 @@ public:
bool msgFocus(const FocusMessage &msg) override;
void draw() override;
+ bool msgGame(const GameMessage &msg);
bool msgKeypress(const KeypressMessage &msg) override;
bool msgAction(const ActionMessage &msg) override;
+ void timeout() override;
+ void messageShown() override;
};
} // namespace Locations
More information about the Scummvm-git-logs
mailing list