[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