[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