diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_anim.c | 33 | ||||
-rw-r--r-- | src/battle_anim_effects_3.c | 809 | ||||
-rw-r--r-- | src/battle_anim_special.c | 27 | ||||
-rw-r--r-- | src/battle_anim_status_effects.c | 4 |
4 files changed, 834 insertions, 39 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c index 16cf56920..6f4c8a91e 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -23,8 +23,8 @@ extern const u16 gMovesWithQuietBGM[]; extern const u8 *const gBattleAnims_Moves[]; -extern const struct CompressedSpriteSheet gUnknown_8399388[]; -extern const struct CompressedSpritePalette gUnknown_8399C90[]; +//extern const struct CompressedSpriteSheet gUnknown_8399388[]; +//extern const struct CompressedSpritePalette gUnknown_8399C90[]; // RAM EWRAM_DATA static const u8 *sBattleAnimScriptPtr = NULL; @@ -1958,9 +1958,14 @@ static void ScriptCmd_loadspritegfx(void) sBattleAnimScriptPtr++; index = T1_READ_16(sBattleAnimScriptPtr); - LoadCompressedSpriteSheetUsingHeap(&gUnknown_8399388[GET_TRUE_SPRITE_INDEX(index)]); - LoadCompressedSpritePaletteUsingHeap(&gUnknown_8399C90[GET_TRUE_SPRITE_INDEX(index)]); - sBattleAnimScriptPtr += 2; + + LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[index]); + LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[index]); + + //LoadCompressedSpriteSheetUsingHeap(&gUnknown_8399388[GET_TRUE_SPRITE_INDEX(index)]); + //LoadCompressedSpritePaletteUsingHeap(&gUnknown_8399C90[GET_TRUE_SPRITE_INDEX(index)]); + + sBattleAnimScriptPtr += 2; AddSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); gAnimFramesToWait = 1; gAnimScriptCallback = WaitAnimFrameCount; @@ -2193,8 +2198,8 @@ static void ScriptCmd_monbg(void) spriteId = gBattlerSpriteIds[battlerId]; taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); gTasks[taskId].data[t1_MONBG_BATTLER] = spriteId; - gTasks[taskId].data[1] = gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x; - gTasks[taskId].data[2] = gSprites[spriteId].pos2.y + gSprites[spriteId].pos1.y; + gTasks[taskId].data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + gTasks[taskId].data[2] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; if (!toBG_2) { gTasks[taskId].data[3] = gBattle_BG1_X; @@ -2224,8 +2229,8 @@ static void ScriptCmd_monbg(void) spriteId = gBattlerSpriteIds[battlerId]; taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); gTasks[taskId].data[t1_MONBG_BATTLER] = spriteId; - gTasks[taskId].data[1] = gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x; - gTasks[taskId].data[2] = gSprites[spriteId].pos2.y + gSprites[spriteId].pos1.y; + gTasks[taskId].data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + gTasks[taskId].data[2] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; if (!toBG_2) { gTasks[taskId].data[3] = gBattle_BG1_X; @@ -2247,10 +2252,12 @@ static void ScriptCmd_monbg(void) bool8 IsBattlerSpriteVisible(u8 battlerId) { - if (!IsBattlerSpritePresent(battlerId)) + u8 battler = battlerId; + + if (!IsBattlerSpritePresent(battler)) return FALSE; - if (!gBattleSpritesDataPtr->battlerData[battlerId].invisible || !gSprites[gBattlerSpriteIds[battlerId]].invisible) + if (!gBattleSpritesDataPtr->battlerData[battler].invisible || !gSprites[gBattlerSpriteIds[battler]].invisible) return TRUE; return FALSE; @@ -2267,7 +2274,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2) { RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(8)), 0x2000, 1); - RequestDma3Fill(0xFF, (void*)(BG_SCREEN_ADDR(28)), 0x1000, 0); + RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(28)), 0x1000, 1); sub_80752A0(&animBg); CpuFill16(toBG_2, animBg.bgTiles, 0x1000); CpuFill16(toBG_2, animBg.bgTilemap, 0x800); @@ -2295,7 +2302,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2) RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(30)), 0x1000, 1); sub_80752C8(&animBg, 2); CpuFill16(0, animBg.bgTiles + 0x1000, 0x1000); - CpuFill16(0, animBg.bgTilemap + 0x400, 0x400); + CpuFill16(0, animBg.bgTilemap + 0x400, 0x800); SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); SetAnimBgAttribute(2, BG_ANIM_SCREEN_SIZE, 1); SetAnimBgAttribute(2, BG_ANIM_AREA_OVERFLOW_MODE, 0); diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ec99a9f95..cabe18fb6 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -4931,14 +4931,160 @@ void AnimTask_GetReturnPowerLevel(u8 taskId) // Makes the mon run out of screen, run past the opposing mon, and return to its original position. // No args. +/* +attempt.. void AnimTask_SnatchOpposingMonMove(u8 taskId) { u8 spriteId, spriteId2; - int personality; - int otId; + u32 personality; + u32 otId; u16 species; u8 subpriority; - u8 isBackPic; + //bool8 isBackPic; + s16 x; + + u16 tSpecies; + + switch (gTasks[taskId].data[0]) + { + case 0: + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + gTasks[taskId].data[1] += 0x800; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + gSprites[spriteId].pos2.x += (gTasks[taskId].data[1] >> 8); + else + gSprites[spriteId].pos2.x -= (gTasks[taskId].data[1] >> 8); + + gTasks[taskId].data[1] &= 0xFF; + x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + if ((u16)(x + 32) > 304) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + break; + case 1: + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); + + tSpecies = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; + if (tSpecies == SPECIES_NONE) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + else + species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; + + subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; + //isBackPic = FALSE; + //x = 272; + spriteId = sub_80768D0(species, FALSE, 0, 272, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0); + } + else + { + personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); + + tSpecies = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; + if (tSpecies == SPECIES_NONE) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + else + species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; + + subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; + //isBackPic = TRUE; + //x = -32; + spriteId = sub_80768D0(species, TRUE, 0, -32, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0); + } + + if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies != SPECIES_NONE) + BlendPalette((gSprites[spriteId].oam.paletteNum * 16) | 0x100, 16, 6, RGB_WHITE); + + gTasks[taskId].data[15] = spriteId; + gTasks[taskId].data[0]++; + break; + case 2: + spriteId2 = gTasks[taskId].data[15]; + gTasks[taskId].data[1] += 0x800; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + gSprites[spriteId2].pos2.x -= (gTasks[taskId].data[1] >> 8); + else + gSprites[spriteId2].pos2.x += (gTasks[taskId].data[1] >> 8); + + gTasks[taskId].data[1] &= 0xFF; + x = gSprites[spriteId2].pos1.x + gSprites[spriteId2].pos2.x; + if (gTasks[taskId].data[14] == 0) + { + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + if (x < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X)) + { + gTasks[taskId].data[14]++; + gBattleAnimArgs[7] = 0xFFFF; + } + } + else + { + if (x > GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X)) + { + gTasks[taskId].data[14]++; + gBattleAnimArgs[7] = 0xFFFF; + } + } + } + + if ((u16)(x + 32) > 304) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + break; + case 3: + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + spriteId2 = gTasks[taskId].data[15]; + DestroySpriteAndFreeResources_(&gSprites[spriteId2]); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos1.x - 32; + else + gSprites[spriteId].pos2.x = 272 - gSprites[spriteId].pos1.x; + + gTasks[taskId].data[0]++; + break; + case 4: + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + gTasks[taskId].data[1] += 0x800; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + gSprites[spriteId].pos2.x += (gTasks[taskId].data[1] >> 8); + if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x >= GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X)) + gSprites[spriteId].pos2.x = 0; + } + else + { + gSprites[spriteId].pos2.x -= (gTasks[taskId].data[1] >> 8); + if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x <= GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X)) + gSprites[spriteId].pos2.x = 0; + } + + gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1]; + if (gSprites[spriteId].pos2.x == 0) + DestroyAnimVisualTask(taskId); + break; + } +} +*/ + +#ifdef NONMATCHING +// `species` variable getting loaded into r6 instead of r5 +//https://cexplore.karathan.at/z/0gMuxf +void AnimTask_SnatchOpposingMonMove(u8 taskId) +{ + u8 spriteId, spriteId2; + u32 personality; + u32 otId; + u16 species; + u8 subpriority; + bool8 isBackPic; s16 x; switch (gTasks[taskId].data[0]) @@ -4970,7 +5116,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; - isBackPic = 0; + isBackPic = FALSE; x = 272; } else @@ -4983,7 +5129,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; - isBackPic = 1; + isBackPic = TRUE; x = -32; } @@ -5063,6 +5209,659 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) break; } } +#else +NAKED +void AnimTask_SnatchOpposingMonMove(u8 taskId) +{ + 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, 0x1C\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r8, r0\n" + "\tldr r1, _080E395C @ =gTasks\n" + "\tlsls r0, 2\n" + "\tadd r0, r8\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x8\n" + "\tldrsh r0, [r0, r1]\n" + "\tcmp r0, 0x4\n" + "\tbls _080E3952\n" + "\tb _080E3E6C\n" + "_080E3952:\n" + "\tlsls r0, 2\n" + "\tldr r1, _080E3960 @ =_080E3964\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_080E395C: .4byte gTasks\n" + "_080E3960: .4byte _080E3964\n" + "\t.align 2, 0\n" + "_080E3964:\n" + "\t.4byte _080E3978\n" + "\t.4byte _080E3A2C\n" + "\t.4byte _080E3BEC\n" + "\t.4byte _080E3D0C\n" + "\t.4byte _080E3D90\n" + "_080E3978:\n" + "\tmovs r0, 0\n" + "\tbl GetAnimBattlerSpriteId\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tldr r1, _080E39C4 @ =gTasks\n" + "\tmov r2, r8\n" + "\tlsls r4, r2, 2\n" + "\tadds r0, r4, r2\n" + "\tlsls r0, 3\n" + "\tadds r6, r0, r1\n" + "\tmovs r3, 0x80\n" + "\tlsls r3, 4\n" + "\tadds r0, r3, 0\n" + "\tldrh r1, [r6, 0xA]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r6, 0xA]\n" + "\tldr r0, _080E39C8 @ =gBattleAnimAttacker\n" + "\tldrb r0, [r0]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tmov r9, r4\n" + "\tcmp r0, 0\n" + "\tbne _080E39D0\n" + "\tldr r2, _080E39CC @ =gSprites\n" + "\tlsls r3, r7, 4\n" + "\tadds r1, r3, r7\n" + "\tlsls r1, 2\n" + "\tadds r1, r2\n" + "\tldrh r0, [r6, 0xA]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 24\n" + "\tldrh r4, [r1, 0x24]\n" + "\tadds r0, r4\n" + "\tstrh r0, [r1, 0x24]\n" + "\tb _080E39EA\n" + "\t.align 2, 0\n" + "_080E39C4: .4byte gTasks\n" + "_080E39C8: .4byte gBattleAnimAttacker\n" + "_080E39CC: .4byte gSprites\n" + "_080E39D0:\n" + "\tldr r3, _080E3A24 @ =gSprites\n" + "\tlsls r4, r7, 4\n" + "\tadds r2, r4, r7\n" + "\tlsls r2, 2\n" + "\tadds r2, r3\n" + "\tldrh r1, [r6, 0xA]\n" + "\tlsls r1, 16\n" + "\tasrs r1, 24\n" + "\tldrh r0, [r2, 0x24]\n" + "\tsubs r0, r1\n" + "\tstrh r0, [r2, 0x24]\n" + "\tadds r2, r3, 0\n" + "\tadds r3, r4, 0\n" + "_080E39EA:\n" + "\tldr r1, _080E3A28 @ =gTasks\n" + "\tmov r0, r9\n" + "\tadd r0, r8\n" + "\tlsls r0, 3\n" + "\tadds r4, r0, r1\n" + "\tldrb r0, [r4, 0xA]\n" + "\tstrh r0, [r4, 0xA]\n" + "\tadds r1, r3, r7\n" + "\tlsls r1, 2\n" + "\tadds r1, r2\n" + "\tldrh r0, [r1, 0x24]\n" + "\tldrh r1, [r1, 0x20]\n" + "\tadds r0, r1\n" + "\tlsls r0, 16\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 14\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x98\n" + "\tlsls r1, 17\n" + "\tcmp r0, r1\n" + "\tbhi _080E3A16\n" + "\tb _080E3E6C\n" + "_080E3A16:\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r4, 0xA]\n" + "\tldrh r0, [r4, 0x8]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0x8]\n" + "\tb _080E3E6C\n" + "\t.align 2, 0\n" + "_080E3A24: .4byte gSprites\n" + "_080E3A28: .4byte gTasks\n" + "_080E3A2C:\n" + "\tldr r4, _080E3A90 @ =gBattleAnimAttacker\n" + "\tldrb r0, [r4]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080E3ACC\n" + "\tldr r7, _080E3A94 @ =gBattlerPartyIndexes\n" + "\tldrb r0, [r4]\n" + "\tlsls r0, 1\n" + "\tadds r0, r7\n" + "\tldrh r0, [r0]\n" + "\tmovs r6, 0x64\n" + "\tmuls r0, r6\n" + "\tldr r5, _080E3A98 @ =gPlayerParty\n" + "\tadds r0, r5\n" + "\tmovs r1, 0\n" + "\tbl GetMonData\n" + "\tmov r10, r0\n" + "\tldrb r0, [r4]\n" + "\tlsls r0, 1\n" + "\tadds r0, r7\n" + "\tldrh r0, [r0]\n" + "\tmuls r0, r6\n" + "\tadds r0, r5\n" + "\tmovs r1, 0x1\n" + "\tbl GetMonData\n" + "\tmov r9, r0\n" + "\tldr r0, _080E3A9C @ =gBattleSpritesDataPtr\n" + "\tldr r0, [r0]\n" + "\tldrb r2, [r4]\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 2\n" + "\tadds r1, r0, r1\n" + "\tldrh r0, [r1, 0x2]\n" + "\tcmp r0, 0\n" + "\tbne _080E3AA0\n" + "\tlsls r0, r2, 1\n" + "\tadds r0, r7\n" + "\tldrh r0, [r0]\n" + "\tmuls r0, r6\n" + "\tadds r0, r5\n" + "\tmovs r1, 0xB\n" + "\tbl GetMonData\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tb _080E3AA2\n" + "\t.align 2, 0\n" + "_080E3A90: .4byte gBattleAnimAttacker\n" + "_080E3A94: .4byte gBattlerPartyIndexes\n" + "_080E3A98: .4byte gPlayerParty\n" + "_080E3A9C: .4byte gBattleSpritesDataPtr\n" + "_080E3AA0:\n" + "\tldrh r5, [r1, 0x2]\n" + "_080E3AA2:\n" + "\tmovs r0, 0x1\n" + "\tbl GetAnimBattlerSpriteId\n" + "\tldr r2, _080E3AC8 @ =gSprites\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r1, r0, 4\n" + "\tadds r1, r0\n" + "\tlsls r1, 2\n" + "\tadds r1, r2\n" + "\tadds r1, 0x43\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tmovs r7, 0\n" + "\tmovs r6, 0x88\n" + "\tlsls r6, 1\n" + "\tb _080E3B54\n" + "\t.align 2, 0\n" + "_080E3AC8: .4byte gSprites\n" + "_080E3ACC:\n" + "\tldr r7, _080E3B24 @ =gBattlerPartyIndexes\n" + "\tldrb r0, [r4]\n" + "\tlsls r0, 1\n" + "\tadds r0, r7\n" + "\tldrh r0, [r0]\n" + "\tmovs r6, 0x64\n" + "\tmuls r0, r6\n" + "\tldr r5, _080E3B28 @ =gEnemyParty\n" + "\tadds r0, r5\n" + "\tmovs r1, 0\n" + "\tbl GetMonData\n" + "\tmov r10, r0\n" + "\tldrb r0, [r4]\n" + "\tlsls r0, 1\n" + "\tadds r0, r7\n" + "\tldrh r0, [r0]\n" + "\tmuls r0, r6\n" + "\tadds r0, r5\n" + "\tmovs r1, 0x1\n" + "\tbl GetMonData\n" + "\tmov r9, r0\n" + "\tldr r0, _080E3B2C @ =gBattleSpritesDataPtr\n" + "\tldr r0, [r0]\n" + "\tldrb r2, [r4]\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 2\n" + "\tadds r1, r0, r1\n" + "\tldrh r0, [r1, 0x2]\n" + "\tcmp r0, 0\n" + "\tbne _080E3B30\n" + "\tlsls r0, r2, 1\n" + "\tadds r0, r7\n" + "\tldrh r0, [r0]\n" + "\tmuls r0, r6\n" + "\tadds r0, r5\n" + "\tmovs r1, 0xB\n" + "\tbl GetMonData\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tb _080E3B32\n" + "\t.align 2, 0\n" + "_080E3B24: .4byte gBattlerPartyIndexes\n" + "_080E3B28: .4byte gEnemyParty\n" + "_080E3B2C: .4byte gBattleSpritesDataPtr\n" + "_080E3B30:\n" + "\tldrh r5, [r1, 0x2]\n" + "_080E3B32:\n" + "\tmovs r0, 0x1\n" + "\tbl GetAnimBattlerSpriteId\n" + "\tldr r2, _080E3BD0 @ =gSprites\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r1, r0, 4\n" + "\tadds r1, r0\n" + "\tlsls r1, 2\n" + "\tadds r1, r2\n" + "\tadds r1, 0x43\n" + "\tldrb r0, [r1]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tmovs r7, 0x1\n" + "\tldr r6, _080E3BD4 @ =0x0000ffe0\n" + "_080E3B54:\n" + "\tldr r0, _080E3BD8 @ =gBattleAnimTarget\n" + "\tldrb r0, [r0]\n" + "\tmovs r1, 0x1\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r3, r6, 16\n" + "\tasrs r3, 16\n" + "\tstr r0, [sp]\n" + "\tstr r4, [sp, 0x4]\n" + "\tmov r2, r10\n" + "\tstr r2, [sp, 0x8]\n" + "\tmov r4, r9\n" + "\tstr r4, [sp, 0xC]\n" + "\tldr r4, _080E3BDC @ =gBattleAnimAttacker\n" + "\tldrb r0, [r4]\n" + "\tstr r0, [sp, 0x10]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x14]\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r7, 0\n" + "\tmovs r2, 0\n" + "\tbl sub_80768D0\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tldr r0, _080E3BE0 @ =gBattleSpritesDataPtr\n" + "\tldr r1, [r0]\n" + "\tldrb r0, [r4]\n" + "\tldr r1, [r1]\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0, 0x2]\n" + "\tcmp r0, 0\n" + "\tbeq _080E3BBE\n" + "\tldr r1, _080E3BD0 @ =gSprites\n" + "\tlsls r0, r5, 4\n" + "\tadds r0, r5\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tldrb r0, [r0, 0x5]\n" + "\tlsrs r0, 4\n" + "\tlsls r0, 4\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 1\n" + "\tadds r1, r2, 0\n" + "\torrs r0, r1\n" + "\tldr r3, _080E3BE4 @ =0x00007fff\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0x6\n" + "\tbl BlendPalette\n" + "_080E3BBE:\n" + "\tldr r0, _080E3BE8 @ =gTasks\n" + "\tmov r3, r8\n" + "\tlsls r1, r3, 2\n" + "\tadd r1, r8\n" + "\tlsls r1, 3\n" + "\tadds r1, r0\n" + "\tstrh r5, [r1, 0x26]\n" + "\tb _080E3D82\n" + "\t.align 2, 0\n" + "_080E3BD0: .4byte gSprites\n" + "_080E3BD4: .4byte 0x0000ffe0\n" + "_080E3BD8: .4byte gBattleAnimTarget\n" + "_080E3BDC: .4byte gBattleAnimAttacker\n" + "_080E3BE0: .4byte gBattleSpritesDataPtr\n" + "_080E3BE4: .4byte 0x00007fff\n" + "_080E3BE8: .4byte gTasks\n" + "_080E3BEC:\n" + "\tldr r1, _080E3C38 @ =gTasks\n" + "\tmov r0, r8\n" + "\tlsls r4, r0, 2\n" + "\tadds r0, r4, r0\n" + "\tlsls r0, 3\n" + "\tadds r6, r0, r1\n" + "\tldrh r0, [r6, 0x26]\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 4\n" + "\tadds r0, r1, 0\n" + "\tldrh r2, [r6, 0xA]\n" + "\tadds r0, r2\n" + "\tstrh r0, [r6, 0xA]\n" + "\tldr r0, _080E3C3C @ =gBattleAnimAttacker\n" + "\tldrb r0, [r0]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tmov r9, r4\n" + "\tcmp r0, 0\n" + "\tbne _080E3C44\n" + "\tldr r3, _080E3C40 @ =gSprites\n" + "\tlsls r4, r5, 4\n" + "\tadds r2, r4, r5\n" + "\tlsls r2, 2\n" + "\tadds r2, r3\n" + "\tldrh r1, [r6, 0xA]\n" + "\tlsls r1, 16\n" + "\tasrs r1, 24\n" + "\tldrh r0, [r2, 0x24]\n" + "\tsubs r0, r1\n" + "\tstrh r0, [r2, 0x24]\n" + "\tadds r2, r3, 0\n" + "\tadds r3, r4, 0\n" + "\tb _080E3C5A\n" + "\t.align 2, 0\n" + "_080E3C38: .4byte gTasks\n" + "_080E3C3C: .4byte gBattleAnimAttacker\n" + "_080E3C40: .4byte gSprites\n" + "_080E3C44:\n" + "\tldr r2, _080E3CA8 @ =gSprites\n" + "\tlsls r3, r5, 4\n" + "\tadds r1, r3, r5\n" + "\tlsls r1, 2\n" + "\tadds r1, r2\n" + "\tldrh r0, [r6, 0xA]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 24\n" + "\tldrh r4, [r1, 0x24]\n" + "\tadds r0, r4\n" + "\tstrh r0, [r1, 0x24]\n" + "_080E3C5A:\n" + "\tldr r1, _080E3CAC @ =gTasks\n" + "\tmov r0, r9\n" + "\tadd r0, r8\n" + "\tlsls r0, 3\n" + "\tadds r6, r0, r1\n" + "\tldrb r0, [r6, 0xA]\n" + "\tstrh r0, [r6, 0xA]\n" + "\tadds r1, r3, r5\n" + "\tlsls r1, 2\n" + "\tadds r1, r2\n" + "\tldrh r0, [r1, 0x24]\n" + "\tldrh r1, [r1, 0x20]\n" + "\tadds r0, r1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tmovs r1, 0x24\n" + "\tldrsh r0, [r6, r1]\n" + "\tcmp r0, 0\n" + "\tbne _080E3CDA\n" + "\tldr r0, _080E3CB0 @ =gBattleAnimAttacker\n" + "\tldrb r0, [r0]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080E3CB8\n" + "\tlsls r4, r5, 16\n" + "\tasrs r4, 16\n" + "\tldr r0, _080E3CB4 @ =gBattleAnimTarget\n" + "\tldrb r0, [r0]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r4, r0\n" + "\tbge _080E3CDA\n" + "\tb _080E3CCE\n" + "\t.align 2, 0\n" + "_080E3CA8: .4byte gSprites\n" + "_080E3CAC: .4byte gTasks\n" + "_080E3CB0: .4byte gBattleAnimAttacker\n" + "_080E3CB4: .4byte gBattleAnimTarget\n" + "_080E3CB8:\n" + "\tlsls r4, r5, 16\n" + "\tasrs r4, 16\n" + "\tldr r0, _080E3CFC @ =gBattleAnimTarget\n" + "\tldrb r0, [r0]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r4, r0\n" + "\tble _080E3CDA\n" + "_080E3CCE:\n" + "\tldrh r0, [r6, 0x24]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r6, 0x24]\n" + "\tldr r1, _080E3D00 @ =gBattleAnimArgs\n" + "\tldr r0, _080E3D04 @ =0x0000ffff\n" + "\tstrh r0, [r1, 0xE]\n" + "_080E3CDA:\n" + "\tlsls r0, r5, 16\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 14\n" + "\tadds r0, r2\n" + "\tmovs r1, 0x98\n" + "\tlsls r1, 17\n" + "\tcmp r0, r1\n" + "\tbhi _080E3CEC\n" + "\tb _080E3E6C\n" + "_080E3CEC:\n" + "\tldr r0, _080E3D08 @ =gTasks\n" + "\tmov r1, r9\n" + "\tadd r1, r8\n" + "\tlsls r1, 3\n" + "\tadds r1, r0\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r1, 0xA]\n" + "\tb _080E3D82\n" + "\t.align 2, 0\n" + "_080E3CFC: .4byte gBattleAnimTarget\n" + "_080E3D00: .4byte gBattleAnimArgs\n" + "_080E3D04: .4byte 0x0000ffff\n" + "_080E3D08: .4byte gTasks\n" + "_080E3D0C:\n" + "\tmovs r0, 0\n" + "\tbl GetAnimBattlerSpriteId\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tldr r1, _080E3D58 @ =gTasks\n" + "\tmov r3, r8\n" + "\tlsls r4, r3, 2\n" + "\tadds r0, r4, r3\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0, 0x26]\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tlsls r0, r5, 4\n" + "\tadds r0, r5\n" + "\tlsls r0, 2\n" + "\tldr r5, _080E3D5C @ =gSprites\n" + "\tadds r0, r5\n" + "\tbl DestroySpriteAndFreeResources_\n" + "\tldr r0, _080E3D60 @ =gBattleAnimAttacker\n" + "\tldrb r0, [r0]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tmov r9, r4\n" + "\tcmp r0, 0\n" + "\tbne _080E3D64\n" + "\tlsls r1, r7, 4\n" + "\tadds r1, r7\n" + "\tlsls r1, 2\n" + "\tadds r1, r5\n" + "\tldrh r0, [r1, 0x20]\n" + "\tnegs r0, r0\n" + "\tsubs r0, 0x20\n" + "\tstrh r0, [r1, 0x24]\n" + "\tb _080E3D78\n" + "\t.align 2, 0\n" + "_080E3D58: .4byte gTasks\n" + "_080E3D5C: .4byte gSprites\n" + "_080E3D60: .4byte gBattleAnimAttacker\n" + "_080E3D64:\n" + "\tlsls r0, r7, 4\n" + "\tadds r0, r7\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tldrh r2, [r0, 0x20]\n" + "\tmovs r4, 0x88\n" + "\tlsls r4, 1\n" + "\tadds r1, r4, 0\n" + "\tsubs r1, r2\n" + "\tstrh r1, [r0, 0x24]\n" + "_080E3D78:\n" + "\tldr r0, _080E3D8C @ =gTasks\n" + "\tmov r1, r9\n" + "\tadd r1, r8\n" + "\tlsls r1, 3\n" + "\tadds r1, r0\n" + "_080E3D82:\n" + "\tldrh r0, [r1, 0x8]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r1, 0x8]\n" + "\tb _080E3E6C\n" + "\t.align 2, 0\n" + "_080E3D8C: .4byte gTasks\n" + "_080E3D90:\n" + "\tmovs r0, 0\n" + "\tbl GetAnimBattlerSpriteId\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tldr r1, _080E3E04 @ =gTasks\n" + "\tmov r0, r8\n" + "\tlsls r4, r0, 2\n" + "\tadds r0, r4, r0\n" + "\tlsls r0, 3\n" + "\tadds r2, r0, r1\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 4\n" + "\tadds r0, r1, 0\n" + "\tldrh r3, [r2, 0xA]\n" + "\tadds r0, r3\n" + "\tstrh r0, [r2, 0xA]\n" + "\tldr r0, _080E3E08 @ =gBattleAnimAttacker\n" + "\tmov r10, r0\n" + "\tldrb r0, [r0]\n" + "\tstr r2, [sp, 0x18]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tmov r9, r4\n" + "\tldr r2, [sp, 0x18]\n" + "\tcmp r0, 0\n" + "\tbne _080E3E10\n" + "\tldr r1, _080E3E0C @ =gSprites\n" + "\tlsls r5, r7, 4\n" + "\tadds r0, r5, r7\n" + "\tlsls r0, 2\n" + "\tadds r6, r0, r1\n" + "\tldrh r0, [r2, 0xA]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 24\n" + "\tldrh r1, [r6, 0x24]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r6, 0x24]\n" + "\tmovs r2, 0x24\n" + "\tldrsh r4, [r6, r2]\n" + "\tmovs r3, 0x20\n" + "\tldrsh r0, [r6, r3]\n" + "\tadds r4, r0\n" + "\tmov r1, r10\n" + "\tldrb r0, [r1]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tadds r3, r5, 0\n" + "\tcmp r4, r0\n" + "\tblt _080E3E48\n" + "\tmovs r2, 0\n" + "\tstrh r2, [r6, 0x24]\n" + "\tb _080E3E48\n" + "\t.align 2, 0\n" + "_080E3E04: .4byte gTasks\n" + "_080E3E08: .4byte gBattleAnimAttacker\n" + "_080E3E0C: .4byte gSprites\n" + "_080E3E10:\n" + "\tldr r1, _080E3E7C @ =gSprites\n" + "\tlsls r5, r7, 4\n" + "\tadds r0, r5, r7\n" + "\tlsls r0, 2\n" + "\tadds r6, r0, r1\n" + "\tldrh r1, [r2, 0xA]\n" + "\tlsls r1, 16\n" + "\tasrs r1, 24\n" + "\tldrh r0, [r6, 0x24]\n" + "\tsubs r0, r1\n" + "\tstrh r0, [r6, 0x24]\n" + "\tmovs r3, 0x24\n" + "\tldrsh r4, [r6, r3]\n" + "\tmovs r1, 0x20\n" + "\tldrsh r0, [r6, r1]\n" + "\tadds r4, r0\n" + "\tmov r2, r10\n" + "\tldrb r0, [r2]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tadds r3, r5, 0\n" + "\tcmp r4, r0\n" + "\tbgt _080E3E48\n" + "\tmovs r4, 0\n" + "\tstrh r4, [r6, 0x24]\n" + "_080E3E48:\n" + "\tldr r1, _080E3E80 @ =gTasks\n" + "\tmov r0, r9\n" + "\tadd r0, r8\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0, 0xA]\n" + "\tstrh r1, [r0, 0xA]\n" + "\tldr r1, _080E3E7C @ =gSprites\n" + "\tadds r0, r3, r7\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x24\n" + "\tldrsh r0, [r0, r1]\n" + "\tcmp r0, 0\n" + "\tbne _080E3E6C\n" + "\tmov r0, r8\n" + "\tbl DestroyAnimVisualTask\n" + "_080E3E6C:\n" + "\tadd sp, 0x1C\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080E3E7C: .4byte gSprites\n" + "_080E3E80: .4byte gTasks\n"); +} +#endif void sub_80E3E84(struct Sprite *sprite) { diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index 0ee1eee2e..7d512b950 100644 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -40,7 +40,7 @@ #define LOHALF(n) ((n) & 0xFFFF) // IWRAM -EWRAM_DATA u16 gUnknown_3005424 = 0; +EWRAM_DATA int gUnknown_3005424 = 0; EWRAM_DATA u16 gUnknown_3005428 = 0; EWRAM_DATA u16 gUnknown_300542C = 0; @@ -104,8 +104,6 @@ static void PremierBallOpenParticleAnimation(u8); static void sub_80F1B3C(struct Sprite *); // Data -extern const struct SpriteTemplate gBallSpriteTemplates[]; //for now - struct BallCaptureSuccessStarData { s8 xOffset; @@ -910,8 +908,8 @@ static void sub_80EFA0C(struct Sprite *sprite) PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); gTasks[taskId].data[10] = 256; gUnknown_3005424 = 28; - gUnknown_300542C = (gSprites[spriteId].pos2.y + gSprites[spriteId].pos1.y) - (sprite->pos2.y + sprite->pos1.y); - gUnknown_3005428 = (gUnknown_300542C * 256) / 28; + gUnknown_300542C = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y); + gUnknown_3005428 = (u32)(gUnknown_300542C * 256) / 28; gTasks[taskId].data[2] = gUnknown_3005428; gTasks[taskId].data[0]++; break; @@ -1876,20 +1874,11 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite) gBattleSpritesDataPtr->animationData->field_A--; if (gBattleSpritesDataPtr->animationData->field_A == 0) { - for (i = 0; i < POKEBALL_COUNT; i++) - { - if (FuncIsActiveTask(gBallParticleAnimationFuncs[i]) == TRUE) - break; - } - - if (i == POKEBALL_COUNT) - { - for (j = 0; j < POKEBALL_COUNT; j++) - { - FreeSpriteTilesByTag(gBallParticleSpritesheets[j].tag); - FreeSpritePaletteByTag(gBallParticlePalettes[j].tag); - } - } + for (j = 0; j < POKEBALL_COUNT; j++) + { + FreeSpriteTilesByTag(gBallParticleSpritesheets[j].tag); + FreeSpritePaletteByTag(gBallParticlePalettes[j].tag); + } DestroySprite(sprite); } diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index 91c1fabec..4a45a3d8b 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -205,8 +205,8 @@ const struct SpriteTemplate gSpriteTemplate_83BF514 = .callback = sub_8076ED8, }; -const u8 gUnknown_83BF52C[] = _("TASK OVER\n"); -const u8 gUnknown_83BF536[] = {0x60, 0x5D, 0x58, 0x37, 0x55, 0xAE, 0x96, 0xAE, 0x0C, 0x1F, 0x0C, 0x10, 0xFF}; // +//const u8 gUnknown_83BF52C[] = _("TASK OVER\nタスクがオーバーしました"); //wont compile...? +const u8 gUnknown_83BF52C[] = {0xCE, 0xBB, 0xCD, 0xC5, 0x00, 0xC9, 0xD0, 0xBF, 0xCC, 0xFE, 0x60, 0x5D, 0x58, 0x37, 0x55, 0xAE, 0x96, 0xAE, 0x0C, 0x1F, 0x0C, 0x10, 0xFF}; static const struct Subsprite gSubsprites_83BF544[] = { |