through sub_80C4BB8

This commit is contained in:
PikalaxALT
2020-01-07 14:47:12 -05:00
parent b39a83fc03
commit 62e29fdc9e
2 changed files with 148 additions and 446 deletions
-414
View File
@@ -5,420 +5,6 @@
.text
thumb_func_start sub_80C48BC
sub_80C48BC: @ 80C48BC
push {r4-r7,lr}
lsls r0, 24
lsrs r4, r0, 24
lsls r1, 24
lsrs r1, 24
lsls r2, 24
lsrs r5, r2, 24
cmp r1, 0x19
bne _080C4920
movs r3, 0
ldr r0, _080C491C @ =gUnknown_20399EC
mov r12, r0
movs r1, 0x1
adds r0, r5, 0
ands r0, r1
lsls r5, r0, 2
movs r6, 0x5
negs r6, r6
_080C48E0:
mov r7, r12
ldr r1, [r7]
lsls r2, r3, 4
adds r0, r1, r2
movs r7, 0xB5
lsls r7, 2
adds r0, r7
ldrb r0, [r0]
cmp r0, r4
beq _080C48F8
cmp r4, 0xFF
bne _080C490E
_080C48F8:
movs r7, 0xB6
lsls r7, 2
adds r0, r1, r7
adds r0, r2
ldr r1, [r0]
adds r1, 0x3E
ldrb r2, [r1]
adds r0, r6, 0
ands r0, r2
orrs r0, r5
strb r0, [r1]
_080C490E:
adds r0, r3, 0x1
lsls r0, 24
lsrs r3, r0, 24
cmp r3, 0x18
bls _080C48E0
b _080C4954
.align 2, 0
_080C491C: .4byte gUnknown_20399EC
_080C4920:
ldr r0, _080C495C @ =gUnknown_20399EC
ldr r2, [r0]
lsls r1, 4
adds r0, r2, r1
movs r3, 0xB5
lsls r3, 2
adds r0, r3
ldrb r0, [r0]
cmp r0, r4
bne _080C4954
movs r7, 0xB6
lsls r7, 2
adds r0, r2, r7
adds r0, r1
ldr r2, [r0]
adds r2, 0x3E
movs r0, 0x1
adds r1, r5, 0
ands r1, r0
lsls r1, 2
ldrb r3, [r2]
movs r0, 0x5
negs r0, r0
ands r0, r3
orrs r0, r1
strb r0, [r2]
_080C4954:
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080C495C: .4byte gUnknown_20399EC
thumb_func_end sub_80C48BC
thumb_func_start sub_80C4960
sub_80C4960: @ 80C4960
push {r4-r7,lr}
lsls r0, 24
lsrs r4, r0, 24
lsls r1, 24
lsrs r1, 24
lsls r2, 24
lsrs r5, r2, 24
cmp r1, 0x19
bne _080C49C4
movs r3, 0
ldr r0, _080C49C0 @ =gUnknown_20399EC
mov r12, r0
movs r1, 0x1
adds r0, r5, 0
ands r0, r1
lsls r5, r0, 2
movs r6, 0x5
negs r6, r6
_080C4984:
mov r7, r12
ldr r1, [r7]
lsls r2, r3, 4
adds r0, r1, r2
movs r7, 0xA2
lsls r7, 1
adds r0, r7
ldrb r0, [r0]
cmp r0, r4
beq _080C499C
cmp r4, 0xFF
bne _080C49B2
_080C499C:
movs r7, 0xA4
lsls r7, 1
adds r0, r1, r7
adds r0, r2
ldr r1, [r0]
adds r1, 0x3E
ldrb r2, [r1]
adds r0, r6, 0
ands r0, r2
orrs r0, r5
strb r0, [r1]
_080C49B2:
adds r0, r3, 0x1
lsls r0, 24
lsrs r3, r0, 24
cmp r3, 0x18
bls _080C4984
b _080C49F8
.align 2, 0
_080C49C0: .4byte gUnknown_20399EC
_080C49C4:
ldr r0, _080C4A00 @ =gUnknown_20399EC
ldr r2, [r0]
lsls r1, 4
adds r0, r2, r1
movs r3, 0xA2
lsls r3, 1
adds r0, r3
ldrb r0, [r0]
cmp r0, r4
beq _080C49F8
movs r7, 0xA4
lsls r7, 1
adds r0, r2, r7
adds r0, r1
ldr r2, [r0]
adds r2, 0x3E
movs r0, 0x1
adds r1, r5, 0
ands r1, r0
lsls r1, 2
ldrb r3, [r2]
movs r0, 0x5
negs r0, r0
ands r0, r3
orrs r0, r1
strb r0, [r2]
_080C49F8:
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080C4A00: .4byte gUnknown_20399EC
thumb_func_end sub_80C4960
thumb_func_start sub_80C4A04
sub_80C4A04: @ 80C4A04
push {r4-r6,lr}
movs r5, 0
ldr r6, _080C4AA4 @ =gUnknown_20399EC
_080C4A0A:
ldr r0, [r6]
lsls r4, r5, 4
movs r1, 0xB6
lsls r1, 2
adds r0, r1
adds r0, r4
ldr r0, [r0]
cmp r0, 0
beq _080C4A3E
bl DestroySprite
ldr r0, [r6]
adds r0, r4
movs r1, 0xB7
lsls r1, 2
adds r0, r1
ldrh r0, [r0]
bl FreeSpriteTilesByTag
ldr r0, [r6]
adds r0, r4
ldr r1, _080C4AA8 @ =0x000002de
adds r0, r1
ldrh r0, [r0]
bl FreeSpritePaletteByTag
_080C4A3E:
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x18
bls _080C4A0A
movs r5, 0
ldr r6, _080C4AA4 @ =gUnknown_20399EC
_080C4A4C:
ldr r0, [r6]
lsls r4, r5, 4
movs r1, 0xA4
lsls r1, 1
adds r0, r1
adds r0, r4
ldr r0, [r0]
cmp r0, 0
beq _080C4A82
bl DestroySprite
ldr r0, [r6]
adds r0, r4
movs r1, 0xA6
lsls r1, 1
adds r0, r1
ldrh r0, [r0]
bl FreeSpriteTilesByTag
ldr r0, [r6]
adds r0, r4
movs r1, 0xA7
lsls r1, 1
adds r0, r1
ldrh r0, [r0]
bl FreeSpritePaletteByTag
_080C4A82:
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x18
bls _080C4A4C
ldr r4, _080C4AA4 @ =gUnknown_20399EC
ldr r0, [r4]
cmp r0, 0
beq _080C4A9C
bl Free
movs r0, 0
str r0, [r4]
_080C4A9C:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080C4AA4: .4byte gUnknown_20399EC
_080C4AA8: .4byte 0x000002de
thumb_func_end sub_80C4A04
thumb_func_start sub_80C4AAC
sub_80C4AAC: @ 80C4AAC
push {r4,lr}
lsls r0, 24
ldr r1, _080C4B24 @ =gUnknown_20399F0
lsrs r0, 22
adds r4, r0, r1
ldr r0, [r4]
cmp r0, 0
bne _080C4B28
movs r0, 0x14
bl AllocZeroed
str r0, [r4]
movs r0, 0x50
bl GetGpuReg
ldr r1, [r4]
strh r0, [r1]
movs r0, 0x54
bl GetGpuReg
ldr r1, [r4]
strh r0, [r1, 0x2]
movs r0, 0x52
bl GetGpuReg
ldr r1, [r4]
strh r0, [r1, 0x4]
movs r0, 0x48
bl GetGpuReg
ldr r1, [r4]
strh r0, [r1, 0x6]
movs r0, 0x4A
bl GetGpuReg
ldr r1, [r4]
strh r0, [r1, 0x8]
movs r0, 0x40
bl GetGpuReg
ldr r1, [r4]
strh r0, [r1, 0xA]
movs r0, 0x42
bl GetGpuReg
ldr r1, [r4]
strh r0, [r1, 0xC]
movs r0, 0x44
bl GetGpuReg
ldr r1, [r4]
strh r0, [r1, 0xE]
movs r0, 0x46
bl GetGpuReg
ldr r1, [r4]
strh r0, [r1, 0x10]
movs r0, 0x1
b _080C4B2A
.align 2, 0
_080C4B24: .4byte gUnknown_20399F0
_080C4B28:
movs r0, 0
_080C4B2A:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80C4AAC
thumb_func_start sub_80C4B30
sub_80C4B30: @ 80C4B30
push {r4,lr}
lsls r0, 24
ldr r1, _080C4B44 @ =gUnknown_20399F0
lsrs r0, 22
adds r4, r0, r1
ldr r0, [r4]
cmp r0, 0
bne _080C4B48
movs r0, 0
b _080C4BB0
.align 2, 0
_080C4B44: .4byte gUnknown_20399F0
_080C4B48:
ldrh r1, [r0]
movs r0, 0x50
bl SetGpuReg
ldr r0, [r4]
ldrh r1, [r0, 0x2]
movs r0, 0x54
bl SetGpuReg
ldr r0, [r4]
ldrh r1, [r0, 0x4]
movs r0, 0x52
bl SetGpuReg
ldr r0, [r4]
ldrh r1, [r0, 0x6]
movs r0, 0x48
bl SetGpuReg
ldr r0, [r4]
ldrh r1, [r0, 0x8]
movs r0, 0x4A
bl SetGpuReg
ldr r0, [r4]
ldrh r1, [r0, 0xA]
movs r0, 0x40
bl SetGpuReg
ldr r0, [r4]
ldrh r1, [r0, 0xC]
movs r0, 0x42
bl SetGpuReg
ldr r0, [r4]
ldrh r1, [r0, 0xE]
movs r0, 0x44
bl SetGpuReg
ldr r0, [r4]
ldrh r1, [r0, 0x10]
movs r0, 0x46
bl SetGpuReg
ldr r0, [r4]
cmp r0, 0
beq _080C4BAE
bl Free
movs r0, 0
str r0, [r4]
_080C4BAE:
movs r0, 0x1
_080C4BB0:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80C4B30
thumb_func_start sub_80C4BB8
sub_80C4BB8: @ 80C4BB8
push {r4-r6,lr}
movs r5, 0
ldr r6, _080C4BE0 @ =gUnknown_20399F0
_080C4BBE:
lsls r0, r5, 2
adds r4, r0, r6
ldr r0, [r4]
cmp r0, 0
beq _080C4BD0
bl Free
movs r0, 0
str r0, [r4]
_080C4BD0:
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x2
bls _080C4BBE
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080C4BE0: .4byte gUnknown_20399F0
thumb_func_end sub_80C4BB8
thumb_func_start sub_80C4BE4
sub_80C4BE4: @ 80C4BE4
push {lr}
+148 -32
View File
@@ -173,21 +173,21 @@ struct UnkStruct_20399E8
u16 field_0C[0x40];
}; // size = 0x8C
struct UnkStruct_20399EC_2D4
struct UnkStruct_20399EC_140
{
u8 field_0;
struct Sprite * field_4;
u8 filler_8[8];
u8 filler_0[4];
u8 field_4;
struct Sprite * field_8;
u16 field_C;
u16 field_E;
};
struct UnkStruct_20399EC
{
u8 field_000[0x40];
u8 field_040[0x100];
u8 field_140[4];
struct UnkStruct_20399EC_2D4 field_144[25];
struct UnkStruct_20399EC_2D4 field_2D4[24];
u8 field_454[0xC];
struct UnkStruct_20399EC_140 field_140[25];
struct UnkStruct_20399EC_140 field_2D0[25];
u8 field_460;
u8 filler_461[2];
u8 field_463;
@@ -195,6 +195,19 @@ struct UnkStruct_20399EC
TaskFunc field_468;
}; // size = 0x46C
struct UnkStruct_20399F0
{
u16 bldcnt;
u16 bldy;
u16 bldalpha;
u16 winin;
u16 winout;
u16 win0h;
u16 win1h;
u16 win0v;
u16 win1v;
};
EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL;
EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL;
EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL;
@@ -202,7 +215,7 @@ EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL;
EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL;
EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL;
EWRAM_DATA struct UnkStruct_20399EC * gUnknown_20399EC = NULL;
EWRAM_DATA void * gUnknown_20399F0[3] = {};
EWRAM_DATA struct UnkStruct_20399F0 * gUnknown_20399F0[3] = {};
EWRAM_DATA void * gUnknown_20399FC = NULL;
static void sub_80BFFD0(void);
@@ -284,11 +297,11 @@ void sub_80C440C(u8 taskId);
void sub_80C44E4(u8 taskId);
void sub_80C4750(void);
void sub_80C47F0(void);
void sub_80C48BC(u8 a0, u8 a1, u8 a2);
void sub_80C4960(u8 a0, u8 a1, u8 a2);
void sub_80C48BC(u8 a0, u8 a1, bool8 a2);
void sub_80C4960(u8 a0, u8 a1, bool8 a2);
void sub_80C4A04(void);
void sub_80C4B30(u8 a0);
void sub_80C4AAC(u8 a0);
bool8 sub_80C4AAC(u8 a0);
bool8 sub_80C4B30(u8 a0);
void sub_80C4BE4(void);
void sub_80C4C2C(u8 a0, u16 a1, u16 a2);
void sub_80C4C48(u16 a0);
@@ -636,8 +649,8 @@ void sub_80C04E4(u8 taskId)
sub_80C4ED0(FALSE);
sub_80C4324(FALSE);
sub_80C3154(FALSE);
sub_80C48BC(sub_80C0E20(), 25, 0);
sub_80C4960(sub_80C0E20(), 25, 0);
sub_80C48BC(sub_80C0E20(), 25, FALSE);
sub_80C4960(sub_80C0E20(), 25, FALSE);
}
gUnknown_20399D4->field_47A0++;
break;
@@ -1109,8 +1122,8 @@ void sub_80C1098(u8 taskId)
if (sub_80C0E34() == gUnknown_20399D8->field_1CCA)
{
sub_80C4324(FALSE);
sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0);
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0);
sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, FALSE);
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, FALSE);
}
gUnknown_20399D8->field_1CC8++;
}
@@ -1243,8 +1256,8 @@ bool8 sub_80C1478(void)
gUnknown_20399D8->field_1CCA = gUnknown_20399D8->field_1CCB;
sub_80C0CC8(0, gUnknown_20399D4->field_0026[gUnknown_20399D8->field_1CCA]);
CopyBgTilemapBufferToVram(0);
sub_80C48BC(255, 25, 1);
sub_80C4960(255, 25, 1);
sub_80C48BC(255, 25, TRUE);
sub_80C4960(255, 25, TRUE);
return TRUE;
}
if (r6)
@@ -1253,10 +1266,10 @@ bool8 sub_80C1478(void)
sub_80C4E74(gUnknown_8418EB0);
CopyBgTilemapBufferToVram(0);
CopyBgTilemapBufferToVram(3);
sub_80C48BC(255, 25, 1);
sub_80C4960(255, 25, 1);
sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0);
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0);
sub_80C48BC(255, 25, TRUE);
sub_80C4960(255, 25, TRUE);
sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, FALSE);
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, FALSE);
}
if (gUnknown_20399D8->field_1CCA != sub_80C0E34())
sub_80C4324(TRUE);
@@ -1828,8 +1841,8 @@ void sub_80C267C(u8 taskId)
gUnknown_20399E0->field_CD0 = 15;
sub_80C253C();
sub_80C0A88(0);
sub_80C48BC(sub_80C0E20(), 25, 0);
sub_80C4960(sub_80C0E20(), 25, 0);
sub_80C48BC(sub_80C0E20(), 25, FALSE);
sub_80C4960(sub_80C0E20(), 25, FALSE);
gUnknown_20399E0->field_CCC++;
break;
case 9:
@@ -2002,8 +2015,8 @@ void sub_80C2C7C(u8 taskId)
sub_80C22C4(6, FALSE);
sub_80C4324(TRUE);
sub_80C3154(TRUE);
sub_80C4960(255, 25, 1);
sub_80C48BC(255, 25, 1);
sub_80C4960(255, 25, TRUE);
sub_80C48BC(255, 25, TRUE);
gUnknown_20399E0->field_CCE = 0;
gUnknown_20399E0->field_CD0 = 0;
gUnknown_20399E0->field_CCF++;
@@ -2935,9 +2948,9 @@ void sub_80C450C(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5)
LoadSpriteSheet(&spriteSheet);
LoadSpritePalette(&spritePalette);
spriteId = CreateSprite(&template, 8 * a2 + 36, 8 * a3 + 36, 1);
gUnknown_20399EC->field_2D4[a1].field_4 = &gSprites[spriteId];
gUnknown_20399EC->field_2D0[a1].field_8 = &gSprites[spriteId];
gSprites[spriteId].invisible = TRUE;
gUnknown_20399EC->field_2D4[a1].field_0 = a0;
gUnknown_20399EC->field_2D0[a1].field_4 = a0;
}
void sub_80C4614(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5)
@@ -2970,9 +2983,9 @@ void sub_80C4614(u8 a0, u8 a1, u16 a2, u16 a3, u8 a4, u8 a5)
if ((sub_80C35DC(r4) == 2 || sub_80C35DC(r4) == 3) && r4 != MAPSEC_ROUTE_10_FLYDUP)
r7 = 2;
spriteId = CreateSprite(&template, 8 * a2 + 36 + r7, 8 * a3 + 36 + r7, 3);
gUnknown_20399EC->field_144[a1].field_4 = &gSprites[spriteId];
gUnknown_20399EC->field_140[a1].field_8 = &gSprites[spriteId];
gSprites[spriteId].invisible = TRUE;
gUnknown_20399EC->field_144[a1].field_0 = a0;
gUnknown_20399EC->field_140[a1].field_4 = a0;
}
void sub_80C4750(void)
@@ -3017,10 +3030,113 @@ void sub_80C47F0(void)
sub_80C4614(i, r6, k, j, r6 + 35, 10);
if (sub_80C3878(mapsec) != 2)
{
StartSpriteAnim(gUnknown_20399EC->field_144[r6].field_4, 1);
StartSpriteAnim(gUnknown_20399EC->field_140[r6].field_8, 1);
}
r6++;
}
}
}
}
void sub_80C48BC(u8 a0, u8 a1, bool8 a2)
{
u8 i;
if (a1 == 25)
{
for (i = 0; i < 25; i++)
{
if (gUnknown_20399EC->field_2D0[i].field_4 == a0 || a0 == 0xFF)
gUnknown_20399EC->field_2D0[i].field_8->invisible = a2;
}
}
else
{
if (gUnknown_20399EC->field_2D0[a1].field_4 == a0)
gUnknown_20399EC->field_2D0[a1].field_8->invisible = a2;
}
}
void sub_80C4960(u8 a0, u8 a1, bool8 a2)
{
u8 i;
if (a1 == 25)
{
for (i = 0; i < 25; i++)
{
if (gUnknown_20399EC->field_140[i].field_4 == a0 || a0 == 0xFF)
gUnknown_20399EC->field_140[i].field_8->invisible = a2;
}
}
else
{
if (gUnknown_20399EC->field_140[a1].field_4 != a0)
gUnknown_20399EC->field_140[a1].field_8->invisible = a2;
}
}
void sub_80C4A04(void)
{
u8 i;
for (i = 0; i < 25; i++)
{
if (gUnknown_20399EC->field_2D0[i].field_8 != NULL)
{
DestroySprite(gUnknown_20399EC->field_2D0[i].field_8);
FreeSpriteTilesByTag(gUnknown_20399EC->field_2D0[i].field_C);
FreeSpritePaletteByTag(gUnknown_20399EC->field_2D0[i].field_E);
}
}
for (i = 0; i < 25; i++)
{
if (gUnknown_20399EC->field_140[i].field_8 != NULL)
{
DestroySprite(gUnknown_20399EC->field_140[i].field_8);
FreeSpriteTilesByTag(gUnknown_20399EC->field_140[i].field_C);
FreeSpritePaletteByTag(gUnknown_20399EC->field_140[i].field_E);
}
}
FREE_IF_NOT_NULL(gUnknown_20399EC);
}
bool8 sub_80C4AAC(u8 a0)
{
if (gUnknown_20399F0[a0] != NULL)
return FALSE;
gUnknown_20399F0[a0] = AllocZeroed(sizeof(struct UnkStruct_20399F0));
gUnknown_20399F0[a0]->bldcnt = GetGpuReg(REG_OFFSET_BLDCNT);
gUnknown_20399F0[a0]->bldy = GetGpuReg(REG_OFFSET_BLDY);
gUnknown_20399F0[a0]->bldalpha = GetGpuReg(REG_OFFSET_BLDALPHA);
gUnknown_20399F0[a0]->winin = GetGpuReg(REG_OFFSET_WININ);
gUnknown_20399F0[a0]->winout = GetGpuReg(REG_OFFSET_WINOUT);
gUnknown_20399F0[a0]->win0h = GetGpuReg(REG_OFFSET_WIN0H);
gUnknown_20399F0[a0]->win1h = GetGpuReg(REG_OFFSET_WIN1H);
gUnknown_20399F0[a0]->win0v = GetGpuReg(REG_OFFSET_WIN0V);
gUnknown_20399F0[a0]->win1v = GetGpuReg(REG_OFFSET_WIN1V);
return TRUE;
}
bool8 sub_80C4B30(u8 a0)
{
if (gUnknown_20399F0[a0] == NULL)
return FALSE;
SetGpuReg(REG_OFFSET_BLDCNT, gUnknown_20399F0[a0]->bldcnt);
SetGpuReg(REG_OFFSET_BLDY, gUnknown_20399F0[a0]->bldy);
SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_20399F0[a0]->bldalpha);
SetGpuReg(REG_OFFSET_WININ, gUnknown_20399F0[a0]->winin);
SetGpuReg(REG_OFFSET_WINOUT, gUnknown_20399F0[a0]->winout);
SetGpuReg(REG_OFFSET_WIN0H, gUnknown_20399F0[a0]->win0h);
SetGpuReg(REG_OFFSET_WIN1H, gUnknown_20399F0[a0]->win1h);
SetGpuReg(REG_OFFSET_WIN0V, gUnknown_20399F0[a0]->win0v);
SetGpuReg(REG_OFFSET_WIN1V, gUnknown_20399F0[a0]->win1v);
FREE_IF_NOT_NULL(gUnknown_20399F0[a0]);
return TRUE;
}
void sub_80C4BB8(void)
{
u8 i;
for (i = 0; i < 3; i++)
{
FREE_IF_NOT_NULL(gUnknown_20399F0[i]);
}
}