[Scummvm-git-logs] scummvm master -> d5b7ac031dde79f860bb13c829ccac6fdeabb3b6
OMGPizzaGuy
noreply at scummvm.org
Wed Feb 15 00:26:06 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:
5e78e16da6 ULTIMA8: Fix overlap comparison of items during paint debugging
1c159c0c59 ULTIMA8: Change sort item constructor to not include next pointer
d5b7ac031d ULTIMA8: Fix sort item shape screenspace calculation for flipped items.
Commit: 5e78e16da63b518ab5cd4bf5db7f7a066507ef84
https://github.com/scummvm/scummvm/commit/5e78e16da63b518ab5cd4bf5db7f7a066507ef84
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-02-14T18:25:45-06:00
Commit Message:
ULTIMA8: Fix overlap comparison of items during paint debugging
Changed paths:
engines/ultima/ultima8/world/item_sorter.cpp
diff --git a/engines/ultima/ultima8/world/item_sorter.cpp b/engines/ultima/ultima8/world/item_sorter.cpp
index fc17b05a2ce..44736ff8ced 100644
--- a/engines/ultima/ultima8/world/item_sorter.cpp
+++ b/engines/ultima/ultima8/world/item_sorter.cpp
@@ -347,7 +347,7 @@ bool ItemSorter::PaintSortItem(RenderSurface *surf, SortItem *si) {
_sortLimitChanged = false;
debugC(kDebugObject, "SortItem: %s", si->dumpInfo().c_str());
- if (_painted && si->overlap(_painted)) {
+ if (_painted && si->overlap(*_painted)) {
debugC(kDebugObject, "Overlaps: %s", _painted->dumpInfo().c_str());
}
}
Commit: 1c159c0c5956d4a49e23e7b9be3e65dc8c2614a6
https://github.com/scummvm/scummvm/commit/1c159c0c5956d4a49e23e7b9be3e65dc8c2614a6
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-02-14T18:25:45-06:00
Commit Message:
ULTIMA8: Change sort item constructor to not include next pointer
Changed paths:
engines/ultima/ultima8/world/item_sorter.cpp
engines/ultima/ultima8/world/sort_item.h
test/engines/ultima/ultima8/world/sort_item.h
diff --git a/engines/ultima/ultima8/world/item_sorter.cpp b/engines/ultima/ultima8/world/item_sorter.cpp
index 44736ff8ced..03e5c8d3fd8 100644
--- a/engines/ultima/ultima8/world/item_sorter.cpp
+++ b/engines/ultima/ultima8/world/item_sorter.cpp
@@ -46,7 +46,11 @@ ItemSorter::ItemSorter(int capacity) :
_itemsUnused(nullptr), _painted(nullptr), _camSx(0), _camSy(0),
_sortLimit(0), _sortLimitChanged(false) {
int i = capacity;
- while (i--) _itemsUnused = new SortItem(_itemsUnused);
+ while (i--) {
+ SortItem *next = _itemsUnused;
+ _itemsUnused = new SortItem();
+ _itemsUnused->_next = next;
+ }
}
ItemSorter::~ItemSorter() {
@@ -59,9 +63,9 @@ ItemSorter::~ItemSorter() {
_itemsTail = nullptr;
while (_itemsUnused) {
- SortItem *_next = _itemsUnused->_next;
+ SortItem *next = _itemsUnused->_next;
delete _itemsUnused;
- _itemsUnused = _next;
+ _itemsUnused = next;
}
delete [] _items;
@@ -101,7 +105,7 @@ void ItemSorter::AddItem(int32 x, int32 y, int32 z, uint32 shapeNum, uint32 fram
// First thing, get a SortItem to use (first of unused)
if (!_itemsUnused)
- _itemsUnused = new SortItem(nullptr);
+ _itemsUnused = new SortItem();
SortItem *si = _itemsUnused;
si->_itemNum = itemNum;
diff --git a/engines/ultima/ultima8/world/sort_item.h b/engines/ultima/ultima8/world/sort_item.h
index 10c4b5023b1..5c21733e0ce 100644
--- a/engines/ultima/ultima8/world/sort_item.h
+++ b/engines/ultima/ultima8/world/sort_item.h
@@ -39,7 +39,7 @@ class Shape;
* Other code should have no reason to include it.
*/
struct SortItem {
- SortItem(SortItem *n) : _next(n), _prev(nullptr), _itemNum(0),
+ SortItem() : _next(nullptr), _prev(nullptr), _itemNum(0),
_shape(nullptr), _order(-1), _depends(), _shapeNum(0),
_frame(0), _flags(0), _extFlags(0), _sr(),
_x(0), _y(0), _z(0), _xLeft(0),
diff --git a/test/engines/ultima/ultima8/world/sort_item.h b/test/engines/ultima/ultima8/world/sort_item.h
index b7361a520d4..891e681577d 100644
--- a/test/engines/ultima/ultima8/world/sort_item.h
+++ b/test/engines/ultima/ultima8/world/sort_item.h
@@ -14,8 +14,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
/* Non-overlapping with lower Y position should always be below */
void test_basic_y_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(0, 10, 0, 10, 10, 0);
Ultima::Ultima8::Box b2(0, 30, 0, 10, 10, 0);
@@ -28,8 +28,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
/* Non-overlapping with lower X position should always be below */
void test_basic_x_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(10, 0, 0, 10, 10, 0);
Ultima::Ultima8::Box b2(30, 0, 0, 10, 10, 0);
@@ -42,8 +42,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
/* Non-overlapping with lower Z position should always be below */
void test_basic_z_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(10, 10, 0, 10, 10, 10);
Ultima::Ultima8::Box b2(10, 10, 20, 10, 10, 10);
@@ -56,8 +56,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
/* Sprites should always be at the top regardless of x/y/z */
void test_sprite_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(59454, 49246, 80, 32, 160, 16);
Ultima::Ultima8::Box b2(59440, 49144, 63, 32, 32, 63);
@@ -80,8 +80,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
* Test case for keycard rendering issue at MainActor::teleport 9 34174 41502 0
*/
void test_inv_item_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(34142, 41150, 0, 256, 64, 8);
si1.setBoxBounds(b1, 0, 0);
@@ -102,8 +102,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
/* Overlapping flat items (generally the floor) follow a set of rules */
void test_flat_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(0, 0, 0, 10, 10, 0);
Ultima::Ultima8::Box b2(0, 0, 0, 10, 10, 0);
@@ -158,8 +158,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
/* Overlapping non-flat items also follow a set of rules */
void test_non_flat_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
// Land always gets drawn below
// MainActor::teleport 6 7642 19776 48
@@ -183,8 +183,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
* Wall with window should render after non-window wall
*/
void test_nonflat_tranparent_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(17407, 16127, 48, 32, 96, 40);
si1.setBoxBounds(b1, 0, 0);
@@ -205,8 +205,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
* Test case for rendering issue at MainActor::teleport 41 20063 13887 48
*/
void test_y_flat_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(64, 0, 16, 64, 0, 16);
si1.setBoxBounds(b1, 0, 0);
@@ -225,8 +225,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
* Test case for rendering issue at MainActor::teleport 41 20583 10083 48
*/
void test_y_flat_intersect_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(20479, 9887, 48, 64, 128, 40);
si1.setBoxBounds(b1, 0, 0);
@@ -249,8 +249,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
* Test case for rendering issue at MainActor::teleport 6 7774 19876 48
*/
void test_nonflat_z_clear_sort() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(129, 32, 0, 64, 64, 24);
si1.setBoxBounds(b1, 0, 0);
@@ -271,8 +271,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
* 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::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(20735, 1919, 0, 64, 64, 16);
si1.setBoxBounds(b1, 0, 0);
@@ -292,8 +292,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
* 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::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(13655, 5111, 8, 64, 64, 16);
si1.setBoxBounds(b1, 0, 0);
@@ -310,8 +310,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
/* Overlapping non-flat occludes flat */
void test_basic_occludes() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(0, 0, 0, 128, 128, 16);
Ultima::Ultima8::Box b2(0, 0, 0, 128, 128, 0);
@@ -327,8 +327,8 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
* Test case for rendering issue at MainActor::teleport 49 19167 17582 48
*/
void test_frame_offset_occludes() {
- Ultima::Ultima8::SortItem si1(nullptr);
- Ultima::Ultima8::SortItem si2(nullptr);
+ Ultima::Ultima8::SortItem si1;
+ Ultima::Ultima8::SortItem si2;
Ultima::Ultima8::Box b1(0, 0, 0, 128, 128, 16);
Ultima::Ultima8::Box b2(0, 0, 0, 128, 128, 0);
@@ -352,7 +352,7 @@ class U8SortItemTestSuite : public CxxTest::TestSuite {
}
void test_basic_contains() {
- Ultima::Ultima8::SortItem si1(nullptr);
+ Ultima::Ultima8::SortItem si1;
Ultima::Ultima8::Box b1(0, 0, 0, 128, 128, 16);
si1.setBoxBounds(b1, 0, 0);
Commit: d5b7ac031dde79f860bb13c829ccac6fdeabb3b6
https://github.com/scummvm/scummvm/commit/d5b7ac031dde79f860bb13c829ccac6fdeabb3b6
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-02-14T18:25:45-06:00
Commit Message:
ULTIMA8: Fix sort item shape screenspace calculation for flipped items.
Changed paths:
engines/ultima/ultima8/world/item_sorter.cpp
diff --git a/engines/ultima/ultima8/world/item_sorter.cpp b/engines/ultima/ultima8/world/item_sorter.cpp
index 03e5c8d3fd8..dae41148484 100644
--- a/engines/ultima/ultima8/world/item_sorter.cpp
+++ b/engines/ultima/ultima8/world/item_sorter.cpp
@@ -138,10 +138,17 @@ void ItemSorter::AddItem(int32 x, int32 y, int32 z, uint32 shapeNum, uint32 fram
si->setBoxBounds(box, _camSx, _camSy);
// Real Screenspace from shape frame
- si->_sr.left = si->_sxBot - frame->_xoff;
- si->_sr.top = si->_syBot - frame->_yoff;
- si->_sr.right = si->_sr.left + frame->_width;
- si->_sr.bottom = si->_sr.top + frame->_height;
+ if (si->_flags & Item::FLG_FLIPPED) {
+ si->_sr.left = si->_sxBot + frame->_xoff - frame->_width;
+ si->_sr.top = si->_syBot - frame->_yoff;
+ si->_sr.right = si->_sr.left + frame->_width;
+ si->_sr.bottom = si->_sr.top + frame->_height;
+ } else {
+ si->_sr.left = si->_sxBot - frame->_xoff;
+ si->_sr.top = si->_syBot - frame->_yoff;
+ si->_sr.right = si->_sr.left + frame->_width;
+ si->_sr.bottom = si->_sr.top + frame->_height;
+ }
// Do Clipping here
if (!_clipWindow.intersects(si->_sr)) {
More information about the Scummvm-git-logs
mailing list