diff options
Diffstat (limited to 'src/field_effect.c')
-rw-r--r-- | src/field_effect.c | 3406 |
1 files changed, 0 insertions, 3406 deletions
diff --git a/src/field_effect.c b/src/field_effect.c deleted file mode 100644 index 3632d7053..000000000 --- a/src/field_effect.c +++ /dev/null @@ -1,3406 +0,0 @@ -#include "global.h" -#include "data2.h" -#include "script.h" -#include "trig.h" -#include "main.h" -#include "field_weather.h" -#include "decompress.h" -#include "sprite.h" -#include "menu.h" -#include "palette.h" -#include "text.h" -#include "rom4.h" -#include "task.h" -#include "sound.h" -#include "songs.h" -#include "decoration.h" -#include "field_player_avatar.h" -#include "field_map_obj_helpers.h" -#include "field_map_obj.h" -#include "metatile_behavior.h" -#include "field_camera.h" -#include "field_effect.h" -#include "field_fadetransition.h" -#include "fieldmap.h" -#include "field_map_obj.h" -#include "util.h" -#include "field_effect_helpers.h" - -#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} - -EWRAM_DATA u32 gUnknown_0202FF84[8] = {0}; - -const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); -const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); -const u32 gSpriteImage_839E434[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp"); -const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effect_objects/palettes/04.gbapal"); -const u32 gSpriteImage_839E474[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp"); -const u32 gSpriteImage_839E534[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp"); -const u32 gSpriteImage_839E5F4[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp"); -const u32 gSpriteImage_839E7F4[] = INCBIN_U32("graphics/misc/small_hof_monitor.4bpp"); -const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effect_objects/palettes/05.gbapal"); - -// Graphics for the lights streaking past your Pokemon when it uses a field move. -const u32 gFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp"); -const u16 gFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal"); -const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin"); - -// The following light streaks effect is used when the map is dark (e.g. a cave). -const u32 gDarknessFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp"); -const u16 gDarknessFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal"); -const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin"); - -bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = { - FieldEffectCmd_loadtiles, - FieldEffectCmd_loadfadedpal, - FieldEffectCmd_loadpal, - FieldEffectCmd_callnative, - FieldEffectCmd_end, - FieldEffectCmd_loadgfx_callnative, - FieldEffectCmd_loadtiles_callnative, - FieldEffectCmd_loadfadedpal_callnative, -}; - -const struct OamData gOamData_839F0F4 = {.size = 3}; -const struct OamData gOamData_839F0FC = {.size = 0}; -const struct OamData gOamData_839F104 = {.size = 1}; - -const struct SpriteFrameImage gSpriteImageTable_839F10C[] = { - obj_frame_tiles(gSpriteImage_839DC14) -}; -const struct SpritePalette gUnknown_0839F114 = {.data = gBirchPalette, .tag = 0x1006}; - -const union AnimCmd gSpriteAnim_839F11C[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 1), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_839F124[] = { - gSpriteAnim_839F11C -}; - -const struct SpriteTemplate gSpriteTemplate_839F128 = { - .tileTag = 0xffff, - .paletteTag = 4102, - .oam = &gOamData_839F0F4, - .anims = (const union AnimCmd *const *)&gSpriteAnimTable_839F124, - .images = gSpriteImageTable_839F10C, - .affineAnims = (const union AffineAnimCmd *const *)&gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -const struct SpritePalette gFieldEffectObjectPaletteInfo4 = {.data = gFieldEffectObjectPalette4, .tag = 0x1007}; -const struct SpritePalette gFieldEffectObjectPaletteInfo5 = {.data = gFieldEffectObjectPalette5, .tag = 0x1010}; -const struct OamData gOamData_839F150 = { - .shape = 1, - .size = 2 -}; - -const struct SpriteFrameImage gSpriteImageTable_839F158[] = { - obj_frame_tiles(gSpriteImage_839E434) -}; - -const struct SpriteFrameImage gSpriteImageTable_839F160[] = { - obj_frame_tiles(gSpriteImage_839E474), - obj_frame_tiles(gSpriteImage_839E534) -}; - -const struct SpriteFrameImage gSpriteImageTable_839F170[] = { - obj_frame_tiles(gSpriteImage_839E5F4) -}; - -const struct SpriteFrameImage gSpriteImageTable_839F178[] = { - {.data = (u8 *)gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here -}; - -const struct Subsprite Unknown_39F180[] = { - {.x = -12, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 0}, - {.x = 4, .y = -8, .priority = 2, .tileOffset = 2, .shape = 0, .size = 0}, - {.x = -12, .y = 0, .priority = 2, .tileOffset = 3, .shape = 1, .size = 0}, - {.x = 4, .y = 0, .priority = 2, .tileOffset = 5, .shape = 0, .size = 0} -}; - -const struct SubspriteTable gUnknown_0839F1A0 = subsprite_table(Unknown_39F180); - -const struct Subsprite Unknown_39F1A8[] = { - {.x = -32, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 1}, - {.x = 0, .y = -8, .priority = 2, .tileOffset = 4, .shape = 1, .size = 1}, - {.x = -32, .y = 0, .priority = 2, .tileOffset = 8, .shape = 1, .size = 1}, - {.x = 0, .y = 0, .priority = 2, .tileOffset = 12, .shape = 1, .size = 1} -}; - -const struct SubspriteTable gUnknown_0839F1C8 = subsprite_table(Unknown_39F1A8); - -const union AnimCmd gSpriteAnim_839F1D0[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 1), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd gSpriteAnim_839F1D8[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 16), - ANIMCMD_FRAME(.imageValue = 1, .duration = 16), - ANIMCMD_FRAME(.imageValue = 0, .duration = 16), - ANIMCMD_FRAME(.imageValue = 1, .duration = 16), - ANIMCMD_FRAME(.imageValue = 0, .duration = 16), - ANIMCMD_FRAME(.imageValue = 1, .duration = 16), - ANIMCMD_FRAME(.imageValue = 0, .duration = 16), - ANIMCMD_FRAME(.imageValue = 1, .duration = 16), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_839F1FC[] = { - gSpriteAnim_839F1D0, - gSpriteAnim_839F1D8 -}; - -const union AnimCmd *const gSpriteAnimTable_839F204[] = { - gSpriteAnim_839F1D0 -}; - -const struct SpriteTemplate gSpriteTemplate_839F208 = { - .tileTag = 0xffff, - .paletteTag = 4103, - .oam = &gOamData_839F0FC, - .anims = gSpriteAnimTable_839F1FC, - .images = gSpriteImageTable_839F158, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_PokeballGlow -}; - - -const struct SpriteTemplate gSpriteTemplate_839F220 = { - .tileTag = 0xffff, - .paletteTag = 4100, - .oam = &gOamData_839F104, - .anims = gSpriteAnimTable_839F1FC, - .images = gSpriteImageTable_839F160, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_PokecenterMonitor -}; - - -const struct SpriteTemplate gSpriteTemplate_839F238 = { - .tileTag = 0xffff, - .paletteTag = 4112, - .oam = &gOamData_839F104, - .anims = gSpriteAnimTable_839F204, - .images = gSpriteImageTable_839F170, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_HallOfFameMonitor -}; - - -const struct SpriteTemplate gSpriteTemplate_839F250 = { - .tileTag = 0xffff, - .paletteTag = 4112, - .oam = &gOamData_839F150, - .anims = gSpriteAnimTable_839F204, - .images = gSpriteImageTable_839F178, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_HallOfFameMonitor -}; - -void (*const gUnknown_0839F268[])(struct Task *) = { - PokecenterHealEffect_0, - PokecenterHealEffect_1, - PokecenterHealEffect_2, - PokecenterHealEffect_3 -}; - -void (*const gUnknown_0839F278[])(struct Task *) = { - HallOfFameRecordEffect_0, - HallOfFameRecordEffect_1, - HallOfFameRecordEffect_2, - HallOfFameRecordEffect_3 -}; - -void (*const gUnknown_0839F288[])(struct Sprite *) = { - PokeballGlowEffect_0, - PokeballGlowEffect_1, - PokeballGlowEffect_2, - PokeballGlowEffect_3, - PokeballGlowEffect_4, - PokeballGlowEffect_5, - PokeballGlowEffect_6, - PokeballGlowEffect_7 -}; - -const struct Coords16 gUnknown_0839F2A8[] = { - {.x = 0, .y = 0}, - {.x = 6, .y = 0}, - {.x = 0, .y = 4}, - {.x = 6, .y = 4}, - {.x = 0, .y = 8}, - {.x = 6, .y = 8} -}; - -const u8 gUnknown_0839F2C0[] = {16, 12, 8, 0}; -const u8 gUnknown_0839F2C4[] = {16, 12, 8, 0}; -const u8 gUnknown_0839F2C8[] = { 0, 0, 0, 0}; - -bool8 (*const gUnknown_0839F2CC[])(struct Task *) = { - sub_80867AC, - sub_8086854, - sub_8086870, - sub_80868E4, - sub_808699C, - sub_80869B8, - sub_80869F8 -}; - -bool8 (*const gUnknown_0839F2E8[])(struct Task *) = { - sub_8086AA0, - sub_8086AC0, - sub_8086B30, - sub_8086B54, - sub_8086B64, - sub_8086B88 -}; - -bool8 (*const gUnknown_0839F300[])(struct Task *) = { - sub_8086CF4, - sub_8086D70, - sub_8086DB0, - sub_8086E10, - sub_8086E50, - sub_8086EB0, - sub_8086ED4 -}; - -bool8 (*const gUnknown_0839F31C[])(struct Task *, struct MapObject *) = { - sub_8086FB0, - waterfall_1_do_anim_probably, - waterfall_2_wait_anim_finish_probably, - sub_8087030, - sub_8087058 -}; - -bool8 (*const gUnknown_0839F330[])(struct Task *) = { - sub_8087124, - dive_2_unknown, - dive_3_unknown -}; - -bool8 (*const gUnknown_0839F33C[])(struct Task *, struct MapObject *, struct Sprite *) = { - sub_808722C, - sub_8087264, - sub_8087298, - sub_80872E4, - sub_80873D8, - sub_80873F4 -}; - -bool8 (*const gUnknown_0839F354[])(struct Task *, struct MapObject *, struct Sprite *) = { - sub_80874CC, - sub_80874FC, - sub_8087548, - sub_808759C -}; - -bool8 (*const gUnknown_0839F364[])(struct Task *, struct MapObject *, struct Sprite *) = { - sub_80876C8, - sub_80876F8, - sub_8087774, - sub_80877AC, - sub_80877D4 -}; - -void (*const gUnknown_0839F378[])(struct Task *) = { - sub_80878F4, - sub_8087914 -}; - -const u8 gUnknown_0839F380[] = {1, 3, 4, 2, 1}; - -void (*const gUnknown_0839F388[])(struct Task *) = { - sub_8087AA4, - sub_8087AC8 -}; - -void (*const gUnknown_0839F390[])(struct Task *) = { - sub_8087BEC, - sub_8087C14, - sub_8087CA4, - sub_8087D78 -}; - -void (*const gUnknown_0839F3A0[])(struct Task *) = { - sub_8087E4C, - sub_8087ED8, - sub_8087FDC -}; - -void (*const gUnknown_0839F3AC[])(struct Task *) = { - sub_8088150, - sub_80881C0, - sub_8088228, - sub_80882B4, - sub_80882E4, - sub_8088338, - sub_8088380 -}; - -void (*const gUnknown_0839F3C8[])(struct Task *) = { - sub_80884AC, - sub_80884E8, - sub_8088554, - sub_80885A8, - sub_80885D8, - sub_808860C, - sub_808862C -}; - -void (*const gUnknown_0839F3E4[])(struct Task *) = { - sub_8088984, - sub_80889E4, - sub_8088A30, - sub_8088A78, - sub_8088AF4 -}; - -void (*const gUnknown_0839F3F8[])(struct Task *) = { - sub_8088CA0, - sub_8088CF8, - sub_8088D3C, - sub_8088D94, - sub_8088DD8, - sub_8088E2C, - sub_8088EB4, - sub_8088F10, - sub_8088F30 -}; - -const union AffineAnimCmd SpriteAffineAnim_839F41C[] = { - AFFINEANIMCMD_FRAME(8, 8, -30, 0), - AFFINEANIMCMD_FRAME(28, 28, 0, 30), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd SpriteAffineAnim_839F434[] = { - AFFINEANIMCMD_FRAME(256, 256, 64, 0), - AFFINEANIMCMD_FRAME(-10, -10, 0, 22), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd *const gSpriteAffineAnimTable_0839F44C[] = { - SpriteAffineAnim_839F41C, - SpriteAffineAnim_839F434 -}; - -void (*const gUnknown_0839F454[])(struct Task *) = { - sub_80892A0, - sub_8089354, - sub_80893C0, - sub_8089414, - sub_808948C, - sub_80894C4, - fishE -}; - -const s16 gUnknown_0839F470[] = { - -2, - -4, - -5, - -6, - -7, - -8, - -8, - -8, - -7, - -7, - -6, - -5, - -3, - -2, - 0, - 2, - 4, - 8 -}; - -static u8 sActiveList[32]; - -extern u8 *gFieldEffectScriptPointers[]; - -u32 FieldEffectStart(u8 id) -{ - u8 *script; - u32 val; - - FieldEffectActiveListAdd(id); - - script = gFieldEffectScriptPointers[id]; - - while (gFieldEffectScriptFuncs[*script](&script, &val)) - ; - - return val; -} - -bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadTiles(script); - return TRUE; -} - -bool8 FieldEffectCmd_loadfadedpal(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadFadedPalette(script); - return TRUE; -} - -bool8 FieldEffectCmd_loadpal(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadPalette(script); - return TRUE; -} - -bool8 FieldEffectCmd_callnative(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_CallNative(script, val); - return TRUE; -} - -bool8 FieldEffectCmd_end(u8 **script, u32 *val) -{ - return FALSE; -} - -bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadTiles(script); - FieldEffectScript_LoadFadedPalette(script); - FieldEffectScript_CallNative(script, val); - return TRUE; -} - -bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadTiles(script); - FieldEffectScript_CallNative(script, val); - return TRUE; -} - -bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadFadedPalette(script); - FieldEffectScript_CallNative(script, val); - return TRUE; -} - -u32 FieldEffectScript_ReadWord(u8 **script) -{ - return (*script)[0] - + ((*script)[1] << 8) - + ((*script)[2] << 16) - + ((*script)[3] << 24); -} - -void FieldEffectScript_LoadTiles(u8 **script) -{ - struct SpriteSheet *sheet = (struct SpriteSheet *)FieldEffectScript_ReadWord(script); - if (GetSpriteTileStartByTag(sheet->tag) == 0xFFFF) - LoadSpriteSheet(sheet); - (*script) += 4; -} - -void FieldEffectScript_LoadFadedPalette(u8 **script) -{ - struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script); - LoadSpritePalette(palette); - sub_807D78C(IndexOfSpritePaletteTag(palette->tag)); - (*script) += 4; -} - -void FieldEffectScript_LoadPalette(u8 **script) -{ - struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script); - LoadSpritePalette(palette); - (*script) += 4; -} - -void FieldEffectScript_CallNative(u8 **script, u32 *val) -{ - u32 (*func)(void) = (u32 (*)(void))FieldEffectScript_ReadWord(script); - *val = func(); - (*script) += 4; -} - -void FieldEffectFreeGraphicsResources(struct Sprite *sprite) -{ - u16 sheetTileStart = sprite->sheetTileStart; - u32 paletteNum = sprite->oam.paletteNum; - DestroySprite(sprite); - FieldEffectFreeTilesIfUnused(sheetTileStart); - FieldEffectFreePaletteIfUnused(paletteNum); -} - -void FieldEffectStop(struct Sprite *sprite, u8 id) -{ - FieldEffectFreeGraphicsResources(sprite); - FieldEffectActiveListRemove(id); -} - -void FieldEffectFreeTilesIfUnused(u16 tileStart) -{ - u8 i; - u16 tag = GetSpriteTileTagByTileStart(tileStart); - - if (tag != 0xFFFF) - { - for (i = 0; i < MAX_SPRITES; i++) - if (gSprites[i].inUse && gSprites[i].usingSheet && tileStart == gSprites[i].sheetTileStart) - return; - FreeSpriteTilesByTag(tag); - } -} - -void FieldEffectFreePaletteIfUnused(u8 paletteNum) -{ - u8 i; - u16 tag = GetSpritePaletteTagByPaletteNum(paletteNum); - - if (tag != 0xFFFF) - { - for (i = 0; i < MAX_SPRITES; i++) - if (gSprites[i].inUse && gSprites[i].oam.paletteNum == paletteNum) - return; - FreeSpritePaletteByTag(tag); - } -} - -void FieldEffectActiveListClear(void) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(sActiveList); i++) - sActiveList[i] = 0xFF; -} - -void FieldEffectActiveListAdd(u8 id) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(sActiveList); i++) - { - if (sActiveList[i] == 0xFF) - { - sActiveList[i] = id; - return; - } - } -} - -void FieldEffectActiveListRemove(u8 id) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(sActiveList); i++) - { - if (sActiveList[i] == id) - { - sActiveList[i] = 0xFF; - return; - } - } -} - -bool8 FieldEffectActiveListContains(u8 id) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(sActiveList); i++) - if (sActiveList[i] == id) - return TRUE; - return FALSE; -} - -u8 CreateTrainerSprite_BirchSpeech(u8 gender, s16 x, s16 y, u8 subpriority, u8 *buffer) -{ - struct SpriteTemplate spriteTemplate; - LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[gender], buffer); - LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[gender], buffer); - spriteTemplate.tileTag = gTrainerFrontPicTable[gender].tag; - spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[gender].tag; - spriteTemplate.oam = &gOamData_839F0F4; - spriteTemplate.anims = gDummySpriteAnimTable; - spriteTemplate.images = NULL; - spriteTemplate.affineAnims = gDummySpriteAffineAnimTable; - spriteTemplate.callback = SpriteCallbackDummy; - return CreateSprite(&spriteTemplate, x, y, subpriority); -} - -void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) -{ - LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); - LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20); -} - -u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority) -{ - LoadSpritePalette(&gUnknown_0839F114); - return CreateSprite(&gSpriteTemplate_839F128, x, y, subpriority); -} - -u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) -{ - DecompressPicFromTable_2(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gUnknown_081FAF4C[3], gUnknown_081FAF4C[3], species); - LoadCompressedObjectPalette(&gMonPaletteTable[species]); - GetMonSpriteTemplate_803C56C(species, 3); - gUnknown_02024E8C.paletteTag = gMonPaletteTable[0].tag; - sub_807DE38(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10); - return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); -} - -u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) -{ - const struct CompressedSpritePalette *spritePalette; - - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g); - spritePalette = sub_80409C8(species, d, g); - LoadCompressedObjectPalette(spritePalette); - GetMonSpriteTemplate_803C56C(species, 3); - gUnknown_02024E8C.paletteTag = spritePalette->tag; - sub_807DE38(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); - return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); -} - -void FreeResourcesAndDestroySprite(struct Sprite *sprite) -{ - sub_807DE68(); - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); - if (sprite->oam.affineMode != 0) - { - FreeOamMatrix(sprite->oam.matrixNum); - } - DestroySprite(sprite); -} - -#ifdef NONMATCHING -void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) -{ - int curRed; - int curGreen; - int curBlue; - - curRed = gPlttBufferUnfaded[i] & 0x1f; - curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5; - curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10; - curRed += (((0x1f - curRed) * r) >> 4); - curGreen += (((0x1f - curGreen) * g) >> 4); - curBlue += (((0x1f - curBlue) * b) >> 4); - gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue); -} - -void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) -{ - int curRed; - int curGreen; - int curBlue; - - curRed = gPlttBufferUnfaded[i] & 0x1f; - curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5; - curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10; - curRed -= ((curRed * r) >> 4); - curGreen -= ((curGreen * g) >> 4); - curBlue -= ((curBlue * b) >> 4); - gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue); -} -#else -__attribute__((naked)) -void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) -{ - asm(".syntax unified\n" - "\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tlsls r0, 16\n" - "\tlsls r1, 24\n" - "\tlsrs r1, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tlsls r3, 24\n" - "\tlsrs r3, 24\n" - "\tldr r4, _08085D00 @ =gPlttBufferUnfaded\n" - "\tlsrs r0, 15\n" - "\tadds r4, r0, r4\n" - "\tldrh r4, [r4]\n" - "\tmovs r5, 0x1F\n" - "\tmov r9, r5\n" - "\tmov r8, r4\n" - "\tmov r6, r8\n" - "\tands r6, r5\n" - "\tmov r8, r6\n" - "\tmovs r6, 0xF8\n" - "\tlsls r6, 2\n" - "\tands r6, r4\n" - "\tlsrs r6, 5\n" - "\tmovs r5, 0xF8\n" - "\tlsls r5, 7\n" - "\tands r4, r5\n" - "\tlsrs r4, 10\n" - "\tmov r7, r9\n" - "\tmov r5, r8\n" - "\tsubs r7, r5\n" - "\tmov r12, r7\n" - "\tmov r7, r12\n" - "\tmuls r7, r1\n" - "\tadds r1, r7, 0\n" - "\tasrs r1, 4\n" - "\tadd r8, r1\n" - "\tmov r5, r9\n" - "\tsubs r1, r5, r6\n" - "\tmuls r1, r2\n" - "\tasrs r1, 4\n" - "\tadds r6, r1\n" - "\tsubs r5, r4\n" - "\tmov r9, r5\n" - "\tmov r1, r9\n" - "\tmuls r1, r3\n" - "\tasrs r1, 4\n" - "\tadds r4, r1\n" - "\tmov r7, r8\n" - "\tlsls r7, 16\n" - "\tlsls r6, 21\n" - "\torrs r6, r7\n" - "\tlsls r4, 26\n" - "\torrs r4, r6\n" - "\tlsrs r4, 16\n" - "\tldr r1, _08085D04 @ =gPlttBufferFaded\n" - "\tadds r0, r1\n" - "\tstrh r4, [r0]\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08085D00: .4byte gPlttBufferUnfaded\n" - "_08085D04: .4byte gPlttBufferFaded\n" - ".syntax divided"); -} - -__attribute__((naked)) -void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) -{ - asm(".syntax unified\n" - "\tpush {r4-r6,lr}\n" - "\tmov r6, r8\n" - "\tpush {r6}\n" - "\tlsls r0, 16\n" - "\tlsls r1, 24\n" - "\tlsrs r1, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tlsls r3, 24\n" - "\tlsrs r3, 24\n" - "\tldr r4, _08085D78 @ =gPlttBufferUnfaded\n" - "\tlsrs r0, 15\n" - "\tadds r4, r0, r4\n" - "\tldrh r4, [r4]\n" - "\tmovs r5, 0x1F\n" - "\tmov r8, r5\n" - "\tmov r6, r8\n" - "\tands r6, r4\n" - "\tmov r8, r6\n" - "\tmovs r5, 0xF8\n" - "\tlsls r5, 2\n" - "\tands r5, r4\n" - "\tlsrs r5, 5\n" - "\tmovs r6, 0xF8\n" - "\tlsls r6, 7\n" - "\tands r4, r6\n" - "\tlsrs r4, 10\n" - "\tmov r6, r8\n" - "\tmuls r6, r1\n" - "\tadds r1, r6, 0\n" - "\tasrs r1, 4\n" - "\tmov r6, r8\n" - "\tsubs r6, r1\n" - "\tadds r1, r5, 0\n" - "\tmuls r1, r2\n" - "\tasrs r1, 4\n" - "\tsubs r5, r1\n" - "\tadds r1, r4, 0\n" - "\tmuls r1, r3\n" - "\tasrs r1, 4\n" - "\tsubs r4, r1\n" - "\tlsls r6, 16\n" - "\tlsls r5, 21\n" - "\torrs r5, r6\n" - "\tlsls r4, 26\n" - "\torrs r4, r5\n" - "\tlsrs r4, 16\n" - "\tldr r1, _08085D7C @ =gPlttBufferFaded\n" - "\tadds r0, r1\n" - "\tstrh r4, [r0]\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08085D78: .4byte gPlttBufferUnfaded\n" - "_08085D7C: .4byte gPlttBufferFaded\n" - ".syntax divided"); -} -#endif - -void Task_PokecenterHeal(u8 taskId); -u8 CreatePokeballGlowSprite(s16, s16, s16, u16); -u8 PokecenterHealEffectHelper(s16, s16); - -bool8 FldEff_PokecenterHeal(void) -{ - u8 nPokemon; - struct Task *task; - - nPokemon = CalculatePlayerPartyCount(); - task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)]; - task->data[1] = nPokemon; - task->data[2] = 0x5d; - task->data[3] = 0x24; - task->data[4] = 0x7c; - task->data[5] = 0x18; - return FALSE; -} - -void Task_PokecenterHeal(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - gUnknown_0839F268[task->data[0]](task); -} - -void PokecenterHealEffect_0(struct Task *task) -{ - task->data[0]++; - task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 1); - task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]); -} - -void PokecenterHealEffect_1(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 1) - { - gSprites[task->data[7]].data0++; - task->data[0]++; - } -} - -void PokecenterHealEffect_2(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 4) - { - task->data[0]++; - } -} - -void PokecenterHealEffect_3(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 6) - { - DestroySprite(&gSprites[task->data[6]]); - FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL); - DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal)); - } -} - -void Task_HallOfFameRecord(u8 taskId); -void HallOfFameRecordEffectHelper(s16, s16, s16, u8); - -bool8 FldEff_HallOfFameRecord(void) -{ - u8 nPokemon; - struct Task *task; - - nPokemon = CalculatePlayerPartyCount(); - task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)]; - task->data[1] = nPokemon; - task->data[2] = 0x75; - task->data[3] = 0x34; - return FALSE; -} - -void Task_HallOfFameRecord(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - gUnknown_0839F278[task->data[0]](task); -} - -void HallOfFameRecordEffect_0(struct Task *task) -{ - u8 taskId; - task->data[0]++; - task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 0); - taskId = FindTaskIdByFunc(Task_HallOfFameRecord); - HallOfFameRecordEffectHelper(taskId, 0x78, 0x18, 0); - HallOfFameRecordEffectHelper(taskId, 0x28, 0x08, 1); - HallOfFameRecordEffectHelper(taskId, 0x48, 0x08, 1); - HallOfFameRecordEffectHelper(taskId, 0xa8, 0x08, 1); - HallOfFameRecordEffectHelper(taskId, 0xc8, 0x08, 1); -} - -void HallOfFameRecordEffect_1(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 1) - { - task->data[15]++; // was this ever initialized? is this ever used? - task->data[0]++; - } -} - -void HallOfFameRecordEffect_2(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 4) - { - task->data[0]++; - } -} - -void HallOfFameRecordEffect_3(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 6) - { - DestroySprite(&gSprites[task->data[6]]); - FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD); - DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord)); - } -} - -void SpriteCB_PokeballGlowEffect(struct Sprite *); - -u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) -{ - u8 spriteId; - struct Sprite *sprite; - spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect); - sprite = &gSprites[spriteId]; - sprite->pos2.x = x; - sprite->pos2.y = y; - sprite->data5 = data5; - sprite->data6 = data6; - sprite->data7 = spriteId; - return spriteId; -} - -void SpriteCB_PokeballGlowEffect(struct Sprite *sprite) -{ - gUnknown_0839F288[sprite->data0](sprite); -} - -void PokeballGlowEffect_0(struct Sprite *sprite) -{ - u8 endSpriteId; - if (sprite->data1 == 0 || (--sprite->data1) == 0) - { - sprite->data1 = 25; - endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_839F208, gUnknown_0839F2A8[sprite->data2].x + sprite->pos2.x, gUnknown_0839F2A8[sprite->data2].y + sprite->pos2.y, 0); - gSprites[endSpriteId].oam.priority = 2; - gSprites[endSpriteId].data0 = sprite->data7; - sprite->data2++; - sprite->data6--; - PlaySE(SE_BOWA); - } - if (sprite->data6 == 0) - { - sprite->data1 = 32; - sprite->data0++; - } -} - -void PokeballGlowEffect_1(struct Sprite *sprite) -{ - if ((--sprite->data1) == 0) - { - sprite->data0++; - sprite->data1 = 8; - sprite->data2 = 0; - sprite->data3 = 0; - if (sprite->data5) - { - PlayFanfare(BGM_ME_ASA); - } - } -} - -void PokeballGlowEffect_2(struct Sprite *sprite) -{ - u8 phase; - if ((--sprite->data1) == 0) - { - sprite->data1 = 8; - sprite->data2++; - sprite->data2 &= 3; - if (sprite->data2 == 0) - { - sprite->data3++; - } - } - phase = (sprite->data2 + 3) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - phase = (sprite->data2 + 2) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - phase = (sprite->data2 + 1) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - phase = sprite->data2; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - if (sprite->data3 > 2) - { - sprite->data0++; - sprite->data1 = 8; - sprite->data2 = 0; - } -} - -void PokeballGlowEffect_3(struct Sprite *sprite) -{ - u8 phase; - if ((--sprite->data1) == 0) - { - sprite->data1 = 8; - sprite->data2++; - sprite->data2 &= 3; - if (sprite->data2 == 3) - { - sprite->data0++; - sprite->data1 = 30; - } - } - phase = sprite->data2; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); -} - -void PokeballGlowEffect_4(struct Sprite *sprite) -{ - if ((--sprite->data1) == 0) - { - sprite->data0++; - } -} - -void PokeballGlowEffect_5(struct Sprite *sprite) -{ - sprite->data0++; -} - -void PokeballGlowEffect_6(struct Sprite *sprite) -{ - if (sprite->data5 == 0 || IsFanfareTaskInactive()) - { - sprite->data0++; - } -} - -void PokeballGlowEffect_7(struct Sprite *sprite) -{ -} - -void SpriteCB_PokeballGlow(struct Sprite *sprite) -{ - if (gSprites[sprite->data0].data0 > 4) - { - FieldEffectFreeGraphicsResources(sprite); - } -} - -u8 PokecenterHealEffectHelper(s16 x, s16 y) -{ - u8 spriteIdAtEnd; - struct Sprite *sprite; - spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F220, x, y, 0); - sprite = &gSprites[spriteIdAtEnd]; - sprite->oam.priority = 2; - sprite->invisible = 1; - SetSubspriteTables(sprite, &gUnknown_0839F1A0); - return spriteIdAtEnd; -} - -void SpriteCB_PokecenterMonitor(struct Sprite *sprite) -{ - if (sprite->data0 != 0) - { - sprite->data0 = 0; - sprite->invisible = 0; - StartSpriteAnim(sprite, 1); - } - if (sprite->animEnded) - { - FieldEffectFreeGraphicsResources(sprite); - } -} - -void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3) -{ - u8 spriteIdAtEnd; - if (!a3) - { - spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F238, a1, a2, 0); - SetSubspriteTables(&gSprites[spriteIdAtEnd], &gUnknown_0839F1C8); - } else - { - spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F250, a1, a2, 0); - } - gSprites[spriteIdAtEnd].invisible = 1; - gSprites[spriteIdAtEnd].data0 = a0; -} - -void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) -{ - if (gTasks[sprite->data0].data[15]) - { - if (sprite->data1 == 0 || (--sprite->data1) == 0) - { - sprite->data1 = 16; - sprite->invisible ^= 1; - } - sprite->data2++; - } - if (sprite->data2 > 127) - { - FieldEffectFreeGraphicsResources(sprite); - } -} - -void mapldr_080842E8(void); -void mapldr_08084390(void); -void task00_8084310(u8); -void c3_080843F8(u8); - -void sub_80865BC(void) -{ - SetMainCallback2(c2_exit_to_overworld_2_switch); - gFieldCallback = mapldr_080842E8; -} - -void mapldr_080842E8(void) -{ - pal_fill_black(); - CreateTask(task00_8084310, 0); - ScriptContext2_Enable(); - FreezeMapObjects(); - gFieldCallback = NULL; -} - -void task00_8084310(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - if (!task->data[0]) - { - if (!sub_807D770()) - { - return; - } - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - if ((int)gUnknown_0202FF84[0] > 5) - { - gUnknown_0202FF84[0] = 0; - } - FieldEffectStart(FLDEFF_USE_FLY); - task->data[0]++; - } - if (!FieldEffectActiveListContains(FLDEFF_USE_FLY)) - { - flag_var_implications_of_teleport_(); - warp_in(); - SetMainCallback2(CB2_LoadMap); - gFieldCallback = mapldr_08084390; - DestroyTask(taskId); - } -} - -void mapldr_08084390(void) -{ - sub_8053E90(); - pal_fill_black(); - CreateTask(c3_080843F8, 0); - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - if (gPlayerAvatar.flags & 0x08) - { - FieldObjectTurn(&gMapObjects[gPlayerAvatar.mapObjectId], DIR_WEST); - } - ScriptContext2_Enable(); - FreezeMapObjects(); - gFieldCallback = NULL; -} - -void c3_080843F8(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - if (task->data[0] == 0) - { - if (gPaletteFade.active) - { - return; - } - FieldEffectStart(FLDEFF_FLY_IN); - task->data[0]++; - } - if (!FieldEffectActiveListContains(FLDEFF_FLY_IN)) - { - ScriptContext2_Disable(); - UnfreezeMapObjects(); - DestroyTask(taskId); - } -} - -extern void pal_fill_for_map_transition(void); -void sub_8086774(u8); -extern void CameraObjectReset2(void); -extern void CameraObjectReset1(void); - -void sub_8086748(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - FreezeMapObjects(); - CreateTask(sub_8086774, 0); - gFieldCallback = NULL; -} - -void sub_8086774(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - while (gUnknown_0839F2CC[task->data[0]](task)); // return code signifies whether to continue blocking here -} - -bool8 sub_80867AC(struct Task *task) // gUnknown_0839F2CC[0] -{ - struct MapObject *playerObject; - struct Sprite *playerSprite; - playerObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - playerSprite = &gSprites[gPlayerAvatar.spriteId]; - CameraObjectReset2(); - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - gPlayerAvatar.unk6 = 1; - FieldObjectSetSpecialAnim(playerObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble())); - task->data[4] = playerSprite->subspriteMode; - playerObject->mapobj_bit_26 = 1; - playerSprite->oam.priority = 1; - playerSprite->subspriteMode = 2; - task->data[0]++; - return TRUE; -} - -bool8 sub_8086854(struct Task *task) // gUnknown_0839F2CC[1] -{ - if (sub_807D770()) - { - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8086870(struct Task *task) // gUnknown_0839F2CC[2] -{ - struct Sprite *sprite; - s16 centerToCornerVecY; - sprite = &gSprites[gPlayerAvatar.spriteId]; - centerToCornerVecY = -(sprite->centerToCornerVecY << 1); - sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); - task->data[1] = 1; - task->data[2] = 0; - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0; - PlaySE(SE_RU_HYUU); - task->data[0]++; - return FALSE; -} - -bool8 sub_80868E4(struct Task *task) -{ - struct MapObject *mapObject; - struct Sprite *sprite; - - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.y += task->data[1]; - if (task->data[1] < 8) - { - task->data[2] += task->data[1]; - if (task->data[2] & 0xf) - { - task->data[1] <<= 1; - } - } - if (task->data[3] == 0 && sprite->pos2.y >= -16) - { - task->data[3]++; - mapObject->mapobj_bit_26 = 0; - sprite->subspriteMode = task->data[4]; - mapObject->mapobj_bit_2 = 1; - } - if (sprite->pos2.y >= 0) - { - PlaySE(SE_W070); - mapObject->mapobj_bit_3 = 1; - mapObject->mapobj_bit_5 = 1; - sprite->pos2.y = 0; - task->data[0]++; - } - return FALSE; -} - -bool8 sub_808699C(struct Task *task) -{ - task->data[0]++; - task->data[1] = 4; - task->data[2] = 0; - SetCameraPanningCallback(NULL); - return TRUE; -} - -bool8 sub_80869B8(struct Task *task) -{ - SetCameraPanning(0, task->data[1]); - task->data[1] = -task->data[1]; - task->data[2]++; - if ((task->data[2] & 3) == 0) - { - task->data[1] >>= 1; - } - if (task->data[1] == 0) - { - task->data[0]++; - } - return FALSE; -} - -bool8 sub_80869F8(struct Task *task) -{ - gPlayerAvatar.unk6 = 0; - ScriptContext2_Disable(); - CameraObjectReset1(); - UnfreezeMapObjects(); - InstallCameraPanAheadCallback(); - DestroyTask(FindTaskIdByFunc(sub_8086774)); - return FALSE; -} - -void sub_8086A68(u8); -extern void sub_80B4824(u8); -extern void sub_8053FF8(void); -extern void fade_8080918(void); - -void sub_8086B98(struct Task *); -void sub_8086BE4(struct Task *); -void sub_8086C30(void); -void sub_8086C40(void); -bool8 sub_8054034(void); -void sub_8086C94(void); -void sub_80B483C(void); -void sub_8086CBC(u8); - -void sub_8086A2C(u8 a0, u8 priority) -{ - u8 taskId; - taskId = CreateTask(sub_8086A68, priority); - gTasks[taskId].data[1] = 0; - if (a0 == 0x6a) - { - gTasks[taskId].data[1] = 1; - } -} - -void sub_8086A68(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - while (gUnknown_0839F2E8[task->data[0]](task)); -} - -bool8 sub_8086AA0(struct Task *task) -{ - FreezeMapObjects(); - CameraObjectReset2(); - sub_80B4824(task->data[1]); - task->data[0]++; - return FALSE; -} - -bool8 sub_8086AC0(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble())); - task->data[0]++; - task->data[2] = 0; - task->data[3] = 0; - if ((u8)task->data[1] == 0) - { - task->data[0] = 4; - } - PlaySE(SE_ESUKA); - } - return FALSE; -} - -bool8 sub_8086B30(struct Task *task) -{ - sub_8086B98(task); - if (task->data[2] > 3) - { - sub_8086C30(); - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8086B54(struct Task *task) -{ - sub_8086B98(task); - sub_8086C40(); - return FALSE; -} - -bool8 sub_8086B64(struct Task *task) -{ - sub_8086BE4(task); - if (task->data[2] > 3) - { - sub_8086C30(); - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8086B88(struct Task *task) -{ - sub_8086BE4(task); - sub_8086C40(); - return FALSE; -} - -void sub_8086B98(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x84, task->data[2]); - sprite->pos2.y = Sin(0x94, task->data[2]); - task->data[3]++; - if (task->data[3] & 1) - { - task->data[2]++; - } -} - -void sub_8086BE4(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x7c, task->data[2]); - sprite->pos2.y = Sin(0x76, task->data[2]); - task->data[3]++; - if (task->data[3] & 1) - { - task->data[2]++; - } -} - -void sub_8086C30(void) -{ - sub_8053FF8(); - fade_8080918(); -} - -void sub_8086C40(void) -{ - if (!gPaletteFade.active && sub_8054034() == TRUE) - { - sub_80B483C(); - warp_in(); - gFieldCallback = sub_8086C94; - SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_8086A68)); - } -} - -void sub_8086C94(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - CreateTask(sub_8086CBC, 0); - gFieldCallback = NULL; -} - -void sub_8086CBC(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - while (gUnknown_0839F300[task->data[0]](task)); -} - -bool8 sub_8086CF4(struct Task *task) -{ - struct MapObject *mapObject; - s16 x; - s16 y; - u8 behavior; - CameraObjectReset2(); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(DIR_EAST)); - PlayerGetDestCoords(&x, &y); - behavior = MapGridGetMetatileBehaviorAt(x, y); - task->data[0]++; - task->data[1] = 16; - if (behavior == 0x6b) - { - behavior = 1; - task->data[0] = 3; - } else - { - behavior = 0; - } - sub_80B4824(behavior); - return TRUE; -} - -bool8 sub_8086D70(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x84, task->data[1]); - sprite->pos2.y = Sin(0x94, task->data[1]); - task->data[0]++; - return FALSE; -} - -bool8 sub_8086DB0(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x84, task->data[1]); - sprite->pos2.y = Sin(0x94, task->data[1]); - task->data[2]++; - if (task->data[2] & 1) - { - task->data[1]--; - } - if (task->data[1] == 0) - { - sprite->pos2.x = 0; - sprite->pos2.y = 0; - task->data[0] = 5; - } - return FALSE; -} - -bool8 sub_8086E10(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x7c, task->data[1]); - sprite->pos2.y = Sin(0x76, task->data[1]); - task->data[0]++; - return FALSE; -} - -bool8 sub_8086E50(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x7c, task->data[1]); - sprite->pos2.y = Sin(0x76, task->data[1]); - task->data[2]++; - if (task->data[2] & 1) - { - task->data[1]--; - } - if (task->data[1] == 0) - { - sprite->pos2.x = 0; - sprite->pos2.y = 0; - task->data[0]++; - } - return FALSE; -} - -extern bool8 sub_80B4850(void); - -bool8 sub_8086EB0(struct Task *task) -{ - if (sub_80B4850()) - { - return FALSE; - } - sub_80B483C(); - task->data[0]++; - return TRUE; -} - -bool8 sub_8086ED4(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - CameraObjectReset1(); - ScriptContext2_Disable(); - FieldObjectSetSpecialAnim(mapObject, GetGoSpeed0AnimId(DIR_EAST)); - DestroyTask(FindTaskIdByFunc(sub_8086CBC)); - } - return FALSE; -} - -void sub_8086F64(u8); - -bool8 FldEff_UseWaterfall(void) -{ - u8 taskId; - taskId = CreateTask(sub_8086F64, 0xff); - gTasks[taskId].data[1] = gUnknown_0202FF84[0]; - sub_8086F64(taskId); - return FALSE; -} - -void sub_8086F64(u8 taskId) -{ - while (gUnknown_0839F31C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])); -} - -bool8 sub_8086FB0(struct Task *task, struct MapObject *mapObject) -{ - ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; - task->data[0]++; - return FALSE; -} - -bool8 waterfall_1_do_anim_probably(struct Task *task, struct MapObject *mapObject) -{ - ScriptContext2_Enable(); - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)) - { - FieldObjectClearAnimIfSpecialAnimFinished(mapObject); - gUnknown_0202FF84[0] = task->data[1]; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - task->data[0]++; - } - return FALSE; -} - -bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct MapObject *mapObject) -{ - if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) - { - return FALSE; - } - task->data[0]++; - return TRUE; -} - -bool8 sub_8087030(struct Task *task, struct MapObject *mapObject) -{ - FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(DIR_NORTH)); - task->data[0]++; - return FALSE; -} - -bool8 sub_8087058(struct Task *task, struct MapObject *mapObject) -{ - if (!FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - return FALSE; - } - if (MetatileBehavior_IsWaterfall(mapObject->mapobj_unk_1E)) - { - task->data[0] = 3; - return TRUE; - } - ScriptContext2_Disable(); - gPlayerAvatar.unk6 = 0; - DestroyTask(FindTaskIdByFunc(sub_8086F64)); - FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); - return FALSE; -} - -void Task_Dive(u8); -extern int dive_warp(struct MapPosition *, u16); - -bool8 FldEff_UseDive(void) -{ - u8 taskId; - taskId = CreateTask(Task_Dive, 0xff); - gTasks[taskId].data[15] = gUnknown_0202FF84[0]; - gTasks[taskId].data[14] = gUnknown_0202FF84[1]; - Task_Dive(taskId); - return FALSE; -} - -void Task_Dive(u8 taskId) -{ - while (gUnknown_0839F330[gTasks[taskId].data[0]](&gTasks[taskId])); -} - -bool8 sub_8087124(struct Task *task) -{ - gPlayerAvatar.unk6 = 1; - task->data[0]++; - return FALSE; -} - -bool8 dive_2_unknown(struct Task *task) -{ - ScriptContext2_Enable(); - gUnknown_0202FF84[0] = task->data[15]; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - task->data[0]++; - return FALSE; -} - -bool8 dive_3_unknown(struct Task *task) -{ - struct MapPosition mapPosition; - PlayerGetDestCoords(&mapPosition.x, &mapPosition.y); - if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) - { - dive_warp(&mapPosition, gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E); - DestroyTask(FindTaskIdByFunc(Task_Dive)); - FieldEffectActiveListRemove(FLDEFF_USE_DIVE); - } - return FALSE; -} - -void sub_80871D0(u8); -void mapldr_080851BC(void); - -void sub_80871B8(u8 priority) -{ - CreateTask(sub_80871D0, priority); -} - -void sub_80871D0(u8 taskId) -{ - while (gUnknown_0839F33C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); -} - -bool8 sub_808722C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - FreezeMapObjects(); - CameraObjectReset2(); - SetCameraPanningCallback(NULL); - gPlayerAvatar.unk6 = 1; - mapObject->mapobj_bit_26 = 1; - task->data[1] = 1; - task->data[0]++; - return TRUE; -} - -bool8 sub_8087264(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - SetCameraPanning(0, task->data[1]); - task->data[1] = -task->data[1]; - task->data[2]++; - if (task->data[2] > 7) - { - task->data[2] = 0; - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8087298(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite->pos2.y = 0; - task->data[3] = 1; - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; - FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP); - PlaySE(SE_W153); - task->data[0]++; - return TRUE; -} - -bool8 sub_80872E4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - s16 centerToCornerVecY; - SetCameraPanning(0, task->data[1]); - if (task->data[1] = -task->data[1], ++task->data[2] <= 17) - { - if (!(task->data[2] & 1) && (task->data[1] <= 3)) - { - task->data[1] <<= 1; - } - } else if (!(task->data[2] & 4) && (task->data[1] > 0)) - { - task->data[1] >>= 1; - } - if (task->data[2] > 6) - { - centerToCornerVecY = -(sprite->centerToCornerVecY << 1); - if (sprite->pos2.y > -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY)) - { - sprite->pos2.y -= task->data[3]; - if (task->data[3] <= 7) - { - task->data[3]++; - } - } else - { - task->data[4] = 1; - } - } - if (task->data[5] == 0 && sprite->pos2.y < -0x10) - { - task->data[5]++; - mapObject->mapobj_bit_26 = 1; - sprite->oam.priority = 1; - sprite->subspriteMode = 2; - } - if (task->data[1] == 0 && task->data[4] != 0) - { - task->data[0]++; - } - return FALSE; -} - -bool8 sub_80873D8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8053FF8(); - fade_8080918(); - task->data[0]++; - return FALSE; -} - -bool8 sub_80873F4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (!gPaletteFade.active && sub_8054034() == TRUE) - { - warp_in(); - gFieldCallback = mapldr_080851BC; - SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_80871D0)); - } - return FALSE; -} - -void sub_8087470(u8); -extern u8 sub_80608A4(u8); - -void mapldr_080851BC(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - gFieldCallback = NULL; - CreateTask(sub_8087470, 0); -} - -void sub_8087470(u8 taskId) -{ - while (gUnknown_0839F354[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); -} - -bool8 sub_80874CC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - CameraObjectReset2(); - FreezeMapObjects(); - gPlayerAvatar.unk6 = 1; - mapObject->mapobj_bit_13 = 1; - task->data[0]++; - return FALSE; -} - -bool8 sub_80874FC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_807D770()) - { - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; - task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8087548(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite = &gSprites[task->data[1]]; - if (sprite->animCmdIndex > 1) - { - task->data[0]++; - mapObject->mapobj_bit_13 = 0; - CameraObjectReset1(); - PlaySE(SE_W091); - FieldObjectSetSpecialAnim(mapObject, sub_80608A4(DIR_EAST)); - } - return FALSE; -} - -bool8 sub_808759C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - gPlayerAvatar.unk6 = 0; - ScriptContext2_Disable(); - UnfreezeMapObjects(); - DestroyTask(FindTaskIdByFunc(sub_8087470)); - } - return FALSE; -} - -extern void sub_8060470(s16 *x, s16 *y, s16 dx, s16 dy); -extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; - -u8 FldEff_LavaridgeGymWarp(void) -{ - u8 spriteId; - sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); - gSprites[spriteId].oam.priority = gUnknown_0202FF84[3]; - gSprites[spriteId].coordOffsetEnabled = 1; - return spriteId; -} - -void sub_8087638(struct Sprite *sprite) -{ - if (sprite->animEnded) - { - FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP); - } -} - -void sub_808766C(u8); - -void sub_8087654(u8 priority) -{ - CreateTask(sub_808766C, priority); -} - -void sub_808766C(u8 taskId) -{ - while(gUnknown_0839F364[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); -} - -bool8 sub_80876C8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - FreezeMapObjects(); - CameraObjectReset2(); - gPlayerAvatar.unk6 = 1; - mapObject->mapobj_bit_26 = 1; - task->data[0]++; - return FALSE; -} - -bool8 sub_80876F8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - if (task->data[1] > 3) - { - gUnknown_0202FF84[0] = mapObject->coords2.x; - gUnknown_0202FF84[1] = mapObject->coords2.y; - gUnknown_0202FF84[2] = sprite->subpriority - 1; - gUnknown_0202FF84[3] = sprite->oam.priority; - task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); - task->data[0]++; - } else - { - task->data[1]++; - FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18)); - PlaySE(SE_FU_ZUZUZU); - } - } - return FALSE; -} - -bool8 sub_8087774(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (gSprites[task->data[1]].animCmdIndex == 2) - { - mapObject->mapobj_bit_13 = 1; - task->data[0]++; - } - return FALSE; -} - -bool8 sub_80877AC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) - { - sub_8053FF8(); - fade_8080918(); - task->data[0]++; - } - return FALSE; -} - -void sub_80878C4(u8); -void mapldr_080859D4(void); - -bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (!gPaletteFade.active && sub_8054034() == TRUE) - { - warp_in(); - gFieldCallback = sub_8086748; - SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_808766C)); - } - return FALSE; -} - -u8 FldEff_PopOutOfAsh(void) -{ - u8 spriteId; - sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); - gSprites[spriteId].oam.priority = gUnknown_0202FF84[3]; - gSprites[spriteId].coordOffsetEnabled = 1; - return spriteId; -} - -void sub_808788C(struct Sprite *sprite) -{ - if (sprite->animEnded) - { - FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH); - } -} - -void sub_80878A8(void) -{ - ScriptContext2_Enable(); - FreezeMapObjects(); - CreateTask(sub_80878C4, 0x50); -} - -void sub_80878C4(u8 taskId) -{ - gUnknown_0839F378[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_80878F4(struct Task *task) -{ - task->data[0]++; - task->data[14] = 64; - task->data[15] = player_get_direction_lower_nybble(); -} - -void sub_8087914(struct Task *task) -{ - struct MapObject *mapObject; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - if (task->data[14] != 0 && (--task->data[14]) == 0) - { - sub_8053FF8(); - fade_8080918(); - } - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - if (task->data[14] == 0 && !gPaletteFade.active && sub_8054034() == TRUE) - { - FieldObjectSetDirection(mapObject, task->data[15]); - sub_8053678(); - warp_in(); - gFieldCallback = mapldr_080859D4; - SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_80878C4)); - } else if (task->data[1] == 0 || (--task->data[1]) == 0) - { - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18])); - if (task->data[2] < 12) - { - task->data[2]++; - } - task->data[1] = 8 >> (task->data[2] >> 2); - } - } -} - -void sub_8087A74(u8); - -void mapldr_080859D4(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - FreezeMapObjects(); - gFieldCallback = NULL; - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - CreateTask(sub_8087A74, 0); -} - -void sub_8087A74(u8 taskId) -{ - gUnknown_0839F388[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8087AA4(struct Task *task) -{ - if (sub_807D770()) - { - task->data[0]++; - task->data[15] = player_get_direction_lower_nybble(); - } -} - -void sub_8087AC8(struct Task *task) -{ - struct MapObject *mapObject; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (task->data[1] == 0 || (--task->data[1]) == 0) - { - if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) && !FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - return; - } - if (task->data[2] >= 32 && task->data[15] == player_get_direction_lower_nybble()) - { - mapObject->mapobj_bit_13 = 0; - ScriptContext2_Disable(); - UnfreezeMapObjects(); - DestroyTask(FindTaskIdByFunc(sub_8087A74)); - return; - } - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18])); - if (task->data[2] < 32) - { - task->data[2]++; - } - task->data[1] = task->data[2] >> 2; - } - mapObject->mapobj_bit_13 ^= 1; -} - -void sub_8087BBC(u8); -void mapldr_08085D88(void); - -void sub_8087BA8(void) -{ - CreateTask(sub_8087BBC, 0); -} - -void sub_8087BBC(u8 taskId) -{ - gUnknown_0839F390[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8087BEC(struct Task *task) -{ - ScriptContext2_Enable(); - FreezeMapObjects(); - CameraObjectReset2(); - task->data[15] = player_get_direction_lower_nybble(); - task->data[0]++; -} - -void sub_8087C14(struct Task *task) -{ - struct MapObject *mapObject; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (task->data[1] == 0 || (--task->data[1]) == 0) - { - FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); - task->data[1] = 8; - task->data[2]++; - } - if (task->data[2] > 7 && task->data[15] == mapObject->mapobj_unk_18) - { - task->data[0]++; - task->data[1] = 4; - task->data[2] = 8; - task->data[3] = 1; - PlaySE(SE_TK_WARPIN); - } -} - -void sub_8087CA4(struct Task *task) -{ - struct MapObject *mapObject; - struct Sprite *sprite; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[gPlayerAvatar.spriteId]; - if ((--task->data[1]) <= 0) - { - task->data[1] = 4; - FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); - } - sprite->pos1.y -= task->data[3]; - task->data[4] += task->data[3]; - if ((--task->data[2]) <= 0 && (task->data[2] = 4, task->data[3] < 8)) - { - task->data[3] <<= 1; - } - if (task->data[4] > 8 && (sprite->oam.priority = 1, sprite->subspriteMode != 0)) - { - sprite->subspriteMode = 2; - } - if (task->data[4] >= 0xa8) - { - task->data[0]++; - sub_8053FF8(); - fade_8080918(); - } -} - -void sub_8087D78(struct Task *task) -{ - if (!gPaletteFade.active && sub_8054034() == TRUE) - { - sub_8053570(); - warp_in(); - SetMainCallback2(CB2_LoadMap); - gFieldCallback = mapldr_08085D88; - DestroyTask(FindTaskIdByFunc(sub_8087BBC)); - } -} - -void sub_8087E1C(u8); - -void mapldr_08085D88(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - FreezeMapObjects(); - gFieldCallback = NULL; - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - CameraObjectReset2(); - CreateTask(sub_8087E1C, 0); -} - -void sub_8087E1C(u8 taskId) -{ - gUnknown_0839F3A0[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8087E4C(struct Task *task) -{ - struct Sprite *sprite; - s16 centerToCornerVecY; - if (sub_807D770()) - { - sprite = &gSprites[gPlayerAvatar.spriteId]; - centerToCornerVecY = -(sprite->centerToCornerVecY << 1); - sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0; - task->data[0]++; - task->data[1] = 8; - task->data[2] = 1; - task->data[14] = sprite->subspriteMode; - task->data[15] = player_get_direction_lower_nybble(); - PlaySE(SE_TK_WARPIN); - } -} - -void sub_8087ED8(struct Task *task) -{ - u8 unknown_0839F380[5]; - struct MapObject *mapObject; - struct Sprite *sprite; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[gPlayerAvatar.spriteId]; - if ((sprite->pos2.y += task->data[1]) >= -8) - { - if (task->data[13] == 0) - { - task->data[13]++; - mapObject->mapobj_bit_2 = 1; - sprite->subspriteMode = task->data[14]; - } - } else - { - sprite->oam.priority = 1; - if (sprite->subspriteMode != 0) - { - sprite->subspriteMode = 2; - } - } - if (sprite->pos2.y >= -0x30 && task->data[1] > 1 && !(sprite->pos2.y & 1)) - { - task->data[1]--; - } - if ((--task->data[2]) == 0) - { - task->data[2] = 4; - FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); - } - if (sprite->pos2.y >= 0) - { - sprite->pos2.y = 0; - task->data[0]++; - task->data[1] = 1; - task->data[2] = 0; - } -} - -void sub_8087FDC(struct Task *task) -{ - u8 unknown_0839F380[5]; - struct MapObject *mapObject; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if ((--task->data[1]) == 0) - { - FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); - task->data[1] = 8; - if ((++task->data[2]) > 4 && task->data[14] == mapObject->mapobj_unk_18) - { - ScriptContext2_Disable(); - CameraObjectReset1(); - UnfreezeMapObjects(); - DestroyTask(FindTaskIdByFunc(sub_8087E1C)); - } - } -} - -void sub_8088120(u8); -void sub_808847C(u8); -u8 sub_8088830(u32, u32, u32); -void sub_80883DC(void); -void sub_808843C(u16); -void sub_8088890(struct Sprite *); - -bool8 FldEff_FieldMoveShowMon(void) -{ - u8 taskId; - if (is_light_level_1_2_3_5_or_6(sav1_map_get_light_level()) == TRUE) - { - taskId = CreateTask(sub_8088120, 0xff); - } else - { - taskId = CreateTask(sub_808847C, 0xff); - } - gTasks[taskId].data[15] = sub_8088830(gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); - return FALSE; -} - -bool8 FldEff_FieldMoveShowMonInit(void) -{ - struct Pokemon *pokemon; - u32 flag = gUnknown_0202FF84[0] & 0x80000000; - pokemon = &gPlayerParty[(u8)gUnknown_0202FF84[0]]; - gUnknown_0202FF84[0] = GetMonData(pokemon, MON_DATA_SPECIES); - gUnknown_0202FF84[1] = GetMonData(pokemon, MON_DATA_OT_ID); - gUnknown_0202FF84[2] = GetMonData(pokemon, MON_DATA_PERSONALITY); - gUnknown_0202FF84[0] |= flag; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON); - FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - return FALSE; -} - -void sub_8088120(u8 taskId) -{ - gUnknown_0839F3AC[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8088150(struct Task *task) -{ - task->data[11] = REG_WININ; - task->data[12] = REG_WINOUT; - StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); - task->data[1] = 0xf0f1; - task->data[2] = 0x5051; - task->data[3] = 0x3f; - task->data[4] = 0x3e; - REG_WIN0H = task->data[1]; - REG_WIN0V = task->data[2]; - REG_WININ = task->data[3]; - REG_WINOUT = task->data[4]; - SetVBlankCallback(sub_80883DC); - task->data[0]++; -} - -void sub_80881C0(struct Task *task) -{ - u16 offset; - u16 delta; - offset = ((REG_BG0CNT >> 2) << 14); - delta = ((REG_BG0CNT >> 8) << 11); - CpuCopy16(gFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x200); - CpuFill32(0, (void *)(VRAM + delta), 0x800); - LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20); - sub_808843C(delta); - task->data[0]++; -} - -void sub_8088228(struct Task *task) -{ - s16 v0; - s16 v2; - s16 v3; - task->data[5] -= 16; - v0 = ((u16)task->data[1] >> 8); - v2 = ((u16)task->data[2] >> 8); - v3 = ((u16)task->data[2] & 0xff); - v0 -= 16; - v2 -= 2; - v3 += 2; - if (v0 < 0) - { - v0 = 0; - } - if (v2 < 0x28) - { - v2 = 0x28; - } - if (v3 > 0x78) - { - v3 = 0x78; - } - task->data[1] = (v0 << 8) | (task->data[1] & 0xff); - task->data[2] = (v2 << 8) | v3; - if (v0 == 0 && v2 == 0x28 && v3 == 0x78) - { - gSprites[task->data[15]].callback = sub_8088890; - task->data[0]++; - } -} - -void sub_80882B4(struct Task *task) -{ - task->data[5] -= 16; - if (gSprites[task->data[15]].data7) - { - task->data[0]++; - } -} - -void sub_80882E4(struct Task *task) -{ - s16 v2; - s16 v3; - task->data[5] -= 16; - v2 = (task->data[2] >> 8); - v3 = (task->data[2] & 0xff); - v2 += 6; - v3 -= 6; - if (v2 > 0x50) - { - v2 = 0x50; - } - if (v3 < 0x51) - { - v3 = 0x51; - } - task->data[2] = (v2 << 8) | v3; - if (v2 == 0x50 && v3 == 0x51) - { - task->data[0]++; - } -} - -void sub_8088338(struct Task *task) -{ - u16 bg0cnt; - bg0cnt = (REG_BG0CNT >> 8) << 11; - CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); - task->data[1] = 0xf1; - task->data[2] = 0xa1; - task->data[3] = task->data[11]; - task->data[4] = task->data[12]; - task->data[0]++; -} - -void sub_8088380(struct Task *task) -{ - IntrCallback callback; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); - SetVBlankCallback(callback); - SetUpWindowConfig(&gWindowConfig_81E6CE4); - InitMenuWindow(&gWindowConfig_81E6CE4); - FreeResourcesAndDestroySprite(&gSprites[task->data[15]]); - FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); - DestroyTask(FindTaskIdByFunc(sub_8088120)); -} - -void sub_80883DC(void) -{ - struct Task *task; - IntrCallback callback; - task = &gTasks[FindTaskIdByFunc(sub_8088120)]; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); - callback(); - REG_WIN0H = task->data[1]; - REG_WIN0V = task->data[2]; - REG_WININ = task->data[3]; - REG_WINOUT = task->data[4]; - REG_BG0HOFS = task->data[5]; - REG_BG0VOFS = task->data[6]; -} - -void sub_808843C(u16 offs) -{ - u16 i; - u16 *dest; - dest = (u16 *)(VRAM + 0x140 + offs); - for (i=0; i<0x140; i++, dest++) - { - *dest = gFieldMoveStreaksTilemap[i] | 0xf000; - } -} - -void sub_80886B0(void); -bool8 sub_8088708(struct Task *); -void sub_80886F8(struct Task *); -bool8 sub_80887C0(struct Task *); - -void sub_808847C(u8 taskId) -{ - gUnknown_0839F3C8[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_80884AC(struct Task *task) -{ - REG_BG0HOFS = task->data[1]; - REG_BG0VOFS = task->data[2]; - StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); - SetVBlankCallback(sub_80886B0); - task->data[0]++; -} - -void sub_80884E8(struct Task *task) -{ - u16 offset; - u16 delta; - offset = ((REG_BG0CNT >> 2) << 14); - delta = ((REG_BG0CNT >> 8) << 11); - task->data[12] = delta; - CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x80); - CpuFill32(0, (void *)(VRAM + delta), 0x800); - LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20); - task->data[0]++; -} - -void sub_8088554(struct Task *task) -{ - if (sub_8088708(task)) - { - REG_WIN1H = 0x00f0; - REG_WIN1V = 0x2878; - gSprites[task->data[15]].callback = sub_8088890; - task->data[0]++; - } - sub_80886F8(task); -} - -void sub_80885A8(struct Task *task) -{ - sub_80886F8(task); - if (gSprites[task->data[15]].data7) - { - task->data[0]++; - } -} - -void sub_80885D8(struct Task *task) -{ - sub_80886F8(task); - task->data[3] = task->data[1] & 7; - task->data[4] = 0; - REG_WIN1H = 0xffff; - REG_WIN1V = 0xffff; - task->data[0]++; -} - -void sub_808860C(struct Task *task) -{ - sub_80886F8(task); - if (sub_80887C0(task)) - { - task->data[0]++; - } -} - -void sub_808862C(struct Task *task) -{ - IntrCallback intrCallback; - u16 bg0cnt; - bg0cnt = (REG_BG0CNT >> 8) << 11; - CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); - SetVBlankCallback(intrCallback); - SetUpWindowConfig(&gWindowConfig_81E6CE4); - InitMenuWindow(&gWindowConfig_81E6CE4); - FreeResourcesAndDestroySprite(&gSprites[task->data[15]]); - FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); - DestroyTask(FindTaskIdByFunc(sub_808847C)); -} - -void sub_80886B0(void) -{ - IntrCallback intrCallback; - struct Task *task; - task = &gTasks[FindTaskIdByFunc(sub_808847C)]; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); - intrCallback(); - REG_BG0HOFS = task->data[1]; - REG_BG0VOFS = task->data[2]; -} - -void sub_80886F8(struct Task *task) -{ - task->data[1] -= 16; - task->data[3] += 16; -} - -#ifdef NONMATCHING -bool8 sub_8088708(struct Task *task) -{ - u16 i; - u16 srcOffs; - u16 dstOffs; - u16 *dest; - if (task->data[4] >= 32) - { - return TRUE; - } - dstOffs = (task->data[3] >> 3) & 0x1f; - if (dstOffs >= task->data[4]) - { - dstOffs = (32 - dstOffs) & 0x1f; - srcOffs = (32 - task->data[4]) & 0x1f; - dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); - for (i=0; i<10; i++) - { - dest[dstOffs + i * 32] = gDarknessFieldMoveStreaksTilemap[srcOffs + i * 32] | 0xf000; - dest[((dstOffs + 1) & 0x1f) + i * 32] = gDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000; - } - task->data[4] += 2; - } - return FALSE; -} -#else -__attribute__((naked)) -bool8 sub_8088708(struct Task *task) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x4\n" - "\tadds r5, r0, 0\n" - "\tldrh r2, [r5, 0x10]\n" - "\tmovs r1, 0x10\n" - "\tldrsh r0, [r5, r1]\n" - "\tcmp r0, 0x1F\n" - "\tble _08088724\n" - "\tmovs r0, 0x1\n" - "\tb _080887A8\n" - "_08088724:\n" - "\tldrh r0, [r5, 0xE]\n" - "\tlsls r0, 16\n" - "\tasrs r3, r0, 19\n" - "\tmovs r1, 0x1F\n" - "\tands r3, r1\n" - "\tmovs r4, 0x10\n" - "\tldrsh r0, [r5, r4]\n" - "\tcmp r3, r0\n" - "\tblt _080887A6\n" - "\tmovs r0, 0x20\n" - "\tsubs r3, r0, r3\n" - "\tands r3, r1\n" - "\tsubs r0, r2\n" - "\tmov r12, r0\n" - "\tmov r7, r12\n" - "\tands r7, r1\n" - "\tmov r12, r7\n" - "\tldrh r0, [r5, 0x20]\n" - "\tldr r1, _080887B8 @ =0x06000140\n" - "\tadds r1, r0\n" - "\tmov r8, r1\n" - "\tmovs r4, 0\n" - "\tldr r7, _080887BC @ =gDarknessFieldMoveStreaksTilemap\n" - "\tmov r10, r7\n" - "\tmovs r0, 0xF0\n" - "\tlsls r0, 8\n" - "\tmov r9, r0\n" - "\tadds r1, r3, 0x1\n" - "\tmovs r0, 0x1F\n" - "\tands r1, r0\n" - "\tstr r1, [sp]\n" - "\tmov r6, r12\n" - "\tadds r6, 0x1\n" - "\tands r6, r0\n" - "_08088768:\n" - "\tlsls r1, r4, 5\n" - "\tadds r2, r1, r3\n" - "\tlsls r2, 1\n" - "\tadd r2, r8\n" - "\tmov r7, r12\n" - "\tadds r0, r7, r1\n" - "\tlsls r0, 1\n" - "\tadd r0, r10\n" - "\tldrh r0, [r0]\n" - "\tmov r7, r9\n" - "\torrs r0, r7\n" - "\tstrh r0, [r2]\n" - "\tldr r0, [sp]\n" - "\tadds r2, r1, r0\n" - "\tlsls r2, 1\n" - "\tadd r2, r8\n" - "\tadds r1, r6, r1\n" - "\tlsls r1, 1\n" - "\tadd r1, r10\n" - "\tldrh r0, [r1]\n" - "\tmov r1, r9\n" - "\torrs r0, r1\n" - "\tstrh r0, [r2]\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tcmp r4, 0x9\n" - "\tbls _08088768\n" - "\tldrh r0, [r5, 0x10]\n" - "\tadds r0, 0x2\n" - "\tstrh r0, [r5, 0x10]\n" - "_080887A6:\n" - "\tmovs r0, 0\n" - "_080887A8:\n" - "\tadd sp, 0x4\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_080887B8: .4byte 0x06000140\n" - "_080887BC: .4byte gDarknessFieldMoveStreaksTilemap"); -} -#endif - -bool8 sub_80887C0(struct Task *task) -{ - u16 i; - u16 dstOffs; - u16 *dest; - if (task->data[4] >= 32) - { - return TRUE; - } - dstOffs = task->data[3] >> 3; - if (dstOffs >= task->data[4]) - { - dstOffs = (task->data[1] >> 3) & 0x1f; - dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); - for (i=0; i<10; i++) - { - dest[dstOffs + i * 32] = 0xf000; - dest[((dstOffs + 1) & 0x1f) + i * 32] = 0xf000; - } - task->data[4] += 2; - } - return FALSE; -} - -u8 sub_8088830(u32 a0, u32 a1, u32 a2) -{ - u16 v0; - u8 monSprite; - struct Sprite *sprite; - v0 = (a0 & 0x80000000) >> 16; - a0 &= 0x7fffffff; - monSprite = CreateMonSprite_FieldMove(a0, a1, a2, 0x140, 0x50, 0); - sprite = &gSprites[monSprite]; - sprite->callback = SpriteCallbackDummy; - sprite->oam.priority = 0; - sprite->data0 = a0; - sprite->data6 = v0; - return monSprite; -} - -void sub_80888D4(struct Sprite *); - -void sub_8088890(struct Sprite *sprite) -{ - if ((sprite->pos1.x -= 20) <= 0x78) - { - sprite->pos1.x = 0x78; - sprite->data1 = 30; - sprite->callback = sub_80888D4; - if (sprite->data6) - { - PlayCry2(sprite->data0, 0, 0x7d, 0xa); - } else - { - PlayCry1(sprite->data0, 0); - } - } -} - -void sub_80888F0(struct Sprite *); - -void sub_80888D4(struct Sprite *sprite) -{ - if ((--sprite->data1) == 0) - { - sprite->callback = sub_80888F0; - } -} - -void sub_80888F0(struct Sprite *sprite) -{ - if (sprite->pos1.x < -0x40) - { - sprite->data7 = 1; - } else - { - sprite->pos1.x -= 20; - } -} - -void sub_8088954(u8); - -u8 FldEff_UseSurf(void) -{ - u8 taskId; - taskId = CreateTask(sub_8088954, 0xff); - gTasks[taskId].data[15] = gUnknown_0202FF84[0]; - sav1_reset_battle_music_maybe(); - sub_8053FB0(0x016d); - return FALSE; -} - -void sub_8088954(u8 taskId) -{ - gUnknown_0839F3E4[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8088984(struct Task *task) -{ - ScriptContext2_Enable(); - FreezeMapObjects(); - gPlayerAvatar.unk6 = 1; - SetPlayerAvatarStateMask(8); - PlayerGetDestCoords(&task->data[1], &task->data[2]); - MoveCoords(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18, &task->data[1], &task->data[2]); - task->data[0]++; -} - -void sub_80889E4(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - sub_8059BF4(); - FieldObjectSetSpecialAnim(mapObject, 0x39); - task->data[0]++; - } -} - -void sub_8088A30(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject)) - { - gUnknown_0202FF84[0] = task->data[15] | 0x80000000; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - task->data[0]++; - } -} - -void sub_8088A78(struct Task *task) -{ - struct MapObject *mapObject; - if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(3)); - FieldObjectClearAnimIfSpecialAnimFinished(mapObject); - FieldObjectSetSpecialAnim(mapObject, sub_80608D0(mapObject->placeholder18)); - gUnknown_0202FF84[0] = task->data[1]; - gUnknown_0202FF84[1] = task->data[2]; - gUnknown_0202FF84[2] = gPlayerAvatar.mapObjectId; - mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB); - task->data[0]++; - } -} - -void sub_8088AF4(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - gPlayerAvatar.unk6 = 0; - gPlayerAvatar.flags &= 0xdf; - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(mapObject->placeholder18)); - sub_8127ED0(mapObject->mapobj_unk_1A, 1); - UnfreezeMapObjects(); - ScriptContext2_Disable(); - FieldEffectActiveListRemove(FLDEFF_USE_SURF); - DestroyTask(FindTaskIdByFunc(sub_8088954)); - } -} - -void sub_8088BC4(struct Sprite *); - -u8 FldEff_NPCFlyOut(void) -{ - u8 spriteId; - struct Sprite *sprite; - spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1); - sprite = &gSprites[spriteId]; - sprite->oam.paletteNum = 0; - sprite->oam.priority = 1; - sprite->callback = sub_8088BC4; - sprite->data1 = gUnknown_0202FF84[0]; - PlaySE(SE_W019); - return spriteId; -} - -void sub_8088BC4(struct Sprite *sprite) -{ - struct Sprite *npcSprite; - sprite->pos2.x = Cos(sprite->data2, 0x8c); - sprite->pos2.y = Sin(sprite->data2, 0x48); - sprite->data2 = (sprite->data2 + 4) & 0xff; - if (sprite->data0) - { - npcSprite = &gSprites[sprite->data1]; - npcSprite->coordOffsetEnabled = 0; - npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x; - npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; - npcSprite->pos2.x = 0; - npcSprite->pos2.y = 0; - } - if (sprite->data2 >= 0x80) - { - FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT); - } -} - -void sub_8088C70(u8); -extern void sub_8127EFC(u8, u8); -u8 sub_8088F60(void); -bool8 sub_8088FA4(u8); -void sub_8088FC0(u8); -void sub_8088FFC(u8, u8); -void sub_8089018(struct Sprite *); -void sub_80890D8(struct Sprite *); - -u8 FldEff_UseFly(void) -{ - u8 taskId; - taskId = CreateTask(sub_8088C70, 0xfe); - gTasks[taskId].data[1] = gUnknown_0202FF84[0]; - return 0; -} - -void sub_8088C70(u8 taskId) -{ - gUnknown_0839F3F8[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8088CA0(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - task->data[15] = gPlayerAvatar.flags; - gPlayerAvatar.unk6 = 0x01; - SetPlayerAvatarStateMask(1); - sub_8059BF4(); - FieldObjectSetSpecialAnim(mapObject, 0x39); - task->data[0]++; - } -} - -void sub_8088CF8(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - task->data[0]++; - gUnknown_0202FF84[0] = task->data[1]; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - } -} - -void sub_8088D3C(struct Task *task) -{ - struct MapObject *mapObject; - if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (task->data[15] & 0x08) - { - sub_8127ED0(mapObject->mapobj_unk_1A, 2); - sub_8127EFC(mapObject->mapobj_unk_1A, 0); - } - task->data[1] = sub_8088F60(); - task->data[0]++; - } -} - -void sub_8088D94(struct Task *task) -{ - if (sub_8088FA4(task->data[1])) - { - task->data[0]++; - task->data[2] = 16; - SetPlayerAvatarTransitionFlags(0x01); - FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], 0x02); - } -} - -void sub_8088DD8(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if ((task->data[2] == 0 || (--task->data[2]) == 0) && FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - task->data[0]++; - PlaySE(SE_W019); - sub_8088FC0(task->data[1]); - } -} - -void sub_8088E2C(struct Task *task) -{ - struct MapObject *mapObject; - if ((++task->data[2]) >= 8) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x03)); - StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16); - mapObject->mapobj_bit_12 = 1; - FieldObjectSetSpecialAnim(mapObject, 0x48); - if (task->data[15] & 0x08) - { - DestroySprite(&gSprites[mapObject->mapobj_unk_1A]); - } - task->data[0]++; - task->data[2] = 0; - } -} - -void sub_8088EB4(struct Task *task) -{ - struct MapObject *mapObject; - if ((++task->data[2]) >= 10) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - FieldObjectClearAnimIfSpecialAnimActive(mapObject); - mapObject->mapobj_bit_12 = 0; - mapObject->mapobj_bit_22 = 0; - sub_8088FFC(task->data[1], mapObject->spriteId); - CameraObjectReset2(); - task->data[0]++; - } -} - -void sub_8088F10(struct Task *task) -{ - if (sub_8088FA4(task->data[1])) - { - fade_8080918(); - task->data[0]++; - } -} - -void sub_8088F30(struct Task *task) -{ - if (!gPaletteFade.active) - { - FieldEffectActiveListRemove(FLDEFF_USE_FLY); - DestroyTask(FindTaskIdByFunc(sub_8088C70)); - } -} - -u8 sub_8088F60(void) -{ - u8 spriteId; - struct Sprite *sprite; - spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1); - sprite = &gSprites[spriteId]; - sprite->oam.paletteNum = 0; - sprite->oam.priority = 1; - sprite->callback = sub_8089018; - return spriteId; -} - -u8 sub_8088FA4(u8 spriteId) -{ - return gSprites[spriteId].data7; -} - -void sub_8088FC0(u8 spriteId) -{ - struct Sprite *sprite; - sprite = &gSprites[spriteId]; - sprite->callback = sub_80890D8; - sprite->pos1.x = 0x78; - sprite->pos1.y = 0x00; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - memset(&sprite->data0, 0, 8 * sizeof(u16) /* zero all data cells */); - sprite->data6 = 0x40; -} - -void sub_8088FFC(u8 a0, u8 a1) -{ - gSprites[a0].data6 = a1; -} - -void sub_8089018(struct Sprite *sprite) -{ - if (sprite->data7 == 0) - { - if (sprite->data0 == 0) - { - sprite->oam.affineMode = 3; - sprite->affineAnims = gSpriteAffineAnimTable_0839F44C; - InitSpriteAffineAnim(sprite); - StartSpriteAffineAnim(sprite, 0); - sprite->pos1.x = 0x76; - sprite->pos1.y = -0x30; - sprite->data0++; - sprite->data1 = 0x40; - sprite->data2 = 0x100; - } - sprite->data1 += (sprite->data2 >> 8); - sprite->pos2.x = Cos(sprite->data1, 0x78); - sprite->pos2.y = Sin(sprite->data1, 0x78); - if (sprite->data2 < 0x800) - { - sprite->data2 += 0x60; - } - if (sprite->data1 > 0x81) - { - sprite->data7++; - sprite->oam.affineMode = 0; - FreeOamMatrix(sprite->oam.matrixNum); - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0); - } - } -} - -void sub_80890D8(struct Sprite *sprite) -{ - struct Sprite *sprite1; - sprite->pos2.x = Cos(sprite->data2, 0x8c); - sprite->pos2.y = Sin(sprite->data2, 0x48); - sprite->data2 = (sprite->data2 + 4) & 0xff; - if (sprite->data6 != 0x40) - { - sprite1 = &gSprites[sprite->data6]; - sprite1->coordOffsetEnabled = 0; - sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x; - sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; - sprite1->pos2.x = 0; - sprite1->pos2.y = 0; - } - if (sprite->data2 >= 0x80) - { - sprite->data7 = 1; - } -} - -void sub_808914C(struct Sprite *sprite) -{ - if (sprite->data7 == 0) - { - if (sprite->data0 == 0) - { - sprite->oam.affineMode = 3; - sprite->affineAnims = gSpriteAffineAnimTable_0839F44C; - InitSpriteAffineAnim(sprite); - StartSpriteAffineAnim(sprite, 1); - sprite->pos1.x = 0x5e; - sprite->pos1.y = -0x20; - sprite->data0++; - sprite->data1 = 0xf0; - sprite->data2 = 0x800; - sprite->data4 = 0x80; - } - sprite->data1 += sprite->data2 >> 8; - sprite->data3 += sprite->data2 >> 8; - sprite->data1 &= 0xff; - sprite->pos2.x = Cos(sprite->data1, 0x20); - sprite->pos2.y = Sin(sprite->data1, 0x78); - if (sprite->data2 > 0x100) - { - sprite->data2 -= sprite->data4; - } - if (sprite->data4 < 0x100) - { - sprite->data4 += 24; - } - if (sprite->data2 < 0x100) - { - sprite->data2 = 0x100; - } - if (sprite->data3 >= 60) - { - sprite->data7++; - sprite->oam.affineMode = 0; - FreeOamMatrix(sprite->oam.matrixNum); - sprite->invisible = 1; - } - } -} - -void sub_8089230(u8 spriteId) -{ - sub_8088FC0(spriteId); - gSprites[spriteId].callback = sub_808914C; -} - -void sub_8089270(u8); - -u8 FldEff_FlyIn(void) -{ - CreateTask(sub_8089270, 0xfe); - return 0; -} - -void sub_8089270(u8 taskId) -{ - gUnknown_0839F454[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_80892A0(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - task->data[0]++; - task->data[2] = 17; - task->data[15] = gPlayerAvatar.flags; - gPlayerAvatar.unk6 = 1; - SetPlayerAvatarStateMask(0x01); - if (task->data[15] & 0x08) - { - sub_8127ED0(mapObject->mapobj_unk_1A, 0); - } - sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x3)); - CameraObjectReset2(); - FieldObjectTurn(mapObject, DIR_WEST); - StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16); - mapObject->mapobj_bit_13 = 0; - task->data[1] = sub_8088F60(); - sub_8088FC0(task->data[1]); - sub_8088FFC(task->data[1], mapObject->spriteId); - } -} - -void sub_8089354(struct Task *task) -{ - struct MapObject *mapObject; - struct Sprite *sprite; - if (task->data[2] == 0 || (--task->data[2]) == 0) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[mapObject->spriteId]; - sub_8088FFC(task->data[1], 0x40); - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - task->data[0]++; - task->data[2] = 0; - } -} - -void sub_80893C0(struct Task *task) -{ - s16 unknown_0839F470[18]; - struct Sprite *sprite; - memcpy(unknown_0839F470, gUnknown_0839F470, sizeof gUnknown_0839F470); - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.y = unknown_0839F470[task->data[2]]; - if ((++task->data[2]) >= 18) - { - task->data[0]++; - } -} - -void sub_8089414(struct Task *task) -{ - struct MapObject *mapObject; - struct Sprite *sprite; - if (sub_8088FA4(task->data[1])) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[mapObject->spriteId]; - mapObject->mapobj_bit_12 = 0; - sub_805C058(mapObject, mapObject->coords2.x, mapObject->coords2.y); - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->coordOffsetEnabled = 1; - sub_8059BF4(); - FieldObjectSetSpecialAnim(mapObject, 0x39); - task->data[0]++; - } -} - -void sub_808948C(struct Task *task) -{ - if (FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gPlayerAvatar.mapObjectId])) - { - task->data[0]++; - sub_8089230(task->data[1]); - } -} - -void sub_80894C4(struct Task *task) -{ - if (sub_8088FA4(task->data[1])) - { - DestroySprite(&gSprites[task->data[1]]); - task->data[0]++; - task->data[1] = 0x10; - } -} - -void fishE(struct Task *task) -{ - u8 state; - struct MapObject *mapObject; - if ((--task->data[1]) == 0) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - state = 0; - if (task->data[15] & 0x08) - { - state = 3; - sub_8127ED0(mapObject->mapobj_unk_1A, 1); - } - sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(state)); - FieldObjectTurn(mapObject, DIR_SOUTH); - gPlayerAvatar.flags = task->data[15]; - gPlayerAvatar.unk6 = 0; - FieldEffectActiveListRemove(FLDEFF_FLY_IN); - DestroyTask(FindTaskIdByFunc(sub_8089270)); - } -} |