mirror of
https://github.com/pret/pokeruby.git
synced 2024-12-11 14:54:06 +00:00
Merge branch 'master' into decompile_berry_blender
This commit is contained in:
commit
2324abcbee
File diff suppressed because it is too large
Load Diff
@ -338,11 +338,11 @@ gSpriteAnimTable_8416D28:: @ 8416D28
|
||||
.4byte gSpriteAnim_8416D14
|
||||
|
||||
.align 2
|
||||
gSpriteTemplate_8416D2C:: @ 8416D2C
|
||||
gSpriteTemplate_Brendan:: @ 8416D2C
|
||||
spr_template 1001, 1002, gOamData_8416D0C, gSpriteAnimTable_8416D28, NULL, gDummySpriteAffineAnimTable, sub_81492A0
|
||||
|
||||
.align 2
|
||||
gSpriteTemplate_8416D44:: @ 8416D44
|
||||
gSpriteTemplate_May:: @ 8416D44
|
||||
spr_template 1001, 1003, gOamData_8416D0C, gSpriteAnimTable_8416D28, NULL, gDummySpriteAffineAnimTable, sub_81492A0
|
||||
|
||||
.align 2
|
||||
|
@ -10,15 +10,16 @@ extern const struct SpritePalette gIntro2SpritePalettes[];
|
||||
extern const struct CompressedSpriteSheet gUnknown_08416E24;
|
||||
extern const struct CompressedSpriteSheet gUnknown_08416E34;
|
||||
|
||||
void load_intro_part2_graphics(/*TODO: arg types*/);
|
||||
void sub_8148C78(/*TODO: arg types*/);
|
||||
void load_intro_part2_graphics(u8 a);
|
||||
void sub_8148C78(u8 a);
|
||||
void sub_8148CB0(u8);
|
||||
void sub_8148E90(u8);
|
||||
u8 sub_8148EC0(/*TODO: arg types*/);
|
||||
void sub_8149020(/*TODO: arg types*/);
|
||||
u8 intro_create_brendan_sprite(/*TODO: arg types*/);
|
||||
u8 intro_create_may_sprite(/*TODO: arg types*/);
|
||||
u8 intro_create_latios_sprite(/*TODO: arg types*/);
|
||||
u8 intro_create_latias_sprite(/*TODO: arg types*/);
|
||||
u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d);
|
||||
void sub_8148F3C(u8);
|
||||
void sub_8149020(u8);
|
||||
u8 intro_create_brendan_sprite(s16 a, s16 b);
|
||||
u8 intro_create_may_sprite(s16 a, s16 b);
|
||||
u8 intro_create_latios_sprite(s16 a, s16 b);
|
||||
u8 intro_create_latias_sprite(s16 a, s16 b);
|
||||
|
||||
#endif // GUARD_INTRO_CREDITS_GRAPHICS_H
|
||||
|
@ -3,6 +3,17 @@
|
||||
|
||||
#include "string_util.h"
|
||||
|
||||
struct PocketScrollState
|
||||
{
|
||||
u8 cursorPos;
|
||||
u8 scrollTop;
|
||||
u8 numSlots;
|
||||
u8 cursorMax;
|
||||
};
|
||||
|
||||
extern struct PocketScrollState gBagPocketScrollStates[];
|
||||
extern struct ItemSlot *gCurrentBagPocketItemSlots;
|
||||
|
||||
void ResetBagScrollPositions(void);
|
||||
void ClearBag(void);
|
||||
void sub_80A3E0C(void);
|
||||
|
@ -265,7 +265,7 @@ SECTIONS {
|
||||
src/braille_puzzles.o(.text);
|
||||
asm/pokeblock_feed.o(.text);
|
||||
src/clear_save_data_menu.o(.text);
|
||||
asm/intro_credits_graphics.o(.text);
|
||||
src/intro_credits_graphics.o(.text);
|
||||
asm/evolution_graphics.o(.text);
|
||||
src/bard_music.o(.text);
|
||||
src/fldeff_teleport.o(.text);
|
||||
|
@ -61,9 +61,9 @@ static void sub_8146440(u8 taskId);
|
||||
static void sub_8146480(u8 taskid);
|
||||
static void sub_81464E4(void);
|
||||
static void sub_8146600(u8 berry);
|
||||
// static void sub_81466A0(void);
|
||||
static void sub_81466A0(void);
|
||||
static void sub_81466E8(u8 taskId, s8 direction);
|
||||
// static void sub_8146798(u8 berry);
|
||||
static void sub_8146798(u8 berry);
|
||||
static void sub_8146810(s8 berry);
|
||||
static void sub_81468BC(void);
|
||||
|
||||
@ -347,7 +347,7 @@ static void sub_8146600(u8 berry)
|
||||
gUnknown_0203932E[4] = sub_80A7E5C(208);
|
||||
}
|
||||
|
||||
void sub_81466A0(void)
|
||||
static void sub_81466A0(void)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
@ -361,105 +361,36 @@ void sub_81466A0(void)
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((naked))
|
||||
static void sub_81466E8(u8 taskId, s8 direction)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r8\n\
|
||||
push {r7}\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r7, r0, 24\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r2, r1, 24\n\
|
||||
lsls r0, r7, 2\n\
|
||||
adds r0, r7\n\
|
||||
lsls r0, 3\n\
|
||||
ldr r1, _08146748 @ =gTasks + 0x8\n\
|
||||
adds r6, r0, r1\n\
|
||||
ldr r4, _0814674C @ =gBagPocketScrollStates\n\
|
||||
movs r0, 0xC\n\
|
||||
adds r0, r4\n\
|
||||
mov r8, r0\n\
|
||||
ldrb r1, [r0, 0x1]\n\
|
||||
ldrb r0, [r4, 0xC]\n\
|
||||
adds r1, r0\n\
|
||||
cmp r1, 0\n\
|
||||
bne _08146718\n\
|
||||
lsls r0, r2, 24\n\
|
||||
cmp r0, 0\n\
|
||||
blt _0814678C\n\
|
||||
_08146718:\n\
|
||||
adds r0, r1, 0x1\n\
|
||||
lsls r5, r2, 24\n\
|
||||
mov r1, r8\n\
|
||||
ldrb r1, [r1, 0x2]\n\
|
||||
cmp r0, r1\n\
|
||||
bne _08146728\n\
|
||||
cmp r5, 0\n\
|
||||
bgt _0814678C\n\
|
||||
_08146728:\n\
|
||||
movs r0, 0x5\n\
|
||||
bl PlaySE\n\
|
||||
mov r2, r8\n\
|
||||
ldrb r3, [r2, 0x1]\n\
|
||||
ldrb r4, [r4, 0xC]\n\
|
||||
mov r12, r4\n\
|
||||
adds r0, r3, r4\n\
|
||||
asrs r2, r5, 24\n\
|
||||
adds r1, r0, r2\n\
|
||||
cmp r1, 0\n\
|
||||
bge _08146750\n\
|
||||
negs r0, r0\n\
|
||||
strh r0, [r6, 0x2]\n\
|
||||
b _08146766\n\
|
||||
.align 2, 0\n\
|
||||
_08146748: .4byte gTasks + 0x8\n\
|
||||
_0814674C: .4byte gBagPocketScrollStates\n\
|
||||
_08146750:\n\
|
||||
mov r4, r8\n\
|
||||
ldrb r0, [r4, 0x2]\n\
|
||||
cmp r1, r0\n\
|
||||
blt _08146764\n\
|
||||
subs r0, r3\n\
|
||||
mov r1, r12\n\
|
||||
subs r0, r1\n\
|
||||
subs r0, 0x1\n\
|
||||
strh r0, [r6, 0x2]\n\
|
||||
b _08146766\n\
|
||||
_08146764:\n\
|
||||
strh r2, [r6, 0x2]\n\
|
||||
_08146766:\n\
|
||||
ldr r0, _08146780 @ =gTasks\n\
|
||||
lsls r1, r7, 2\n\
|
||||
adds r1, r7\n\
|
||||
lsls r1, 3\n\
|
||||
adds r1, r0\n\
|
||||
ldr r0, _08146784 @ =sub_8146798\n\
|
||||
str r0, [r1]\n\
|
||||
cmp r5, 0\n\
|
||||
bge _08146788\n\
|
||||
movs r2, 0x10\n\
|
||||
negs r2, r2\n\
|
||||
adds r0, r2, 0\n\
|
||||
b _0814678A\n\
|
||||
.align 2, 0\n\
|
||||
_08146780: .4byte gTasks\n\
|
||||
_08146784: .4byte sub_8146798\n\
|
||||
_08146788:\n\
|
||||
movs r0, 0x10\n\
|
||||
_0814678A:\n\
|
||||
strh r0, [r6]\n\
|
||||
_0814678C:\n\
|
||||
pop {r3}\n\
|
||||
mov r8, r3\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.syntax divided\n");
|
||||
u8 berryPocket = 3;
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos == 0
|
||||
&& direction < 0)
|
||||
return;
|
||||
if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + 1 == gBagPocketScrollStates[berryPocket].numSlots
|
||||
&& direction > 0)
|
||||
return;
|
||||
|
||||
PlaySE(SE_SELECT);
|
||||
if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction < 0)
|
||||
data[1] = -(gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos);
|
||||
else if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction >= gBagPocketScrollStates[berryPocket].numSlots)
|
||||
data[1] = gBagPocketScrollStates[berryPocket].numSlots - gBagPocketScrollStates[berryPocket].scrollTop - gBagPocketScrollStates[berryPocket].cursorPos - 1;
|
||||
else
|
||||
data[1] = direction;
|
||||
|
||||
gTasks[taskId].func = sub_8146798;
|
||||
|
||||
if (direction < 0)
|
||||
data[0] = -16;
|
||||
else
|
||||
data[0] = 16;
|
||||
|
||||
}
|
||||
|
||||
void sub_8146798(u8 taskId)
|
||||
static void sub_8146798(u8 taskId)
|
||||
{
|
||||
s16 *taskData = gTasks[taskId].data;
|
||||
|
||||
@ -478,94 +409,38 @@ void sub_8146798(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((naked))
|
||||
static void sub_8146810(s8 berry)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r6,lr}\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r3, r0, 24\n\
|
||||
adds r4, r3, 0\n\
|
||||
lsls r0, r3, 24\n\
|
||||
asrs r1, r0, 24\n\
|
||||
cmp r1, 0\n\
|
||||
ble _08146848\n\
|
||||
ldr r0, _08146840 @ =gBagPocketScrollStates\n\
|
||||
adds r4, r0, 0\n\
|
||||
adds r4, 0xC\n\
|
||||
ldrb r2, [r0, 0xC]\n\
|
||||
adds r1, r2, r1\n\
|
||||
adds r6, r0, 0\n\
|
||||
cmp r1, 0x7\n\
|
||||
ble _08146844\n\
|
||||
adds r0, r3, 0\n\
|
||||
adds r0, 0xF9\n\
|
||||
adds r0, r2, r0\n\
|
||||
ldrb r1, [r4, 0x1]\n\
|
||||
adds r0, r1\n\
|
||||
strb r0, [r4, 0x1]\n\
|
||||
movs r0, 0x7\n\
|
||||
b _0814686E\n\
|
||||
.align 2, 0\n\
|
||||
_08146840: .4byte gBagPocketScrollStates\n\
|
||||
_08146844:\n\
|
||||
adds r0, r2, r3\n\
|
||||
b _0814686E\n\
|
||||
_08146848:\n\
|
||||
ldr r0, _08146868 @ =gBagPocketScrollStates\n\
|
||||
adds r5, r0, 0\n\
|
||||
adds r5, 0xC\n\
|
||||
ldrb r2, [r0, 0xC]\n\
|
||||
adds r1, r2, r1\n\
|
||||
adds r6, r0, 0\n\
|
||||
cmp r1, 0\n\
|
||||
bge _0814686C\n\
|
||||
adds r0, r2, r3\n\
|
||||
ldrb r1, [r5, 0x1]\n\
|
||||
adds r0, r1\n\
|
||||
movs r1, 0\n\
|
||||
strb r0, [r5, 0x1]\n\
|
||||
strb r1, [r6, 0xC]\n\
|
||||
b _08146870\n\
|
||||
.align 2, 0\n\
|
||||
_08146868: .4byte gBagPocketScrollStates\n\
|
||||
_0814686C:\n\
|
||||
adds r0, r2, r4\n\
|
||||
_0814686E:\n\
|
||||
strb r0, [r6, 0xC]\n\
|
||||
_08146870:\n\
|
||||
ldr r2, _081468AC @ =gScriptItemId\n\
|
||||
movs r0, 0x3\n\
|
||||
lsls r0, 2\n\
|
||||
adds r0, r6\n\
|
||||
ldrb r1, [r0, 0x1]\n\
|
||||
ldrb r0, [r0]\n\
|
||||
adds r1, r0\n\
|
||||
ldr r0, _081468B0 @ =gCurrentBagPocketItemSlots\n\
|
||||
ldr r0, [r0]\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r0\n\
|
||||
ldrh r0, [r1]\n\
|
||||
strh r0, [r2]\n\
|
||||
ldr r0, _081468B4 @ =gUnknown_0203932C\n\
|
||||
ldrb r1, [r0]\n\
|
||||
lsls r0, r1, 4\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 2\n\
|
||||
ldr r1, _081468B8 @ =gSprites\n\
|
||||
adds r0, r1\n\
|
||||
bl DestroySprite\n\
|
||||
bl sub_81466A0\n\
|
||||
bl sub_80A7DD4\n\
|
||||
pop {r4-r6}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.align 2, 0\n\
|
||||
_081468AC: .4byte gScriptItemId\n\
|
||||
_081468B0: .4byte gCurrentBagPocketItemSlots\n\
|
||||
_081468B4: .4byte gUnknown_0203932C\n\
|
||||
_081468B8: .4byte gSprites\n\
|
||||
.syntax divided\n");
|
||||
u8 berryPocket = 3;
|
||||
|
||||
if (berry > 0)
|
||||
{
|
||||
if (gBagPocketScrollStates[berryPocket].cursorPos + berry > 7)
|
||||
{
|
||||
gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos - 7 + berry;
|
||||
gBagPocketScrollStates[berryPocket].cursorPos = 7;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBagPocketScrollStates[berryPocket].cursorPos += berry;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBagPocketScrollStates[berryPocket].cursorPos + berry < 0)
|
||||
{
|
||||
gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos + berry;
|
||||
gBagPocketScrollStates[berryPocket].cursorPos = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBagPocketScrollStates[berryPocket].cursorPos += berry;
|
||||
}
|
||||
}
|
||||
gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId;
|
||||
DestroySprite(&gSprites[gUnknown_0203932C]);
|
||||
sub_81466A0();
|
||||
sub_80A7DD4();
|
||||
}
|
||||
|
||||
static void sub_81468BC(void)
|
||||
|
532
src/intro_credits_graphics.c
Executable file
532
src/intro_credits_graphics.c
Executable file
@ -0,0 +1,532 @@
|
||||
#include "global.h"
|
||||
#include "gba/m4a_internal.h"
|
||||
#include "intro.h"
|
||||
#include "data2.h"
|
||||
#include "decompress.h"
|
||||
#include "hall_of_fame.h"
|
||||
#include "intro_credits_graphics.h"
|
||||
#include "libgncmultiboot.h"
|
||||
#include "link.h"
|
||||
#include "m4a.h"
|
||||
#include "main.h"
|
||||
#include "new_game.h"
|
||||
#include "palette.h"
|
||||
#include "rng.h"
|
||||
#include "save.h"
|
||||
#include "songs.h"
|
||||
#include "sound.h"
|
||||
#include "species.h"
|
||||
#include "task.h"
|
||||
#include "title_screen.h"
|
||||
#include "trig.h"
|
||||
#include "unknown_task.h"
|
||||
|
||||
// define register constants for the inline asm
|
||||
asm(".include \"constants/gba_constants.inc\"\n");
|
||||
|
||||
struct UnknownStruct1
|
||||
{
|
||||
u8 var0_0:4;
|
||||
u8 var0_4:2;
|
||||
u8 var0_6:2;
|
||||
u8 var1;
|
||||
u8 var2;
|
||||
u8 var3;
|
||||
u16 var4;
|
||||
};
|
||||
|
||||
extern u8 gUnknown_0841225C;
|
||||
extern u8 gUnknown_084126DC;
|
||||
extern u8 gUnknown_084121FC;
|
||||
extern u8 gUnknown_084128D8;
|
||||
extern u8 gUnknown_08412EB4;
|
||||
extern u8 gUnknown_08412818;
|
||||
extern u8 gUnknown_08413184;
|
||||
extern u8 gUnknown_08413340;
|
||||
extern u8 gUnknown_084139C8;
|
||||
extern u8 gUnknown_08413300;
|
||||
extern u8 gUnknown_08413CCC;
|
||||
|
||||
extern const struct SpriteTemplate gSpriteTemplate_8416B3C;
|
||||
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 sub_8148C78(u8 a)
|
||||
{
|
||||
if (a == 1)
|
||||
{
|
||||
REG_BG3CNT = 0x603;
|
||||
REG_BG2CNT = 0x702;
|
||||
REG_BG1CNT = 0xF05;
|
||||
REG_DISPCNT = 0x1E40;
|
||||
}
|
||||
else
|
||||
{
|
||||
REG_BG3CNT = 0x603;
|
||||
REG_BG2CNT = 0x702;
|
||||
REG_BG1CNT = 0xF05;
|
||||
REG_DISPCNT = 0x1E40;
|
||||
}
|
||||
}
|
||||
|
||||
extern u8 gUnknown_084131C4;
|
||||
extern u8 gUnknown_084131A4;
|
||||
extern u8 gUnknown_0841221C;
|
||||
extern u8 gUnknown_08412878;
|
||||
extern u8 gUnknown_08413320;
|
||||
extern u8 gUnknown_0841223C;
|
||||
extern u8 gUnknown_08413E78;
|
||||
extern u8 gUnknown_08414084;
|
||||
extern u8 gUnknown_08413E38;
|
||||
const extern struct CompressedSpriteSheet gUnknown_08416C70;
|
||||
extern u8 gUnknown_08414064;
|
||||
extern struct UnknownStruct1 gUnknown_08416B94;
|
||||
extern struct UnknownStruct1 gUnknown_08416C10;
|
||||
extern struct UnknownStruct1 gUnknown_08416C8C;
|
||||
const extern union AnimCmd *const gSpriteAnimTable_8416B84;
|
||||
const extern union AnimCmd *const gSpriteAnimTable_8416C04;
|
||||
const extern union AnimCmd *const gSpriteAnimTable_8416C88;
|
||||
const extern struct SpriteTemplate gSpriteTemplate_8416CDC;
|
||||
const extern struct SpriteTemplate gSpriteTemplate_Brendan;
|
||||
const extern struct SpriteTemplate gSpriteTemplate_8416CF4;
|
||||
const extern struct SpriteTemplate gSpriteTemplate_May;
|
||||
const extern struct SpriteTemplate gSpriteTemplate_8416D7C;
|
||||
const extern struct SpriteTemplate gSpriteTemplate_8416D94;
|
||||
|
||||
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_8148E90(u8 a)
|
||||
{
|
||||
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:
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8149174(u8 a, struct UnknownStruct1 *b, const union AnimCmd *const *c, u8 d)
|
||||
{
|
||||
u8 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_4, b[i].var0_6, 0);
|
||||
gSprites[sprite].oam.priority = 3;
|
||||
gSprites[sprite].oam.shape = b[i].var0_4;
|
||||
gSprites[sprite].oam.size = b[i].var0_6;
|
||||
gSprites[sprite].oam.paletteNum = 0;
|
||||
gSprites[sprite].anims = c;
|
||||
StartSpriteAnim(&gSprites[sprite], b[i].var0_0);
|
||||
gSprites[sprite].data0 = a;
|
||||
gSprites[sprite].data1 = b[i].var4;
|
||||
gSprites[sprite].data2 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8149248()
|
||||
{
|
||||
sub_8149174(0, &gUnknown_08416B94, &gSpriteAnimTable_8416B84, 9);
|
||||
}
|
||||
|
||||
void sub_8149264()
|
||||
{
|
||||
sub_8149174(1, &gUnknown_08416C10, &gSpriteAnimTable_8416C04, 12);
|
||||
}
|
||||
|
||||
void sub_8149280()
|
||||
{
|
||||
sub_8149174(1, &gUnknown_08416C8C, &gSpriteAnimTable_8416C88, 6);
|
||||
}
|
||||
|
||||
void nullsub_82()
|
||||
{
|
||||
}
|
||||
|
||||
void sub_81492A0(struct Sprite* sprite)
|
||||
{
|
||||
sprite->invisible = gSprites[sprite->data0].invisible;
|
||||
sprite->pos1.x = gSprites[sprite->data0].pos1.x;
|
||||
sprite->pos1.y = gSprites[sprite->data0].pos1.y + 8;
|
||||
sprite->pos2.x = gSprites[sprite->data0].pos2.x;
|
||||
sprite->pos2.y = gSprites[sprite->data0].pos2.y;
|
||||
}
|
||||
|
||||
|
||||
|
||||
u8 intro_create_brendan_sprite(s16 a, s16 b)
|
||||
{
|
||||
u8 sprite = CreateSprite(&gSpriteTemplate_8416CDC, a, b, 0);
|
||||
u8 brendan = CreateSprite(&gSpriteTemplate_Brendan, a, b + 8, 1);
|
||||
gSprites[brendan].data0 = sprite;
|
||||
return sprite;
|
||||
}
|
||||
|
||||
u8 intro_create_may_sprite(s16 a, s16 b)
|
||||
{
|
||||
u8 sprite = CreateSprite(&gSpriteTemplate_8416CF4, a, b, 0);
|
||||
u8 may = CreateSprite(&gSpriteTemplate_May, a, b + 8, 1);
|
||||
gSprites[may].data0 = sprite;
|
||||
return sprite;
|
||||
}
|
||||
|
||||
void nullsub_83()
|
||||
{
|
||||
}
|
||||
|
||||
void sub_81493C4(struct Sprite* sprite)
|
||||
{
|
||||
sprite->invisible = gSprites[sprite->data0].invisible;
|
||||
sprite->pos1.y = gSprites[sprite->data0].pos1.y;
|
||||
sprite->pos2.x = gSprites[sprite->data0].pos2.x;
|
||||
sprite->pos2.y = gSprites[sprite->data0].pos2.y;
|
||||
}
|
||||
|
||||
u8 intro_create_latios_sprite(s16 a, s16 b)
|
||||
{
|
||||
u8 sprite = CreateSprite(&gSpriteTemplate_8416D7C, a - 32, b, 2);
|
||||
u8 latios = CreateSprite(&gSpriteTemplate_8416D7C, a + 32, b, 2);
|
||||
gSprites[latios].data0 = sprite;
|
||||
StartSpriteAnim(&gSprites[latios], 1);
|
||||
gSprites[latios].callback = &sub_81493C4;
|
||||
return sprite;
|
||||
}
|
||||
|
||||
u8 intro_create_latias_sprite(s16 a, s16 b)
|
||||
{
|
||||
u8 sprite = CreateSprite(&gSpriteTemplate_8416D94, a - 32, b, 2);
|
||||
u8 latios = CreateSprite(&gSpriteTemplate_8416D94, a + 32, b, 2);
|
||||
gSprites[latios].data0 = sprite;
|
||||
StartSpriteAnim(&gSprites[latios], 1);
|
||||
gSprites[latios].callback = &sub_81493C4;
|
||||
return sprite;
|
||||
}
|
@ -56,14 +56,6 @@ extern void sub_804E990(u8);
|
||||
extern void sub_802E424(u8);
|
||||
extern void sub_8064E2C(void);
|
||||
|
||||
struct PocketScrollState
|
||||
{
|
||||
u8 cursorPos;
|
||||
u8 scrollTop;
|
||||
u8 numSlots;
|
||||
u8 cursorMax;
|
||||
};
|
||||
|
||||
struct UnknownStruct2
|
||||
{
|
||||
u8 unk0;
|
||||
|
@ -1024,17 +1024,17 @@ void sub_809D7E8(struct Sprite *);
|
||||
u8 unref_sub_809D26C(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct MonIconSpriteTemplate iconTemplate;
|
||||
struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match
|
||||
struct MonIconSpriteTemplate iconTemplate =
|
||||
{
|
||||
.oam = &sMonIconOamData,
|
||||
.image = gMonIconTable[species],
|
||||
.anims = sMonIconAnims,
|
||||
.affineAnims = sMonIconAffineAnims,
|
||||
.callback = callback,
|
||||
.paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
|
||||
};
|
||||
|
||||
iconTemplatePtr->oam = &sMonIconOamData;
|
||||
iconTemplatePtr->image = gMonIconTable[species];
|
||||
iconTemplatePtr->anims = sMonIconAnims;
|
||||
iconTemplatePtr->affineAnims = sMonIconAffineAnims;
|
||||
iconTemplatePtr->callback = callback;
|
||||
iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species];
|
||||
|
||||
spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority);
|
||||
spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
|
||||
|
||||
UpdateMonIconFrame(&gSprites[spriteId]);
|
||||
|
||||
@ -1067,17 +1067,17 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u
|
||||
u8 sub_809D3A4(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct MonIconSpriteTemplate iconTemplate;
|
||||
struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match
|
||||
struct MonIconSpriteTemplate iconTemplate =
|
||||
{
|
||||
.oam = &sMonIconOamData,
|
||||
.image = gMonIconTable[species],
|
||||
.anims = sMonIconAnims,
|
||||
.affineAnims = sMonIconAffineAnims,
|
||||
.callback = callback,
|
||||
.paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
|
||||
};
|
||||
|
||||
iconTemplatePtr->oam = &sMonIconOamData;
|
||||
iconTemplatePtr->image = gMonIconTable[species];
|
||||
iconTemplatePtr->anims = sMonIconAnims;
|
||||
iconTemplatePtr->affineAnims = sMonIconAffineAnims;
|
||||
iconTemplatePtr->callback = callback;
|
||||
iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species];
|
||||
|
||||
spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority);
|
||||
spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
|
||||
|
||||
UpdateMonIconFrame(&gSprites[spriteId]);
|
||||
|
||||
@ -1197,7 +1197,7 @@ void sub_809D62C(struct Sprite *sprite)
|
||||
UpdateMonIconFrame(sprite);
|
||||
}
|
||||
|
||||
// TODO: try to find a way to avoid using goto and asm statement
|
||||
// TODO: try to find a way to avoid using asm statement
|
||||
u8 UpdateMonIconFrame(struct Sprite *sprite)
|
||||
{
|
||||
u8 result = 0;
|
||||
@ -1206,34 +1206,31 @@ u8 UpdateMonIconFrame(struct Sprite *sprite)
|
||||
{
|
||||
s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
|
||||
|
||||
if (frame != -2)
|
||||
switch (frame)
|
||||
{
|
||||
if (frame != -1)
|
||||
goto copy;
|
||||
goto end;
|
||||
case -1:
|
||||
break;
|
||||
case -2:
|
||||
sprite->animCmdIndex = 0;
|
||||
break;
|
||||
default:
|
||||
RequestSpriteCopy(
|
||||
(u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame,
|
||||
(u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP,
|
||||
sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
|
||||
{
|
||||
register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
|
||||
sprite->animDelayCounter = duration;
|
||||
}
|
||||
sprite->animCmdIndex++;
|
||||
result = sprite->animCmdIndex;
|
||||
break;
|
||||
}
|
||||
|
||||
sprite->animCmdIndex = 0;
|
||||
goto end;
|
||||
|
||||
copy:
|
||||
RequestSpriteCopy(
|
||||
(u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame,
|
||||
(u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP,
|
||||
sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
|
||||
{
|
||||
register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
|
||||
sprite->animDelayCounter = duration;
|
||||
}
|
||||
sprite->animCmdIndex++;
|
||||
result = sprite->animCmdIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->animDelayCounter--;
|
||||
}
|
||||
|
||||
end:
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user