summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2019-10-23 20:43:41 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2019-10-23 20:43:41 -0400
commitdb3be6ef2e9482edae2446cd71d03d7c6ae143f7 (patch)
treeff114dd1d4dd7d1fb357bc516e49886458b2ad99
parent54d6414654d46eba17c2056f41d61a99e1f431af (diff)
field_specials through sub_80CBFA0
-rw-r--r--asm/field_specials.s251
-rw-r--r--data/specials.inc2
-rw-r--r--include/field_specials.h2
-rw-r--r--src/field_specials.c75
4 files changed, 77 insertions, 253 deletions
diff --git a/asm/field_specials.s b/asm/field_specials.s
index afdb65c90..e76602b01 100644
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -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}
diff --git a/data/specials.inc b/data/specials.inc
index af5b87dd7..94d00fb33 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -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
diff --git a/include/field_specials.h b/include/field_specials.h
index 2abe168e0..24ef0d00b 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -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);
diff --git a/src/field_specials.c b/src/field_specials.c
index 373e7cb05..ecebf8c8b 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -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;
+}