diff options
author | YamaArashi <shadow962@live.com> | 2017-05-08 11:28:28 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2017-05-08 11:28:28 -0700 |
commit | 3cc8c2044525a483ba80f8730f8f6376e5f6c935 (patch) | |
tree | 186fcef8ab0a3a522fe990853f673fbe9bbcef30 | |
parent | 71f9479b00adf175cc43e704c27a9d50749f5d67 (diff) |
decompile birch_pc
-rw-r--r-- | asm/birch_pc.s | 265 | ||||
-rw-r--r-- | include/field_message_box.h | 8 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/birch_pc.c | 114 | ||||
-rw-r--r-- | src/field_message_box.c | 12 |
5 files changed, 125 insertions, 276 deletions
diff --git a/asm/birch_pc.s b/asm/birch_pc.s deleted file mode 100644 index 2687f29b5..000000000 --- a/asm/birch_pc.s +++ /dev/null @@ -1,265 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start ScriptGetPokedexInfo -ScriptGetPokedexInfo: @ 810D43C - push {lr} - ldr r0, _0810D458 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0 - bne _0810D460 - movs r0, 0 - bl GetHoennPokedexCount - ldr r1, _0810D45C @ =gSpecialVar_0x8005 - strh r0, [r1] - movs r0, 0x1 - bl GetHoennPokedexCount - b _0810D470 - .align 2, 0 -_0810D458: .4byte gSpecialVar_0x8004 -_0810D45C: .4byte gSpecialVar_0x8005 -_0810D460: - movs r0, 0 - bl GetNationalPokedexCount - ldr r1, _0810D480 @ =gSpecialVar_0x8005 - strh r0, [r1] - movs r0, 0x1 - bl GetNationalPokedexCount -_0810D470: - ldr r1, _0810D484 @ =gSpecialVar_0x8006 - strh r0, [r1] - bl IsNationalPokedexEnabled - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_0810D480: .4byte gSpecialVar_0x8005 -_0810D484: .4byte gSpecialVar_0x8006 - thumb_func_end ScriptGetPokedexInfo - - thumb_func_start GetPokedexRatingText -GetPokedexRatingText: @ 810D488 - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x9 - bhi _0810D494 - b _0810D5EC -_0810D494: - cmp r0, 0x13 - bhi _0810D4A0 - ldr r0, _0810D49C @ =gUnknown_081C456A - b _0810D5F6 - .align 2, 0 -_0810D49C: .4byte gUnknown_081C456A -_0810D4A0: - cmp r0, 0x1D - bhi _0810D4AC - ldr r0, _0810D4A8 @ =gUnknown_081C45B0 - b _0810D5F6 - .align 2, 0 -_0810D4A8: .4byte gUnknown_081C45B0 -_0810D4AC: - cmp r0, 0x27 - bhi _0810D4B8 - ldr r0, _0810D4B4 @ =gUnknown_081C45F9 - b _0810D5F6 - .align 2, 0 -_0810D4B4: .4byte gUnknown_081C45F9 -_0810D4B8: - cmp r0, 0x31 - bhi _0810D4C4 - ldr r0, _0810D4C0 @ =gUnknown_081C4648 - b _0810D5F6 - .align 2, 0 -_0810D4C0: .4byte gUnknown_081C4648 -_0810D4C4: - cmp r0, 0x3B - bhi _0810D4D0 - ldr r0, _0810D4CC @ =gUnknown_081C467E - b _0810D5F6 - .align 2, 0 -_0810D4CC: .4byte gUnknown_081C467E -_0810D4D0: - cmp r0, 0x45 - bhi _0810D4DC - ldr r0, _0810D4D8 @ =gUnknown_081C46B9 - b _0810D5F6 - .align 2, 0 -_0810D4D8: .4byte gUnknown_081C46B9 -_0810D4DC: - cmp r0, 0x4F - bhi _0810D4E8 - ldr r0, _0810D4E4 @ =gUnknown_081C46FE - b _0810D5F6 - .align 2, 0 -_0810D4E4: .4byte gUnknown_081C46FE -_0810D4E8: - cmp r0, 0x59 - bhi _0810D4F4 - ldr r0, _0810D4F0 @ =gUnknown_081C4747 - b _0810D5F6 - .align 2, 0 -_0810D4F0: .4byte gUnknown_081C4747 -_0810D4F4: - cmp r0, 0x63 - bhi _0810D500 - ldr r0, _0810D4FC @ =gUnknown_081C4780 - b _0810D5F6 - .align 2, 0 -_0810D4FC: .4byte gUnknown_081C4780 -_0810D500: - cmp r0, 0x6D - bhi _0810D50C - ldr r0, _0810D508 @ =gUnknown_081C47DF - b _0810D5F6 - .align 2, 0 -_0810D508: .4byte gUnknown_081C47DF -_0810D50C: - cmp r0, 0x77 - bhi _0810D518 - ldr r0, _0810D514 @ =gUnknown_081C4828 - b _0810D5F6 - .align 2, 0 -_0810D514: .4byte gUnknown_081C4828 -_0810D518: - cmp r0, 0x81 - bhi _0810D524 - ldr r0, _0810D520 @ =gUnknown_081C4863 - b _0810D5F6 - .align 2, 0 -_0810D520: .4byte gUnknown_081C4863 -_0810D524: - cmp r0, 0x8B - bhi _0810D530 - ldr r0, _0810D52C @ =gUnknown_081C489C - b _0810D5F6 - .align 2, 0 -_0810D52C: .4byte gUnknown_081C489C -_0810D530: - cmp r0, 0x95 - bhi _0810D53C - ldr r0, _0810D538 @ =gUnknown_081C48EB - b _0810D5F6 - .align 2, 0 -_0810D538: .4byte gUnknown_081C48EB -_0810D53C: - cmp r0, 0x9F - bhi _0810D548 - ldr r0, _0810D544 @ =gUnknown_081C4936 - b _0810D5F6 - .align 2, 0 -_0810D544: .4byte gUnknown_081C4936 -_0810D548: - cmp r0, 0xA9 - bhi _0810D554 - ldr r0, _0810D550 @ =gUnknown_081C49A2 - b _0810D5F6 - .align 2, 0 -_0810D550: .4byte gUnknown_081C49A2 -_0810D554: - cmp r0, 0xB3 - bhi _0810D560 - ldr r0, _0810D55C @ =gUnknown_081C4A06 - b _0810D5F6 - .align 2, 0 -_0810D55C: .4byte gUnknown_081C4A06 -_0810D560: - cmp r0, 0xBD - bhi _0810D56C - ldr r0, _0810D568 @ =gUnknown_081C4A4F - b _0810D5F6 - .align 2, 0 -_0810D568: .4byte gUnknown_081C4A4F -_0810D56C: - cmp r0, 0xC7 - bls _0810D5DA - cmp r0, 0xC8 - bne _0810D5A8 - ldr r0, _0810D5A4 @ =0x00000199 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - bne _0810D5DA - movs r0, 0xCD - lsls r0, 1 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - bne _0810D5DA - b _0810D5F4 - .align 2, 0 -_0810D5A4: .4byte 0x00000199 -_0810D5A8: - cmp r0, 0xC9 - bne _0810D5E8 - ldr r0, _0810D5E0 @ =0x00000199 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - beq _0810D5F4 - movs r0, 0xCD - lsls r0, 1 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - cmp r0, 0 - beq _0810D5F4 -_0810D5DA: - ldr r0, _0810D5E4 @ =gUnknown_081C4A91 - b _0810D5F6 - .align 2, 0 -_0810D5E0: .4byte 0x00000199 -_0810D5E4: .4byte gUnknown_081C4A91 -_0810D5E8: - cmp r0, 0xCA - beq _0810D5F4 -_0810D5EC: - ldr r0, _0810D5F0 @ =gUnknown_081C4520 - b _0810D5F6 - .align 2, 0 -_0810D5F0: .4byte gUnknown_081C4520 -_0810D5F4: - ldr r0, _0810D5FC @ =gUnknown_081C4ADA -_0810D5F6: - pop {r1} - bx r1 - .align 2, 0 -_0810D5FC: .4byte gUnknown_081C4ADA - thumb_func_end GetPokedexRatingText - - thumb_func_start ShowPokedexRatingMessage -ShowPokedexRatingMessage: @ 810D600 - push {lr} - ldr r0, _0810D614 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - bl GetPokedexRatingText - bl ShowFieldMessage - pop {r0} - bx r0 - .align 2, 0 -_0810D614: .4byte gSpecialVar_0x8004 - thumb_func_end ShowPokedexRatingMessage - - .align 2, 0 @ Don't pad with nop. diff --git a/include/field_message_box.h b/include/field_message_box.h index 50d96ccd1..c35aaf595 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -10,10 +10,10 @@ enum }; void InitFieldMessageBox(void); -bool8 ShowFieldMessage(u8 *message); -bool8 ShowFieldAutoScrollMessage(u8 *message); -bool8 unref_sub_8064BB8(u8 *message); -bool8 unref_sub_8064BD0(u8 *message); +bool8 ShowFieldMessage(const u8 *message); +bool8 ShowFieldAutoScrollMessage(const u8 *message); +bool8 unref_sub_8064BB8(const u8 *message); +bool8 unref_sub_8064BD0(const u8 *message); void HideFieldMessageBox(void); u8 GetFieldMessageBoxMode(void); bool8 IsFieldMessageBoxHidden(void); diff --git a/ld_script.txt b/ld_script.txt index d294a4db4..0cbe9a8e7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -215,7 +215,7 @@ SECTIONS { asm/fldeff_flash.o(.text); src/post_battle_event_funcs.o(.text); src/time_events.o(.text); - asm/birch_pc.o(.text); + src/birch_pc.o(.text); src/hof_pc.o(.text); src/field_specials.o(.text); asm/field_specials.o(.text); diff --git a/src/birch_pc.c b/src/birch_pc.c new file mode 100644 index 000000000..89eafc0ce --- /dev/null +++ b/src/birch_pc.c @@ -0,0 +1,114 @@ +#include "global.h" +#include "asm.h" +#include "event_data.h" +#include "field_message_box.h" +#include "pokedex.h" +#include "species.h" + +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; + +extern const u8 gUnknown_081C4520[]; +extern const u8 gUnknown_081C456A[]; +extern const u8 gUnknown_081C45B0[]; +extern const u8 gUnknown_081C45F9[]; +extern const u8 gUnknown_081C4648[]; +extern const u8 gUnknown_081C467E[]; +extern const u8 gUnknown_081C46B9[]; +extern const u8 gUnknown_081C46FE[]; +extern const u8 gUnknown_081C4747[]; +extern const u8 gUnknown_081C4780[]; +extern const u8 gUnknown_081C47DF[]; +extern const u8 gUnknown_081C4828[]; +extern const u8 gUnknown_081C4863[]; +extern const u8 gUnknown_081C489C[]; +extern const u8 gUnknown_081C48EB[]; +extern const u8 gUnknown_081C4936[]; +extern const u8 gUnknown_081C49A2[]; +extern const u8 gUnknown_081C4A06[]; +extern const u8 gUnknown_081C4A4F[]; +extern const u8 gUnknown_081C4A91[]; +extern const u8 gUnknown_081C4ADA[]; + +bool16 ScriptGetPokedexInfo(void) +{ + if (!gSpecialVar_0x8004) + { + gSpecialVar_0x8005 = GetHoennPokedexCount(0); + gSpecialVar_0x8006 = GetHoennPokedexCount(1); + } + else + { + gSpecialVar_0x8005 = GetNationalPokedexCount(0); + gSpecialVar_0x8006 = GetNationalPokedexCount(1); + } + + return IsNationalPokedexEnabled(); +} + +const u8 *GetPokedexRatingText(u16 count) +{ + if (count < 10) + return gUnknown_081C4520; + if (count < 20) + return gUnknown_081C456A; + if (count < 30) + return gUnknown_081C45B0; + if (count < 40) + return gUnknown_081C45F9; + if (count < 50) + return gUnknown_081C4648; + if (count < 60) + return gUnknown_081C467E; + if (count < 70) + return gUnknown_081C46B9; + if (count < 80) + return gUnknown_081C46FE; + if (count < 90) + return gUnknown_081C4747; + if (count < 100) + return gUnknown_081C4780; + if (count < 110) + return gUnknown_081C47DF; + if (count < 120) + return gUnknown_081C4828; + if (count < 130) + return gUnknown_081C4863; + if (count < 140) + return gUnknown_081C489C; + if (count < 150) + return gUnknown_081C48EB; + if (count < 160) + return gUnknown_081C4936; + if (count < 170) + return gUnknown_081C49A2; + if (count < 180) + return gUnknown_081C4A06; + if (count < 190) + return gUnknown_081C4A4F; + if (count < 200) + return gUnknown_081C4A91; + if (count == 200) + { + if (sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) + || sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) + return gUnknown_081C4A91; + return gUnknown_081C4ADA; + } + if (count == 201) + { + if (sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) + && sub_8090D90(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) + return gUnknown_081C4A91; + return gUnknown_081C4ADA; + } + if (count == 202) + return gUnknown_081C4ADA; + return gUnknown_081C4520; +} + +void ShowPokedexRatingMessage(void) +{ + ShowFieldMessage(GetPokedexRatingText(gSpecialVar_0x8004)); +} diff --git a/src/field_message_box.c b/src/field_message_box.c index 2a5f90d15..798725540 100644 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -15,7 +15,7 @@ static u8 sMessageBoxMode; static void Task_FieldMessageBox(u8 taskId); static void CreateFieldMessageBoxTask(void); static void DestroyFieldMessageBoxTask(void); -static void PrintFieldMessage(u8 *message); +static void PrintFieldMessage(const u8 *message); static void PrintFieldMessageFromStringVar4(void); void InitFieldMessageBox(void) @@ -67,7 +67,7 @@ static void DestroyFieldMessageBoxTask(void) DestroyTask(taskId); } -bool8 ShowFieldMessage(u8 *message) +bool8 ShowFieldMessage(const u8 *message) { if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) { @@ -81,7 +81,7 @@ bool8 ShowFieldMessage(u8 *message) } } -bool8 ShowFieldAutoScrollMessage(u8 *message) +bool8 ShowFieldAutoScrollMessage(const u8 *message) { if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) { @@ -95,14 +95,14 @@ bool8 ShowFieldAutoScrollMessage(u8 *message) } } -bool8 unref_sub_8064BB8(u8 *message) +bool8 unref_sub_8064BB8(const u8 *message) { sMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL; PrintFieldMessage(message); return TRUE; } -bool8 unref_sub_8064BD0(u8 *message) +bool8 unref_sub_8064BD0(const u8 *message) { if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) { @@ -116,7 +116,7 @@ bool8 unref_sub_8064BD0(u8 *message) } } -static void PrintFieldMessage(u8 *message) +static void PrintFieldMessage(const u8 *message) { StringExpandPlaceholders(gStringVar4, message); sub_8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); |