[Scummvm-git-logs] scummvm master -> da759ebfe470f510e264c9076dfd378c8699c93d

a-yyg 76591232+a-yyg at users.noreply.github.com
Sun Aug 8 07:32:18 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:
4cd2a2d433 SAGA2: Fix TaskStack construction for full stack
da759ebfe4 SAGA2: Add debug output for TaskStack


Commit: 4cd2a2d43395f7e04771bb5406c8223138779b22
    https://github.com/scummvm/scummvm/commit/4cd2a2d43395f7e04771bb5406c8223138779b22
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-08-08T16:31:23+09:00

Commit Message:
SAGA2: Fix TaskStack construction for full stack

Changed paths:
    engines/saga2/actor.cpp
    engines/saga2/assign.cpp
    engines/saga2/task.cpp
    engines/saga2/task.h


diff --git a/engines/saga2/actor.cpp b/engines/saga2/actor.cpp
index ea8a3491ce..2ac8f473b0 100644
--- a/engines/saga2/actor.cpp
+++ b/engines/saga2/actor.cpp
@@ -2627,7 +2627,7 @@ void Actor::updateState(void) {
 				disband();
 
 			if (curTask == NULL) {
-				if ((curTask = new TaskStack(this)) != NULL) {
+				if ((curTask = newTaskStack(this)) != NULL) {
 					Task    *task = new GoAwayFromActorTask(
 					                    curTask,
 					                    ActorPropertyTarget(
@@ -2649,7 +2649,7 @@ void Actor::updateState(void) {
 		case actorGoalAttackEnemy:
 
 			if (curTask == NULL) {
-				if ((curTask = new TaskStack(this)) != NULL) {
+				if ((curTask = newTaskStack(this)) != NULL) {
 					uint8   disp =  leader != NULL
 					                ?   leader->disposition
 					                :   disposition;
@@ -2687,7 +2687,7 @@ void Actor::updateState(void) {
 			assert(followers == NULL);
 
 			if (curTask == NULL) {
-				if ((curTask = new TaskStack(this)) != NULL) {
+				if ((curTask = newTaskStack(this)) != NULL) {
 					Task    *task = new BandAndAvoidEnemiesTask(curTask);
 
 					if (task != NULL)
@@ -3094,7 +3094,7 @@ TaskStack *Actor::createFollowerTask(Actor *bandMember) {
 
 	TaskStack   *ts = NULL;
 
-	if ((ts = new TaskStack(bandMember)) != NULL) {
+	if ((ts = newTaskStack(bandMember)) != NULL) {
 		Task    *task = new BandTask(ts);
 
 		if (task != NULL)
diff --git a/engines/saga2/assign.cpp b/engines/saga2/assign.cpp
index 4152cea88e..6c608ba5dc 100644
--- a/engines/saga2/assign.cpp
+++ b/engines/saga2/assign.cpp
@@ -111,7 +111,7 @@ TaskStack *ActorAssignment::createTask(void) {
 	Actor       *a = getActor();
 	TaskStack   *ts = NULL;
 
-	if ((ts = new TaskStack(a)) != NULL) {
+	if ((ts = newTaskStack(a)) != NULL) {
 		Task    *task = getTask(ts);
 
 		if (task != NULL)
diff --git a/engines/saga2/task.cpp b/engines/saga2/task.cpp
index 7ff03df673..8bec814270 100644
--- a/engines/saga2/task.cpp
+++ b/engines/saga2/task.cpp
@@ -120,6 +120,8 @@ public:
 
 	//  Place a TaskStack from the inactive list into the active
 	//  list.
+	TaskStack *newTaskStack(Actor *a);
+
 	void newTaskStack(TaskStack *p);
 
 	void newTaskStack(TaskStack *p, TaskID id);
@@ -238,7 +240,28 @@ void TaskStackList::write(Common::MemoryWriteStreamDynamic *out) {
 //----------------------------------------------------------------------
 //	Place a TaskStack into the active list and return its address
 
+TaskStack *TaskStackList::newTaskStack(Actor *a) {
+	for (int i = 0; i < numTaskStacks; i++)
+		if (!_list[i]) {
+			_list[i] = new TaskStack(a);
+
+			return _list[i];
+		}
+
+	warning("Too many task stacks in the list, > %d", numTaskStacks);
+
+	return nullptr;
+}
+
 void TaskStackList::newTaskStack(TaskStack *p) {
+	for (int i = 0; i < numTaskStacks; i++) {
+		if (_list[i] == p) {
+			warning("TaskStack %d (%p) already added", i, (void *)p);
+
+			return;
+		}
+	}
+
 	for (int i = 0; i < numTaskStacks; i++)
 		if (!_list[i]) {
 			_list[i] = p;
@@ -309,6 +332,10 @@ void resumeActorTasks(void) {
 //	Call the stackList member function newTaskStack() to get a pointer
 //	to a new TaskStack
 
+TaskStack *newTaskStack(Actor *a) {
+	return g_vm->_stackList->newTaskStack(a);
+}
+
 void newTaskStack(TaskStack *p) {
 	return g_vm->_stackList->newTaskStack(p);
 }
diff --git a/engines/saga2/task.h b/engines/saga2/task.h
index 1557918dad..a47499c398 100644
--- a/engines/saga2/task.h
+++ b/engines/saga2/task.h
@@ -72,6 +72,7 @@ void pauseActorTasks(void);
 void resumeActorTasks(void);
 
 //  Allocate a new task stack
+TaskStack *newTaskStack(Actor *a);
 void newTaskStack(TaskStack *p);
 
 //  Dispose of a previously allocated task stack


Commit: da759ebfe470f510e264c9076dfd378c8699c93d
    https://github.com/scummvm/scummvm/commit/da759ebfe470f510e264c9076dfd378c8699c93d
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-08-08T16:31:23+09:00

Commit Message:
SAGA2: Add debug output for TaskStack

Changed paths:
    engines/saga2/task.cpp


diff --git a/engines/saga2/task.cpp b/engines/saga2/task.cpp
index 8bec814270..e7f5659900 100644
--- a/engines/saga2/task.cpp
+++ b/engines/saga2/task.cpp
@@ -262,12 +262,14 @@ void TaskStackList::newTaskStack(TaskStack *p) {
 		}
 	}
 
-	for (int i = 0; i < numTaskStacks; i++)
+	debugC(1, kDebugTasks, "List: %p Adding task stack %p", (void *)this, (void *)p);
+	for (int i = 0; i < numTaskStacks; i++) {
 		if (!_list[i]) {
 			_list[i] = p;
 
 			return;
 		}
+	}
 }
 
 void TaskStackList::newTaskStack(TaskStack *p, TaskID id) {
@@ -281,10 +283,12 @@ void TaskStackList::newTaskStack(TaskStack *p, TaskID id) {
 //	back into the inactive list
 
 void TaskStackList::deleteTaskStack(TaskStack *p) {
-	for (int i = 0; i < numTaskStacks; i++)
+	debugC(1, kDebugTasks, "List: %p Deleting task stack %p", (void *)this, (void *)p);
+	for (int i = 0; i < numTaskStacks; i++) {
 		if (_list[i] == p) {
 			_list[i] = nullptr;
 		}
+	}
 }
 
 //----------------------------------------------------------------------




More information about the Scummvm-git-logs mailing list