[Scummvm-git-logs] scummvm master -> a09f262dbae482fabae4905b9ce6a546a5f5cf60
mduggan
mgithub at guarana.org
Thu Feb 11 02:37:22 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:
2ac85c66fb ULTIMA8: Avoid surrender loops in Crusader
de12bff66e ULTIMA8: Try to fix avatar disappearing from fast area
bfbade5c54 ULTIMA8: Add some map debugging code (off by default)
3157e8828e ULTIMA8: Tweak comments and debug message
55dcbac06e ULTIMA8: Save unknown crusader flag
48c6c2beca ULTIMA8: Avoid null ptr for missing ini sections
0745ea382c ULTIMA8: Fix missing map tile in uppper catacombs
a09f262dba ULTIMA8: Shape viewer formatting fix
Commit: 2ac85c66fb18d46425fe37ded46f524084a93879
https://github.com/scummvm/scummvm/commit/2ac85c66fb18d46425fe37ded46f524084a93879
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T09:55:31+09:00
Commit Message:
ULTIMA8: Avoid surrender loops in Crusader
Changed paths:
engines/ultima/ultima8/world/actors/actor.cpp
engines/ultima/ultima8/world/actors/surrender_process.cpp
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 96d23a67f6..4628c8dc77 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -714,7 +714,8 @@ uint16 Actor::setActivityCru(int activity) {
// Does nothing in game..
break;
case 7:
- return Kernel::get_instance()->addProcess(new SurrenderProcess(this));
+ if (_lastActivityNo != 7)
+ return Kernel::get_instance()->addProcess(new SurrenderProcess(this));
break;
case 8:
return Kernel::get_instance()->addProcess(new GuardProcess(this));
diff --git a/engines/ultima/ultima8/world/actors/surrender_process.cpp b/engines/ultima/ultima8/world/actors/surrender_process.cpp
index 28adc3bb44..21a6e5cd64 100644
--- a/engines/ultima/ultima8/world/actors/surrender_process.cpp
+++ b/engines/ultima/ultima8/world/actors/surrender_process.cpp
@@ -48,7 +48,8 @@ SurrenderProcess::SurrenderProcess(Actor *actor) : _playedSound(false) {
assert(actor);
_itemNum = actor->getObjId();
- actor->doAnim(Animation::surrender, actor->getDir());
+ if (!actor->hasActorFlags(Actor::ACT_SURRENDERED))
+ actor->doAnim(Animation::surrender, actor->getDir());
_type = 0x25f; // CONSTANT!
}
@@ -57,7 +58,7 @@ void SurrenderProcess::run() {
Actor *a = getActor(_itemNum);
MainActor *main = getMainActor();
if (!a || a->isDead() || !main) {
- // dead?
+ // dead
terminate();
return;
}
Commit: de12bff66ed2293b4c8a742a114f3fe7c94cdf9e
https://github.com/scummvm/scummvm/commit/de12bff66ed2293b4c8a742a114f3fe7c94cdf9e
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T09:55:31+09:00
Commit Message:
ULTIMA8: Try to fix avatar disappearing from fast area
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 2c052b4f6c..7974c1d22d 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -362,8 +362,12 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
nullptr, nullptr, &blocker)) {
avatar->setLocation(x, y, z);
res = avatar->tryAnim(action, direction);
- if (res == Animation::SUCCESS)
+ if (res == Animation::SUCCESS) {
+ // move to starting point for real (trigger fast area updates etc)
+ avatar->setLocation(origpt.x, origpt.y, origpt.z);
+ avatar->move(x, y, z);
break;
+ }
}
}
@@ -388,7 +392,7 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
if (checkTurn(direction, moving))
return;
- debug(6, "Cru avatar step: picked action %d dir %d (test result %d)", action, direction, res);
+ //debug(6, "Cru avatar step: picked action %d dir %d (test result %d)", action, direction, res);
waitFor(avatar->doAnim(action, direction));
}
Commit: bfbade5c54934c7780ab44dfd75aadad663d61ab
https://github.com/scummvm/scummvm/commit/bfbade5c54934c7780ab44dfd75aadad663d61ab
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T09:55:31+09:00
Commit Message:
ULTIMA8: Add some map debugging code (off by default)
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 7b18d361fc..bc2608d4fd 100644
--- a/engines/ultima/ultima8/world/current_map.cpp
+++ b/engines/ultima/ultima8/world/current_map.cpp
@@ -37,6 +37,10 @@
#include "ultima/ultima8/misc/direction_util.h"
#include "ultima/ultima8/world/get_object.h"
+// Uncomment to check that a single object doesn't appear in multiple chunks
+// during updates
+//#define VALIDATE_CHUNKS 1
+
namespace Ultima {
namespace Ultima8 {
@@ -233,6 +237,20 @@ void CurrentMap::addItem(Item *item) {
int32 cx = ix / _mapChunkSize;
int32 cy = iy / _mapChunkSize;
+#ifdef VALIDATE_CHUNKS
+ for (int32 ccy = 0; ccy < MAP_NUM_CHUNKS; ccy++) {
+ for (int32 ccx = 0; ccx < MAP_NUM_CHUNKS; ccx++) {
+ item_list::const_iterator iter;
+ for (iter = _items[ccx][ccy].begin();
+ iter != _items[ccx][ccy].end(); ++iter) {
+ if (*iter == item) {
+ warning("item %d already exists in map chunk (%d, %d)", item->getObjId(), ccx, ccy);
+ }
+ }
+ }
+ }
+#endif
+
_items[cx][cy].push_front(item);
item->setExtFlag(Item::EXT_INCURMAP);
@@ -259,6 +277,20 @@ void CurrentMap::addItemToEnd(Item *item) {
int32 cx = ix / _mapChunkSize;
int32 cy = iy / _mapChunkSize;
+#ifdef VALIDATE_CHUNKS
+ for (int32 ccy = 0; ccy < MAP_NUM_CHUNKS; ccy++) {
+ for (int32 ccx = 0; ccx < MAP_NUM_CHUNKS; ccx++) {
+ item_list::const_iterator iter;
+ for (iter = _items[ccx][ccy].begin();
+ iter != _items[ccx][ccy].end(); ++iter) {
+ if (*iter == item) {
+ warning("item %d already exists in map chunk (%d, %d)", item->getObjId(), ccx, ccy);
+ }
+ }
+ }
+ }
+#endif
+
_items[cx][cy].push_back(item);
item->setExtFlag(Item::EXT_INCURMAP);
@@ -495,6 +527,14 @@ void CurrentMap::unsetChunkFast(int32 cx, int32 cy) {
while (iter != _items[cx][cy].end()) {
Item *item = *iter;
++iter;
+#if VALIDATE_CHUNKS
+ int32 x, y, z;
+ item->getLocation(x, y, z);
+ if (x / _mapChunkSize != cx || y / _mapChunkSize != cy) {
+ warning("Item leaving fast area in chunk (%d, %d), should be (%d, %d)",
+ cx, cy, x / _mapChunkSize, y / _mapChunkSize);
+ }
+#endif
item->leaveFastArea(); // Can destroy the item
}
}
Commit: 3157e8828e271f1cc303aa18f87faa41a13f9cc2
https://github.com/scummvm/scummvm/commit/3157e8828e271f1cc303aa18f87faa41a13f9cc2
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T09:55:31+09:00
Commit Message:
ULTIMA8: Tweak comments and debug message
Changed paths:
engines/ultima/ultima8/world/actors/main_actor.cpp
engines/ultima/ultima8/world/item.cpp
diff --git a/engines/ultima/ultima8/world/actors/main_actor.cpp b/engines/ultima/ultima8/world/actors/main_actor.cpp
index 47d5050ef2..e865d23bc2 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.cpp
+++ b/engines/ultima/ultima8/world/actors/main_actor.cpp
@@ -323,7 +323,7 @@ void MainActor::teleport(int mapNum, int32 x, int32 y, int32 z) {
// (attempt to) load the new map
if (!world->switchMap(mapNum)) {
- perr << "MainActor::teleport(): switchMap() failed!" << Std::endl;
+ perr << "MainActor::teleport(): switchMap(" << mapNum << ") failed!" << Std::endl;
return;
}
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 18464e8ecf..a51dc35e22 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -186,7 +186,7 @@ void Item::move(int32 X, int32 Y, int32 Z) {
// No lerping when going from a container to somewhere else
no_lerping = true;
}
- // Item needs to be removed if it in the map, and it is moving to a
+ // Item needs to be removed if in the map, and it is moving to a
// different chunk
else if ((_extendedFlags & EXT_INCURMAP) &&
((_x / mapChunkSize != X / mapChunkSize) ||
@@ -204,7 +204,7 @@ void Item::move(int32 X, int32 Y, int32 Z) {
_y = Y;
_z = Z;
- // Add it to the map if needed
+ // Add it back to the map if needed
if (!(_extendedFlags & EXT_INCURMAP)) {
// Disposable fast only items get put at the end
// While normal items get put at start
Commit: 55dcbac06eec27da7445fd1063acbcf981857802
https://github.com/scummvm/scummvm/commit/55dcbac06eec27da7445fd1063acbcf981857802
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T10:03:03+09:00
Commit Message:
ULTIMA8: Save unknown crusader flag
This breaks savegame compatibility for Crusader games, but the engine is
unstable and the game broken so no one should mind.
Changed paths:
engines/ultima/ultima8/ultima8.cpp
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 36f0e05776..1052587a74 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -1295,6 +1295,11 @@ void Ultima8Engine::save(Common::WriteStream *ws) {
uint8 s = (_avatarInStasis ? 1 : 0);
ws->writeByte(s);
+ if (GAME_IS_CRUSADER) {
+ uint8 f = (_unkCrusaderFlag ? 1 : 0);
+ ws->writeByte(f);
+ }
+
int32 absoluteTime = Kernel::get_instance()->getFrameNum() + _timeOffset;
ws->writeUint32LE(static_cast<uint32>(absoluteTime));
ws->writeUint16LE(_avatarMoverProcess->getPid());
@@ -1314,6 +1319,10 @@ void Ultima8Engine::save(Common::WriteStream *ws) {
bool Ultima8Engine::load(Common::ReadStream *rs, uint32 version) {
_avatarInStasis = (rs->readByte() != 0);
+ if (GAME_IS_CRUSADER) {
+ _unkCrusaderFlag = (rs->readByte() != 0);
+ }
+
// no gump should be moused over after load
_mouse->resetMouseOverGump();
Commit: 48c6c2beca602c54fce6603c94539e879e38d344
https://github.com/scummvm/scummvm/commit/48c6c2beca602c54fce6603c94539e879e38d344
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T10:11:14+09:00
Commit Message:
ULTIMA8: Avoid null ptr for missing ini sections
Changed paths:
engines/ultima/ultima8/conf/config_file_manager.cpp
diff --git a/engines/ultima/ultima8/conf/config_file_manager.cpp b/engines/ultima/ultima8/conf/config_file_manager.cpp
index 00bebe7c84..42c94075af 100644
--- a/engines/ultima/ultima8/conf/config_file_manager.cpp
+++ b/engines/ultima/ultima8/conf/config_file_manager.cpp
@@ -135,8 +135,9 @@ KeyMap ConfigFileManager::listKeyValues(const istring &category, const istring &
Std::vector<ConfigFile*>::const_iterator i;
for (i = _configFiles.begin(); i != _configFiles.end(); ++i) {
- if ((*i)->_category == category) {
- Common::INIFile::SectionKeyList keys = (*i)->_iniFile.getKeys(section);
+ const ConfigFile *c = *i;
+ if (c->_category == category && c->_iniFile.hasSection(section)) {
+ Common::INIFile::SectionKeyList keys = c->_iniFile.getKeys(section);
Common::INIFile::SectionKeyList::const_iterator j;
for (j = keys.begin(); j != keys.end(); ++j) {
values[j->key] = j->value;
Commit: 0745ea382c8d097f95a94864542794c94b44f0a3
https://github.com/scummvm/scummvm/commit/0745ea382c8d097f95a94864542794c94b44f0a3
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T11:35:07+09:00
Commit Message:
ULTIMA8: Fix missing map tile in uppper catacombs
Changed paths:
engines/ultima/ultima8/world/map.cpp
diff --git a/engines/ultima/ultima8/world/map.cpp b/engines/ultima/ultima8/world/map.cpp
index 467ca3b040..03a24a0e06 100644
--- a/engines/ultima/ultima8/world/map.cpp
+++ b/engines/ultima/ultima8/world/map.cpp
@@ -98,6 +98,13 @@ void Map::loadFixed(Common::SeekableReadStream *rs) {
addMapFix(301, 1, 13183, 16511, 8);
}
+ // Upper Catacombs after using the skull (ScummVM bug #12097)
+ // Not a perfect fix (still a few pixels off) but reduces chance
+ // of bug happening
+ if (GAME_IS_U8 && _mapNum == 50) {
+ addMapFix(34, 7, 16127, 6143, 0);
+ }
+
// U8 hack for missing ground/wall tiles on map 62. See docs/u8bugs.txt
if (GAME_IS_U8 && _mapNum == 62) {
addMapFix(301, 1, 16255, 6143, 48);
Commit: a09f262dbae482fabae4905b9ce6a546a5f5cf60
https://github.com/scummvm/scummvm/commit/a09f262dbae482fabae4905b9ce6a546a5f5cf60
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T11:36:04+09:00
Commit Message:
ULTIMA8: Shape viewer formatting fix
Changed paths:
engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
index 77fa2d172f..0d8b637e4e 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
@@ -141,7 +141,7 @@ void ShapeViewerGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool /*s
uint8 px_g = shape->getPalette()->_palette[rawpx * 3 + 1];
uint8 px_b = shape->getPalette()->_palette[rawpx * 3 + 2];
- sprintf(buf2, "px: (%d/%d, %d/%d): %d (%d, %d, %d)", relx, frame->_xoff, rely, frame->_yoff, rawpx, px_r, px_g, px_b);
+ sprintf(buf2, "px: (%d, %d)(%d, %d): %d (%d, %d, %d)", relx, rely, frame->_xoff, frame->_yoff, rawpx, px_r, px_g, px_b);
rendtext = font->renderText(buf2, remaining);
rendtext->draw(surf, 20, 25);
delete rendtext;
More information about the Scummvm-git-logs
mailing list