summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/hall_of_fame.s207
-rw-r--r--ld_script.txt1
-rw-r--r--src/hall_of_fame.c106
3 files changed, 80 insertions, 234 deletions
diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s
index a713b5ad0..f617997a6 100644
--- a/asm/hall_of_fame.s
+++ b/asm/hall_of_fame.s
@@ -9,211 +9,4 @@
- thumb_func_start sub_81437A4
-sub_81437A4: @ 81437A4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r1
- mov r10, r2
- adds r6, r3, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r2, 16
- lsrs r2, 16
- mov r10, r2
- lsls r6, 16
- lsrs r6, 16
- lsls r7, r0, 3
- ldr r1, _08143854 @ =gTrainerFrontPicTable
- mov r8, r1
- add r8, r7
- ldr r1, _08143858 @ =gTrainerFrontPicCoords
- lsls r2, r0, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r5, _0814385C @ =gUnknown_0840B5A0
- lsls r4, r6, 2
- adds r4, r5
- ldr r4, [r4]
- str r4, [sp]
- str r0, [sp, 0x4]
- mov r0, r8
- bl DecompressPicFromTable_2
- ldr r0, _08143860 @ =gTrainerFrontPicPaletteTable
- adds r0, r7, r0
- ldr r0, [r0]
- lsls r4, r6, 4
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0x20
- bl LoadCompressedPalette
- lsls r1, r6, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl sub_8143680
- ldr r0, _08143864 @ =gUnknown_02024E8C
- mov r1, r9
- lsls r1, 16
- asrs r1, 16
- mov r9, r1
- mov r2, r10
- lsls r2, 16
- asrs r2, 16
- mov r10, r2
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08143868 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r4
- strb r1, [r2, 0x5]
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08143854: .4byte gTrainerFrontPicTable
-_08143858: .4byte gTrainerFrontPicCoords
-_0814385C: .4byte gUnknown_0840B5A0
-_08143860: .4byte gTrainerFrontPicPaletteTable
-_08143864: .4byte gUnknown_02024E8C
-_08143868: .4byte gSprites
- thumb_func_end sub_81437A4
-
- thumb_func_start sub_814386C
-sub_814386C: @ 814386C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r1, [r5, 0x26]
- movs r2, 0x26
- ldrsh r0, [r5, r2]
- cmp r0, 0x78
- ble _08143882
- adds r0, r5, 0
- bl DestroySprite
- b _081438BA
-_08143882:
- adds r0, r1, 0x1
- ldrh r1, [r5, 0x30]
- adds r0, r1
- strh r0, [r5, 0x26]
- ldrh r4, [r5, 0x2E]
- lsls r4, 24
- lsrs r4, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- ands r0, r1
- adds r0, 0x8
- ldr r1, _081438C0 @ =gSineTable
- lsls r4, 1
- adds r4, r1
- movs r2, 0
- ldrsh r1, [r4, r2]
- muls r0, r1
- cmp r0, 0
- bge _081438B0
- adds r0, 0xFF
-_081438B0:
- asrs r0, 8
- strh r0, [r5, 0x24]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x4
- strh r0, [r5, 0x2E]
-_081438BA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081438C0: .4byte gSineTable
- thumb_func_end sub_814386C
-
- thumb_func_start sub_81438C4
-sub_81438C4: @ 81438C4
- push {r4,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF0
- bl __umodsi3
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl Random
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x7
- ands r2, r0
- negs r2, r2
- ldr r0, _08143934 @ =gSpriteTemplate_840B7A4
- lsls r4, 16
- asrs r4, 16
- lsls r2, 16
- asrs r2, 16
- adds r1, r4, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08143938 @ =gSprites
- adds r4, r1, r0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x11
- bl __umodsi3
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- bl Random
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0
- beq _0814393C
- movs r0, 0
- b _0814393E
- .align 2, 0
-_08143934: .4byte gSpriteTemplate_840B7A4
-_08143938: .4byte gSprites
-_0814393C:
- movs r0, 0x1
-_0814393E:
- strh r0, [r4, 0x30]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81438C4
-
.align 2, 0 @ Don't pad with nop.
diff --git a/ld_script.txt b/ld_script.txt
index b5732033e..ccfd768c2 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -256,7 +256,6 @@ SECTIONS {
src/field_region_map.o(.text);
asm/battle_anim_813F0F4.o(.text);
src/hall_of_fame.o(.text);
- asm/hall_of_fame.o(.text);
src/credits.o(.text);
src/lottery_corner.o(.text);
src/diploma.o(.text);
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index 93f32ec88..550cb0ebe 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -14,6 +14,8 @@
#include "m4a.h"
#include "data2.h"
#include "decompress.h"
+#include "rng.h"
+#include "trig.h"
extern u32 gUnknown_0203931C;
extern bool8 gUnknown_02039324; // has hall of fame records
@@ -24,6 +26,15 @@ extern struct SpriteTemplate gUnknown_02024E8C;
extern const s16 gUnknown_0840B534[][4];
extern const s16 gUnknown_0840B564[][4];
+extern const struct SpriteTemplate gSpriteTemplate_840B7A4;
+extern const struct HallofFameMon sDummyFameMon;
+extern const u8 gHallOfFame_Gfx[];
+extern const u16 gHallOfFame_Pal[];
+extern const struct CompressedSpriteSheet gUnknown_0840B514;
+extern const struct CompressedSpritePalette gUnknown_0840B524;
+extern const struct SpriteTemplate gUnknown_0840B6B8;
+extern const struct SpriteFrameImage* gUnknown_0840B69C[];
+extern void* gUnknown_0840B5A0[];
struct HallofFameMon
{
@@ -77,11 +88,11 @@ static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1);
static void sub_81433E0(void);
static void sub_8143570(void);
static void sub_81435B8(void);
-static u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid);
+static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid);
+static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a3);
+static bool8 sub_81438C4(void);
// functions from different files
-void sub_81438C4(void);
-u32 sub_81437A4(u16 gender, u16 a1, u16 a2, u16 a3);
void sub_81439D0(void);
void sub_80C5CD4(void*); // ?
void sub_80C5E38(void*); // ?
@@ -236,17 +247,17 @@ static void sub_814217C(u8 taskID)
else
sub_8125EC8(3);
- for (i = 0; i < 50; i++, lastSavedTeam++)
+ for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++)
{
if (lastSavedTeam->mons[0].species == 0)
break;
}
- if (i >= 50)
+ if (i >= HALL_OF_FAME_MAX_TEAMS)
{
struct HallofFameMons* r5 = (struct HallofFameMons*)(&ewram[0x1E000]);
struct HallofFameMons* r6 = (struct HallofFameMons*)(&ewram[0x1E000]);
r5++;
- for (i = 0; i < 49; i++, r6++, r5++)
+ for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, r6++, r5++)
{
*r6 = *r5;
}
@@ -306,7 +317,7 @@ static void sub_8142320(u8 taskID)
field6 = gUnknown_0840B564[currPokeID][3];
}
- spriteID = sub_81436BC(currMon->species, xPos, yPos, currPokeID, currMon->tid, currMon->personality);
+ spriteID = HallOfFame_LoadPokemonPic(currMon->species, xPos, yPos, currPokeID, currMon->tid, currMon->personality);
gSprites[spriteID].data1 = field4;
gSprites[spriteID].data2 = field6;
gSprites[spriteID].data0 = 0;
@@ -412,7 +423,7 @@ static void sub_8142738(u8 taskID)
SetUpWindowConfig(&gWindowConfig_81E71B4);
InitMenuWindow(&gWindowConfig_81E71B4);
- gTasks[taskID].tPlayerSpriteID = sub_81437A4(gSaveBlock2.playerGender, 120, 72, 6);
+ gTasks[taskID].tPlayerSpriteID = HallOfFame_LoadTrainerPic(gSaveBlock2.playerGender, 120, 72, 6);
gTasks[taskID].tFrameCount = 120;
gTasks[taskID].func = sub_8142794;
}
@@ -467,8 +478,6 @@ static void sub_81428A0(u8 taskID)
#undef tPlayerSpriteID
#undef tMonSpriteID
-extern const struct HallofFameMon sDummyFameMon;
-
void sub_81428CC(void)
{
switch (gMain.state)
@@ -545,15 +554,15 @@ static void sub_8142A28(u8 taskID)
u16 i;
struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]);
- for (i = 0; i < 50; i++, savedTeams++)
+ for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++)
{
if (savedTeams->mons[0].species == 0)
break;
}
- if (i < 50)
+ if (i < HALL_OF_FAME_MAX_TEAMS)
gTasks[taskID].tCurrTeamNo = i - 1;
else
- gTasks[taskID].tCurrTeamNo = 49;
+ gTasks[taskID].tCurrTeamNo = HALL_OF_FAME_MAX_TEAMS - 1;
gTasks[taskID].tCurrPageNo = GetGameStat(10);
for (i = 0, vram1 = (u16*)(VRAM + 0x381A), vram2 = (u16*)(VRAM + 0x385A); i <= 16; i++)
@@ -606,7 +615,7 @@ static void sub_8142B04(u8 taskID)
posX = gUnknown_0840B564[i][2];
posY = gUnknown_0840B564[i][3];
}
- spriteID = sub_81436BC(currMon->species, posX, posY, i, currMon->tid, currMon->personality);
+ spriteID = HallOfFame_LoadPokemonPic(currMon->species, posX, posY, i, currMon->tid, currMon->personality);
gSprites[spriteID].oam.priority = 1;
gTasks[taskID].tMonSpriteID(i) = spriteID;
}
@@ -894,9 +903,6 @@ static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1)
MenuPrint_RightAligned(gStringVar1, a0 + 14, a1 + 5);
}
-extern const u8 gHallOfFame_Gfx[];
-extern const u16 gHallOfFame_Pal[];
-
static void sub_81433E0(void)
{
u32 offsetWrite, offsetWrite2, offsetWrite3, offsetWrite4;
@@ -976,9 +982,6 @@ static void sub_81433E0(void)
LoadPalette(gHallOfFame_Pal, 0, 0x20);
}
-extern const struct CompressedSpriteSheet gUnknown_0840B514;
-extern const struct CompressedSpritePalette gUnknown_0840B524;
-
static void sub_8143570(void)
{
remove_some_task();
@@ -1027,9 +1030,6 @@ void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite)
}
-extern const struct SpriteTemplate gUnknown_0840B6B8;
-extern const struct SpriteFrameImage* gUnknown_0840B69C[];
-
void sub_8143648(u16 paletteTag, u8 animID)
{
gUnknown_02024E8C = gUnknown_0840B6B8;
@@ -1046,9 +1046,7 @@ void sub_8143680(u16 paletteTag, u8 animID)
gUnknown_02024E8C.anims = gUnknown_081EC2A4[0];
}
-extern void* gUnknown_0840B5A0[];
-
-static u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid)
+static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid)
{
u8 spriteID;
const u8* pokePal;
@@ -1063,3 +1061,59 @@ static u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32
gSprites[spriteID].oam.paletteNum = pokeID;
return spriteID;
}
+
+static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a3)
+{
+ u8 spriteID;
+
+ DecompressPicFromTable_2(&gTrainerFrontPicTable[trainerPicID], gTrainerFrontPicCoords[trainerPicID].coords, gTrainerFrontPicCoords[trainerPicID].y_offset, (void*) 0x2000000, gUnknown_0840B5A0[a3], trainerPicID);
+
+ LoadCompressedPalette(gTrainerFrontPicPaletteTable[trainerPicID].data, 16 * a3 + 256, 0x20);
+ sub_8143680(a3, a3);
+
+ spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 1);
+ gSprites[spriteID].oam.paletteNum = a3;
+
+ return spriteID;
+}
+
+void sub_814386C(struct Sprite* sprite)
+{
+ if (sprite->pos2.y > 120)
+ DestroySprite(sprite);
+ else
+ {
+ u16 rand;
+ u8 tableID;
+
+ sprite->pos2.y++;
+ sprite->pos2.y += sprite->data1;
+
+ tableID = sprite->data0;
+ rand = (Random() % 4) + 8;
+ sprite->pos2.x = rand * gSineTable[tableID] / 256;
+
+ sprite->data0 += 4;
+ }
+}
+
+bool8 sub_81438C4(void)
+{
+ u8 spriteID;
+ struct Sprite* sprite;
+
+ s16 posX = Random() % 240;
+ s16 posY = -(Random() % 8);
+
+ spriteID = CreateSprite(&gSpriteTemplate_840B7A4, posX, posY, 0);
+ sprite = &gSprites[spriteID];
+
+ StartSpriteAnim(sprite, Random() % 17);
+
+ if (Random() & 3)
+ sprite->data1 = 0;
+ else
+ sprite->data1 = 1;
+
+ return 0;
+}