through sub_8104C2C

This commit is contained in:
PikalaxALT
2019-12-13 09:37:46 -05:00
parent 5df43761c0
commit 2b2e3dc3e7
4 changed files with 87 additions and 246 deletions
-235
View File
@@ -5,241 +5,6 @@
.text .text
thumb_func_start sub_8104AB0
sub_8104AB0: @ 8104AB0
push {r4-r7,lr}
lsls r0, 16
lsrs r3, r0, 16
lsls r1, 24
lsrs r5, r1, 24
adds r7, r5, 0
lsls r2, 24
cmp r2, 0
beq _08104ACA
adds r0, r3, 0
bl SpeciesToNationalPokedexNum
adds r3, r0, 0
_08104ACA:
subs r0, r3, 0x1
lsls r0, 16
lsrs r3, r0, 16
lsrs r0, 19
lsls r0, 24
lsrs r4, r0, 24
movs r0, 0x7
ands r3, r0
movs r0, 0x80
lsls r0, 17
lsls r0, r3
lsrs r6, r0, 24
movs r0, 0
mov r12, r0
cmp r5, 0x1
beq _08104B14
cmp r5, 0x1
bgt _08104AF4
cmp r5, 0
beq _08104AFE
b _08104BB0
_08104AF4:
cmp r7, 0x2
beq _08104B68
cmp r7, 0x3
beq _08104BA0
b _08104BB0
_08104AFE:
ldr r0, _08104B10 @ =gSaveBlock2Ptr
ldr r0, [r0]
adds r0, 0x5C
adds r0, r4
ldrb r1, [r0]
ands r1, r6
cmp r1, 0
beq _08104BB0
b _08104B34
.align 2, 0
_08104B10: .4byte gSaveBlock2Ptr
_08104B14:
ldr r0, _08104B5C @ =gSaveBlock2Ptr
ldr r2, [r0]
adds r0, r2, 0
adds r0, 0x28
adds r0, r4
ldrb r1, [r0]
ands r1, r6
cmp r1, 0
beq _08104BB0
adds r0, r2, 0
adds r0, 0x5C
adds r0, r4
ldrb r0, [r0]
ands r0, r6
cmp r1, r0
bne _08104BB0
_08104B34:
ldr r0, _08104B60 @ =gSaveBlock1Ptr
ldr r2, [r0]
movs r3, 0xBF
lsls r3, 3
adds r0, r2, r3
adds r0, r4
ldrb r0, [r0]
ands r0, r6
cmp r1, r0
bne _08104BB0
ldr r3, _08104B64 @ =0x00003a18
adds r0, r2, r3
adds r0, r4
ldrb r0, [r0]
ands r0, r6
cmp r1, r0
bne _08104BB0
movs r0, 0x1
mov r12, r0
b _08104BB0
.align 2, 0
_08104B5C: .4byte gSaveBlock2Ptr
_08104B60: .4byte gSaveBlock1Ptr
_08104B64: .4byte 0x00003a18
_08104B68:
ldr r0, _08104B94 @ =gSaveBlock2Ptr
ldr r1, [r0]
adds r1, 0x5C
adds r1, r4
ldrb r2, [r1]
adds r0, r6, 0
orrs r0, r2
strb r0, [r1]
ldr r3, _08104B98 @ =gSaveBlock1Ptr
ldr r1, [r3]
movs r0, 0xBF
lsls r0, 3
adds r1, r0
adds r1, r4
ldrb r2, [r1]
adds r0, r6, 0
orrs r0, r2
strb r0, [r1]
ldr r1, [r3]
ldr r3, _08104B9C @ =0x00003a18
adds r1, r3
b _08104BA6
.align 2, 0
_08104B94: .4byte gSaveBlock2Ptr
_08104B98: .4byte gSaveBlock1Ptr
_08104B9C: .4byte 0x00003a18
_08104BA0:
ldr r0, _08104BB8 @ =gSaveBlock2Ptr
ldr r1, [r0]
adds r1, 0x28
_08104BA6:
adds r1, r4
ldrb r2, [r1]
adds r0, r6, 0
orrs r0, r2
strb r0, [r1]
_08104BB0:
mov r0, r12
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08104BB8: .4byte gSaveBlock2Ptr
thumb_func_end sub_8104AB0
thumb_func_start sub_8104BBC
sub_8104BBC: @ 8104BBC
push {r4-r7,lr}
lsls r0, 24
lsrs r6, r0, 24
lsls r1, 24
lsrs r1, 24
movs r5, 0
cmp r1, 0
beq _08104BD2
cmp r1, 0x1
beq _08104BF8
b _08104C1E
_08104BD2:
movs r0, 0
_08104BD4:
adds r0, 0x1
lsls r0, 16
lsrs r4, r0, 16
adds r0, r4, 0
adds r1, r6, 0
movs r2, 0
bl sub_8104AB0
lsls r0, 24
cmp r0, 0
beq _08104BF0
adds r0, r5, 0x1
lsls r0, 16
lsrs r5, r0, 16
_08104BF0:
adds r0, r4, 0
cmp r0, 0x96
bls _08104BD4
b _08104C1E
_08104BF8:
movs r0, 0
ldr r7, _08104C28 @ =0x00000181
_08104BFC:
adds r0, 0x1
lsls r0, 16
lsrs r4, r0, 16
adds r0, r4, 0
adds r1, r6, 0
movs r2, 0
bl sub_8104AB0
lsls r0, 24
cmp r0, 0
beq _08104C18
adds r0, r5, 0x1
lsls r0, 16
lsrs r5, r0, 16
_08104C18:
adds r0, r4, 0
cmp r0, r7
bls _08104BFC
_08104C1E:
adds r0, r5, 0
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08104C28: .4byte 0x00000181
thumb_func_end sub_8104BBC
thumb_func_start sub_8104C2C
sub_8104C2C: @ 8104C2C
push {r4,lr}
sub sp, 0x8
adds r4, r0, 0
movs r0, 0
adds r1, r4, 0
movs r2, 0
bl GetStringWidth
movs r1, 0x14
negs r1, r1
adds r3, r1, 0
subs r3, r0
lsls r3, 24
lsrs r3, 24
movs r0, 0x2
str r0, [sp]
movs r0, 0x4
str r0, [sp, 0x4]
movs r0, 0x1
movs r1, 0
adds r2, r4, 0
bl sub_81047C8
add sp, 0x8
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_8104C2C
thumb_func_start sub_8104C64 thumb_func_start sub_8104C64
sub_8104C64: @ 8104C64 sub_8104C64: @ 8104C64
push {r4-r7,lr} push {r4-r7,lr}
+2 -3
View File
@@ -765,9 +765,8 @@ struct SaveBlock1
/*0x3120*/ struct MEventBuffers mysteryEventBuffers; /*0x3120*/ struct MEventBuffers mysteryEventBuffers;
/*0x348C*/ u8 filler_348C[400]; /*0x348C*/ u8 filler_348C[400];
/*0x361C*/ struct RamScript ramScript; /*0x361C*/ struct RamScript ramScript;
/*0x3A08*/ u8 filler3A08[12]; /*0x3A08*/ u8 filler3A08[16];
/*0x3A14*/ u8 seen2[DEX_FLAGS_NO]; /*0x3A18*/ u8 seen2[DEX_FLAGS_NO];
/*0x3A48*/ u8 filler_3a48[4];
/*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH]; /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH];
/*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS]; /*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS];
/*0x3A94*/ u8 filler3A94[0x204]; /*0x3A94*/ u8 filler3A94[0x204];
+1 -1
View File
@@ -2,6 +2,6 @@
#define GUARD_POKEDEX_SCREEN_H #define GUARD_POKEDEX_SCREEN_H
void CB2_OpenPokedexFromStartMenu(void); void CB2_OpenPokedexFromStartMenu(void);
s8 sub_8104AB0(u16 nationalDexNo, u8 caseID, u8 unk); s8 sub_8104AB0(u16 nationalDexNo, u8 caseID, bool8 indexIsSpecies);
#endif //GUARD_POKEDEX_SCREEN_H #endif //GUARD_POKEDEX_SCREEN_H
+84 -7
View File
@@ -101,8 +101,8 @@ void sub_81047B0(u8 *windowId_p);
void sub_81047C8(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); void sub_81047C8(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx);
void sub_810491C(u8 windowId, u8 fontId, u16 num, u8 x, u8 y, u8 colorIdx); void sub_810491C(u8 windowId, u8 fontId, u16 num, u8 x, u8 y, u8 colorIdx);
void sub_8104A34(u8 windowId, u8 fontId, u16 species, u8 x, u8 y); void sub_8104A34(u8 windowId, u8 fontId, u16 species, u8 x, u8 y);
u16 sub_8104BBC(u8 a0, u8 a1); u16 sub_8104BBC(u8 caseID, bool8 whichDex);
void sub_8104C2C(const u8 *a0); void sub_8104C2C(const u8 *src);
void sub_8104E90(void); void sub_8104E90(void);
void sub_8104F0C(u8 a0); void sub_8104F0C(u8 a0);
void sub_8105058(u8 a0); void sub_8105058(u8 a0);
@@ -666,7 +666,7 @@ void sub_810345C(void)
u16 sub_8103518(u8 a0) u16 sub_8103518(u8 a0)
{ {
s32 max_n = IsNationalPokedexEnabled() ? NATIONAL_DEX_DEOXYS : NATIONAL_DEX_MEW; s32 max_n = IsNationalPokedexEnabled() ? NATIONAL_DEX_COUNT : KANTO_DEX_COUNT;
u16 ndex_num; u16 ndex_num;
u16 ret = NATIONAL_DEX_NONE; u16 ret = NATIONAL_DEX_NONE;
s32 i; s32 i;
@@ -677,7 +677,7 @@ u16 sub_8103518(u8 a0)
{ {
default: default:
case 0: case 0:
for (i = 0; i < NATIONAL_DEX_MEW; i++) for (i = 0; i < KANTO_DEX_COUNT; i++)
{ {
ndex_num = i + 1; ndex_num = i + 1;
seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0); seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0);
@@ -729,7 +729,7 @@ u16 sub_8103518(u8 a0)
} }
break; break;
case 3: case 3:
for (i = 0; i < NATIONAL_DEX_DEOXYS; i++) for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{ {
ndex_num = gUnknown_84442F6[i]; ndex_num = gUnknown_84442F6[i];
if (ndex_num <= max_n) if (ndex_num <= max_n)
@@ -746,7 +746,7 @@ u16 sub_8103518(u8 a0)
} }
break; break;
case 4: case 4:
for (i = 0; i < NATIONAL_DEX_DEOXYS; i++) for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{ {
ndex_num = gUnknown_84445FA[i]; ndex_num = gUnknown_84445FA[i];
if (ndex_num <= max_n) if (ndex_num <= max_n)
@@ -763,7 +763,7 @@ u16 sub_8103518(u8 a0)
} }
break; break;
case 5: case 5:
for (i = 0; i < NATIONAL_DEX_DEOXYS; i++) for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{ {
ndex_num = i + 1; ndex_num = i + 1;
seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0); seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0);
@@ -1690,3 +1690,80 @@ void sub_8104A34(u8 windowId, u8 fontId, u16 species, u8 x, u8 y)
sub_81047C8(windowId, fontId, gUnknown_8415FFF, x, y, 0); sub_81047C8(windowId, fontId, gUnknown_8415FFF, x, y, 0);
sub_8104880(windowId, fontId, dexNum, x + 9, y, 0); sub_8104880(windowId, fontId, dexNum, x + 9, y, 0);
} }
s8 sub_8104AB0(u16 nationalDexNo, u8 caseID, bool8 indexIsSpecies)
{
u8 index;
u8 bit;
u8 mask;
s8 retVal;
if (indexIsSpecies)
nationalDexNo = SpeciesToNationalPokedexNum(nationalDexNo);
nationalDexNo--;
index = nationalDexNo / 8;
bit = nationalDexNo % 8;
mask = 1 << bit;
retVal = 0;
switch (caseID)
{
case FLAG_GET_SEEN:
if (gSaveBlock2Ptr->pokedex.seen[index] & mask)
{
if ((gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask)
&& (gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask))
retVal = 1;
}
break;
case FLAG_GET_CAUGHT:
if (gSaveBlock2Ptr->pokedex.owned[index] & mask)
{
if ((gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock2Ptr->pokedex.seen[index] & mask)
&& (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask)
&& (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask))
retVal = 1;
}
break;
case FLAG_SET_SEEN:
gSaveBlock2Ptr->pokedex.seen[index] |= mask;
gSaveBlock1Ptr->seen1[index] |= mask;
gSaveBlock1Ptr->seen2[index] |= mask;
break;
case FLAG_SET_CAUGHT:
gSaveBlock2Ptr->pokedex.owned[index] |= mask;
break;
}
return retVal;
}
u16 sub_8104BBC(u8 caseID, bool8 whichDex)
{
u16 count = 0;
u16 i;
switch (whichDex)
{
case 0: // Kanto
for (i = 0; i < KANTO_DEX_COUNT; i++)
{
if (sub_8104AB0(i + 1, caseID, FALSE))
count++;
}
break;
case 1: // National
for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
if (sub_8104AB0(i + 1, caseID, FALSE))
count++;
}
break;
}
return count;
}
void sub_8104C2C(const u8 *src)
{
sub_81047C8(1, 0, src, 236 - GetStringWidth(0, src, 0), 2, 4);
}