[Scummvm-git-logs] scummvm master -> 46118c2100b3c6e59491c245b2897d7698720f69

OMGPizzaGuy noreply at scummvm.org
Fri Feb 3 00:24:34 UTC 2023


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

Summary:
992c25793e ULTIMA8: Replace CANT_HAPPEN macro usage with warning or error
f0bd3fb39f ULTIMA8: Replace FORGET_OBJECT macro with delete and nullptr assignment where needed
46118c2100 ULTIMA8: Cleanup shutdown methods


Commit: 992c25793ea8181a7df3042c385a8dc84e1b1f41
    https://github.com/scummvm/scummvm/commit/992c25793ea8181a7df3042c385a8dc84e1b1f41
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-02-02T18:23:32-06:00

Commit Message:
ULTIMA8: Replace CANT_HAPPEN macro usage with warning or error

Changed paths:
    engines/ultima/ultima8/games/game.cpp
    engines/ultima/ultima8/games/start_crusader_process.cpp
    engines/ultima/ultima8/games/start_u8_process.cpp
    engines/ultima/ultima8/graphics/shape_info.cpp
    engines/ultima/ultima8/gumps/book_gump.cpp
    engines/ultima/ultima8/gumps/computer_gump.cpp
    engines/ultima/ultima8/gumps/desktop_gump.cpp
    engines/ultima/ultima8/gumps/game_map_gump.cpp
    engines/ultima/ultima8/gumps/keypad_gump.cpp
    engines/ultima/ultima8/gumps/main_menu_process.cpp
    engines/ultima/ultima8/gumps/main_menu_process.h
    engines/ultima/ultima8/gumps/message_box_gump.cpp
    engines/ultima/ultima8/gumps/modal_gump.cpp
    engines/ultima/ultima8/gumps/paged_gump.cpp
    engines/ultima/ultima8/gumps/quit_gump.cpp
    engines/ultima/ultima8/gumps/readable_gump.cpp
    engines/ultima/ultima8/gumps/scroll_gump.cpp
    engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
    engines/ultima/ultima8/gumps/slider_gump.cpp
    engines/ultima/ultima8/gumps/target_gump.cpp
    engines/ultima/ultima8/kernel/mouse.cpp
    engines/ultima/ultima8/misc/pent_include.h
    engines/ultima/ultima8/ultima8.cpp
    engines/ultima/ultima8/usecode/uc_machine.cpp
    engines/ultima/ultima8/usecode/usecode.cpp
    engines/ultima/ultima8/usecode/usecode_flex.cpp
    engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
    engines/ultima/ultima8/world/current_map.cpp
    engines/ultima/ultima8/world/item.cpp


diff --git a/engines/ultima/ultima8/games/game.cpp b/engines/ultima/ultima8/games/game.cpp
index ee740dda80c..76fd077e2e1 100644
--- a/engines/ultima/ultima8/games/game.cpp
+++ b/engines/ultima/ultima8/games/game.cpp
@@ -52,7 +52,7 @@ Game *Game::createGame(const GameInfo *info) {
 	case GameInfo::GAME_REGRET:
 		return new CruGame();
 	default:
-		CANT_HAPPEN_MSG("createGame: invalid _game");
+		error("createGame: invalid game tyoe");
 	}
 
 	return nullptr;
diff --git a/engines/ultima/ultima8/games/start_crusader_process.cpp b/engines/ultima/ultima8/games/start_crusader_process.cpp
index 967ea9ea78d..d35deabaf8e 100644
--- a/engines/ultima/ultima8/games/start_crusader_process.cpp
+++ b/engines/ultima/ultima8/games/start_crusader_process.cpp
@@ -146,7 +146,7 @@ void StartCrusaderProcess::run() {
 }
 
 void StartCrusaderProcess::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN();
+	warning("Attempted save of process with prevent save flag");
 
 	Process::saveData(ws);
 }
diff --git a/engines/ultima/ultima8/games/start_u8_process.cpp b/engines/ultima/ultima8/games/start_u8_process.cpp
index 6b9ad8e147d..cac7bbf4eda 100644
--- a/engines/ultima/ultima8/games/start_u8_process.cpp
+++ b/engines/ultima/ultima8/games/start_u8_process.cpp
@@ -116,7 +116,7 @@ void StartU8Process::run() {
 }
 
 void StartU8Process::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN();
+	warning("Attempted save of process with prevent save flag");
 
 	Process::saveData(ws);
 }
diff --git a/engines/ultima/ultima8/graphics/shape_info.cpp b/engines/ultima/ultima8/graphics/shape_info.cpp
index c5ff807b400..bca4258eb0b 100644
--- a/engines/ultima/ultima8/graphics/shape_info.cpp
+++ b/engines/ultima/ultima8/graphics/shape_info.cpp
@@ -32,7 +32,7 @@ bool ShapeInfo::getTypeFlag(int typeFlag) const {
 		return getTypeFlagU8(typeFlag);
 	else if (GAME_IS_CRUSADER)
 		return getTypeFlagCrusader(typeFlag);
-	CANT_HAPPEN_MSG("Invalid game type");
+	warning("Invalid game type for shape info");
 	return false;
 }
 
diff --git a/engines/ultima/ultima8/gumps/book_gump.cpp b/engines/ultima/ultima8/gumps/book_gump.cpp
index aa94f37b644..1e9cc1da819 100644
--- a/engines/ultima/ultima8/gumps/book_gump.cpp
+++ b/engines/ultima/ultima8/gumps/book_gump.cpp
@@ -134,11 +134,11 @@ uint32 BookGump::I_readBook(const uint8 *args, unsigned int /*argsize*/) {
 }
 
 void BookGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 bool BookGump::loadData(Common::ReadStream *rs, uint32 version) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/computer_gump.cpp b/engines/ultima/ultima8/gumps/computer_gump.cpp
index 30f87a6a612..10e2f5b7bb3 100644
--- a/engines/ultima/ultima8/gumps/computer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/computer_gump.cpp
@@ -260,11 +260,11 @@ uint32 ComputerGump::I_readComputer(const uint8 *args, unsigned int /*argsize*/)
 }
 
 void ComputerGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 bool ComputerGump::loadData(Common::ReadStream *rs, uint32 version) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/desktop_gump.cpp b/engines/ultima/ultima8/gumps/desktop_gump.cpp
index 09906ad9b55..fbfdb68225e 100644
--- a/engines/ultima/ultima8/gumps/desktop_gump.cpp
+++ b/engines/ultima/ultima8/gumps/desktop_gump.cpp
@@ -90,11 +90,11 @@ void DesktopGump::RenderSurfaceChanged() {
 }
 
 void DesktopGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save DesktopGump");
+	warning("Trying to save DesktopGump");
 }
 
 bool DesktopGump::loadData(Common::ReadStream *rs, uint32 version) {
-	CANT_HAPPEN_MSG("Trying to save DesktopGump");
+	warning("Trying to load DesktopGump");
 
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index f0e4bbc3a2c..717fd460baa 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -544,11 +544,11 @@ void GameMapGump::RenderSurfaceChanged() {
 }
 
 void GameMapGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save GameMapGump");
+	warning("Trying to save GameMapGump");
 }
 
 bool GameMapGump::loadData(Common::ReadStream *rs, uint32 version) {
-	CANT_HAPPEN_MSG("Trying to load GameMapGump");
+	warning("Trying to load GameMapGump");
 
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/keypad_gump.cpp b/engines/ultima/ultima8/gumps/keypad_gump.cpp
index 7bf6dedf300..2f51d64a71e 100644
--- a/engines/ultima/ultima8/gumps/keypad_gump.cpp
+++ b/engines/ultima/ultima8/gumps/keypad_gump.cpp
@@ -256,12 +256,12 @@ uint32 KeypadGump::I_showKeypad(const uint8 *args, unsigned int /*argsize*/) {
 }
 
 bool KeypadGump::loadData(Common::ReadStream *rs) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 	return true;
 }
 
 void KeypadGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/main_menu_process.cpp b/engines/ultima/ultima8/gumps/main_menu_process.cpp
index 9844f82518e..cda1fb71643 100644
--- a/engines/ultima/ultima8/gumps/main_menu_process.cpp
+++ b/engines/ultima/ultima8/gumps/main_menu_process.cpp
@@ -32,7 +32,7 @@ namespace Ultima8 {
 DEFINE_RUNTIME_CLASSTYPE_CODE(MainMenuProcess)
 
 MainMenuProcess::MainMenuProcess() : Process() {
-	_init = false;
+	_flags |= PROC_PREVENT_SAVE;
 }
 
 
@@ -49,7 +49,7 @@ void MainMenuProcess::run() {
 }
 
 void MainMenuProcess::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN();
+	warning("Attempted save of process with prevent save flag");
 
 	Process::saveData(ws);
 }
diff --git a/engines/ultima/ultima8/gumps/main_menu_process.h b/engines/ultima/ultima8/gumps/main_menu_process.h
index ac88af9cdef..b591d413e7e 100644
--- a/engines/ultima/ultima8/gumps/main_menu_process.h
+++ b/engines/ultima/ultima8/gumps/main_menu_process.h
@@ -40,9 +40,6 @@ public:
 
 	bool loadData(Common::ReadStream *rs, uint32 version);
 	void saveData(Common::WriteStream *ws) override;
-
-protected:
-	bool _init;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.cpp b/engines/ultima/ultima8/gumps/message_box_gump.cpp
index dde173cbc9e..3a40b2d8f62 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.cpp
+++ b/engines/ultima/ultima8/gumps/message_box_gump.cpp
@@ -153,11 +153,11 @@ ProcId MessageBoxGump::Show(Std::string _title, Std::string _message, uint32 tit
 }
 
 void MessageBoxGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 bool MessageBoxGump::loadData(Common::ReadStream *rs, uint32 version) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/modal_gump.cpp b/engines/ultima/ultima8/gumps/modal_gump.cpp
index 36d3b34beec..59320447df9 100644
--- a/engines/ultima/ultima8/gumps/modal_gump.cpp
+++ b/engines/ultima/ultima8/gumps/modal_gump.cpp
@@ -88,11 +88,11 @@ Gump *ModalGump::onMouseDown(int button, int32 mx, int32 my) {
 
 
 void ModalGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 bool ModalGump::loadData(Common::ReadStream *rs, uint32 version) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 	return false;
 }
 
diff --git a/engines/ultima/ultima8/gumps/paged_gump.cpp b/engines/ultima/ultima8/gumps/paged_gump.cpp
index 86ea9ff7fb8..06f3594982a 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paged_gump.cpp
@@ -153,12 +153,12 @@ void PagedGump::addPage(Gump *g) {
 }
 
 bool PagedGump::loadData(Common::ReadStream *rs) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 	return false;
 }
 
 void PagedGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/quit_gump.cpp b/engines/ultima/ultima8/gumps/quit_gump.cpp
index 020eca0d171..12c19aade6a 100644
--- a/engines/ultima/ultima8/gumps/quit_gump.cpp
+++ b/engines/ultima/ultima8/gumps/quit_gump.cpp
@@ -194,12 +194,12 @@ void QuitGump::verifyQuit() {
 }
 
 bool QuitGump::loadData(Common::ReadStream *rs) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 	return true;
 }
 
 void QuitGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/readable_gump.cpp b/engines/ultima/ultima8/gumps/readable_gump.cpp
index 1e50a6b3fdb..0789edba315 100644
--- a/engines/ultima/ultima8/gumps/readable_gump.cpp
+++ b/engines/ultima/ultima8/gumps/readable_gump.cpp
@@ -115,11 +115,11 @@ uint32 ReadableGump::I_readPlaque(const uint8 *args, unsigned int /*argsize*/) {
 }
 
 void ReadableGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 }
 
 bool ReadableGump::loadData(Common::ReadStream *rs, uint32 version) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/scroll_gump.cpp b/engines/ultima/ultima8/gumps/scroll_gump.cpp
index dcf5a004cab..2afb4efc9a6 100644
--- a/engines/ultima/ultima8/gumps/scroll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/scroll_gump.cpp
@@ -109,11 +109,11 @@ uint32 ScrollGump::I_readScroll(const uint8 *args, unsigned int /*argsize*/) {
 }
 
 void ScrollGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 bool ScrollGump::loadData(Common::ReadStream *rs, uint32 version) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
index 9fdf723a4e4..bb21273a9f9 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
@@ -340,12 +340,12 @@ void ShapeViewerGump::U8ShapeViewer() {
 }
 
 bool ShapeViewerGump::loadData(Common::ReadStream *rs) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 	return false;
 }
 
 void ShapeViewerGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/slider_gump.cpp b/engines/ultima/ultima8/gumps/slider_gump.cpp
index 51244709f5e..fbda0050611 100644
--- a/engines/ultima/ultima8/gumps/slider_gump.cpp
+++ b/engines/ultima/ultima8/gumps/slider_gump.cpp
@@ -219,11 +219,11 @@ void SliderGump::setUsecodeNotify(UCProcess *ucp) {
 }
 
 void SliderGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 bool SliderGump::loadData(Common::ReadStream *rs, uint32 version) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/target_gump.cpp b/engines/ultima/ultima8/gumps/target_gump.cpp
index 4cbc9c01644..caad8730c65 100644
--- a/engines/ultima/ultima8/gumps/target_gump.cpp
+++ b/engines/ultima/ultima8/gumps/target_gump.cpp
@@ -104,11 +104,11 @@ uint32 TargetGump::I_target(const uint8 * /*args*/, unsigned int /*argsize*/) {
 
 
 void TargetGump::saveData(Common::WriteStream *ws) {
-	CANT_HAPPEN_MSG("Trying to save ModalGump");
+	warning("Trying to save ModalGump");
 }
 
 bool TargetGump::loadData(Common::ReadStream *rs, uint32 versin) {
-	CANT_HAPPEN_MSG("Trying to load ModalGump");
+	warning("Trying to load ModalGump");
 	return false;
 }
 
diff --git a/engines/ultima/ultima8/kernel/mouse.cpp b/engines/ultima/ultima8/kernel/mouse.cpp
index 33a54da0ec6..efd41cb07b7 100644
--- a/engines/ultima/ultima8/kernel/mouse.cpp
+++ b/engines/ultima/ultima8/kernel/mouse.cpp
@@ -430,37 +430,35 @@ void Mouse::moveDragging(int mx, int my) {
 
 	setMouseCursor(MOUSE_NORMAL);
 
-	// for a gump, notify Gump's parent that it was dragged
 	if (gump) {
+		// for a gump, notify Gump's parent that it was dragged
 		Gump *parent = gump->GetParent();
 		assert(parent); // can't drag root gump
 		int32 px = mx, py = my;
 		parent->ScreenSpaceToGump(px, py);
 		gump->onDrag(px, py);
-	} else {
+	} else if (item) {
 		// for an item, notify the gump it's on
-		if (item) {
-			Gump *desktopGump = Ultima8Engine::get_instance()->getDesktopGump();
-			gump = desktopGump->FindGump(mx, my);
-			assert(gump);
-
-			if (gump->getObjId() != _draggingItem_lastGump) {
-				// item switched gump, so notify previous gump item left
-				Gump *last = getGump(_draggingItem_lastGump);
-				if (last) last->DraggingItemLeftGump(item);
-			}
-			_draggingItem_lastGump = gump->getObjId();
-			int32 gx = mx, gy = my;
-			gump->ScreenSpaceToGump(gx, gy);
-			bool ok = gump->DraggingItem(item, gx, gy);
-			if (!ok) {
-				_dragging = DRAG_TEMPFAIL;
-			} else {
-				_dragging = DRAG_OK;
-			}
+		Gump *desktopGump = Ultima8Engine::get_instance()->getDesktopGump();
+		gump = desktopGump->FindGump(mx, my);
+		assert(gump);
+
+		if (gump->getObjId() != _draggingItem_lastGump) {
+			// item switched gump, so notify previous gump item left
+			Gump *last = getGump(_draggingItem_lastGump);
+			if (last) last->DraggingItemLeftGump(item);
+		}
+		_draggingItem_lastGump = gump->getObjId();
+		int32 gx = mx, gy = my;
+		gump->ScreenSpaceToGump(gx, gy);
+		bool ok = gump->DraggingItem(item, gx, gy);
+		if (!ok) {
+			_dragging = DRAG_TEMPFAIL;
 		} else {
-			CANT_HAPPEN();
+			_dragging = DRAG_OK;
 		}
+	} else {
+		warning("Unknown object id on mouse drag");
 	}
 
 	if (_dragging == DRAG_TEMPFAIL) {
diff --git a/engines/ultima/ultima8/misc/pent_include.h b/engines/ultima/ultima8/misc/pent_include.h
index 40c58edd4e6..88931e3e2e2 100644
--- a/engines/ultima/ultima8/misc/pent_include.h
+++ b/engines/ultima/ultima8/misc/pent_include.h
@@ -51,18 +51,4 @@
 // double deletes (note that "delete 0" is a no-op).
 #define FORGET_OBJECT(x) do { delete x; x = 0; } while(0)
 
-//
-// Can't happen.
-// For things that really can't happen. Or shouldn't anyway.
-//
-#define CANT_HAPPEN() do { assert(false); } while(0)
-
-//
-// Can't happen with a message
-//
-// Allows a message to be supplied.
-// May not work on all compilers or runtimes as expected
-//
-#define CANT_HAPPEN_MSG(msg) do { assert(msg && false); } while(0)
-
 #endif
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 424544b12ad..0eea2a64dcc 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -356,7 +356,7 @@ Common::Error Ultima8Engine::startup() {
 			return result;
 	} else {
 		// Couldn't setup the game, should never happen?
-		CANT_HAPPEN_MSG("game failed to initialize");
+		warning("game failed to initialize");
 	}
 	paint();
 	return Common::kNoError;
@@ -493,7 +493,7 @@ Common::Error Ultima8Engine::startupGame() {
 			break;
 		}
 	} else {
-		CANT_HAPPEN_MSG("Invalid game type.");
+		warning("Invalid game type.");
 	}
 
 	_inBetweenFrame = false;
diff --git a/engines/ultima/ultima8/usecode/uc_machine.cpp b/engines/ultima/ultima8/usecode/uc_machine.cpp
index aafdaf9f8a7..ee73d2fa4a7 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.cpp
+++ b/engines/ultima/ultima8/usecode/uc_machine.cpp
@@ -2157,7 +2157,7 @@ bool UCMachine::assignPointer(uint32 ptr, const uint8 *data, uint32 size) {
 		}
 	} else if (segment == SEG_GLOBAL) {
 		if (!GAME_IS_CRUSADER)
-			CANT_HAPPEN_MSG("Global pointers not supported in U8");
+			warning("Global pointers not supported in U8");
 
 		if (size == 1) {
 			_globals->setEntries(offset, 1, data[0]);
@@ -2165,7 +2165,7 @@ bool UCMachine::assignPointer(uint32 ptr, const uint8 *data, uint32 size) {
 			uint16 val = ((data[1] << 8) | data[0]);
 			_globals->setEntries(offset, 2, val);
 		} else {
-			CANT_HAPPEN_MSG("Global pointers must be size 1 or 2");
+			warning("Global pointers must be size 1 or 2");
 		}
 	} else {
 		warning("Trying to access segment %04X", segment);
@@ -2211,7 +2211,7 @@ bool UCMachine::dereferencePointer(uint32 ptr, uint8 *data, uint32 size) {
 		}
 	} else if (segment == SEG_GLOBAL) {
 		if (!GAME_IS_CRUSADER)
-			CANT_HAPPEN_MSG("Global pointers not supported in U8");
+			warning("Global pointers not supported in U8");
 
 		if (size == 1) {
 			data[0] = static_cast<uint8>(_globals->getEntries(offset, 1));
@@ -2220,7 +2220,7 @@ bool UCMachine::dereferencePointer(uint32 ptr, uint8 *data, uint32 size) {
 			data[0] = static_cast<uint8>(val);
 			data[1] = static_cast<uint8>(val >> 8);
 		} else {
-			CANT_HAPPEN_MSG("Global pointers must be size 1 or 2");
+			warning("Global pointers must be size 1 or 2");
 		}
 	} else {
 		warning("Trying to access segment %04X", segment);
diff --git a/engines/ultima/ultima8/usecode/usecode.cpp b/engines/ultima/ultima8/usecode/usecode.cpp
index 96fbab0d826..584ded4cad3 100644
--- a/engines/ultima/ultima8/usecode/usecode.cpp
+++ b/engines/ultima/ultima8/usecode/usecode.cpp
@@ -33,7 +33,6 @@ uint32 Usecode::get_class_event(uint32 classid, uint32 eventid) {
 	if (eventid >= get_class_event_count(classid)) {
 		warning("eventid too high: %u >= %u for class %u",
 			eventid, get_class_event_count(classid), classid);
-		CANT_HAPPEN();
 	}
 
 	const uint8 *data = get_class(classid);
@@ -50,7 +49,7 @@ uint32 Usecode::get_class_event(uint32 classid, uint32 eventid) {
 		offset += data[20 + (eventid * 6) + 4] << 16;
 		offset += data[20 + (eventid * 6) + 5] << 24;
 	} else {
-		CANT_HAPPEN_MSG("Invalid game type.");
+		warning("Invalid game type.");
 	}
 
 	return offset;
diff --git a/engines/ultima/ultima8/usecode/usecode_flex.cpp b/engines/ultima/ultima8/usecode/usecode_flex.cpp
index a8362ba29d5..8ab16d4fb1a 100644
--- a/engines/ultima/ultima8/usecode/usecode_flex.cpp
+++ b/engines/ultima/ultima8/usecode/usecode_flex.cpp
@@ -60,7 +60,7 @@ uint32 UsecodeFlex::get_class_base_offset(uint32 classid) {
 		offset--;
 		return offset;
 	} else {
-		CANT_HAPPEN_MSG("Invalid game type.");
+		warning("Invalid game type.");
 		return 0;
 	}
 }
@@ -73,7 +73,7 @@ uint32 UsecodeFlex::get_class_event_count(uint32 classid) {
 	} else if (GAME_IS_CRUSADER) {
 		return (get_class_base_offset(classid) + 19) / 6;
 	} else {
-		CANT_HAPPEN_MSG("Invalid game type.");
+		warning("Invalid game type.");
 		return 0;
 	}
 }
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
index 68618112257..a984ecf12a1 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
@@ -191,7 +191,7 @@ void AvatarMoverProcess::onMouseDown(int button, int32 mx, int32 my) {
 		break;
 	}
 	default:
-		CANT_HAPPEN_MSG("invalid MouseDown passed to AvatarMoverProcess");
+		warning("Invalid MouseDown passed to AvatarMoverProcess");
 		break;
 	};
 
@@ -209,7 +209,7 @@ void AvatarMoverProcess::onMouseUp(int button) {
 	} else if (button == Mouse::BUTTON_RIGHT) {
 		bid = 1;
 	} else {
-		CANT_HAPPEN_MSG("invalid MouseUp passed to AvatarMoverProcess");
+		warning("Invalid MouseUp passed to AvatarMoverProcess");
 	}
 
 	_mouseButton[bid].clearState(MBS_DOWN);
diff --git a/engines/ultima/ultima8/world/current_map.cpp b/engines/ultima/ultima8/world/current_map.cpp
index a78bd77c51b..3c68d8fbdd6 100644
--- a/engines/ultima/ultima8/world/current_map.cpp
+++ b/engines/ultima/ultima8/world/current_map.cpp
@@ -60,7 +60,7 @@ CurrentMap::CurrentMap() : _currentMap(0), _eggHatcher(0),
 	} else if (GAME_IS_CRUSADER) {
 		_mapChunkSize = 1024;
 	} else {
-		CANT_HAPPEN_MSG("Unknown game type in CurrentMap constructor.");
+		warning("Unknown game type in CurrentMap constructor.");
 	}
 
 	for (unsigned int i = 0; i < MAP_NUM_TARGET_ITEMS; i++) {
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 24f59c79468..675ebc69ea8 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -125,7 +125,6 @@ Container *Item::getParentAsContainer() const {
 
 	if (!p) {
 		warning("Item %u _parent (%u) is an invalid Container ObjID", getObjId(), _parent);
-		CANT_HAPPEN();
 	}
 
 	return p;
@@ -378,7 +377,6 @@ void Item::returnFromEtherealVoid() {
 		Container *p = getParentAsContainer();
 		if (!p) {
 			warning("Item %u FLG_CONTAINED or FLG_EQUIPPED set but item has no _parent", getObjId());
-			CANT_HAPPEN();
 		}
 		moveToContainer(p);
 	}


Commit: f0bd3fb39f6666af4a52870c1feede156248c4a0
    https://github.com/scummvm/scummvm/commit/f0bd3fb39f6666af4a52870c1feede156248c4a0
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-02-02T18:23:33-06:00

Commit Message:
ULTIMA8: Replace FORGET_OBJECT macro with delete and nullptr assignment where needed

Changed paths:
    engines/ultima/ultima8/gumps/inverter_gump.cpp
    engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
    engines/ultima/ultima8/misc/pent_include.h
    engines/ultima/ultima8/ultima8.cpp


diff --git a/engines/ultima/ultima8/gumps/inverter_gump.cpp b/engines/ultima/ultima8/gumps/inverter_gump.cpp
index e49e8b726cf..c9ff6d3f4ef 100644
--- a/engines/ultima/ultima8/gumps/inverter_gump.cpp
+++ b/engines/ultima/ultima8/gumps/inverter_gump.cpp
@@ -129,7 +129,8 @@ void InverterGump::GumpToParent(int32 &gx, int32 &gy, PointRoundDir) {
 
 void InverterGump::RenderSurfaceChanged() {
 	DesktopGump::RenderSurfaceChanged();
-	FORGET_OBJECT(_buffer);
+	delete _buffer;
+	_buffer = nullptr;
 }
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp b/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
index b337da34105..a610dd49faa 100644
--- a/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
@@ -69,7 +69,8 @@ Font *EditWidget::getFont() const {
 void EditWidget::setText(const Std::string &t) {
 	_text = t;
 	_cursor = _text.size();
-	FORGET_OBJECT(_cachedText);
+	delete _cachedText;
+	_cachedText = nullptr;
 }
 
 void EditWidget::ensureCursorVisible() {
@@ -124,7 +125,8 @@ void EditWidget::renderText() {
 	}
 
 	if (cv != _cursorVisible) {
-		FORGET_OBJECT(_cachedText);
+		delete _cachedText;
+		_cachedText = nullptr;
 		_cursorVisible = cv;
 	}
 
@@ -196,27 +198,31 @@ bool EditWidget::OnKeyDown(int key, int mod) {
 	case Common::KEYCODE_BACKSPACE:
 		if (_cursor > 0) {
 			_text.erase(--_cursor, 1);
-			FORGET_OBJECT(_cachedText);
+			delete _cachedText;
+			_cachedText = nullptr;
 			ensureCursorVisible();
 		}
 		break;
 	case Common::KEYCODE_DELETE:
 		if (_cursor != _text.size()) {
 			_text.erase(_cursor, 1);
-			FORGET_OBJECT(_cachedText);
+			delete _cachedText;
+			_cachedText = nullptr;
 		}
 		break;
 	case Common::KEYCODE_LEFT:
 		if (_cursor > 0) {
 			_cursor--;
-			FORGET_OBJECT(_cachedText);
+			delete _cachedText;
+			_cachedText = nullptr;
 			ensureCursorVisible();
 		}
 		break;
 	case Common::KEYCODE_RIGHT:
 		if (_cursor < _text.size()) {
 			_cursor++;
-			FORGET_OBJECT(_cachedText);
+			delete _cachedText;
+			_cachedText = nullptr;
 			ensureCursorVisible();
 		}
 		break;
@@ -247,7 +253,8 @@ bool EditWidget::OnTextInput(int unicode) {
 	if (textFits(newtext)) {
 		_text = newtext;
 		_cursor++;
-		FORGET_OBJECT(_cachedText);
+		delete _cachedText;
+		_cachedText = nullptr;
 	}
 
 	return true;
diff --git a/engines/ultima/ultima8/misc/pent_include.h b/engines/ultima/ultima8/misc/pent_include.h
index 88931e3e2e2..2b0f8a9d682 100644
--- a/engines/ultima/ultima8/misc/pent_include.h
+++ b/engines/ultima/ultima8/misc/pent_include.h
@@ -45,10 +45,4 @@
 //
 #include "ultima/ultima8/misc/debugger.h"
 
-
-// Two very useful macros that one should use instead of pure delete; they
-// will additionally set the old object pointer to 0, thus helping prevent
-// double deletes (note that "delete 0" is a no-op).
-#define FORGET_OBJECT(x) do { delete x; x = 0; } while(0)
-
 #endif
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 0eea2a64dcc..62f2c1aed55 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -142,20 +142,20 @@ Ultima8Engine::Ultima8Engine(OSystem *syst, const Ultima::UltimaGameDescription
 }
 
 Ultima8Engine::~Ultima8Engine() {
-	FORGET_OBJECT(_kernel);
-	FORGET_OBJECT(_objectManager);
-	FORGET_OBJECT(_audioMixer);
-	FORGET_OBJECT(_ucMachine);
-	FORGET_OBJECT(_paletteManager);
-	FORGET_OBJECT(_mouse);
-	FORGET_OBJECT(_gameData);
-	FORGET_OBJECT(_world);
-	FORGET_OBJECT(_ucMachine);
-	FORGET_OBJECT(_fontManager);
-	FORGET_OBJECT(_screen);
-	FORGET_OBJECT(_fileSystem);
-	FORGET_OBJECT(_configFileMan);
-	FORGET_OBJECT(_gameInfo);
+	delete _kernel;
+	delete _objectManager;
+	delete _audioMixer;
+	delete _ucMachine;
+	delete _paletteManager;
+	delete _mouse;
+	delete _gameData;
+	delete _world;
+	delete _ucMachine;
+	delete _fontManager;
+	delete _screen;
+	delete _fileSystem;
+	delete _configFileMan;
+	delete _gameInfo;
 
 	_instance = nullptr;
 }
@@ -546,20 +546,29 @@ void Ultima8Engine::shutdownGame(bool reloading) {
 	_mouse->popAllCursors();
 	_mouse->pushMouseCursor(Mouse::MOUSE_NORMAL);
 
-	FORGET_OBJECT(_world);
+	delete _world;
+	_world = nullptr;
+
 	_objectManager->reset();
-	FORGET_OBJECT(_ucMachine);
+
+	delete _ucMachine;
+	_ucMachine = nullptr;
+
 	_kernel->reset();
 	_paletteManager->reset();
 	_fontManager->resetGameFonts();
 
-	FORGET_OBJECT(_game);
-	FORGET_OBJECT(_gameData);
+	delete _game;
+	_game = nullptr;
+
+	delete _gameData;
+	_gameData = nullptr;
 
 	if (_audioMixer) {
 		_audioMixer->closeMidiOutput();
 		_audioMixer->reset();
-		FORGET_OBJECT(_audioMixer);
+		delete _audioMixer;
+		_audioMixer = nullptr;
 	}
 
 	_desktopGump = nullptr;


Commit: 46118c2100b3c6e59491c245b2897d7698720f69
    https://github.com/scummvm/scummvm/commit/46118c2100b3c6e59491c245b2897d7698720f69
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-02-02T18:23:33-06:00

Commit Message:
ULTIMA8: Cleanup shutdown methods

Changed paths:
    engines/ultima/ultima8/ultima8.cpp
    engines/ultima/ultima8/ultima8.h


diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 62f2c1aed55..38c3f0884b5 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -534,10 +534,6 @@ Common::Error Ultima8Engine::startupGame() {
 }
 
 void Ultima8Engine::shutdown() {
-	shutdownGame(false);
-}
-
-void Ultima8Engine::shutdownGame(bool reloading) {
 	debug(MM_INFO, "-- Shutting down Game -- ");
 
 	// Save config here....
@@ -588,22 +584,6 @@ void Ultima8Engine::shutdownGame(bool reloading) {
 	_gameInfo = nullptr;
 
 	debug(MM_INFO, "-- Game Shutdown -- ");
-
-	if (reloading) {
-		Rect dims;
-		_screen->GetSurfaceDims(dims);
-
-		debugN(MM_INFO, "Creating Desktop...\n");
-		_desktopGump = new DesktopGump(0, 0, dims.width(), dims.height());
-		_desktopGump->InitGump(0);
-		_desktopGump->MakeFocus();
-
-		if (GAME_IS_U8) {
-			debugN(MM_INFO, "Creating Inverter...\n");
-			_inverterGump = new InverterGump(0, 0, dims.width(), dims.height());
-			_inverterGump->InitGump(0);
-		}
-	}
 }
 
 //
diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h
index 4fda211c363..5af6d936423 100644
--- a/engines/ultima/ultima8/ultima8.h
+++ b/engines/ultima/ultima8/ultima8.h
@@ -196,7 +196,6 @@ public:
 
 	bool setupGame();
 	Common::Error startupGame();
-	void shutdownGame(bool reloading = true);
 
 	void changeVideoMode(int width, int height);
 




More information about the Scummvm-git-logs mailing list