[Scummvm-git-logs] scummvm master -> 1ccb38c1b782706d89dfea22f8d4eca337f747ef

mduggan mgithub at guarana.org
Sat Mar 20 12:17:09 UTC 2021


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:
934fbd6079 ULTIMA8: Comments for magic numbers.
41a4809fb8 ULTIMA8: Fix combat run in 16-dir direction for Crusader
1ccb38c1b7 ULTIMA8: Put Crusader sprites on top


Commit: 934fbd6079f029827e1ef52674d56038f294ab6b
    https://github.com/scummvm/scummvm/commit/934fbd6079f029827e1ef52674d56038f294ab6b
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-03-20T19:26:32+09:00

Commit Message:
ULTIMA8: Comments for magic numbers.

Changed paths:
    engines/ultima/ultima8/world/item.cpp


diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 34e0afc375..6a5f65082f 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -60,7 +60,10 @@
 namespace Ultima {
 namespace Ultima8 {
 
+// Shape for camera snap eggs.  Same in Remorse and Regret.
 static const uint32 SNAP_EGG_SHAPE = 0x4fe;
+
+// Shape for small spark where a bullet hits.  Same in Remorse and Regret.
 static const uint32 BULLET_SPLASH_SHAPE = 0x1d9;
 
 DEFINE_RUNTIME_CLASSTYPE_CODE(Item)


Commit: 41a4809fb83fc3fbbc3bfaf88eb23ff89b213c7d
    https://github.com/scummvm/scummvm/commit/41a4809fb83fc3fbbc3bfaf88eb23ff89b213c7d
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-03-20T19:26:32+09:00

Commit Message:
ULTIMA8: Fix combat run in 16-dir direction for Crusader

Changed paths:
    engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp


diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
index 19675a1b6f..fca71f8b2e 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
@@ -82,7 +82,9 @@ bool AvatarMoverProcess::checkTurn(Direction direction, bool moving) {
 
 		if (moving &&
 				(lastanim == Animation::walk || lastanim == Animation::run ||
-				 lastanim == Animation::combatStand) &&
+				 lastanim == Animation::combatStand ||
+				 (GAME_IS_CRUSADER && (lastanim == Animation::startRunSmallWeapon ||
+				 lastanim == Animation::combatRunSmallWeapon))) &&
 				(ABS(direction - curdir) + 2) % 16 <= 4) {
 			// don't need to explicitly do a turn animation
 			return false;
diff --git a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
index 2d70e83157..bf7f0c7422 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -99,6 +99,11 @@ static bool _isAnimStartRunning(Animation::Sequence anim) {
 			anim == Animation::startRunLargeWeapon);
 }
 
+static bool _isAnimRunningWalking(Animation::Sequence anim) {
+	return (anim == Animation::run || anim == Animation::combatRunSmallWeapon ||
+			anim == Animation::walk);
+}
+
 void CruAvatarMoverProcess::handleCombatMode() {
 	Actor *avatar = getControlledActor();
 	MainActor *mainactor = dynamic_cast<MainActor *>(avatar);
@@ -259,7 +264,6 @@ void CruAvatarMoverProcess::handleNormalMode() {
 
 	// User toggled combat while in combatRun
 	if (avatar->isInCombat()) {
-		avatar->clearActorFlag(Actor::ACT_COMBATRUN);
 		if (mainactor)
 			mainactor->toggleInCombat();
 	}
@@ -269,7 +273,6 @@ void CruAvatarMoverProcess::handleNormalMode() {
 		// (even in stasis)
 		waitFor(avatar->doAnim(Animation::stopRunningAndDrawSmallWeapon, direction));
 		avatar->setInCombat(0);
-		avatar->clearActorFlag(Actor::ACT_COMBATRUN);
 		return;
 	}
 
@@ -296,11 +299,9 @@ void CruAvatarMoverProcess::handleNormalMode() {
 			|| lastanim == Animation::walk) {
 			// keep running
 			nextanim = Animation::run;
-			avatar->setActorFlag(Actor::ACT_COMBATRUN);
 		} else {
 			// start running
 			nextanim = Animation::startRun;
-			avatar->setActorFlag(Actor::ACT_COMBATRUN);
 		}
 	}
 
@@ -406,7 +407,7 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
 		action = Animation::combatStand;
 	}
 
-	bool moving = (action == Animation::run || action == Animation::walk);
+	bool moving = _isAnimRunningWalking(action);
 
 	if (checkTurn(direction, moving))
 		return;


Commit: 1ccb38c1b782706d89dfea22f8d4eca337f747ef
    https://github.com/scummvm/scummvm/commit/1ccb38c1b782706d89dfea22f8d4eca337f747ef
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-03-20T21:14:29+09:00

Commit Message:
ULTIMA8: Put Crusader sprites on top

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 39556e6075..dcd618c588 100644
--- a/engines/ultima/ultima8/world/item_sorter.cpp
+++ b/engines/ultima/ultima8/world/item_sorter.cpp
@@ -29,6 +29,7 @@
 #include "ultima/ultima8/graphics/render_surface.h"
 #include "ultima/ultima8/misc/rect.h"
 #include "ultima/ultima8/games/game_data.h"
+#include "ultima/ultima8/ultima8.h"
 
 // temp
 #include "ultima/ultima8/world/actors/weapon_overlay.h"
@@ -49,7 +50,7 @@ struct SortItem {
 			_syTop(0), _sxBot(0), _syBot(0),_f32x32(false), _flat(false),
 			_occl(false), _solid(false), _draw(false), _roof(false),
 			_noisy(false), _anim(false), _trans(false), _fixed(false),
-			_land(false), _occluded(false), _clipped(0) { }
+			_land(false), _occluded(false), _clipped(false), _sprite(false) { }
 
 	SortItem                *_next;
 	SortItem                *_prev;
@@ -107,10 +108,10 @@ struct SortItem {
 	bool    _trans : 1;          // Needs 1 bit  8
 	bool    _fixed : 1;
 	bool    _land : 1;
+	bool 	_sprite : 1;         // Always-on-top sprite, for Crusader (U8 sprites appear in z order)
 
 	bool    _occluded : 1;       // Set true if occluded
-
-	int16   _clipped;            // Clipped to RenderSurface
+	bool  	_clipped : 1;        // Clipped to RenderSurface
 
 	int32   _order;      // Rendering _order. -1 is not yet drawn
 
@@ -141,7 +142,7 @@ struct SortItem {
 				n = n->_next;
 				return *this;
 			}
-			bool operator != (const iterator &o) {
+			bool operator != (const iterator &o) const {
 				return n != o.n;
 			}
 		};
@@ -229,8 +230,8 @@ struct SortItem {
 	// Operator less than
 	inline bool operator<(const SortItem &si2) const;
 
-	// Operator left shift (ok, what this does it output the comparisons)
-	inline bool operator<<(const SortItem &si2) const;
+	// Operator left shift (outputs the comparison result)
+	bool operator<<(const SortItem &si2) const;
 
 	// Comparison for the sorted lists
 	inline bool ListLessThan(const SortItem *other) const {
@@ -310,6 +311,9 @@ inline bool SortItem::occludes(const SortItem &si2) const {
 inline bool SortItem::operator<(const SortItem &si2) const {
 	const SortItem &si1 = *this;
 
+	if (si1._sprite != si2._sprite)
+		return si1._sprite < si2._sprite;
+
 	// Specialist z flat handling
 	if (si1._flat && si2._flat) {
 		// Differing z is easy for flats
@@ -432,7 +436,8 @@ inline bool SortItem::operator<(const SortItem &si2) const {
 	}                                                           \
 	pout << tab"}" << Std::endl;
 
-inline bool SortItem::operator<<(const SortItem &si2) const {
+
+bool SortItem::operator<<(const SortItem &si2) const {
 	const SortItem &si1 = *this;
 
 	if (si2.overlap(si1)) pout << "Overlaping" << Std::endl;
@@ -683,11 +688,13 @@ void ItemSorter::AddItem(int32 x, int32 y, int32 z, uint32 shapeNum, uint32 fram
 	si->_sy2 = si->_sy + _frame->_height;   // Bottom
 
 	// Do Clipping here
-	si->_clipped = _surf->CheckClipped(Rect(si->_sx, si->_sy, si->_sx + _frame->_width, si->_sy + _frame->_height));
-	if (si->_clipped < 0)
+	int16 clipped = _surf->CheckClipped(Rect(si->_sx, si->_sy, si->_sx + _frame->_width, si->_sy + _frame->_height));
+	if (clipped < 0)
 		// Clipped away entirely - don't add to the list.
 		return;
 
+	si->_clipped = (clipped != 0);
+
 	// These help out with sorting. We calc them now, so it will be faster
 	si->_f32x32 = xd == 128 && yd == 128;
 	si->_flat = zd == 0;
@@ -702,6 +709,7 @@ void ItemSorter::AddItem(int32 x, int32 y, int32 z, uint32 shapeNum, uint32 fram
 	si->_trans = info->is_translucent();
 	si->_fixed = info->is_fixed();
 	si->_land = info->is_land();
+	si->_sprite = GAME_IS_CRUSADER && (si->_extFlags & Item::EXT_SPRITE);
 
 	si->_occluded = false;
 	si->_order = -1;




More information about the Scummvm-git-logs mailing list