[Scummvm-git-logs] scummvm master -> 59dcd4090fae4bb0aa97472b6e5826eee9ba43dc
a-yyg
76591232+a-yyg at users.noreply.github.com
Fri Aug 6 00:30:39 UTC 2021
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
8def0618c6 SAGA2: Fix ActiveItem hashmap
59dcd4090f SAGA2: Move _nextMT to MotionTaskList
Commit: 8def0618c69a28e707a9cbb9777b36bb0f78ea8f
https://github.com/scummvm/scummvm/commit/8def0618c69a28e707a9cbb9777b36bb0f78ea8f
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-08-06T09:27:13+09:00
Commit Message:
SAGA2: Fix ActiveItem hashmap
Changed paths:
engines/saga2/tile.cpp
engines/saga2/tile.h
diff --git a/engines/saga2/tile.cpp b/engines/saga2/tile.cpp
index 61553b0520..de0af6a932 100644
--- a/engines/saga2/tile.cpp
+++ b/engines/saga2/tile.cpp
@@ -2310,7 +2310,8 @@ void WorldMapData::buildInstanceHash(void) {
+ ai->_data.instance.v + (ai->_data.instance.groupID << 2))
% ARRAYSIZE(instHash);
- itemHash.setVal(hashVal, ai);
+ ai->_nextHash = instHash[hashVal];
+ instHash[hashVal] = ai;
}
}
}
@@ -2325,8 +2326,13 @@ ActiveItem *WorldMapData::findHashedInstance(
int16 hashVal = (((tp.u + tp.z) << 4) + tp.v + (group << 2))
% ARRAYSIZE(instHash);
- if (itemHash.contains(hashVal))
- return itemHash.getVal(hashVal);
+ for (ActiveItem *ai = instHash[hashVal]; ai; ai = ai->_nextHash) {
+ if (ai->_data.instance.u == tp.u &&
+ ai->_data.instance.v == tp.v &&
+ ai->_data.instance.h == tp.z &&
+ ai->_data.instance.groupID == group)
+ return ai;
+ }
return nullptr;
}
diff --git a/engines/saga2/tile.h b/engines/saga2/tile.h
index 62160d13dd..7dbaec3b6a 100644
--- a/engines/saga2/tile.h
+++ b/engines/saga2/tile.h
@@ -893,7 +893,6 @@ struct WorldMapData {
RipTableIDPtr ripTableIDList; // MetaTile object ripping
ActiveItem *instHash[513]; // ActiveItem hash table
- Common::HashMap<int16, ActiveItem*> itemHash;
int16 metaCount, // Number of MetaTiles
activeCount; // Number of ActiveItems
Commit: 59dcd4090fae4bb0aa97472b6e5826eee9ba43dc
https://github.com/scummvm/scummvm/commit/59dcd4090fae4bb0aa97472b6e5826eee9ba43dc
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-08-06T09:27:13+09:00
Commit Message:
SAGA2: Move _nextMT to MotionTaskList
Changed paths:
engines/saga2/motion.cpp
engines/saga2/motion.h
engines/saga2/saga2.h
diff --git a/engines/saga2/motion.cpp b/engines/saga2/motion.cpp
index 05bbf5d249..948086f2c6 100644
--- a/engines/saga2/motion.cpp
+++ b/engines/saga2/motion.cpp
@@ -348,10 +348,12 @@ uint8 computeTurnFrames(Direction fromDir, Direction toDir) {
// Initialize the MotionTaskList
MotionTaskList::MotionTaskList(void) {
+ _nextMT = _list.end();
}
MotionTaskList::MotionTaskList(Common::SeekableReadStream *stream) {
read(stream);
+ _nextMT = _list.end();
}
@@ -1067,8 +1069,8 @@ void MotionTask::write(Common::MemoryWriteStreamDynamic *out) {
// When a motion task is finished, call this function to delete it.
void MotionTask::remove(int16 returnVal) {
- if (g_vm->_nextMT != g_vm->_mTaskList->_list.end() && *(g_vm->_nextMT) == this)
- ++g_vm->_nextMT;
+ if (g_vm->_mTaskList->_nextMT != g_vm->_mTaskList->_list.end() && *(g_vm->_mTaskList->_nextMT) == this)
+ ++g_vm->_mTaskList->_nextMT;
object->_data.objectFlags &= ~objectMoving;
if (objObscured(object))
@@ -4034,15 +4036,15 @@ void MotionTask::updatePositions(void) {
int16 targetDist;
StandingTileInfo sti;
- for (Common::List<MotionTask *>::iterator it = g_vm->_mTaskList->_list.begin(); it != g_vm->_mTaskList->_list.end(); it = g_vm->_nextMT) {
+ for (Common::List<MotionTask *>::iterator it = g_vm->_mTaskList->_list.begin(); it != g_vm->_mTaskList->_list.end(); it = g_vm->_mTaskList->_nextMT) {
MotionTask *mt = *it;
GameObject *obj = mt->object;
ProtoObj *proto = obj->proto();
Actor *a = (Actor *)obj;
bool moveTaskDone = false;
- g_vm->_nextMT = it;
- g_vm->_nextMT++;
+ g_vm->_mTaskList->_nextMT = it;
+ g_vm->_mTaskList->_nextMT++;
if (!isWorld(obj->IDParent())) {
mt->remove();
@@ -4119,7 +4121,7 @@ void MotionTask::updatePositions(void) {
mt->finalTarget,
(mt->flags & requestRun) != 0);
}
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
} else {
a->setAction(newAction, 0);
@@ -4138,7 +4140,7 @@ void MotionTask::updatePositions(void) {
mt->finalTarget,
(mt->flags & requestRun) != 0);
}
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
} else if (mt->freeFall(obj->_data.location, sti) == false)
moveTaskDone = true;
} else {
@@ -4159,7 +4161,7 @@ void MotionTask::updatePositions(void) {
mt->finalTarget,
(mt->flags & requestRun) != 0);
}
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
}
break;
@@ -4200,7 +4202,7 @@ void MotionTask::updatePositions(void) {
if (targetDist > kTileUVSize) {
mt->motionType = mt->prevMotionType;
mt->flags |= reset;
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
} else
moveTaskDone = true;
}
@@ -4220,7 +4222,7 @@ void MotionTask::updatePositions(void) {
// This will be uninterrutable for 2 frames
a->setActionPoints(2);
mt->o.directObject->use(a->thisID());
- //g_vm->_nextMT=mt;
+ //g_vm->_mTaskList->_nextMT=mt;
moveTaskDone = true;
break;
@@ -4248,7 +4250,7 @@ void MotionTask::updatePositions(void) {
if (mt->motionType == motionTypeUseObjectOnObject)
moveTaskDone = true;
else
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
}
} else {
@@ -4260,7 +4262,7 @@ void MotionTask::updatePositions(void) {
if (mt->motionType == motionTypeUseObjectOnObject)
moveTaskDone = true;
else
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
break;
@@ -4301,7 +4303,7 @@ void MotionTask::updatePositions(void) {
if (mt->motionType == motionTypeUseObjectOnTAI)
moveTaskDone = true;
else
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
break;
@@ -4321,7 +4323,7 @@ void MotionTask::updatePositions(void) {
if (mt->motionType == motionTypeUseObjectOnLocation)
moveTaskDone = true;
else
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
break;
@@ -4381,7 +4383,7 @@ void MotionTask::updatePositions(void) {
if (mt->motionType == motionTypeDropObject)
moveTaskDone = true;
else
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
} else {
// The actor will now be uniterruptable
@@ -4392,7 +4394,7 @@ void MotionTask::updatePositions(void) {
if (mt->motionType == motionTypeDropObject)
moveTaskDone = true;
else
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
CMassWeightIndicator::bRedraw = true; // tell the mass/weight indicators to refresh
@@ -4416,7 +4418,7 @@ void MotionTask::updatePositions(void) {
if (mt->motionType == motionTypeDropObjectOnObject)
moveTaskDone = true;
else
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
} else {
// The actor will now be uniterruptable
@@ -4428,7 +4430,7 @@ void MotionTask::updatePositions(void) {
if (mt->motionType == motionTypeDropObjectOnObject)
moveTaskDone = true;
else
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
CMassWeightIndicator::bRedraw = true; // tell the mass/weight indicators to refresh
@@ -4454,7 +4456,7 @@ void MotionTask::updatePositions(void) {
if (mt->motionType == motionTypeDropObjectOnTAI)
moveTaskDone = true;
else
- g_vm->_nextMT = it;
+ g_vm->_mTaskList->_nextMT = it;
}
break;
diff --git a/engines/saga2/motion.h b/engines/saga2/motion.h
index 56196a8b00..0b8aa87db0 100644
--- a/engines/saga2/motion.h
+++ b/engines/saga2/motion.h
@@ -538,6 +538,7 @@ class MotionTaskList {
friend class MotionTask;
Common::List<MotionTask *> _list;
+ Common::List<MotionTask *>::iterator _nextMT;
public:
// Default constructor
diff --git a/engines/saga2/saga2.h b/engines/saga2/saga2.h
index fce526cb9f..15d4dbc92d 100644
--- a/engines/saga2/saga2.h
+++ b/engines/saga2/saga2.h
@@ -146,7 +146,6 @@ public:
Common::List<PathRequest *> _pathQueue;
Common::List<SensorList *> _sensorListList;
Common::List<Sensor *> _sensorList;
- Common::List<MotionTask *>::iterator _nextMT;
Common::List<CMassWeightIndicator *> _indList;
Common::List<int> _platformLRU;
BandList *_bandList;
More information about the Scummvm-git-logs
mailing list