diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_message.c | 34 | ||||
-rw-r--r-- | src/item.c | 6 | ||||
-rwxr-xr-x | src/save_failed_screen.c | 8 | ||||
-rw-r--r-- | src/starter_choose.c | 8 | ||||
-rw-r--r-- | src/text_window.c | 4 | ||||
-rw-r--r-- | src/unk_transition.c | 633 |
6 files changed, 675 insertions, 18 deletions
diff --git a/src/battle_message.c b/src/battle_message.c index e37a4c30c..3fa3d0563 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1324,6 +1324,8 @@ const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}’s battle result was const u8 gText_LinkTrainerWantsToBattlePause[] = _("{B_20}\nwants to battle!{PAUSE 49}"); const u8 gText_TwoLinkTrainersWantToBattlePause[] = _("{B_20} and {B_21}\nwant to battle!{PAUSE 49}"); +// This is four lists of moves which use a different attack string in Japanese +// to the default. See the documentation for sub_814F950 for more detail. static const u16 sUnknownMoveTable[] = { MOVE_SWORDS_DANCE, MOVE_STRENGTH, MOVE_GROWTH, @@ -1338,16 +1340,16 @@ static const u16 sUnknownMoveTable[] = MOVE_TRICK, MOVE_ASSIST, MOVE_INGRAIN, MOVE_KNOCK_OFF, MOVE_CAMOUFLAGE, MOVE_ASTONISH, MOVE_ODOR_SLEUTH, MOVE_GRASS_WHISTLE, MOVE_SHEER_COLD, MOVE_MUDDY_WATER, - MOVE_IRON_DEFENSE, MOVE_BOUNCE, MOVE_NONE, + MOVE_IRON_DEFENSE, MOVE_BOUNCE, 0, MOVE_TELEPORT, MOVE_RECOVER, MOVE_BIDE, MOVE_AMNESIA, - MOVE_FLAIL, MOVE_TAUNT, MOVE_BULK_UP, MOVE_NONE, + MOVE_FLAIL, MOVE_TAUNT, MOVE_BULK_UP, 0, MOVE_MEDITATE, MOVE_AGILITY, MOVE_MIMIC, MOVE_DOUBLE_TEAM, MOVE_BARRAGE, MOVE_TRANSFORM, MOVE_STRUGGLE, MOVE_SCARY_FACE, MOVE_CHARGE, MOVE_WISH, MOVE_BRICK_BREAK, MOVE_YAWN, MOVE_FEATHER_DANCE, MOVE_TEETER_DANCE, MOVE_MUD_SPORT, - MOVE_FAKE_TEARS, MOVE_WATER_SPORT, MOVE_CALM_MIND, MOVE_NONE, + MOVE_FAKE_TEARS, MOVE_WATER_SPORT, MOVE_CALM_MIND, 0, MOVE_POUND, MOVE_SCRATCH, MOVE_VICE_GRIP, MOVE_WING_ATTACK, MOVE_FLY, MOVE_BIND, MOVE_SLAM, @@ -1361,7 +1363,7 @@ static const u16 sUnknownMoveTable[] = MOVE_FORESIGHT, MOVE_CHARM, MOVE_ATTRACT, MOVE_ROCK_SMASH, MOVE_UPROAR, MOVE_SPIT_UP, MOVE_SWALLOW, MOVE_TORMENT, MOVE_FLATTER, MOVE_ROLE_PLAY, MOVE_ENDEAVOR, MOVE_TICKLE, - MOVE_COVET, MOVE_NONE + MOVE_COVET, 0 }; static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, EOS, 0, 0}; @@ -2330,6 +2332,10 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) } } +// Loads one of two text strings into the provided buffer. This is functionally +// unused, since the value loaded into the buffer is not read; it loaded one of +// two particles (either "は" or "の") which works in tandem with sub_814F950 +// below to effect changes in the meaning of the line. static void sub_814F8F8(u8* textBuff) { s32 counter = 0; @@ -2337,7 +2343,7 @@ static void sub_814F8F8(u8* textBuff) while (counter != 4) { - if (sUnknownMoveTable[i] == MOVE_NONE) + if (sUnknownMoveTable[i] == 0) counter++; if (sUnknownMoveTable[i++] == gStringInfo->currentMove) break; @@ -2352,6 +2358,24 @@ static void sub_814F8F8(u8* textBuff) } } +// Appends "!" to the text buffer `dst`. In the original Japanese this looked +// into the table of moves at sUnknownMoveTable and varied the line accordingly. +// +// gText_ExclamationMark was a plain "!", used for any attack not on the list. +// It resulted in the translation "<NAME>'s <ATTACK>!". +// +// gText_ExclamationMark2 was "を つかった!". This resulted in the translation +// "<NAME> used <ATTACK>!", which was used for all attacks in English. +// +// gText_ExclamationMark3 was "した!". This was used for those moves whose +// names were verbs, such as Recover, and resulted in translations like "<NAME> +// recovered itself!". +// +// gText_ExclamationMark4 was "を した!" This resulted in a translation of +// "<NAME> did an <ATTACK>!". +// +// gText_ExclamationMark5 was " こうげき!" This resulted in a translation of +// "<NAME>'s <ATTACK> attack!". static void sub_814F950(u8* dst) { s32 counter = 0; diff --git a/src/item.c b/src/item.c index 931027e25..a17599db9 100644 --- a/src/item.c +++ b/src/item.c @@ -1,5 +1,6 @@ #include "global.h" #include "item.h" +#include "berry.h" #include "constants/items.h" #include "string_util.h" #include "text.h" @@ -11,7 +12,6 @@ extern bool8 InBattlePyramid(void); extern const u8 gText_PokeBalls[]; extern const u8 gText_Berries[]; extern const u8 gText_Berry[]; -extern const u8 gUnknown_085897E4[][28]; // not sure what this one is bool8 CheckPyramidBagHasItem(u16 itemId, u16 count); bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count); @@ -96,8 +96,8 @@ void CopyItemNameHandlePlural(u16 itemId, u8 *string, u32 quantity) } else { - if (itemId >= 0x85 && itemId <= 0xAF) - GetBerryCountString(string, gUnknown_085897E4[itemId], quantity); + if (itemId >= ITEM_CHERI_BERRY && itemId <= ITEM_ENIGMA_BERRY) + GetBerryCountString(string, gBerries[itemId - ITEM_CHERI_BERRY].name, quantity); else StringCopy(string, ItemId_GetItem(itemId)->name); } diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index 218ef68d7..efe38fbae 100755 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -21,9 +21,9 @@ extern const u8 gBirchHelpGfx[]; extern const u8 gBirchBagTilemap[]; extern const u8 gBirchGrassTilemap[]; extern const u16 gBirchBagGrassPal[]; -extern const u16 gUnknown_0850FEFC[]; +extern const u16 gTextWindowFrame1_Pal[]; extern const u16 gUnknown_0860F074[]; -extern const u32 gUnknown_0850E87C[]; +extern const u32 gTextWindowFrame1_Gfx[]; extern struct SaveSection gSaveDataBuffer; extern u8 gText_SaveFailedCheckingBackup[]; @@ -226,7 +226,7 @@ static void CB2_SaveFailedScreen(void) InitBgsFromTemplates(0, gUnknown_085EFD88, 3); SetBgTilemapBuffer(0, (void *)&gDecompressionBuffer[0x2000]); CpuFill32(0, &gDecompressionBuffer[0x2000], 0x800); - LoadBgTiles(0, gUnknown_0850E87C, 0x120, 0x214); + LoadBgTiles(0, gTextWindowFrame1_Gfx, 0x120, 0x214); InitWindows(gUnknown_085EFD94); // AddWindowWithoutTileMap returns a u16/integer, but the info is clobbered into a u8 here resulting in lost info. Bug? gSaveFailedWindowIds[TEXT_WIN_ID] = AddWindowWithoutTileMap(gUnknown_085EFD9C); @@ -239,7 +239,7 @@ static void CB2_SaveFailedScreen(void) ResetPaletteFade(); LoadPalette(gBirchBagGrassPal, 0, 0x40); LoadPalette(sSaveFailedClockPal, 0x100, 0x20); - LoadPalette(gUnknown_0850FEFC, 0xE0, 0x20); + LoadPalette(gTextWindowFrame1_Pal, 0xE0, 0x20); LoadPalette(gUnknown_0860F074, 0xF0, 0x20); SetWindowBorderStyle(gSaveFailedWindowIds[TEXT_WIN_ID], FALSE, 0x214, 0xE); SetWindowBorderStyle(gSaveFailedWindowIds[CLOCK_WIN_ID], FALSE, 0x214, 0xE); diff --git a/src/starter_choose.c b/src/starter_choose.c index 2d78af8fb..c2c553d46 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -74,7 +74,7 @@ static void Task_MoveStarterChooseCursor(u8 taskId); static void sub_8134668(u8 taskId); static void CreateStarterPokemonLabel(u8 selection); static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y); -static void StarterPokemonSpriteCallback(struct Sprite *sprite); +void StarterPokemonSpriteCallback(struct Sprite *sprite); static IWRAM_DATA u16 sStarterChooseWindowId; @@ -361,7 +361,7 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) return spriteId; } -static void sub_81346DC(struct Sprite *sprite) +void sub_81346DC(struct Sprite *sprite) { sprite->pos1.x = gUnknown_085B1E28[gTasks[sprite->data[0]].tStarterSelection][0]; sprite->pos1.y = gUnknown_085B1E28[gTasks[sprite->data[0]].tStarterSelection][1]; @@ -369,7 +369,7 @@ static void sub_81346DC(struct Sprite *sprite) sprite->data[1] = (u8)(sprite->data[1]) + 4; } -static void sub_813473C(struct Sprite *sprite) +void sub_813473C(struct Sprite *sprite) { if (gTasks[sprite->data[0]].tStarterSelection == sprite->data[1]) StartSpriteAnimIfDifferent(sprite, 1); @@ -377,7 +377,7 @@ static void sub_813473C(struct Sprite *sprite) StartSpriteAnimIfDifferent(sprite, 0); } -static void StarterPokemonSpriteCallback(struct Sprite *sprite) +void StarterPokemonSpriteCallback(struct Sprite *sprite) { //Move sprite to upper center of screen if (sprite->pos1.x > STARTER_PKMN_POS_X) diff --git a/src/text_window.c b/src/text_window.c index 336536c04..c5334b11e 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -8,7 +8,7 @@ extern u8 LoadBgTiles(u8 bg, const void *src, u16 size, u16 destOffset); extern void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette); extern const struct TilesPal gUnknown_0851021C[]; -extern const u32 gUnknown_08DDD748[]; +extern const u32 gMessageBox_Gfx[]; extern const u16 gUnknown_0851017C[]; extern const u16 gUnknown_08DDD728[]; @@ -22,7 +22,7 @@ const struct TilesPal* sub_8098758(u8 id) void copy_textbox_border_tile_patterns_to_vram(u8 windowId, u16 destOffset, u8 palOffset) { - LoadBgTiles(GetWindowAttribute(windowId, WINDOW_PRIORITY), gUnknown_08DDD748, 0x1C0, destOffset); + LoadBgTiles(GetWindowAttribute(windowId, WINDOW_PRIORITY), gMessageBox_Gfx, 0x1C0, destOffset); LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, 0x20); } diff --git a/src/unk_transition.c b/src/unk_transition.c new file mode 100644 index 000000000..feaddc8ce --- /dev/null +++ b/src/unk_transition.c @@ -0,0 +1,633 @@ +#include "global.h" +#include "sprite.h" +#include "decompress.h" +#include "unk_transition.h" +#include "battle_transition.h" +#include "task.h" +#include "palette.h" +#include "trig.h" +#include "bg.h" +#include "gpu_regs.h" + +typedef bool8 (*TransitionStateFunc)(struct Task *task); + +// this file's functions +static void sub_81DA848(struct Sprite *sprite); +static void sub_81DA9BC(struct Sprite *sprite); +static bool8 sub_81DAACC(struct Task *task); +static bool8 sub_81DAC14(struct Task *task); +static bool8 sub_81DABBC(struct Task *task); +static bool8 sub_81DAB4C(struct Task *task); +static bool8 sub_81DAC80(struct Task *task); +static bool8 sub_81DACEC(struct Task *task); +static bool8 sub_81DAD58(struct Task *task); +static bool8 sub_81DADC4(struct Task *task); +static bool8 sub_81DAE44(struct Task *task); +static bool8 sub_81DAEB0(struct Task *task); +static bool8 sub_81DAF34(struct Task *task); +static bool8 sub_81DAFA0(struct Task *task); +static bool8 sub_81DB02C(struct Task *task); +static bool8 sub_81DB098(struct Task *task); +static bool8 sub_81DB124(struct Task *task); +static bool8 sub_81DB190(struct Task *task); +static bool8 sub_81DB224(struct Task *task); +static bool8 sub_81DB290(struct Task *task); +static bool8 sub_81DB328(struct Task *task); + +// const rom data +// TODO: move those from .s file to .c +extern const u8 gUnknown_0862AD54[]; +extern const u8 gUnknown_0862AF30[]; +extern const u8 gUnknown_0862B0DC[]; +extern const u16 gUnknown_0862B53C[]; + +static const struct OamData sOamData_862B71C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct CompressedSpriteSheet sUnknown_0862B724 = +{ + gUnknown_0862B0DC, 0x1800, 11920 +}; + +static const struct SpritePalette sUnknown_0862B72C = +{ + gUnknown_0862B53C, 11920 +}; + +static const union AnimCmd sSpriteAnim_862B734[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_862B73C[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_862B744[] = +{ + ANIMCMD_FRAME(128, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_862B74C[] = +{ + sSpriteAnim_862B734, + sSpriteAnim_862B73C, + sSpriteAnim_862B744 +}; + +static const struct SpriteTemplate sUnknown_0862B758 = +{ + .tileTag = 11920, + .paletteTag = 11920, + .oam = &sOamData_862B71C, + .anims = sSpriteAnimTable_862B74C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const TransitionStateFunc sPhase2_34_Funcs[] = +{ + sub_81DAACC, + sub_81DAC14, + sub_81DABBC, + sub_81DAB4C, + sub_81DAC80 +}; + +static const TransitionStateFunc sPhase2_35_Funcs[] = +{ + sub_81DAACC, + sub_81DACEC, + sub_81DABBC, + sub_81DAB4C, + sub_81DAD58 +}; + +static const TransitionStateFunc sPhase2_36_Funcs[] = +{ + sub_81DAACC, + sub_81DADC4, + sub_81DABBC, + sub_81DAB4C, + sub_81DAE44 +}; + +static const TransitionStateFunc sPhase2_37_Funcs[] = +{ + sub_81DAACC, + sub_81DAEB0, + sub_81DABBC, + sub_81DAB4C, + sub_81DAF34 +}; + +static const TransitionStateFunc sPhase2_38_Funcs[] = +{ + sub_81DAACC, + sub_81DAFA0, + sub_81DABBC, + sub_81DAB4C, + sub_81DB02C +}; + +static const TransitionStateFunc sPhase2_39_Funcs[] = +{ + sub_81DAACC, + sub_81DB098, + sub_81DABBC, + sub_81DAB4C, + sub_81DB124 +}; + +static const TransitionStateFunc sPhase2_40_Funcs[] = +{ + sub_81DAACC, + sub_81DB190, + sub_81DABBC, + sub_81DAB4C, + sub_81DB224 +}; + +static const TransitionStateFunc sPhase2_41_Funcs[] = +{ + sub_81DAACC, + sub_81DB290, + sub_81DABBC, + sub_81DAB4C, + sub_81DB328 +}; + +// code +static void sub_81DA700(void) +{ + u16 *dst1, *dst2; + + sub_8149F58(&dst1, &dst2); + LZ77UnCompVram(gUnknown_0862AD54, dst2); + LZ77UnCompVram(gUnknown_0862AF30, dst1); + LoadPalette(gUnknown_0862B53C, 0xF0, 0x20); + LoadCompressedObjectPic(&sUnknown_0862B724); + LoadSpritePalette(&sUnknown_0862B72C); +} + +static u8 sub_81DA74C(s16 x, s16 y, u8 arg2, u8 arg3, s8 arg4, s8 arg5, u8 spriteAnimNum) +{ + u8 spriteId = CreateSprite(&sUnknown_0862B758, x, y, 0); + + switch (spriteAnimNum) + { + case 0: + gSprites[spriteId].data[0] = 120; + gSprites[spriteId].data[1] = 45; + break; + case 1: + gSprites[spriteId].data[0] = 89; + gSprites[spriteId].data[1] = 97; + break; + case 2: + gSprites[spriteId].data[0] = 151; + gSprites[spriteId].data[1] = 97; + break; + } + + gSprites[spriteId].data[2] = arg4; + gSprites[spriteId].data[3] = arg5; + gSprites[spriteId].data[6] = arg2; + gSprites[spriteId].data[7] = arg3; + gSprites[spriteId].data[4] = 0; + gSprites[spriteId].data[5] = 0; + + StartSpriteAnim(&gSprites[spriteId], spriteAnimNum); + gSprites[spriteId].callback = sub_81DA848; + + return spriteId; +} + +static void sub_81DA848(struct Sprite *sprite) +{ + s16 *data = sprite->data; + + if (sprite->pos1.x == data[0] && sprite->pos1.y == data[1]) + { + sprite->callback = SpriteCallbackDummy; + } + else + { + if (data[4] == data[6]) + { + sprite->pos1.x += data[2]; + data[4] = 0; + } + else + { + data[4]++; + } + + if (data[5] == data[7]) + { + sprite->pos1.y += data[3]; + data[5] = 0; + } + else + { + data[5]++; + } + } +} + +static u8 sub_81DA8BC(s16 x, s16 y, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6, u8 spriteAnimNum) +{ + u8 spriteId = CreateSprite(&sUnknown_0862B758, x, y, 0); + + switch (spriteAnimNum) + { + case 0: + gSprites[spriteId].data[0] = 120; + gSprites[spriteId].data[1] = 45; + break; + case 1: + gSprites[spriteId].data[0] = 89; + gSprites[spriteId].data[1] = 97; + break; + case 2: + gSprites[spriteId].data[0] = 151; + gSprites[spriteId].data[1] = 97; + break; + } + + gSprites[spriteId].data[2] = arg2; + gSprites[spriteId].data[3] = arg3; + gSprites[spriteId].data[4] = arg4; + gSprites[spriteId].data[5] = arg5; + gSprites[spriteId].data[6] = arg6; + + StartSpriteAnim(&gSprites[spriteId], spriteAnimNum); + gSprites[spriteId].callback = sub_81DA9BC; + + return spriteId; +} + +static void sub_81DA9BC(struct Sprite *sprite) +{ + sprite->pos2.x = (Sin2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096 + sprite->pos2.y = (Cos2(sprite->data[2]) * sprite->data[4]) >> 12; // div by 4096 + + sprite->data[2] = (sprite->data[2] + sprite->data[3]) % 360; + + if (sprite->data[4] != sprite->data[5]) + sprite->data[4] += sprite->data[6]; + else + sprite->callback = SpriteCallbackDummy; +} + +#define tState data[0] + +static void sub_81DAA20(struct Task *task) +{ + FreeSpriteTilesByTag(11920); + FreeSpritePaletteByTag(11920); + + DestroySprite(&gSprites[task->data[4]]); + DestroySprite(&gSprites[task->data[5]]); + DestroySprite(&gSprites[task->data[6]]); +} + +static bool8 sub_81DAA74(struct Task *task) +{ + if (gSprites[task->data[4]].callback == SpriteCallbackDummy + && gSprites[task->data[5]].callback == SpriteCallbackDummy + && gSprites[task->data[6]].callback == SpriteCallbackDummy) + return TRUE; + else + return FALSE; +} + +static bool8 sub_81DAACC(struct Task *task) +{ + if (task->data[1] == 0) + { + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); + + task->data[1]++; + return FALSE; + } + else + { + sub_81DA700(); + SetGpuReg(REG_OFFSET_BLDCNT, 0x3F41); + SetGpuReg(REG_OFFSET_BLDALPHA, 0x1000); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgY(0, 0x500, 2); + + task->data[1] = 0; + task->tState++; + return TRUE; + } +} + +static bool8 sub_81DAB4C(struct Task *task) +{ + if (task->data[2] == 0) + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); + + if (task->data[2] == 16) + { + if (task->data[3] == 31) + { + BeginNormalPaletteFade(-1, -1, 0, 0x10, 0); + task->tState++; + } + else + { + task->data[3]++; + } + } + else + { + u16 var; + + task->data[2]++; + var = task->data[2]; + SetGpuReg(REG_OFFSET_BLDALPHA, (var) | ((16 - var) << 8)); + } + + return FALSE; +} + +static bool8 sub_81DABBC(struct Task *task) +{ + if (sub_81DAA74(task) == TRUE) + task->tState++; + + return FALSE; +} + +void Phase2Task_34(u8 taskId) +{ + while (sPhase2_34_Funcs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 sub_81DAC14(struct Task *task) +{ + task->data[4] = sub_81DA74C(120, -51, 0, 0, 0, 2, 0); + task->data[5] = sub_81DA74C(-7, 193, 0, 0, 2, -2, 1); + task->data[6] = sub_81DA74C(247, 193, 0, 0, -2, -2, 2); + + task->tState++; + return FALSE; +} + +static bool8 sub_81DAC80(struct Task *task) +{ + if (!gPaletteFade.active) + { + sub_81DAA20(task); + DestroyTask(FindTaskIdByFunc(Phase2Task_34)); + } + + return FALSE; +} + +void Phase2Task_35(u8 taskId) +{ + while (sPhase2_35_Funcs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 sub_81DACEC(struct Task *task) +{ + task->data[4] = sub_81DA74C(120, 197, 0, 0, 0, -4, 0); + task->data[5] = sub_81DA74C(241, 59, 0, 1, -4, 2, 1); + task->data[6] = sub_81DA74C(-1, 59, 0, 1, 4, 2, 2); + + task->tState++; + return FALSE; +} + +static bool8 sub_81DAD58(struct Task *task) +{ + if (!gPaletteFade.active) + { + sub_81DAA20(task); + DestroyTask(FindTaskIdByFunc(Phase2Task_35)); + } + + return FALSE; +} + +void Phase2Task_36(u8 taskId) +{ + while (sPhase2_36_Funcs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 sub_81DADC4(struct Task *task) +{ + task->data[4] = sub_81DA8BC(120, 45, 12, 4, 128, 0, -4, 0); + task->data[5] = sub_81DA8BC(89, 97, 252, 4, 128, 0, -4, 1); + task->data[6] = sub_81DA8BC(151, 97, 132, 4, 128, 0, -4, 2); + + task->tState++; + return FALSE; +} + +static bool8 sub_81DAE44(struct Task *task) +{ + if (!gPaletteFade.active) + { + sub_81DAA20(task); + DestroyTask(FindTaskIdByFunc(Phase2Task_36)); + } + + return FALSE; +} + +void Phase2Task_37(u8 taskId) +{ + while (sPhase2_37_Funcs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 sub_81DAEB0(struct Task *task) +{ + task->data[4] = sub_81DA8BC(120, 80, 284, 8, 131, 35, -3, 0); + task->data[5] = sub_81DA8BC(120, 80, 44, 8, 131, 35, -3, 1); + task->data[6] = sub_81DA8BC(121, 80, 164, 8, 131, 35, -3, 2); + + task->tState++; + return FALSE; +} + +static bool8 sub_81DAF34(struct Task *task) +{ + if (!gPaletteFade.active) + { + sub_81DAA20(task); + DestroyTask(FindTaskIdByFunc(Phase2Task_37)); + } + + return FALSE; +} + +void Phase2Task_38(u8 taskId) +{ + while (sPhase2_38_Funcs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 sub_81DAFA0(struct Task *task) +{ + if (task->data[1] == 0) + { + task->data[4] = sub_81DA74C(120, -51, 0, 0, 0, 4, 0); + } + else if (task->data[1] == 16) + { + task->data[5] = sub_81DA74C(-7, 193, 0, 0, 4, -4, 1); + } + else if (task->data[1] == 32) + { + task->data[6] = sub_81DA74C(247, 193, 0, 0, -4, -4, 2); + task->tState++; + } + + task->data[1]++; + return FALSE; +} + +static bool8 sub_81DB02C(struct Task *task) +{ + if (!gPaletteFade.active) + { + sub_81DAA20(task); + DestroyTask(FindTaskIdByFunc(Phase2Task_38)); + } + + return FALSE; +} + +void Phase2Task_39(u8 taskId) +{ + while (sPhase2_39_Funcs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 sub_81DB098(struct Task *task) +{ + if (task->data[1] == 0) + { + task->data[4] = sub_81DA74C(120, 197, 0, 0, 0, -8, 0); + } + else if (task->data[1] == 16) + { + task->data[5] = sub_81DA74C(241, 78, 0, 0, -8, 1, 1); + } + else if (task->data[1] == 32) + { + task->data[6] = sub_81DA74C(-1, 78, 0, 0, 8, 1, 2); + task->tState++; + } + + task->data[1]++; + return FALSE; +} + +static bool8 sub_81DB124(struct Task *task) +{ + if (!gPaletteFade.active) + { + sub_81DAA20(task); + DestroyTask(FindTaskIdByFunc(Phase2Task_39)); + } + + return FALSE; +} + +void Phase2Task_40(u8 taskId) +{ + while (sPhase2_40_Funcs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 sub_81DB190(struct Task *task) +{ + if (task->data[1] == 0) + { + task->data[4] = sub_81DA8BC(120, 45, 12, 4, 128, 0, -4, 0); + } + else if (task->data[1] == 16) + { + task->data[5] = sub_81DA8BC(89, 97, 252, 4, 128, 0, -4, 1); + } + else if (task->data[1] == 32) + { + task->data[6] = sub_81DA8BC(151, 97, 132, 4, 128, 0, -4, 2); + task->tState++; + } + + task->data[1]++; + return FALSE; +} + +static bool8 sub_81DB224(struct Task *task) +{ + if (!gPaletteFade.active) + { + sub_81DAA20(task); + DestroyTask(FindTaskIdByFunc(Phase2Task_40)); + } + + return FALSE; +} + +void Phase2Task_41(u8 taskId) +{ + while (sPhase2_41_Funcs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 sub_81DB290(struct Task *task) +{ + if (task->data[1] == 0) + { + task->data[4] = sub_81DA8BC(120, 80, 284, 8, 131, 35, -3, 0); + } + else if (task->data[1] == 16) + { + task->data[5] = sub_81DA8BC(120, 80, 44, 8, 131, 35, -3, 1); + } + else if (task->data[1] == 32) + { + task->data[6] = sub_81DA8BC(121, 80, 164, 8, 131, 35, -3, 2); + task->tState++; + } + + task->data[1]++; + return FALSE; +} + +static bool8 sub_81DB328(struct Task *task) +{ + if (!gPaletteFade.active) + { + sub_81DAA20(task); + DestroyTask(FindTaskIdByFunc(Phase2Task_41)); + } + + return FALSE; +} |