diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-02 15:30:30 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-02 15:30:30 -0400 |
commit | 4f63b54a6b4e697402e2243e02998b8f2521a717 (patch) | |
tree | cb3e4b25e0a287df77ffb0b27f1b6c2257ff8b90 | |
parent | 2c953c5baf05d12a829cb73664c9a95f660f1548 (diff) |
intro: through sub_80ECC3C
-rw-r--r-- | asm/intro.s | 143 | ||||
-rw-r--r-- | src/intro.c | 66 |
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; + } +} |