[Scummvm-git-logs] scummvm master -> 3cafae9398f695a3131b2bff9d2a41b21a29b51b

OMGPizzaGuy noreply at scummvm.org
Fri Jan 27 23:55:53 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:
3cafae9398 ULTIMA8: Fix sort item hidden easter egg item and test


Commit: 3cafae9398f695a3131b2bff9d2a41b21a29b51b
    https://github.com/scummvm/scummvm/commit/3cafae9398f695a3131b2bff9d2a41b21a29b51b
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-01-27T17:55:23-06:00

Commit Message:
ULTIMA8: Fix sort item hidden easter egg item and test

Changed paths:
    engines/ultima/ultima8/world/sort_item.h
    test/engines/ultima/ultima8/world/sort_item.h


diff --git a/engines/ultima/ultima8/world/sort_item.h b/engines/ultima/ultima8/world/sort_item.h
index 87cd1c6a3c6..f4fe9366dbc 100644
--- a/engines/ultima/ultima8/world/sort_item.h
+++ b/engines/ultima/ultima8/world/sort_item.h
@@ -428,16 +428,16 @@ inline bool SortItem::below(const SortItem &si2) const {
 	if (si1._flat != si2._flat)
 		return si1._flat > si2._flat;
 
-	// Animated always gets drawn after
-	if (si1._anim != si2._anim)
-		return si1._anim < si2._anim;
-
 	// Trans always gets drawn after
 	if (si1._trans != si2._trans)
 		return si1._trans < si2._trans;
 
 	// Specialist z flat handling
 	if (si1._flat && si2._flat) {
+		// Animated always gets drawn after
+		if (si1._anim != si2._anim)
+			return si1._anim < si2._anim;
+
 		// Draw always gets drawn first
 		if (si1._draw != si2._draw)
 			return si1._draw > si2._draw;
@@ -455,9 +455,9 @@ inline bool SortItem::below(const SortItem &si2) const {
 			return si1._fbigsq > si2._fbigsq;
 	}
 
-	// Land always gets drawn first
-	if (si1._land != si2._land)
-		return si1._land > si2._land;
+	// Disabled: Land always gets drawn first
+	//if (si1._land != si2._land)
+	//	return si1._land > si2._land;
 
 	// Land always gets drawn before roof
 	if (si1._land && si2._land && si1._roof != si2._roof)
diff --git a/test/engines/ultima/ultima8/world/sort_item.h b/test/engines/ultima/ultima8/world/sort_item.h
index a2f9a44190e..e475eb3d3ec 100644
--- a/test/engines/ultima/ultima8/world/sort_item.h
+++ b/test/engines/ultima/ultima8/world/sort_item.h
@@ -217,6 +217,49 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
 		TS_ASSERT(!si2.below(si1));
 	}
 
+	/**
+	 * Overlapping non-flat items - rule not yet known
+	 * Test case for rendering issue at MainActor::teleport 3 20747 2227 0
+	 * This looks like a possible rendering test easter egg in the original game
+	 */
+	void test_anim_easter_egg() {
+		Ultima::Ultima8::SortItem si1(nullptr);
+		Ultima::Ultima8::SortItem si2(nullptr);
+
+		Ultima::Ultima8::Box b1(20735, 1919, 0, 64, 64, 16);
+		si1.setBoxBounds(b1, 0, 0);
+		si1._anim = true;
+
+		Ultima::Ultima8::Box b2(20799, 1919, 0, 128, 32, 40);
+		si2.setBoxBounds(b2, 0, 0);
+		si2._solid = true;
+		si2._occl = true;
+		si2._land = true;
+
+		TS_ASSERT(si1.below(si2));
+		TS_ASSERT(!si2.below(si1));
+	}
+
+	/**
+	 * Test case for rendering armor of flames spell
+	 */
+	void test_armor_of_flames_sort() {
+		Ultima::Ultima8::SortItem si1(nullptr);
+		Ultima::Ultima8::SortItem si2(nullptr);
+
+		Ultima::Ultima8::Box b1(13655, 5111, 8, 64, 64, 16);
+		si1.setBoxBounds(b1, 0, 0);
+		si1._solid = true;
+
+		Ultima::Ultima8::Box b2(13655, 5111, 8, 96, 96, 72);
+		si2.setBoxBounds(b2, 0, 0);
+		si2._anim = true;
+		si2._trans = true;
+
+		TS_ASSERT(si1.below(si2));
+		TS_ASSERT(!si2.below(si1));
+	}
+
 	/* Overlapping non-flat occludes flat */
 	void test_basic_occludes() {
 		Ultima::Ultima8::SortItem si1(nullptr);




More information about the Scummvm-git-logs mailing list