summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-07-02 15:30:30 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-07-02 15:30:30 -0400
commit4f63b54a6b4e697402e2243e02998b8f2521a717 (patch)
treecb3e4b25e0a287df77ffb0b27f1b6c2257ff8b90
parent2c953c5baf05d12a829cb73664c9a95f660f1548 (diff)
intro: through sub_80ECC3C
-rw-r--r--asm/intro.s143
-rw-r--r--src/intro.c66
2 files changed, 65 insertions, 144 deletions
diff --git a/asm/intro.s b/asm/intro.s
index 99a67a6a5..024f65e73 100644
--- a/asm/intro.s
+++ b/asm/intro.s
@@ -5,149 +5,6 @@
.text
- thumb_func_start sub_80ECB98
-sub_80ECB98: @ 80ECB98
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrb r5, [r4, 0x4]
- cmp r5, 0x1
- beq _080ECBE2
- cmp r5, 0x1
- bgt _080ECBAC
- cmp r5, 0
- beq _080ECBB2
- b _080ECC32
-_080ECBAC:
- cmp r5, 0x2
- beq _080ECBFC
- b _080ECC32
-_080ECBB2:
- movs r1, 0x80
- lsls r1, 7
- movs r0, 0
- bl SetGpuRegBits
- movs r1, 0xFC
- lsls r1, 6
- movs r0, 0x48
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x42
- movs r1, 0xF0
- bl SetGpuReg
- movs r0, 0x46
- movs r1, 0
- bl SetGpuReg
- strh r5, [r4, 0x12]
- b _080ECBF4
-_080ECBE2:
- movs r0, 0x3
- bl ShowBg
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- movs r2, 0
- bl BlendPalettes
-_080ECBF4:
- ldrb r0, [r4, 0x4]
- adds r0, 0x1
- strb r0, [r4, 0x4]
- b _080ECC32
-_080ECBFC:
- ldrh r0, [r4, 0x12]
- adds r0, 0x8
- strh r0, [r4, 0x12]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2F
- bls _080ECC0E
- movs r0, 0x30
- strh r0, [r4, 0x12]
-_080ECC0E:
- ldrh r0, [r4, 0x12]
- movs r1, 0x50
- subs r1, r0
- lsls r1, 8
- adds r0, 0x50
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x46
- bl SetGpuReg
- ldrh r0, [r4, 0x12]
- cmp r0, 0x30
- bne _080ECC32
- ldr r1, _080ECC38 @ =sub_80ECC3C
- adds r0, r4, 0
- bl sub_80ECAA8
-_080ECC32:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080ECC38: .4byte sub_80ECC3C
- thumb_func_end sub_80ECB98
-
- thumb_func_start sub_80ECC3C
-sub_80ECC3C: @ 80ECC3C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrb r5, [r4, 0x4]
- cmp r5, 0x1
- beq _080ECC68
- cmp r5, 0x1
- bgt _080ECC50
- cmp r5, 0
- beq _080ECC56
- b _080ECC9C
-_080ECC50:
- cmp r5, 0x2
- beq _080ECC86
- b _080ECC9C
-_080ECC56:
- ldr r0, _080ECC64 @ =0x00000141
- bl PlaySE
- bl sub_80EDC40
- strh r5, [r4, 0x12]
- b _080ECC7E
- .align 2, 0
-_080ECC64: .4byte 0x00000141
-_080ECC68:
- ldrh r0, [r4, 0x12]
- adds r0, 0x1
- strh r0, [r4, 0x12]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1E
- bne _080ECC9C
- bl sub_80EDDF0
- movs r0, 0
- strh r0, [r4, 0x12]
-_080ECC7E:
- ldrb r0, [r4, 0x4]
- adds r0, 0x1
- strb r0, [r4, 0x4]
- b _080ECC9C
-_080ECC86:
- ldrh r0, [r4, 0x12]
- adds r0, 0x1
- strh r0, [r4, 0x12]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x5A
- bne _080ECC9C
- ldr r1, _080ECCA4 @ =sub_80ECCA8
- adds r0, r4, 0
- bl sub_80ECAA8
-_080ECC9C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080ECCA4: .4byte sub_80ECCA8
- thumb_func_end sub_80ECC3C
-
thumb_func_start sub_80ECCA8
sub_80ECCA8: @ 80ECCA8
push {r4,r5,lr}
diff --git a/src/intro.c b/src/intro.c
index 42d2af471..216605be7 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -12,14 +12,18 @@
#include "link.h"
#include "menu.h"
#include "save.h"
+#include "sound.h"
#include "new_game.h"
+#include "constants/songs.h"
struct IntroSequenceData
{
void (*field_0000)(struct IntroSequenceData *);
u8 field_0004;
u8 field_0005;
- u8 filler_0006[0x36];
+ u8 filler_0006[0xC];
+ u16 field_0012;
+ u8 filler_0014[0x28];
u8 field_003C[0x400];
u8 field_043C[0x400];
u8 filler_083C[0x2080];
@@ -36,7 +40,11 @@ void sub_80ECAB0(u8 taskId);
void sub_80ECAA8(struct IntroSequenceData * ptr, void (*cb)(struct IntroSequenceData *));
void sub_80ECAF0(struct IntroSequenceData * ptr);
void sub_80ECB98(struct IntroSequenceData * ptr);
+void sub_80ECC3C(struct IntroSequenceData * ptr);
+void sub_80ECCA8(struct IntroSequenceData * ptr);
void sub_80EDBE8(struct IntroSequenceData * ptr);
+void sub_80EDC40(void);
+void sub_80EDDF0(void);
extern const u32 gMultiBootProgram_PokemonColosseum_Start[];
@@ -287,3 +295,59 @@ void sub_80ECAF0(struct IntroSequenceData * this)
break;
}
}
+
+void sub_80ECB98(struct IntroSequenceData * this)
+{
+ switch (this->field_0004)
+ {
+ case 0:
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
+ SetGpuReg(REG_OFFSET_WININ, 0x3F00);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x0000);
+ SetGpuReg(REG_OFFSET_WIN1H, 0x00F0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0x0000);
+ this->field_0012 = 0;
+ this->field_0004++;
+ break;
+ case 1:
+ ShowBg(3);
+ BlendPalettes(0xFFFFFFFF, 0x00, RGB_BLACK);
+ this->field_0004++;
+ break;
+ case 2:
+ this->field_0012 += 8;
+ if (this->field_0012 >= 0x30)
+ this->field_0012 = 0x30;
+ SetGpuReg(REG_OFFSET_WIN1V, ((0x50 - this->field_0012) << 8) | (0x50 + this->field_0012));
+ if (this->field_0012 == 0x30)
+ sub_80ECAA8(this, sub_80ECC3C);
+ break;
+ }
+}
+
+void sub_80ECC3C(struct IntroSequenceData * this)
+{
+ switch (this->field_0004)
+ {
+ case 0:
+ PlaySE(BGM_FRLG_GAMEFREAK_LOGO);
+ sub_80EDC40();
+ this->field_0012 = 0;
+ this->field_0004++;
+ break;
+ case 1:
+ this->field_0012++;
+ if (this->field_0012 == 30)
+ {
+ sub_80EDDF0();
+ this->field_0012 = 0;
+ this->field_0004++;
+ }
+ break;
+ case 2:
+ this->field_0012++;
+ if (this->field_0012 == 90)
+ sub_80ECAA8(this, sub_80ECCA8);
+ break;
+ }
+}