[Scummvm-git-logs] scummvm master -> c48a85d97c891fb5292ca12064418fd7a2e2d424

dreammaster noreply at scummvm.org
Sat Mar 18 04:56:15 UTC 2023


This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
11b0d5cdcb MM: MM1: Fixes to blacksmith items buttons
ea9c18634b MM: MM1: Fix blacksmith items buttons not being clickable
98820217a2 MM: MM1: Blacksmith items now displaying
328c2bf17e MM: MM1: Remove deprecated list of item names
d0896acdd9 MM: MM1: Weapon/Armor/Misc switching for blacksmith
c48a85d97c MM: MM1: Fix incorrect cropping of Scroll of Fire item


Commit: 11b0d5cdcb7a78593e8c712045992127de1632f0
    https://github.com/scummvm/scummvm/commit/11b0d5cdcb7a78593e8c712045992127de1632f0
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-17T21:55:45-07:00

Commit Message:
MM: MM1: Fixes to blacksmith items buttons

Changed paths:
    engines/mm/mm1/views_enh/items_view.cpp
    engines/mm/mm1/views_enh/text_view.cpp
    engines/mm/mm1/views_enh/text_view.h


diff --git a/engines/mm/mm1/views_enh/items_view.cpp b/engines/mm/mm1/views_enh/items_view.cpp
index f1e7ba86045..43e78450164 100644
--- a/engines/mm/mm1/views_enh/items_view.cpp
+++ b/engines/mm/mm1/views_enh/items_view.cpp
@@ -27,7 +27,7 @@ namespace MM1 {
 namespace ViewsEnh {
 
 #define BUTTON_WIDTH 35
-#define EXIT_X 270
+#define EXIT_X 275
 
 ItemsView::ItemsView(const Common::String &name) : PartyView(name),
 		_buttonsArea(Common::Rect(0, 101, 320, 146)) {
@@ -37,10 +37,13 @@ ItemsView::ItemsView(const Common::String &name) : PartyView(name),
 void ItemsView::addButton(int frame, const Common::String &text,
 		Common::KeyCode keycode) {
 	Common::Point pt(_btnText.size() * BUTTON_WIDTH + 5, 0);
-	if (keycode == Common::KEYCODE_ESCAPE)
+	if (keycode == Common::KEYCODE_ESCAPE) {
 		pt.x = EXIT_X;
+		PartyView::addButton(&g_globals->_escSprites, pt, 0, KEYBIND_ESCAPE);
+	} else {
+		PartyView::addButton(&_btnSprites, pt, frame, keycode);
+	}
 
-	PartyView::addButton(&_btnSprites, pt, frame, keycode);
 	_btnText.push_back(text);
 }
 
@@ -69,7 +72,7 @@ void ItemsView::draw() {
 		if (i == (_btnText.size() - 1))
 			pt.x = EXIT_X;
 
-		writeString(pt.x + 18, pt.y, _btnText[i], ALIGN_MIDDLE);
+		writeString(pt.x + 12, pt.y, _btnText[i], ALIGN_MIDDLE);
 	}
 
 	// TODO: drawing items
@@ -79,14 +82,19 @@ bool ItemsView::msgKeypress(const KeypressMessage &msg) {
 	if (endDelay())
 		return true;
 
-	return true;
+	return PartyView::msgKeypress(msg);
 }
 
 bool ItemsView::msgAction(const ActionMessage &msg) {
 	if (endDelay())
 		return true;
 
-	return true;
+	if (msg._action == KEYBIND_ESCAPE) {
+		close();
+		return true;
+	} else {
+		return PartyView::msgAction(msg);
+	}
 }
 
 void ItemsView::timeout() {
diff --git a/engines/mm/mm1/views_enh/text_view.cpp b/engines/mm/mm1/views_enh/text_view.cpp
index bd45fb52178..3ae732d4e87 100644
--- a/engines/mm/mm1/views_enh/text_view.cpp
+++ b/engines/mm/mm1/views_enh/text_view.cpp
@@ -45,7 +45,7 @@ byte TextView::setTextColor(byte col) {
 	return oldColor;
 }
 
-Graphics::Font *TextView::getFont() const {
+XeenFont *TextView::getFont() const {
 	return _fontReduced ? &g_globals->_fontReduced :
 		&g_globals->_fontNormal;
 }
diff --git a/engines/mm/mm1/views_enh/text_view.h b/engines/mm/mm1/views_enh/text_view.h
index 5ec95099906..b8210d394f8 100644
--- a/engines/mm/mm1/views_enh/text_view.h
+++ b/engines/mm/mm1/views_enh/text_view.h
@@ -24,6 +24,7 @@
 
 #include "graphics/font.h"
 #include "mm/mm1/events.h"
+#include "mm/shared/utils/xeen_font.h"
 
 namespace MM {
 namespace MM1 {
@@ -31,7 +32,7 @@ namespace ViewsEnh {
 
 class TextView : public UIElement {
 private:
-	Graphics::Font *getFont() const;
+	XeenFont *getFont() const;
 
 	/**
 	 * Raw write string


Commit: ea9c18634b087267e7040e7ca644029cee638f69
    https://github.com/scummvm/scummvm/commit/ea9c18634b087267e7040e7ca644029cee638f69
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-17T21:55:46-07:00

Commit Message:
MM: MM1: Fix blacksmith items buttons not being clickable

Changed paths:
    engines/mm/mm1/views_enh/items_view.cpp


diff --git a/engines/mm/mm1/views_enh/items_view.cpp b/engines/mm/mm1/views_enh/items_view.cpp
index 43e78450164..9444054922a 100644
--- a/engines/mm/mm1/views_enh/items_view.cpp
+++ b/engines/mm/mm1/views_enh/items_view.cpp
@@ -36,7 +36,7 @@ ItemsView::ItemsView(const Common::String &name) : PartyView(name),
 
 void ItemsView::addButton(int frame, const Common::String &text,
 		Common::KeyCode keycode) {
-	Common::Point pt(_btnText.size() * BUTTON_WIDTH + 5, 0);
+	Common::Point pt(_btnText.size() * BUTTON_WIDTH + 5, 101);
 	if (keycode == Common::KEYCODE_ESCAPE) {
 		pt.x = EXIT_X;
 		PartyView::addButton(&g_globals->_escSprites, pt, 0, KEYBIND_ESCAPE);
@@ -54,21 +54,19 @@ bool ItemsView::msgFocus(const FocusMessage &msg) {
 }
 
 void ItemsView::draw() {
-	// Manually draw a frame for the entire area to avoid
-	// also drawing the buttons
-	frame();
-	fill();
+	// Draw the outer frame and buttons
+	PartyView::draw();
 
-	// Now draw the buttons area
+	// Draw the frame surrounding the buttons area
 	const Common::Rect r = _bounds;
 	_bounds = _buttonsArea;
-	PartyView::draw();
+	frame();
 	_bounds = r;
 
 	// Draw button text
 	setReduced(true);
 	for (uint i = 0; i < _btnText.size(); ++i) {
-		Common::Point pt(i * BUTTON_WIDTH + 5, 122);
+		Common::Point pt(i * BUTTON_WIDTH + 5, 123);
 		if (i == (_btnText.size() - 1))
 			pt.x = EXIT_X;
 


Commit: 98820217a25150bd6e56acefae416c747197d52a
    https://github.com/scummvm/scummvm/commit/98820217a25150bd6e56acefae416c747197d52a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-17T21:55:46-07:00

Commit Message:
MM: MM1: Blacksmith items now displaying

Changed paths:
    devtools/create_mm/files/mm1/strings_en.yml
    engines/mm/mm1/views_enh/items_view.cpp
    engines/mm/mm1/views_enh/items_view.h
    engines/mm/mm1/views_enh/locations/blacksmith_items.cpp
    engines/mm/mm1/views_enh/locations/blacksmith_items.h


diff --git a/devtools/create_mm/files/mm1/strings_en.yml b/devtools/create_mm/files/mm1/strings_en.yml
index e8568187a00..976a5ff070f 100644
--- a/devtools/create_mm/files/mm1/strings_en.yml
+++ b/devtools/create_mm/files/mm1/strings_en.yml
@@ -426,8 +426,7 @@ dialogs:
 enhdialogs:
 	blacksmith:
 		browse: "\x01""37Browse"
-		for: "for"
-		the: "the"
+		backpack_for: "Backpack for %s the %s"
 		cost: "Cost"
 		gold: "Gold"
 		available: "Available"
@@ -437,12 +436,10 @@ enhdialogs:
 		areas:
 			weapons: "Weapons"
 			armor: "Armor"
-			accessories: "Accessories"
 			misc: "Misc"
 		buttons:
 			weapons: "\x01""37Weap"
 			armor: "\x01""37Armor"
-			accessories: "A\x01""37cces"
 			misc: "\x01""37Misc"
 			buy: "\x01""37Buy"
 			sell: "\x01""37Sell"
@@ -555,6 +552,7 @@ enhdialogs:
 	misc:
 		exit: "Exit"
 		go_back: "Go back"
+		no_items: "Inventory empty"
 	quickref:
 		title: "Quick Reference Chart"
 		headers:
diff --git a/engines/mm/mm1/views_enh/items_view.cpp b/engines/mm/mm1/views_enh/items_view.cpp
index 9444054922a..b5f0db3c2a8 100644
--- a/engines/mm/mm1/views_enh/items_view.cpp
+++ b/engines/mm/mm1/views_enh/items_view.cpp
@@ -73,7 +73,24 @@ void ItemsView::draw() {
 		writeString(pt.x + 12, pt.y, _btnText[i], ALIGN_MIDDLE);
 	}
 
-	// TODO: drawing items
+	// List the items
+	for (uint i = 0; i < _items.size(); ++i) {
+		g_globals->_items.getItem(_items[i]);
+		const Item &item = g_globals->_currItem;
+		const Common::String line = Common::String::format(
+			"%c) %s", _startingChar + i,
+			item._name.c_str()
+		);
+		writeLine(2 + i, line, ALIGN_LEFT, 10);
+
+		if (_costMode != NO_COST) {
+			int cost = (_costMode == SHOW_COST) ? item._cost : item.getSellCost();
+			writeLine(2 + i, Common::String::format("%d", cost),
+				ALIGN_RIGHT);
+		}
+	}
+	if (_items.size() == 0)
+		writeLine(2, STRING["enhdialogs.misc.no_items"], ALIGN_LEFT, 10);
 }
 
 bool ItemsView::msgKeypress(const KeypressMessage &msg) {
diff --git a/engines/mm/mm1/views_enh/items_view.h b/engines/mm/mm1/views_enh/items_view.h
index 424dca7c91b..76a1d892e17 100644
--- a/engines/mm/mm1/views_enh/items_view.h
+++ b/engines/mm/mm1/views_enh/items_view.h
@@ -30,7 +30,10 @@ namespace ViewsEnh {
 
 class ItemsView : public PartyView {
 protected:
+	enum CostMode { SHOW_COST, SHOW_VALUE, NO_COST };
 	int _selectedItem = -1;
+	char _startingChar = '1';
+	CostMode _costMode = NO_COST;
 	Common::Array<int> _items;
 	const Common::Rect _buttonsArea;
 	Shared::Xeen::SpriteResource _btnSprites;
diff --git a/engines/mm/mm1/views_enh/locations/blacksmith_items.cpp b/engines/mm/mm1/views_enh/locations/blacksmith_items.cpp
index 83f35d48c98..a2e767bfb41 100644
--- a/engines/mm/mm1/views_enh/locations/blacksmith_items.cpp
+++ b/engines/mm/mm1/views_enh/locations/blacksmith_items.cpp
@@ -31,7 +31,6 @@ BlacksmithItems::BlacksmithItems() : ItemsView("BlacksmithItems") {
 	_btnSprites.load("buy.icn");
 	addButton(0, STRING["enhdialogs.blacksmith.buttons.weapons"], Common::KEYCODE_w);
 	addButton(2, STRING["enhdialogs.blacksmith.buttons.armor"], Common::KEYCODE_a);
-	addButton(4, STRING["enhdialogs.blacksmith.buttons.accessories"], Common::KEYCODE_c);
 	addButton(6, STRING["enhdialogs.blacksmith.buttons.misc"], Common::KEYCODE_m);
 	addButton(8, STRING["enhdialogs.blacksmith.buttons.buy"], Common::KEYCODE_b);
 	addButton(10, STRING["enhdialogs.blacksmith.buttons.sell"], Common::KEYCODE_s);
@@ -41,47 +40,98 @@ BlacksmithItems::BlacksmithItems() : ItemsView("BlacksmithItems") {
 bool BlacksmithItems::msgFocus(const FocusMessage &msg) {
 	ItemsView::msgFocus(msg);
 
+	_mode = WEAPONS_MODE;
+	_buyMode = true;
+	populateItems();
+
 	return true;
 }
 
 void BlacksmithItems::draw() {
 	ItemsView::draw();
+	drawTitle();
+}
+
+void BlacksmithItems::drawTitle() {
+	const Character &c = *g_globals->_currCharacter;
+
+	Common::String areaName = STRING["enhdialogs.blacksmith.areas.weapons"];
+	if (_mode == ARMOR_MODE)
+		areaName = STRING["enhdialogs.blacksmith.areas.armor"];
+	if (_mode == MISC_MODE)
+		areaName = STRING["enhdialogs.blacksmith.areas.misc"];
+
+	if (_buyMode) {
+		// Show title with "Available <Area>", "Gold", and "Cost"
+		setReduced(false);
+		Common::String title = Common::String::format("%s %s",
+			STRING["enhdialogs.blacksmith.available"].c_str(),
+			areaName.c_str());
+		writeString(0, 0, title);
 
-	//	writeString(0, 0, STRING["dialogs.game.BlacksmithItems.BlacksmithItems_here"], ALIGN_MIDDLE);
+		Common::String gold = Common::String::format("%s - %d",
+			STRING["enhdialogs.blacksmith.gold"].c_str(),
+			c._gold);
+		writeString(160, 0, gold);
+
+		writeString(0, 0, STRING["enhdialogs.blacksmith.cost"], ALIGN_RIGHT);
+
+	} else {
+		// Shows a title like "Weapons for Arturius the Paladin"
+		Common::String title = Common::String::format(
+			STRING["enhdialogs.blacksmith.backpack_for"].c_str(),
+			c._name,
+			STRING[Common::String::format("stats.classes.%d", c._class)].c_str()
+		);
+
+		setReduced(false);
+		writeLine(0, title, ALIGN_MIDDLE);
+	}
 }
 
 bool BlacksmithItems::msgKeypress(const KeypressMessage &msg) {
 	if (endDelay())
 		return true;
-	/*
-		if (_mode == CONFIRM) {
-			if (msg.keycode == Common::KEYCODE_n) {
-				close();
-			} else if (msg.keycode == Common::KEYCODE_y) {
-				close();
-				Game::BlacksmithItems::check();
-			}
-		}
-	*/
+
 	return ItemsView::msgKeypress(msg);
 }
 
 bool BlacksmithItems::msgAction(const ActionMessage &msg) {
 	if (endDelay())
 		return true;
-	/*
-	if (_mode == CONFIRM) {
-		if (msg._action == KEYBIND_ESCAPE) {
-			close();
-		} else if (msg._action == KEYBIND_SELECT) {
-			close();
-			Game::BlacksmithItems::check();
-		}
-	}
-	*/
+
 	return ItemsView::msgAction(msg);
 }
 
+void BlacksmithItems::populateItems() {
+	_startingChar = _buyMode ? '1' : 'A';
+	_costMode = _buyMode ? SHOW_COST : SHOW_VALUE;
+	_items.clear();
+
+	if (_buyMode) {
+		// Populate the list of items that can be purchased
+		// from the Blacksmith in that category
+		int townNum = g_maps->_currentMap->dataByte(Maps::MAP_ID);
+		if (townNum < 1 || townNum >= 6)
+			townNum = 1;
+
+		const byte *ITEMS = WEAPONS[townNum - 1];
+		if (_mode == ARMOR_MODE)
+			ITEMS = ARMOR[townNum - 1];
+		if (_mode == MISC_MODE)
+			ITEMS = MISC[townNum - 1];
+
+		for (int i = 0; i < 6; ++i)
+			_items.push_back(ITEMS[i]);
+	} else {
+		// Sell mode, so list the player's inventory
+		const Character &c = *g_globals->_currCharacter;
+
+		for (uint i = 0; i < c._backpack.size(); ++i)
+			_items.push_back(c._backpack[i]._id);
+	}
+}
+
 } // namespace Locations
 } // namespace ViewsEnh
 } // namespace MM1
diff --git a/engines/mm/mm1/views_enh/locations/blacksmith_items.h b/engines/mm/mm1/views_enh/locations/blacksmith_items.h
index 066b42d1c0b..749717aa740 100644
--- a/engines/mm/mm1/views_enh/locations/blacksmith_items.h
+++ b/engines/mm/mm1/views_enh/locations/blacksmith_items.h
@@ -23,13 +23,31 @@
 #define MM1_VIEWS_ENH_LOCATIONS_BLACKSMITH_ITEMS_H
 
 #include "mm/mm1/views_enh/items_view.h"
+#include "mm/mm1/data/locations.h"
 
 namespace MM {
 namespace MM1 {
 namespace ViewsEnh {
 namespace Locations {
 
-class BlacksmithItems : public ItemsView {
+class BlacksmithItems : public ItemsView,
+	public BuyWeaponData, public BuyArmorData,
+	public BuyMiscData {
+private:
+	enum BlacksmithMode { WEAPONS_MODE = 0, ARMOR_MODE = 1, MISC_MODE = 2 };
+	BlacksmithMode _mode = WEAPONS_MODE;
+	bool _buyMode = true;
+
+	/**
+	 * Populates the list of items
+	 */
+	void populateItems();
+
+	/**
+	 * Displays the title row
+	 */
+	void drawTitle();
+
 public:
 	BlacksmithItems();
 	virtual ~BlacksmithItems() {}


Commit: 328c2bf17e0716bccea34b1a9ca481ba92ad57a6
    https://github.com/scummvm/scummvm/commit/328c2bf17e0716bccea34b1a9ca481ba92ad57a6
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-17T21:55:47-07:00

Commit Message:
MM: MM1: Remove deprecated list of item names

Changed paths:
    devtools/create_mm/files/mm1/strings_en.yml
    engines/mm/mm1/data/items.cpp


diff --git a/devtools/create_mm/files/mm1/strings_en.yml b/devtools/create_mm/files/mm1/strings_en.yml
index 976a5ff070f..60272be0f4d 100644
--- a/devtools/create_mm/files/mm1/strings_en.yml
+++ b/devtools/create_mm/files/mm1/strings_en.yml
@@ -662,262 +662,6 @@ stats:
 		3: "Algary"
 		4: "Dusk"
 		5: "Erliquin"
-	items:
-		1: "club"
-		2: "dagger"
-		3: "hand axe"
-		4: "spear"
-		5: "short sword"
-		6: "mace"
-		7: "flail"
-		8: "scimitar"
-		9: "broad sword"
-		10: "battle axe"
-		11: "long sword"
-		12: "club +1"
-		13: "club +2"
-		14: "dagger +1"
-		15: "hand axe +1"
-		16: "spear +1"
-		17: "short sword +1"
-		18: "mace +1"
-		19: "flail +1"
-		20: "scimitar +1"
-		21: "broad sword +1"
-		22: "battle axe +1"
-		23: "long sword +1"
-		24: "flaming club"
-		25: "club of noise"
-		26: "dagger +2"
-		27: "hand axe +2"
-		28: "spear +2"
-		29: "short sword +2"
-		30: "mace +2"
-		31: "flail +2"
-		32: "scimitar +2"
-		33: "broad sword +2"
-		34: "battle axe +2"
-		35: "long sword +2"
-		36: "royal dagger"
-		37: "dagger of mind"
-		38: "diamond dagger"
-		39: "electric spear"
-		40: "holy mace"
-		41: "un-holy mace"
-		42: "dark flail"
-		43: "flail of fear"
-		44: "lucky scimitar"
-		45: "mace of undead"
-		46: "cold axe"
-		47: "electric sword"
-		48: "flaming sword"
-		49: "sword of might"
-		50: "sword of speed"
-		51: "sharp sword"
-		52: "accurate sword"
-		53: "sword of magic"
-		54: "immortal sword"
-		55: "axe protector"
-		56: "axe destroyer"
-		57: "x!xx!x's sword"
-		58: "adamtine axe"
-		59: "ultimate sword"
-		60: "element sword"
-		61: "sling"
-		62: "crossbow"
-		63: "short bow"
-		64: "long bow"
-		65: "great bow"
-		66: "sling +1"
-		67: "crossbow +1"
-		68: "short bow +1"
-		69: "long bow +1"
-		70: "great bow +1"
-		71: "magic sling"
-		72: "crossbow +2"
-		73: "short bow +2"
-		74: "long bow +2"
-		75: "great bow +2"
-		76: "crossbow luck"
-		77: "crossbow speed"
-		78: "lightning bow"
-		79: "flaming bow"
-		80: "giant's bow"
-		81: "the magic bow"
-		82: "bow of power"
-		83: "robber's x-bow"
-		84: "archer's bow"
-		85: "obsidian bow"
-		86: "staff"
-		87: "glaive"
-		88: "bardiche"
-		89: "halberd"
-		90: "great hammer"
-		91: "great axe"
-		92: "flamberge"
-		93: "staff +1"
-		94: "glaive +1"
-		95: "bardiche +1"
-		96: "halberd +1"
-		97: "great hammer+1"
-		98: "great axe +1"
-		99: "flamberge +1"
-		100: "staff +2"
-		101: "glaive +2"
-		102: "bardiche +2"
-		103: "halberd +2"
-		104: "great hammer+2"
-		105: "great axe +2"
-		106: "flamberge +2"
-		107: "staff of light"
-		108: "cold glaive"
-		109: "curing staff"
-		110: "minotaur's axe"
-		111: "thunder hammer"
-		112: "great axe +3"
-		113: "flamberge +3"
-		114: "sorcerer staff"
-		115: "staff of magic"
-		116: "demon's glaive"
-		117: "devil's glaive"
-		118: "the flamberge"
-		119: "holy flamberge"
-		120: "evil flamberge"
-		121: "padded armor"
-		122: "leather armor"
-		123: "scale armor"
-		124: "ring mail"
-		125: "chain mail"
-		126: "splint mail"
-		127: "plate mail"
-		128: "padded +1"
-		129: "leather +1"
-		130: "scale +1"
-		131: "ring mail +1"
-		132: "chain mail +1"
-		133: "splint mail +1"
-		134: "plate mail +1"
-		135: "leather +2"
-		136: "scale +2"
-		137: "ring mail +2"
-		138: "chain mail +2"
-		139: "splint mail +2"
-		140: "plate mail +2"
-		141: "bracers ac 4"
-		142: "ring mail +3"
-		143: "chain mail +3"
-		144: "splint mail +3"
-		145: "plate mail +3"
-		146: "bracers ac 6"
-		147: "chain mail +3"
-		148: "bracers ac 8"
-		149: "blue ring mail"
-		150: "red chain mail"
-		151: "x!xx!x's plate"
-		152: "holy plate"
-		153: "un-holy plate"
-		154: "ultimate plate"
-		155: "bracers ac 8"
-		156: "small shield"
-		157: "large shield"
-		158: "silver shield"
-		159: "small shield+1"
-		160: "large shield+1"
-		161: "large shield+1"
-		162: "small shield+2"
-		163: "large shield+2"
-		164: "large shield+2"
-		165: "fire shield"
-		166: "cold shield"
-		167: "elec shield"
-		168: "acid shield"
-		169: "magic shield"
-		170: "dragon shield"
-		171: "rope & hooks"
-		172: "torch"
-		173: "lantern"
-		174: "10 foot pole"
-		175: "garlic"
-		176: "wolfsbane"
-		177: "belladonna"
-		178: "magic herbs"
-		179: "dried beef"
-		180: "robber's tools"
-		181: "bag of silver"
-		182: "amber gem"
-		183: "smelling salt"
-		184: "bag of sand"
-		185: "might potion"
-		186: "speed potion"
-		187: "sundial"
-		188: "curing potion"
-		189: "magic potion"
-		190: "defense ring"
-		191: "bag of garbage"
-		192: "scroll of fire"
-		193: "flying carpet"
-		194: "jade amulet"
-		195: "antidote brew"
-		196: "skill potion"
-		197: "boots of speed"
-		198: "lucky charm"
-		199: "wand of fire"
-		200: "undead amulet"
-		201: "silent chime"
-		202: "belt of power"
-		203: "model boat"
-		204: "defense cloak"
-		205: "knowledge book"
-		206: "ruby idol"
-		207: "sorcerer robe"
-		208: "power gauntlet"
-		209: "cleric's beads"
-		210: "horn of death"
-		211: "potion of life"
-		212: "shiny pendant"
-		213: "lightning wand"
-		214: "precision ring"
-		215: "return scroll"
-		216: "teleport helm"
-		217: "youth potion"
-		218: "bells of time"
-		219: "magic oil"
-		220: "magic vest"
-		221: "destroyer wand"
-		222: "element scarab"
-		223: "sun scroll"
-		224: "star ruby"
-		225: "star sapphire"
-		226: "wealth chest"
-		227: "gem sack"
-		228: "diamond collar"
-		229: "fire opal"
-		230: "unobtainium"
-		231: "vellum scroll"
-		232: "ruby whistle"
-		233: "kings pass"
-		234: "merchants pass"
-		235: "crystal key"
-		236: "coral key"
-		237: "bronze key"
-		238: "silver key"
-		239: "gold key"
-		240: "diamond key"
-		241: "cactus nectar"
-		242: "map of desert"
-		243: "laser blaster"
-		244: "dragons tooth"
-		245: "wyvern eye"
-		246: "medusa head"
-		247: "ring of okrim"
-		248: "b queen idol"
-		249: "w queen idol"
-		250: "pirates map a"
-		251: "pirates map b"
-		252: "thundranium"
-		253: "key card"
-		254: "eye of gordos"
-		255: "(useless item)"
 movement:
 	obstructed:
 		0: "   solid!   "
diff --git a/engines/mm/mm1/data/items.cpp b/engines/mm/mm1/data/items.cpp
index ca52aff236c..1260113d73b 100644
--- a/engines/mm/mm1/data/items.cpp
+++ b/engines/mm/mm1/data/items.cpp
@@ -65,8 +65,6 @@ bool ItemsArray::load() {
 Item *ItemsArray::getItem(byte index) const {
 	assert(index > 0);
 	g_globals->_currItem = (*this)[index - 1];
-	g_globals->_currItem._name = STRING[Common::String::format(
-		"stats.items.%d", (int)index)];
 
 	return &g_globals->_currItem;
 }


Commit: d0896acdd9db786247a6ee1ca4924a5682c6d281
    https://github.com/scummvm/scummvm/commit/d0896acdd9db786247a6ee1ca4924a5682c6d281
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-17T21:55:47-07:00

Commit Message:
MM: MM1: Weapon/Armor/Misc switching for blacksmith

Changed paths:
    engines/mm/mm1/views_enh/items_view.cpp
    engines/mm/mm1/views_enh/items_view.h
    engines/mm/mm1/views_enh/locations/blacksmith_items.cpp
    engines/mm/mm1/views_enh/locations/blacksmith_items.h


diff --git a/engines/mm/mm1/views_enh/items_view.cpp b/engines/mm/mm1/views_enh/items_view.cpp
index b5f0db3c2a8..01a171c84a6 100644
--- a/engines/mm/mm1/views_enh/items_view.cpp
+++ b/engines/mm/mm1/views_enh/items_view.cpp
@@ -78,7 +78,7 @@ void ItemsView::draw() {
 		g_globals->_items.getItem(_items[i]);
 		const Item &item = g_globals->_currItem;
 		const Common::String line = Common::String::format(
-			"%c) %s", _startingChar + i,
+			"%d) %s", i + 1,
 			item._name.c_str()
 		);
 		writeLine(2 + i, line, ALIGN_LEFT, 10);
diff --git a/engines/mm/mm1/views_enh/items_view.h b/engines/mm/mm1/views_enh/items_view.h
index 76a1d892e17..bc394aed241 100644
--- a/engines/mm/mm1/views_enh/items_view.h
+++ b/engines/mm/mm1/views_enh/items_view.h
@@ -32,7 +32,6 @@ class ItemsView : public PartyView {
 protected:
 	enum CostMode { SHOW_COST, SHOW_VALUE, NO_COST };
 	int _selectedItem = -1;
-	char _startingChar = '1';
 	CostMode _costMode = NO_COST;
 	Common::Array<int> _items;
 	const Common::Rect _buttonsArea;
diff --git a/engines/mm/mm1/views_enh/locations/blacksmith_items.cpp b/engines/mm/mm1/views_enh/locations/blacksmith_items.cpp
index a2e767bfb41..7c4490141f9 100644
--- a/engines/mm/mm1/views_enh/locations/blacksmith_items.cpp
+++ b/engines/mm/mm1/views_enh/locations/blacksmith_items.cpp
@@ -41,7 +41,6 @@ bool BlacksmithItems::msgFocus(const FocusMessage &msg) {
 	ItemsView::msgFocus(msg);
 
 	_mode = WEAPONS_MODE;
-	_buyMode = true;
 	populateItems();
 
 	return true;
@@ -61,7 +60,18 @@ void BlacksmithItems::drawTitle() {
 	if (_mode == MISC_MODE)
 		areaName = STRING["enhdialogs.blacksmith.areas.misc"];
 
-	if (_buyMode) {
+	if (_mode == SELL_MODE) {
+		// Show sell mode title
+		Common::String title = Common::String::format(
+			STRING["enhdialogs.blacksmith.backpack_for"].c_str(),
+			c._name,
+			STRING[Common::String::format("stats.classes.%d", c._class)].c_str()
+		);
+
+		setReduced(false);
+		writeLine(0, title, ALIGN_MIDDLE);
+
+	} else {
 		// Show title with "Available <Area>", "Gold", and "Cost"
 		setReduced(false);
 		Common::String title = Common::String::format("%s %s",
@@ -75,17 +85,6 @@ void BlacksmithItems::drawTitle() {
 		writeString(160, 0, gold);
 
 		writeString(0, 0, STRING["enhdialogs.blacksmith.cost"], ALIGN_RIGHT);
-
-	} else {
-		// Shows a title like "Weapons for Arturius the Paladin"
-		Common::String title = Common::String::format(
-			STRING["enhdialogs.blacksmith.backpack_for"].c_str(),
-			c._name,
-			STRING[Common::String::format("stats.classes.%d", c._class)].c_str()
-		);
-
-		setReduced(false);
-		writeLine(0, title, ALIGN_MIDDLE);
 	}
 }
 
@@ -93,7 +92,33 @@ bool BlacksmithItems::msgKeypress(const KeypressMessage &msg) {
 	if (endDelay())
 		return true;
 
-	return ItemsView::msgKeypress(msg);
+	switch (msg.keycode) {
+	case Common::KEYCODE_w:
+		_mode = WEAPONS_MODE;
+		populateItems();
+		redraw();
+		break;
+	case Common::KEYCODE_a:
+		_mode = ARMOR_MODE;
+		populateItems();
+		redraw();
+		break;
+	case Common::KEYCODE_m:
+		_mode = MISC_MODE;
+		populateItems();
+		redraw();
+		break;
+	case Common::KEYCODE_s:
+		_mode = SELL_MODE;
+		populateItems();
+		redraw();
+		break;
+
+	default:
+		return ItemsView::msgKeypress(msg);
+	}
+
+	return true;
 }
 
 bool BlacksmithItems::msgAction(const ActionMessage &msg) {
@@ -104,13 +129,12 @@ bool BlacksmithItems::msgAction(const ActionMessage &msg) {
 }
 
 void BlacksmithItems::populateItems() {
-	_startingChar = _buyMode ? '1' : 'A';
-	_costMode = _buyMode ? SHOW_COST : SHOW_VALUE;
+	_costMode = (_mode == SELL_MODE) ? SHOW_VALUE : SHOW_COST;
 	_items.clear();
 
-	if (_buyMode) {
+	if (_mode != SELL_MODE) {
 		// Populate the list of items that can be purchased
-		// from the Blacksmith in that category
+		// from the blacksmith in that category
 		int townNum = g_maps->_currentMap->dataByte(Maps::MAP_ID);
 		if (townNum < 1 || townNum >= 6)
 			townNum = 1;
diff --git a/engines/mm/mm1/views_enh/locations/blacksmith_items.h b/engines/mm/mm1/views_enh/locations/blacksmith_items.h
index 749717aa740..201dd0197ee 100644
--- a/engines/mm/mm1/views_enh/locations/blacksmith_items.h
+++ b/engines/mm/mm1/views_enh/locations/blacksmith_items.h
@@ -34,9 +34,11 @@ class BlacksmithItems : public ItemsView,
 	public BuyWeaponData, public BuyArmorData,
 	public BuyMiscData {
 private:
-	enum BlacksmithMode { WEAPONS_MODE = 0, ARMOR_MODE = 1, MISC_MODE = 2 };
+	enum BlacksmithMode {
+		WEAPONS_MODE = 0, ARMOR_MODE = 1, MISC_MODE = 2,
+		SELL_MODE = 3
+	};
 	BlacksmithMode _mode = WEAPONS_MODE;
-	bool _buyMode = true;
 
 	/**
 	 * Populates the list of items


Commit: c48a85d97c891fb5292ca12064418fd7a2e2d424
    https://github.com/scummvm/scummvm/commit/c48a85d97c891fb5292ca12064418fd7a2e2d424
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-17T21:55:47-07:00

Commit Message:
MM: MM1: Fix incorrect cropping of Scroll of Fire item

Changed paths:
    engines/mm/mm1/data/items.cpp


diff --git a/engines/mm/mm1/data/items.cpp b/engines/mm/mm1/data/items.cpp
index 1260113d73b..835cc8ad127 100644
--- a/engines/mm/mm1/data/items.cpp
+++ b/engines/mm/mm1/data/items.cpp
@@ -45,7 +45,7 @@ bool ItemsArray::load() {
 		Common::String line = f.readLine();
 		assert(line.size() > 20 && line[0] == '"' && line[15] == '"');
 
-		item._name = Common::String(line.c_str() + 1, line.c_str() + 14);
+		item._name = Common::String(line.c_str() + 1, line.c_str() + 15);
 		line = Common::String(line.c_str() + 16);
 
 		item._disablements = getNextValue(line);




More information about the Scummvm-git-logs mailing list