[Scummvm-git-logs] scummvm master -> f27a567e91e4390d17b879900cb2904b6406dc20
mduggan
mgithub at guarana.org
Thu Apr 22 12:43:16 UTC 2021
This automated email contains information about 8 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0a5de3dce7 ULTIMA8: Disable certain Crusader commands during robot control
18c699ed2a ULTIMA8: Remove stale gravity pid from avatar to avoid getting stuck
15117a32e4 ULTIMA8: Avoid invalid directions in Crusader
716f15806b ULTIMA8: Avoid null pointer in Crusader when controlled robot dies
72864946d2 ULTIMA8: Test retreating in Crusader to reproduce original game behavior
96592c56f9 ULTIMA8: Fix saving of alert flag
dcfe41a6a5 ULTIMA8: Crusader: Controlled NPC is never a best target.
f27a567e91 ULTIMA8: Tiny Crusader snap adjustment to be more accurate to original
Commit: 0a5de3dce7b8879780082981d1d50dbd47172091
https://github.com/scummvm/scummvm/commit/0a5de3dce7b8879780082981d1d50dbd47172091
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-04-22T21:37:22+09:00
Commit Message:
ULTIMA8: Disable certain Crusader commands during robot control
Changed paths:
engines/ultima/ultima8/misc/debugger.cpp
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index de16dfab9d..10e69d849c 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -1019,11 +1019,22 @@ bool Debugger::cmdUseBackpack(int argc, const char **argv) {
return false;
}
+static bool _isAvatarControlled() {
+ World *world = World::get_instance();
+ return (world && world->getControlledNPCNum() == 1);
+}
+
bool Debugger::cmdNextInventory(int argc, const char **argv) {
if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
debugPrintf("Can't use inventory: avatarInStasis\n");
return false;
}
+
+ // Only if controlling avatar.
+ if (!_isAvatarControlled()) {
+ return false;
+ }
+
MainActor *av = getMainActor();
av->nextInvItem();
return false;
@@ -1034,6 +1045,12 @@ bool Debugger::cmdNextWeapon(int argc, const char **argv) {
debugPrintf("Can't change weapon: avatarInStasis\n");
return false;
}
+
+ // Only if controlling avatar.
+ if (!_isAvatarControlled()) {
+ return false;
+ }
+
MainActor *av = getMainActor();
av->nextWeapon();
return false;
@@ -1044,6 +1061,12 @@ bool Debugger::cmdUseInventoryItem(int argc, const char **argv) {
debugPrintf("Can't use active inventory item: avatarInStasis\n");
return false;
}
+
+ // Only if controlling avatar.
+ if (!_isAvatarControlled()) {
+ return false;
+ }
+
MainActor *av = getMainActor();
ObjId activeitemid = av->getActiveInvItem();
if (activeitemid) {
@@ -1060,6 +1083,12 @@ bool Debugger::cmdUseMedikit(int argc, const char **argv) {
debugPrintf("Can't use medikit: avatarInStasis\n");
return false;
}
+
+ // Only if controlling avatar.
+ if (!_isAvatarControlled()) {
+ return false;
+ }
+
MainActor *av = getMainActor();
av->useInventoryItem(0x351);
return false;
@@ -1070,6 +1099,12 @@ bool Debugger::cmdDetonateBomb(int argc, const char **argv) {
debugPrintf("Can't detonate bomb: avatarInStasis\n");
return false;
}
+
+ // Only if controlling avatar.
+ if (!_isAvatarControlled()) {
+ return false;
+ }
+
MainActor *av = getMainActor();
av->detonateBomb();
return false;
@@ -1437,6 +1472,11 @@ bool Debugger::cmdStartSelection(int argc, const char **argv) {
return false;
}
+ // Only if controlling avatar.
+ if (!_isAvatarControlled()) {
+ return false;
+ }
+
ItemSelectionProcess *proc = ItemSelectionProcess::get_instance();
if (proc)
proc->selectNextItem();
@@ -1449,6 +1489,11 @@ bool Debugger::cmdUseSelection(int argc, const char **argv) {
return false;
}
+ // Only if controlling avatar.
+ if (!_isAvatarControlled()) {
+ return false;
+ }
+
ItemSelectionProcess *proc = ItemSelectionProcess::get_instance();
if (proc)
proc->useSelectedItem();
Commit: 18c699ed2a042f0fda95bc9e28e56e3444ce9783
https://github.com/scummvm/scummvm/commit/18c699ed2a042f0fda95bc9e28e56e3444ce9783
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-04-22T21:37:22+09:00
Commit Message:
ULTIMA8: Remove stale gravity pid from avatar to avoid getting stuck
This has happened to me during testing. I'm not sure how it got into this state
but this simple workaround will help avoid getting stuck.
Changed paths:
engines/ultima/ultima8/world/actors/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 1505a1292a..dbd554a3b6 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
@@ -56,8 +56,14 @@ void AvatarMoverProcess::run() {
// falling, so don't move
if (avatar->getGravityPID() != 0) {
- _idleTime = 0;
- return;
+ Process *proc = Kernel::get_instance()->getProcess(avatar->getGravityPID());
+ if (!proc || !proc->is_active()) {
+ warning("FIXME: Removing stale gravity pid %d from Avatar.", avatar->getGravityPID());
+ avatar->setGravityPID(0);
+ } else {
+ _idleTime = 0;
+ return;
+ }
}
// not in fast area, don't move (can happen for some death sequences
Commit: 15117a32e47a4cd305ca2d535499289547a70723
https://github.com/scummvm/scummvm/commit/15117a32e47a4cd305ca2d535499289547a70723
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-04-22T21:37:22+09:00
Commit Message:
ULTIMA8: Avoid invalid directions in Crusader
Changed paths:
engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
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 d6d11eaa5c..25152a6248 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -150,6 +150,10 @@ void CruAvatarMoverProcess::handleCombatMode() {
mainactor->toggleInCombat();
}
+ // Ensure the dir we are about to use is valid
+ if (avatar->animDirMode(nextanim) == dirmode_8dirs)
+ direction = static_cast<Direction>(direction - (static_cast<uint32>(direction) % 2));
+
// don't check weapon here, Avatar can go straight from drawn-weapon to
// walking forward.
step(nextanim, direction);
Commit: 716f15806bf798af6b37c8ec87d6a8ddd6d352d7
https://github.com/scummvm/scummvm/commit/716f15806bf798af6b37c8ec87d6a8ddd6d352d7
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-04-22T21:37:22+09:00
Commit Message:
ULTIMA8: Avoid null pointer in Crusader when controlled robot dies
Changed paths:
engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
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 25152a6248..5697ecdeef 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -425,6 +425,9 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
void CruAvatarMoverProcess::tryAttack() {
Actor *avatar = getControlledActor();
+ if (!avatar)
+ return;
+
Direction dir = avatar->getDir();
if (!avatar->isInCombat()) {
avatar->setInCombat(0);
Commit: 72864946d26ee1072819a1c0a33670f71908d17e
https://github.com/scummvm/scummvm/commit/72864946d26ee1072819a1c0a33670f71908d17e
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-04-22T21:37:22+09:00
Commit Message:
ULTIMA8: Test retreating in Crusader to reproduce original game behavior
Changed paths:
engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
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 5697ecdeef..a1ac5b9d3f 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -171,7 +171,7 @@ void CruAvatarMoverProcess::handleCombatMode() {
} else {
nextanim = Animation::retreat;
}
- waitFor(avatar->doAnim(nextanim, direction));
+ step(nextanim, direction);
return;
} else if (hasMovementFlags(MOVE_STEP)) {
if (avatar->isKneeling()) {
Commit: 96592c56f9adee4f0fabb8aaff1f293bc06c5c45
https://github.com/scummvm/scummvm/commit/96592c56f9adee4f0fabb8aaff1f293bc06c5c45
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-04-22T21:37:22+09:00
Commit Message:
ULTIMA8: Fix saving of alert flag
Changed paths:
engines/ultima/ultima8/world/world.cpp
diff --git a/engines/ultima/ultima8/world/world.cpp b/engines/ultima/ultima8/world/world.cpp
index d72777de48..a937315b08 100644
--- a/engines/ultima/ultima8/world/world.cpp
+++ b/engines/ultima/ultima8/world/world.cpp
@@ -338,7 +338,7 @@ void World::save(Common::WriteStream *ws) {
ws->writeUint16LE(_currentMap->_eggHatcher);
if (GAME_IS_CRUSADER) {
- ws->writeByte(_alertActive ? 0 : 1);
+ ws->writeByte(_alertActive ? 1 : 0);
ws->writeByte(_difficulty);
}
Commit: dcfe41a6a56f5d9d0314f488da37d79dff881adb
https://github.com/scummvm/scummvm/commit/dcfe41a6a56f5d9d0314f488da37d79dff881adb
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-04-22T21:37:22+09:00
Commit Message:
ULTIMA8: Crusader: Controlled NPC is never a best target.
Changed paths:
engines/ultima/ultima8/world/current_map.cpp
diff --git a/engines/ultima/ultima8/world/current_map.cpp b/engines/ultima/ultima8/world/current_map.cpp
index ebe7ca3a61..9d03e6f08b 100644
--- a/engines/ultima/ultima8/world/current_map.cpp
+++ b/engines/ultima/ultima8/world/current_map.cpp
@@ -345,9 +345,10 @@ Item *CurrentMap::findBestTargetItem(int32 x, int32 y, Direction dir, DirectionM
bool bestisoccl = false;
Item *bestitem = nullptr;
int bestdist = 0xffff;
+ const uint16 controllednpc = World::get_instance()->getControlledNPCNum();
for (int i = 0; i < MAP_NUM_TARGET_ITEMS; i++) {
- if (_targets[i] == 0)
+ if (_targets[i] == 0 || _targets[i] == controllednpc)
continue;
Item *item = getItem(_targets[i]);
// FIXME: this should probably always be non-null,
Commit: f27a567e91e4390d17b879900cb2904b6406dc20
https://github.com/scummvm/scummvm/commit/f27a567e91e4390d17b879900cb2904b6406dc20
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-04-22T21:39:18+09:00
Commit Message:
ULTIMA8: Tiny Crusader snap adjustment to be more accurate to original
Changed paths:
engines/ultima/ultima8/world/snap_process.cpp
diff --git a/engines/ultima/ultima8/world/snap_process.cpp b/engines/ultima/ultima8/world/snap_process.cpp
index 95444bf827..acdd1bfc16 100644
--- a/engines/ultima/ultima8/world/snap_process.cpp
+++ b/engines/ultima/ultima8/world/snap_process.cpp
@@ -77,7 +77,7 @@ void SnapProcess::updateCurrentEgg() {
Rect r;
egg->getLocation(x, y, z);
getSnapEggRange(egg, r);
- if (r.intersects(arect) && (az < z + 0x30 && az > z - 0x30)) {
+ if (r.intersects(arect) && (az <= z + 0x30 && az >= z - 0x30)) {
_currentSnapEgg = *iter;
_currentSnapEggRange = r;
CameraProcess::SetCameraProcess(new CameraProcess(_currentSnapEgg));
More information about the Scummvm-git-logs
mailing list