void Task_WhiteOut(u8 taskId) { s16 *taskData = gTasks[taskId].data; switch (taskData[TD_STATE]) { case 0: //Check if Pokemon have fainted due to poison while (taskData[TD_PARTY_MEMBER] < 6) { if (CheckMonFaintedFromPoison(taskData[TD_PARTY_MEMBER])) { MonFaintFromPoisonOnField(taskData[TD_PARTY_MEMBER]); ShowFieldMessage(fieldPoisonText_PokemonFainted); taskData[TD_STATE]++; return; } taskData[TD_PARTY_MEMBER]++; } taskData[TD_STATE] = 2; break; case 1: //Wait for message box to disappear if (IsFieldMessageBoxHidden()) taskData[TD_STATE]--; //Check next party member break; case 2: //Done checking Pokemon if (AllMonsFainted()) gScriptResult = 1; else gScriptResult = 0; EnableBothScriptContexts(); DestroyTask(taskId); break; } }
void UmcFramework::Destroy() { DestroyTask(); m_pScenarioTable = NULL; m_pSessionTable = NULL; }
void ExecuteTaskThread(void *arg) { ScheduleTask *task = (ScheduleTask*)arg; lua_rawgeti(task->L, LUA_REGISTRYINDEX, task->callbackRef); luaM_pcall(task->L, 0, 1); void* res = lua_touserdata(task->L, -1); if (res == STOP || task->interval == 0) { DestroyTask(task); return; } { mir_cslock lock(threadLock); time_t timestamp = time(NULL); if(task->timestamp + task->interval >= timestamp) task->timestamp += task->interval; else task->timestamp = timestamp + task->interval; tasks.insert(task); } SetEvent(hScheduleEvent); }
// Return from menu? static void sub_8122450(u8 taskId) { if (!gPaletteFade.active) { SetMainCallback2(gMain.savedCallback); DestroyTask(taskId); } }
static void Mailbox_FadeAndReadMail(u8 taskId) { if(!gPaletteFade.active) { HandleReadMail(&gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, 1); DestroyTask(taskId); } }
static void Task_ItemStorage_Deposit(u8 taskId) { if (!gPaletteFade.active) { sub_80A6A30(); DestroyTask(taskId); } }
static void sub_810B4CC(u8 taskId) { void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); func(); gPlayerAvatar.preventStep = FALSE; DestroyTask(taskId); }
static void Mailbox_DoGiveMailPokeMenu(u8 taskId) // Mailbox_DoGiveMailPokeMenu { if(!gPaletteFade.active) { SetMainCallback2(sub_808B020); gUnknown_02038561 = 3; DestroyTask(taskId); } }
static void sub_8089F44(u8 taskID) { if (!gPaletteFade.active) { u8 spriteID = gSprites[gTasks[taskID].data[3] >> 8].data[0]; DestroyTask(taskID); ewram1B000_alt.unk262 = 1; ShowPokemonSummaryScreen(gPlayerParty, spriteID, gPlayerPartyCount - 1, sub_8089F14, PSS_MODE_NORMAL); }
static void sub_8089E4C(u8 taskID) { if (!gPaletteFade.active) { gLastFieldPokeMenuOpened = 0; SetMainCallback2(c2_exit_to_overworld_1_sub_8080DEC); DestroyTask(taskID); } }
void KillModuleScheduleTasks() { mir_cslock lock(threadLock); while (ScheduleTask *task = tasks[0]) { tasks.remove(task); DestroyTask(task); } }
// Wait for fade, then show summary screen static void sub_81225D4(u8 taskId) { if (!gPaletteFade.active) { u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data[0]; DestroyTask(taskId); ewram1B000.unk262 = 1; ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, PSS_MODE_NORMAL); }
void ScanlineEffect_Stop(void) { gScanlineEffect.state = 0; DmaStop(0); if (gScanlineEffect.waveTaskId != 0xFF) { DestroyTask(gScanlineEffect.waveTaskId); gScanlineEffect.waveTaskId = 0xFF; } }
void sub_80A2178(void) { u8 taskId; taskId = sub_80A21E0(); if (taskId != 0xFF) { UnfreezeObjects(taskId); DestroyTask(taskId); } }
void Task_ShowResetRtcPrompt(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) { case 0: Menu_EraseScreen(); Menu_DrawStdWindowFrame(0, 0, 20, 10); Menu_PrintText(gSystemText_PresentTime, 1, 1); ResetRtcScreen_PrintTime( 1, 3, gLocalTime.days, gLocalTime.hours, gLocalTime.minutes, gLocalTime.seconds); Menu_PrintText(gSystemText_PreviousTime, 1, 5); ResetRtcScreen_PrintTime( 1, 7, gSaveBlock2.lastBerryTreeUpdate.days, gSaveBlock2.lastBerryTreeUpdate.hours, gSaveBlock2.lastBerryTreeUpdate.minutes, gSaveBlock2.lastBerryTreeUpdate.seconds); ResetRtcScreen_ShowMessage(gSystemText_ResetRTCPrompt); data[0]++; case 1: if (gMain.newKeys & B_BUTTON) { DestroyTask(taskId); DoSoftReset(); } else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); DestroyTask(taskId); } break; } }
static void EndBattleIntroTask(u8 taskId) { DestroyTask(taskId); gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; REG_WININ = 0x3F3F; REG_WINOUT = 0x3F3F; }
void debug_sub_806F908(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) { case 0: data[1] = CreateTask(Task_ResetRtc_0, 80); data[0]++; break; case 1: if (gTasks[data[1]].data[0] != 0) { if (gTasks[data[1]].data[1] == 1) RtcCalcLocalTimeOffset(gLocalTime.days, gLocalTime.hours, gLocalTime.minutes, gLocalTime.seconds); DestroyTask(data[1]); Menu_EraseScreen(); ScriptContext2_Disable(); DestroyTask(taskId); } break; } }
void debug_sub_806F9E4(u8 taskId) { s16 *data = gTasks[taskId].data; u8 *str = gStringVar4; switch (data[0]) { case 0: data[0]++; break; case 1: Menu_DrawStdWindowFrame(0, 9, 29, 19); ConvertIntToHexStringN(str + 80, RtcGetErrorStatus(), 2, 4); Menu_PrintText(str + 80, 2, 10); Menu_PrintText(sDebugText_Days, 12, 12); Menu_PrintText(sDebugText_Time, 20, 12); Menu_PrintText(sDebugText_RTCTime, 1, 14); Menu_PrintText(sDebugText_GameTime, 1, 16); data[0]++; break; case 2: RtcCalcLocalTime(); FormatHexRtcTime(str); debug_sub_8009894(str + 20); FormatDecimalTime(str + 40, gLocalTime.hours, gLocalTime.minutes, gLocalTime.seconds); ConvertIntToDecimalStringN(str + 60, gLocalTime.days, 1, 4); if (gSaveBlock2.playTimeVBlanks == 0) { Menu_PrintText(str, 20, 14); Menu_PrintText(str + 20, 12, 14); Menu_PrintText(str + 40, 20, 16); Menu_PrintText(str + 60, 12, 16); } if (data[1] > 19) // Did you mean < 19? { data[1]++; } else { if (gMain.newKeys & A_BUTTON) { Menu_EraseScreen(); DestroyTask(taskId); ScriptContext2_Disable(); } } break; } }
static void PlayerPC_TurnOff(u8 taskId) { if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC and not player PC, so do gender specific handling. { Menu_EraseWindowRect(0, 0, 0x1D, 0x13); if (gSaveBlock2.playerGender == MALE) ScriptContext1_SetupScript(gBrendanHouse_TurnPCOff); else ScriptContext1_SetupScript(gMayHouse_TurnPCOff); } else { Menu_EraseWindowRect(0, 0, 10, 9); EnableBothScriptContexts(); } DestroyTask(taskId); }
void sub_8139A2C(u8 taskId) { if (gTasks[taskId].data[1] < 31) { gTasks[taskId].data[1]++; } else { u8 savedActiveBank = gActiveBattler; gActiveBattler = gTasks[taskId].data[0]; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; sub_81398BC(gActiveBattler); gBattleBankFunc[gActiveBattler] = sub_8137538; gActiveBattler = savedActiveBank; DestroyTask(taskId); } }
static void Task_BattleStart(u8 taskId) { s16 *data = gTasks[taskId].data; switch (tState) { case 0: if (!FldeffPoison_IsActive()) // is poison not active? { BattleTransition_StartOnField(tTransition); tState++; // go to case 1. } break; case 1: if (IsBattleTransitionDone() == TRUE) { SetMainCallback2(sub_800E7C4); RestartWildEncounterImmunitySteps(); ClearPoisonStepCounter(); DestroyTask(taskId); } break; } }
static void task_b_81441B8(u8 taskIdB) { u16 i; switch (gTasks[taskIdB].data[TDB_0]) { case 0: case 6: case 7: case 8: case 9: default: if (!gPaletteFade.active) { gTasks[taskIdB].data[TDB_0] = 1; gTasks[taskIdB].data[TDB_3] = 0x58; gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0; gUnknown_02039320 = 0; } return; case 1: if (gTasks[taskIdB].data[TDB_3] != 0) { gTasks[taskIdB].data[TDB_3] -= 1; return; } gTasks[taskIdB].data[TDB_0] += 1; return; case 2: REG_DISPCNT &= ~DISPCNT_BG0_ON; if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == task_a_8143B68) { if (gTasks[taskIdB].data[TDB_CURRENT_PAGE] < PAGE_COUNT) { for (i = 0; i < 5; i++) sub_8072BD8(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 0, 9 + i * 2, 240); gTasks[taskIdB].data[TDB_CURRENT_PAGE] += 1; gTasks[taskIdB].data[TDB_0] += 1; gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 1; if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1) BeginNormalPaletteFade(0x300, 0, 16, 0, COLOR_LIGHT_GREEN); else BeginNormalPaletteFade(0x300, 0, 16, 0, COLOR_DARK_GREEN); return; } gTasks[taskIdB].data[TDB_0] = 10; return; } gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0; return; case 3: REG_DISPCNT |= DISPCNT_BG0_ON; if (!gPaletteFade.active) { gTasks[taskIdB].data[TDB_3] = UNK_DEFINE_82; gTasks[taskIdB].data[TDB_0] += 1; } return; case 4: if (gTasks[taskIdB].data[TDB_3] != 0) { gTasks[taskIdB].data[TDB_3] -= 1; return; } if (sub_8144454((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID])) { gTasks[taskIdB].data[TDB_0] += 1; return; } gTasks[taskIdB].data[TDB_0] += 1; if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1) BeginNormalPaletteFade(0x300, 0, 0, 16, COLOR_LIGHT_GREEN); else BeginNormalPaletteFade(0x300, 0, 0, 16, COLOR_DARK_GREEN); return; case 5: if (!gPaletteFade.active) { Menu_EraseWindowRect(0, 9, 29, 19); gTasks[taskIdB].data[TDB_0] = 2; } return; case 10: gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_4] = 1; DestroyTask(taskIdB); return; } }
static void Task_WaitForPaletteFade(u8 taskId) { if (!gPaletteFade.active) DestroyTask(taskId); }
void Task_ResetRtcScreen(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 1, 16, 0, FADE_COLOR_WHITE); data[0] = 1; break; case 1: if (!gPaletteFade.active) { if (gSaveFileStatus == 0 || gSaveFileStatus == 2) { ResetRtcScreen_ShowMessage(gSystemText_NoSaveFileNoTime); data[0] = 5; } else { RtcCalcLocalTime(); data[1] = CreateTask(Task_ShowResetRtcPrompt, 80); data[0] = 2; } } break; case 2: if (gTasks[data[1]].isActive != TRUE) { Menu_EraseScreen(); ResetRtcScreen_ShowMessage(gSystemText_PleaseResetTime); gLocalTime = gSaveBlock2.lastBerryTreeUpdate; data[1] = CreateTask(Task_ResetRtc_0, 80); data[0] = 3; } break; case 3: if (gTasks[data[1]].data[0]) { if (!gTasks[data[1]].data[1]) { DestroyTask(data[1]); data[0] = 2; } else { DestroyTask(data[1]); RtcReset(); RtcCalcLocalTimeOffset( gLocalTime.days, gLocalTime.hours, gLocalTime.minutes, gLocalTime.seconds); gSaveBlock2.lastBerryTreeUpdate = gLocalTime; VarSet(VAR_DAYS, gLocalTime.days); DisableResetRTC(); ResetRtcScreen_ShowMessage(gSystemText_ClockResetDataSave); data[0] = 4; } } break; case 4: if (Save_WriteData(0) == SAVE_STATUS_OK) { ResetRtcScreen_ShowMessage(gSystemText_SaveCompleted); PlaySE(SE_PINPON); } else { ResetRtcScreen_ShowMessage(gSystemText_SaveFailed); PlaySE(SE_BOO); } data[0] = 5; // fall through case 5: if (gMain.newKeys & A_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 1, 0, 16, FADE_COLOR_WHITE); data[0] = 6; } else { break; } // fall through case 6: if (!gPaletteFade.active) { DestroyTask(taskId); DoSoftReset(); } } }
static void TaskFunc_UpdateWavePerFrame(u8 taskId) { int value = 0; int i; int offset; if (sShouldStopWaveTask) { DestroyTask(taskId); gScanlineEffect.waveTaskId = 0xFF; } else { if (gTasks[taskId].tApplyBattleBgOffsets) { switch (gTasks[taskId].tRegOffset) { case SCANLINE_EFFECT_REG_BG0HOFS: value = gBattle_BG0_X; break; case SCANLINE_EFFECT_REG_BG0VOFS: value = gBattle_BG0_Y; break; case SCANLINE_EFFECT_REG_BG1HOFS: value = gBattle_BG1_X; break; case SCANLINE_EFFECT_REG_BG1VOFS: value = gBattle_BG1_Y; break; case SCANLINE_EFFECT_REG_BG2HOFS: value = gBattle_BG2_X; break; case SCANLINE_EFFECT_REG_BG2VOFS: value = gBattle_BG2_Y; break; case SCANLINE_EFFECT_REG_BG3HOFS: value = gBattle_BG3_X; break; case SCANLINE_EFFECT_REG_BG3VOFS: value = gBattle_BG3_Y; break; } } if (gTasks[taskId].tFramesUntilMove != 0) { gTasks[taskId].tFramesUntilMove--; offset = gTasks[taskId].tSrcBufferOffset + 320; for (i = gTasks[taskId].tStartLine; i < gTasks[taskId].tEndLine; i++) { gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gScanlineEffectRegBuffers[0][offset] + value; offset++; } } else { gTasks[taskId].tFramesUntilMove = gTasks[taskId].tDelayInterval; offset = gTasks[taskId].tSrcBufferOffset + 320; for (i = gTasks[taskId].tStartLine; i < gTasks[taskId].tEndLine; i++) { gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gScanlineEffectRegBuffers[0][offset] + value; offset++; } // increment src buffer offset gTasks[taskId].tSrcBufferOffset++; if (gTasks[taskId].tSrcBufferOffset == gTasks[taskId].tWaveLength) gTasks[taskId].tSrcBufferOffset = 0; } } }