summaryrefslogtreecommitdiff
path: root/src/task.c
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-04-27 15:57:31 -0400
committerGitHub <noreply@github.com>2021-04-27 15:57:31 -0400
commit983ab81dfd3515de0ae595136537d78d684380c9 (patch)
treea8f3ce17aacee5aa865e586b2c4ec9f17b34d0a6 /src/task.c
parentd21090cf044c3693f020f9580fa1dbefe3d4556f (diff)
parent5a2da388cc32529f5be46f7b454e9c9792b75679 (diff)
Merge pull request #425 from PikalaxALT/sync_task
Sync task.c from Emerald
Diffstat (limited to 'src/task.c')
-rw-r--r--src/task.c24
1 files changed, 6 insertions, 18 deletions
diff --git a/src/task.c b/src/task.c
index 83800a440..672d200fe 100644
--- a/src/task.c
+++ b/src/task.c
@@ -139,32 +139,20 @@ void TaskDummy(u8 taskId)
{
}
-#define TASK_DATA_OP(taskId, offset, op) \
-{ \
- u32 tasksAddr = (u32)gTasks; \
- u32 addr = taskId * sizeof(struct Task) + offset; \
- u32 dataAddr = tasksAddr + offsetof(struct Task, data); \
- addr += dataAddr; \
- op; \
-}
-
void SetTaskFuncWithFollowupFunc(u8 taskId, TaskFunc func, TaskFunc followupFunc)
{
- TASK_DATA_OP(taskId, 28, *((u16 *)addr) = (u32)followupFunc)
- TASK_DATA_OP(taskId, 30, *((u16 *)addr) = (u32)followupFunc >> 16)
+ u8 followupFuncIndex = NUM_TASK_DATA - 2; // Should be const.
+
+ gTasks[taskId].data[followupFuncIndex] = (s16)((u32)followupFunc);
+ gTasks[taskId].data[followupFuncIndex + 1] = (s16)((u32)followupFunc >> 16); // Store followupFunc as two half-words in the data array.
gTasks[taskId].func = func;
}
void SwitchTaskToFollowupFunc(u8 taskId)
{
- s32 func;
-
- gTasks[taskId].func = NULL;
-
- TASK_DATA_OP(taskId, 28, func = *((u16 *)addr))
- TASK_DATA_OP(taskId, 30, func |= *((s16 *)addr) << 16)
+ u8 followupFuncIndex = NUM_TASK_DATA - 2; // Should be const.
- gTasks[taskId].func = (TaskFunc)func;
+ gTasks[taskId].func = (TaskFunc)((u16)(gTasks[taskId].data[followupFuncIndex]) | (gTasks[taskId].data[followupFuncIndex + 1] << 16));
}
bool8 FuncIsActiveTask(TaskFunc func)