through sub_815E948

This commit is contained in:
PikalaxALT 2019-01-08 08:45:19 -05:00
parent 724a36220d
commit 9c5f01fc8e
4 changed files with 149 additions and 465 deletions

View File

@ -5,471 +5,6 @@
.text
thumb_func_start sub_815E5F0
sub_815E5F0: @ 815E5F0
push {lr}
ldr r0, _0815E620 @ =gSaveBlock1Ptr
ldr r2, [r0]
ldr r1, _0815E624 @ =0x00003d34
adds r0, r2, r1
ldr r1, [r0]
lsls r0, r1, 1
adds r0, r1
lsls r0, 2
adds r2, r0
ldr r0, _0815E628 @ =0x00003d42
adds r2, r0
ldrb r1, [r2]
lsls r0, r1, 28
cmp r0, 0
bge _0815E630
movs r0, 0x9
negs r0, r0
ands r0, r1
strb r0, [r2]
ldr r1, _0815E62C @ =gSpecialVar_Result
movs r0, 0
b _0815E64C
.align 2, 0
_0815E620: .4byte gSaveBlock1Ptr
_0815E624: .4byte 0x00003d34
_0815E628: .4byte 0x00003d42
_0815E62C: .4byte gSpecialVar_Result
_0815E630:
lsls r0, r1, 27
cmp r0, 0
bge _0815E648
movs r0, 0x11
negs r0, r0
ands r0, r1
strb r0, [r2]
ldr r1, _0815E644 @ =gSpecialVar_Result
movs r0, 0x1
b _0815E64C
.align 2, 0
_0815E644: .4byte gSpecialVar_Result
_0815E648:
ldr r1, _0815E654 @ =gSpecialVar_Result
movs r0, 0x2
_0815E64C:
strh r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0815E654: .4byte gSpecialVar_Result
thumb_func_end sub_815E5F0
thumb_func_start sub_815E658
sub_815E658: @ 815E658
push {r4-r6,lr}
ldr r4, _0815E700 @ =gSaveBlock1Ptr
ldr r2, [r4]
ldr r6, _0815E704 @ =0x00003d34
adds r0, r2, r6
ldr r1, [r0]
lsls r0, r1, 1
adds r0, r1
lsls r0, 2
ldr r5, _0815E708 @ =0x00003d38
adds r2, r5
adds r2, r0
ldr r1, [r2]
ldr r0, _0815E70C @ =0x00034bbe
cmp r1, r0
bls _0815E690
bl DisableVBlankCounter1
ldr r1, [r4]
adds r0, r1, r6
ldr r2, [r0]
lsls r0, r2, 1
adds r0, r2
lsls r0, 2
adds r1, r5
adds r1, r0
ldr r0, _0815E710 @ =0x00034bbf
str r0, [r1]
_0815E690:
ldr r1, [r4]
adds r0, r1, r6
ldr r2, [r0]
lsls r0, r2, 1
adds r0, r2
lsls r0, 2
adds r1, r5
adds r1, r0
ldr r4, [r1]
movs r5, 0xE1
lsls r5, 4
adds r0, r4, 0
adds r1, r5, 0
bl __divsi3
adds r6, r0, 0
adds r0, r4, 0
adds r1, r5, 0
bl __modsi3
adds r4, r0, 0
movs r1, 0x3C
bl __divsi3
adds r5, r0, 0
adds r0, r4, 0
movs r1, 0x3C
bl __modsi3
movs r1, 0xA8
muls r0, r1
movs r1, 0x64
bl __divsi3
adds r4, r0, 0
ldr r0, _0815E714 @ =gStringVar1
adds r1, r6, 0
movs r2, 0x1
movs r3, 0x2
bl ConvertIntToDecimalStringN
ldr r0, _0815E718 @ =gStringVar2
adds r1, r5, 0
movs r2, 0x1
movs r3, 0x2
bl ConvertIntToDecimalStringN
ldr r0, _0815E71C @ =gStringVar3
adds r1, r4, 0
movs r2, 0x2
movs r3, 0x2
bl ConvertIntToDecimalStringN
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0815E700: .4byte gSaveBlock1Ptr
_0815E704: .4byte 0x00003d34
_0815E708: .4byte 0x00003d38
_0815E70C: .4byte 0x00034bbe
_0815E710: .4byte 0x00034bbf
_0815E714: .4byte gStringVar1
_0815E718: .4byte gStringVar2
_0815E71C: .4byte gStringVar3
thumb_func_end sub_815E658
thumb_func_start sub_815E720
sub_815E720: @ 815E720
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0xC
bl sub_815EC0C
ldr r0, _0815E85C @ =gUnknown_847A218
bl AddWindow
lsls r0, 24
lsrs r7, r0, 24
bl sub_80F6E9C
adds r0, r7, 0
movs r1, 0
bl sub_80F6F1C
ldr r2, _0815E860 @ =gUnknown_83FE982
movs r1, 0
str r1, [sp]
movs r0, 0xFF
str r0, [sp, 0x4]
str r1, [sp, 0x8]
adds r0, r7, 0
movs r1, 0x2
movs r3, 0x4A
bl AddTextPrinterParameterized
movs r0, 0
mov r8, r0
movs r1, 0xB8
lsls r1, 22
mov r10, r1
movs r0, 0x90
lsls r0, 22
mov r9, r0
_0815E76C:
ldr r0, _0815E864 @ =gSaveBlock1Ptr
ldr r2, [r0]
ldr r1, _0815E868 @ =0x00003d34
adds r0, r2, r1
ldr r1, [r0]
lsls r0, r1, 1
adds r0, r1
lsls r0, 2
adds r0, r2
ldr r1, _0815E86C @ =0x00003d3c
adds r0, r1
bl sub_815EDDC
adds r4, r0, 0
movs r5, 0xE1
lsls r5, 4
adds r1, r5, 0
bl __divsi3
adds r6, r0, 0
adds r0, r4, 0
adds r1, r5, 0
bl __modsi3
adds r4, r0, 0
movs r1, 0x3C
bl __divsi3
adds r5, r0, 0
adds r0, r4, 0
movs r1, 0x3C
bl __modsi3
movs r1, 0xA8
muls r0, r1
movs r1, 0x64
bl __divsi3
adds r4, r0, 0
ldr r0, _0815E870 @ =gStringVar1
adds r1, r6, 0
movs r2, 0x1
movs r3, 0x2
bl ConvertIntToDecimalStringN
ldr r0, _0815E874 @ =gStringVar2
adds r1, r5, 0
movs r2, 0x1
movs r3, 0x2
bl ConvertIntToDecimalStringN
ldr r0, _0815E878 @ =gStringVar3
adds r1, r4, 0
movs r2, 0x2
movs r3, 0x2
bl ConvertIntToDecimalStringN
ldr r0, _0815E87C @ =gStringVar4
ldr r1, _0815E880 @ =gUnknown_83FE998
bl StringExpandPlaceholders
ldr r1, _0815E884 @ =gUnknown_83FE9C4
mov r0, r8
subs r0, 0x1
lsls r0, 2
adds r0, r1
ldr r2, [r0]
mov r1, r9
lsrs r0, r1, 24
str r0, [sp]
movs r0, 0xFF
str r0, [sp, 0x4]
movs r1, 0
str r1, [sp, 0x8]
adds r0, r7, 0
movs r1, 0x2
movs r3, 0x18
bl AddTextPrinterParameterized
mov r1, r10
lsrs r0, r1, 24
str r0, [sp]
movs r0, 0xFF
str r0, [sp, 0x4]
movs r1, 0
str r1, [sp, 0x8]
adds r0, r7, 0
movs r1, 0x2
ldr r2, _0815E87C @ =gStringVar4
movs r3, 0x60
bl AddTextPrinterParameterized
movs r0, 0xA0
lsls r0, 21
add r10, r0
add r9, r0
movs r1, 0x1
add r8, r1
mov r0, r8
cmp r0, 0x3
ble _0815E76C
adds r0, r7, 0
bl PutWindowTilemap
adds r0, r7, 0
movs r1, 0x3
bl CopyWindowToVram
ldr r0, _0815E888 @ =0x00004001
adds r1, r7, 0
bl VarSet
add sp, 0xC
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0815E85C: .4byte gUnknown_847A218
_0815E860: .4byte gUnknown_83FE982
_0815E864: .4byte gSaveBlock1Ptr
_0815E868: .4byte 0x00003d34
_0815E86C: .4byte 0x00003d3c
_0815E870: .4byte gStringVar1
_0815E874: .4byte gStringVar2
_0815E878: .4byte gStringVar3
_0815E87C: .4byte gStringVar4
_0815E880: .4byte gUnknown_83FE998
_0815E884: .4byte gUnknown_83FE9C4
_0815E888: .4byte 0x00004001
thumb_func_end sub_815E720
thumb_func_start sub_815E88C
sub_815E88C: @ 815E88C
push {r4,lr}
ldr r0, _0815E8B0 @ =0x00004001
bl VarGet
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
adds r0, r4, 0
movs r1, 0x1
bl sub_810F4D8
adds r0, r4, 0
bl RemoveWindow
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0815E8B0: .4byte 0x00004001
thumb_func_end sub_815E88C
thumb_func_start sub_815E8B4
sub_815E8B4: @ 815E8B4
push {r4,lr}
ldr r4, _0815E8C8 @ =gSpecialVar_Result
bl GetMonsStateToDoubles
lsls r0, 24
lsrs r0, 24
strh r0, [r4]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0815E8C8: .4byte gSpecialVar_Result
thumb_func_end sub_815E8B4
thumb_func_start sub_815E8CC
sub_815E8CC: @ 815E8CC
push {lr}
ldr r0, _0815E8EC @ =gUnknown_203F458
ldr r1, [r0]
ldrb r0, [r1, 0x4]
ldrb r2, [r1, 0xD]
cmp r0, r2
beq _0815E8F8
ldr r0, _0815E8F0 @ =gStringVar1
ldrb r1, [r1, 0x4]
movs r2, 0
movs r3, 0x1
bl ConvertIntToDecimalStringN
ldr r1, _0815E8F4 @ =gSpecialVar_Result
movs r0, 0x1
b _0815E8FC
.align 2, 0
_0815E8EC: .4byte gUnknown_203F458
_0815E8F0: .4byte gStringVar1
_0815E8F4: .4byte gSpecialVar_Result
_0815E8F8:
ldr r1, _0815E904 @ =gSpecialVar_Result
movs r0, 0
_0815E8FC:
strh r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0815E904: .4byte gSpecialVar_Result
thumb_func_end sub_815E8CC
thumb_func_start sub_815E908
sub_815E908: @ 815E908
push {lr}
ldr r0, _0815E928 @ =gMapHeader
ldrh r1, [r0, 0x12]
ldr r0, _0815E92C @ =0x00000129
cmp r1, r0
bne _0815E938
ldr r0, _0815E930 @ =0x00004082
bl VarGet
lsls r0, 16
lsrs r1, r0, 16
cmp r1, 0
bne _0815E938
ldr r0, _0815E934 @ =gSpecialVar_Result
strh r1, [r0]
b _0815E93E
.align 2, 0
_0815E928: .4byte gMapHeader
_0815E92C: .4byte 0x00000129
_0815E930: .4byte 0x00004082
_0815E934: .4byte gSpecialVar_Result
_0815E938:
ldr r1, _0815E944 @ =gSpecialVar_Result
movs r0, 0
strh r0, [r1]
_0815E93E:
pop {r0}
bx r0
.align 2, 0
_0815E944: .4byte gSpecialVar_Result
thumb_func_end sub_815E908
thumb_func_start sub_815E948
sub_815E948: @ 815E948
push {r4,lr}
ldr r0, _0815E97C @ =0x00004001
bl VarGet
lsls r0, 16
lsrs r2, r0, 16
ldr r0, _0815E980 @ =gUnknown_203F458
ldr r3, [r0]
lsls r1, r2, 2
adds r1, r2
lsls r1, 3
adds r1, r2
lsls r1, 3
ldrb r2, [r3]
lsls r0, r2, 5
subs r0, r2
lsls r0, 5
adds r1, r0
adds r3, r1
ldrb r1, [r3, 0x1B]
movs r3, 0
ldr r2, _0815E984 @ =gUnknown_847A074
ldr r0, _0815E988 @ =gFacilityClassToTrainerClass
adds r1, r0
b _0815E994
.align 2, 0
_0815E97C: .4byte 0x00004001
_0815E980: .4byte gUnknown_203F458
_0815E984: .4byte gUnknown_847A074
_0815E988: .4byte gFacilityClassToTrainerClass
_0815E98C:
adds r2, 0x4
adds r3, 0x1
cmp r3, 0x68
bhi _0815E99C
_0815E994:
ldrb r0, [r2]
ldrb r4, [r1]
cmp r0, r4
bne _0815E98C
_0815E99C:
cmp r3, 0x69
beq _0815E9B0
ldr r1, _0815E9AC @ =gUnknown_847A074
lsls r0, r3, 2
adds r0, r1
ldrb r2, [r0, 0x1]
b _0815E9B2
.align 2, 0
_0815E9AC: .4byte gUnknown_847A074
_0815E9B0:
movs r2, 0
_0815E9B2:
ldr r0, _0815E9C4 @ =gUnknown_847A2D2
lsls r1, r2, 1
adds r1, r0
ldrh r0, [r1]
bl PlayNewMapMusic
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0815E9C4: .4byte gUnknown_847A2D2
thumb_func_end sub_815E948
thumb_func_start sub_815E9C8
sub_815E9C8: @ 815E9C8
ldr r3, _0815E9EC @ =gSpecialVar_Result

View File

@ -23,5 +23,6 @@ void sub_80F7974(const u8 *);
u8 GetStartMenuWindowId(void);
void sub_80F7998(void);
void sub_80F69E8(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
void sub_80F6F1C(u8 windowId, bool8 copyNow);
#endif // GUARD_NEW_MENU_HELPERS_H

View File

@ -671,5 +671,6 @@ void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u
void BattleAnimateBackSprite(struct Sprite* sprite, u16 species);
void PlayMapChosenOrBattleBGM(u16 songId);
u8 GetMonsStateToDoubles(void);
#endif // GUARD_POKEMON_H

View File

@ -18,6 +18,10 @@
#include "battle_2.h"
#include "overworld.h"
#include "item.h"
#include "window.h"
#include "menu.h"
#include "new_menu_helpers.h"
#include "sound.h"
struct UnkStruct_8479D34
{
@ -98,6 +102,12 @@ struct UnkStruct_847A024
bool8 unk4;
};
struct UnkStruct_847A074
{
u8 unk0;
u8 unk1;
};
EWRAM_DATA struct UnkStruct_203F458 * gUnknown_203F458 = NULL;
EWRAM_DATA struct UnkStruct_203F45C * gUnknown_203F45C = NULL;
@ -133,14 +143,21 @@ void sub_815EC0C(void);
u32 sub_815EDDC(u32 *);
void sub_815EDF4(u32 *, u32);
extern const u8 gUnknown_83FE982[];
extern const u8 gUnknown_83FE998[];
extern const u8 *const gUnknown_83FE9C4[];
extern const struct UnkStruct_8479D34 gUnknown_8479D34[15];
extern const struct UnkStruct_8479ED8 gUnknown_8479ED8[83];
extern const struct UnkStruct_847A024 gUnknown_847A024[10];
extern const struct UnkStruct_847A074 gUnknown_847A074[105];
extern const struct WindowTemplate gUnknown_847A218;
extern void (*const gUnknown_847A230[])(void);
extern const struct Unk_203F458_Header gUnknown_84827AC;
extern const struct UnkSubstruct_203F458_000C *const gUnknown_84827B4[][8];
extern const u16 gUnknown_847A284[8][3];
extern const u16 gUnknown_847A2B4[];
extern const u16 gUnknown_847A2D2[];
bool32 sub_815D7BC(void * dest, void * buffer)
{
@ -858,3 +875,133 @@ void sub_815E5C4(void)
{
gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_3 = 1;
}
void sub_815E5F0(void)
{
if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_3)
{
gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_3 = FALSE;
gSpecialVar_Result = 0;
}
else if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_4)
{
gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_4 = FALSE;
gSpecialVar_Result = 1;
}
else
{
gSpecialVar_Result = 2;
}
}
#define PRINT_TOWER_TIME(src) ({ \
s32 minutes, seconds, centiseconds, frames; \
\
frames = (src); \
\
minutes = frames / 3600; \
frames %= 3600; \
seconds = frames / 60; \
frames %= 60; \
centiseconds = frames * 168 / 100; \
\
ConvertIntToDecimalStringN(gStringVar1, minutes, STR_CONV_MODE_RIGHT_ALIGN, 2); \
ConvertIntToDecimalStringN(gStringVar2, seconds, STR_CONV_MODE_RIGHT_ALIGN, 2); \
ConvertIntToDecimalStringN(gStringVar3, centiseconds, STR_CONV_MODE_LEADING_ZEROS, 2); \
})
void sub_815E658(void)
{
if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0 >= 215999)
{
DisableVBlankCounter1();
gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0 = 215999;
}
PRINT_TOWER_TIME(gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0);
}
void sub_815E720(void)
{
u8 windowId;
s32 i;
s32 minutes, seconds, centiseconds;
sub_815EC0C();
windowId = AddWindow(&gUnknown_847A218);
sub_80F6E9C();
sub_80F6F1C(windowId, FALSE);
AddTextPrinterParameterized(windowId, 2, gUnknown_83FE982, 0x4A, 0, 0xFF, NULL);
for (i = 0; i < 4; i++)
{
PRINT_TOWER_TIME(sub_815EDDC(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk4));
StringExpandPlaceholders(gStringVar4, gUnknown_83FE998);
AddTextPrinterParameterized(windowId, 2, gUnknown_83FE9C4[i - 1], 0x18, 0x24 + 0x14 * i, 0xFF, NULL);
AddTextPrinterParameterized(windowId, 2, gStringVar4, 0x60, 0x2E + 0x14 * i, 0xFF, NULL);
}
PutWindowTilemap(windowId);
CopyWindowToVram(windowId, 3);
VarSet(VAR_0x4001, windowId);
}
void sub_815E88C(void)
{
u8 windowId = VarGet(VAR_0x4001);
sub_810F4D8(windowId, TRUE);
RemoveWindow(windowId);
}
void sub_815E8B4(void)
{
gSpecialVar_Result = GetMonsStateToDoubles();
}
void sub_815E8CC(void)
{
if (gUnknown_203F458->unk_0004.unk_0000.unk0 != gUnknown_203F458->unk_0004.unk_0008[0].unk_001)
{
ConvertIntToDecimalStringN(gStringVar1, gUnknown_203F458->unk_0004.unk_0000.unk0, STR_CONV_MODE_LEFT_ALIGN, 1);
gSpecialVar_Result = TRUE;
}
else
{
gSpecialVar_Result = FALSE;
}
}
void sub_815E908(void)
{
if (gMapHeader.mapDataId == 0x0129 && VarGet(VAR_0x4082) == 0)
{
gSpecialVar_Result = FALSE;
}
else
{
gSpecialVar_Result = FALSE;
}
}
void sub_815E948(void)
{
s32 i;
u16 var_4001 = VarGet(VAR_0x4001);
u8 r1 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[var_4001].unk_00B;
for (i = 0; i < NELEMS(gUnknown_847A074); i++)
{
if (gUnknown_847A074[i].unk0 == gFacilityClassToTrainerClass[r1])
break;
}
if (i != NELEMS(gUnknown_847A074))
{
var_4001 = gUnknown_847A074[i].unk1;
}
else
{
var_4001 = 0;
}
PlayNewMapMusic(gUnknown_847A2D2[var_4001]);
}