[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