summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/intro.s479
-rw-r--r--src/intro.c180
-rw-r--r--sym_ewram.txt9
3 files changed, 179 insertions, 489 deletions
diff --git a/asm/intro.s b/asm/intro.s
index ba8795a42..8e908cebe 100644
--- a/asm/intro.s
+++ b/asm/intro.s
@@ -5,485 +5,6 @@
.text
- thumb_func_start sub_80ED4C0
-sub_80ED4C0: @ 80ED4C0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldrb r4, [r5, 0x4]
- cmp r4, 0x1
- beq _080ED59C
- cmp r4, 0x1
- bgt _080ED4D6
- cmp r4, 0
- beq _080ED4E4
- b _080ED68A
-_080ED4D6:
- cmp r4, 0x2
- bne _080ED4DC
- b _080ED5FC
-_080ED4DC:
- cmp r4, 0x3
- bne _080ED4E2
- b _080ED658
-_080ED4E2:
- b _080ED68A
-_080ED4E4:
- ldr r0, _080ED584 @ =gUnknown_8407430
- movs r1, 0x10
- movs r2, 0x40
- bl LoadPalette
- ldr r0, _080ED588 @ =gUnknown_8405DA4
- movs r1, 0x50
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0x2
- negs r0, r0
- ldr r2, _080ED58C @ =0x00007fff
- movs r1, 0x10
- bl BlendPalettes
- ldr r1, _080ED590 @ =gUnknown_840BBA0
- movs r0, 0
- movs r2, 0x2
- bl InitBgsFromTemplates
- ldr r1, _080ED594 @ =gUnknown_8407470
- str r4, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _080ED598 @ =gUnknown_8407A50
- movs r0, 0x1
- str r0, [sp]
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- movs r0, 0x1
- bl ShowBg
- movs r0, 0
- bl HideBg
- movs r0, 0x2
- bl HideBg
- movs r0, 0x3
- bl HideBg
- bl ResetBgPositions
- ldrb r0, [r5, 0x4]
- adds r0, 0x1
- strb r0, [r5, 0x4]
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- bl SetGpuRegBits
- movs r0, 0x48
- movs r1, 0x12
- bl SetGpuRegBits
- movs r0, 0x48
- movs r1, 0x1
- bl ClearGpuRegBits
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuRegBits
- movs r1, 0x82
- lsls r1, 6
- movs r0, 0x44
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0x78
- bl SetGpuReg
- b _080ED68A
- .align 2, 0
-_080ED584: .4byte gUnknown_8407430
-_080ED588: .4byte gUnknown_8405DA4
-_080ED58C: .4byte 0x00007fff
-_080ED590: .4byte gUnknown_840BBA0
-_080ED594: .4byte gUnknown_8407470
-_080ED598: .4byte gUnknown_8407A50
-_080ED59C:
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080ED68A
- ldr r1, _080ED5EC @ =gUnknown_8407B9C
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _080ED5F0 @ =gUnknown_8408D98
- str r4, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _080ED5F4 @ =gUnknown_203AB00
- movs r0, 0x4
- strh r0, [r1]
- ldr r1, _080ED5F8 @ =gUnknown_203AB02
- movs r0, 0x34
- strh r0, [r1]
- movs r1, 0xC0
- lsls r1, 5
- movs r0, 0
- movs r2, 0
- bl ChangeBgX
- movs r1, 0xF8
- lsls r1, 9
- movs r0, 0
- movs r2, 0
- bl ChangeBgY
- b _080ED642
- .align 2, 0
-_080ED5EC: .4byte gUnknown_8407B9C
-_080ED5F0: .4byte gUnknown_8408D98
-_080ED5F4: .4byte gUnknown_203AB00
-_080ED5F8: .4byte gUnknown_203AB02
-_080ED5FC:
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080ED68A
- movs r0, 0x2
- negs r0, r0
- ldr r2, _080ED64C @ =0x00007fff
- movs r1, 0
- bl BlendPalettes
- movs r0, 0
- bl ShowBg
- ldr r0, _080ED650 @ =sub_80ED714
- movs r1, 0
- bl CreateTask
- adds r0, r5, 0
- bl sub_80EE4F8
- ldr r0, [r5, 0x18]
- movs r1, 0
- movs r2, 0xB4
- movs r3, 0x34
- bl sub_80EE528
- ldr r0, _080ED654 @ =sub_80EE200
- movs r1, 0
- bl CreateTask
- bl sub_80ED6D8
- strh r4, [r5, 0x12]
-_080ED642:
- ldrb r0, [r5, 0x4]
- adds r0, 0x1
- strb r0, [r5, 0x4]
- b _080ED68A
- .align 2, 0
-_080ED64C: .4byte 0x00007fff
-_080ED650: .4byte sub_80ED714
-_080ED654: .4byte sub_80EE200
-_080ED658:
- ldrh r0, [r5, 0x12]
- adds r0, 0x1
- strh r0, [r5, 0x12]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x10
- bne _080ED66C
- adds r0, r5, 0
- bl sub_80ED7D4
-_080ED66C:
- adds r0, r5, 0
- bl sub_80EE5C8
- cmp r0, 0
- bne _080ED68A
- ldr r0, _080ED694 @ =sub_80EE200
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080ED68A
- ldr r1, _080ED698 @ =sub_80ED898
- adds r0, r5, 0
- bl sub_80ECAA8
-_080ED68A:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080ED694: .4byte sub_80EE200
-_080ED698: .4byte sub_80ED898
- thumb_func_end sub_80ED4C0
-
- thumb_func_start sub_80ED69C
-sub_80ED69C: @ 80ED69C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080ED6C4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080ED6C8
- movs r1, 0x80
- lsls r1, 3
- movs r0, 0x1
- movs r2, 0x2
- bl ChangeBgX
- b _080ED6D2
- .align 2, 0
-_080ED6C4: .4byte gTasks
-_080ED6C8:
- movs r0, 0x1
- movs r1, 0x20
- movs r2, 0x2
- bl ChangeBgX
-_080ED6D2:
- pop {r0}
- bx r0
- thumb_func_end sub_80ED69C
-
- thumb_func_start sub_80ED6D8
-sub_80ED6D8: @ 80ED6D8
- push {lr}
- ldr r0, _080ED6E8 @ =sub_80ED69C
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080ED6E8: .4byte sub_80ED69C
- thumb_func_end sub_80ED6D8
-
- thumb_func_start sub_80ED6EC
-sub_80ED6EC: @ 80ED6EC
- push {lr}
- ldr r0, _080ED70C @ =sub_80ED69C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080ED710 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x1
- strh r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_080ED70C: .4byte sub_80ED69C
-_080ED710: .4byte gTasks
- thumb_func_end sub_80ED6EC
-
- thumb_func_start sub_80ED714
-sub_80ED714: @ 80ED714
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080ED75C @ =gTasks+0x8
- adds r2, r1, r0
- movs r0, 0
- ldrsh r1, [r2, r0]
- cmp r1, 0
- bne _080ED758
- ldrh r0, [r2, 0x2]
- adds r0, 0x1
- strh r0, [r2, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1D
- ble _080ED758
- strh r1, [r2, 0x2]
- ldrh r0, [r2, 0x4]
- movs r1, 0x1
- eors r0, r1
- strh r0, [r2, 0x4]
- movs r0, 0x4
- ldrsh r1, [r2, r0]
- lsls r1, 15
- movs r0, 0xF8
- lsls r0, 9
- adds r1, r0
- movs r0, 0
- movs r2, 0
- bl ChangeBgY
-_080ED758:
- pop {r0}
- bx r0
- .align 2, 0
-_080ED75C: .4byte gTasks+0x8
- thumb_func_end sub_80ED714
-
- thumb_func_start sub_80ED760
-sub_80ED760: @ 80ED760
- push {lr}
- ldr r0, _080ED780 @ =sub_80ED714
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080ED784 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x1
- strh r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_080ED780: .4byte sub_80ED714
-_080ED784: .4byte gTasks
- thumb_func_end sub_80ED760
-
- thumb_func_start sub_80ED788
-sub_80ED788: @ 80ED788
- push {lr}
- ldr r0, _080ED7A8 @ =sub_80ED714
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080ED7AC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_080ED7A8: .4byte sub_80ED714
-_080ED7AC: .4byte gTasks
- thumb_func_end sub_80ED788
-
- thumb_func_start sub_80ED7B0
-sub_80ED7B0: @ 80ED7B0
- push {lr}
- ldr r0, _080ED7CC @ =sub_80ED714
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080ED7D0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrb r0, [r1, 0xC]
- pop {r1}
- bx r1
- .align 2, 0
-_080ED7CC: .4byte sub_80ED714
-_080ED7D0: .4byte gTasks
- thumb_func_end sub_80ED7B0
-
- thumb_func_start sub_80ED7D4
-sub_80ED7D4: @ 80ED7D4
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080ED800 @ =gUnknown_840BDFC
- movs r1, 0x94
- lsls r1, 1
- movs r2, 0x70
- movs r3, 0x7
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _080ED80C
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080ED804 @ =gSprites
- adds r0, r1
- str r0, [r4, 0x24]
- ldr r1, _080ED808 @ =sub_80ED818
- str r1, [r0, 0x1C]
- b _080ED810
- .align 2, 0
-_080ED800: .4byte gUnknown_840BDFC
-_080ED804: .4byte gSprites
-_080ED808: .4byte sub_80ED818
-_080ED80C:
- movs r0, 0
- str r0, [r4, 0x24]
-_080ED810:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80ED7D4
-
- thumb_func_start sub_80ED818
-sub_80ED818: @ 80ED818
- push {r4,lr}
- adds r2, r0, 0
- adds r4, r2, 0
- adds r4, 0x2E
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0x1
- beq _080ED848
- cmp r0, 0x1
- bgt _080ED832
- cmp r0, 0
- beq _080ED838
- b _080ED892
-_080ED832:
- cmp r0, 0x2
- beq _080ED866
- b _080ED892
-_080ED838:
- ldrh r0, [r2, 0x20]
- lsls r0, 5
- strh r0, [r4, 0x2]
- movs r0, 0xA0
- strh r0, [r4, 0x4]
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
-_080ED848:
- ldrh r0, [r4, 0x2]
- ldrh r1, [r4, 0x4]
- subs r0, r1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 21
- strh r0, [r2, 0x20]
- cmp r0, 0x34
- bgt _080ED892
- bl sub_80ED6EC
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _080ED892
-_080ED866:
- ldrh r0, [r4, 0x2]
- subs r0, 0x20
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 21
- strh r0, [r2, 0x20]
- movs r1, 0x20
- negs r1, r1
- cmp r0, r1
- bgt _080ED892
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- adds r0, r2, 0
- bl DestroySprite
-_080ED892:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80ED818
-
thumb_func_start sub_80ED898
sub_80ED898: @ 80ED898
push {r4,r5,lr}
diff --git a/src/intro.c b/src/intro.c
index 25c2f59eb..b57b538f0 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -27,16 +27,19 @@ struct IntroSequenceData
u8 field_000C[6];
u16 field_0012;
struct Sprite * field_0014;
- u8 filler_0018[4];
+ struct Sprite * field_0018;
struct Sprite * field_001C;
struct Sprite * field_0020;
- u8 filler_0024[0x18];
+ struct Sprite * field_0024;
+ u8 filler_0028[0x14];
u8 field_003C[0x400];
u8 field_043C[0x400];
u8 filler_083C[0x2080];
}; // size: 0x28BC
EWRAM_DATA struct GcmbStruct gUnknown_203AAD4 = {0};
+EWRAM_DATA u16 gUnknown_203AB00 = 0;
+EWRAM_DATA u16 gUnknown_203AB02 = 0;
void sub_80EC870(void);
void sub_80EC9D4(void);
@@ -60,12 +63,21 @@ void sub_80ED428(u8 taskId);
void sub_80ED444(struct IntroSequenceData * ptr);
void sub_80ED4A0(struct IntroSequenceData * ptr);
void sub_80ED4C0(struct IntroSequenceData * ptr);
+void sub_80ED6D8(void);
+void sub_80ED714(u8 taskId);
+void sub_80ED7D4(struct IntroSequenceData * ptr);
+void sub_80ED818(struct Sprite * sprite);
+void sub_80ED898(struct IntroSequenceData * ptr);
void sub_80EDBE8(struct IntroSequenceData * ptr);
void sub_80ED40C(u8 taskId);
void sub_80EDC40(void);
void sub_80EDDF0(void);
void sub_80EDED8(void);
struct Sprite * sub_80EDF68(void);
+void sub_80EE200(u8 taskId);
+void sub_80EE4F8(struct IntroSequenceData * ptr);
+void sub_80EE528(struct Sprite * sprite, u16 a1, u16 a2, u16 a3);
+bool32 sub_80EE5C8(struct IntroSequenceData * ptr);
void sub_80EEBE4(void);
extern const u32 gMultiBootProgram_PokemonColosseum_Start[];
@@ -96,14 +108,21 @@ extern const u8 gUnknown_840644C[];
extern const u16 gUnknown_8406634[];
extern const u8 gUnknown_8406654[];
extern const u8 gUnknown_84071D0[];
+extern const u16 gUnknown_8407430[];
+extern const u8 gUnknown_8407470[];
+extern const u8 gUnknown_8407A50[];
+extern const u8 gUnknown_8407B9C[];
+extern const u8 gUnknown_8408D98[];
extern const struct BgTemplate gUnknown_840BB80[2];
extern const struct BgTemplate gUnknown_840BB88[2];
extern const struct BgTemplate gUnknown_840BB90[4];
+extern const struct BgTemplate gUnknown_840BBA0[2];
extern const struct WindowTemplate gUnknown_840BBA8[];
extern const struct SpriteTemplate gUnknown_840BDA8;
extern const struct SpriteTemplate gUnknown_840BDC0;
+extern const struct SpriteTemplate gUnknown_840BDFC;
void sub_80EC5A4(void)
{
@@ -736,3 +755,160 @@ void sub_80ED4A0(struct IntroSequenceData * this)
if (this->field_0020 != NULL)
DestroySprite(this->field_0020);
}
+
+void sub_80ED4C0(struct IntroSequenceData * this)
+{
+ switch (this->field_0004)
+ {
+ case 0:
+ LoadPalette(gUnknown_8407430, 0x10, 0x40);
+ LoadPalette(gUnknown_8405DA4, 0x50, 0x20);
+ BlendPalettes(0xFFFFFFFE, 16, RGB_WHITE);
+ InitBgsFromTemplates(0, gUnknown_840BBA0, NELEMS(gUnknown_840BBA0));
+ DecompressAndCopyTileDataToVram(1, gUnknown_8407470, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gUnknown_8407A50, 0, 0, 1);
+ ShowBg(1);
+ HideBg(0);
+ HideBg(2);
+ HideBg(3);
+ ResetBgPositions();
+ this->field_0004++;
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ SetGpuRegBits(REG_OFFSET_WININ, 0x12);
+ ClearGpuRegBits(REG_OFFSET_WININ, 0x01);
+ SetGpuRegBits(REG_OFFSET_WINOUT, 0x00);
+ SetGpuReg(REG_OFFSET_WIN0V, 0x2080);
+ SetGpuReg(REG_OFFSET_WIN0H, 0x0078);
+ break;
+ case 1:
+ if (!FreeTempTileDataBuffersIfPossible())
+ {
+ DecompressAndCopyTileDataToVram(0, gUnknown_8407B9C, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(0, gUnknown_8408D98, 0, 0, 1);
+ gUnknown_203AB00 = 4;
+ gUnknown_203AB02 = 52;
+ ChangeBgX(0, 0x00001800, 0);
+ ChangeBgY(0, 0x0001F000, 0);
+ this->field_0004++;
+ }
+ break;
+ case 2:
+ if (!FreeTempTileDataBuffersIfPossible())
+ {
+ BlendPalettes(0xFFFFFFFE, 0, RGB_WHITE);
+ ShowBg(0);
+ CreateTask(sub_80ED714, 0);
+ sub_80EE4F8(this);
+ sub_80EE528(this->field_0018, 0, 0xB4, 0x34);
+ CreateTask(sub_80EE200, 0);
+ sub_80ED6D8();
+ this->field_0012 = 0;
+ this->field_0004++;
+ }
+ break;
+ case 3:
+ this->field_0012++;
+ if (this->field_0012 == 16)
+ sub_80ED7D4(this);
+ if (!sub_80EE5C8(this) && !FuncIsActiveTask(sub_80EE200))
+ sub_80ECAA8(this, sub_80ED898);
+ break;
+ }
+}
+
+void sub_80ED69C(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ ChangeBgX(1, 0x400, 2);
+ else
+ ChangeBgX(1, 0x020, 2);
+}
+
+void sub_80ED6D8(void)
+{
+ CreateTask(sub_80ED69C, 0);
+}
+
+void sub_80ED6EC(void)
+{
+ u8 taskId = FindTaskIdByFunc(sub_80ED69C);
+ gTasks[taskId].data[0] = 1;
+}
+
+void sub_80ED714(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ if (data[0] == 0)
+ {
+ data[1]++;
+ if (data[1] >= 30)
+ {
+ data[1] = 0;
+ data[2] ^= 1;
+ ChangeBgY(0, (data[2] << 15) + 0x1F000, 0);
+ }
+ }
+}
+
+void sub_80ED760(void)
+{
+ u8 taskId = FindTaskIdByFunc(sub_80ED714);
+ gTasks[taskId].data[0] = 1;
+}
+
+void sub_80ED788(void)
+{
+ u8 taskId = FindTaskIdByFunc(sub_80ED714);
+ gTasks[taskId].data[0] = 0;
+}
+
+u8 sub_80ED7B0(void)
+{
+ u8 taskId = FindTaskIdByFunc(sub_80ED714);
+ return gTasks[taskId].data[2];
+}
+
+void sub_80ED7D4(struct IntroSequenceData * this)
+{
+ u8 spriteId = CreateSprite(&gUnknown_840BDFC, 296, 112, 7);
+ if (spriteId != MAX_SPRITES)
+ {
+ this->field_0024 = &gSprites[spriteId];
+ this->field_0024->callback = sub_80ED818;
+ }
+ else
+ this->field_0024 = NULL;
+}
+
+void sub_80ED818(struct Sprite * sprite)
+{
+ s16 * data = sprite->data;
+
+ switch (data[0])
+ {
+ case 0:
+ data[1] = sprite->pos1.x << 5;
+ data[2] = 160;
+ data[0]++;
+ // fallthrough
+ case 1:
+ data[1] -= data[2];
+ sprite->pos1.x = data[1] >> 5;
+ if (sprite->pos1.x <= 52)
+ {
+ sub_80ED6EC();
+ data[0]++;
+ }
+ break;
+ case 2:
+ data[1] -= 32;
+ sprite->pos1.x = data[1] >> 5;
+ if (sprite->pos1.x <= -32)
+ {
+ sprite->invisible = TRUE;
+ sprite->data[0]++;
+ DestroySprite(sprite);
+ }
+ break;
+ }
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 2c791be78..ec2d2149d 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1112,14 +1112,7 @@ gUnknown_203AAC4: @ 203AAC4
gUnknown_203AAC6: @ 203AAC6
.space 0xE
-gUnknown_203AAD4: @ 203AAD4
- .space 0x2C
-
-gUnknown_203AB00: @ 203AB00
- .space 0x2
-
-gUnknown_203AB02: @ 203AB02
- .space 0x2
+ .include "src/intro.o"
gUnknown_203AB04: @ 203AB04
.space 0x2