summaryrefslogtreecommitdiff
path: root/src/title_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/title_screen.c')
-rw-r--r--src/title_screen.c172
1 files changed, 157 insertions, 15 deletions
diff --git a/src/title_screen.c b/src/title_screen.c
index 241e5489e..664e07978 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "gba/m4a_internal.h"
#include "title_screen.h"
-#include "asm.h"
#include "clear_save_data_menu.h"
#include "decompress.h"
#include "event_data.h"
@@ -10,9 +9,31 @@
#include "main.h"
#include "main_menu.h"
#include "palette.h"
+#include "reset_rtc_screen.h"
#include "sound.h"
#include "sprite.h"
#include "task.h"
+#include "unknown_task.h"
+
+#if ENGLISH
+#define VERSION_BANNER_SHAPE 1
+#define VERSION_BANNER_RIGHT_TILEOFFSET 64
+#define VERSION_BANNER_BYTES 0x1000
+#define VERSION_BANNER_LEFT_X 98
+#define VERSION_BANNER_RIGHT_X 162
+#define VERSION_BANNER_Y 26
+#define VERSION_BANNER_Y_GOAL 66
+#define START_BANNER_X DISPLAY_WIDTH / 2
+#elif GERMAN
+#define VERSION_BANNER_SHAPE 0
+#define VERSION_BANNER_RIGHT_TILEOFFSET 128
+#define VERSION_BANNER_BYTES 0x2000
+#define VERSION_BANNER_LEFT_X 108
+#define VERSION_BANNER_RIGHT_X 172
+#define VERSION_BANNER_Y 44
+#define VERSION_BANNER_Y_GOAL 84
+#define START_BANNER_X DISPLAY_WIDTH / 2 - 2
+#endif
extern u8 gReservedSpritePaletteCount;
extern struct MusicPlayerInfo gMPlay_BGM;
@@ -88,7 +109,7 @@ static const struct OamData sVersionBannerLeftOamData =
.objMode = 0,
.mosaic = 0,
.bpp = 1,
- .shape = 1,
+ .shape = VERSION_BANNER_SHAPE,
.x = 0,
.matrixNum = 0,
.size = 3,
@@ -104,7 +125,7 @@ static const struct OamData sVersionBannerRightOamData =
.objMode = 0,
.mosaic = 0,
.bpp = 1,
- .shape = 1,
+ .shape = VERSION_BANNER_SHAPE,
.x = 0,
.matrixNum = 0,
.size = 3,
@@ -120,7 +141,7 @@ static const union AnimCmd sVersionBannerLeftAnimSequence[] =
};
static const union AnimCmd sVersionBannerRightAnimSequence[] =
{
- ANIMCMD_FRAME(64, 30),
+ ANIMCMD_FRAME(VERSION_BANNER_RIGHT_TILEOFFSET, 30),
ANIMCMD_END,
};
static const union AnimCmd *const sVersionBannerLeftAnimTable[] =
@@ -151,9 +172,9 @@ static const struct SpriteTemplate sVersionBannerRightSpriteTemplate =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallback_VersionBannerRight,
};
-static const struct SpriteSheet gUnknown_08393EFC[] =
+static const struct CompressedSpriteSheet gUnknown_08393EFC[] =
{
- {gVersionTiles, 0x1000, 1000},
+ {gVersionTiles, VERSION_BANNER_BYTES, 1000},
{NULL},
};
static const struct OamData gOamData_8393F0C =
@@ -212,6 +233,18 @@ static const union AnimCmd gSpriteAnim_8393F4C[] =
ANIMCMD_FRAME(28, 4),
ANIMCMD_END,
};
+#if GERMAN
+static const union AnimCmd gSpriteAnim_839F73C[] =
+{
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_839F744[] =
+{
+ ANIMCMD_FRAME(36, 4),
+ ANIMCMD_END,
+};
+#endif
static const union AnimCmd *const sStartCopyrightBannerAnimTable[] =
{
gSpriteAnim_8393F14,
@@ -222,6 +255,10 @@ static const union AnimCmd *const sStartCopyrightBannerAnimTable[] =
gSpriteAnim_8393F3C,
gSpriteAnim_8393F44,
gSpriteAnim_8393F4C,
+#if GERMAN
+ gSpriteAnim_839F73C,
+ gSpriteAnim_839F744,
+#endif
};
static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate =
{
@@ -233,7 +270,7 @@ static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallback_PressStartCopyrightBanner,
};
-static const struct SpriteSheet gUnknown_08393F8C[] =
+static const struct CompressedSpriteSheet gUnknown_08393F8C[] =
{
{gTitleScreenPressStart_Gfx, 0x520, 1001},
{NULL},
@@ -278,7 +315,7 @@ static const struct SpriteTemplate sPokemonLogoShineSpriteTemplate =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallback_PokemonLogoShine,
};
-static const struct SpriteSheet sPokemonLogoShineSpriteSheet[] =
+static const struct CompressedSpriteSheet sPokemonLogoShineSpriteSheet[] =
{
{sLogoShineTiles, 0x800, 1002},
{NULL},
@@ -321,7 +358,7 @@ void SpriteCallback_VersionBannerLeft(struct Sprite *sprite)
if (task->data[1] != 0)
{
sprite->oam.objMode = 0;
- sprite->pos1.y = 66;
+ sprite->pos1.y = VERSION_BANNER_Y_GOAL;
sprite->invisible = FALSE;
}
else
@@ -331,7 +368,7 @@ void SpriteCallback_VersionBannerLeft(struct Sprite *sprite)
if (task->data[5] < 64)
{
sprite->invisible = FALSE;
- if (sprite->pos1.y != 66)
+ if (sprite->pos1.y != VERSION_BANNER_Y_GOAL)
sprite->pos1.y++;
REG_BLDALPHA = gUnknown_08393E64[task->data[5] / 2];
}
@@ -345,7 +382,7 @@ void SpriteCallback_VersionBannerRight(struct Sprite *sprite)
if (task->data[1] != 0)
{
sprite->oam.objMode = 0;
- sprite->pos1.y = 66;
+ sprite->pos1.y = VERSION_BANNER_Y_GOAL;
sprite->invisible = FALSE;
}
else
@@ -353,7 +390,7 @@ void SpriteCallback_VersionBannerRight(struct Sprite *sprite)
if (task->data[5] < 64)
{
sprite->invisible = FALSE;
- if (sprite->pos1.y != 66)
+ if (sprite->pos1.y != VERSION_BANNER_Y_GOAL)
sprite->pos1.y++;
}
}
@@ -374,6 +411,7 @@ void SpriteCallback_PressStartCopyrightBanner(struct Sprite *sprite)
sprite->invisible = FALSE;
}
+#if ENGLISH
static void CreatePressStartBanner(s16 x, s16 y)
{
u8 i;
@@ -387,6 +425,110 @@ static void CreatePressStartBanner(s16 x, s16 y)
gSprites[spriteId].data0 = 1;
}
}
+#elif GERMAN
+__attribute__((naked))
+static void CreatePressStartBanner(s16 x, s16 y)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ lsls r0, 16\n\
+ ldr r2, _0807C3AC @ =0xffe00000\n\
+ adds r0, r2\n\
+ lsrs r0, 16\n\
+ movs r6, 0\n\
+ lsls r1, 16\n\
+ mov r10, r1\n\
+ mov r8, r10\n\
+_0807C302:\n\
+ lsls r5, r0, 16\n\
+ asrs r5, 16\n\
+ ldr r0, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
+ adds r1, r5, 0\n\
+ mov r3, r8\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 4\n\
+ adds r4, r0\n\
+ lsls r4, 2\n\
+ ldr r0, _0807C3B4 @ =gSprites\n\
+ mov r9, r0\n\
+ add r4, r9\n\
+ adds r0, r4, 0\n\
+ adds r1, r6, 0\n\
+ bl StartSpriteAnim\n\
+ movs r7, 0x1\n\
+ strh r7, [r4, 0x2E]\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ adds r5, 0x20\n\
+ lsls r5, 16\n\
+ lsrs r0, r5, 16\n\
+ cmp r6, 0x2\n\
+ bls _0807C302\n\
+ ldr r1, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
+ mov r8, r1\n\
+ lsls r5, r0, 16\n\
+ asrs r5, 16\n\
+ mov r2, r10\n\
+ asrs r6, r2, 16\n\
+ mov r0, r8\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 4\n\
+ adds r4, r0\n\
+ lsls r4, 2\n\
+ add r4, r9\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x8\n\
+ bl StartSpriteAnim\n\
+ strh r7, [r4, 0x2E]\n\
+ subs r5, 0x60\n\
+ lsls r5, 16\n\
+ asrs r5, 16\n\
+ subs r6, 0x8\n\
+ lsls r6, 16\n\
+ asrs r6, 16\n\
+ mov r0, r8\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 4\n\
+ adds r4, r0\n\
+ lsls r4, 2\n\
+ add r4, r9\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x9\n\
+ bl StartSpriteAnim\n\
+ strh r7, [r4, 0x2E]\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0807C3AC: .4byte 0xffe00000\n\
+_0807C3B0: .4byte sStartCopyrightBannerSpriteTemplate\n\
+_0807C3B4: .4byte gSprites\n\
+ .syntax divided\n");
+}
+#endif
static void CreateCopyrightBanner(s16 x, s16 y)
{
@@ -607,12 +749,12 @@ static void Task_TitleScreenPhase1(u8 taskId)
REG_BLDY = 0;
//Create left side of version banner
- spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, 0x62, 0x1A, 0);
+ spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, VERSION_BANNER_LEFT_X, VERSION_BANNER_Y, 0);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].data1 = taskId;
//Create right side of version banner
- spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, 0xA2, 0x1A, 0);
+ spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, VERSION_BANNER_RIGHT_X, VERSION_BANNER_Y, 0);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].data1 = taskId;
@@ -643,7 +785,7 @@ static void Task_TitleScreenPhase2(u8 taskId)
| DISPCNT_BG1_ON
| DISPCNT_BG2_ON
| DISPCNT_OBJ_ON;
- CreatePressStartBanner(DISPLAY_WIDTH / 2, 108);
+ CreatePressStartBanner(START_BANNER_X, 108);
CreateCopyrightBanner(DISPLAY_WIDTH / 2, 148);
gTasks[taskId].data[4] = 0;
gTasks[taskId].func = Task_TitleScreenPhase3;