through sub_80C438C

This commit is contained in:
PikalaxALT 2020-01-07 12:49:19 -05:00
parent e34c1fd3d6
commit e4d869bfc6
2 changed files with 121 additions and 304 deletions

View File

@ -5,299 +5,6 @@
.text
thumb_func_start sub_80C4164
sub_80C4164: @ 80C4164
push {r4,r5,lr}
lsls r0, 24
lsrs r0, 24
adds r5, r0, 0
lsls r1, 24
lsrs r4, r1, 24
lsls r2, 16
lsrs r2, 16
lsls r3, 16
lsrs r1, r3, 16
cmp r0, 0x1
beq _080C4198
cmp r0, 0x1
bgt _080C4186
cmp r0, 0
beq _080C4190
b _080C41D0
_080C4186:
cmp r5, 0x2
beq _080C41A0
cmp r5, 0x3
beq _080C41A8
b _080C41D0
_080C4190:
ldr r3, _080C4194 @ =gUnknown_83F2490
b _080C41AA
.align 2, 0
_080C4194: .4byte gUnknown_83F2490
_080C4198:
ldr r3, _080C419C @ =gUnknown_83F2724
b _080C41AA
.align 2, 0
_080C419C: .4byte gUnknown_83F2724
_080C41A0:
ldr r3, _080C41A4 @ =gUnknown_83F29B8
b _080C41AA
.align 2, 0
_080C41A4: .4byte gUnknown_83F29B8
_080C41A8:
ldr r3, _080C41CC @ =gUnknown_83F2C4C
_080C41AA:
lsls r1, 16
asrs r1, 16
lsls r0, r2, 16
asrs r0, 16
movs r2, 0x16
muls r0, r2
adds r1, r0
lsls r0, r4, 2
adds r0, r4
lsls r2, r0, 5
adds r0, r2
lsls r0, 1
adds r1, r0
adds r1, r3
ldrb r0, [r1]
b _080C41D2
.align 2, 0
_080C41CC: .4byte gUnknown_83F2C4C
_080C41D0:
movs r0, 0xC5
_080C41D2:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_80C4164
thumb_func_start sub_80C41D8
sub_80C41D8: @ 80C41D8
push {r4-r6,lr}
lsls r0, 16
lsrs r6, r0, 16
lsls r1, 16
lsrs r5, r1, 16
ldr r4, _080C4204 @ =gUnknown_20399E8
movs r0, 0x8C
bl AllocZeroed
adds r1, r0, 0
str r1, [r4]
ldr r0, _080C4208 @ =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x8]
cmp r0, 0x1
bne _080C4210
ldr r0, _080C420C @ =gUnknown_83EF59C
adds r1, 0xC
bl LZ77UnCompWram
b _080C4218
.align 2, 0
_080C4204: .4byte gUnknown_20399E8
_080C4208: .4byte gSaveBlock2Ptr
_080C420C: .4byte gUnknown_83EF59C
_080C4210:
ldr r0, _080C423C @ =gUnknown_83EF524
adds r1, 0xC
bl LZ77UnCompWram
_080C4218:
ldr r4, _080C4240 @ =gUnknown_20399E8
ldr r0, [r4]
strh r6, [r0, 0x8]
strh r5, [r0, 0xA]
bl sub_80C3508
ldr r1, [r4]
strh r0, [r1]
bl sub_80C3514
ldr r1, [r4]
strh r0, [r1, 0x2]
bl sub_80C4244
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080C423C: .4byte gUnknown_83EF524
_080C4240: .4byte gUnknown_20399E8
thumb_func_end sub_80C41D8
thumb_func_start sub_80C4244
sub_80C4244: @ 80C4244
push {r4-r6,lr}
sub sp, 0x40
ldr r6, _080C42FC @ =gUnknown_20399E8
ldr r2, [r6]
adds r0, r2, 0
adds r0, 0xC
str r0, [sp, 0x30]
movs r1, 0x80
add r5, sp, 0x30
str r1, [r5, 0x4]
ldrh r0, [r2, 0x8]
lsls r0, 16
orrs r0, r1
str r0, [r5, 0x4]
ldr r0, _080C4300 @ =gUnknown_83EF27C
str r0, [sp, 0x38]
ldrh r3, [r2, 0xA]
ldr r1, _080C4304 @ =0xffff0000
add r4, sp, 0x38
ldr r0, [r4, 0x4]
ands r0, r1
orrs r0, r3
str r0, [r4, 0x4]
ldrh r0, [r2, 0x8]
add r1, sp, 0x18
movs r3, 0
strh r0, [r1]
ldrh r2, [r2, 0xA]
mov r0, sp
adds r0, 0x1A
strh r2, [r0]
ldr r0, _080C4308 @ =gUnknown_83F1C54
str r0, [sp, 0x1C]
ldr r0, _080C430C @ =gUnknown_83F1C64
str r0, [sp, 0x20]
str r3, [sp, 0x24]
ldr r0, _080C4310 @ =gDummySpriteAffineAnimTable
str r0, [sp, 0x28]
ldr r0, _080C4314 @ =SpriteCallbackDummy
str r0, [sp, 0x2C]
mov r0, sp
movs r2, 0x18
bl memcpy
ldr r0, _080C4318 @ =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r0, [r0, 0x8]
cmp r0, 0x1
bne _080C42AA
ldr r0, _080C431C @ =gUnknown_83EF29C
str r0, [sp, 0x38]
_080C42AA:
adds r0, r5, 0
bl LoadSpriteSheet
adds r0, r4, 0
bl LoadSpritePalette
ldr r0, [r6]
movs r2, 0
ldrsh r1, [r0, r2]
lsls r1, 19
movs r3, 0x90
lsls r3, 14
adds r1, r3
asrs r1, 16
movs r3, 0x2
ldrsh r2, [r0, r3]
lsls r2, 19
movs r0, 0x90
lsls r0, 14
adds r2, r0
asrs r2, 16
mov r0, sp
movs r3, 0x2
bl CreateSprite
lsls r0, 24
lsrs r0, 24
ldr r2, [r6]
lsls r1, r0, 4
adds r1, r0
lsls r1, 2
ldr r0, _080C4320 @ =gSprites
adds r1, r0
str r1, [r2, 0x4]
movs r0, 0x1
bl sub_80C4324
add sp, 0x40
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080C42FC: .4byte gUnknown_20399E8
_080C4300: .4byte gUnknown_83EF27C
_080C4304: .4byte 0xffff0000
_080C4308: .4byte gUnknown_83F1C54
_080C430C: .4byte gUnknown_83F1C64
_080C4310: .4byte gDummySpriteAffineAnimTable
_080C4314: .4byte SpriteCallbackDummy
_080C4318: .4byte gSaveBlock2Ptr
_080C431C: .4byte gUnknown_83EF29C
_080C4320: .4byte gSprites
thumb_func_end sub_80C4244
thumb_func_start sub_80C4324
sub_80C4324: @ 80C4324
lsls r0, 24
lsrs r0, 24
ldr r1, _080C4344 @ =gUnknown_20399E8
ldr r1, [r1]
ldr r2, [r1, 0x4]
adds r2, 0x3E
movs r1, 0x1
ands r0, r1
lsls r0, 2
ldrb r3, [r2]
movs r1, 0x5
negs r1, r1
ands r1, r3
orrs r1, r0
strb r1, [r2]
bx lr
.align 2, 0
_080C4344: .4byte gUnknown_20399E8
thumb_func_end sub_80C4324
thumb_func_start sub_80C4348
sub_80C4348: @ 80C4348
push {r4,lr}
ldr r4, _080C437C @ =gUnknown_20399E8
ldr r0, [r4]
ldr r0, [r0, 0x4]
cmp r0, 0
beq _080C4368
bl DestroySprite
ldr r0, [r4]
ldrh r0, [r0, 0x8]
bl FreeSpriteTilesByTag
ldr r0, [r4]
ldrh r0, [r0, 0xA]
bl FreeSpritePaletteByTag
_080C4368:
ldr r0, [r4]
cmp r0, 0
beq _080C4376
bl Free
movs r0, 0
str r0, [r4]
_080C4376:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080C437C: .4byte gUnknown_20399E8
thumb_func_end sub_80C4348
thumb_func_start sub_80C4380
sub_80C4380: @ 80C4380
ldr r0, _080C4388 @ =gUnknown_20399E8
ldr r0, [r0]
ldrh r0, [r0]
bx lr
.align 2, 0
_080C4388: .4byte gUnknown_20399E8
thumb_func_end sub_80C4380
thumb_func_start sub_80C438C
sub_80C438C: @ 80C438C
ldr r0, _080C4394 @ =gUnknown_20399E8
ldr r0, [r0]
ldrh r0, [r0, 0x2]
bx lr
.align 2, 0
_080C4394: .4byte gUnknown_20399E8
thumb_func_end sub_80C438C
thumb_func_start sub_80C4398
sub_80C4398: @ 80C4398
push {r4-r6,lr}

View File

@ -163,12 +163,22 @@ struct UnkStruct_20399E4
u16 field_024[0x080];
};
struct UnkStruct_20399E8
{
s16 field_00;
s16 field_02;
struct Sprite * field_04;
u16 field_08;
u16 field_0A;
u16 field_0C[0x40];
};
EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL;
EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL;
EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL;
EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL;
EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL;
EWRAM_DATA void * gUnknown_20399E8 = NULL;
EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL;
EWRAM_DATA void * gUnknown_20399EC = NULL;
EWRAM_DATA void * gUnknown_20399F0[3] = {};
EWRAM_DATA void * gUnknown_20399FC = NULL;
@ -232,14 +242,18 @@ u8 sub_80C31C0(void);
u8 sub_80C3348(void);
u8 sub_80C3400(void);
void sub_80C3418(void);
u16 sub_80C3508(void);
u16 sub_80C3514(void);
u16 sub_80C3520(void);
u16 sub_80C3580(void);
u8 sub_80C35DC(u8 a0);
u8 sub_80C3878(u8 a0);
u8 sub_80C3AC8(u8 a0);
void sub_80C3D40(void);
u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3);
void sub_80C41D8(u16 a0, u16 a1);
void sub_80C4324(u8 a0);
void sub_80C4244(void);
void sub_80C4324(bool8 a0);
void sub_80C4348(void);
u16 sub_80C4380();
u16 sub_80C438C();
@ -262,19 +276,20 @@ void sub_80C4E18(const u8 *str);
void sub_80C4E74(const u8 *str);
void sub_80C4ED0(bool8 a0);
void sub_80C4F08(u8 taskId);
u16 sub_80C3508(void);
u16 sub_80C3514(void);
u16 sub_80C3580(void);
#include "data/text/map_section_names.h"
extern const u16 gUnknown_83EF23C[];
extern const u16 gUnknown_83EF25C[];
extern const u16 gUnknown_83EF27C[];
extern const u16 gUnknown_83EF29C[];
extern const u16 gUnknown_83EF2DC[];
extern const u16 gUnknown_83EF384[];
extern const u16 gUnknown_83EF3A4[];
extern const u32 gUnknown_83EF3C4[];
extern const u32 gUnknown_83EF450[];
extern const u32 gUnknown_83EF4E0[];
extern const u32 gUnknown_83EF524[];
extern const u32 gUnknown_83EF59C[];
extern const u32 gUnknown_83EF61C[];
extern const u32 gUnknown_83F0330[];
extern const u32 gUnknown_83F0E0C[];
@ -310,9 +325,15 @@ extern const union AnimCmd *const gUnknown_83F1C30[];
extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34;
extern const struct OamData gUnknown_83F1C3C;
extern const union AnimCmd *const gUnknown_83F1C50[];
extern const struct OamData gUnknown_83F1C54;
extern const union AnimCmd *const gUnknown_83F1C64[];
extern const u8 *const gUnknown_83F1CAC[];
extern const u16 gUnknown_83F1E60[][2];
extern const u16 gUnknown_83F2178[][2];
extern const u8 gUnknown_83F2490[][15][22];
extern const u8 gUnknown_83F2724[][15][22];
extern const u8 gUnknown_83F29B8[][15][22];
extern const u8 gUnknown_83F2C4C[][15][22];
static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint)
{
@ -580,7 +601,7 @@ void sub_80C04E4(u8 taskId)
sub_80C4E18(gUnknown_8418EB5);
sub_80C4E74(gUnknown_8418E8B);
sub_80C4ED0(FALSE);
sub_80C4324(0);
sub_80C4324(FALSE);
sub_80C3154(FALSE);
sub_80C48BC(sub_80C0E20(), 25, 0);
sub_80C4960(sub_80C0E20(), 25, 0);
@ -1054,7 +1075,7 @@ void sub_80C1098(u8 taskId)
sub_80C0E48(gUnknown_20399D8->field_1CCA);
if (sub_80C0E34() == gUnknown_20399D8->field_1CCA)
{
sub_80C4324(0);
sub_80C4324(FALSE);
sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0);
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0);
}
@ -1205,9 +1226,9 @@ bool8 sub_80C1478(void)
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0);
}
if (gUnknown_20399D8->field_1CCA != sub_80C0E34())
sub_80C4324(1);
sub_80C4324(TRUE);
else
sub_80C4324(0);
sub_80C4324(FALSE);
sub_80C4CF0(1, &data);
return FALSE;
}
@ -1766,7 +1787,7 @@ void sub_80C267C(u8 taskId)
gUnknown_20399E0->field_CCC++;
break;
case 7:
sub_80C4324(0);
sub_80C4324(FALSE);
sub_80C3154(FALSE);
gUnknown_20399E0->field_CCC++;
break;
@ -1946,7 +1967,7 @@ void sub_80C2C7C(u8 taskId)
break;
case 3:
sub_80C22C4(6, FALSE);
sub_80C4324(1);
sub_80C4324(TRUE);
sub_80C3154(TRUE);
sub_80C4960(255, 25, 1);
sub_80C48BC(255, 25, 1);
@ -2719,3 +2740,92 @@ void sub_80C3D40(void)
}
gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000);
}
u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3)
{
switch (a0)
{
case 0:
return gUnknown_83F2490[a1][a2][a3];
case 1:
return gUnknown_83F2724[a1][a2][a3];
case 2:
return gUnknown_83F29B8[a1][a2][a3];
case 3:
return gUnknown_83F2C4C[a1][a2][a3];
default:
return MAPSEC_NONE;
}
}
void sub_80C41D8(u16 a0, u16 a1)
{
gUnknown_20399E8 = AllocZeroed(sizeof(struct UnkStruct_20399E8));
if (gSaveBlock2Ptr->playerGender == FEMALE)
LZ77UnCompWram(gUnknown_83EF59C, gUnknown_20399E8->field_0C);
else
LZ77UnCompWram(gUnknown_83EF524, gUnknown_20399E8->field_0C);
gUnknown_20399E8->field_08 = a0;
gUnknown_20399E8->field_0A = a1;
gUnknown_20399E8->field_00 = sub_80C3508();
gUnknown_20399E8->field_02 = sub_80C3514();
sub_80C4244();
}
void sub_80C4244(void)
{
u8 spriteId;
struct SpriteSheet spriteSheet = {
.data = gUnknown_20399E8->field_0C,
.size = 0x80,
.tag = gUnknown_20399E8->field_08
};
struct SpritePalette spritePalette = {
.data = gUnknown_83EF27C,
.tag = gUnknown_20399E8->field_0A
};
struct SpriteTemplate template = {
.tileTag = gUnknown_20399E8->field_08,
.paletteTag = gUnknown_20399E8->field_0A,
.oam = &gUnknown_83F1C54,
.anims = gUnknown_83F1C64,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
if (gSaveBlock2Ptr->playerGender == FEMALE)
spritePalette.data = gUnknown_83EF29C;
LoadSpriteSheet(&spriteSheet);
LoadSpritePalette(&spritePalette);
spriteId = CreateSprite(&template, 8 * gUnknown_20399E8->field_00 + 36, 8 * gUnknown_20399E8->field_02 + 36, 2);
gUnknown_20399E8->field_04 = &gSprites[spriteId];
sub_80C4324(TRUE);
}
void sub_80C4324(bool8 a0)
{
gUnknown_20399E8->field_04->invisible = a0;
}
void sub_80C4348(void)
{
if (gUnknown_20399E8->field_04 != NULL)
{
DestroySprite(gUnknown_20399E8->field_04);
FreeSpriteTilesByTag(gUnknown_20399E8->field_08);
FreeSpritePaletteByTag(gUnknown_20399E8->field_0A);
}
FREE_IF_NOT_NULL(gUnknown_20399E8);
}
u16 sub_80C4380(void)
{
return gUnknown_20399E8->field_00;
}
u16 sub_80C438C(void)
{
return gUnknown_20399E8->field_02;
}