diff options
Diffstat (limited to 'src/intro_credits_graphics.c')
-rwxr-xr-x | src/intro_credits_graphics.c | 430 |
1 files changed, 340 insertions, 90 deletions
diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 8f5e86b05..ee3fa392b 100755 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -21,6 +21,9 @@ #include "trig.h" #include "unknown_task.h" +// define register constants for the inline asm +asm(".include \"constants/gba_constants.inc\"\n"); + extern u8 gUnknown_0841225C; extern u8 gUnknown_084126DC; extern u8 gUnknown_084121FC; @@ -36,39 +39,41 @@ extern u8 gUnknown_08413CCC; const extern struct CompressedSpriteSheet gUnknown_08416B54; const extern struct CompressedSpriteSheet gUnknown_08416BDC; +extern u16 gUnknown_02039358; +extern s16 gUnknown_0203935A; extern s16 gUnknown_0203935C; - extern u8 gReservedSpritePaletteCount; void sub_8149248(); void sub_8149264(); -void load_intro_part2_graphics(u8 a){ - LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); - LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); - LoadPalette(&gUnknown_084121FC, 240, 32); - switch (a) - { - case 0: - default: - LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08412818, 0, 96); - LoadCompressedObjectPic(&gUnknown_08416B54); - LoadPalette(&gUnknown_08413184, 256, 32); - sub_8149248(); - break; - case 1: - LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08413300, 0, 32); - LoadCompressedObjectPic(&gUnknown_08416BDC); - LoadPalette(&gUnknown_08413CCC, 256, 32); - sub_8149264(); - break; - } - gUnknown_0203935C = 0; - gReservedSpritePaletteCount = 8; +void load_intro_part2_graphics(u8 a) +{ + LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); + LoadPalette(&gUnknown_084121FC, 240, 32); + switch (a) + { + case 0: + default: + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412818, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LoadPalette(&gUnknown_08413184, 256, 32); + sub_8149248(); + break; + case 1: + LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413300, 0, 32); + LoadCompressedObjectPic(&gUnknown_08416BDC); + LoadPalette(&gUnknown_08413CCC, 256, 32); + sub_8149264(); + break; + } + gUnknown_0203935C = 0; + gReservedSpritePaletteCount = 8; } void sub_8148C78(u8 a) @@ -103,78 +108,323 @@ extern u8 gUnknown_08414064; void sub_8149280(); -void sub_8148CB0(u8 a){ - LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); - LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); - switch (a) - { - case 0: - default: - LoadPalette(&gUnknown_084121FC, 240, 32); - LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08412818, 0, 96); - LoadCompressedObjectPic(&gUnknown_08416B54); - LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); - LoadPalette(&gUnknown_08413184, 256, 32); - sub_8149248(); - break; - case 1: - LoadPalette(&gUnknown_0841221C, 240, 32); - LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08412878, 0, 96); - LoadCompressedObjectPic(&gUnknown_08416B54); - LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); - LoadPalette(&gUnknown_084131A4, 256, 32); - sub_8149248(); - break; - case 2: - case 3: - LoadPalette(&gUnknown_0841221C, 240, 32); - LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08413320, 0, 32); - LoadCompressedObjectPic(&gUnknown_08416BDC); - LoadPalette(&gUnknown_08413320, 256, 32); - sub_8149264(); - break; - case 4: - LoadPalette(&gUnknown_0841223C, 240, 32); - LZ77UnCompVram(&gUnknown_08413E78, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_08414084, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08413E38, 0, 64); - LoadCompressedObjectPic(&gUnknown_08416C70); - LoadPalette(&gUnknown_08414064, 256, 32); - sub_8149280(); - break; - } - gReservedSpritePaletteCount = 8; - gUnknown_0203935C = 0; +void sub_8148CB0(u8 a) +{ + LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); + switch (a) + { + case 0: + default: + LoadPalette(&gUnknown_084121FC, 240, 32); + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412818, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); + LoadPalette(&gUnknown_08413184, 256, 32); + sub_8149248(); + break; + case 1: + LoadPalette(&gUnknown_0841221C, 240, 32); + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412878, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); + LoadPalette(&gUnknown_084131A4, 256, 32); + sub_8149248(); + break; + case 2: + case 3: + LoadPalette(&gUnknown_0841221C, 240, 32); + LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413320, 0, 32); + LoadCompressedObjectPic(&gUnknown_08416BDC); + LoadPalette(&gUnknown_08413320, 256, 32); + sub_8149264(); + break; + case 4: + LoadPalette(&gUnknown_0841223C, 240, 32); + LZ77UnCompVram(&gUnknown_08413E78, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08414084, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413E38, 0, 64); + LoadCompressedObjectPic(&gUnknown_08416C70); + LoadPalette(&gUnknown_08414064, 256, 32); + sub_8149280(); + break; + } + gReservedSpritePaletteCount = 8; + gUnknown_0203935C = 0; } void sub_8148E90(u8 a) { - REG_BG3CNT = 0x603; + REG_BG3CNT = 0x603; REG_BG2CNT = 0x702; REG_BG1CNT = 0xF05; REG_DISPCNT = 0x1F40; } +u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d) +{ + u8 taskId = CreateTask(&sub_8148F3C, 0); + + gTasks[taskId].data[0] = a; + gTasks[taskId].data[1] = b; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = c; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[7] = d; + gTasks[taskId].data[8] = 8; + gTasks[taskId].data[9] = 0; + sub_8148F3C(taskId); + return taskId; +} + +#ifdef NONMATCHING +void sub_8148F3C(u8 taskId) +{ + register u32 r4 asm("r4"); + s32 r2; + + r4 = (u16)gTasks[taskId].data[1] << 16; + if (r4 != 0) + { + r2 = (gTasks[taskId].data[2] << 16) + (u16)gTasks[taskId].data[3] - (r4 >> 12); + gTasks[taskId].data[2] = r2 >> 16; + gTasks[taskId].data[3] = r2; + REG_BG1HOFS = gTasks[taskId].data[2]; + REG_BG1VOFS = gUnknown_0203935A + gUnknown_02039358; + } + + r4 = (u16)gTasks[taskId].data[4] << 16; + if (r4 != 0) + { + r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6] - (r4 >> 12); + gTasks[taskId].data[5] = r2 >> 16; + gTasks[taskId].data[3] = r2; + REG_BG2HOFS = gTasks[taskId].data[5]; + if (gTasks[taskId].data[0] != 0) + REG_BG2VOFS = gUnknown_0203935A + gUnknown_02039358; + else + REG_BG2VOFS = gUnknown_02039358; + } + + r4 = (u16)gTasks[taskId].data[7] << 16; + if (r4 != 0) + { + r2 = (gTasks[taskId].data[8] << 16) + (u16)gTasks[taskId].data[9] - (r4 >> 12);; + gTasks[taskId].data[8] = r2 >> 16; + gTasks[taskId].data[9] = r2; + REG_BG3HOFS = gTasks[taskId].data[8]; + REG_BG3VOFS = gUnknown_02039358; + } +} +#else +__attribute__((naked)) +void sub_8148F3C(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r1, _08148FB4 @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r1\n\ + ldrh r0, [r3, 0xA]\n\ + lsls r4, r0, 16\n\ + adds r6, r1, 0\n\ + cmp r4, 0\n\ + beq _08148F7C\n\ + movs r1, 0xC\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 16\n\ + ldrh r1, [r3, 0xE]\n\ + adds r2, r0, r1\n\ + lsrs r0, r4, 12\n\ + subs r2, r0\n\ + asrs r1, r2, 16\n\ + strh r1, [r3, 0xC]\n\ + strh r2, [r3, 0xE]\n\ + ldr r0, _08148FB8 @ =REG_BG1HOFS\n\ + strh r1, [r0]\n\ + ldr r2, _08148FBC @ =REG_BG1VOFS\n\ + ldr r1, _08148FC0 @ =gUnknown_02039358\n\ + ldr r0, _08148FC4 @ =gUnknown_0203935A\n\ + ldrh r0, [r0]\n\ + ldrh r1, [r1]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ +_08148F7C:\n\ + ldrh r0, [r3, 0x10]\n\ + lsls r4, r0, 16\n\ + cmp r4, 0\n\ + beq _08148FD8\n\ + movs r1, 0x12\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 16\n\ + ldrh r1, [r3, 0x14]\n\ + adds r2, r0, r1\n\ + lsrs r0, r4, 12\n\ + subs r2, r0\n\ + asrs r1, r2, 16\n\ + strh r1, [r3, 0x12]\n\ + strh r2, [r3, 0x14]\n\ + ldr r0, _08148FC8 @ =REG_BG2HOFS\n\ + strh r1, [r0]\n\ + movs r1, 0x8\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0\n\ + beq _08148FD0\n\ + ldr r2, _08148FCC @ =REG_BG2VOFS\n\ + ldr r1, _08148FC0 @ =gUnknown_02039358\n\ + ldr r0, _08148FC4 @ =gUnknown_0203935A\n\ + ldrh r0, [r0]\n\ + ldrh r1, [r1]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ + b _08148FD8\n\ + .align 2, 0\n\ +_08148FB4: .4byte gTasks\n\ +_08148FB8: .4byte REG_BG1HOFS\n\ +_08148FBC: .4byte REG_BG1VOFS\n\ +_08148FC0: .4byte gUnknown_02039358\n\ +_08148FC4: .4byte gUnknown_0203935A\n\ +_08148FC8: .4byte REG_BG2HOFS\n\ +_08148FCC: .4byte REG_BG2VOFS\n\ +_08148FD0:\n\ + ldr r0, _08149010 @ =REG_BG2VOFS\n\ + ldr r1, _08149014 @ =gUnknown_02039358\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ +_08148FD8:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r6\n\ + ldrh r0, [r3, 0x16]\n\ + lsls r4, r0, 16\n\ + cmp r4, 0\n\ + beq _08149008\n\ + movs r1, 0x18\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 16\n\ + ldrh r1, [r3, 0x1A]\n\ + adds r2, r0, r1\n\ + lsrs r0, r4, 12\n\ + subs r2, r0\n\ + asrs r1, r2, 16\n\ + strh r1, [r3, 0x18]\n\ + strh r2, [r3, 0x1A]\n\ + ldr r0, _08149018 @ =REG_BG3HOFS\n\ + strh r1, [r0]\n\ + ldr r1, _0814901C @ =REG_BG3VOFS\n\ + ldr r0, _08149014 @ =gUnknown_02039358\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ +_08149008:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08149010: .4byte REG_BG2VOFS\n\ +_08149014: .4byte gUnknown_02039358\n\ +_08149018: .4byte REG_BG3HOFS\n\ +_0814901C: .4byte REG_BG3VOFS\n\ + .syntax divided\n"); +} +#endif +void sub_8149020(u8 mode) +{ + u16 var1; + u16 var2; + switch (mode) + { + case 0: + default: + /* stuff */ + if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; + if(gMain.vblankCounter1 & 4) + { + var1 = gPlttBufferUnfaded[9]; + var2 = gPlttBufferUnfaded[10]; + } + else + { + var1 = gPlttBufferUnfaded[10]; + var2 = gPlttBufferUnfaded[9]; + } + LoadPalette(&var1, 9, 2); + LoadPalette(&var2, 10, 2); + break; + case 2: + /* stuff */ + if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; + if(gMain.vblankCounter1 & 4) + { + var1 = 0x3D27; + var2 = 0x295; + } + else + { + var1 = 0x31C; + var2 = 0x3D27; + } + LoadPalette(&var1, 12, 2); + LoadPalette(&var2, 13, 2); + break; + case 1: + break; + } +} -u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d){ - u8 taskId = CreateTask(&sub_8148F3C, 0); - gTasks[taskId].data[0] = a; - gTasks[taskId].data[1] = b; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = c; - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[6] = 0; - gTasks[taskId].data[7] = d; - gTasks[taskId].data[8] = 8; - gTasks[taskId].data[9] = 0; - sub_8148F3C(taskId); - return taskId; +void sub_814910C(struct Sprite *sprite) +{ + if(gUnknown_0203935C) + { + DestroySprite(sprite); + } + else + { + s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data2) + (u16)sprite->data1; + sprite->pos1.x = var >> 16; + sprite->data2 = var; + if (sprite->pos1.x > 255) sprite->pos1.x = 0xFFE0; + if (sprite->data0) + { + sprite->pos2.y = -(gUnknown_02039358 + gUnknown_0203935A); + } + else + { + sprite->pos2.y = -gUnknown_02039358; + } + } } + +struct UnknownStruct1 +{ + s8 var0; + s8 var1; + u8 var2; + u8 var3; + u16 var4; +}; + +// void sub_8149174(u8 a, struct UnknownStruct1 *b, union AnimCmd **c, u8 d) +// { + // int i; + // for(i = 0, i < d, i++) + // { + // u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].var1, b[i].var2, b[i].var3) + // CalcCenterToCornerVec(&gSprites[sprite], b[i].var0 / 16, b[i].var0 << 20, 0) + // gSprites[sprite].oam.priority = 3; + + // } +// }
\ No newline at end of file |