mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-03-21 17:24:13 -05:00
Decompile sub_9E90
Co-Authored-By: jiangzhengwenjz <15051292+jiangzhengwenjz@users.noreply.github.com>
This commit is contained in:
parent
a3b7e6f28c
commit
72fa68ea60
|
|
@ -293,6 +293,7 @@ extern s16 gUnknown_0202ADA0[];
|
|||
extern s32 gUnknown_0202BEF0;
|
||||
extern const struct SpriteSet *const gUnknown_086A769C[];
|
||||
extern struct SpriteGroup gUnknown_0200D078[];
|
||||
extern struct SpriteGroup gUnknown_0200D638;
|
||||
extern struct UnkStruct_086A7768 gUnknown_086A7798[0x4];
|
||||
extern s32 gUnknown_0201C188;
|
||||
|
||||
|
|
|
|||
451
src/intro.c
451
src/intro.c
|
|
@ -76,25 +76,25 @@ struct unkStruct_201A450
|
|||
u16 unk10;
|
||||
u16 unk12;
|
||||
u8 fill14[0x18 - 0x14];
|
||||
u16 unk18;
|
||||
s16 unk18;
|
||||
u16 fill1A;
|
||||
u8 unk1C;
|
||||
s8 unk1C;
|
||||
u8 fill1D[0x20 - 0x1D];
|
||||
u16 unk20;
|
||||
u16 unk22;
|
||||
u8 fill24[0x2C - 0x24];
|
||||
u8 unk2C;
|
||||
s8 unk2C;
|
||||
u8 fill2D[0x30 - 0x2D];
|
||||
u16 unk30;
|
||||
u16 unk32;
|
||||
u8 fill34[0x3A - 0x34];
|
||||
s16 unk3A;
|
||||
u8 unk3C;
|
||||
s8 unk3C;
|
||||
u8 fill3D[0x40 - 0x3D];
|
||||
u16 unk40;
|
||||
u16 unk42;
|
||||
u8 fill44[0x4C - 0x44];
|
||||
u8 unk4C;
|
||||
s8 unk4C;
|
||||
};
|
||||
|
||||
extern struct unkStruct_201A450 gUnknown_0201A450;
|
||||
|
|
@ -573,363 +573,94 @@ void sub_9D70(void)
|
|||
puVar4->available = 0;
|
||||
}
|
||||
|
||||
// TODO see https://decomp.me/scratch/9Nuw9
|
||||
NAKED
|
||||
void sub_9E90(void)
|
||||
{
|
||||
asm_unified("\n\
|
||||
push {r4, r5, r6, r7, lr}\n\
|
||||
mov r7, sl\n\
|
||||
mov r6, sb\n\
|
||||
mov r5, r8\n\
|
||||
push {r5, r6, r7}\n\
|
||||
sub sp, #4\n\
|
||||
ldr r3, _0800A12C @ =gMain\n\
|
||||
ldrh r0, [r3, #0x38]\n\
|
||||
movs r0, #0xf1\n\
|
||||
lsls r0, r0, #4\n\
|
||||
strh r0, [r3, #0x38]\n\
|
||||
ldr r0, _0800A130 @ =gUnknown_0201C1B8\n\
|
||||
ldrb r1, [r0]\n\
|
||||
ldr r0, _0800A134 @ =gUnknown_0202ADD4\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, r0, #8\n\
|
||||
orrs r1, r0\n\
|
||||
ldrh r0, [r3, #0x3a]\n\
|
||||
strh r1, [r3, #0x3a]\n\
|
||||
ldr r1, _0800A138 @ =0x04000050\n\
|
||||
ldrh r0, [r3, #0x38]\n\
|
||||
strh r0, [r1]\n\
|
||||
adds r1, #2\n\
|
||||
ldrh r0, [r3, #0x3a]\n\
|
||||
strh r0, [r1]\n\
|
||||
ldr r4, _0800A13C @ =gUnknown_0201A450\n\
|
||||
movs r0, #0x18\n\
|
||||
ldrsh r1, [r4, r0]\n\
|
||||
movs r0, #0xb8\n\
|
||||
muls r0, r1, r0\n\
|
||||
movs r1, #0xbe\n\
|
||||
lsls r1, r1, #2\n\
|
||||
adds r2, r3, r1\n\
|
||||
adds r0, r0, r2\n\
|
||||
mov r8, r0\n\
|
||||
movs r6, #0xa4\n\
|
||||
lsls r6, r6, #3\n\
|
||||
adds r6, r6, r3\n\
|
||||
mov sb, r6\n\
|
||||
movs r7, #0x8d\n\
|
||||
lsls r7, r7, #3\n\
|
||||
adds r7, r7, r3\n\
|
||||
mov sl, r7\n\
|
||||
movs r0, #0x1c\n\
|
||||
ldrsb r0, [r4, r0]\n\
|
||||
mov r1, r8\n\
|
||||
strh r0, [r1]\n\
|
||||
adds r0, r4, #0\n\
|
||||
adds r0, #0x2c\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, r0, #0x18\n\
|
||||
asrs r0, r0, #0x18\n\
|
||||
strh r0, [r6]\n\
|
||||
adds r0, r4, #0\n\
|
||||
adds r0, #0x3c\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, r0, #0x18\n\
|
||||
asrs r0, r0, #0x18\n\
|
||||
strh r0, [r7]\n\
|
||||
adds r0, r4, #0\n\
|
||||
adds r0, #0x4c\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, r0, #0x18\n\
|
||||
asrs r0, r0, #0x18\n\
|
||||
ldr r6, _0800A140 @ =gUnknown_0200D638\n\
|
||||
strh r0, [r6]\n\
|
||||
ldr r5, _0800A144 @ =gUnknown_086A769C\n\
|
||||
adds r0, r5, #0\n\
|
||||
movs r1, #0x31\n\
|
||||
bl LoadSpriteSets\n\
|
||||
mov r7, r8\n\
|
||||
ldrh r0, [r7]\n\
|
||||
cmp r0, #1\n\
|
||||
bne _08009F9E\n\
|
||||
ldrh r0, [r4, #0x10]\n\
|
||||
strh r0, [r7, #2]\n\
|
||||
ldrh r0, [r4, #0x12]\n\
|
||||
strh r0, [r7, #4]\n\
|
||||
movs r1, #0x18\n\
|
||||
ldrsh r0, [r4, r1]\n\
|
||||
lsls r0, r0, #2\n\
|
||||
adds r0, r0, r5\n\
|
||||
ldr r0, [r0]\n\
|
||||
str r0, [sp]\n\
|
||||
movs r5, #0\n\
|
||||
ldrh r2, [r0]\n\
|
||||
cmp r5, r2\n\
|
||||
bge _08009F9E\n\
|
||||
ldr r7, _0800A148 @ =gOamBuffer\n\
|
||||
ldr r6, _0800A14C @ =0xFFFFFE00\n\
|
||||
mov ip, r6\n\
|
||||
mov r4, r8\n\
|
||||
adds r4, #8\n\
|
||||
_08009F4C:\n\
|
||||
ldrh r2, [r4]\n\
|
||||
lsls r2, r2, #3\n\
|
||||
adds r2, r2, r7\n\
|
||||
ldrb r1, [r2, #1]\n\
|
||||
movs r0, #0xd\n\
|
||||
rsbs r0, r0, #0\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, #4\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r2, #1]\n\
|
||||
ldrh r3, [r4]\n\
|
||||
lsls r3, r3, #3\n\
|
||||
adds r3, r3, r7\n\
|
||||
movs r0, #2\n\
|
||||
ldrsh r1, [r4, r0]\n\
|
||||
mov r2, r8\n\
|
||||
movs r6, #2\n\
|
||||
ldrsh r0, [r2, r6]\n\
|
||||
adds r1, r1, r0\n\
|
||||
ldr r2, _0800A150 @ =0x000001FF\n\
|
||||
adds r0, r2, #0\n\
|
||||
ands r1, r0\n\
|
||||
ldrh r2, [r3, #2]\n\
|
||||
mov r0, ip\n\
|
||||
ands r0, r2\n\
|
||||
orrs r0, r1\n\
|
||||
strh r0, [r3, #2]\n\
|
||||
ldrh r1, [r4]\n\
|
||||
lsls r1, r1, #3\n\
|
||||
adds r1, r1, r7\n\
|
||||
mov r6, r8\n\
|
||||
ldrb r0, [r6, #4]\n\
|
||||
ldrb r2, [r4, #4]\n\
|
||||
adds r0, r0, r2\n\
|
||||
strb r0, [r1]\n\
|
||||
adds r4, #8\n\
|
||||
adds r5, #1\n\
|
||||
ldr r6, [sp]\n\
|
||||
ldrh r6, [r6]\n\
|
||||
cmp r5, r6\n\
|
||||
blt _08009F4C\n\
|
||||
_08009F9E:\n\
|
||||
mov r7, sb\n\
|
||||
ldrh r0, [r7]\n\
|
||||
cmp r0, #1\n\
|
||||
bne _0800A01C\n\
|
||||
ldr r0, _0800A13C @ =gUnknown_0201A450\n\
|
||||
ldrh r1, [r0, #0x20]\n\
|
||||
strh r1, [r7, #2]\n\
|
||||
ldrh r0, [r0, #0x22]\n\
|
||||
strh r0, [r7, #4]\n\
|
||||
ldr r6, _0800A148 @ =gOamBuffer\n\
|
||||
movs r0, #0xd\n\
|
||||
rsbs r0, r0, #0\n\
|
||||
mov ip, r0\n\
|
||||
mov r4, sb\n\
|
||||
adds r4, #8\n\
|
||||
movs r5, #3\n\
|
||||
_08009FBE:\n\
|
||||
ldrh r1, [r4]\n\
|
||||
lsls r1, r1, #3\n\
|
||||
adds r1, r1, r6\n\
|
||||
ldrb r2, [r1, #1]\n\
|
||||
mov r0, ip\n\
|
||||
ands r0, r2\n\
|
||||
movs r2, #4\n\
|
||||
orrs r0, r2\n\
|
||||
strb r0, [r1, #1]\n\
|
||||
ldrh r1, [r4]\n\
|
||||
lsls r1, r1, #3\n\
|
||||
adds r1, r1, r6\n\
|
||||
ldrb r2, [r1, #5]\n\
|
||||
mov r0, ip\n\
|
||||
ands r0, r2\n\
|
||||
movs r7, #4\n\
|
||||
orrs r0, r7\n\
|
||||
strb r0, [r1, #5]\n\
|
||||
ldrh r3, [r4]\n\
|
||||
lsls r3, r3, #3\n\
|
||||
adds r3, r3, r6\n\
|
||||
movs r0, #2\n\
|
||||
ldrsh r1, [r4, r0]\n\
|
||||
mov r2, sb\n\
|
||||
movs r7, #2\n\
|
||||
ldrsh r0, [r2, r7]\n\
|
||||
adds r1, r1, r0\n\
|
||||
ldr r2, _0800A150 @ =0x000001FF\n\
|
||||
adds r0, r2, #0\n\
|
||||
ands r1, r0\n\
|
||||
ldrh r2, [r3, #2]\n\
|
||||
ldr r0, _0800A14C @ =0xFFFFFE00\n\
|
||||
ands r0, r2\n\
|
||||
orrs r0, r1\n\
|
||||
strh r0, [r3, #2]\n\
|
||||
ldrh r1, [r4]\n\
|
||||
lsls r1, r1, #3\n\
|
||||
adds r1, r1, r6\n\
|
||||
mov r7, sb\n\
|
||||
ldrb r0, [r7, #4]\n\
|
||||
ldrb r2, [r4, #4]\n\
|
||||
adds r0, r0, r2\n\
|
||||
strb r0, [r1]\n\
|
||||
adds r4, #8\n\
|
||||
subs r5, #1\n\
|
||||
cmp r5, #0\n\
|
||||
bge _08009FBE\n\
|
||||
_0800A01C:\n\
|
||||
mov r6, sl\n\
|
||||
ldrh r0, [r6]\n\
|
||||
cmp r0, #1\n\
|
||||
bne _0800A098\n\
|
||||
ldr r0, _0800A13C @ =gUnknown_0201A450\n\
|
||||
ldrh r1, [r0, #0x30]\n\
|
||||
strh r1, [r6, #2]\n\
|
||||
ldrh r0, [r0, #0x32]\n\
|
||||
strh r0, [r6, #4]\n\
|
||||
ldr r6, _0800A148 @ =gOamBuffer\n\
|
||||
ldr r7, _0800A14C @ =0xFFFFFE00\n\
|
||||
mov ip, r7\n\
|
||||
mov r4, sl\n\
|
||||
adds r4, #8\n\
|
||||
movs r5, #3\n\
|
||||
_0800A03A:\n\
|
||||
ldrh r1, [r4]\n\
|
||||
lsls r1, r1, #3\n\
|
||||
adds r1, r1, r6\n\
|
||||
ldrb r2, [r1, #1]\n\
|
||||
movs r0, #0xd\n\
|
||||
rsbs r0, r0, #0\n\
|
||||
ands r0, r2\n\
|
||||
strb r0, [r1, #1]\n\
|
||||
ldrh r2, [r4]\n\
|
||||
lsls r2, r2, #3\n\
|
||||
adds r2, r2, r6\n\
|
||||
ldrb r1, [r2, #5]\n\
|
||||
movs r0, #0xd\n\
|
||||
rsbs r0, r0, #0\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, #4\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r2, #5]\n\
|
||||
ldrh r3, [r4]\n\
|
||||
lsls r3, r3, #3\n\
|
||||
adds r3, r3, r6\n\
|
||||
movs r0, #2\n\
|
||||
ldrsh r1, [r4, r0]\n\
|
||||
mov r2, sl\n\
|
||||
movs r7, #2\n\
|
||||
ldrsh r0, [r2, r7]\n\
|
||||
adds r1, r1, r0\n\
|
||||
ldr r2, _0800A150 @ =0x000001FF\n\
|
||||
adds r0, r2, #0\n\
|
||||
ands r1, r0\n\
|
||||
ldrh r2, [r3, #2]\n\
|
||||
mov r0, ip\n\
|
||||
ands r0, r2\n\
|
||||
orrs r0, r1\n\
|
||||
strh r0, [r3, #2]\n\
|
||||
ldrh r1, [r4]\n\
|
||||
lsls r1, r1, #3\n\
|
||||
adds r1, r1, r6\n\
|
||||
mov r7, sl\n\
|
||||
ldrb r0, [r7, #4]\n\
|
||||
ldrb r2, [r4, #4]\n\
|
||||
adds r0, r0, r2\n\
|
||||
strb r0, [r1]\n\
|
||||
adds r4, #8\n\
|
||||
subs r5, #1\n\
|
||||
cmp r5, #0\n\
|
||||
bge _0800A03A\n\
|
||||
_0800A098:\n\
|
||||
ldr r6, _0800A140 @ =gUnknown_0200D638\n\
|
||||
ldrh r0, [r6]\n\
|
||||
cmp r0, #1\n\
|
||||
bne _0800A10A\n\
|
||||
ldr r0, _0800A13C @ =gUnknown_0201A450\n\
|
||||
adds r1, r0, #0\n\
|
||||
adds r1, #0x40\n\
|
||||
ldrh r1, [r1]\n\
|
||||
strh r1, [r6, #2]\n\
|
||||
adds r0, #0x42\n\
|
||||
ldrh r0, [r0]\n\
|
||||
strh r0, [r6, #4]\n\
|
||||
ldr r6, _0800A148 @ =gOamBuffer\n\
|
||||
movs r7, #0xd\n\
|
||||
rsbs r7, r7, #0\n\
|
||||
mov ip, r7\n\
|
||||
ldr r4, _0800A140 @ =gUnknown_0200D638\n\
|
||||
adds r4, #8\n\
|
||||
movs r5, #7\n\
|
||||
_0800A0BE:\n\
|
||||
ldrh r2, [r4]\n\
|
||||
lsls r2, r2, #3\n\
|
||||
adds r2, r2, r6\n\
|
||||
ldrb r1, [r2, #5]\n\
|
||||
mov r0, ip\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, #8\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r2, #5]\n\
|
||||
ldrh r3, [r4]\n\
|
||||
lsls r3, r3, #3\n\
|
||||
adds r3, r3, r6\n\
|
||||
movs r0, #2\n\
|
||||
ldrsh r1, [r4, r0]\n\
|
||||
ldr r2, _0800A140 @ =gUnknown_0200D638\n\
|
||||
movs r7, #2\n\
|
||||
ldrsh r0, [r2, r7]\n\
|
||||
adds r1, r1, r0\n\
|
||||
ldr r2, _0800A150 @ =0x000001FF\n\
|
||||
adds r0, r2, #0\n\
|
||||
ands r1, r0\n\
|
||||
ldrh r2, [r3, #2]\n\
|
||||
ldr r0, _0800A14C @ =0xFFFFFE00\n\
|
||||
ands r0, r2\n\
|
||||
orrs r0, r1\n\
|
||||
strh r0, [r3, #2]\n\
|
||||
ldrh r1, [r4]\n\
|
||||
lsls r1, r1, #3\n\
|
||||
adds r1, r1, r6\n\
|
||||
ldr r7, _0800A140 @ =gUnknown_0200D638\n\
|
||||
ldrb r0, [r7, #4]\n\
|
||||
ldrb r2, [r4, #4]\n\
|
||||
adds r0, r0, r2\n\
|
||||
strb r0, [r1]\n\
|
||||
adds r4, #8\n\
|
||||
subs r5, #1\n\
|
||||
cmp r5, #0\n\
|
||||
bge _0800A0BE\n\
|
||||
_0800A10A:\n\
|
||||
movs r0, #0\n\
|
||||
mov r6, r8\n\
|
||||
strh r0, [r6]\n\
|
||||
mov r7, sb\n\
|
||||
strh r0, [r7]\n\
|
||||
mov r1, sl\n\
|
||||
strh r0, [r1]\n\
|
||||
ldr r2, _0800A140 @ =gUnknown_0200D638\n\
|
||||
strh r0, [r2]\n\
|
||||
add sp, #4\n\
|
||||
pop {r3, r4, r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov sb, r4\n\
|
||||
mov sl, r5\n\
|
||||
pop {r4, r5, r6, r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.align 2, 0\n\
|
||||
_0800A12C: .4byte gMain\n\
|
||||
_0800A130: .4byte gUnknown_0201C1B8\n\
|
||||
_0800A134: .4byte gUnknown_0202ADD4\n\
|
||||
_0800A138: .4byte 0x04000050\n\
|
||||
_0800A13C: .4byte gUnknown_0201A450\n\
|
||||
_0800A140: .4byte gUnknown_0200D638\n\
|
||||
_0800A144: .4byte gUnknown_086A769C\n\
|
||||
_0800A148: .4byte gOamBuffer\n\
|
||||
_0800A14C: .4byte 0xFFFFFE00\n\
|
||||
_0800A150: .4byte 0x000001FF");
|
||||
struct OamDataSimple *puVar5;
|
||||
struct SpriteGroup *puVar1;
|
||||
struct SpriteGroup *mainSg3;
|
||||
struct SpriteGroup *mainSg2;
|
||||
struct SpriteGroup *otherSg;
|
||||
int i;
|
||||
const u16 *p;
|
||||
|
||||
gMain.blendControl = 0xF10;
|
||||
gMain.blendAlpha = gUnknown_0201C1B8 | (gUnknown_0202ADD4 << 8);
|
||||
REG_BLDCNT = gMain.blendControl;
|
||||
REG_BLDALPHA = gMain.blendAlpha;
|
||||
|
||||
puVar1 = &gMain.spriteGroups[gUnknown_0201A450.unk18];
|
||||
mainSg3 = &gMain.spriteGroups[3];
|
||||
mainSg2 = &gMain.spriteGroups[2];
|
||||
otherSg = &gUnknown_0200D638;
|
||||
|
||||
puVar1->available = gUnknown_0201A450.unk1C;
|
||||
mainSg3->available = gUnknown_0201A450.unk2C;
|
||||
mainSg2->available = gUnknown_0201A450.unk3C;
|
||||
otherSg->available = gUnknown_0201A450.unk4C;
|
||||
LoadSpriteSets(gUnknown_086A769C, 0x31, gMain.spriteGroups);
|
||||
|
||||
if (puVar1->available == 1)
|
||||
{
|
||||
puVar1->baseX = gUnknown_0201A450.unk10;
|
||||
puVar1->baseY = gUnknown_0201A450.unk12;
|
||||
p = &gUnknown_086A769C[gUnknown_0201A450.unk18]->count;
|
||||
|
||||
for (i = 0;
|
||||
i < *p;
|
||||
i++)
|
||||
{
|
||||
puVar5 = &puVar1->oam[i];
|
||||
gOamBuffer[puVar5->oamId].objMode = 1;
|
||||
gOamBuffer[puVar5->oamId].x = puVar1->oam[i].xOffset + puVar1->baseX;
|
||||
gOamBuffer[puVar5->oamId].y = puVar1->oam[i].yOffset + puVar1->baseY;
|
||||
}
|
||||
}
|
||||
if (mainSg3->available == 1)
|
||||
{
|
||||
mainSg3->baseX = gUnknown_0201A450.unk20;
|
||||
mainSg3->baseY = gUnknown_0201A450.unk22;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
puVar5 = &mainSg3->oam[i];
|
||||
gOamBuffer[puVar5->oamId].objMode = 1;
|
||||
gOamBuffer[puVar5->oamId].priority = 1;
|
||||
gOamBuffer[puVar5->oamId].x = mainSg3->oam[i].xOffset + mainSg3->baseX;
|
||||
gOamBuffer[puVar5->oamId].y = mainSg3->oam[i].yOffset + mainSg3->baseY;
|
||||
}
|
||||
}
|
||||
if (mainSg2->available == 1)
|
||||
{
|
||||
mainSg2->baseX = gUnknown_0201A450.unk30;
|
||||
mainSg2->baseY = gUnknown_0201A450.unk32;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
puVar5 = &mainSg2->oam[i];
|
||||
gOamBuffer[puVar5->oamId].objMode = 0;
|
||||
gOamBuffer[puVar5->oamId].priority = 1;
|
||||
gOamBuffer[puVar5->oamId].x = mainSg2->oam[i].xOffset + mainSg2->baseX;
|
||||
gOamBuffer[puVar5->oamId].y = mainSg2->oam[i].yOffset + mainSg2->baseY;
|
||||
}
|
||||
}
|
||||
if (otherSg->available == 1)
|
||||
{
|
||||
otherSg->baseX = gUnknown_0201A450.unk40;
|
||||
otherSg->baseY = gUnknown_0201A450.unk42;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
puVar5 = &otherSg->oam[i];
|
||||
gOamBuffer[puVar5->oamId].priority = 2;
|
||||
gOamBuffer[puVar5->oamId].x = otherSg->oam[i].xOffset + otherSg->baseX;
|
||||
gOamBuffer[puVar5->oamId].y = otherSg->oam[i].yOffset + otherSg->baseY;
|
||||
}
|
||||
}
|
||||
|
||||
puVar1->available = 0;
|
||||
mainSg3->available = 0;
|
||||
mainSg2->available = 0;
|
||||
otherSg->available = 0; // TODO Possible Bug?
|
||||
}
|
||||
|
||||
void sub_A154(void)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user