summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/intro_credits_graphics.c430
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