summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-07-23 14:07:10 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-07-24 05:52:16 +0800
commite150a620450a17bb2ab3905c04c33777dc6bf0cc (patch)
tree072352d576675b46ce0b0358dce03bea02872238
parenta674ba2749871cb1c26c4c17719cc784e329f815 (diff)
battle transition data decomp
-rw-r--r--data/data_83F5738.s123
-rw-r--r--data/field_map_obj.s8
-rw-r--r--graphics/battle_transitions/agatha_bg.pal19
-rw-r--r--graphics/battle_transitions/big_pokeball_tilemap.binbin0 -> 1200 bytes
-rw-r--r--graphics/battle_transitions/big_pokeball_tileset.pngbin0 -> 553 bytes
-rw-r--r--graphics/battle_transitions/blue_bg.pal19
-rw-r--r--graphics/battle_transitions/bruno_bg.pal19
-rw-r--r--graphics/battle_transitions/green_bg.pal19
-rw-r--r--graphics/battle_transitions/grid_square_tilemap.binbin0 -> 480 bytes
-rw-r--r--graphics/battle_transitions/lance_bg.pal19
-rw-r--r--graphics/battle_transitions/lorelei_bg.pal19
-rw-r--r--graphics/battle_transitions/red_bg.pal19
-rw-r--r--graphics/battle_transitions/sliding_pokeball.pal19
-rw-r--r--graphics/battle_transitions/sliding_pokeball.pngbin0 -> 309 bytes
-rw-r--r--graphics/battle_transitions/sliding_pokeball_tilemap.binbin0 -> 64 bytes
-rw-r--r--graphics/battle_transitions/unused_brendan.pngbin0 -> 475 bytes
-rw-r--r--graphics/battle_transitions/unused_lass.pngbin0 -> 412 bytes
-rw-r--r--graphics/battle_transitions/unused_trainer.pal19
-rw-r--r--graphics/battle_transitions/vsbar_tilemap.binbin0 -> 1280 bytes
-rw-r--r--graphics/battle_transitions/vsbar_tileset.pngbin0 -> 158 bytes
-rw-r--r--include/battle_transition.h10
-rw-r--r--ld_script.txt2
-rw-r--r--src/battle_transition.c577
-rw-r--r--sym_ewram.txt5
24 files changed, 765 insertions, 131 deletions
diff --git a/data/data_83F5738.s b/data/data_83F5738.s
index 12fa41711..dc09b0532 100644
--- a/data/data_83F5738.s
+++ b/data/data_83F5738.s
@@ -133,128 +133,7 @@ gUnknown_83F846D:: @ 83F846D
gUnknown_83F847D:: @ 83F847D
.incbin "baserom.gba", 0x3F847D, 0x323
-sBigPokeballTileset:: @ 83F87A0
- .incbin "baserom.gba", 0x3F87A0, 0x580
-
-sSlidingPokeballTilemap:: @ 83F8D20
- .incbin "baserom.gba", 0x3F8D20, 0x240
-
-sVsBarTileset:: @ 83F8F60
- .incbin "baserom.gba", 0x3F8F60, 0x11E0
-
-sGridSquareTilemap:: @ 83FA140
- .incbin "baserom.gba", 0x3FA140, 0x1E0
-
-sBT_Phase1Tasks:: @ 83FA320
- .incbin "baserom.gba", 0x3FA320, 0x48
-
-sBT_Phase2Tasks:: @ 83FA368
- .incbin "baserom.gba", 0x3FA368, 0x48
-
-sBT_MainPhases:: @ 83FA3B0
- .incbin "baserom.gba", 0x3FA3B0, 0x10
-
-sBT_Phase2BlurFuncs:: @ 83FA3C0
- .incbin "baserom.gba", 0x3FA3C0, 0xC
-
-sBT_Phase2DistortedWaveFuncs:: @ 83FA3CC
- .incbin "baserom.gba", 0x3FA3CC, 0x8
-
-sBT_Phase2HorizontalCorrugateFuncs:: @ 83FA3D4
- .incbin "baserom.gba", 0x3FA3D4, 0x8
-
-sBT_Phase2BigPokeballFuncs:: @ 83FA3DC
- .incbin "baserom.gba", 0x3FA3DC, 0x18
-
-sBT_Phase2SlidingPokeballsFuncs:: @ 83FA3F4
- .incbin "baserom.gba", 0x3FA3F4, 0xC
-
-gUnknown_83FA400:: @ 83FA400
- .incbin "baserom.gba", 0x3FA400, 0x4
-
-gUnknown_83FA404:: @ 83FA404
- .incbin "baserom.gba", 0x3FA404, 0xA
-
-gUnknown_83FA40E:: @ 83FA40E
- .incbin "baserom.gba", 0x3FA40E, 0x6
-
-sBT_Phase2ClockwiseBlackFadeFuncs:: @ 83FA414
- .incbin "baserom.gba", 0x3FA414, 0x1C
-
-sBT_Phase2FullScreenWaveFuncs:: @ 83FA430
- .incbin "baserom.gba", 0x3FA430, 0x8
-
-sBT_Phase2BlackWaveToRightFuncs:: @ 83FA438
- .incbin "baserom.gba", 0x3FA438, 0xC
-
-gUnknown_83FA444:: @ 83FA444
- .incbin "baserom.gba", 0x3FA444, 0x20
-
-sBT_Phase2AntiClockwiseSpiralFuncs:: @ 83FA464
- .incbin "baserom.gba", 0x3FA464, 0x8
-
-sBT_Phase2MugshotFuncs:: @ 83FA46C
- .incbin "baserom.gba", 0x3FA46C, 0x28
-
-sMugshotsTrainerPicIDsTable:: @ 83FA494
- .incbin "baserom.gba", 0x3FA494, 0x6
-
-sMugshotsOpponentRotationScales:: @ 83FA49A
- .incbin "baserom.gba", 0x3FA49A, 0x14
-
-sMugshotsOpponentCoords:: @ 83FA4AE
- .incbin "baserom.gba", 0x3FA4AE, 0x16
-
-sBT_Phase2MugshotSpriteFuncs:: @ 83FA4C4
- .incbin "baserom.gba", 0x3FA4C4, 0x1C
-
-sMugShotSlideVelocity:: @ 83FA4E0
- .incbin "baserom.gba", 0x3FA4E0, 0x4
-
-sMugShotSlideDeceleration:: @ 83FA4E4
- .incbin "baserom.gba", 0x3FA4E4, 0x4
-
-sBT_Phase2SlicedScreenFuncs:: @ 83FA4E8
- .incbin "baserom.gba", 0x3FA4E8, 0xC
-
-sBT_Phase2WhiteFadeInStripesFuncs:: @ 83FA4F4
- .incbin "baserom.gba", 0x3FA4F4, 0x14
-
-sWhiteStripeDelay:: @ 83FA508
- .incbin "baserom.gba", 0x3FA508, 0xC
-
-sBT_Phase2GridSquaresFuncs:: @ 83FA514
- .incbin "baserom.gba", 0x3FA514, 0xC
-
-sBT_Phase2BlackDoodlesFuncs:: @ 83FA520
- .incbin "baserom.gba", 0x3FA520, 0x14
-
-sBlackDoodlesSegments:: @ 83FA534
- .incbin "baserom.gba", 0x3FA534, 0x46
-
-sBlackDoodlesDelay:: @ 83FA57A
- .incbin "baserom.gba", 0x3FA57A, 0xE
-
-sBT_Phase1FadeFuncs:: @ 83FA588
- .incbin "baserom.gba", 0x3FA588, 0x44
-
-sSpriteTemplate_SlidingPokeball:: @ 83FA5CC
- .incbin "baserom.gba", 0x3FA5CC, 0x6C
-
-sSlidingPokeballBigPokeballPalette:: @ 83FA638
- .incbin "baserom.gba", 0x3FA638, 0x108
-
-sVsBarOpponentPalettes:: @ 83FA740
- .incbin "baserom.gba", 0x3FA740, 0x14
-
-sVsBarPlayerPalettes:: @ 83FA754
- .incbin "baserom.gba", 0x3FA754, 0x30
-
-sBigPokeballTilemap:: @ 83FA784
- .incbin "baserom.gba", 0x3FA784, 0x4B0
-
-sVsBarTilemap:: @ 83FAC34
- .incbin "baserom.gba", 0x3FAC34, 0x500
+ .section .rodata.83FB134
gUnknown_83FB134:: @ 83FB134
.incbin "baserom.gba", 0x3FB134, 0xA80
diff --git a/data/field_map_obj.s b/data/field_map_obj.s
index d12de7aa9..72d20cd4e 100644
--- a/data/field_map_obj.s
+++ b/data/field_map_obj.s
@@ -31,7 +31,13 @@ gUnknown_83A0010:: @ 83A0010
.incbin "baserom.gba", 0x3A0010, 0x3688
gUnknown_83A3698:: @ 83A3698
- .incbin "baserom.gba", 0x3A3698, 0x1AC0
+ .incbin "baserom.gba", 0x3A3698, 0x80
+
+gEventObjectBaseOam_32x32:: @ 83A3718
+ .incbin "baserom.gba", 0x3A3718, 0x8
+
+gUnknown_83A3720:: @ 83A3720
+ .incbin "baserom.gba", 0x3A3720, 0x1a38
gUnknown_83A5158:: @ 83A5158
.incbin "baserom.gba", 0x3A5158, 0xB0
diff --git a/graphics/battle_transitions/agatha_bg.pal b/graphics/battle_transitions/agatha_bg.pal
new file mode 100644
index 000000000..4aac79fec
--- /dev/null
+++ b/graphics/battle_transitions/agatha_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+172 49 49
+115 115 115
+148 148 148
+180 180 180
+213 213 213
+255 82 172
+255 98 189
+255 115 205
+255 131 222
+255 148 238
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_transitions/big_pokeball_tilemap.bin b/graphics/battle_transitions/big_pokeball_tilemap.bin
new file mode 100644
index 000000000..691e16ef7
--- /dev/null
+++ b/graphics/battle_transitions/big_pokeball_tilemap.bin
Binary files differ
diff --git a/graphics/battle_transitions/big_pokeball_tileset.png b/graphics/battle_transitions/big_pokeball_tileset.png
new file mode 100644
index 000000000..21b227441
--- /dev/null
+++ b/graphics/battle_transitions/big_pokeball_tileset.png
Binary files differ
diff --git a/graphics/battle_transitions/blue_bg.pal b/graphics/battle_transitions/blue_bg.pal
new file mode 100644
index 000000000..30da9c5f9
--- /dev/null
+++ b/graphics/battle_transitions/blue_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+172 49 49
+115 115 115
+148 148 148
+180 180 180
+213 213 213
+197 197 65
+213 213 82
+230 230 98
+246 246 115
+255 255 131
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_transitions/bruno_bg.pal b/graphics/battle_transitions/bruno_bg.pal
new file mode 100644
index 000000000..b55e6a6cd
--- /dev/null
+++ b/graphics/battle_transitions/bruno_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+172 49 49
+115 115 115
+148 148 148
+180 180 180
+213 213 213
+8 213 8
+32 238 32
+49 246 49
+74 255 74
+123 255 123
+230 123 139
+246 139 156
+255 156 172
+255 172 189
+255 189 205
+230 123 139
diff --git a/graphics/battle_transitions/green_bg.pal b/graphics/battle_transitions/green_bg.pal
new file mode 100644
index 000000000..8ebd38309
--- /dev/null
+++ b/graphics/battle_transitions/green_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+230 123 139
+246 139 156
+255 156 172
+255 172 189
+255 189 205
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_transitions/grid_square_tilemap.bin b/graphics/battle_transitions/grid_square_tilemap.bin
new file mode 100644
index 000000000..7f67463eb
--- /dev/null
+++ b/graphics/battle_transitions/grid_square_tilemap.bin
Binary files differ
diff --git a/graphics/battle_transitions/lance_bg.pal b/graphics/battle_transitions/lance_bg.pal
new file mode 100644
index 000000000..6717a90bd
--- /dev/null
+++ b/graphics/battle_transitions/lance_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+172 49 49
+115 115 115
+148 148 148
+180 180 180
+213 213 213
+0 0 131
+16 16 148
+32 32 164
+49 49 180
+65 65 197
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_transitions/lorelei_bg.pal b/graphics/battle_transitions/lorelei_bg.pal
new file mode 100644
index 000000000..1f30ed062
--- /dev/null
+++ b/graphics/battle_transitions/lorelei_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+172 49 49
+115 115 115
+148 148 148
+180 180 180
+213 213 213
+189 0 189
+205 16 205
+222 32 222
+238 49 238
+255 65 255
+106 180 213
+123 197 230
+139 213 246
+156 230 255
+172 246 255
+255 255 255
diff --git a/graphics/battle_transitions/red_bg.pal b/graphics/battle_transitions/red_bg.pal
new file mode 100644
index 000000000..e43b0f74c
--- /dev/null
+++ b/graphics/battle_transitions/red_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+106 180 213
+123 197 230
+139 213 246
+156 230 255
+172 246 255
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_transitions/sliding_pokeball.pal b/graphics/battle_transitions/sliding_pokeball.pal
new file mode 100644
index 000000000..6190709ed
--- /dev/null
+++ b/graphics/battle_transitions/sliding_pokeball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+98 172 238
+246 8 0
+238 213 180
+222 180 148
+255 255 255
+222 230 238
+189 205 230
+156 180 222
+98 156 180
+148 0 0
+197 197 197
+238 230 164
+222 205 131
+213 180 106
+205 156 82
+0 0 0
diff --git a/graphics/battle_transitions/sliding_pokeball.png b/graphics/battle_transitions/sliding_pokeball.png
new file mode 100644
index 000000000..3802a915b
--- /dev/null
+++ b/graphics/battle_transitions/sliding_pokeball.png
Binary files differ
diff --git a/graphics/battle_transitions/sliding_pokeball_tilemap.bin b/graphics/battle_transitions/sliding_pokeball_tilemap.bin
new file mode 100644
index 000000000..6cdeb0d17
--- /dev/null
+++ b/graphics/battle_transitions/sliding_pokeball_tilemap.bin
Binary files differ
diff --git a/graphics/battle_transitions/unused_brendan.png b/graphics/battle_transitions/unused_brendan.png
new file mode 100644
index 000000000..926ba0ff7
--- /dev/null
+++ b/graphics/battle_transitions/unused_brendan.png
Binary files differ
diff --git a/graphics/battle_transitions/unused_lass.png b/graphics/battle_transitions/unused_lass.png
new file mode 100644
index 000000000..378fa3c19
--- /dev/null
+++ b/graphics/battle_transitions/unused_lass.png
Binary files differ
diff --git a/graphics/battle_transitions/unused_trainer.pal b/graphics/battle_transitions/unused_trainer.pal
new file mode 100644
index 000000000..ad94d728a
--- /dev/null
+++ b/graphics/battle_transitions/unused_trainer.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+115 197 164
+255 222 205
+222 164 148
+205 131 115
+123 90 82
+57 74 123
+41 57 98
+24 41 82
+16 32 57
+222 230 238
+255 197 90
+189 156 90
+255 98 90
+197 65 65
+255 255 255
+0 0 0
diff --git a/graphics/battle_transitions/vsbar_tilemap.bin b/graphics/battle_transitions/vsbar_tilemap.bin
new file mode 100644
index 000000000..4f170b470
--- /dev/null
+++ b/graphics/battle_transitions/vsbar_tilemap.bin
Binary files differ
diff --git a/graphics/battle_transitions/vsbar_tileset.png b/graphics/battle_transitions/vsbar_tileset.png
new file mode 100644
index 000000000..1d327cdaf
--- /dev/null
+++ b/graphics/battle_transitions/vsbar_tileset.png
Binary files differ
diff --git a/include/battle_transition.h b/include/battle_transition.h
index 4e9d0029c..4ef5f19d9 100644
--- a/include/battle_transition.h
+++ b/include/battle_transition.h
@@ -3,10 +3,6 @@
#include "global.h"
-bool8 BT_IsDone(void);
-void BT_StartOnField(u8 transitionId);
-bool8 FldEff_Pokeball(void);
-
enum
{
MUGSHOT_LORELEI,
@@ -36,4 +32,10 @@ enum
#define B_TRANSITION_BLUE 16
#define B_TRANSITION_ANTI_CLOCKWISE_SPIRAL 17
+extern const struct SpritePalette sSpritePalette_SlidingPokeball;
+
+bool8 BT_IsDone(void);
+void BT_StartOnField(u8 transitionId);
+bool8 FldEff_Pokeball(void);
+
#endif // GUARD_BATTLE_TRANSITION_H
diff --git a/ld_script.txt b/ld_script.txt
index c6b35f651..1dc198e6f 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -418,6 +418,8 @@ SECTIONS {
data/data_83F5738.o(.rodata);
src/battle_records.o(.rodata);
data/data_83F5738.o(.rodata.83F6C90);
+ src/battle_transition.o(.rodata);
+ data/data_83F5738.o(.rodata.83FB134);
src/save.o(.rodata);
data/data_83FECCC.o(.rodata);
src/intro.o(.rodata);
diff --git a/src/battle_transition.c b/src/battle_transition.c
new file mode 100644
index 000000000..7894a5b73
--- /dev/null
+++ b/src/battle_transition.c
@@ -0,0 +1,577 @@
+#include "global.h"
+#include "sprite.h"
+#include "task.h"
+#include "battle_transition.h"
+
+typedef bool8 (*TransitionStateFunc)(struct Task *task);
+typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite);
+
+struct TransitionData
+{
+ vu8 vblankDma;
+ u16 winIn;
+ u16 winOut;
+ u16 win0H;
+ u16 win0V;
+ u16 unused_A;
+ u16 unused_C;
+ u16 bldCnt;
+ u16 bldAlpha;
+ u16 bldY;
+ s16 bg123HOfs;
+ s16 bg123VOfs;
+ s16 bg0HOfsOpponent;
+ s16 bg0HOfsPlayer;
+ s16 bg0VOfs;
+ s16 unused_1E;
+ s16 counter;
+ s16 unused_22;
+ s16 data[11]; // for multiple purposes
+};
+
+struct __attribute__((packed)) BlackDoodleSegment
+{
+ s16 startPtX;
+ s16 startPtY;
+ s16 endPtX;
+ s16 endPtY;
+ u16 whichSide;
+};
+
+EWRAM_DATA struct TransitionData *sTransitionStructPtr = NULL;
+
+// TODO: move this declaration to include/event_object_movement.h
+extern const struct OamData gEventObjectBaseOam_32x32;
+
+bool8 BT_Phase1_FadeOut(struct Task *task);
+bool8 BT_Phase1_FadeIn(struct Task *task);
+bool8 BT_Phase2BlackDoodles_Init(struct Task *task);
+bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task);
+bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task);
+bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task);
+bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task);
+bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task);
+bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task);
+bool8 BT_Phase2GridSquares_IsDone(struct Task *task);
+bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task);
+bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task);
+bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task);
+bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task);
+bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task);
+bool8 BT_Phase2SlicedScreen_Init(struct Task *task);
+bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task);
+bool8 BT_Phase2SlicedScreen_End(struct Task *task);
+bool8 BT_Phase2Mugshot_Init(struct Task *task);
+bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task);
+bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task);
+bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task);
+bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task);
+bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task);
+bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task);
+bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task);
+bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task);
+bool8 BT_Phase2Mugshot_End(struct Task *task);
+bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task);
+bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task);
+bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task);
+bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task);
+bool8 BT_Phase2BlackWaveToRight_End(struct Task *task);
+bool8 BT_Phase2FullScreenWave_Init(struct Task *task);
+bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task);
+bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task);
+bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task);
+bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task);
+bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task);
+bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task);
+bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task);
+bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task);
+bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task);
+bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task);
+bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task);
+bool8 BT_Phase2BigPokeball_Init(struct Task *task);
+bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task);
+bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task);
+bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task);
+bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task);
+bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task);
+bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task);
+bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task);
+bool8 BT_Phase2DistortedWave_InitWave(struct Task *task);
+bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task);
+bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task);
+bool8 BT_Phase2Blur_Anim(struct Task *task);
+bool8 BT_Phase2Blur_IsDone(struct Task *task);
+bool8 BT_Phase1Blink(struct Task *task);
+bool8 BT_WaitForPhase1(struct Task *task);
+bool8 BT_Phase2LaunchAnimTask(struct Task *task);
+bool8 BT_WaitForPhase2(struct Task *task);
+bool8 BT_Phase2Blur(struct Task *task);
+bool8 BT_Phase2DistortedWave(struct Task *task);
+bool8 BT_Phase2HorizontalCorrugate(struct Task *task);
+bool8 BT_Phase2BigPokeball(struct Task *task);
+bool8 BT_Phase2SlidingPokeballs(struct Task *task);
+bool8 BT_Phase2ClockwiseBlackFade(struct Task *task);
+bool8 BT_Phase2FullScreenWave(struct Task *task);
+bool8 BT_Phase2BlackWaveToRight(struct Task *task);
+bool8 BT_Phase2SlicedScreen(struct Task *task);
+bool8 BT_Phase2WhiteFadeInStripes(struct Task *task);
+bool8 BT_Phase2GridSquares(struct Task *task);
+bool8 BT_Phase2BlackDoodles(struct Task *task);
+bool8 BT_Phase2StartLoreleiMugshot(struct Task *task);
+bool8 BT_Phase2StartBrunoMugshot(struct Task *task);
+bool8 BT_Phase2StartAgathaMugshot(struct Task *task);
+bool8 BT_Phase2StartLanceMugshot(struct Task *task);
+bool8 BT_Phase2StartBlueMugshot(struct Task *task);
+bool8 BT_Phase2AntiClockwiseSpiral(struct Task *task);
+bool8 BT_Phase1Task(struct Task *task);
+
+bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite);
+bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite);
+bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite);
+bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite);
+bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite);
+
+void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite);
+void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite);
+
+const u32 sBigPokeballTileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp");
+const u32 sSlidingPokeballTilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin");
+const u8 sSpriteImage_SlidingPokeball[] = INCBIN_U8("graphics/battle_transitions/sliding_pokeball.4bpp");
+const u32 sVsBarTileset[] = INCBIN_U32("graphics/battle_transitions/vsbar_tileset.4bpp");
+const u8 sSpriteImage_UnusedBrendan[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp");
+const u8 sSpriteImage_UnusedLass[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp");
+const u32 sGridSquareTilemap[] = INCBIN_U32("graphics/battle_transitions/grid_square_tilemap.bin");
+
+const TransitionStateFunc sBT_Phase1Tasks[] =
+{
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+ BT_Phase1Task,
+};
+
+const TransitionStateFunc sBT_Phase2Tasks[] =
+{
+ BT_Phase2Blur,
+ BT_Phase2DistortedWave,
+ BT_Phase2HorizontalCorrugate,
+ BT_Phase2BigPokeball,
+ BT_Phase2SlidingPokeballs,
+ BT_Phase2ClockwiseBlackFade,
+ BT_Phase2FullScreenWave,
+ BT_Phase2BlackWaveToRight,
+ BT_Phase2SlicedScreen,
+ BT_Phase2WhiteFadeInStripes,
+ BT_Phase2GridSquares,
+ BT_Phase2BlackDoodles,
+ BT_Phase2StartLoreleiMugshot,
+ BT_Phase2StartBrunoMugshot,
+ BT_Phase2StartAgathaMugshot,
+ BT_Phase2StartLanceMugshot,
+ BT_Phase2StartBlueMugshot,
+ BT_Phase2AntiClockwiseSpiral,
+};
+
+const TransitionStateFunc sBT_MainPhases[] =
+{
+ BT_Phase1Blink,
+ BT_WaitForPhase1,
+ BT_Phase2LaunchAnimTask,
+ BT_WaitForPhase2,
+};
+
+const TransitionStateFunc sBT_Phase2BlurFuncs[] =
+{
+ BT_Phase2Blur_InitBgMosaic,
+ BT_Phase2Blur_Anim,
+ BT_Phase2Blur_IsDone,
+};
+
+const TransitionStateFunc sBT_Phase2DistortedWaveFuncs[] =
+{
+ BT_Phase2DistortedWave_InitWave,
+ BT_Phase2DistortedWave_UpdateWave,
+};
+
+const TransitionStateFunc sBT_Phase2HorizontalCorrugateFuncs[] =
+{
+ BT_Phase2HorizontalCorrugate_Init,
+ BT_Phase2HorizontalCorrugate_UpdateWave,
+};
+
+const TransitionStateFunc sBT_Phase2BigPokeballFuncs[] =
+{
+ BT_Phase2BigPokeball_Init,
+ BT_Phase2BigPokeball_LoadTilemapAndWave,
+ BT_Phase2BigPokeball_UpdateWave1IncEva,
+ BT_Phase2BigPokeball_UpdateWave2DecEvb,
+ BT_Phase2BigPokeball_UpdateWave3,
+ BT_Phase2BigPokeball_CircleEffect,
+};
+
+const TransitionStateFunc sBT_Phase2SlidingPokeballsFuncs[] =
+{
+ BT_Phase2SlidingPokeballs_LoadBgGfx,
+ BT_Phase2SlidingPokeballs_SetupFldeffArgs,
+ BT_Phase2SlidingPokeballs_IsDone,
+};
+
+const s16 gUnknown_83FA400[] = { -16, 256 };
+
+const s16 gUnknown_83FA404[] = { 0, 16, 32, 8, 24 };
+
+const s16 gUnknown_83FA40E[] = { 8, -8 };
+
+const TransitionStateFunc sBT_Phase2ClockwiseBlackFadeFuncs[] =
+{
+ BT_Phase2ClockwiseBlackFade_Init,
+ BT_Phase2ClockwiseBlackFade_Step1,
+ BT_Phase2ClockwiseBlackFade_Step2,
+ BT_Phase2ClockwiseBlackFade_Step3,
+ BT_Phase2ClockwiseBlackFade_Step4,
+ BT_Phase2ClockwiseBlackFade_Step5,
+ BT_Phase2ClockwiseBlackFade_End,
+};
+
+const TransitionStateFunc sBT_Phase2FullScreenWaveFuncs[] =
+{
+ BT_Phase2FullScreenWave_Init,
+ BT_Phase2FullScreenWave_UpdateWave,
+};
+
+const TransitionStateFunc sBT_Phase2BlackWaveToRightFuncs[] =
+{
+ BT_Phase2BlackWaveToRight_Init,
+ BT_Phase2BlackWaveToRight_UpdateWave,
+ BT_Phase2BlackWaveToRight_End,
+};
+const s16 gUnknown_83FA444[] =
+{
+ 0x0, 0x26E,
+ 0x100, 0x69,
+ 0x0, -0x69,
+ -0x100, -0x266E,
+ 0x0, 0x26E,
+ 0x100, 0x69,
+ 0x0, -0x69,
+ -0x100, -0x266E,
+};
+
+const TransitionStateFunc sBT_Phase2AntiClockwiseSpiralFuncs[] =
+{
+ BT_Phase2AntiClockwiseSpiral_Init,
+ BT_Phase2AntiClockwiseSpiral_Update,
+};
+
+const TransitionStateFunc sBT_Phase2MugshotFuncs[] =
+{
+ BT_Phase2Mugshot_Init,
+ BT_Phase2Mugshot_LoadGfx,
+ BT_Phase2Mugshot_VsBarsSlideIn,
+ BT_Phase2Mugshot_StartSpriteSlide,
+ BT_Phase2Mugshot_WaitForOpponentInPlace,
+ BT_Phase2Mugshot_WaitForPlayerInPlace,
+ BT_Phase2Mugshot_ExpandWhiteBand,
+ BT_Phase2Mugshot_StartBlackFade,
+ BT_Phase2Mugshot_WaitForBlackFade,
+ BT_Phase2Mugshot_End,
+};
+
+const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] =
+{
+ // TODO: document these with macro
+ 0x70, 0x71, 0x72, 0x73, 0x7D
+};
+
+const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] =
+{
+ {0x200, 0x200},
+ {0x200, 0x200},
+ {0x200, 0x200},
+ {0x200, 0x200},
+ {0x200, 0x200},
+};
+
+const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] =
+{
+ { -8, 0 },
+ { -10, 0 },
+ { 0, 0 },
+ { -32, 0 },
+ { 0, 0 },
+};
+
+const TransitionSpriteCallback sBT_Phase2MugshotSpriteFuncs[] =
+{
+ BT_Phase2MugshotsSpriteFuncs_Wait,
+ BT_Phase2MugshotsSpriteFuncs_InitParams,
+ BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn,
+ BT_Phase2MugshotsSpriteFuncs_DecelerateSprite,
+ BT_Phase2MugshotsSpriteFuncs_Wait,
+ BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2, // not used
+ BT_Phase2MugshotsSpriteFuncs_Wait,
+};
+
+const s16 sMugShotSlideVelocity[] = { 12, -12 };
+
+const s16 sMugShotSlideDeceleration[] = { -1, 1 };
+
+const TransitionStateFunc sBT_Phase2SlicedScreenFuncs[] =
+{
+ BT_Phase2SlicedScreen_Init,
+ BT_Phase2SlicedScreen_UpdateOffsets,
+ BT_Phase2SlicedScreen_End,
+};
+
+const TransitionStateFunc sBT_Phase2WhiteFadeInStripesFuncs[] =
+{
+ BT_Phase2WhiteFadeInStripes_Init,
+ BT_Phase2WhiteFadeInStripes_SetupSprites,
+ BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone,
+ BT_Phase2WhiteFadeInStripes_Stop,
+ BT_Phase2WhiteFadeInStripes_IsDone,
+};
+
+const u16 sWhiteStripeDelay[] = { 0, 9, 15, 6, 12, 3 };
+
+const TransitionStateFunc sBT_Phase2GridSquaresFuncs[] =
+{
+ BT_Phase2GridSquares_LoadGfx,
+ BT_Phase2GridSquares_UpdateTileset,
+ BT_Phase2GridSquares_IsDone,
+};
+
+const TransitionStateFunc sBT_Phase2BlackDoodlesFuncs[] =
+{
+ BT_Phase2BlackDoodles_Init,
+ BT_Phase2BlackDoodles_InitSingleBrush,
+ BT_Phase2BlackDoodles_DrawSingleBrush,
+ BT_Phase2BlackDoodles_IsDone,
+ BT_Phase2BlackDoodles_NextBrush,
+};
+
+const struct BlackDoodleSegment sBlackDoodlesSegments[] =
+{
+ {
+ .startPtX = 0x38,
+ .startPtY = 0x0,
+ .endPtX = 0x0,
+ .endPtY = 0xA0,
+ .whichSide = 0,
+ },
+ {
+ .startPtX = 0x68,
+ .startPtY = 0xA0,
+ .endPtX = 0xF0,
+ .endPtY = 0x58,
+ .whichSide = 1,
+ },
+ {
+ .startPtX = 0xF0,
+ .startPtY = 0x48,
+ .endPtX = 0x38,
+ .endPtY = 0x0,
+ .whichSide = 1,
+ },
+ {
+ .startPtX = 0x0,
+ .startPtY = 0x20,
+ .endPtX = 0x90,
+ .endPtY = 0xA0,
+ .whichSide = 0,
+ },
+ {
+ .startPtX = 0x90,
+ .startPtY = 0xA0,
+ .endPtX = 0xB8,
+ .endPtY = 0x0,
+ .whichSide = 1,
+ },
+ {
+ .startPtX = 0x38,
+ .startPtY = 0x0,
+ .endPtX = 0xA8,
+ .endPtY = 0xA0,
+ .whichSide = 0,
+ },
+ {
+ .startPtX = 0xA8,
+ .startPtY = 0xA0,
+ .endPtX = 0x30,
+ .endPtY = 0x0,
+ .whichSide = 1,
+ },
+};
+
+const s16 sBlackDoodlesDelay[] = { 1, 1, 1, 1, 1, 1, 0 };
+
+const TransitionStateFunc sBT_Phase1FadeFuncs[] =
+{
+ BT_Phase1_FadeOut,
+ BT_Phase1_FadeIn,
+};
+
+const struct SpriteFrameImage sSpriteImageTable_SlidingPokeball[] =
+{
+ {
+ .data = sSpriteImage_SlidingPokeball,
+ .size = 0x200,
+ },
+};
+
+const union AnimCmd sSpriteAnim_SlidingPokeball[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const sSpriteAnimTable_SlidingPokeball[] = { sSpriteAnim_SlidingPokeball };
+
+const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball1[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -4, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball2[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 4, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const sSpriteAffineAnimTable_SlidingPokeball[] =
+{
+ sSpriteAffineAnim_SlidingPokeball1,
+ sSpriteAffineAnim_SlidingPokeball2,
+};
+
+const struct SpriteTemplate sSpriteTemplate_SlidingPokeball =
+{
+ .tileTag = SPRITE_INVALID_TAG,
+ .paletteTag = 0x1009,
+ .oam = &gEventObjectBaseOam_32x32,
+ .anims = sSpriteAnimTable_SlidingPokeball,
+ .images = sSpriteImageTable_SlidingPokeball,
+ .affineAnims = sSpriteAffineAnimTable_SlidingPokeball,
+ .callback = SpriteCB_BT_Phase2SlidingPokeballs,
+};
+
+const struct OamData sOamData_Unused =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const struct SpriteFrameImage sSpriteImageTable_UnusedBrendan[] =
+{
+ {
+ .data = sSpriteImage_UnusedBrendan,
+ .size = 0x800,
+ },
+};
+
+const struct SpriteFrameImage sSpriteImageTable_UnusedLass[] =
+{
+ {
+ .data = sSpriteImage_UnusedLass,
+ .size = 0x800,
+ },
+};
+
+const union AnimCmd sSpriteAnim_Unused[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const sSpriteAnimTable_Unused[] = { sSpriteAnim_Unused };
+
+const struct SpriteTemplate sSpriteTemplateTable_Unused[] =
+{
+ {
+ .tileTag = SPRITE_INVALID_TAG,
+ .paletteTag = 0x100A,
+ .oam = &sOamData_Unused,
+ .anims = sSpriteAnimTable_Unused,
+ .images = sSpriteImageTable_UnusedBrendan,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_BT_Phase2Mugshots,
+ },
+ {
+ .tileTag = SPRITE_INVALID_TAG,
+ .paletteTag = 0x100A,
+ .oam = &sOamData_Unused,
+ .anims = sSpriteAnimTable_Unused,
+ .images = sSpriteImageTable_UnusedLass,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_BT_Phase2Mugshots,
+ },
+};
+
+// this palette is shared by big pokeball and sliding pokeball
+const u16 sSlidingPokeballBigPokeballPalette[] = INCBIN_U16("graphics/battle_transitions/sliding_pokeball.gbapal");
+
+const struct SpritePalette sSpritePalette_SlidingPokeball =
+{
+ .data = sSlidingPokeballBigPokeballPalette,
+ .tag = 0x1009,
+};
+
+const u16 sVsBarLoreleiPalette[] = INCBIN_U16("graphics/battle_transitions/lorelei_bg.gbapal");
+const u16 sVsBarBrunoPalette[] = INCBIN_U16("graphics/battle_transitions/bruno_bg.gbapal");
+const u16 sVsBarAgathaPalette[] = INCBIN_U16("graphics/battle_transitions/agatha_bg.gbapal");
+const u16 sVsBarLancePalette[] = INCBIN_U16("graphics/battle_transitions/lance_bg.gbapal");
+const u16 sVsBarBluePalette[] = INCBIN_U16("graphics/battle_transitions/blue_bg.gbapal");
+const u16 sVsBarMalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/red_bg.gbapal");
+const u16 sVsBarFemalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/green_bg.gbapal");
+
+const u16 *const sVsBarOpponentPalettes[MUGSHOTS_COUNT] =
+{
+ sVsBarLoreleiPalette,
+ sVsBarBrunoPalette,
+ sVsBarAgathaPalette,
+ sVsBarLancePalette,
+ sVsBarBluePalette,
+};
+
+const u16 *const sVsBarPlayerPalettes[] =
+{
+ sVsBarMalePlayerPalette,
+ sVsBarFemalePlayerPalette,
+};
+
+const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal");
+
+const struct SpritePalette sSpritePalette_UnusedTrainer =
+{
+ .data = sUnusedTrainerPalette,
+ .tag = 0x100A,
+};
+
+const u16 sBigPokeballTilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_tilemap.bin");
+const u16 sVsBarTilemap[] = INCBIN_U16("graphics/battle_transitions/vsbar_tilemap.bin");
diff --git a/sym_ewram.txt b/sym_ewram.txt
index e97441132..3797720d5 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1055,10 +1055,7 @@ gUnknown_2039A24: @ 2039A24
.space 0x4
.include "src/coins.o"
-
- .align 2
-sTransitionStructPtr: @ 2039A2C
- .space 0x4
+ .include "src/battle_transition.o"
gUnknown_2039A30: @ 2039A30
.space 0x4