field_specials through sub_80CBFA0

This commit is contained in:
PikalaxALT 2019-10-23 20:43:41 -04:00
parent 54d6414654
commit db3be6ef2e
4 changed files with 77 additions and 253 deletions

View File

@ -5,257 +5,6 @@
.text
thumb_func_start ContextNpcGetTextColor
ContextNpcGetTextColor: @ 80CBE00
push {lr}
ldr r0, _080CBE18 @ =gSpecialVar_TextColor
ldrh r0, [r0]
cmp r0, 0xFF
bne _080CBE44
ldr r1, _080CBE1C @ =gSelectedEventObject
ldrb r0, [r1]
cmp r0, 0
bne _080CBE20
movs r0, 0x3
b _080CBE48
.align 2, 0
_080CBE18: .4byte gSpecialVar_TextColor
_080CBE1C: .4byte gSelectedEventObject
_080CBE20:
ldr r2, _080CBE4C @ =gMapObjects
ldrb r1, [r1]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
adds r0, r2
ldrb r0, [r0, 0x5]
cmp r0, 0xEF
bls _080CBE40
adds r0, 0x10
lsls r0, 24
lsrs r0, 24
bl VarGetFieldObjectGraphicsId
lsls r0, 24
lsrs r0, 24
_080CBE40:
bl GetColorFromTextColorTable
_080CBE44:
lsls r0, 24
lsrs r0, 24
_080CBE48:
pop {r1}
bx r1
.align 2, 0
_080CBE4C: .4byte gMapObjects
thumb_func_end ContextNpcGetTextColor
thumb_func_start sub_80CBE50
sub_80CBE50: @ 80CBE50
push {r4-r6,lr}
sub sp, 0x4
lsls r0, 24
lsrs r0, 24
movs r1, 0x64
muls r1, r0
ldr r0, _080CBEA4 @ =gPlayerParty
adds r5, r1, r0
ldr r6, _080CBEA8 @ =gStringVar1
adds r0, r5, 0
movs r1, 0x2
adds r2, r6, 0
bl GetMonData
mov r4, sp
adds r0, r5, 0
movs r1, 0x3
mov r2, sp
bl GetMonData
strb r0, [r4]
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
bne _080CBEB0
adds r0, r5, 0
movs r1, 0xB
movs r2, 0
bl GetMonData
movs r1, 0xB
muls r0, r1
ldr r1, _080CBEAC @ =gSpeciesNames
adds r0, r1
adds r1, r6, 0
bl StringCompare
cmp r0, 0
bne _080CBEB0
movs r0, 0
b _080CBEB2
.align 2, 0
_080CBEA4: .4byte gPlayerParty
_080CBEA8: .4byte gStringVar1
_080CBEAC: .4byte gSpeciesNames
_080CBEB0:
movs r0, 0x1
_080CBEB2:
add sp, 0x4
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_80CBE50
thumb_func_start sub_80CBEBC
sub_80CBEBC: @ 80CBEBC
push {lr}
bl GetLeadMonIndex
lsls r0, 24
lsrs r0, 24
bl sub_80CBE50
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
thumb_func_end sub_80CBEBC
thumb_func_start TV_PrintIntToStringVar
TV_PrintIntToStringVar: @ 80CBED4
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
lsls r4, 24
lsrs r4, 24
adds r0, r5, 0
bl CountDigits
adds r3, r0, 0
ldr r0, _080CBF00 @ =gUnknown_83F5AF8
lsls r4, 2
adds r4, r0
ldr r0, [r4]
lsls r3, 24
lsrs r3, 24
adds r1, r5, 0
movs r2, 0
bl ConvertIntToDecimalStringN
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080CBF00: .4byte gUnknown_83F5AF8
thumb_func_end TV_PrintIntToStringVar
thumb_func_start CountDigits
CountDigits: @ 80CBF04
push {r4,lr}
adds r4, r0, 0
movs r1, 0xA
bl __divsi3
cmp r0, 0
beq _080CBF90
adds r0, r4, 0
movs r1, 0x64
bl __divsi3
cmp r0, 0
bne _080CBF22
movs r0, 0x2
b _080CBF9A
_080CBF22:
movs r1, 0xFA
lsls r1, 2
adds r0, r4, 0
bl __divsi3
cmp r0, 0
bne _080CBF34
movs r0, 0x3
b _080CBF9A
_080CBF34:
ldr r1, _080CBF44 @ =0x00002710
adds r0, r4, 0
bl __divsi3
cmp r0, 0
bne _080CBF48
movs r0, 0x4
b _080CBF9A
.align 2, 0
_080CBF44: .4byte 0x00002710
_080CBF48:
ldr r1, _080CBF58 @ =0x000186a0
adds r0, r4, 0
bl __divsi3
cmp r0, 0
bne _080CBF5C
movs r0, 0x5
b _080CBF9A
.align 2, 0
_080CBF58: .4byte 0x000186a0
_080CBF5C:
ldr r1, _080CBF6C @ =0x000f4240
adds r0, r4, 0
bl __divsi3
cmp r0, 0
bne _080CBF70
movs r0, 0x6
b _080CBF9A
.align 2, 0
_080CBF6C: .4byte 0x000f4240
_080CBF70:
ldr r1, _080CBF80 @ =0x00989680
adds r0, r4, 0
bl __divsi3
cmp r0, 0
bne _080CBF84
movs r0, 0x7
b _080CBF9A
.align 2, 0
_080CBF80: .4byte 0x00989680
_080CBF84:
ldr r1, _080CBF94 @ =0x05f5e100
adds r0, r4, 0
bl __divsi3
cmp r0, 0
beq _080CBF98
_080CBF90:
movs r0, 0x1
b _080CBF9A
.align 2, 0
_080CBF94: .4byte 0x05f5e100
_080CBF98:
movs r0, 0x8
_080CBF9A:
pop {r4}
pop {r1}
bx r1
thumb_func_end CountDigits
thumb_func_start sub_80CBFA0
sub_80CBFA0: @ 80CBFA0
push {r4,lr}
ldr r0, _080CBFC8 @ =gSpecialVar_0x8004
ldrh r1, [r0]
movs r0, 0x64
muls r0, r1
ldr r1, _080CBFCC @ =gPlayerParty
adds r0, r1
ldr r4, _080CBFD0 @ =gStringVar1
movs r1, 0x2
adds r2, r4, 0
bl GetMonData
ldr r0, _080CBFD4 @ =gStringVar3
adds r1, r4, 0
bl StringCompare
cmp r0, 0
beq _080CBFD8
movs r0, 0x1
b _080CBFDA
.align 2, 0
_080CBFC8: .4byte gSpecialVar_0x8004
_080CBFCC: .4byte gPlayerParty
_080CBFD0: .4byte gStringVar1
_080CBFD4: .4byte gStringVar3
_080CBFD8:
movs r0, 0
_080CBFDA:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80CBFA0
thumb_func_start ChangeBoxPokemonNickname
ChangeBoxPokemonNickname: @ 80CBFE0
push {r4-r6,lr}

View File

@ -78,7 +78,7 @@ gSpecials:: @ 815FD60
def_special nullsub_75
def_special nullsub_75
def_special nullsub_75
def_special sub_80CBEBC
def_special Special_HasLeadMonBeenRenamed
def_special nullsub_75
def_special nullsub_75
def_special nullsub_75

View File

@ -12,7 +12,7 @@ enum HiddenItemAttr
};
u8 GetLeadMonIndex(void);
u8 CountDigits(u16 number);
s32 CountDigits(s32 number);
void TV_PrintIntToStringVar(u8, int);
u16 ScrSpecial_GetStarter(void);
void sub_80CCB68(void);

View File

@ -30,6 +30,7 @@
#include "window.h"
#include "text_window.h"
#include "menu.h"
#include "dynamic_placeholder_text_util.h"
#include "new_menu_helpers.h"
#include "constants/songs.h"
#include "constants/species.h"
@ -79,6 +80,7 @@ extern const u16 sElevatorWindowMetatilesGoingUp[3][3];
extern const u16 sElevatorWindowMetatilesGoingDown[3][3];
extern const u8 sElevatorAnimationDuration[9];
extern const u8 sElevatorWindowAnimDuration[9];
extern u8 *const gUnknown_83F5AF8[3];
void Special_ShowDiploma(void)
{
@ -1275,3 +1277,76 @@ void sub_80CBDE8(void)
gSelectedEventObject = 0;
gSpecialVar_TextColor = 0xFF;
}
u8 ContextNpcGetTextColor(void)
{
u8 gfxId;
if (gSpecialVar_TextColor != 0xFF)
return gSpecialVar_TextColor;
else if (gSelectedEventObject == 0)
return 3;
else
{
gfxId = gMapObjects[gSelectedEventObject].graphicsId;
if (gfxId >= MAP_OBJ_GFX_VAR_0)
gfxId = VarGetFieldObjectGraphicsId(gfxId - MAP_OBJ_GFX_VAR_0);
return GetColorFromTextColorTable(gfxId);
}
}
static bool8 HasMonBeenRenamed(u8 idx)
{
struct Pokemon * pokemon = &gPlayerParty[idx];
u8 language;
GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1);
language = GetMonData(pokemon, MON_DATA_LANGUAGE, &language);
if (language != LANGUAGE_ENGLISH)
return TRUE;
else if (StringCompare(gSpeciesNames[GetMonData(pokemon, MON_DATA_SPECIES, NULL)], gStringVar1) != 0)
return TRUE;
else
return FALSE;
}
bool8 Special_HasLeadMonBeenRenamed(void)
{
return HasMonBeenRenamed(GetLeadMonIndex());
}
void TV_PrintIntToStringVar(u8 varidx, s32 number)
{
s32 n = CountDigits(number);
ConvertIntToDecimalStringN(gUnknown_83F5AF8[varidx], number, STR_CONV_MODE_LEFT_ALIGN, n);
}
s32 CountDigits(s32 number)
{
if (number / 10 == 0)
return 1;
else if (number / 100 == 0)
return 2;
else if (number / 1000 == 0)
return 3;
else if (number / 10000 == 0)
return 4;
else if (number / 100000 == 0)
return 5;
else if (number / 1000000 == 0)
return 6;
else if (number / 10000000 == 0)
return 7;
else if (number / 100000000 == 0)
return 8;
else
return 1;
}
bool8 sub_80CBFA0(void)
{
struct Pokemon * pokemon = &gPlayerParty[gSpecialVar_0x8004];
GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1);
if (StringCompare(gStringVar3, gStringVar1) == 0)
return FALSE;
else
return TRUE;
}