From ed82f1a44d04675e1e737a704f353261de08120d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 11:11:32 -0500 Subject: sub_80C2020 --- src/battle/anim/battle_intro.c | 7 +---- src/battle/battle_2.c | 12 ------- src/battle/battle_4.c | 5 ++- src/battle/battle_anim.c | 8 ----- src/battle/battle_controller_linkopponent.c | 4 +-- src/battle/battle_controller_linkpartner.c | 4 +-- src/battle/battle_controller_opponent.c | 4 +-- src/battle/battle_controller_player.c | 14 +-------- src/battle/battle_controller_safari.c | 2 -- src/battle/battle_controller_wally.c | 2 -- src/battle/contest_link_80C2020.c | 49 +++++++++++++++++++++++++++++ src/battle/reshow_battle_screen.c | 8 ----- src/contest.c | 28 ++++------------- src/pokemon/pokemon_summary_screen.c | 6 ---- src/scene/evolution_scene.c | 8 ----- 15 files changed, 62 insertions(+), 99 deletions(-) create mode 100644 src/battle/contest_link_80C2020.c (limited to 'src') diff --git a/src/battle/anim/battle_intro.c b/src/battle/anim/battle_intro.c index 01f823fa7..5a6789743 100644 --- a/src/battle/anim/battle_intro.c +++ b/src/battle/anim/battle_intro.c @@ -12,11 +12,6 @@ #include "trig.h" extern u16 gBattleTypeFlags; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_WIN0V; extern u16 gUnknown_02024DE8; extern u8 gBattleMonForms[]; @@ -376,7 +371,7 @@ static void BattleIntroTask_ScrollAndFadeScenery(u8 taskId) REG_BLDALPHA = gTasks[taskId].data[4]; } -// Seems to only be used for link battles. +// Seems to only be used for link battles. static void BattleIntroTask_80E4C34(u8 taskId) { s32 i; diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index b00c35312..1a621f407 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -108,22 +108,10 @@ extern u16 gUnknown_02024DE8; extern u8 gActionSelectionCursor[]; extern u8 gMoveSelectionCursor[]; extern u8 gUnknown_02038470[]; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG3_Y; extern struct Window gUnknown_030041D0; -extern u16 gBattle_WIN1H; extern struct Window gUnknown_03004210; -extern u16 gBattle_WIN1V; extern struct Window gUnknown_03004250; -extern u16 gBattle_WIN0V; -extern u16 gBattle_BG2_Y; extern u32 gUnknown_03004284; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG1_X; -extern u16 gBattle_WIN0H; extern MainCallback gPreBattleCallback1; extern void (*gBattleMainFunc)(void); extern u8 gLeveledUpInBattle; diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 3763fc309..81f406165 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -163,7 +163,6 @@ extern u16 gChosenMove; //last used move in battle extern u8 gBankInMenu; extern u8 gActionForBanks[4]; extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch -extern u16 gBattle_BG3_X; extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one extern u8 gCurrentTurnActionNumber; extern u16 gTrappingMoves[]; @@ -1991,7 +1990,7 @@ static void atk0B_healthbarupdate(void) healthValue = currDmg; else healthValue = maxPossibleDmgValue; - + EmitHealthBarUpdate(0, healthValue); */ @@ -5533,7 +5532,7 @@ static void atk23_getexp(void) gBattleResources_statsBeforeLvlUp->spd = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); gBattleResources_statsBeforeLvlUp->spAtk = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK); gBattleResources_statsBeforeLvlUp->spDef = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF); - + gActiveBank = gBattleStruct->expGetterBank; EmitExpBarUpdate(0, gBattleStruct->expGetterID, gBattleMoveDamage); MarkBufferBankForExecution(gActiveBank); diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index c71c12ce7..2714768ab 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -1310,14 +1310,6 @@ EWRAM_DATA u8 gAnimBankAttacker = 0; EWRAM_DATA u8 gAnimBankTarget = 0; EWRAM_DATA u16 gAnimSpeciesByBanks[4] = {0}; EWRAM_DATA u8 gUnknown_0202F7D2 = 0; // some global pan variable -extern u16 gBattle_BG1_Y; -extern u16 gBattle_WIN1H; -extern u16 gBattle_WIN0V; -extern u16 gBattle_WIN1V; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG1_X; -extern u16 gBattle_WIN0H; u16 gSoundAnimFramesToWait; s16 gBattleAnimArgs[ANIM_ARGS_COUNT]; diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 40f50d7ff..d01c60b22 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -48,8 +48,6 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG0_X; extern u8 gUnknown_0300434C[]; extern u32 gBattleExecBuffer; extern MainCallback gPreBattleCallback1; @@ -1143,7 +1141,7 @@ void LinkOpponentHandlecmd3(void) u8 *dst; u8 i; - MEMSET_ALT(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], + MEMSET_ALT(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); LinkOpponentBufferExecCompleted(); diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index 3a16e12e6..654cf363a 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -48,8 +48,6 @@ extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG0_X; extern MainCallback gPreBattleCallback1; extern void (*gBattleBankFunc[])(void); extern u8 gHealthboxIDs[]; @@ -1092,7 +1090,7 @@ void LinkPartnerHandlecmd3(void) u8 *dst; u8 i; - MEMSET_ALT(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], + MEMSET_ALT(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); LinkPartnerBufferExecCompleted(); diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 5947053b6..435a5ed24 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -50,8 +50,6 @@ extern u8 gAnimMoveTurn; extern u8 gAnimScriptActive; extern void (*gAnimScriptCallback)(void); extern struct Window gUnknown_03004210; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG0_X; extern u8 gDisplayedStringBattle[]; extern u8 gBankTarget; extern u8 gAbsentBankFlags; @@ -1114,7 +1112,7 @@ void OpponentHandlecmd3(void) u8 *dst; u8 i; - MEMSET_ALT(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], + MEMSET_ALT(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); OpponentBufferExecCompleted(); } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index f036e841f..cb463d0ad 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -35,9 +35,6 @@ struct MovePpInfo #define SUB_803037C_TILE_DATA_OFFSET 444 #endif -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; - extern struct Window gUnknown_03004210; extern void (*gBattleBankFunc[])(void); @@ -67,13 +64,6 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern u8 gUnknown_02038470[]; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG3_Y; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG1_X; extern u8 gUnknown_03004344; extern u8 gUnknown_0300434C[]; @@ -148,8 +138,6 @@ extern u8 gAbsentBankFlags; extern u8 gUnknown_03004344; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG0_X; extern struct Window gUnknown_03004210; extern const u8 BattleText_SwitchWhich[]; extern u8 gUnknown_03004348; @@ -2286,7 +2274,7 @@ void PlayerHandlecmd3(void) u8 i; u8 *dst; - MEMSET_ALT(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], + MEMSET_ALT(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); PlayerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 0d193d68f..068c9a145 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -23,8 +23,6 @@ extern u8 gActiveBank; extern const u8 BattleText_MenuOptionsSafari[]; extern void *gBattleBankFunc[]; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG0_X; extern u8 gBattleBufferA[][0x200]; extern bool8 gDoingBattleAnim; extern u8 gObjectBankIDs[]; diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 49f530129..4432fff87 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -53,8 +53,6 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG0_X; extern u8 gUnknown_0300434C[]; extern const u8 BattleText_WallyMenu[]; extern const u8 BattleText_MenuOptions[]; diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c new file mode 100644 index 000000000..1656d2276 --- /dev/null +++ b/src/battle/contest_link_80C2020.c @@ -0,0 +1,49 @@ +#include "global.h" +#include "text.h" +#include "menu.h" +#include "battle.h" +#include "contest.h" +#include "link.h" + + +void sub_80C2020(void) +{ + REG_DISPCNT = DISPCNT_OBJ_1D_MAP; + Text_LoadWindowTemplate(&gWindowTemplate_81E6FA0); + Text_InitWindowWithTemplate(&gMenuWindow, &gWindowTemplate_81E6FA0); + REG_BG0CNT = BGCNT_WRAP | BGCNT_SCREENBASE(30); + REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(24); + REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(28); + REG_BG3CNT = BGCNT_WRAP | BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(26); + REG_MOSAIC = 0; + REG_WININ = 0x3f3f; + REG_WINOUT = 0x3f2e; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WIN1H = 0; + REG_WIN1V = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_DISPCNT |= DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + gBattle_WIN1H = 0; + gBattle_WIN1V = 0; +} diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index a78cb20df..e676fca99 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -11,14 +11,6 @@ extern struct SpriteTemplate gUnknown_02024E8C; extern struct Window gUnknown_03004210; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG3_Y; -extern u16 gBattle_BG0_Y; extern u8 gReservedSpritePaletteCount; extern u8 gActionSelectionCursor[4]; extern u8 gBankInMenu; diff --git a/src/contest.c b/src/contest.c index 93d1a8efc..e690488fb 100644 --- a/src/contest.c +++ b/src/contest.c @@ -46,19 +46,7 @@ extern u8 gBankAttacker; extern u8 gBankTarget; extern u8 gBanksBySide[]; extern u8 gObjectBankIDs[]; -extern u16 gBattle_BG3_X; -extern s16 gBattle_BG1_Y; -extern u16 gBattle_BG3_Y; -extern u16 gBattle_WIN1H; extern struct Window gUnknown_03004210; -extern u16 gBattle_WIN0V; -extern u16 gBattle_WIN1V; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG1_X; -extern u16 gBattle_WIN0H; extern u32 gUnknown_03005D28; // saved RNG value extern struct SpriteTemplate gUnknown_02024E8C; @@ -585,8 +573,7 @@ void sub_80AB9A0(u8 taskId) gTasks[taskId].data[0]++; break; case 1: - gBattle_BG1_Y += 7; - if (gBattle_BG1_Y <= 160) + if ((s16)(gBattle_BG1_Y += 7) <= 160) break; gTasks[taskId].data[0]++; break; @@ -1834,10 +1821,9 @@ void sub_80ADE54(u8 taskId) void sub_80ADEAC(u8 taskId) { - gBattle_BG1_Y -= 7; - if (gBattle_BG1_Y < 0) + if ((s16)(gBattle_BG1_Y -= 7) < 0) gBattle_BG1_Y = 0; - if (*(u16 *)&gBattle_BG1_Y == 0) // Why cast? + if (gBattle_BG1_Y == 0) // Why cast? { gTasks[taskId].func = sub_80ADEEC; gTasks[taskId].data[0] = 0; @@ -4990,10 +4976,9 @@ void sub_80B237C(u8 taskId) void sub_80B23BC(u8 taskId) { - gBattle_BG1_Y -= 7; - if (gBattle_BG1_Y < 0) + if ((s16)(gBattle_BG1_Y -= 7) < 0) gBattle_BG1_Y = 0; - if (*(u16 *)&gBattle_BG1_Y == 0) // Why cast? + if (gBattle_BG1_Y == 0) // Why cast? { gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; @@ -5053,8 +5038,7 @@ void sub_80B2400(u8 taskId) void sub_80B2508(u8 taskId) { - gBattle_BG1_Y += 7; - if (gBattle_BG1_Y > DISPLAY_HEIGHT) + if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT) gTasks[taskId].func = sub_80ADCDC; } diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 96f9c44f9..c85bed0fb 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -122,12 +122,6 @@ extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gUnknown_08208238[]; -extern u16 gBattle_BG3_Y; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG3_X; extern TaskFunc gUnknown_03005CF0; extern struct SpriteTemplate gUnknown_02024E8C; diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index 3ba325574..4d9c8be02 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -65,14 +65,6 @@ void nullsub_6(void); bool32 IsHMMove2(u16 move); extern struct Window gUnknown_03004210; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; extern u8 gBattleTerrain; extern u8 gReservedSpritePaletteCount; extern u16 gMoveToLearn; -- cgit v1.2.3 From 0ec2cb85de36a636a96f24101cd5a20ffb53f5ea Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 12:01:01 -0500 Subject: sub_80C2144 --- src/battle/contest_link_80C2020.c | 48 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 1656d2276..5e3cc3cce 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -1,10 +1,18 @@ #include "global.h" +#include "decompress.h" +#include "palette.h" +#include "graphics.h" #include "text.h" #include "menu.h" #include "battle.h" #include "contest.h" #include "link.h" +#define ABS(x) ((x) < 0 ? -(x) : (x)) + +void sub_80C37E4(void); +u8 sub_80C3990(u8 a0, u8 a5); +s8 sub_80C39E4(u8 a0, u8 a5); void sub_80C2020(void) { @@ -47,3 +55,43 @@ void sub_80C2020(void) gBattle_WIN1H = 0; gBattle_WIN1V = 0; } + +void sub_80C2144(void) +{ + int i; + int j; + s8 r7; + s8 r4; + u16 r6; + u16 r3; + + DmaFill32Large(3, 0, VRAM, VRAM_SIZE, 0x1000); + LZDecompressVram(gUnknown_08D1977C, BG_SCREEN_ADDR(0)); + LZDecompressVram(gUnknown_08D1A490, BG_SCREEN_ADDR(26)); + LZDecompressVram(gUnknown_08D1A364, BG_SCREEN_ADDR(28)); + LZDecompressVram(gUnknown_08D1A250, BG_SCREEN_ADDR(30)); + sub_80C37E4(); + LoadCompressedPalette(gUnknown_08D1A618, 0, 0x200); + LoadFontDefaultPalette(&gWindowTemplate_81E6FA0); + for (i = 0; i < 4; i++) + { + r7 = sub_80C3990(i, 1); + r4 = sub_80C39E4(i, 1); + for (j = 0; j < 10; j++) + { + r6 = 0x60b2; + if (j < r7) + r6 = 0x60b4; + if (j < ABS(r4)) + { + r3 = 0x60a4; + if (r4 < 0) + r3 = 0x60a6; + } + else + r3 = 0x60a2; + ((u16 *)BG_VRAM)[i * 0x60 + j + 0x60b3] = r6; + ((u16 *)BG_VRAM)[i * 0x60 + j + 0x60d3] = r3; + } + } +} -- cgit v1.2.3 From 49ff4ad4e8f5cf8cea984e255ba3bb5051ff91e6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 12:25:04 -0500 Subject: through sub_80C2340 --- src/battle/contest_link_80C2020.c | 37 +++++++++++++++++++++++++++++++++++++ src/contest.c | 6 +++--- src/contest_ai.c | 5 ++--- src/debug/matsuda_debug_menu.c | 19 +------------------ src/pokemon/pokemon_size_record.c | 2 ++ src/script_pokemon_util_80C4BF0.c | 16 ++-------------- 6 files changed, 47 insertions(+), 38 deletions(-) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 5e3cc3cce..27f3f8ea3 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -3,6 +3,7 @@ #include "palette.h" #include "graphics.h" #include "text.h" +#include "string_util.h" #include "menu.h" #include "battle.h" #include "contest.h" @@ -14,6 +15,9 @@ void sub_80C37E4(void); u8 sub_80C3990(u8 a0, u8 a5); s8 sub_80C39E4(u8 a0, u8 a5); +extern const u8 gUnknown_083D17DC[]; +extern const u8 gUnknown_083D17E0[]; + void sub_80C2020(void) { REG_DISPCNT = DISPCNT_OBJ_1D_MAP; @@ -95,3 +99,36 @@ void sub_80C2144(void) } } } + +void sub_80C226C(u8 a0) +{ + u8 *strbuf; + + if (a0 == gContestPlayerMonIndex) + strbuf = StringCopy(gDisplayedStringBattle, gUnknown_083D17DC); + else + strbuf = gDisplayedStringBattle; + strbuf[0] = EXT_CTRL_CODE_BEGIN; + strbuf[1] = 0x06; + strbuf[2] = 0x04; + strbuf += 3; + strbuf = StringCopy(strbuf, gContestMons[a0].nickname); + strbuf[0] = EXT_CTRL_CODE_BEGIN; + strbuf[1] = 0x13; + strbuf[2] = 0x32; + strbuf += 3; + strbuf = StringCopy(strbuf, gUnknown_083D17E0); + if (gIsLinkContest & 1) + StringCopy(strbuf, gLinkPlayers[a0].name); + else + StringCopy(strbuf, gContestMons[a0].trainerName); + Text_InitWindowAndPrintText(&gMenuWindow, gDisplayedStringBattle, a0 * 36 + 770, 7, a0 * 3 + 4); +} + +void sub_80C2340(void) +{ + int i; + + for (i = 0; i < 4; i++) + sub_80C226C(i); +} diff --git a/src/contest.c b/src/contest.c index e690488fb..9c115840e 100644 --- a/src/contest.c +++ b/src/contest.c @@ -47,7 +47,7 @@ extern u8 gBankTarget; extern u8 gBanksBySide[]; extern u8 gObjectBankIDs[]; extern struct Window gUnknown_03004210; -extern u32 gUnknown_03005D28; // saved RNG value +extern u32 gContestRngValue; // saved RNG value extern struct SpriteTemplate gUnknown_02024E8C; @@ -483,7 +483,7 @@ void sub_80AB6B4(u8 taskId) GetMultiplayerId(); // unused return value DestroyTask(taskId); gTasks[sContest.mainTaskId].func = sub_80AB960; - gRngValue = gUnknown_03005D28; + gRngValue = gContestRngValue; } } @@ -1799,7 +1799,7 @@ void sub_80ADDA4(u8 taskId) sub_80AF668(); sub_80AF138(); sub_80BE23C(sContestantStatus[gContestPlayerMonIndex].prevMove); - gUnknown_03005D28 = gRngValue; + gContestRngValue = gRngValue; StringExpandPlaceholders(gStringVar4, gUnknown_083CB02C); Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[2] = 0; diff --git a/src/contest_ai.c b/src/contest_ai.c index 66b387270..932f9fb8a 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -8,7 +8,6 @@ extern u8 AreMovesContestCombo(u16, u16); extern bool8 sub_80B214C(u8); extern bool8 Contest_IsMonsTurnDisabled(u8); -extern s16 gUnknown_02038670[]; extern u16 gSpecialVar_ContestCategory; extern u8 *gAIScriptPtr; @@ -1119,7 +1118,7 @@ static void ContestAICmd_check_would_finish_combo(void) if(sContestantStatus[eContestAI->unk41].prevMove) result = AreMovesContestCombo(sContestantStatus[eContestAI->unk41].prevMove, move); - + if(result) result = 1; @@ -1727,7 +1726,7 @@ static void ContestAICmd_unk_85(void) int result = 0; int i; u16 arg = T1_READ_16(gAIScriptPtr + 1); - + for(i = 0; i < 4; i++) { u16 move = gContestMons[eContestAI->unk41].moves[i]; diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index da1937adb..62d49fc62 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -1,5 +1,6 @@ #include "global.h" #include "matsuda_debug_menu.h" +#include "battle.h" #include "contest.h" #include "contest_link_80C2020.h" #include "contest_link_80C857C.h" @@ -18,30 +19,12 @@ #include "ewram.h" extern u8 gUnknown_0203856C; -extern s16 gUnknown_02038670[]; -extern s16 gUnknown_02038678[]; -extern s16 gUnknown_02038680[]; -extern u8 gContestFinalStandings[]; extern u8 gUnknown_02038694; -extern u8 gIsLinkContest; -extern u8 gUnknown_0203869B; -extern u8 gContestPlayerMonIndex; extern u16 gSpecialVar_ContestCategory; extern u16 gSpecialVar_ContestRank; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; - extern u8 (*gMenuCallback)(void); -extern bool8 gReceivedRemoteLinkPlayers; - static bool8 sub_80A9B78(void); static void sub_80A9BE4(u8 taskId); static void sub_80A9C98(u8); diff --git a/src/pokemon/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c index f92a95bfb..2ba4e57cc 100644 --- a/src/pokemon/pokemon_size_record.c +++ b/src/pokemon/pokemon_size_record.c @@ -8,6 +8,8 @@ #include "strings2.h" #include "text.h" +const u16 Unknown_083D17EC[] = INCBIN_U16("graphics/unknown/unknown_3D17EC.gbapal"); + struct UnknownStruct { u16 unk0; diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index f991297ab..22fce174a 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -32,26 +32,14 @@ extern void sub_80C4698(u8 *, u8); extern struct SpriteTemplate gUnknown_02024E8C; -extern u8 gContestPlayerMonIndex; -extern u8 gIsLinkContest; -extern u8 gPlayerPartyCount; extern u8 gSelectedOrderFromParty[]; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; extern u16 gSpecialVar_ContestCategory; extern u16 gSpecialVar_ContestRank; -extern u16 gSpecialVar_Result; - -extern u32 gUnknown_03005D28; extern u8 gUnknown_02038694; extern u8 gUnknown_0203856C; -extern u8 gContestFinalStandings[]; -extern s16 gUnknown_02038670[]; -extern s16 gUnknown_02038678[]; void SetContestTrainerGfxIds(void) { @@ -373,8 +361,8 @@ void ScriptRandom(void) if(gIsLinkContest & 1) { - gUnknown_03005D28 = 1103515245 * gUnknown_03005D28 + 24691; - random = gUnknown_03005D28 >> 16; + gContestRngValue = 1103515245 * gContestRngValue + 24691; + random = gContestRngValue >> 16; scriptPtr = &gSpecialVar_Result; } else -- cgit v1.2.3 From 416d1b8e7e2fa51f7e250e759186e2870d4f8e6c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 16:08:03 -0500 Subject: sub_80C2358 --- src/battle/contest_link_80C2020.c | 59 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 27f3f8ea3..761ede549 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -1,19 +1,45 @@ #include "global.h" +#include "constants/songs.h" +#include "ewram.h" +#include "main.h" +#include "scanline_effect.h" #include "decompress.h" #include "palette.h" #include "graphics.h" #include "text.h" #include "string_util.h" #include "menu.h" +#include "sound.h" #include "battle.h" #include "contest.h" #include "link.h" #define ABS(x) ((x) < 0 ? -(x) : (x)) +struct UnkEwramStruct18000 { + u8 filler_00[2]; + u8 unk_02; + u8 filler_03[0x15]; +}; + +struct UnkEwramStruct18018 { + u8 filler_00[0x50]; +}; + +#define eContestLink80C2020Struct2018000 (*(struct UnkEwramStruct18000 *)(gSharedMem + 0x18000)) +#define eContestLink80C2020Struct2018018 (*(struct UnkEwramStruct18018 *)(gSharedMem + 0x18018)) + +void sub_80C2430(void); +void sub_80C2448(void); +void sub_80C24F4(u8 taskId); +void sub_80C2F28(u8 taskId); void sub_80C37E4(void); -u8 sub_80C3990(u8 a0, u8 a5); -s8 sub_80C39E4(u8 a0, u8 a5); +void sub_80C310C(void); +void sub_80C30D4(u8 a0, u8 a1); +void sub_80C33DC(void); +void sub_80C3F00(void); +u8 sub_80C3990(u8 a0, u8 a1); +s8 sub_80C39E4(u8 a0, u8 a1); extern const u8 gUnknown_083D17DC[]; extern const u8 gUnknown_083D17E0[]; @@ -132,3 +158,32 @@ void sub_80C2340(void) for (i = 0; i < 4; i++) sub_80C226C(i); } + +void sub_80C2358(void) +{ + gPaletteFade.bufferTransferDisabled = TRUE; + SetVBlankCallback(NULL); + sub_80C2020(); + ScanlineEffect_Clear(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + sub_80C2144(); + sub_80C310C(); + sub_80C30D4(0, 1); + sub_80C2340(); + eContestLink80C2020Struct2018000 = (struct UnkEwramStruct18000){}; + eContestLink80C2020Struct2018018 = (struct UnkEwramStruct18018){}; + sub_80C33DC(); + BeginNormalPaletteFade(0xffffffff, 0, 16, 0, 0); + gPaletteFade.bufferTransferDisabled = FALSE; + eContestLink80C2020Struct2018000.unk_02 = CreateTask(sub_80C24F4, 5); + SetMainCallback2(sub_80C2430); + gBattle_WIN1H = 0xf0; + gBattle_WIN1V = 0x80a0; + CreateTask(sub_80C2F28, 20); + sub_80C3F00(); + PlayBGM(BGM_CON_K); + SetVBlankCallback(sub_80C2448); +} -- cgit v1.2.3 From 5e035ca0af7c6475a52ec3b84cd41f8838491d17 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 16:27:02 -0500 Subject: through sub_80C24F4 --- src/battle/contest_link_80C2020.c | 48 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 761ede549..1fe6e8cb6 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -6,6 +6,7 @@ #include "decompress.h" #include "palette.h" #include "graphics.h" +#include "strings2.h" #include "text.h" #include "string_util.h" #include "menu.h" @@ -32,11 +33,14 @@ struct UnkEwramStruct18018 { void sub_80C2430(void); void sub_80C2448(void); void sub_80C24F4(u8 taskId); +void sub_80C255C(u8 taskId); +void sub_80C2600(u8 taskId); void sub_80C2F28(u8 taskId); void sub_80C37E4(void); void sub_80C310C(void); void sub_80C30D4(u8 a0, u8 a1); void sub_80C33DC(void); +void sub_80C3698(const u8 *string); void sub_80C3F00(void); u8 sub_80C3990(u8 a0, u8 a1); s8 sub_80C39E4(u8 a0, u8 a1); @@ -187,3 +191,47 @@ void sub_80C2358(void) PlayBGM(BGM_CON_K); SetVBlankCallback(sub_80C2448); } + +void sub_80C2430(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); +} + +void sub_80C2448(void) +{ + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; + REG_BG1HOFS = gBattle_BG1_X; + REG_BG1VOFS = gBattle_BG1_Y; + REG_BG2HOFS = gBattle_BG2_X; + REG_BG2VOFS = gBattle_BG2_Y; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; + REG_WIN0H = gBattle_WIN0H; + REG_WIN0V = gBattle_WIN0V; + REG_WIN1H = gBattle_WIN1H; + REG_WIN1V = gBattle_WIN1V; + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void sub_80C24F4(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gIsLinkContest & 1) + { + sub_80C3698(gOtherText_LinkStandby); + gTasks[taskId].func = sub_80C255C; + } + else + { + gTasks[taskId].func = sub_80C2600; + } + } +} -- cgit v1.2.3 From 6a04b79b7cd3e250c4bb9e786327847ac659c969 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 21:43:26 -0500 Subject: through sub_80C2770 --- src/battle/contest_link_80C2020.c | 139 +++++++++++++++++++++++++++++++++++++- 1 file changed, 137 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 1fe6e8cb6..dd09e2465 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -14,13 +14,21 @@ #include "battle.h" #include "contest.h" #include "link.h" +#include "contest_link_80C857C.h" +#include "contest_link_80C2020.h" #define ABS(x) ((x) < 0 ? -(x) : (x)) struct UnkEwramStruct18000 { - u8 filler_00[2]; + u8 unk_00; + u8 filler_01[1]; u8 unk_02; - u8 filler_03[0x15]; + u8 filler_03[1]; + u8 unk_04; + u8 filler_05[5]; + u8 unk_0a; + u8 filler_0b[9]; + u8 unk_14; }; struct UnkEwramStruct18018 { @@ -34,8 +42,19 @@ void sub_80C2430(void); void sub_80C2448(void); void sub_80C24F4(u8 taskId); void sub_80C255C(u8 taskId); +void sub_80C25A4(u8 taskId); +void sub_80C25C0(u8 taskId); void sub_80C2600(u8 taskId); +void sub_80C26E4(u8 taskId); +void sub_80C2770(u8 taskId); +void sub_80C27EC(u8 taskId); void sub_80C2F28(u8 taskId); +void sub_80C2F64(u8 taskId); +void sub_80C3158(const u8 *string, u8 spriteId); +u16 sub_80C34AC(const u8 *string); +void sub_80C34CC(s16 data4, s16 pos0y, u16 data5, s16 data6); +void sub_80C3520(u16 a0); +void sub_80C3764(void); void sub_80C37E4(void); void sub_80C310C(void); void sub_80C30D4(u8 a0, u8 a1); @@ -44,6 +63,7 @@ void sub_80C3698(const u8 *string); void sub_80C3F00(void); u8 sub_80C3990(u8 a0, u8 a1); s8 sub_80C39E4(u8 a0, u8 a1); +void sub_80C40D4(u8 a0, u8 a1); extern const u8 gUnknown_083D17DC[]; extern const u8 gUnknown_083D17E0[]; @@ -235,3 +255,118 @@ void sub_80C24F4(u8 taskId) } } } + +void sub_80C255C(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers && GetLinkPlayerCount() == MAX_LINK_PLAYERS) + { + CreateTask(sub_80C25A4, 0); + gTasks[taskId].func = TaskDummy; + } +} + +void sub_80C25A4(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80C25C0); +} + +void sub_80C25C0(u8 taskId) +{ + if (sub_8007ECC()) + { + DestroyTask(taskId); + gTasks[eContestLink80C2020Struct2018000.unk_02].func = sub_80C2600; + sub_80C3764(); + } +} + +void sub_80C2600(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + CreateTask(sub_80C2F64, 20); + sub_80C3158(gContestText_AnnounceResults, eContestLink80C2020Struct2018000.unk_00); + sub_80C34CC(sub_80C34AC(gContestText_AnnounceResults), 0x90, 0x78, 0x440); + gTasks[taskId].data[0]++; + } + else if (gTasks[taskId].data[0] == 1) + { + if (eContestLink80C2020Struct2018000.unk_04 == 0) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + } + else if (gTasks[taskId].data[0] == 2) + { + if (++gTasks[taskId].data[1] == 0x15) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + } + else if (gTasks[taskId].data[0] == 3) + { + sub_80C3158(gContestText_PreliminaryResults, eContestLink80C2020Struct2018000.unk_00); + sub_80C34CC(sub_80C34AC(gContestText_PreliminaryResults), 0x90, 0xffff, 0x440); + gTasks[taskId].data[0]++; + } + else if (gTasks[taskId].data[0] == 4) + { + if (eContestLink80C2020Struct2018000.unk_04 == 2) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80C26E4; + } + } +} + +void sub_80C26E4(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (eContestLink80C2020Struct2018000.unk_0a == 0) + { + sub_80C40D4(0, gTasks[taskId].data[2]++); + if (eContestLink80C2020Struct2018000.unk_14 == 0) + { + gTasks[taskId].data[0] = 2; + } + else + { + gTasks[taskId].data[0]++; + } + } + break; + case 1: + if (eContestLink80C2020Struct2018000.unk_14 == 0) + { + gTasks[taskId].data[0] = 0; + } + break; + case 2: + sub_80C3520(0x440); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = sub_80C2770; + break; + } +} + +void sub_80C2770(u8 taskId) +{ + if (eContestLink80C2020Struct2018000.unk_04 == 0) + { + if (++gTasks[taskId].data[1] == 21) + { + gTasks[taskId].data[1] = 0; + sub_80C3158(gContestText_Round2Results, eContestLink80C2020Struct2018000.unk_00); + sub_80C34CC(sub_80C34AC(gContestText_Round2Results), 0x90, 0xffff, 0x440); + } + } + else if (eContestLink80C2020Struct2018000.unk_04 == 2) + { + gTasks[taskId].func = sub_80C27EC; + } +} -- cgit v1.2.3 From 69a690ef38cc80e202606d28a8c9934f7e5ddaa9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 22:56:32 -0500 Subject: through sub_80C2A8C --- src/battle/contest_link_80C2020.c | 225 +++++++++++++++++++++++++++++++++++++- 1 file changed, 219 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index dd09e2465..cf8c32405 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -1,4 +1,5 @@ #include "global.h" +#include "data2.h" #include "constants/songs.h" #include "ewram.h" #include "main.h" @@ -14,18 +15,31 @@ #include "battle.h" #include "contest.h" #include "link.h" +#include "field_effect.h" #include "contest_link_80C857C.h" #include "contest_link_80C2020.h" #define ABS(x) ((x) < 0 ? -(x) : (x)) +#define GET_CONTEST_WINNER(var) { \ + for ((var) = 0; (var) < 4; (var)++) \ + { \ + if (gContestFinalStandings[i] == 0) \ + break; \ + } \ +} + struct UnkEwramStruct18000 { u8 unk_00; u8 filler_01[1]; u8 unk_02; u8 filler_03[1]; u8 unk_04; - u8 filler_05[5]; + u8 unk_05; + u8 unk_06; + u8 filler_07[1]; + u8 unk_08; + u8 unk_09; u8 unk_0a; u8 filler_0b[9]; u8 unk_14; @@ -48,23 +62,34 @@ void sub_80C2600(u8 taskId); void sub_80C26E4(u8 taskId); void sub_80C2770(u8 taskId); void sub_80C27EC(u8 taskId); +void sub_80C2878(u8 taskId); +void sub_80C2A8C(u8 taskId); +void sub_80C2D1C(u8 taskId); void sub_80C2F28(u8 taskId); void sub_80C2F64(u8 taskId); +void sub_80C30D4(u8 a0, u8 a1); +void sub_80C310C(void); void sub_80C3158(const u8 *string, u8 spriteId); +void sub_80C33DC(void); u16 sub_80C34AC(const u8 *string); void sub_80C34CC(s16 data4, s16 pos0y, u16 data5, s16 data6); void sub_80C3520(u16 a0); +void sub_80C3698(const u8 *string); void sub_80C3764(void); void sub_80C37E4(void); -void sub_80C310C(void); -void sub_80C30D4(u8 a0, u8 a1); -void sub_80C33DC(void); -void sub_80C3698(const u8 *string); -void sub_80C3F00(void); u8 sub_80C3990(u8 a0, u8 a1); s8 sub_80C39E4(u8 a0, u8 a1); +void sub_80C3A5C(u8 taskId); +void sub_80C3B30(u8 taskId); +void sub_80C3C44(struct Sprite *sprite); +void sub_80C3CB8(struct Sprite *sprite); +void sub_80C3D04(u8 taskId); +void sub_80C3E60(u8 a0, u8 a1); +void sub_80C3F00(void); void sub_80C40D4(u8 a0, u8 a1); +extern const struct CompressedSpriteSheet gUnknown_083D17CC; +extern const struct CompressedSpritePalette gUnknown_083D17D4; extern const u8 gUnknown_083D17DC[]; extern const u8 gUnknown_083D17E0[]; @@ -370,3 +395,191 @@ void sub_80C2770(u8 taskId) gTasks[taskId].func = sub_80C27EC; } } + +void sub_80C27EC(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (eContestLink80C2020Struct2018000.unk_0a == 0) + { + sub_80C40D4(1, gTasks[taskId].data[2]++); + if (eContestLink80C2020Struct2018000.unk_14 == 0) + { + gTasks[taskId].data[0] = 2; + } + else + { + gTasks[taskId].data[0]++; + } + } + break; + case 1: + if (eContestLink80C2020Struct2018000.unk_14 == 0) + { + gTasks[taskId].data[0] = 0; + } + break; + case 2: + sub_80C3520(0x440); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80C2878; + break; + } +} + +void sub_80C2878(u8 taskId) +{ + int i; + u8 taskId2; + u8 strbuf[100]; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (eContestLink80C2020Struct2018000.unk_04 == 0) + gTasks[taskId].data[0]++; + break; + case 1: + if (++gTasks[taskId].data[1] == 31) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + break; + case 2: + for (i = 0; i < 4; i++) + { + taskId2 = CreateTask(sub_80C3A5C, 10); + gTasks[taskId2].data[0] = gContestFinalStandings[i]; + gTasks[taskId2].data[1] = i; + } + gTasks[taskId].data[0]++; + break; + case 3: + if (eContestLink80C2020Struct2018000.unk_05 == 4) + { + if (++gTasks[taskId].data[1] == 31) + { + gTasks[taskId].data[1] = 0; + CreateTask(sub_80C3B30, 10); + gTasks[taskId].data[0]++; + GET_CONTEST_WINNER(i); + sub_80C3E60(i, 14); + } + } + break; + case 4: + if (++gTasks[taskId].data[1] == 21) + { + gTasks[taskId].data[1] = 0; + GET_CONTEST_WINNER(i); + if (gIsLinkContest & 1) + { + StringCopy(gStringVar1, gLinkPlayers[i].name); + } + else + { + StringCopy(gStringVar1, gContestMons[i].trainerName); + } + StringCopy(gStringVar2, gContestMons[i].nickname); + StringExpandPlaceholders(strbuf, gContestText_PokeWon); + sub_80C3158(strbuf, eContestLink80C2020Struct2018000.unk_00); + sub_80C34CC(sub_80C34AC(strbuf), 0x90, 0xffff, 0x440); + gTasks[taskId].data[0]++; + } + break; + case 5: + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80C2A8C; + break; + } +} + +void sub_80C2A8C(u8 taskId) +{ + int i; + u8 spriteId; + u16 species; + u32 personality; + u32 otId; + const struct CompressedSpritePalette *monPal; + + switch (gTasks[taskId].data[0]) + { + case 0: + gBattle_WIN0H = 0xf0; + gBattle_WIN0V = 0x5050; + GET_CONTEST_WINNER(i); + species = gContestMons[i].species; + personality = gContestMons[i].personality; + otId = gContestMons[i].otId; + HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (intptr_t)gSharedMem, gUnknown_081FAF4C[1], species, personality); + monPal = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); + LoadCompressedObjectPalette(monPal); + GetMonSpriteTemplate_803C56C(species, 1); + gUnknown_02024E8C.paletteTag = monPal->tag; + spriteId = CreateSprite(&gUnknown_02024E8C, 0x110, 0x50, 10); + gSprites[spriteId].data[1] = species; + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].callback = sub_80C3C44; + eContestLink80C2020Struct2018000.unk_08 = spriteId; + LoadCompressedObjectPic(&gUnknown_083D17CC); + LoadCompressedObjectPalette(&gUnknown_083D17D4); + CreateTask(sub_80C3D04, 10); + gTasks[taskId].data[0]++; + break; + case 1: + if (++gTasks[taskId].data[3] == 1) + { + u8 win0v; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[2] += 2; + if (gTasks[taskId].data[2] > 0x20) + gTasks[taskId].data[2] = 0x20; + win0v = gTasks[taskId].data[2]; + gBattle_WIN0V = ((0x50 - win0v) << 8) | (0x50 + win0v); + if (win0v == 0x20) + { + gTasks[taskId].data[0]++; + } + } + break; + case 2: + if (eContestLink80C2020Struct2018000.unk_06 == 1) + { + gTasks[taskId].data[0]++; + } + break; + case 3: + if (++gTasks[taskId].data[1] == 121) + { + gTasks[taskId].data[1] = 0; + gSprites[eContestLink80C2020Struct2018000.unk_08].callback = sub_80C3CB8; + gTasks[taskId].data[0]++; + } + break; + case 4: + if (eContestLink80C2020Struct2018000.unk_06 == 2) + { + u8 win0v = (gBattle_WIN0V >> 8); + win0v += 2; + if (win0v > 0x50) + win0v = 0x50; + gBattle_WIN0V = (win0v << 8) | (0xa0 - win0v); + if (win0v == 0x50) + { + gTasks[taskId].data[0]++; + } + } + break; + case 5: + if (eContestLink80C2020Struct2018000.unk_06 == 2) + { + eContestLink80C2020Struct2018000.unk_09 = 1; + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80C2D1C; + } + break; + } +} -- cgit v1.2.3 From 1fd9669d422f8e412d73cfb48f0651483bee833c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 23:09:02 -0500 Subject: contest_link_80C2020 data --- src/battle/contest_link_80C2020.c | 67 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index cf8c32405..4e9209554 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -1,5 +1,6 @@ #include "global.h" #include "data2.h" +#include "util.h" #include "constants/songs.h" #include "ewram.h" #include "main.h" @@ -84,14 +85,72 @@ void sub_80C3B30(u8 taskId); void sub_80C3C44(struct Sprite *sprite); void sub_80C3CB8(struct Sprite *sprite); void sub_80C3D04(u8 taskId); +void sub_80C3DF0(struct Sprite *sprite); void sub_80C3E60(u8 a0, u8 a1); void sub_80C3F00(void); void sub_80C40D4(u8 a0, u8 a1); -extern const struct CompressedSpriteSheet gUnknown_083D17CC; -extern const struct CompressedSpritePalette gUnknown_083D17D4; -extern const u8 gUnknown_083D17DC[]; -extern const u8 gUnknown_083D17E0[]; +const u16 gUnknown_083D1624[] = INCBIN_U16("graphics/unknown/unknown_3D1624/0.4bpp"); +const u16 gUnknown_083D1644[] = INCBIN_U16("graphics/unknown/unknown_3D1624/1.4bpp"); +const u16 gUnknown_083D1664[] = INCBIN_U16("graphics/unknown/unknown_3D1624/2.4bpp"); +const u16 gUnknown_083D1684[] = INCBIN_U16("graphics/unknown/unknown_3D1624/3.4bpp"); +const u16 gUnknown_083D16A4[] = INCBIN_U16("graphics/unknown/unknown_3D1624/4.4bpp"); +const u16 gUnknown_083D16C4[] = INCBIN_U16("graphics/unknown/unknown_3D1624/5.4bpp"); +const u16 gUnknown_083D16E4[] = INCBIN_U16("graphics/unknown/unknown_3D1624/6.4bpp"); +const u16 gUnknown_083D1704[] = INCBIN_U16("graphics/unknown/unknown_3D1624/7.4bpp"); +const u16 gMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal"); + +const struct OamData gOamData_83D1744 = { + .shape = ST_OAM_H_RECTANGLE, + .size = 3, + .priority = 3, + .paletteNum = 2 +}; + +const struct SpriteTemplate gSpriteTemplate_83D174C = { + 0xbc1, + 0xbc1, + &gOamData_83D1744, + gDummySpriteAnimTable, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +const struct SpriteSheet gUnknown_083D1764[] = { + {gMiscBlank_Gfx, 0x400, 0xbc1}, + {gMiscBlank_Gfx, 0x400, 0xbc2}, + {gMiscBlank_Gfx, 0x400, 0xbc3}, + {gMiscBlank_Gfx, 0x400, 0xbc4}, + {gMiscBlank_Gfx, 0x400, 0xbc5}, + {gMiscBlank_Gfx, 0x400, 0xbc6}, + {gMiscBlank_Gfx, 0x400, 0xbc7}, + {gMiscBlank_Gfx, 0x400, 0xbc8}, +}; + +const struct SpritePalette gUnknown_083D17A4 = { + gMiscBlank_Pal, 0xbc1 +}; + +const struct OamData gOamData_83D17AC = {}; + +const struct SpriteTemplate gSpriteTemplate_83D17B4 = { + 0xbc9, + 0xbc9, + &gOamData_83D17AC, + gDummySpriteAnimTable, + NULL, + gDummySpriteAffineAnimTable, + sub_80C3DF0 +}; + +const struct CompressedSpriteSheet gUnknown_083D17CC = {gContestConfetti_Gfx, 0x220, 0xbc9}; + +const struct CompressedSpritePalette gUnknown_083D17D4 = {gContestConfetti_Pal, 0xbc9}; + +const u8 gUnknown_083D17DC[] = _("{COLOR RED}"); +const u8 gUnknown_083D17E0[] = _("/"); +const u8 gUnknown_083D17E2[] = _("{SIZE 3}{COLOR_HIGHLIGHT_SHADOW WHITE2 DARK_GREY LIGHT_BLUE}"); void sub_80C2020(void) { -- cgit v1.2.3 From 426b6a7290d3553ad1059e8f3a1d5e5009d2dafc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 23:40:51 -0500 Subject: through sub_80C2EA0 --- src/battle/contest_link_80C2020.c | 88 ++++++++++++++++++++++++++++++++++++++- src/field/tv.c | 26 ++---------- 2 files changed, 91 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 4e9209554..376ad1720 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -1,6 +1,7 @@ #include "global.h" #include "data2.h" #include "util.h" +#include "overworld.h" #include "constants/songs.h" #include "ewram.h" #include "main.h" @@ -13,10 +14,13 @@ #include "string_util.h" #include "menu.h" #include "sound.h" +#include "pokedex.h" +#include "tv.h" #include "battle.h" #include "contest.h" #include "link.h" #include "field_effect.h" +#include "field_specials.h" #include "contest_link_80C857C.h" #include "contest_link_80C2020.h" @@ -34,7 +38,7 @@ struct UnkEwramStruct18000 { u8 unk_00; u8 filler_01[1]; u8 unk_02; - u8 filler_03[1]; + u8 unk_03; u8 unk_04; u8 unk_05; u8 unk_06; @@ -66,6 +70,10 @@ void sub_80C27EC(u8 taskId); void sub_80C2878(u8 taskId); void sub_80C2A8C(u8 taskId); void sub_80C2D1C(u8 taskId); +void sub_80C2D80(u8 taskId); +void sub_80C2DD8(u8 taskId); +void sub_80C2E14(u8 taskId); +void sub_80C2EA0(u8 taskId); void sub_80C2F28(u8 taskId); void sub_80C2F64(u8 taskId); void sub_80C30D4(u8 a0, u8 a1); @@ -642,3 +650,81 @@ void sub_80C2A8C(u8 taskId) break; } } + +void sub_80C2D1C(u8 taskId) +{ + int i; + + if (gMain.newKeys & A_BUTTON) + { + if (!(gIsLinkContest & 1)) + { + for (i = 0; i < 4; i++) + { + GetSetPokedexFlag(SpeciesToNationalPokedexNum(gContestMons[i].species), FLAG_SET_SEEN); + } + } + gTasks[taskId].func = sub_80C2D80; + } +} + +void sub_80C2D80(u8 taskId) +{ + if (gIsLinkContest & 1) + { + sub_80C3698(gOtherText_LinkStandby); + sub_800832C(); + gTasks[taskId].func = sub_80C2DD8; + } + else + { + gTasks[taskId].func = sub_80C2E14; + } +} + +void sub_80C2DD8(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers == 0) + { + gIsLinkContest = 0; + sub_80C3764(); + gTasks[taskId].func = sub_80C2E14; + } +} + +void sub_80C2E14(u8 taskId) +{ + sub_80BE284(gContestFinalStandings[gContestPlayerMonIndex]); + sub_810FB10(2); + Contest_SaveWinner(gSpecialVar_ContestRank); + Contest_SaveWinner(0xFE); + ewram15DDF = 1; + ewram15DDE = sub_80B2C4C(0xfe, 0); + BeginHardwarePaletteFade(0xff, 0, 0, 16, 0); + gTasks[taskId].func = sub_80C2EA0; +} + +void sub_80C2EA0(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gTasks[taskId].data[1] == 0) + { + DestroyTask(eContestLink80C2020Struct2018000.unk_03); + BlendPalettes(0x0000ffff, 16, 0); + gTasks[taskId].data[1]++; + } + else if (gTasks[taskId].data[1] == 1) + { + BlendPalettes(0xffff0000, 16, 0); + gTasks[taskId].data[1]++; + } + else + { + REG_BLDCNT = 0; + REG_BLDY = 0; + DestroyTask(taskId); + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); + } + } +} diff --git a/src/field/tv.c b/src/field/tv.c index 8bd36bb9c..36a6331b0 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -1,6 +1,7 @@ #include "global.h" #include "tv.h" #include "battle_tower.h" +#include "contest.h" #include "contest_painting.h" #include "data2.h" #include "easy_chat.h" @@ -69,7 +70,6 @@ struct UnkTvStruct gUnknown_03005D38; extern u16 gSpecialVar_LastTalked; extern u8 gSpecialVar_ContestCategory; -extern u8 gSpecialVar_ContestRank; extern u8 gUnknown_03004316[11]; extern u8 gBattleOutcome; @@ -443,12 +443,6 @@ void ClearTVShowData(void) sub_80BEBF4(); } -bool8 sub_80BF1B4(u8); -void sub_80BF20C(void); -extern u8 gSpecialVar_ContestCategory; -extern u8 gSpecialVar_ContestRank; -extern u8 gUnknown_03004316[11]; -extern u8 gBattleOutcome; void InterviewBefore_FanClubLetter(void); void InterviewBefore_RecentHappenings(void); @@ -458,21 +452,9 @@ void InterviewBefore_NameRater(void); void InterviewBefore_BravoTrainerPkmnProfile(void); void InterviewBefore_BravoTrainerBTProfile(void); -void sub_80BE028(void); -void sub_80BE074(void); -void sub_80BE778(void); -void sub_80BEB20(void); u8 GetTVChannelByShowType(u8); -s8 sub_80BF74C(TVShow tvShow[]); - -void sub_80BF55C(TVShow tvShow[], u8 showidx); -void sub_80BEA88(void); - -void sub_80BE138(TVShow *show); -void sub_80BE160(TVShow *show); -extern u16 gLastUsedItem; void InterviewAfter_FanClubLetter(void); void InterviewAfter_RecentHappenings(void); @@ -982,16 +964,16 @@ void sub_80BE23C(u16 a0) } } -void sub_80BE284(u8 a0) +void sub_80BE284(u8 contestResult) { struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[24].bravoTrainer; gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); if (gUnknown_03005D38.var0 != -1) { - bravoTrainer->contestResult = a0; + bravoTrainer->contestResult = contestResult; bravoTrainer->contestCategory = gSpecialVar_ContestCategory; - bravoTrainer->contestRank = gSpecialVar_ContestRank; + bravoTrainer->contestRank = (u8)gSpecialVar_ContestRank; bravoTrainer->species = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_SPECIES, NULL); GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname); } -- cgit v1.2.3 From b2bf04d83d607ec38011a1ef665cc8db0f679ba3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 26 Jan 2018 18:00:32 -0500 Subject: through (nonmatching) sub_80C3024 --- src/battle/contest_link_80C2020.c | 157 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 376ad1720..c1d684739 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -8,6 +8,7 @@ #include "scanline_effect.h" #include "decompress.h" #include "palette.h" +#include "blend_palette.h" #include "graphics.h" #include "strings2.h" #include "text.h" @@ -15,6 +16,7 @@ #include "menu.h" #include "sound.h" #include "pokedex.h" +#include "pokemon_icon.h" #include "tv.h" #include "battle.h" #include "contest.h" @@ -728,3 +730,158 @@ void sub_80C2EA0(u8 taskId) } } } + +void sub_80C2F28(u8 taskId) +{ + gBattle_BG3_X += 2; + gBattle_BG3_Y++; + if (gBattle_BG3_X > 0xff) + gBattle_BG3_X -= 0xff; + if (gBattle_BG3_Y > 0xff) + gBattle_BG3_Y -= 0xff; +} + +void sub_80C2F64(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 2) + { + gTasks[taskId].data[0] = 0; + if (gTasks[taskId].data[2] == 0) + gTasks[taskId].data[1]++; + else + gTasks[taskId].data[1]--; + if (gTasks[taskId].data[1] == 16) + gTasks[taskId].data[2] = 1; + else if (gTasks[taskId].data[1] == 0) + gTasks[taskId].data[2] = 0; + BlendPalette(0x6b, 0x01, gTasks[taskId].data[1], RGB(30, 22, 11)); + BlendPalette(0x68, 0x01, gTasks[taskId].data[1], RGB(31, 31, 31)); + BlendPalette(0x6e, 0x01, gTasks[taskId].data[1], RGB(30, 29, 29)); + } + if (gTasks[taskId].data[1] == 0) + eContestLink80C2020Struct2018000.unk_0a = 0; + else + eContestLink80C2020Struct2018000.unk_0a = 1; +} + +#ifdef NONMATCHING +void sub_80C3024(u16 species, u8 destOffset, u8 srcOffset, bool8 useDmaNow, u32 personality) +{ + int i; + int j; + u16 tile; + u16 offset; + int vOffset; + + if (useDmaNow) + { + DmaCopy32Defvars(3, GetMonIconPtr(species, personality) + (srcOffset << 9) + 0x80, BG_CHAR_ADDR(1) + (destOffset << 9), 0x180); + tile = ((destOffset + 10) << 12); + tile |= (destOffset * 16 + 0x200); + offset = destOffset * 0x60 + 0x83; + for (i = 0; i < 3; i++) + { + vOffset = (i << 5) + offset; + for (j = 0; j < 4; j++) + { + ((u16 *)BG_CHAR_ADDR(3))[vOffset + j] = tile; + tile++; + } + } + } + else + { + RequestSpriteCopy(GetMonIconPtr(species, personality) + (srcOffset << 9) + 0x80, BG_CHAR_ADDR(1) + (destOffset << 9), 0x180); + } +} +#else +__attribute__((naked)) void sub_80C3024(u16 species, u8 destOffset, u8 srcOffset, bool8 useDmaNow, u32 personality) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tldr r6, [sp, 0x10]\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tlsls r1, 24\n" + "\tlsrs r4, r1, 24\n" + "\tlsls r2, 24\n" + "\tlsrs r5, r2, 24\n" + "\tlsls r3, 24\n" + "\tcmp r3, 0\n" + "\tbeq _080C30B0\n" + "\tadds r1, r6, 0\n" + "\tbl GetMonIconPtr\n" + "\tlsls r1, r5, 9\n" + "\tadds r0, r1\n" + "\tadds r0, 0x80\n" + "\tlsls r1, r4, 9\n" + "\tldr r2, _080C30A0 @ =0x06004000\n" + "\tadds r1, r2\n" + "\tldr r2, _080C30A4 @ =0x040000d4\n" + "\tstr r0, [r2]\n" + "\tstr r1, [r2, 0x4]\n" + "\tldr r0, _080C30A8 @ =0x84000060\n" + "\tstr r0, [r2, 0x8]\n" + "\tldr r0, [r2, 0x8]\n" + "\tadds r1, r4, 0\n" + "\tadds r1, 0xA\n" + "\tlsls r1, 28\n" + "\tlsls r0, r4, 20\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 18\n" + "\tadds r0, r2\n" + "\torrs r0, r1\n" + "\tlsrs r1, r0, 16\n" + "\tlsls r0, r4, 1\n" + "\tadds r0, r4\n" + "\tlsls r0, 21\n" + "\tmovs r2, 0x83\n" + "\tlsls r2, 16\n" + "\tadds r0, r2\n" + "\tlsrs r5, r0, 16\n" + "\tmovs r2, 0\n" + "\tldr r6, _080C30AC @ =0x0600c000\n" + "_080C307C:\n" + "\tlsls r0, r2, 5\n" + "\tadds r4, r2, 0x1\n" + "\tadds r0, r5\n" + "\tmovs r3, 0x3\n" + "\tlsls r0, 1\n" + "\tadds r2, r0, r6\n" + "_080C3088:\n" + "\tstrh r1, [r2]\n" + "\tadds r0, r1, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r1, r0, 16\n" + "\tadds r2, 0x2\n" + "\tsubs r3, 0x1\n" + "\tcmp r3, 0\n" + "\tbge _080C3088\n" + "\tadds r2, r4, 0\n" + "\tcmp r2, 0x2\n" + "\tble _080C307C\n" + "\tb _080C30CA\n" + "\t.align 2, 0\n" + "_080C30A0: .4byte 0x06004000\n" + "_080C30A4: .4byte 0x040000d4\n" + "_080C30A8: .4byte 0x84000060\n" + "_080C30AC: .4byte 0x0600c000\n" + "_080C30B0:\n" + "\tadds r1, r6, 0\n" + "\tbl GetMonIconPtr\n" + "\tlsls r1, r5, 9\n" + "\tadds r0, r1\n" + "\tadds r0, 0x80\n" + "\tlsls r1, r4, 9\n" + "\tldr r2, _080C30D0 @ =0x06004000\n" + "\tadds r1, r2\n" + "\tmovs r2, 0xC0\n" + "\tlsls r2, 1\n" + "\tbl RequestSpriteCopy\n" + "_080C30CA:\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080C30D0: .4byte 0x06004000"); +} +#endif -- cgit v1.2.3 From 88680a64a4990fd0b4a6609574e734ccb1fd1d73 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 26 Jan 2018 21:58:04 -0500 Subject: LoadAllContestMonIcons --- src/battle/contest_link_80C2020.c | 100 +++++++++++++++++++++++--------------- 1 file changed, 60 insertions(+), 40 deletions(-) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index c1d684739..8aff25ab1 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -59,26 +59,26 @@ struct UnkEwramStruct18018 { #define eContestLink80C2020Struct2018000 (*(struct UnkEwramStruct18000 *)(gSharedMem + 0x18000)) #define eContestLink80C2020Struct2018018 (*(struct UnkEwramStruct18018 *)(gSharedMem + 0x18018)) -void sub_80C2430(void); -void sub_80C2448(void); -void sub_80C24F4(u8 taskId); -void sub_80C255C(u8 taskId); -void sub_80C25A4(u8 taskId); -void sub_80C25C0(u8 taskId); -void sub_80C2600(u8 taskId); -void sub_80C26E4(u8 taskId); -void sub_80C2770(u8 taskId); -void sub_80C27EC(u8 taskId); -void sub_80C2878(u8 taskId); -void sub_80C2A8C(u8 taskId); -void sub_80C2D1C(u8 taskId); -void sub_80C2D80(u8 taskId); -void sub_80C2DD8(u8 taskId); -void sub_80C2E14(u8 taskId); -void sub_80C2EA0(u8 taskId); -void sub_80C2F28(u8 taskId); -void sub_80C2F64(u8 taskId); -void sub_80C30D4(u8 a0, u8 a1); +static void sub_80C2430(void); +static void sub_80C2448(void); +static void sub_80C24F4(u8 taskId); +static void sub_80C255C(u8 taskId); +static void sub_80C25A4(u8 taskId); +static void sub_80C25C0(u8 taskId); +static void sub_80C2600(u8 taskId); +static void sub_80C26E4(u8 taskId); +static void sub_80C2770(u8 taskId); +static void sub_80C27EC(u8 taskId); +static void sub_80C2878(u8 taskId); +static void sub_80C2A8C(u8 taskId); +static void sub_80C2D1C(u8 taskId); +static void sub_80C2D80(u8 taskId); +static void sub_80C2DD8(u8 taskId); +static void sub_80C2E14(u8 taskId); +static void sub_80C2EA0(u8 taskId); +static void sub_80C2F28(u8 taskId); +static void sub_80C2F64(u8 taskId); +static void LoadAllContestMonIcons(u8 srcOffset, bool8 useDmaNow); void sub_80C310C(void); void sub_80C3158(const u8 *string, u8 spriteId); void sub_80C33DC(void); @@ -289,7 +289,7 @@ void sub_80C2358(void) FreeAllSpritePalettes(); sub_80C2144(); sub_80C310C(); - sub_80C30D4(0, 1); + LoadAllContestMonIcons(0, TRUE); sub_80C2340(); eContestLink80C2020Struct2018000 = (struct UnkEwramStruct18000){}; eContestLink80C2020Struct2018018 = (struct UnkEwramStruct18018){}; @@ -306,7 +306,7 @@ void sub_80C2358(void) SetVBlankCallback(sub_80C2448); } -void sub_80C2430(void) +static void sub_80C2430(void) { AnimateSprites(); BuildOamBuffer(); @@ -314,7 +314,7 @@ void sub_80C2430(void) UpdatePaletteFade(); } -void sub_80C2448(void) +static void sub_80C2448(void) { REG_BG0HOFS = gBattle_BG0_X; REG_BG0VOFS = gBattle_BG0_Y; @@ -334,7 +334,7 @@ void sub_80C2448(void) ScanlineEffect_InitHBlankDmaTransfer(); } -void sub_80C24F4(u8 taskId) +static void sub_80C24F4(u8 taskId) { if (!gPaletteFade.active) { @@ -350,7 +350,7 @@ void sub_80C24F4(u8 taskId) } } -void sub_80C255C(u8 taskId) +static void sub_80C255C(u8 taskId) { if (gReceivedRemoteLinkPlayers && GetLinkPlayerCount() == MAX_LINK_PLAYERS) { @@ -359,12 +359,12 @@ void sub_80C255C(u8 taskId) } } -void sub_80C25A4(u8 taskId) +static void sub_80C25A4(u8 taskId) { SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80C25C0); } -void sub_80C25C0(u8 taskId) +static void sub_80C25C0(u8 taskId) { if (sub_8007ECC()) { @@ -374,7 +374,7 @@ void sub_80C25C0(u8 taskId) } } -void sub_80C2600(u8 taskId) +static void sub_80C2600(u8 taskId) { if (gTasks[taskId].data[0] == 0) { @@ -415,7 +415,7 @@ void sub_80C2600(u8 taskId) } } -void sub_80C26E4(u8 taskId) +static void sub_80C26E4(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -448,7 +448,7 @@ void sub_80C26E4(u8 taskId) } } -void sub_80C2770(u8 taskId) +static void sub_80C2770(u8 taskId) { if (eContestLink80C2020Struct2018000.unk_04 == 0) { @@ -465,7 +465,7 @@ void sub_80C2770(u8 taskId) } } -void sub_80C27EC(u8 taskId) +static void sub_80C27EC(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -497,7 +497,7 @@ void sub_80C27EC(u8 taskId) } } -void sub_80C2878(u8 taskId) +static void sub_80C2878(u8 taskId) { int i; u8 taskId2; @@ -565,7 +565,7 @@ void sub_80C2878(u8 taskId) } } -void sub_80C2A8C(u8 taskId) +static void sub_80C2A8C(u8 taskId) { int i; u8 spriteId; @@ -653,7 +653,7 @@ void sub_80C2A8C(u8 taskId) } } -void sub_80C2D1C(u8 taskId) +static void sub_80C2D1C(u8 taskId) { int i; @@ -670,7 +670,7 @@ void sub_80C2D1C(u8 taskId) } } -void sub_80C2D80(u8 taskId) +static void sub_80C2D80(u8 taskId) { if (gIsLinkContest & 1) { @@ -684,7 +684,7 @@ void sub_80C2D80(u8 taskId) } } -void sub_80C2DD8(u8 taskId) +static void sub_80C2DD8(u8 taskId) { if (gReceivedRemoteLinkPlayers == 0) { @@ -694,7 +694,7 @@ void sub_80C2DD8(u8 taskId) } } -void sub_80C2E14(u8 taskId) +static void sub_80C2E14(u8 taskId) { sub_80BE284(gContestFinalStandings[gContestPlayerMonIndex]); sub_810FB10(2); @@ -706,7 +706,7 @@ void sub_80C2E14(u8 taskId) gTasks[taskId].func = sub_80C2EA0; } -void sub_80C2EA0(u8 taskId) +static void sub_80C2EA0(u8 taskId) { if (!gPaletteFade.active) { @@ -731,7 +731,7 @@ void sub_80C2EA0(u8 taskId) } } -void sub_80C2F28(u8 taskId) +static void sub_80C2F28(u8 taskId) { gBattle_BG3_X += 2; gBattle_BG3_Y++; @@ -741,7 +741,7 @@ void sub_80C2F28(u8 taskId) gBattle_BG3_Y -= 0xff; } -void sub_80C2F64(u8 taskId) +static void sub_80C2F64(u8 taskId) { if (++gTasks[taskId].data[0] == 2) { @@ -885,3 +885,23 @@ __attribute__((naked)) void sub_80C3024(u16 species, u8 destOffset, u8 srcOffset "_080C30D0: .4byte 0x06004000"); } #endif + +static void LoadAllContestMonIcons(u8 srcOffset, bool8 useDmaNow) +{ + int i; + + for (i = 0; i < 4; i++) + { + sub_80C3024(gContestMons[i].species, i, srcOffset, useDmaNow, gContestMons[i].personality); + } +} +// +//void sub_80C310C(void) { +// int i; +// +// for (i = 0; i < 4; i++) +// { +// u16 species = mon_icon_convert_unown_species_id(gContestMons[i].species, 0); +// LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], 0xa0 + 0x10 * i, 0x20); +// } +//} -- cgit v1.2.3 From e88e39d5fda1644f77e41fd652d4310612da7532 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 1 Apr 2018 11:02:07 -0400 Subject: (wip) sub_80C3158 --- src/battle/contest_link_80C2020.c | 133 +++++++++++++++++++++++++++++++++++--- 1 file changed, 123 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index e56206a9b..57f22b85c 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -58,6 +58,7 @@ struct UnkEwramStruct18018 { #define eContestLink80C2020Struct2018000 (*(struct UnkEwramStruct18000 *)(gSharedMem + 0x18000)) #define eContestLink80C2020Struct2018018 (*(struct UnkEwramStruct18018 *)(gSharedMem + 0x18018)) +#define eContestLink80C2020Struct2018068 (gSharedMem + 0x18068) static void sub_80C2430(void); static void sub_80C2448(void); @@ -895,13 +896,125 @@ static void LoadAllContestMonIcons(u8 srcOffset, bool8 useDmaNow) sub_80C3024(gContestMons[i].species, i, srcOffset, useDmaNow, gContestMons[i].personality); } } -// -//void sub_80C310C(void) { -// int i; -// -// for (i = 0; i < 4; i++) -// { -// u16 species = mon_icon_convert_unown_species_id(gContestMons[i].species, 0); -// LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], 0xa0 + 0x10 * i, 0x20); -// } -//} + +#ifdef NONMATCHING +void sub_80C310C(void) +{ + int i; + + for (i = 0; i < 4; i++) + { + u16 species = mon_icon_convert_unown_species_id(gContestMons[i].species, 0); + LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], 0xa0 + 0x10 * i, 0x20); + } +} +#else +__attribute__((naked)) void sub_80C310C(void) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tmovs r4, 0\n" + "\tldr r6, _080C314C @ =gMonIconPaletteIndices\n" + "\tmovs r5, 0xA0\n" + "\tlsls r5, 16\n" + "_080C3116:\n" + "\tldr r1, _080C3150 @ =gContestMons\n" + "\tlsls r0, r4, 6\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0]\n" + "\tmovs r1, 0\n" + "\tbl mon_icon_convert_unown_species_id\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tlsls r0, 5\n" + "\tldr r1, _080C3154 @ =gMonIconPalettes\n" + "\tadds r0, r1\n" + "\tlsrs r1, r5, 16\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 13\n" + "\tadds r5, r0\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x3\n" + "\tble _080C3116\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080C314C: .4byte gMonIconPaletteIndices\n" + "_080C3150: .4byte gContestMons\n" + "_080C3154: .4byte gMonIconPalettes"); +} +#endif + +void sub_80C3158(const u8 *string, u8 spriteId) +{ + struct Sprite *sprite = gSprites + spriteId; + u16 sp00[4] = { + sprite->oam.tileNum, + gSprites[sprite->data[0]].oam.tileNum, + gSprites[sprite->data[1]].oam.tileNum, + gSprites[sprite->data[2]].oam.tileNum + }; + int i; + u8 width; + u8 * displayedStringBattle; + void * dest; + + for (i = 0; i < 4; i++) + { + DmaFill32(3, 0, BG_CHAR_ADDR(4) + 32 * sp00[i], 0x400); + } + + width = Text_GetStringWidthFromWindowTemplate(&gWindowTemplate_81E7278, string); + displayedStringBattle = gDisplayedStringBattle; + displayedStringBattle = StringCopy(displayedStringBattle, gUnknown_083D17E2); + if ((~width + 1) & 7) + { + displayedStringBattle[0] = EXT_CTRL_CODE_BEGIN; + displayedStringBattle[1] = 0x11; + displayedStringBattle[2] = ((~width + 1) & 7) / 2; + displayedStringBattle += 3; + } + width = (width + 7) & (~8); + displayedStringBattle = StringCopy(displayedStringBattle, string); + + displayedStringBattle[0] = EXT_CTRL_CODE_BEGIN; + displayedStringBattle[1] = 0x13; + displayedStringBattle[2] = width; + displayedStringBattle[3] = EOS; + + sub_80034D4(eContestLink80C2020Struct2018068, gDisplayedStringBattle); + + CpuCopy32(gUnknown_083D1624, BG_CHAR_ADDR(4) + 32 * sp00[0], 32); + CpuCopy32(gUnknown_083D1624 + 0x40, BG_CHAR_ADDR(4) + 32 * sp00[0] + 0x100, 32); + CpuCopy32(gUnknown_083D1624 + 0x40, BG_CHAR_ADDR(4) + 32 * sp00[0] + 0x200, 32); + CpuCopy32(gUnknown_083D1624 + 0x20, BG_CHAR_ADDR(4) + 32 * sp00[0] + 0x300, 32); + + for (i = 0; i < width / 8; i++) + { + if (i < 7) + dest = (void *)VRAM + 0x10020 + 32 * sp00[0] + 32 * i; + else if (i < 15) + dest = (void *)VRAM + 0x0FF20 + 32 * sp00[0] + 32 * i; + else if (i < 23) + dest = (void *)VRAM + 0x0FE20 + 32 * sp00[0] + 32 * i; + else + dest = (void *)VRAM + 0x0FD20 + 32 * sp00[0] + 32 * i; + + if (i != width / 8) + { + CpuCopy32(gUnknown_083D16E4, dest, 32); + CpuCopy32(gUnknown_083D16E4 + 0x10, dest + 0x300, 32); + CpuCopy32(eContestLink80C2020Struct2018068 + 0x40 * i, dest + 0x100, 32); + CpuCopy32(eContestLink80C2020Struct2018068 + 0x20 + 0x40 * i, dest + 0x200, 32); + } + } + + CpuCopy32(gUnknown_083D1644, dest, 32); + CpuCopy32(gUnknown_083D1644 + 0x40, dest + 0x100, 32); + CpuCopy32(gUnknown_083D1644 + 0x40, dest + 0x200, 32); + CpuCopy32(gUnknown_083D1644 + 0x20, dest + 0x300, 32); +} -- cgit v1.2.3 From 9d7ddede2362428c1bd569f0dff137d6bb65c0d1 Mon Sep 17 00:00:00 2001 From: MCboy Date: Mon, 18 Jun 2018 02:42:25 +0430 Subject: decompiled sub_80DA034 into C special thanks to some guys over at prets discord :) --- src/battle/anim/flying.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index ec40e26c4..5c865b7a8 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -6,6 +6,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +void sub_80DA05C(struct Sprite *sprite); void sub_80DA034(struct Sprite *sprite); void sub_80DA16C(struct Sprite *sprite); void sub_80DA208(struct Sprite *sprite); @@ -23,6 +24,15 @@ void sub_80DB458(struct Sprite *sprite); void sub_80DB564(struct Sprite *sprite); void sub_80DB5E4(struct Sprite *sprite); +void sub_80DA034(struct Sprite *sprite) +{ + sub_8078764(sprite, 0); + sprite->pos1.y += 0x14; + sprite->data[1] = 0xBF; + sprite->callback = sub_80DA05C; + sub_80DA05C(sprite); +} + const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 = { .tileTag = 10009, -- cgit v1.2.3 From bb9a76b4bc399b3808d18a6aa8379f33de0de0c0 Mon Sep 17 00:00:00 2001 From: MCboy Date: Mon, 18 Jun 2018 05:08:03 +0430 Subject: Update flying.c --- src/battle/anim/flying.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index 5c865b7a8..84217cae6 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -6,7 +6,6 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -void sub_80DA05C(struct Sprite *sprite); void sub_80DA034(struct Sprite *sprite); void sub_80DA16C(struct Sprite *sprite); void sub_80DA208(struct Sprite *sprite); @@ -33,6 +32,18 @@ void sub_80DA034(struct Sprite *sprite) sub_80DA05C(sprite); } +void sub_80DA05C(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[1], 0x20); + sprite->pos2.y = Cos(sprite->data[1], 0x8); + sprite->data[1] = (sprite->data[1] + 5) & 0xFF; + ++sprite->data[0]; + if(sprite->data[0] == 0x47 ) + { + DestroyAnimSprite(sprite); + } +} + const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 = { .tileTag = 10009, -- cgit v1.2.3 From e05011b4665c57c00fda9201e67556f54bf22aab Mon Sep 17 00:00:00 2001 From: MCboy Date: Mon, 18 Jun 2018 05:21:36 +0430 Subject: issue fixed? --- src/battle/anim/flying.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index 84217cae6..2f4fa6287 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -1,12 +1,14 @@ #include "global.h" +#include "sprite.h" #include "rom_8077ABC.h" #include "battle_anim.h" +#include "trig.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -void sub_80DA034(struct Sprite *sprite); +void sub_80DA05C(struct Sprite *sprite); void sub_80DA16C(struct Sprite *sprite); void sub_80DA208(struct Sprite *sprite); void sub_80DA300(struct Sprite *sprite); -- cgit v1.2.3 From 2aab62a699a278e74246a33cf16d98550a913a67 Mon Sep 17 00:00:00 2001 From: MCboy Date: Thu, 21 Jun 2018 02:26:48 +0430 Subject: decompiled a few functions --- src/battle/anim/flying.c | 276 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 274 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index 2f4fa6287..1277ab0bd 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -1,19 +1,25 @@ #include "global.h" -#include "sprite.h" -#include "rom_8077ABC.h" +#include "battle.h" #include "battle_anim.h" +#include "palette.h" +#include "rom_8077ABC.h" #include "trig.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern u8 gAnimVisualTaskCount; +void sub_80785E4(struct Sprite *sprite); void sub_80DA05C(struct Sprite *sprite); void sub_80DA16C(struct Sprite *sprite); +void sub_80DA1EC(struct Sprite *sprite); void sub_80DA208(struct Sprite *sprite); void sub_80DA300(struct Sprite *sprite); +void sub_80DA348(struct Sprite *sprite); void sub_80DA38C(struct Sprite *sprite); void sub_80DA4D8(struct Sprite *sprite); +void sub_80DA410(struct Sprite *sprite); void sub_80DAD30(struct Sprite *sprite); void sub_80DAD84(struct Sprite *sprite); void sub_80DB000(struct Sprite *sprite); @@ -25,6 +31,8 @@ void sub_80DB458(struct Sprite *sprite); void sub_80DB564(struct Sprite *sprite); void sub_80DB5E4(struct Sprite *sprite); +void sub_80DA0DC(u8 taskId); + void sub_80DA034(struct Sprite *sprite) { sub_8078764(sprite, 0); @@ -46,6 +54,270 @@ void sub_80DA05C(struct Sprite *sprite) } } +void sub_80DA09C(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[1]; + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x2719); + gTasks[taskId].func = sub_80DA0DC; +} + +#ifdef NONMATCHING +void sub_80DA0DC(u8 taskId) +{ + gTasks[taskId].data[10]++; + if(gTasks[taskId].data[10] == gTasks[taskId].data[1]) + { + u16 r0; + u16 r2; + s32 i; + + gTasks[taskId].data[10] = 0; + r0 = gTasks[taskId].data[2]; + r2 = gPlttBufferFaded[r0 * 8]; + for(i = 0; i < 8; i++) + gPlttBufferFaded[r0 * 8 + i + 0x107] = gPlttBufferFaded[r0 * 8 + i + 0x107]; + gTasks[taskId].data[2] = ((r0 + 0x101) * 2) + r2; + } + gTasks[taskId].data[0] = gTasks[taskId].data[0] * 32; + if(gTasks[taskId].data[0] == 0) + { + DestroyAnimVisualTask(taskId); + } +} +#else +NAKED +void sub_80DA0DC(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r2, _080DA15C @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r2\n\ + ldrh r0, [r3, 0x1C]\n\ + adds r1, r0, 0x1\n\ + strh r1, [r3, 0x1C]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + movs r4, 0xA\n\ + ldrsh r1, [r3, r4]\n\ + adds r7, r2, 0\n\ + cmp r0, r1\n\ + bne _080DA13A\n\ + movs r0, 0\n\ + strh r0, [r3, 0x1C]\n\ + ldrb r0, [r3, 0xC]\n\ + ldr r2, _080DA160 @ =gPlttBufferFaded\n\ + lsls r0, 4\n\ + movs r3, 0x84\n\ + lsls r3, 1\n\ + adds r1, r0, r3\n\ + lsls r1, 1\n\ + adds r1, r2\n\ + ldrh r6, [r1]\n\ + movs r4, 0x7\n\ + mov r12, r0\n\ + ldr r0, _080DA164 @ =0x00000107\n\ + add r0, r12\n\ + lsls r0, 1\n\ + adds r3, r0, r2\n\ +_080DA122:\n\ + ldrh r0, [r3]\n\ + strh r0, [r1]\n\ + subs r3, 0x2\n\ + subs r1, 0x2\n\ + subs r4, 0x1\n\ + cmp r4, 0\n\ + bgt _080DA122\n\ + ldr r0, _080DA168 @ =0x00000101\n\ + add r0, r12\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + strh r6, [r0]\n\ +_080DA13A:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r7\n\ + ldrh r1, [r0, 0x8]\n\ + subs r1, 0x1\n\ + strh r1, [r0, 0x8]\n\ + lsls r1, 16\n\ + cmp r1, 0\n\ + bne _080DA154\n\ + adds r0, r5, 0\n\ + bl DestroyAnimVisualTask\n\ +_080DA154:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080DA15C: .4byte gTasks\n\ +_080DA160: .4byte gPlttBufferFaded\n\ +_080DA164: .4byte 0x00000107\n\ +_080DA168: .4byte 0x00000101\n\ + .syntax divided\n"); +} +#endif + +void sub_80DA16C(struct Sprite *sprite) +{ + InitAnimSpritePos(sprite, 1); + if (GetBattlerSide(gAnimBankAttacker) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + InitAnimSpriteTranslationDeltas(sprite); + sprite->callback = sub_80785E4; + StoreSpriteCallbackInData(sprite, sub_80DA1EC); +} + +void sub_80DA1EC(struct Sprite *sprite) +{ + if (TranslateAnimSpriteByDeltas(sprite) != 0) + { + DestroyAnimSprite(sprite); + } +} + +void sub_80DA208(struct Sprite *sprite) +{ + if (GetBattlerSide(gAnimBankAttacker) != 0) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + + if (IsContest()) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + + if (gBattleAnimArgs[6] == 0) + { + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + } + + sprite->data[2] = sprite->data[2] + gBattleAnimArgs[2]; + sprite->data[4] = sprite->data[4] + gBattleAnimArgs[3]; + sprite->callback = StartTranslateAnimSpriteByDeltas; + + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + SeekSpriteAnim(sprite, gBattleAnimArgs[5]); +} + +void sub_80DA300(struct Sprite *sprite) +{ + + InitAnimSpritePos(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = sub_80DA348; + gSprites[GetAnimBattlerSpriteId(0)].invisible = 1; +} + +void sub_80DA348(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + } + else + { + sprite->data[2] += sprite->data[1]; + sprite->pos2.y -= (sprite->data[2] >> 8); + } + + if (sprite->pos1.y + sprite->pos2.y < -32) + { + DestroyAnimSprite(sprite); + } +} + +void sub_80DA38C(struct Sprite *sprite) +{ + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x = 272; + sprite->pos1.y = -32; + StartSpriteAffineAnim(sprite, 1); + } + else + { + sprite->pos1.x = -32; + sprite->pos1.y = -32; + } + + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); + + InitAnimSpriteTranslationDeltas(sprite); + sprite->callback = sub_80DA410; +} + +void sub_80DA410(struct Sprite *sprite) +{ + sprite->data[0] = 1; + TranslateAnimSpriteByDeltas(sprite); + + if (((u16)sprite->data[3] >> 8) > 200) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.x = 0; + sprite->data[3] &= 0xFF; + } + + if ((u32)(sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160) + { + gSprites[GetAnimBattlerSpriteId(0)].invisible = 0; + DestroyAnimSprite(sprite); + } +} + +void sub_80DA48C(struct Sprite *sprite) +{ + if (sprite->data[0]-- <= 0) + { + if (sprite->oam.affineMode & 1) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = 0; + } + + DestroySprite(sprite); + gAnimVisualTaskCount--; + } +} + +void sub_80DA4D8(struct Sprite *sprite) +{ + +} + const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 = { .tileTag = 10009, -- cgit v1.2.3 From ddcee9140701808ad70f4e903b837178b1d85496 Mon Sep 17 00:00:00 2001 From: MCboy Date: Thu, 21 Jun 2018 02:35:42 +0430 Subject: whoops --- src/battle/anim/flying.c | 5 ----- 1 file changed, 5 deletions(-) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index 1277ab0bd..05138485b 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -313,11 +313,6 @@ void sub_80DA48C(struct Sprite *sprite) } } -void sub_80DA4D8(struct Sprite *sprite) -{ - -} - const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 = { .tileTag = 10009, -- cgit v1.2.3 From 87930e9c06112256c977fd9fcb0f71aa31eccaba Mon Sep 17 00:00:00 2001 From: MCboy Date: Thu, 21 Jun 2018 03:17:30 +0430 Subject: changed code a bit --- src/battle/anim/flying.c | 923 +++++++++++++++++++++++------------------------ 1 file changed, 461 insertions(+), 462 deletions(-) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index 05138485b..dcb248128 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -33,604 +33,603 @@ void sub_80DB5E4(struct Sprite *sprite); void sub_80DA0DC(u8 taskId); -void sub_80DA034(struct Sprite *sprite) +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 = { - sub_8078764(sprite, 0); - sprite->pos1.y += 0x14; - sprite->data[1] = 0xBF; - sprite->callback = sub_80DA05C; - sub_80DA05C(sprite); -} + .tileTag = 10009, + .paletteTag = 10009, + .oam = &gOamData_837DF7C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DA034, +}; -void sub_80DA05C(struct Sprite *sprite) +const union AffineAnimCmd gSpriteAffineAnim_83DA398[] = { - sprite->pos2.x = Sin(sprite->data[1], 0x20); - sprite->pos2.y = Cos(sprite->data[1], 0x8); - sprite->data[1] = (sprite->data[1] + 5) & 0xFF; - ++sprite->data[0]; - if(sprite->data[0] == 0x47 ) - { - DestroyAnimSprite(sprite); - } -} + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xA, 0x0, 0, 24), + AFFINEANIMCMD_END, +}; -void sub_80DA09C(u8 taskId) +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA3B0[] = { - gTasks[taskId].data[0] = gBattleAnimArgs[1]; - gTasks[taskId].data[1] = gBattleAnimArgs[0]; - gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x2719); - gTasks[taskId].func = sub_80DA0DC; -} + gSpriteAffineAnim_83DA398, +}; -#ifdef NONMATCHING -void sub_80DA0DC(u8 taskId) -{ - gTasks[taskId].data[10]++; - if(gTasks[taskId].data[10] == gTasks[taskId].data[1]) - { - u16 r0; - u16 r2; - s32 i; - - gTasks[taskId].data[10] = 0; - r0 = gTasks[taskId].data[2]; - r2 = gPlttBufferFaded[r0 * 8]; - for(i = 0; i < 8; i++) - gPlttBufferFaded[r0 * 8 + i + 0x107] = gPlttBufferFaded[r0 * 8 + i + 0x107]; - gTasks[taskId].data[2] = ((r0 + 0x101) * 2) + r2; - } - gTasks[taskId].data[0] = gTasks[taskId].data[0] * 32; - if(gTasks[taskId].data[0] == 0) - { - DestroyAnimVisualTask(taskId); - } -} -#else -NAKED -void sub_80DA0DC(u8 taskId) +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3B4 = { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r2, _080DA15C @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r3, r0, r2\n\ - ldrh r0, [r3, 0x1C]\n\ - adds r1, r0, 0x1\n\ - strh r1, [r3, 0x1C]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r4, 0xA\n\ - ldrsh r1, [r3, r4]\n\ - adds r7, r2, 0\n\ - cmp r0, r1\n\ - bne _080DA13A\n\ - movs r0, 0\n\ - strh r0, [r3, 0x1C]\n\ - ldrb r0, [r3, 0xC]\n\ - ldr r2, _080DA160 @ =gPlttBufferFaded\n\ - lsls r0, 4\n\ - movs r3, 0x84\n\ - lsls r3, 1\n\ - adds r1, r0, r3\n\ - lsls r1, 1\n\ - adds r1, r2\n\ - ldrh r6, [r1]\n\ - movs r4, 0x7\n\ - mov r12, r0\n\ - ldr r0, _080DA164 @ =0x00000107\n\ - add r0, r12\n\ - lsls r0, 1\n\ - adds r3, r0, r2\n\ -_080DA122:\n\ - ldrh r0, [r3]\n\ - strh r0, [r1]\n\ - subs r3, 0x2\n\ - subs r1, 0x2\n\ - subs r4, 0x1\n\ - cmp r4, 0\n\ - bgt _080DA122\n\ - ldr r0, _080DA168 @ =0x00000101\n\ - add r0, r12\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - strh r6, [r0]\n\ -_080DA13A:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r7\n\ - ldrh r1, [r0, 0x8]\n\ - subs r1, 0x1\n\ - strh r1, [r0, 0x8]\n\ - lsls r1, 16\n\ - cmp r1, 0\n\ - bne _080DA154\n\ - adds r0, r5, 0\n\ - bl DestroyAnimVisualTask\n\ -_080DA154:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080DA15C: .4byte gTasks\n\ -_080DA160: .4byte gPlttBufferFaded\n\ -_080DA164: .4byte 0x00000107\n\ -_080DA168: .4byte 0x00000101\n\ - .syntax divided\n"); -} -#endif + .tileTag = 10009, + .paletteTag = 10009, + .oam = &gOamData_837DFDC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA3B0, + .callback = sub_80DA16C, +}; -void sub_80DA16C(struct Sprite *sprite) +const union AnimCmd gSpriteAnim_83DA3CC[] = { - InitAnimSpritePos(sprite, 1); - if (GetBattlerSide(gAnimBankAttacker) != 0) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; - InitAnimSpriteTranslationDeltas(sprite); - sprite->callback = sub_80785E4; - StoreSpriteCallbackInData(sprite, sub_80DA1EC); -} + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; -void sub_80DA1EC(struct Sprite *sprite) +const union AnimCmd *const gSpriteAnimTable_83DA3E0[] = { - if (TranslateAnimSpriteByDeltas(sprite) != 0) - { - DestroyAnimSprite(sprite); - } -} + gSpriteAnim_83DA3CC, +}; -void sub_80DA208(struct Sprite *sprite) +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3E4 = { - if (GetBattlerSide(gAnimBankAttacker) != 0) - { - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - } - - if (IsContest()) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - } - - sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); - sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[4]; - - if (gBattleAnimArgs[6] == 0) - { - sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); - sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); - } - else - { - SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); - } - - sprite->data[2] = sprite->data[2] + gBattleAnimArgs[2]; - sprite->data[4] = sprite->data[4] + gBattleAnimArgs[3]; - sprite->callback = StartTranslateAnimSpriteByDeltas; - - StoreSpriteCallbackInData(sprite, DestroyAnimSprite); - SeekSpriteAnim(sprite, gBattleAnimArgs[5]); -} + .tileTag = 10154, + .paletteTag = 10154, + .oam = &gOamData_837DF54, + .anims = gSpriteAnimTable_83DA3E0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DA208, +}; -void sub_80DA300(struct Sprite *sprite) +const union AffineAnimCmd gSpriteAffineAnim_83DA3FC[] = { + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), + AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), + AFFINEANIMCMD_END, +}; - InitAnimSpritePos(sprite, 1); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->callback = sub_80DA348; - gSprites[GetAnimBattlerSpriteId(0)].invisible = 1; -} - -void sub_80DA348(struct Sprite *sprite) +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA424[] = { - if (sprite->data[0] > 0) - { - sprite->data[0]--; - } - else - { - sprite->data[2] += sprite->data[1]; - sprite->pos2.y -= (sprite->data[2] >> 8); - } + gSpriteAffineAnim_83DA3FC, +}; - if (sprite->pos1.y + sprite->pos2.y < -32) - { - DestroyAnimSprite(sprite); - } -} +const union AffineAnimCmd gSpriteAffineAnim_83DA428[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 50, 1), + AFFINEANIMCMD_END, +}; -void sub_80DA38C(struct Sprite *sprite) +const union AffineAnimCmd gSpriteAffineAnim_83DA438[] = { - if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) - { - sprite->pos1.x = 272; - sprite->pos1.y = -32; - StartSpriteAffineAnim(sprite, 1); - } - else - { - sprite->pos1.x = -32; - sprite->pos1.y = -32; - } + AFFINEANIMCMD_FRAME(0x0, 0x0, -40, 1), + AFFINEANIMCMD_END, +}; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA448[] = +{ + gSpriteAffineAnim_83DA428, + gSpriteAffineAnim_83DA438, +}; - InitAnimSpriteTranslationDeltas(sprite); - sprite->callback = sub_80DA410; -} +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA450 = +{ + .tileTag = 10156, + .paletteTag = 10156, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA424, + .callback = sub_80DA300, +}; -void sub_80DA410(struct Sprite *sprite) +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA468 = { - sprite->data[0] = 1; - TranslateAnimSpriteByDeltas(sprite); + .tileTag = 10156, + .paletteTag = 10156, + .oam = &gOamData_837DF9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA448, + .callback = sub_80DA38C, +}; - if (((u16)sprite->data[3] >> 8) > 200) - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos2.x = 0; - sprite->data[3] &= 0xFF; - } +const union AnimCmd gSpriteAnim_83DA480[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; - if ((u32)(sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160) - { - gSprites[GetAnimBattlerSpriteId(0)].invisible = 0; - DestroyAnimSprite(sprite); - } -} +const union AnimCmd gSpriteAnim_83DA488[] = +{ + ANIMCMD_FRAME(16, 0, .hFlip = TRUE), + ANIMCMD_END, +}; -void sub_80DA48C(struct Sprite *sprite) +const union AnimCmd *const gSpriteAnimTable_83DA490[] = { - if (sprite->data[0]-- <= 0) - { - if (sprite->oam.affineMode & 1) - { - FreeOamMatrix(sprite->oam.matrixNum); - sprite->oam.affineMode = 0; - } - - DestroySprite(sprite); - gAnimVisualTaskCount--; - } -} + gSpriteAnim_83DA480, + gSpriteAnim_83DA488, +}; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA380 = +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA498 = { - .tileTag = 10009, - .paletteTag = 10009, - .oam = &gOamData_837DF7C, - .anims = gDummySpriteAnimTable, + .tileTag = 10270, + .paletteTag = 10270, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83DA490, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DA034, + .callback = sub_80DA4D8, }; -const union AffineAnimCmd gSpriteAffineAnim_83DA398[] = -{ - AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0xA, 0x0, 0, 24), - AFFINEANIMCMD_END, -}; +const u16 gUnknownPalette_83DA4B0[] = INCBIN_U16("graphics/unknown/unknown_3DA4B0.gbapal"); -const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA3B0[] = +const struct SpriteTemplate gSpriteTemplate_83DA4D0 = { - gSpriteAffineAnim_83DA398, + .tileTag = 10155, + .paletteTag = 10155, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DAD30, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3B4 = +const struct SpriteTemplate gSpriteTemplate_83DA4E8 = { - .tileTag = 10009, - .paletteTag = 10009, - .oam = &gOamData_837DFDC, - .anims = gDummySpriteAnimTable, + .tileTag = 10270, + .paletteTag = 10270, + .oam = &gOamData_837DF94, + .anims = gSpriteAnimTable_83DA490, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83DA3B0, - .callback = sub_80DA16C, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DAD84, }; -const union AnimCmd gSpriteAnim_83DA3CC[] = +const union AnimCmd gSpriteAnim_83DA500[] = { - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(0, 3, .hFlip = TRUE), - ANIMCMD_FRAME(0, 3, .vFlip = TRUE), - ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_JUMP(0), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(8, 1), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(8, 1, .hFlip = TRUE), + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_83DA3E0[] = +const union AnimCmd *const gSpriteAnimTable_83DA518[] = { - gSpriteAnim_83DA3CC, + gSpriteAnim_83DA500, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA3E4 = +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA51C = { - .tileTag = 10154, - .paletteTag = 10154, + .tileTag = 10162, + .paletteTag = 10162, .oam = &gOamData_837DF54, - .anims = gSpriteAnimTable_83DA3E0, + .anims = gSpriteAnimTable_83DA518, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DA208, + .callback = sub_80DB000, }; -const union AffineAnimCmd gSpriteAffineAnim_83DA3FC[] = +const union AffineAnimCmd gSpriteAffineAnim_83DA534[] = { AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), - AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), + AFFINEANIMCMD_FRAME(0xFFEC, 0x0, 0, 7), + AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, 0, 5), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA424[] = +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA564[] = { - gSpriteAffineAnim_83DA3FC, + gSpriteAffineAnim_83DA534, }; -const union AffineAnimCmd gSpriteAffineAnim_83DA428[] = +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA568 = { - AFFINEANIMCMD_FRAME(0x0, 0x0, 50, 1), - AFFINEANIMCMD_END, + .tileTag = 10156, + .paletteTag = 10156, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83DA564, + .callback = sub_80DB194, }; -const union AffineAnimCmd gSpriteAffineAnim_83DA438[] = +const union AffineAnimCmd gSpriteAffineAnim_83DA580[] = { - AFFINEANIMCMD_FRAME(0x0, 0x0, -40, 1), + AFFINEANIMCMD_FRAME(0xA0, 0x100, 0, 0), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA448[] = +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA590[] = { - gSpriteAffineAnim_83DA428, - gSpriteAffineAnim_83DA438, + gSpriteAffineAnim_83DA580, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA450 = +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA594 = { .tileTag = 10156, .paletteTag = 10156, .oam = &gOamData_837DFFC, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83DA424, - .callback = sub_80DA300, + .affineAnims = gSpriteAffineAnimTable_83DA590, + .callback = sub_80DB1F4, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA468 = +const union AffineAnimCmd gSpriteAffineAnim_83DA5AC[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), + AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA5D4[] = +{ + gSpriteAffineAnim_83DA5AC, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA5D8 = { .tileTag = 10156, .paletteTag = 10156, - .oam = &gOamData_837DF9C, + .oam = &gOamData_837DFFC, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83DA448, - .callback = sub_80DA38C, + .affineAnims = gSpriteAffineAnimTable_83DA5D4, + .callback = sub_80DB288, }; -const union AnimCmd gSpriteAnim_83DA480[] = +const union AffineAnimCmd gSpriteAffineAnim_83DA5F0[] = { - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, + AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 11), + AFFINEANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83DA488[] = +const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA610[] = { - ANIMCMD_FRAME(16, 0, .hFlip = TRUE), - ANIMCMD_END, + gSpriteAffineAnim_83DA5F0, }; -const union AnimCmd *const gSpriteAnimTable_83DA490[] = +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA614 = { - gSpriteAnim_83DA480, - gSpriteAnim_83DA488, + .tileTag = 10272, + .paletteTag = 10272, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80DB374, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA498 = +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA62C = { - .tileTag = 10270, - .paletteTag = 10270, - .oam = &gOamData_837DF94, - .anims = gSpriteAnimTable_83DA490, + .tileTag = 10273, + .paletteTag = 10273, + .oam = &gOamData_837DF24, + .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DA4D8, + .callback = sub_80DB458, }; -const u16 gUnknownPalette_83DA4B0[] = INCBIN_U16("graphics/unknown/unknown_3DA4B0.gbapal"); - -const struct SpriteTemplate gSpriteTemplate_83DA4D0 = +const struct SpriteTemplate gSpriteTemplate_83DA644 = { - .tileTag = 10155, - .paletteTag = 10155, - .oam = &gOamData_837DF2C, + .tileTag = 10212, + .paletteTag = 10212, + .oam = &gOamData_837E05C, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DAD30, + .callback = sub_80DB564, }; -const struct SpriteTemplate gSpriteTemplate_83DA4E8 = +const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C = { - .tileTag = 10270, - .paletteTag = 10270, - .oam = &gOamData_837DF94, - .anims = gSpriteAnimTable_83DA490, + .tileTag = 10284, + .paletteTag = 10284, + .oam = &gOamData_837DFFC, + .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DAD84, + .callback = sub_80DB5E4, }; -const union AnimCmd gSpriteAnim_83DA500[] = +void sub_80DA034(struct Sprite *sprite) +{ + sub_8078764(sprite, 0); + sprite->pos1.y += 20; + sprite->data[1] = 0xBF; + sprite->callback = sub_80DA05C; + sub_80DA05C(sprite); +} + +void sub_80DA05C(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[1], 0x20); + sprite->pos2.y = Cos(sprite->data[1], 0x8); + sprite->data[1] = (sprite->data[1] + 5) & 0xFF; + if(++sprite->data[0] == 0x47) + { + DestroyAnimSprite(sprite); + } +} + +void sub_80DA09C(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[1]; + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x2719); + gTasks[taskId].func = sub_80DA0DC; +} + +#ifdef NONMATCHING +void sub_80DA0DC(u8 taskId) +{ + gTasks[taskId].data[10]++; + if(gTasks[taskId].data[10] == gTasks[taskId].data[1]) + { + u16 r0; + u16 r2; + s32 i; + + gTasks[taskId].data[10] = 0; + r0 = gTasks[taskId].data[2]; + r2 = gPlttBufferFaded[r0 * 8]; + for(i = 0; i < 8; i++) + gPlttBufferFaded[r0 * 8 + i + 0x107] = gPlttBufferFaded[r0 * 8 + i + 0x107]; + gTasks[taskId].data[2] = ((r0 + 0x101) * 2) + r2; + } + gTasks[taskId].data[0] = gTasks[taskId].data[0] * 32; + if(gTasks[taskId].data[0] == 0) + { + DestroyAnimVisualTask(taskId); + } +} +#else +NAKED +void sub_80DA0DC(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r2, _080DA15C @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r2\n\ + ldrh r0, [r3, 0x1C]\n\ + adds r1, r0, 0x1\n\ + strh r1, [r3, 0x1C]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + movs r4, 0xA\n\ + ldrsh r1, [r3, r4]\n\ + adds r7, r2, 0\n\ + cmp r0, r1\n\ + bne _080DA13A\n\ + movs r0, 0\n\ + strh r0, [r3, 0x1C]\n\ + ldrb r0, [r3, 0xC]\n\ + ldr r2, _080DA160 @ =gPlttBufferFaded\n\ + lsls r0, 4\n\ + movs r3, 0x84\n\ + lsls r3, 1\n\ + adds r1, r0, r3\n\ + lsls r1, 1\n\ + adds r1, r2\n\ + ldrh r6, [r1]\n\ + movs r4, 0x7\n\ + mov r12, r0\n\ + ldr r0, _080DA164 @ =0x00000107\n\ + add r0, r12\n\ + lsls r0, 1\n\ + adds r3, r0, r2\n\ +_080DA122:\n\ + ldrh r0, [r3]\n\ + strh r0, [r1]\n\ + subs r3, 0x2\n\ + subs r1, 0x2\n\ + subs r4, 0x1\n\ + cmp r4, 0\n\ + bgt _080DA122\n\ + ldr r0, _080DA168 @ =0x00000101\n\ + add r0, r12\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + strh r6, [r0]\n\ +_080DA13A:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r7\n\ + ldrh r1, [r0, 0x8]\n\ + subs r1, 0x1\n\ + strh r1, [r0, 0x8]\n\ + lsls r1, 16\n\ + cmp r1, 0\n\ + bne _080DA154\n\ + adds r0, r5, 0\n\ + bl DestroyAnimVisualTask\n\ +_080DA154:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080DA15C: .4byte gTasks\n\ +_080DA160: .4byte gPlttBufferFaded\n\ +_080DA164: .4byte 0x00000107\n\ +_080DA168: .4byte 0x00000101\n\ + .syntax divided\n"); +} +#endif + +void sub_80DA16C(struct Sprite *sprite) { - ANIMCMD_FRAME(0, 1), - ANIMCMD_FRAME(8, 1), - ANIMCMD_FRAME(16, 1), - ANIMCMD_FRAME(8, 1, .hFlip = TRUE), - ANIMCMD_FRAME(0, 1, .hFlip = TRUE), - ANIMCMD_END, -}; + InitAnimSpritePos(sprite, 1); + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + InitAnimSpriteTranslationDeltas(sprite); + sprite->callback = sub_80785E4; + StoreSpriteCallbackInData(sprite, sub_80DA1EC); +} -const union AnimCmd *const gSpriteAnimTable_83DA518[] = +void sub_80DA1EC(struct Sprite *sprite) { - gSpriteAnim_83DA500, -}; + if (TranslateAnimSpriteByDeltas(sprite) != 0) + { + DestroyAnimSprite(sprite); + } +} -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA51C = +void sub_80DA208(struct Sprite *sprite) { - .tileTag = 10162, - .paletteTag = 10162, - .oam = &gOamData_837DF54, - .anims = gSpriteAnimTable_83DA518, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DB000, -}; + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } -const union AffineAnimCmd gSpriteAffineAnim_83DA534[] = -{ - AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), - AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), - AFFINEANIMCMD_FRAME(0xFFEC, 0x0, 0, 7), - AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, 0, 5), - AFFINEANIMCMD_END, -}; + if (IsContest()) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } -const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA564[] = -{ - gSpriteAffineAnim_83DA534, -}; + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA568 = -{ - .tileTag = 10156, - .paletteTag = 10156, - .oam = &gOamData_837DFFC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83DA564, - .callback = sub_80DB194, -}; + if (gBattleAnimArgs[6] == 0) + { + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); + } + else + { + SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + } -const union AffineAnimCmd gSpriteAffineAnim_83DA580[] = -{ - AFFINEANIMCMD_FRAME(0xA0, 0x100, 0, 0), - AFFINEANIMCMD_END, -}; + sprite->data[2] = sprite->data[2] + gBattleAnimArgs[2]; + sprite->data[4] = sprite->data[4] + gBattleAnimArgs[3]; + sprite->callback = StartTranslateAnimSpriteByDeltas; -const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA590[] = -{ - gSpriteAffineAnim_83DA580, -}; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + SeekSpriteAnim(sprite, gBattleAnimArgs[5]); +} -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA594 = +void sub_80DA300(struct Sprite *sprite) { - .tileTag = 10156, - .paletteTag = 10156, - .oam = &gOamData_837DFFC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83DA590, - .callback = sub_80DB1F4, -}; -const union AffineAnimCmd gSpriteAffineAnim_83DA5AC[] = -{ - AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), - AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), - AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), - AFFINEANIMCMD_END, -}; + InitAnimSpritePos(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = sub_80DA348; + gSprites[GetAnimBattlerSpriteId(0)].invisible = 1; +} -const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA5D4[] = +void sub_80DA348(struct Sprite *sprite) { - gSpriteAffineAnim_83DA5AC, -}; + if (sprite->data[0] > 0) + { + sprite->data[0]--; + } + else + { + sprite->data[2] += sprite->data[1]; + sprite->pos2.y -= (sprite->data[2] >> 8); + } -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA5D8 = -{ - .tileTag = 10156, - .paletteTag = 10156, - .oam = &gOamData_837DFFC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83DA5D4, - .callback = sub_80DB288, -}; + if (sprite->pos1.y + sprite->pos2.y < -32) + { + DestroyAnimSprite(sprite); + } +} -const union AffineAnimCmd gSpriteAffineAnim_83DA5F0[] = +void sub_80DA38C(struct Sprite *sprite) { - AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0), - AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12), - AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 11), - AFFINEANIMCMD_END, -}; + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x = 272; + sprite->pos1.y = -32; + StartSpriteAffineAnim(sprite, 1); + } + else + { + sprite->pos1.x = -32; + sprite->pos1.y = -32; + } -const union AffineAnimCmd *const gSpriteAffineAnimTable_83DA610[] = -{ - gSpriteAffineAnim_83DA5F0, -}; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA614 = -{ - .tileTag = 10272, - .paletteTag = 10272, - .oam = &gOamData_837DFFC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DB374, -}; + InitAnimSpriteTranslationDeltas(sprite); + sprite->callback = sub_80DA410; +} -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA62C = +void sub_80DA410(struct Sprite *sprite) { - .tileTag = 10273, - .paletteTag = 10273, - .oam = &gOamData_837DF24, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DB458, -}; + sprite->data[0] = 1; + TranslateAnimSpriteByDeltas(sprite); -const struct SpriteTemplate gSpriteTemplate_83DA644 = -{ - .tileTag = 10212, - .paletteTag = 10212, - .oam = &gOamData_837E05C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DB564, -}; + if (((u16)sprite->data[3] >> 8) > 200) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.x = 0; + sprite->data[3] &= 0xFF; + } -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DA65C = + if ((u32)(sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160) + { + gSprites[GetAnimBattlerSpriteId(0)].invisible = 0; + DestroyAnimSprite(sprite); + } +} + +void sub_80DA48C(struct Sprite *sprite) { - .tileTag = 10284, - .paletteTag = 10284, - .oam = &gOamData_837DFFC, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80DB5E4, -}; + if (sprite->data[0]-- <= 0) + { + if (sprite->oam.affineMode & 1) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = 0; + } + + DestroySprite(sprite); + gAnimVisualTaskCount--; + } +} -- cgit v1.2.3 From b6465675b63085ebcdbcd576110733edc2c06b4a Mon Sep 17 00:00:00 2001 From: MCboy Date: Thu, 21 Jun 2018 03:28:07 +0430 Subject: ugh not again --- src/battle/anim/flying.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index dcb248128..0decda6cd 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -11,6 +11,7 @@ extern u8 gAnimBankTarget; extern u8 gAnimVisualTaskCount; void sub_80785E4(struct Sprite *sprite); +void sub_80DA034(struct Sprite *sprite); void sub_80DA05C(struct Sprite *sprite); void sub_80DA16C(struct Sprite *sprite); void sub_80DA1EC(struct Sprite *sprite); -- cgit v1.2.3 From 760f6307a5770f53f64618dc775204f4231b52d4 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 23 Jun 2018 20:22:40 -0500 Subject: Decompile more of battle_anim_812C144.c --- src/battle/battle_anim_812C144.c | 479 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 479 insertions(+) (limited to 'src') diff --git a/src/battle/battle_anim_812C144.c b/src/battle/battle_anim_812C144.c index cef1fb97c..eeb2c3514 100644 --- a/src/battle/battle_anim_812C144.c +++ b/src/battle/battle_anim_812C144.c @@ -36,10 +36,14 @@ extern const union AffineAnimCmd gUnknown_084024B0[]; extern const union AffineAnimCmd gUnknown_08402518[]; extern const union AffineAnimCmd gUnknown_08402540[]; extern const union AffineAnimCmd gUnknown_08402590[]; +extern const union AffineAnimCmd gUnknown_08402610[]; extern const u32 gUnknown_08D2AA98[]; extern const u32 gUnknown_08D2A9E0[]; extern const u16 gUnknown_08D2AA80[]; extern const s8 gUnknown_084025C0[]; +extern const s8 gUnknown_08402604[]; +extern const u8 gUnknown_08402608[]; +extern const struct SpriteTemplate gBattleAnimSpriteTemplate_84025EC; extern u8 gBattleMonForms[]; extern u8 gBankSpriteIds[]; @@ -65,6 +69,12 @@ static void sub_812D06C(u8 taskId); static void sub_812D254(struct Sprite *sprite); static void sub_812D4EC(struct Sprite *sprite); static void sub_812D5E8(struct Sprite *sprite); +static void sub_812DFEC(struct Sprite *sprite); +static void sub_812E09C(struct Sprite *sprite); +static void sub_812E0F8(struct Sprite *sprite); +static void sub_812E638(u8 taskId); +static void sub_812E7F0(struct Sprite *sprite); +static void sub_812E8B4(u8 taskId); void sub_812C144(struct Sprite *sprite) @@ -1362,3 +1372,472 @@ void sub_812DB84(u8 taskId) break; } } + +void sub_812DEAC(struct Sprite *sprite) +{ + s16 var0; + u8 spriteId1; + u8 spriteId2; + + var0 = Random(); + var0 &= 0x3F; + if (var0 > 31) + var0 = 32 - var0; + + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + var0; + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + 32; + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + + spriteId1 = CreateSprite(&gBattleAnimSpriteTemplate_84025EC, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1); + spriteId2 = CreateSprite(&gBattleAnimSpriteTemplate_84025EC, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1); + StartSpriteAnim(&gSprites[spriteId1], 1); + StartSpriteAnim(&gSprites[spriteId2], 2); + + gSprites[spriteId1].data[1] = gBattleAnimArgs[0]; + gSprites[spriteId1].data[2] = gBattleAnimArgs[1]; + gSprites[spriteId2].data[1] = gBattleAnimArgs[0]; + gSprites[spriteId2].data[2] = gBattleAnimArgs[1]; + gSprites[spriteId1].data[7] = -1; + gSprites[spriteId2].data[7] = -1; + gSprites[spriteId1].invisible = 1; + gSprites[spriteId2].invisible = 1; + gSprites[spriteId1].callback = sub_812E0F8; + gSprites[spriteId2].callback = sub_812E0F8; + + sprite->data[6] = spriteId1; + sprite->data[7] = spriteId2; + sprite->callback = sub_812DFEC; +} + +static void sub_812DFEC(struct Sprite *sprite) +{ + int var0; + s8 var1; + + var0 = (u16)sprite->data[2] + (u16)sprite->data[3]; + var1 = var0 >> 8; + sprite->pos2.y -= var1; + sprite->data[3] = var0 & 0xFF; + if (sprite->data[4] == 0 && sprite->pos2.y < -8) + { + gSprites[sprite->data[6]].invisible = 0; + sprite->data[4]++; + } + + if (sprite->data[4] == 1 && sprite->pos2.y < -16) + { + gSprites[sprite->data[7]].invisible = 0; + sprite->data[4]++; + } + + if (--sprite->data[1] == -1) + { + sprite->invisible = 1; + sprite->callback = sub_812E09C; + } +} + +static void sub_812E09C(struct Sprite *sprite) +{ + if (gSprites[sprite->data[6]].callback == SpriteCallbackDummy + && gSprites[sprite->data[7]].callback == SpriteCallbackDummy) + { + DestroySprite(&gSprites[sprite->data[6]]); + DestroySprite(&gSprites[sprite->data[7]]); + DestroyAnimSprite(sprite); + } +} + +static void sub_812E0F8(struct Sprite *sprite) +{ + u16 d2; + register u16 d3 asm("r1"); + int var0; + s8 var1; + + if (!sprite->invisible) + { + d2 = sprite->data[2]; + d3 = sprite->data[3]; + var0 = d2 + d3; + var1 = var0 >> 8; + sprite->pos2.y -= var1; + sprite->data[3] = var0 & 0xFF; + if (--sprite->data[1] == -1) + { + sprite->invisible = 1; + sprite->callback = SpriteCallbackDummy; + } + } +} + +void sub_812E14C(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + switch (gTasks[taskId].data[0]) + { + case 0: + REG_BLDCNT = BLDCNT_TGT2_BD | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 + | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1; + REG_BLDALPHA = 0xD03; + REG_BG1CNT_BITFIELD.screenSize = 0; + REG_BG1CNT_BITFIELD.priority = 1; + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + sub_8078914(&subStruct); + DmaClear32(3, subStruct.field_4, 0x1000); + LZDecompressVram(gUnknown_08D2AA98, subStruct.field_4); + LZDecompressVram(gUnknown_08D2A9E0, subStruct.field_0); + LoadCompressedPalette(gUnknown_08D2AA80, subStruct.field_8 * 16, 32); + + if (IsContest()) + { + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + gBattle_BG1_X = -56; + gBattle_BG1_Y = 0; + } + else + { + u8 position = GetBattlerPosition(gAnimBankTarget); + if (IsDoubleBattle() == TRUE) + { + if (position == B_POSITION_OPPONENT_LEFT) + gBattle_BG1_X = -155; + if (position == B_POSITION_OPPONENT_RIGHT) + gBattle_BG1_X = -115; + if (position == B_POSITION_PLAYER_LEFT) + gBattle_BG1_X = 14; + if (position == B_POSITION_PLAYER_RIGHT) + gBattle_BG1_X = -20; + } + else + { + if (position == B_POSITION_OPPONENT_LEFT) + gBattle_BG1_X = -135; + if (position == B_POSITION_PLAYER_LEFT) + gBattle_BG1_X = -10; + } + + gBattle_BG1_Y = 0; + } + + gTasks[taskId].data[10] = gBattle_BG1_X; + gTasks[taskId].data[11] = gBattle_BG1_Y; + gTasks[taskId].data[0]++; + break; + case 1: + gTasks[taskId].data[3] = 0; + if (GetBattlerSide(gAnimBankTarget) == B_SIDE_OPPONENT) + gBattle_BG1_X = gTasks[taskId].data[10] + gUnknown_08402604[gTasks[taskId].data[2]]; + else + gBattle_BG1_X = gTasks[taskId].data[10] - gUnknown_08402604[gTasks[taskId].data[2]]; + + if (++gTasks[taskId].data[2] == 5) + gTasks[taskId].data[0] = 5; + else + gTasks[taskId].data[0]++; + break; + case 2: + if (--gTasks[taskId].data[1] <= 4) + gTasks[taskId].data[1] = 5; + + REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | 3; + if (gTasks[taskId].data[1] == 5) + gTasks[taskId].data[0]++; + break; + case 3: + if (++gTasks[taskId].data[3] > gUnknown_08402608[gTasks[taskId].data[2]]) + gTasks[taskId].data[0]++; + break; + case 4: + if (++gTasks[taskId].data[1] > 13) + gTasks[taskId].data[1] = 13; + + REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | 3; + if (gTasks[taskId].data[1] == 13) + gTasks[taskId].data[0] = 1; + break; + case 5: + sub_8078914(&subStruct); + DmaClear32(3, subStruct.field_4, 0x800); + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + REG_BG1CNT_BITFIELD.priority = 1; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_812E498(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gUnknown_08402610); + gTasks[taskId].data[0]++; + } + else + { + if (!sub_807992C(&gTasks[taskId])) + { + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_812E4F0(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + InitAnimSpritePos(sprite, 0); + sprite->data[0]++; + } + else if (sprite->data[0]++ > 20) + { + sprite->data[1] += 160; + sprite->data[2] += 128; + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + sprite->pos2.x = -(sprite->data[1] >> 8); + else + sprite->pos2.x = sprite->data[1] >> 8; + + sprite->pos2.y += sprite->data[2] >> 8; + if (sprite->pos2.y > 64) + DestroyAnimSprite(sprite); + } +} + +void sub_812E568(u8 taskId) +{ + u8 side; + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[1] == 0) + { + DestroyAnimVisualTask(taskId); + return; + } + + if (gBattleAnimArgs[2] < 0) + gBattleAnimArgs[2] = 0; + if (gBattleAnimArgs[2] > 2) + gBattleAnimArgs[2] = 2; + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 8 - (2 * gBattleAnimArgs[2]); + task->data[4] = 0x100 + (gBattleAnimArgs[2] * 128); + task->data[5] = gBattleAnimArgs[2] + 2; + task->data[6] = gBattleAnimArgs[1] - 1; + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + + if (gBattleAnimArgs[0] == 0) + side = GetBattlerSide(gAnimBankAttacker); + else + side = GetBattlerSide(gAnimBankTarget); + + if (side == B_SIDE_OPPONENT) + { + task->data[4] *= -1; + task->data[5] *= -1; + } + + sub_8078E70(task->data[15], 0); + task->func = sub_812E638; +} + +static void sub_812E638(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + gSprites[task->data[15]].pos2.x += task->data[5]; + task->data[2] -= task->data[4]; + obj_id_set_rotscale(task->data[15], 0x100, 0x100, task->data[2]); + sub_8078F9C(task->data[15]); + if (++task->data[1] >= task->data[3]) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 1: + gSprites[task->data[15]].pos2.x -= task->data[5]; + task->data[2] += task->data[4]; + obj_id_set_rotscale(task->data[15], 0x100, 0x100, task->data[2]); + sub_8078F9C(task->data[15]); + if (++task->data[1] >= task->data[3] * 2) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + gSprites[task->data[15]].pos2.x += task->data[5]; + task->data[2] -= task->data[4]; + obj_id_set_rotscale(task->data[15], 0x100, 0x100, task->data[2]); + sub_8078F9C(task->data[15]); + if (++task->data[1] >= task->data[3]) + { + if (task->data[6]) + { + task->data[6]--; + task->data[1] = 0; + task->data[0] = 0; + } + else + { + task->data[0]++; + } + } + break; + case 3: + sub_8078F40(task->data[15]); + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_812E7A0(struct Sprite *sprite) +{ + if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER) + { + sprite->pos1.x = 0; + sprite->pos1.y = gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x = 240; + sprite->pos1.y = gBattleAnimArgs[0] - 30; + } + + sprite->data[2] = gBattleAnimArgs[2]; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + sprite->callback = sub_812E7F0; +} + +static void sub_812E7F0(struct Sprite *sprite) +{ + sprite->data[0] += 3; + if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER) + { + sprite->pos1.x += 5; + sprite->pos1.y -= 1; + + if (sprite->pos1.x > 240) + DestroyAnimSprite(sprite); + + sprite->pos2.y = Sin(sprite->data[0] & 0xFF, 16); + } + else + { + sprite->pos1.x -= 5; + sprite->pos1.y += 1; + + if (sprite->pos1.x < 0) + DestroyAnimSprite(sprite); + + sprite->pos2.y = Cos(sprite->data[0] & 0xFF, 16); + } +} + +void sub_812E860(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[12] = 0x20; + task->data[13] = 0x40; + task->data[14] = 0x800; + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + + sub_8078E70(task->data[15], 0); + task->func = sub_812E8B4; +} + +static void sub_812E8B4(u8 taskId) +{ + int temp; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[2] += 0x200; + if (task->data[2] >= task->data[14]) + { + s16 diff = task->data[14] - task->data[2]; + s16 div = diff / (task->data[14] * 2); + s16 mod = diff % (task->data[14] * 2); + + if ((div & 1) == 0) + { + task->data[2] = task->data[14] - mod; + task->data[0] = 1; + } + else + { + task->data[2] = mod - task->data[14]; + } + } + break; + case 1: + task->data[2] -= 0x200; + if (task->data[2] <= -task->data[14]) + { + s16 diff = task->data[14] - task->data[2]; + s16 div = diff / (task->data[14] * 2); + s16 mod = diff % (task->data[14] * 2); + + if ((1 & div) == 0) + { + task->data[2] = mod - task->data[14]; + task->data[0] = 0; + } + else + { + task->data[2] = task->data[14] - mod; + } + } + break; + case 2: + sub_8078F40(task->data[15]); + DestroyAnimVisualTask(taskId); + return; + } + + obj_id_set_rotscale(task->data[15], 0x100, 0x100, task->data[2]); + sub_8078F9C(task->data[15]); + gSprites[task->data[15]].pos2.x = -(((temp = task->data[2]) >= 0 ? task->data[2] : temp + 63) >> 6); + + if (++task->data[1] > 8) + { + if (task->data[12]) + { + task->data[12]--; + task->data[14] -= task->data[13]; + if (task->data[14] < 16) + task->data[14] = 16; + } + else + { + task->data[0] = 2; + } + } +} -- cgit v1.2.3 From b9c36be83b68a7c1375f23b407e7f9467091107b Mon Sep 17 00:00:00 2001 From: MCboy Date: Mon, 25 Jun 2018 04:58:08 +0430 Subject: fixed an spacing issue --- src/battle/anim/flying.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index 0decda6cd..d5541588a 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -551,7 +551,6 @@ void sub_80DA208(struct Sprite *sprite) void sub_80DA300(struct Sprite *sprite) { - InitAnimSpritePos(sprite, 1); sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[3]; -- cgit v1.2.3 From c27e3a8a4b1463ce47b5ef6c5b22b5b85f1ece12 Mon Sep 17 00:00:00 2001 From: MCboy Date: Mon, 25 Jun 2018 05:01:15 +0430 Subject: hopefully no "bugs" --- src/battle/anim/flying.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index d5541588a..c8cd2077b 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -378,8 +378,6 @@ void sub_80DA05C(struct Sprite *sprite) void sub_80DA09C(u8 taskId) { - gTasks[taskId].data[0] = gBattleAnimArgs[1]; - gTasks[taskId].data[1] = gBattleAnimArgs[0]; gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x2719); gTasks[taskId].func = sub_80DA0DC; } -- cgit v1.2.3 From f03705064f301db4bce8e7f74edc87d41311803b Mon Sep 17 00:00:00 2001 From: MCboy Date: Mon, 25 Jun 2018 05:07:22 +0430 Subject: oops --- src/battle/anim/flying.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c index c8cd2077b..e8c50816c 100755 --- a/src/battle/anim/flying.c +++ b/src/battle/anim/flying.c @@ -378,8 +378,10 @@ void sub_80DA05C(struct Sprite *sprite) void sub_80DA09C(u8 taskId) { - gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x2719); - gTasks[taskId].func = sub_80DA0DC; + gTasks[taskId].data[0] = gBattleAnimArgs[1]; + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x2719); + gTasks[taskId].func = sub_80DA0DC; } #ifdef NONMATCHING -- cgit v1.2.3 From 18fb03a570bdfcfbe0db4e2d85f5406589fd1136 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 25 Jun 2018 17:48:54 -0500 Subject: Decompile ground.c --- src/battle/anim/ground.c | 619 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 611 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/battle/anim/ground.c b/src/battle/anim/ground.c index a523df20e..d97d1e1f5 100644 --- a/src/battle/anim/ground.c +++ b/src/battle/anim/ground.c @@ -1,18 +1,44 @@ #include "global.h" -#include "rom_8077ABC.h" +#include "battle.h" #include "battle_anim.h" +#include "scanline_effect.h" +#include "random.h" +#include "rom_8077ABC.h" +#include "task.h" +#include "trig.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; +extern u16 gBattle_BG2_X; +extern u16 gBattle_BG2_Y; +extern u16 gBattle_BG3_X; +extern u16 gBattle_BG3_Y; +extern u16 gAnimMovePower; +extern u8 gBankSpriteIds[]; -void sub_80E0F1C(struct Sprite *sprite); -void sub_80E1004(struct Sprite *sprite); -void sub_80E1078(struct Sprite *sprite); -void sub_80E1078(struct Sprite *sprite); -void sub_80E1108(struct Sprite *sprite); -void sub_80E1728(struct Sprite *sprite); -void sub_80E17CC(struct Sprite *sprite); +static void sub_80E0F1C(struct Sprite *sprite); +static void sub_80E0F84(struct Sprite *sprite); +static void sub_80E0FE8(struct Sprite *sprite); +static void sub_80E1004(struct Sprite *sprite); +static void sub_80E1078(struct Sprite *sprite); +static void sub_80E1108(struct Sprite *sprite); +static void sub_80E1198(struct Sprite *sprite); +static void sub_80E11D4(struct Sprite *sprite); +static void sub_80E1284(u8 taskId); +static void sub_80E1668(u8, s16, s16); +static void sub_80E143C(u8 taskId); +static void sub_80E14DC(u8 taskId); +static void sub_80E1560(u8 taskId); +static void sub_80E1728(struct Sprite *sprite); +static void sub_80E17B0(struct Sprite *sprite); +static void sub_80E17CC(struct Sprite *sprite); +static void sub_80E1934(u8 taskId); +static void sub_80E1A2C(u8 taskId); +static void sub_80E1B10(struct Task *task); +static void sub_80E1C58(u8 taskId); const union AffineAnimCmd gSpriteAffineAnim_83DB2A0[] = { @@ -123,3 +149,580 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB364 = .affineAnims = gDummySpriteAffineAnimTable, .callback = sub_80E17CC, }; + +static void sub_80E0F1C(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->data[0] = 20; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); + sprite->data[5] = -40; + InitAnimSpriteTranslationOverDuration(sprite); + sprite->callback = sub_80E0F84; +} + +static void sub_80E0F84(struct Sprite *sprite) +{ + if (TranslateAnimSpriteLinearAndSine(sprite)) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 20; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->data[5] = 40; + InitAnimSpriteTranslationOverDuration(sprite); + sprite->callback = sub_80E0FE8; + } +} + +static void sub_80E0FE8(struct Sprite *sprite) +{ + if (TranslateAnimSpriteLinearAndSine(sprite)) + DestroyAnimSprite(sprite); +} + +static void sub_80E1004(struct Sprite *sprite) +{ + sub_8078764(sprite, 1); + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->callback = StartTranslateAnimSpriteByDeltas; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +static void sub_80E1078(struct Sprite *sprite) +{ + u8 targetXPos, targetYPos; + s16 xOffset, yOffset; + + InitAnimSpritePos(sprite, 1); + + targetXPos = sub_8077EE4(gAnimBankTarget, 2); + targetYPos = sub_8077EE4(gAnimBankTarget, 3); + + xOffset = Random() & 0x1F; + yOffset = Random() & 0x1F; + if (xOffset > 16) + xOffset = 16 - xOffset; + if (yOffset > 16) + yOffset = 16 - yOffset; + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = targetXPos + xOffset; + sprite->data[4] = targetYPos + yOffset; + sprite->callback = StartTranslateAnimSpriteByDeltas; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} + +static void sub_80E1108(struct Sprite *sprite) +{ + sprite->oam.tileNum++; + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1; + sprite->callback = sub_80E1198; + } + else + { + sprite->pos1.x = gBattleAnimArgs[1]; + sprite->pos1.y = gBattleAnimArgs[2]; + sprite->pos2.y = -gBattleAnimArgs[2]; + sprite->callback = sub_80E11D4; + } +} + +static void sub_80E1198(struct Sprite *sprite) +{ + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + sprite->pos1.x += sprite->data[0]; + } + + sprite->pos1.y -= 4; + if (sprite->pos1.y < -4) + DestroyAnimSprite(sprite); +} + +static void sub_80E11D4(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos2.y += 4; + if (sprite->pos2.y >= 0) + { + sprite->pos2.y = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] > 0) + { + sprite->data[1] = 0; + sprite->invisible ^= 1; + if (++sprite->data[2] == 10) + DestroyAnimSprite(sprite); + } + break; + } +} + +void sub_80E1244(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[0] == 0) + task->func = sub_80E1284; + else + task->func = sub_80E143C; + + task->func(taskId); +} + +static void sub_80E1284(u8 taskId) +{ + u8 var0; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[10] = GetAnimBattlerSpriteId(0); + task->data[11] = GetBattlerPosition_permutated(gAnimBankAttacker); + if (task->data[11] == 1) + { + task->data[12] = gBattle_BG1_X; + task->data[13] = gBattle_BG1_Y; + } + else + { + task->data[12] = gBattle_BG2_X; + task->data[13] = gBattle_BG2_Y; + } + + var0 = sub_8077FC0(gAnimBankAttacker); + task->data[14] = var0 - 32; + task->data[15] = var0 + 32; + if (task->data[14] < 0) + task->data[14] = 0; + + gSprites[task->data[10]].invisible = 1; + task->data[0]++; + break; + case 1: + sub_80E1668(task->data[11], task->data[14], task->data[15]); + task->data[0]++; + break; + case 2: + task->data[2] = (task->data[2] + 6) & 0x7F; + if (++task->data[4] > 2) + { + task->data[4] = 0; + task->data[3]++; + } + + task->data[5] = task->data[3] + (gSineTable[task->data[2]] >> 4); + if (task->data[11] == 1) + gBattle_BG1_Y = task->data[13] - task->data[5]; + else + gBattle_BG2_Y = task->data[13] - task->data[5]; + + if (task->data[5] > 63) + { + task->data[5] = 120 - task->data[14]; + if (task->data[11] == 1) + gBattle_BG1_Y = task->data[13] - task->data[5]; + else + gBattle_BG2_Y = task->data[13] - task->data[5]; + + gSprites[task->data[10]].pos2.x = 272 - gSprites[task->data[10]].pos1.x; + task->data[0]++; + } + break; + case 3: + gScanlineEffect.state = 3; + task->data[0]++; + break; + case 4: + DestroyAnimVisualTask(taskId); + gSprites[task->data[10]].invisible = 1; + break; + } +} + +static void sub_80E143C(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(0); + gSprites[spriteId].invisible = 1; + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + + if (GetBattlerPosition_permutated(gAnimBankAttacker) == 1) + gBattle_BG1_Y = 0; + else + gBattle_BG2_Y = 0; + + DestroyAnimVisualTask(taskId); +} + +void sub_80E149C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[0] == 0) + task->func = sub_80E14DC; + else + task->func = sub_80E1560; + + task->func(taskId); +} + +static void sub_80E14DC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[10] = GetAnimBattlerSpriteId(0); + gSprites[task->data[10]].invisible = 0; + gSprites[task->data[10]].pos2.x = 0; + gSprites[task->data[10]].pos2.y = 160 - gSprites[task->data[10]].pos1.y; + task->data[0]++; + break; + case 1: + DestroyAnimVisualTask(taskId); + } +} + +static void sub_80E1560(u8 taskId) +{ + u8 var0; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[10] = GetAnimBattlerSpriteId(0); + task->data[11] = GetBattlerPosition_permutated(gAnimBankAttacker); + if (task->data[11] == 1) + task->data[12] = gBattle_BG1_X; + else + task->data[12] = gBattle_BG2_X; + + var0 = sub_8077FC0(gAnimBankAttacker); + task->data[14] = var0 - 32; + task->data[15] = var0 + 32; + task->data[0]++; + break; + case 1: + sub_80E1668(task->data[11], 0, task->data[15]); + task->data[0]++; + break; + case 2: + gSprites[task->data[10]].pos2.y = 96; + task->data[0]++; + break; + case 3: + gSprites[task->data[10]].pos2.y -= 8; + if (gSprites[task->data[10]].pos2.y == 0) + { + gScanlineEffect.state = 3; + task->data[0]++; + } + break; + case 4: + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80E1668(u8 useBG1, s16 y, s16 endY) +{ + s16 bgX; + struct ScanlineEffectParams scanlineParams; + + if (useBG1 == 1) + { + bgX = gBattle_BG1_X; + scanlineParams.dmaDest = ®_BG1HOFS; + } + else + { + bgX = gBattle_BG2_X; + scanlineParams.dmaDest = ®_BG2HOFS; + } + + if (y < 0) + y = 0; + + while (y < endY) + { + gScanlineEffectRegBuffers[0][y] = bgX; + gScanlineEffectRegBuffers[1][y] = bgX; + y++; + } + + while (y < 160) + { + gScanlineEffectRegBuffers[0][y] = bgX + 240; + gScanlineEffectRegBuffers[1][y] = bgX + 240; + y++; + } + + scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + ScanlineEffect_SetParams(scanlineParams); +} + +static void sub_80E1728(struct Sprite *sprite) +{ + s8 battler; + s16 xOffset; + + if (gBattleAnimArgs[0] == 0) + battler = gAnimBankAttacker; + else + battler = gAnimBankTarget; + + xOffset = 24; + if (gBattleAnimArgs[1] == 1) + { + xOffset *= -1; + gBattleAnimArgs[2] *= -1; + } + + sprite->pos1.x = GetBattlerSpriteCoord(battler, 2) + xOffset; + sprite->pos1.y = sub_8077FC0(battler) + 30; + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[4]; + InitAnimSpriteTranslationOverDuration(sprite); + sprite->callback = sub_80E17B0; +} + +static void sub_80E17B0(struct Sprite *sprite) +{ + if (TranslateAnimSpriteLinearAndSine(sprite)) + DestroyAnimSprite(sprite); +} + +static void sub_80E17CC(struct Sprite *sprite) +{ + s8 battler; + + if (gBattleAnimArgs[0] == 0) + battler = gAnimBankAttacker; + else + battler = gAnimBankTarget; + + sprite->pos1.x = GetBattlerSpriteCoord(battler, 0) - 16 + (gBattleAnimArgs[1] * 32); + sprite->pos1.y = sub_8077FC0(battler) + 32; + sprite->oam.tileNum += gBattleAnimArgs[1] * 8; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = WaitAnimForDuration; +} + +void sub_80E1864(u8 taskId) +{ + u16 i; + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[1]) + task->data[14] = task->data[15] = gBattleAnimArgs[1] + 3; + else + task->data[14] = task->data[15] = (gAnimMovePower / 10) + 3; + + task->data[3] = gBattleAnimArgs[2]; + switch (gBattleAnimArgs[0]) + { + case 5: + task->data[13] = gBattle_BG3_X; + task->func = sub_80E1934; + break; + case 4: + task->data[13] = 0; + for (i = 0; i < 4; i++) + { + if (IsAnimBankSpriteVisible(i)) + { + task->data[task->data[13] + 9] = gBankSpriteIds[i]; + task->data[13]++; + } + } + task->func = sub_80E1A2C; + break; + default: + task->data[9] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + if (task->data[9] == 0xFF) + { + DestroyAnimVisualTask(taskId); + } + else + { + task->data[13] = 1; + task->func = sub_80E1A2C; + } + + break; + } +} + +static void sub_80E1934(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if ((task->data[2] & 1) == 0) + gBattle_BG3_X = task->data[13] + task->data[15]; + else + gBattle_BG3_X = task->data[13] - task->data[15]; + + if (++task->data[2] == task->data[3]) + { + task->data[2] = 0; + task->data[14]--; + task->data[0]++; + } + } + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if ((task->data[2] & 1) == 0) + gBattle_BG3_X = task->data[13] + task->data[14]; + else + gBattle_BG3_X = task->data[13] - task->data[14]; + + if (++task->data[2] == 4) + { + task->data[2] = 0; + if (--task->data[14] == 0) + task->data[0]++; + } + } + break; + case 2: + gBattle_BG3_X = task->data[13]; + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80E1A2C(u8 taskId) +{ + u16 i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 1) + { + task->data[1] = 0; + sub_80E1B10(task); + if (++task->data[2] == task->data[3]) + { + task->data[2] = 0; + task->data[14]--; + task->data[0]++; + } + } + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + sub_80E1B10(task); + if (++task->data[2] == 4) + { + task->data[2] = 0; + if (--task->data[14] == 0) + task->data[0]++; + } + } + break; + case 2: + for (i = 0; i < task->data[13]; i++) + gSprites[task->data[9 + i]].pos2.x = 0; + + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80E1B10(struct Task *task) +{ + u16 i; + u16 xOffset; + + if ((task->data[2] & 1) == 0) + xOffset = (task->data[14] / 2) + (task->data[14] & 1); + else + xOffset = -(task->data[14] / 2); + + for (i = 0; i < task->data[13]; i++) + { + gSprites[task->data[9 + i]].pos2.x = xOffset; + } +} + +void sub_80E1B88(u8 taskId) +{ + gBattleAnimArgs[15] = gAnimMovePower > 99; + DestroyAnimVisualTask(taskId); +} + +void sub_80E1BB0(u8 taskId) +{ + struct Task *newTask; + u8 battler = (gBattleAnimArgs[0] & 1) ? gAnimBankTarget : gAnimBankAttacker; + + if (gBattleAnimArgs[0] > 1) + battler ^= 2; + + newTask = &gTasks[CreateTask(sub_80E1C58, gBattleAnimArgs[1])]; + newTask->data[1] = (32 - GetBattlerSpriteCoord(battler, 2)) & 0x1FF; + newTask->data[2] = (64 - GetBattlerSpriteCoord(battler, 3)) & 0xFF; + gBattle_BG3_X = newTask->data[1]; + gBattle_BG3_Y = newTask->data[2]; + newTask->data[3] = gBattleAnimArgs[2]; + DestroyAnimVisualTask(taskId); +} + +static void sub_80E1C58(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[7] == task->data[3]) + { + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + DestroyTask(taskId); + } + else + { + gBattle_BG3_X = task->data[1]; + gBattle_BG3_Y = task->data[2]; + } +} -- cgit v1.2.3 From f839afb24aa2c7b70e9c28a5c069aacc46993099 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 25 Jun 2018 17:49:04 -0500 Subject: Label sprite templates and their funcs in battle/anim/ground.c --- src/battle/anim/ground.c | 139 +++++++++++++++++++++++++++++------------------ 1 file changed, 86 insertions(+), 53 deletions(-) (limited to 'src') diff --git a/src/battle/anim/ground.c b/src/battle/anim/ground.c index d97d1e1f5..67b4c9c9c 100644 --- a/src/battle/anim/ground.c +++ b/src/battle/anim/ground.c @@ -19,72 +19,72 @@ extern u16 gBattle_BG3_Y; extern u16 gAnimMovePower; extern u8 gBankSpriteIds[]; -static void sub_80E0F1C(struct Sprite *sprite); -static void sub_80E0F84(struct Sprite *sprite); -static void sub_80E0FE8(struct Sprite *sprite); -static void sub_80E1004(struct Sprite *sprite); -static void sub_80E1078(struct Sprite *sprite); -static void sub_80E1108(struct Sprite *sprite); -static void sub_80E1198(struct Sprite *sprite); -static void sub_80E11D4(struct Sprite *sprite); +static void AnimBonemerangProjectile(struct Sprite *sprite); +static void AnimBonemerangProjectileStep(struct Sprite *sprite); +static void AnimBonemerangProjectileEnd(struct Sprite *sprite); +static void AnimBoneHitProjectile(struct Sprite *sprite); +static void AnimDirtScatter(struct Sprite *sprite); +static void AnimMudSportDirt(struct Sprite *sprite); +static void AnimMudSportDirtRising(struct Sprite *sprite); +static void AnimMudSportDirtFalling(struct Sprite *sprite); static void sub_80E1284(u8 taskId); static void sub_80E1668(u8, s16, s16); static void sub_80E143C(u8 taskId); static void sub_80E14DC(u8 taskId); static void sub_80E1560(u8 taskId); -static void sub_80E1728(struct Sprite *sprite); -static void sub_80E17B0(struct Sprite *sprite); -static void sub_80E17CC(struct Sprite *sprite); +static void AnimFissureDirtPlumeParticle(struct Sprite *sprite); +static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite); +static void AnimDigDirtMound(struct Sprite *sprite); static void sub_80E1934(u8 taskId); static void sub_80E1A2C(u8 taskId); static void sub_80E1B10(struct Task *task); static void sub_80E1C58(u8 taskId); -const union AffineAnimCmd gSpriteAffineAnim_83DB2A0[] = +const union AffineAnimCmd gBonemerangSpriteAffineAnim[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 15, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd gSpriteAffineAnim_83DB2B0[] = +const union AffineAnimCmd gBoneHitSpriteAffineAnim[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB2C0[] = +const union AffineAnimCmd *const gBonemerangSpriteAffineAnimTable[] = { - gSpriteAffineAnim_83DB2A0, + gBonemerangSpriteAffineAnim, }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_83DB2C4[] = +const union AffineAnimCmd *const gBoneHitSpriteAffineAnimTable[] = { - gSpriteAffineAnim_83DB2B0, + gBoneHitSpriteAffineAnim, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2C8 = +const struct SpriteTemplate gBonemerangSpriteTemplate = { .tileTag = 10000, .paletteTag = 10000, .oam = &gOamData_837DF94, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83DB2C0, - .callback = sub_80E0F1C, + .affineAnims = gBonemerangSpriteAffineAnimTable, + .callback = AnimBonemerangProjectile, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2E0 = +const struct SpriteTemplate gBoneHitSpriteTemplate = { .tileTag = 10000, .paletteTag = 10000, .oam = &gOamData_837DF94, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83DB2C4, - .callback = sub_80E1004, + .affineAnims = gBoneHitSpriteAffineAnimTable, + .callback = AnimBoneHitProjectile, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2F8 = +const struct SpriteTemplate gSandAttackDirtSpriteTemplate = { .tileTag = 10074, .paletteTag = 10074, @@ -92,32 +92,32 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB2F8 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E1078, + .callback = AnimDirtScatter, }; -const union AnimCmd gSpriteAnim_83DB310[] = +const union AnimCmd gMudSlapDirtSpriteAnim[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_83DB318[] = +const union AnimCmd *const gMudSlapDirtSpriteAnimTable[] = { - gSpriteAnim_83DB310, + gMudSlapDirtSpriteAnim, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB31C = +const struct SpriteTemplate gMudSlapDirtSpriteTemplate = { .tileTag = 10074, .paletteTag = 10074, .oam = &gOamData_837DF2C, - .anims = gSpriteAnimTable_83DB318, + .anims = gMudSlapDirtSpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E1078, + .callback = AnimDirtScatter, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB334 = +const struct SpriteTemplate gMudSportDirtSpriteTemplate = { .tileTag = 10074, .paletteTag = 10074, @@ -125,10 +125,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB334 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E1108, + .callback = AnimMudSportDirt, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB34C = +const struct SpriteTemplate gDirtPlumeSpriteTemplate = { .tileTag = 10074, .paletteTag = 10074, @@ -136,10 +136,10 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB34C = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E1728, + .callback = AnimFissureDirtPlumeParticle, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB364 = +const struct SpriteTemplate gDigDirtMoundSpriteTemplate = { .tileTag = 10281, .paletteTag = 10281, @@ -147,10 +147,12 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83DB364 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80E17CC, + .callback = AnimDigDirtMound, }; -static void sub_80E0F1C(struct Sprite *sprite) +// Moves a bone projectile towards the target mon, which moves like +// a boomerang. After hitting the target mon, it comes back to the user. +static void AnimBonemerangProjectile(struct Sprite *sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); @@ -159,10 +161,10 @@ static void sub_80E0F1C(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); sprite->data[5] = -40; InitAnimSpriteTranslationOverDuration(sprite); - sprite->callback = sub_80E0F84; + sprite->callback = AnimBonemerangProjectileStep; } -static void sub_80E0F84(struct Sprite *sprite) +static void AnimBonemerangProjectileStep(struct Sprite *sprite) { if (TranslateAnimSpriteLinearAndSine(sprite)) { @@ -175,17 +177,24 @@ static void sub_80E0F84(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3); sprite->data[5] = 40; InitAnimSpriteTranslationOverDuration(sprite); - sprite->callback = sub_80E0FE8; + sprite->callback = AnimBonemerangProjectileEnd; } } -static void sub_80E0FE8(struct Sprite *sprite) +static void AnimBonemerangProjectileEnd(struct Sprite *sprite) { if (TranslateAnimSpriteLinearAndSine(sprite)) DestroyAnimSprite(sprite); } -static void sub_80E1004(struct Sprite *sprite) +// Moves a bone projectile towards the target mon, starting right next to +// the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +static void AnimBoneHitProjectile(struct Sprite *sprite) { sub_8078764(sprite, 1); if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) @@ -198,7 +207,13 @@ static void sub_80E1004(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -static void sub_80E1078(struct Sprite *sprite) +// Moves a small dirt projectile towards the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +// arg 3: target x pixel offset +// arg 4: target y pixel offset +static void AnimDirtScatter(struct Sprite *sprite) { u8 targetXPos, targetYPos; s16 xOffset, yOffset; @@ -222,7 +237,12 @@ static void sub_80E1078(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, move_anim_8074EE0); } -static void sub_80E1108(struct Sprite *sprite) +// Moves a particle of dirt in the Mud Sport animation. +// The dirt can either be rising upward, or falling down. +// arg 0: 0 = dirt is rising into the air, 1 = dirt is falling down +// arg 1: initial x pixel offset +// arg 2: initial y pixel offset +static void AnimMudSportDirt(struct Sprite *sprite) { sprite->oam.tileNum++; if (gBattleAnimArgs[0] == 0) @@ -230,18 +250,18 @@ static void sub_80E1108(struct Sprite *sprite) sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1]; sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1; - sprite->callback = sub_80E1198; + sprite->callback = AnimMudSportDirtRising; } else { sprite->pos1.x = gBattleAnimArgs[1]; sprite->pos1.y = gBattleAnimArgs[2]; sprite->pos2.y = -gBattleAnimArgs[2]; - sprite->callback = sub_80E11D4; + sprite->callback = AnimMudSportDirtFalling; } } -static void sub_80E1198(struct Sprite *sprite) +static void AnimMudSportDirtRising(struct Sprite *sprite) { if (++sprite->data[1] > 1) { @@ -254,7 +274,7 @@ static void sub_80E1198(struct Sprite *sprite) DestroyAnimSprite(sprite); } -static void sub_80E11D4(struct Sprite *sprite) +static void AnimMudSportDirtFalling(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -487,7 +507,14 @@ static void sub_80E1668(u8 useBG1, s16 y, s16 endY) ScanlineEffect_SetParams(scanlineParams); } -static void sub_80E1728(struct Sprite *sprite) +// Moves a particle of dirt in a plume of dirt. Used in Fissure and Dig. +// arg 0: which mon (0 = attacker, 1 = target) +// arg 1: which side of mon (0 = left, 1 = right) +// arg 2: target x offset +// arg 3: target y offset +// arg 4: wave amplitude +// arg 5: duration +static void AnimFissureDirtPlumeParticle(struct Sprite *sprite) { s8 battler; s16 xOffset; @@ -511,16 +538,22 @@ static void sub_80E1728(struct Sprite *sprite) sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[4]; InitAnimSpriteTranslationOverDuration(sprite); - sprite->callback = sub_80E17B0; + sprite->callback = AnimFissureDirtPlumeParticleStep; } -static void sub_80E17B0(struct Sprite *sprite) +static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite) { if (TranslateAnimSpriteLinearAndSine(sprite)) DestroyAnimSprite(sprite); } -static void sub_80E17CC(struct Sprite *sprite) +// Displays the dirt mound seen in the move Dig for set duration. +// The dirt mound image is too large for a single sprite, so two +// sprites are lined up next to each other. +// arg 0: which mon (0 = attacker, 1 = target) +// arg 1: oam tile num (0 = left half of image, 1 = right half of image) +// arg 2: duration +static void AnimDigDirtMound(struct Sprite *sprite) { s8 battler; -- cgit v1.2.3