diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2019-10-23 20:43:41 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2019-10-23 20:43:41 -0400 |
commit | db3be6ef2e9482edae2446cd71d03d7c6ae143f7 (patch) | |
tree | ff114dd1d4dd7d1fb357bc516e49886458b2ad99 | |
parent | 54d6414654d46eba17c2056f41d61a99e1f431af (diff) |
field_specials through sub_80CBFA0
-rw-r--r-- | asm/field_specials.s | 251 | ||||
-rw-r--r-- | data/specials.inc | 2 | ||||
-rw-r--r-- | include/field_specials.h | 2 | ||||
-rw-r--r-- | src/field_specials.c | 75 |
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; +} |