diff options
40 files changed, 551 insertions, 631 deletions
diff --git a/asm/berry.s b/asm/berry.s deleted file mode 100644 index 5537e3590..000000000 --- a/asm/berry.s +++ /dev/null @@ -1,311 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_809C718 -sub_809C718: @ 809C718 - push {r4,r5,lr} - ldr r2, _0809C778 @ =gSaveBlock1Ptr - ldr r1, [r2] - ldr r0, _0809C77C @ =gUnknown_83DF7E8 - ldr r3, _0809C780 @ =0x000030ec - adds r1, r3 - movs r4, 0x93 - lsls r4, 3 - adds r0, r4 - ldm r0!, {r3-r5} - stm r1!, {r3-r5} - ldm r0!, {r3-r5} - stm r1!, {r3-r5} - ldr r0, [r0] - str r0, [r1] - movs r1, 0 - adds r4, r2, 0 - adds r5, r4, 0 - ldr r3, _0809C784 @ =0x00003108 - movs r2, 0 -_0809C740: - ldr r0, [r5] - adds r0, r3 - adds r0, r1 - strb r2, [r0] - adds r1, 0x1 - cmp r1, 0x11 - ble _0809C740 - ldr r0, [r4] - ldr r5, _0809C788 @ =0x0000311a - adds r0, r5 - movs r1, 0 - strb r1, [r0] - ldr r0, [r4] - ldr r2, _0809C78C @ =0x0000311b - adds r0, r2 - strb r1, [r0] - ldr r0, [r4] - ldr r3, _0809C780 @ =0x000030ec - adds r0, r3 - bl GetEnigmaBerryChecksum - ldr r1, [r4] - ldr r4, _0809C790 @ =0x0000311c - adds r1, r4 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809C778: .4byte gSaveBlock1Ptr -_0809C77C: .4byte gUnknown_83DF7E8 -_0809C780: .4byte 0x000030ec -_0809C784: .4byte 0x00003108 -_0809C788: .4byte 0x0000311a -_0809C78C: .4byte 0x0000311b -_0809C790: .4byte 0x0000311c - thumb_func_end sub_809C718 - - thumb_func_start sub_809C794 -sub_809C794: @ 809C794 - push {lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r0, _0809C7B8 @ =gSaveBlock1Ptr - ldr r1, [r0] - ldr r0, _0809C7BC @ =0x000030ec - adds r1, r0 - ldr r2, _0809C7C0 @ =0x0100001a - mov r0, sp - bl CpuSet - bl sub_809C718 - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0809C7B8: .4byte gSaveBlock1Ptr -_0809C7BC: .4byte 0x000030ec -_0809C7C0: .4byte 0x0100001a - thumb_func_end sub_809C794 - - thumb_func_start SetEnigmaBerry -SetEnigmaBerry: @ 809C7C4 - push {r4-r7,lr} - adds r4, r0, 0 - bl sub_809C794 - adds r5, r4, 0 - ldr r0, _0809C824 @ =gSaveBlock1Ptr - ldr r2, [r0] - ldr r0, _0809C828 @ =0x000030ec - adds r4, r2, r0 - adds r1, r4, 0 - adds r0, r5, 0 - ldm r0!, {r3,r6,r7} - stm r1!, {r3,r6,r7} - ldm r0!, {r3,r6,r7} - stm r1!, {r3,r6,r7} - ldr r0, [r0] - str r0, [r1] - movs r3, 0 - ldr r0, _0809C82C @ =0x00003108 - adds r6, r2, r0 - ldr r1, _0809C830 @ =0x00000516 - adds r2, r5, r1 -_0809C7F0: - adds r0, r6, r3 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x11 - ble _0809C7F0 - movs r3, 0xA5 - lsls r3, 3 - adds r0, r5, r3 - ldrb r0, [r0] - adds r1, r4, 0 - adds r1, 0x2E - strb r0, [r1] - ldr r6, _0809C834 @ =0x00000529 - adds r0, r5, r6 - ldrb r0, [r0] - adds r1, 0x1 - strb r0, [r1] - adds r0, r4, 0 - bl GetEnigmaBerryChecksum - str r0, [r4, 0x30] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809C824: .4byte gSaveBlock1Ptr -_0809C828: .4byte 0x000030ec -_0809C82C: .4byte 0x00003108 -_0809C830: .4byte 0x00000516 -_0809C834: .4byte 0x00000529 - thumb_func_end SetEnigmaBerry - - thumb_func_start GetEnigmaBerryChecksum -GetEnigmaBerryChecksum: @ 809C838 - push {lr} - adds r3, r0, 0 - movs r2, 0 - movs r1, 0 -_0809C840: - adds r0, r3, r1 - ldrb r0, [r0] - adds r2, r0 - adds r1, 0x1 - cmp r1, 0x2F - bls _0809C840 - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end GetEnigmaBerryChecksum - - thumb_func_start IsEnigmaBerryValid -IsEnigmaBerryValid: @ 809C854 - push {r4,lr} - ldr r4, _0809C888 @ =gSaveBlock1Ptr - ldr r1, [r4] - movs r2, 0xC4 - lsls r2, 6 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0809C898 - ldr r2, _0809C88C @ =0x000030f6 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0809C898 - ldr r2, _0809C890 @ =0x000030ec - adds r0, r1, r2 - bl GetEnigmaBerryChecksum - ldr r1, [r4] - ldr r2, _0809C894 @ =0x0000311c - adds r1, r2 - ldr r1, [r1] - cmp r0, r1 - bne _0809C898 - movs r0, 0x1 - b _0809C89A - .align 2, 0 -_0809C888: .4byte gSaveBlock1Ptr -_0809C88C: .4byte 0x000030f6 -_0809C890: .4byte 0x000030ec -_0809C894: .4byte 0x0000311c -_0809C898: - movs r0, 0 -_0809C89A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsEnigmaBerryValid - - thumb_func_start sub_809C8A0 -sub_809C8A0: @ 809C8A0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2B - bne _0809C8C4 - bl IsEnigmaBerryValid - cmp r0, 0 - beq _0809C8C4 - ldr r0, _0809C8BC @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _0809C8C0 @ =0x000030ec - b _0809C8D8 - .align 2, 0 -_0809C8BC: .4byte gSaveBlock1Ptr -_0809C8C0: .4byte 0x000030ec -_0809C8C4: - subs r0, r4, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2A - bls _0809C8D0 - movs r4, 0x1 -_0809C8D0: - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - ldr r1, _0809C8E0 @ =gUnknown_83DF7CC -_0809C8D8: - adds r0, r1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0809C8E0: .4byte gUnknown_83DF7CC - thumb_func_end sub_809C8A0 - - thumb_func_start ItemIdToBerryType -ItemIdToBerryType: @ 809C8E4 - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - ldr r2, _0809C900 @ =0xff7b0000 - adds r0, r2 - lsrs r0, 16 - cmp r0, 0x2A - bhi _0809C904 - adds r0, r1, 0 - adds r0, 0x7C - lsls r0, 24 - lsrs r0, 24 - b _0809C906 - .align 2, 0 -_0809C900: .4byte 0xff7b0000 -_0809C904: - movs r0, 0x1 -_0809C906: - pop {r1} - bx r1 - thumb_func_end ItemIdToBerryType - - thumb_func_start BerryTypeToItemId -BerryTypeToItemId: @ 809C90C - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - ldr r2, _0809C928 @ =0xffff0000 - adds r0, r2 - lsrs r0, 16 - cmp r0, 0x2A - bhi _0809C92C - adds r0, r1, 0 - adds r0, 0x84 - lsls r0, 16 - lsrs r0, 16 - b _0809C92E - .align 2, 0 -_0809C928: .4byte 0xffff0000 -_0809C92C: - movs r0, 0x85 -_0809C92E: - pop {r1} - bx r1 - thumb_func_end BerryTypeToItemId - - thumb_func_start GetBerryNameByBerryType -GetBerryNameByBerryType: @ 809C934 - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - bl sub_809C8A0 - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0x6 - bl memcpy - movs r0, 0xFF - strb r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - thumb_func_end GetBerryNameByBerryType - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/berry_crush_3.s b/asm/berry_crush_3.s index 23968f655..f837c4929 100644 --- a/asm/berry_crush_3.s +++ b/asm/berry_crush_3.s @@ -1537,7 +1537,7 @@ _0814E21A: lsls r1, r2, 3 subs r1, r2 lsls r1, 2 - ldr r0, _0814E294 @ =gUnknown_83DF7E8 + ldr r0, _0814E294 @ =sBerries adds r1, r0 ldr r0, _0814E298 @ =gStringVar1 bl StringCopy @@ -1591,7 +1591,7 @@ _0814E27E: bl StringCopy b _0814E2B8 .align 2, 0 -_0814E294: .4byte gUnknown_83DF7E8 +_0814E294: .4byte sBerries _0814E298: .4byte gStringVar1 _0814E29C: .4byte gUnknown_846F4B8 _0814E2A0: .4byte gStringVar4 diff --git a/asm/overworld.s b/asm/overworld.s index 4210aaa9d..103ed2c46 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -1178,7 +1178,7 @@ _080554B8: .4byte gSaveBlock1Ptr sub_80554BC: @ 80554BC push {lr} ldr r0, _080554C8 @ =gUnknown_2031DBC - bl sub_80BFCD0 + bl SetBlackoutRespawnWarpAndHealerNpc pop {r0} bx r0 .align 2, 0 diff --git a/asm/prof_pc.s b/asm/prof_pc.s deleted file mode 100644 index 9c9dfa79c..000000000 --- a/asm/prof_pc.s +++ /dev/null @@ -1,204 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80CA3D8 -sub_80CA3D8: @ 80CA3D8 - push {lr} - ldr r0, _080CA3F4 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0 - bne _080CA3FC - movs r0, 0 - bl sub_8088EDC - ldr r1, _080CA3F8 @ =gSpecialVar_0x8005 - strh r0, [r1] - movs r0, 0x1 - bl sub_8088EDC - b _080CA40C - .align 2, 0 -_080CA3F4: .4byte gSpecialVar_0x8004 -_080CA3F8: .4byte gSpecialVar_0x8005 -_080CA3FC: - movs r0, 0 - bl pokedex_count - ldr r1, _080CA41C @ =gSpecialVar_0x8005 - strh r0, [r1] - movs r0, 0x1 - bl pokedex_count -_080CA40C: - ldr r1, _080CA420 @ =gSpecialVar_0x8006 - strh r0, [r1] - bl sub_806E25C - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_080CA41C: .4byte gSpecialVar_0x8005 -_080CA420: .4byte gSpecialVar_0x8006 - thumb_func_end sub_80CA3D8 - - thumb_func_start sub_80CA424 -sub_80CA424: @ 80CA424 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - ldr r1, _080CA440 @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - cmp r2, 0x9 - bhi _080CA436 - b _080CA50C -_080CA436: - cmp r2, 0x13 - bhi _080CA448 - ldr r0, _080CA444 @ =gUnknown_81A6D6D - b _080CA51A - .align 2, 0 -_080CA440: .4byte gSpecialVar_Result -_080CA444: .4byte gUnknown_81A6D6D -_080CA448: - cmp r2, 0x1D - bhi _080CA454 - ldr r0, _080CA450 @ =gUnknown_81A6DDF - b _080CA51A - .align 2, 0 -_080CA450: .4byte gUnknown_81A6DDF -_080CA454: - cmp r2, 0x27 - bhi _080CA460 - ldr r0, _080CA45C @ =gUnknown_81A6E36 - b _080CA51A - .align 2, 0 -_080CA45C: .4byte gUnknown_81A6E36 -_080CA460: - cmp r2, 0x31 - bhi _080CA46C - ldr r0, _080CA468 @ =gUnknown_81A6EA4 - b _080CA51A - .align 2, 0 -_080CA468: .4byte gUnknown_81A6EA4 -_080CA46C: - cmp r2, 0x3B - bhi _080CA478 - ldr r0, _080CA474 @ =gUnknown_81A6F0B - b _080CA51A - .align 2, 0 -_080CA474: .4byte gUnknown_81A6F0B -_080CA478: - cmp r2, 0x45 - bhi _080CA484 - ldr r0, _080CA480 @ =gUnknown_81A6F71 - b _080CA51A - .align 2, 0 -_080CA480: .4byte gUnknown_81A6F71 -_080CA484: - cmp r2, 0x4F - bhi _080CA490 - ldr r0, _080CA48C @ =gUnknown_81A6FAB - b _080CA51A - .align 2, 0 -_080CA48C: .4byte gUnknown_81A6FAB -_080CA490: - cmp r2, 0x59 - bhi _080CA49C - ldr r0, _080CA498 @ =gUnknown_81A6FF1 - b _080CA51A - .align 2, 0 -_080CA498: .4byte gUnknown_81A6FF1 -_080CA49C: - cmp r2, 0x63 - bhi _080CA4A8 - ldr r0, _080CA4A4 @ =gUnknown_81A7031 - b _080CA51A - .align 2, 0 -_080CA4A4: .4byte gUnknown_81A7031 -_080CA4A8: - cmp r2, 0x6D - bhi _080CA4B4 - ldr r0, _080CA4B0 @ =gUnknown_81A7063 - b _080CA51A - .align 2, 0 -_080CA4B0: .4byte gUnknown_81A7063 -_080CA4B4: - cmp r2, 0x77 - bhi _080CA4C0 - ldr r0, _080CA4BC @ =gUnknown_81A70A5 - b _080CA51A - .align 2, 0 -_080CA4BC: .4byte gUnknown_81A70A5 -_080CA4C0: - cmp r2, 0x81 - bhi _080CA4CC - ldr r0, _080CA4C8 @ =gUnknown_81A70D8 - b _080CA51A - .align 2, 0 -_080CA4C8: .4byte gUnknown_81A70D8 -_080CA4CC: - cmp r2, 0x8B - bhi _080CA4D8 - ldr r0, _080CA4D4 @ =gUnknown_81A7108 - b _080CA51A - .align 2, 0 -_080CA4D4: .4byte gUnknown_81A7108 -_080CA4D8: - cmp r2, 0x95 - bls _080CA4F6 - cmp r2, 0x96 - bne _080CA508 - movs r0, 0x97 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetSetPokedexFlag - lsls r0, 24 - cmp r0, 0 - beq _080CA500 -_080CA4F6: - ldr r0, _080CA4FC @ =gUnknown_81A7137 - b _080CA51A - .align 2, 0 -_080CA4FC: .4byte gUnknown_81A7137 -_080CA500: - ldr r1, _080CA504 @ =gSpecialVar_Result - b _080CA514 - .align 2, 0 -_080CA504: .4byte gSpecialVar_Result -_080CA508: - cmp r2, 0x97 - beq _080CA514 -_080CA50C: - ldr r0, _080CA510 @ =gUnknown_81A6D17 - b _080CA51A - .align 2, 0 -_080CA510: .4byte gUnknown_81A6D17 -_080CA514: - movs r0, 0x1 - strh r0, [r1] - ldr r0, _080CA520 @ =gUnknown_81A7175 -_080CA51A: - pop {r1} - bx r1 - .align 2, 0 -_080CA520: .4byte gUnknown_81A7175 - thumb_func_end sub_80CA424 - - thumb_func_start sub_80CA524 -sub_80CA524: @ 80CA524 - push {lr} - ldr r0, _080CA538 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - bl sub_80CA424 - bl ShowFieldMessage - pop {r0} - bx r0 - .align 2, 0 -_080CA538: .4byte gSpecialVar_0x8004 - thumb_func_end sub_80CA524 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/text_window_graphics.s b/asm/text_window_graphics.s deleted file mode 100644 index 6c725a553..000000000 --- a/asm/text_window_graphics.s +++ /dev/null @@ -1,30 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8069788 -sub_8069788: @ 8069788 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bhi _080697A0 - lsls r0, 3 - ldr r1, _0806979C @ =gUnknown_8471E8C - adds r0, r1 - b _080697A2 - .align 2, 0 -_0806979C: .4byte gUnknown_8471E8C -_080697A0: - ldr r0, _080697A8 @ =gUnknown_8471E8C -_080697A2: - pop {r1} - bx r1 - .align 2, 0 -_080697A8: .4byte gUnknown_8471E8C - thumb_func_end sub_8069788 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index 00f0caecf..7970f26c4 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -605,12 +605,9 @@ gUnknown_83DF0F2:: @ 83DF0F2 .incbin "baserom.gba", 0x3DF0F2, 0x6 gUnknown_83DF0F8:: @ 83DF0F8 - .incbin "baserom.gba", 0x3DF0F8, 0x6D4 + .incbin "baserom.gba", 0x3DF0F8, 0x6F0 -gUnknown_83DF7CC:: @ 83DF7CC - .incbin "baserom.gba", 0x3DF7CC, 0x1C - -gUnknown_83DF7E8:: @ 83DF7E8 +sBerries:: @ 83DF7E8 .incbin "baserom.gba", 0x3DF7E8, 0x4B4 gUnknown_83DFC9C:: @ 83DFC9C diff --git a/data/data_8468C98.s b/data/data_8468C98.s index 0f3b039c1..629dcaf02 100644 --- a/data/data_8468C98.s +++ b/data/data_8468C98.s @@ -321,16 +321,4 @@ gUnknown_846FB0C:: @ 846FB0C .incbin "baserom.gba", 0x46FB0C, 0x1000 gUnknown_8470B0C:: @ 8470B0C - .incbin "baserom.gba", 0x470B0C, 0xF40 - -gUnknown_8471A4C:: @ 8471A4C - .incbin "baserom.gba", 0x471A4C, 0x120 - -gUnknown_8471B6C:: @ 8471B6C - .incbin "baserom.gba", 0x471B6C, 0x280 - -gUnknown_8471DEC:: @ 8471DEC - .incbin "baserom.gba", 0x471DEC, 0xA0 - -gUnknown_8471E8C:: @ 8471E8C - .incbin "baserom.gba", 0x471E8C, 0x50 + .incbin "baserom.gba", 0x470B0C, 0x260 diff --git a/data/maps/PalletTown/scripts.inc b/data/maps/PalletTown/scripts.inc index ed9d01395..c1790fb90 100644 --- a/data/maps/PalletTown/scripts.inc +++ b/data/maps/PalletTown/scripts.inc @@ -54,7 +54,7 @@ EventScript_1654D8:: @ 81654D8 goto_if 0, EventScript_1655A1 msgbox gUnknown_817D8BF setvar VAR_0x8004, 0 - specialvar VAR_RESULT, sub_80CA3D8 + specialvar VAR_RESULT, Special_GetPokedexCount copyvar VAR_0x8008, VAR_0x8005 copyvar VAR_0x8009, VAR_0x8006 getnumberstring 0, VAR_0x8008 diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc index 44f6bbc5a..449c31027 100644 --- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc +++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc @@ -836,7 +836,7 @@ Movement_1698D0:: @ 81698D0 EventScript_1698D6:: @ 81698D6 setvar VAR_0x8004, 0 - specialvar VAR_RESULT, sub_80CA3D8 + specialvar VAR_RESULT, Special_GetPokedexCount copyvar VAR_0x8008, VAR_0x8005 copyvar VAR_0x8009, VAR_0x8006 getnumberstring 0, VAR_0x8008 diff --git a/data/maps/Route10_PokemonCenter_1F/scripts.inc b/data/maps/Route10_PokemonCenter_1F/scripts.inc index 15889ad8f..7d47d07df 100644 --- a/data/maps/Route10_PokemonCenter_1F/scripts.inc +++ b/data/maps/Route10_PokemonCenter_1F/scripts.inc @@ -37,7 +37,7 @@ Route10_PokemonCenter_1F_EventScript_16FC65:: @ 816FC65 compare_var_to_value VAR_RESULT, 0 goto_if_eq EventScript_1A7AD1 setvar VAR_0x8004, 0 - specialvar VAR_RESULT, sub_80CA3D8 + specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 call EventScript_16FCF1 compare_var_to_value VAR_0x8006, 20 diff --git a/data/maps/Route11_EastEntrance_2F/scripts.inc b/data/maps/Route11_EastEntrance_2F/scripts.inc index abc877c0e..334e71ec4 100644 --- a/data/maps/Route11_EastEntrance_2F/scripts.inc +++ b/data/maps/Route11_EastEntrance_2F/scripts.inc @@ -66,7 +66,7 @@ Route11_EastEntrance_2F_EventScript_16FDD8:: @ 816FDD8 compare_var_to_value VAR_RESULT, 0 goto_if_eq EventScript_1A7AD1 setvar VAR_0x8004, 0 - specialvar VAR_RESULT, sub_80CA3D8 + specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 call EventScript_16FE64 compare_var_to_value VAR_0x8006, 30 diff --git a/data/maps/Route15_WestEntrance_2F/scripts.inc b/data/maps/Route15_WestEntrance_2F/scripts.inc index 36ea31ca0..1e06c0394 100644 --- a/data/maps/Route15_WestEntrance_2F/scripts.inc +++ b/data/maps/Route15_WestEntrance_2F/scripts.inc @@ -27,7 +27,7 @@ Route15_WestEntrance_2F_EventScript_1700B9:: @ 81700B9 compare_var_to_value VAR_RESULT, 0 goto_if_eq EventScript_1A7AD1 setvar VAR_0x8004, 0 - specialvar VAR_RESULT, sub_80CA3D8 + specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 call EventScript_170145 compare_var_to_value VAR_0x8006, 50 diff --git a/data/maps/Route16_NorthEntrance_2F/scripts.inc b/data/maps/Route16_NorthEntrance_2F/scripts.inc index 32685e669..6fa870c27 100644 --- a/data/maps/Route16_NorthEntrance_2F/scripts.inc +++ b/data/maps/Route16_NorthEntrance_2F/scripts.inc @@ -27,7 +27,7 @@ Route16_NorthEntrance_2F_EventScript_1702E3:: @ 81702E3 compare_var_to_value VAR_RESULT, 0 goto_if_eq EventScript_1A7AD1 setvar VAR_0x8004, 0 - specialvar VAR_RESULT, sub_80CA3D8 + specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 call EventScript_17036F compare_var_to_value VAR_0x8006, 40 diff --git a/data/maps/Route2_EastBuilding/scripts.inc b/data/maps/Route2_EastBuilding/scripts.inc index 9716879a1..a1b2d0e7a 100644 --- a/data/maps/Route2_EastBuilding/scripts.inc +++ b/data/maps/Route2_EastBuilding/scripts.inc @@ -11,7 +11,7 @@ Route2_EastBuilding_EventScript_16F67F:: @ 816F67F compare_var_to_value VAR_RESULT, 0 goto_if_eq EventScript_1A7AD1 setvar VAR_0x8004, 0 - specialvar VAR_RESULT, sub_80CA3D8 + specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 call EventScript_16F70B compare_var_to_value VAR_0x8006, 10 diff --git a/data/specials.inc b/data/specials.inc index ad439ae07..f40c3d3be 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -221,7 +221,7 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special nullsub_75 def_special nullsub_75 - def_special sub_80CA3D8 + def_special Special_GetPokedexCount def_special sub_80CA524 def_special sub_80CA86C def_special sub_80CA9A8 diff --git a/graphics/text_window/stdpal_0.pal b/graphics/text_window/stdpal_0.pal new file mode 100644 index 000000000..c64668073 --- /dev/null +++ b/graphics/text_window/stdpal_0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +255 255 255 +98 98 98 +213 213 205 +230 8 8 +255 189 115 +32 156 8 +148 246 148 +49 82 205 +164 197 246 +255 255 255 +213 230 246 +164 213 230 +230 246 255 +115 164 197 +74 115 164 diff --git a/graphics/text_window/stdpal_1.pal b/graphics/text_window/stdpal_1.pal new file mode 100644 index 000000000..df5d3c337 --- /dev/null +++ b/graphics/text_window/stdpal_1.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +255 255 255 +98 98 98 +213 213 205 +230 8 8 +255 189 115 +32 156 8 +148 246 148 +49 82 205 +164 197 246 +255 255 255 +205 205 222 +205 205 222 +230 246 255 +205 205 222 +106 115 123 diff --git a/graphics/text_window/stdpal_2.pal b/graphics/text_window/stdpal_2.pal new file mode 100644 index 000000000..6a14d67f0 --- /dev/null +++ b/graphics/text_window/stdpal_2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +255 255 255 +98 98 98 +213 213 205 +230 8 8 +255 189 115 +32 156 8 +148 246 148 +49 82 205 +164 197 246 +255 255 255 +74 205 238 +16 172 222 +0 82 115 +0 115 139 +0 123 197 diff --git a/graphics/text_window/stdpal_3.pal b/graphics/text_window/stdpal_3.pal new file mode 100644 index 000000000..9cbcdad4c --- /dev/null +++ b/graphics/text_window/stdpal_3.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +255 255 255 +98 98 98 +213 213 205 +230 8 8 +255 189 115 +32 156 8 +148 246 148 +49 82 205 +164 197 246 +255 0 255 +205 213 213 +156 205 222 +98 115 123 +65 172 230 +131 164 180 diff --git a/graphics/text_window/stdpal_4.pal b/graphics/text_window/stdpal_4.pal new file mode 100644 index 000000000..a004a081a --- /dev/null +++ b/graphics/text_window/stdpal_4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +255 255 255 +98 98 98 +213 213 205 +230 8 8 +255 189 115 +32 156 8 +148 246 148 +49 82 205 +164 197 246 +57 98 115 +131 131 131 +164 164 164 +197 197 205 +230 230 238 +65 90 106 diff --git a/graphics/text_window/unk_8470D6C.png b/graphics/text_window/unk_8470D6C.png Binary files differnew file mode 100644 index 000000000..d14130f9a --- /dev/null +++ b/graphics/text_window/unk_8470D6C.png diff --git a/graphics/text_window/unk_8470E8C.png b/graphics/text_window/unk_8470E8C.png Binary files differnew file mode 100644 index 000000000..747e243eb --- /dev/null +++ b/graphics/text_window/unk_8470E8C.png diff --git a/graphics/text_window/unk_8470FCC.png b/graphics/text_window/unk_8470FCC.png Binary files differnew file mode 100644 index 000000000..c8b21542d --- /dev/null +++ b/graphics/text_window/unk_8470FCC.png diff --git a/graphics/text_window/unk_84710EC.png b/graphics/text_window/unk_84710EC.png Binary files differnew file mode 100644 index 000000000..cb7e5383d --- /dev/null +++ b/graphics/text_window/unk_84710EC.png diff --git a/graphics/text_window/unk_847120C.png b/graphics/text_window/unk_847120C.png Binary files differnew file mode 100644 index 000000000..dc7e1951c --- /dev/null +++ b/graphics/text_window/unk_847120C.png diff --git a/graphics/text_window/unk_847132C.png b/graphics/text_window/unk_847132C.png Binary files differnew file mode 100644 index 000000000..ec72b2756 --- /dev/null +++ b/graphics/text_window/unk_847132C.png diff --git a/graphics/text_window/unk_847144C.png b/graphics/text_window/unk_847144C.png Binary files differnew file mode 100644 index 000000000..804df1a8b --- /dev/null +++ b/graphics/text_window/unk_847144C.png diff --git a/graphics/text_window/unk_847156C.png b/graphics/text_window/unk_847156C.png Binary files differnew file mode 100644 index 000000000..b1292016f --- /dev/null +++ b/graphics/text_window/unk_847156C.png diff --git a/graphics/text_window/unk_84716AC.png b/graphics/text_window/unk_84716AC.png Binary files differnew file mode 100644 index 000000000..94ec70d6e --- /dev/null +++ b/graphics/text_window/unk_84716AC.png diff --git a/graphics/text_window/unk_84717CC.png b/graphics/text_window/unk_84717CC.png Binary files differnew file mode 100644 index 000000000..0ea4b9a45 --- /dev/null +++ b/graphics/text_window/unk_84717CC.png diff --git a/graphics/text_window/unk_8471A4C.png b/graphics/text_window/unk_8471A4C.png Binary files differnew file mode 100644 index 000000000..ed43f0c4a --- /dev/null +++ b/graphics/text_window/unk_8471A4C.png diff --git a/graphics/text_window/unk_8471B6C.png b/graphics/text_window/unk_8471B6C.png Binary files differnew file mode 100644 index 000000000..c1fba5919 --- /dev/null +++ b/graphics/text_window/unk_8471B6C.png diff --git a/include/event_data.h b/include/event_data.h index 34d103967..013579ab5 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -36,6 +36,7 @@ bool32 sub_806E2BC(void); void sub_806E6FC(void); void sub_806E2D0(void); void sub_806E370(void); +bool32 sub_806E25C(void); extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; diff --git a/include/pokedex.h b/include/pokedex.h index ca642ed1a..b389bf821 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -21,5 +21,6 @@ enum s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId); u16 pokedex_count(u8); u16 sub_80C0844(u8); +u16 sub_8088EDC(u8); #endif // GUARD_POKEDEX_H diff --git a/include/text_window_graphics.h b/include/text_window_graphics.h new file mode 100644 index 000000000..1d7b2b7c9 --- /dev/null +++ b/include/text_window_graphics.h @@ -0,0 +1,18 @@ +#ifndef GUARD_TEXT_WINDOW_GRAPHICS_H +#define GUARD_TEXT_WINDOW_GRAPHICS_H + +struct TextWindowGraphics +{ + const void * tiles; + const void * palette; +}; + +extern const u16 gUnknown_8471A4C[]; +extern const u16 gUnknown_8471B6C[]; +extern const u16 gUnknown_8471DEC[][16]; + +extern const struct TextWindowGraphics gUnknown_8471E8C[]; + +const struct TextWindowGraphics * sub_8069788(u8 idx); + +#endif //GUARD_TEXT_WINDOW_GRAPHICS_H diff --git a/ld_script.txt b/ld_script.txt index eeb9f6564..5ff29f104 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -100,7 +100,7 @@ SECTIONS { asm/map_obj_80688E4.o(.text); asm/field_message_box.o(.text); asm/map_obj_lock.o(.text); - asm/text_window_graphics.o(.text); + src/text_window_graphics.o(.text); src/script.o(.text); src/scrcmd.o(.text); asm/field_control_avatar.o(.text); @@ -141,7 +141,7 @@ SECTIONS { asm/battle_anim_80989F8.o(.text); asm/item.o(.text); asm/shop.o(.text); - asm/berry.o(.text); + src/berry.o(.text); asm/script_menu.o(.text); asm/naming_screen.o(.text); src/money.o(.text); @@ -167,7 +167,7 @@ SECTIONS { asm/rom6.o(.text); asm/fldeff_flash.o(.text); asm/post_battle_event_funcs.o(.text); - asm/prof_pc.o(.text); + src/prof_pc.o(.text); asm/hof_pc.o(.text); asm/field_specials.o(.text); asm/battle_records.o(.text); @@ -428,6 +428,7 @@ SECTIONS { . = ALIGN(4); src/seagallop.o(.rodata); data/data_8468C98.o(.rodata); + src/text_window_graphics.o(.rodata); src/quest_log_8150454.o(.rodata); data/data_8471F00.o(.rodata); src/unk_815C980.o(.rodata); diff --git a/src/berry.c b/src/berry.c new file mode 100644 index 000000000..5cbcd4e90 --- /dev/null +++ b/src/berry.c @@ -0,0 +1,169 @@ +#include "global.h" +#include "berry.h" +#include "text.h" +#include "constants/items.h" + +extern const struct Berry sBerries[]; + +#define ENIGMA_BERRY_STRUCT ({const struct Berry2 *berries = (const struct Berry2 *)sBerries;berries[ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY];}) + +void sub_809C718(void) +{ + s32 i; + + gSaveBlock1Ptr->enigmaBerry.berry = ENIGMA_BERRY_STRUCT; + for (i = 0; i < 18; i++) + gSaveBlock1Ptr->enigmaBerry.itemEffect[i] = 0; + gSaveBlock1Ptr->enigmaBerry.holdEffect = 0; + gSaveBlock1Ptr->enigmaBerry.holdEffectParam = 0; + gSaveBlock1Ptr->enigmaBerry.checksum = GetEnigmaBerryChecksum(&gSaveBlock1Ptr->enigmaBerry); +} + +void sub_809C794(void) +{ + CpuFill16(0, &gSaveBlock1Ptr->enigmaBerry, sizeof(gSaveBlock1Ptr->enigmaBerry)); + sub_809C718(); +} + +#ifdef NONMATCHING +void SetEnigmaBerry(u8 * berry) +{ + struct EnigmaBerry * enigmaBerry; + + sub_809C794(); + + { + const struct Berry2 * src = (const struct Berry2 *)berry; + struct Berry2 * dest = &gSaveBlock1Ptr->enigmaBerry.berry; + *dest = *src; + } + + enigmaBerry = &gSaveBlock1Ptr->enigmaBerry; + { + s32 i = 0; + u8 * dest = gSaveBlock1Ptr->enigmaBerry.itemEffect; + const u8 * src = berry + 0x516; + + for (i = 0; i < 18; i++) dest[i] = src[i]; + } + enigmaBerry->holdEffect = berry[0x528]; + enigmaBerry->holdEffectParam = berry[0x529]; + enigmaBerry->checksum = GetEnigmaBerryChecksum(enigmaBerry); +} +#else +NAKED +void SetEnigmaBerry(u8 * berry) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tadds r4, r0, 0\n" + "\tbl sub_809C794\n" + "\tadds r5, r4, 0\n" + "\tldr r0, _0809C824 @ =gSaveBlock1Ptr\n" + "\tldr r2, [r0]\n" + "\tldr r0, _0809C828 @ =0x000030ec\n" + "\tadds r4, r2, r0\n" + "\tadds r1, r4, 0\n" + "\tadds r0, r5, 0\n" + "\tldm r0!, {r3,r6,r7}\n" + "\tstm r1!, {r3,r6,r7}\n" + "\tldm r0!, {r3,r6,r7}\n" + "\tstm r1!, {r3,r6,r7}\n" + "\tldr r0, [r0]\n" + "\tstr r0, [r1]\n" + "\tmovs r3, 0\n" + "\tldr r0, _0809C82C @ =0x00003108\n" + "\tadds r6, r2, r0\n" + "\tldr r1, _0809C830 @ =0x00000516\n" + "\tadds r2, r5, r1\n" + "_0809C7F0:\n" + "\tadds r0, r6, r3\n" + "\tadds r1, r2, r3\n" + "\tldrb r1, [r1]\n" + "\tstrb r1, [r0]\n" + "\tadds r3, 0x1\n" + "\tcmp r3, 0x11\n" + "\tble _0809C7F0\n" + "\tmovs r3, 0xA5\n" + "\tlsls r3, 3\n" + "\tadds r0, r5, r3\n" + "\tldrb r0, [r0]\n" + "\tadds r1, r4, 0\n" + "\tadds r1, 0x2E\n" + "\tstrb r0, [r1]\n" + "\tldr r6, _0809C834 @ =0x00000529\n" + "\tadds r0, r5, r6\n" + "\tldrb r0, [r0]\n" + "\tadds r1, 0x1\n" + "\tstrb r0, [r1]\n" + "\tadds r0, r4, 0\n" + "\tbl GetEnigmaBerryChecksum\n" + "\tstr r0, [r4, 0x30]\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809C824: .4byte gSaveBlock1Ptr\n" + "_0809C828: .4byte 0x000030ec\n" + "_0809C82C: .4byte 0x00003108\n" + "_0809C830: .4byte 0x00000516\n" + "_0809C834: .4byte 0x00000529"); +} +#endif + +u32 GetEnigmaBerryChecksum(struct EnigmaBerry * enigmaBerry) +{ + const u8 * src = (const u8 *)enigmaBerry; + u32 result = 0; + u32 i; + + for (i = 0; i < offsetof(struct EnigmaBerry, checksum); i++) + result += src[i]; + + return result; +} + +bool32 IsEnigmaBerryValid(void) +{ + if (gSaveBlock1Ptr->enigmaBerry.berry.stageDuration == 0) + return FALSE; + if (gSaveBlock1Ptr->enigmaBerry.berry.maxYield == 0) + return FALSE; + if (GetEnigmaBerryChecksum(&gSaveBlock1Ptr->enigmaBerry) != gSaveBlock1Ptr->enigmaBerry.checksum) + return FALSE; + + return TRUE; +} + +const struct Berry * sub_809C8A0(u8 berryIdx) +{ + if (berryIdx == ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY + 1 && IsEnigmaBerryValid()) + return (struct Berry *)&gSaveBlock1Ptr->enigmaBerry.berry; + + if (berryIdx == 0 || berryIdx > ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY + 1) + berryIdx = 1; + + return &sBerries[berryIdx - 1]; +} + +u8 ItemIdToBerryType(u16 itemId) +{ + if (itemId - ITEM_CHERI_BERRY < 0 || itemId - ITEM_CHERI_BERRY > ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY) + return 1; + + return itemId - ITEM_CHERI_BERRY + 1; +} + +u16 BerryTypeToItemId(u16 berryType) +{ + if (berryType - 1 < 0 || berryType - 1 > ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY) + return ITEM_CHERI_BERRY; + + return berryType + ITEM_CHERI_BERRY - 1; +} + +void GetBerryNameByBerryType(u8 berryType, u8 * dest) +{ + const struct Berry * berry = sub_809C8A0(berryType); + memcpy(dest, berry->name, 6); + dest[6] = EOS; +} diff --git a/src/heal_location.c b/src/heal_location.c index 574c126e2..9756f0951 100644 --- a/src/heal_location.c +++ b/src/heal_location.c @@ -5,56 +5,85 @@ #include "constants/maps.h" #include "constants/spawn_points.h" -void sub_80BFE00(u32 healLocationIdx); +void SetBlackoutRespawnHealerNpcAsLastTalked(u32 healLocationIdx); +// This array defines the fly points for unlocked spawns. static const struct HealLocation sSpawnPoints[] = { - {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x06, 0x08}, - {MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY), 0x1a, 0x1b}, - {MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY), 0x11, 0x1a}, - {MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY), 0x16, 0x14}, - {MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN), 0x06, 0x06}, - {MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY), 0x0f, 0x07}, - {MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY), 0x30, 0x0c}, - {MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY), 0x19, 0x20}, - {MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND), 0x0e, 0x0c}, - {MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR), 0x0b, 0x07}, - {MAP_GROUP(SAFFRON_CITY_DUPLICATE), MAP_NUM(SAFFRON_CITY_DUPLICATE), 0x18, 0x27}, - {MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4), 0x0c, 0x06}, - {MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10), 0x0d, 0x15}, - {MAP_GROUP(ONE_ISLAND), MAP_NUM(ONE_ISLAND), 0x0e, 0x06}, - {MAP_GROUP(TWO_ISLAND), MAP_NUM(TWO_ISLAND), 0x15, 0x08}, - {MAP_GROUP(THREE_ISLAND), MAP_NUM(THREE_ISLAND), 0x0e, 0x1c}, - {MAP_GROUP(FOUR_ISLAND), MAP_NUM(FOUR_ISLAND), 0x12, 0x15}, - {MAP_GROUP(FIVE_ISLAND), MAP_NUM(FIVE_ISLAND), 0x12, 0x07}, - {MAP_GROUP(SEVEN_ISLAND), MAP_NUM(SEVEN_ISLAND), 0x0c, 0x04}, - {MAP_GROUP(SIX_ISLAND), MAP_NUM(SIX_ISLAND), 0x0b, 0x0c}, + [SPAWN_PALLET_TOWN - 1] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x06, 0x08}, + [SPAWN_VIRIDIAN_CITY - 1] = {MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY), 0x1a, 0x1b}, + [SPAWN_PEWTER_CITY - 1] = {MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY), 0x11, 0x1a}, + [SPAWN_CERULEAN_CITY - 1] = {MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY), 0x16, 0x14}, + [SPAWN_LAVENDER_TOWN - 1] = {MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN), 0x06, 0x06}, + [SPAWN_VERMILION_CITY - 1] = {MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY), 0x0f, 0x07}, + [SPAWN_CELADON_CITY - 1] = {MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY), 0x30, 0x0c}, + [SPAWN_FUCHSIA_CITY - 1] = {MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY), 0x19, 0x20}, + [SPAWN_CINNABAR_ISLAND - 1] = {MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND), 0x0e, 0x0c}, + [SPAWN_INDIGO_PLATEAU - 1] = {MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR), 0x0b, 0x07}, + [SPAWN_SAFFRON_CITY - 1] = {MAP_GROUP(SAFFRON_CITY_DUPLICATE), MAP_NUM(SAFFRON_CITY_DUPLICATE), 0x18, 0x27}, + [SPAWN_ROUTE4 - 1] = {MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4), 0x0c, 0x06}, + [SPAWN_ROUTE10 - 1] = {MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10), 0x0d, 0x15}, + [SPAWN_ONE_ISLAND - 1] = {MAP_GROUP(ONE_ISLAND), MAP_NUM(ONE_ISLAND), 0x0e, 0x06}, + [SPAWN_TWO_ISLAND - 1] = {MAP_GROUP(TWO_ISLAND), MAP_NUM(TWO_ISLAND), 0x15, 0x08}, + [SPAWN_THREE_ISLAND - 1] = {MAP_GROUP(THREE_ISLAND), MAP_NUM(THREE_ISLAND), 0x0e, 0x1c}, + [SPAWN_FOUR_ISLAND - 1] = {MAP_GROUP(FOUR_ISLAND), MAP_NUM(FOUR_ISLAND), 0x12, 0x15}, + [SPAWN_FIVE_ISLAND - 1] = {MAP_GROUP(FIVE_ISLAND), MAP_NUM(FIVE_ISLAND), 0x12, 0x07}, + [SPAWN_SEVEN_ISLAND - 1] = {MAP_GROUP(SEVEN_ISLAND), MAP_NUM(SEVEN_ISLAND), 0x0c, 0x04}, + [SPAWN_SIX_ISLAND - 1] = {MAP_GROUP(SIX_ISLAND), MAP_NUM(SIX_ISLAND), 0x0b, 0x0c}, }; -const u16 gUnknown_83EEC98[][2] = { - {MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)}, - {MAP_GROUP(VIRIDIAN_CITY_POKEMON_CENTER_1F), MAP_NUM(VIRIDIAN_CITY_POKEMON_CENTER_1F)}, - {MAP_GROUP(PEWTER_CITY_POKEMON_CENTER_1F), MAP_NUM(PEWTER_CITY_POKEMON_CENTER_1F)}, - {MAP_GROUP(CERULEAN_CITY_POKEMON_CENTER_1F), MAP_NUM(CERULEAN_CITY_POKEMON_CENTER_1F)}, - {MAP_GROUP(LAVENDER_TOWN_POKEMON_CENTER_1F), MAP_NUM(LAVENDER_TOWN_POKEMON_CENTER_1F)}, - {MAP_GROUP(VERMILION_CITY_POKEMON_CENTER_1F), MAP_NUM(VERMILION_CITY_POKEMON_CENTER_1F)}, - {MAP_GROUP(CELADON_CITY_POKEMON_CENTER_1F), MAP_NUM(CELADON_CITY_POKEMON_CENTER_1F)}, - {MAP_GROUP(FUCHSIA_CITY_POKEMON_CENTER_1F), MAP_NUM(FUCHSIA_CITY_POKEMON_CENTER_1F)}, - {MAP_GROUP(CINNABAR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(CINNABAR_ISLAND_POKEMON_CENTER_1F)}, - {MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F)}, - {MAP_GROUP(SAFFRON_CITY_POKEMON_CENTER_1F), MAP_NUM(SAFFRON_CITY_POKEMON_CENTER_1F)}, - {MAP_GROUP(ROUTE4_POKEMON_CENTER_1F), MAP_NUM(ROUTE4_POKEMON_CENTER_1F)}, - {MAP_GROUP(ROUTE10_POKEMON_CENTER_1F), MAP_NUM(ROUTE10_POKEMON_CENTER_1F)}, - {MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F)}, - {MAP_GROUP(TWO_ISLAND_POKEMON_CENTER_1F), MAP_NUM(TWO_ISLAND_POKEMON_CENTER_1F)}, - {MAP_GROUP(THREE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(THREE_ISLAND_POKEMON_CENTER_1F)}, - {MAP_GROUP(FOUR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FOUR_ISLAND_POKEMON_CENTER_1F)}, - {MAP_GROUP(FIVE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FIVE_ISLAND_POKEMON_CENTER_1F)}, - {MAP_GROUP(SEVEN_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SEVEN_ISLAND_POKEMON_CENTER_1F)}, - {MAP_GROUP(SIX_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SIX_ISLAND_POKEMON_CENTER_1F)} +// This array defines the map where you actually respawn when you black out, +// based on where you last checkpointed. +// This is either the player's house or a Pokémon Center. +// The data are u16 instead of u8 for reasons unknown. +const u16 sBlackoutRespawnHealCenterMapIdxs[][2] = { + [SPAWN_PALLET_TOWN - 1] = {MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)}, + [SPAWN_VIRIDIAN_CITY - 1] = {MAP_GROUP(VIRIDIAN_CITY_POKEMON_CENTER_1F), MAP_NUM(VIRIDIAN_CITY_POKEMON_CENTER_1F)}, + [SPAWN_PEWTER_CITY - 1] = {MAP_GROUP(PEWTER_CITY_POKEMON_CENTER_1F), MAP_NUM(PEWTER_CITY_POKEMON_CENTER_1F)}, + [SPAWN_CERULEAN_CITY - 1] = {MAP_GROUP(CERULEAN_CITY_POKEMON_CENTER_1F), MAP_NUM(CERULEAN_CITY_POKEMON_CENTER_1F)}, + [SPAWN_LAVENDER_TOWN - 1] = {MAP_GROUP(LAVENDER_TOWN_POKEMON_CENTER_1F), MAP_NUM(LAVENDER_TOWN_POKEMON_CENTER_1F)}, + [SPAWN_VERMILION_CITY - 1] = {MAP_GROUP(VERMILION_CITY_POKEMON_CENTER_1F), MAP_NUM(VERMILION_CITY_POKEMON_CENTER_1F)}, + [SPAWN_CELADON_CITY - 1] = {MAP_GROUP(CELADON_CITY_POKEMON_CENTER_1F), MAP_NUM(CELADON_CITY_POKEMON_CENTER_1F)}, + [SPAWN_FUCHSIA_CITY - 1] = {MAP_GROUP(FUCHSIA_CITY_POKEMON_CENTER_1F), MAP_NUM(FUCHSIA_CITY_POKEMON_CENTER_1F)}, + [SPAWN_CINNABAR_ISLAND - 1] = {MAP_GROUP(CINNABAR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(CINNABAR_ISLAND_POKEMON_CENTER_1F)}, + [SPAWN_INDIGO_PLATEAU - 1] = {MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F)}, + [SPAWN_SAFFRON_CITY - 1] = {MAP_GROUP(SAFFRON_CITY_POKEMON_CENTER_1F), MAP_NUM(SAFFRON_CITY_POKEMON_CENTER_1F)}, + [SPAWN_ROUTE4 - 1] = {MAP_GROUP(ROUTE4_POKEMON_CENTER_1F), MAP_NUM(ROUTE4_POKEMON_CENTER_1F)}, + [SPAWN_ROUTE10 - 1] = {MAP_GROUP(ROUTE10_POKEMON_CENTER_1F), MAP_NUM(ROUTE10_POKEMON_CENTER_1F)}, + [SPAWN_ONE_ISLAND - 1] = {MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F)}, + [SPAWN_TWO_ISLAND - 1] = {MAP_GROUP(TWO_ISLAND_POKEMON_CENTER_1F), MAP_NUM(TWO_ISLAND_POKEMON_CENTER_1F)}, + [SPAWN_THREE_ISLAND - 1] = {MAP_GROUP(THREE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(THREE_ISLAND_POKEMON_CENTER_1F)}, + [SPAWN_FOUR_ISLAND - 1] = {MAP_GROUP(FOUR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FOUR_ISLAND_POKEMON_CENTER_1F)}, + [SPAWN_FIVE_ISLAND - 1] = {MAP_GROUP(FIVE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FIVE_ISLAND_POKEMON_CENTER_1F)}, + [SPAWN_SEVEN_ISLAND - 1] = {MAP_GROUP(SEVEN_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SEVEN_ISLAND_POKEMON_CENTER_1F)}, + [SPAWN_SIX_ISLAND - 1] = {MAP_GROUP(SIX_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SIX_ISLAND_POKEMON_CENTER_1F)} }; -static const u8 gUnknown_83EECE8[] = { - 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 +// When you respawn, your character scurries back to either their house +// or a Pokémon Center, and hands their fainted Pokémon to their mother +// or the Nurse for healing. +// This array defines the index of the NPC on the map defined above +// with whom your character interacts in this cutscene. +static const u8 sBlackoutRespawnHealerNpcIds[] = { + [SPAWN_PALLET_TOWN - 1] = 1, + [SPAWN_VIRIDIAN_CITY - 1] = 1, + [SPAWN_PEWTER_CITY - 1] = 3, + [SPAWN_CERULEAN_CITY - 1] = 1, + [SPAWN_LAVENDER_TOWN - 1] = 1, + [SPAWN_VERMILION_CITY - 1] = 1, + [SPAWN_CELADON_CITY - 1] = 1, + [SPAWN_FUCHSIA_CITY - 1] = 1, + [SPAWN_CINNABAR_ISLAND - 1] = 1, + [SPAWN_INDIGO_PLATEAU - 1] = 2, + [SPAWN_SAFFRON_CITY - 1] = 1, + [SPAWN_ROUTE4 - 1] = 1, + [SPAWN_ROUTE10 - 1] = 1, + [SPAWN_ONE_ISLAND - 1] = 1, + [SPAWN_TWO_ISLAND - 1] = 1, + [SPAWN_THREE_ISLAND - 1] = 1, + [SPAWN_FOUR_ISLAND - 1] = 1, + [SPAWN_FIVE_ISLAND - 1] = 1, + [SPAWN_SEVEN_ISLAND - 1] = 1, + [SPAWN_SIX_ISLAND - 1] = 1 }; u32 GetHealLocationIndexFromMapGroupAndNum(u16 mapGroup, u16 mapNum) @@ -89,7 +118,7 @@ const struct HealLocation * GetHealLocationPointer(u32 idx) return &sSpawnPoints[idx - 1]; } -void sub_80BFCD0(struct WarpData * warp) +void SetBlackoutRespawnWarpAndHealerNpc(struct WarpData * warp) { u32 healLocationIdx; @@ -107,26 +136,26 @@ void sub_80BFCD0(struct WarpData * warp) else { healLocationIdx = GetHealLocationIndexFromMapGroupAndNum(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum); - warp->mapGroup = gUnknown_83EEC98[healLocationIdx - 1][0]; - warp->mapNum = gUnknown_83EEC98[healLocationIdx - 1][1]; + warp->mapGroup = sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0]; + warp->mapNum = sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1]; warp->warpId = 0xFF; - if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)) + if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)) { warp->x = 8; warp->y = 5; } - else if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F)) + else if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F)) { warp->x = 13; warp->y = 12; } - else if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F)) + else if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F)) { warp->x = 5; warp->y = 4; } - else if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY)) + else if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY)) { warp->x = 4; warp->y = 11; @@ -137,11 +166,11 @@ void sub_80BFCD0(struct WarpData * warp) warp->x = 7; warp->y = 4; } - sub_80BFE00(healLocationIdx); + SetBlackoutRespawnHealerNpcAsLastTalked(healLocationIdx); } } -void sub_80BFE00(u32 healLocationIdx) +void SetBlackoutRespawnHealerNpcAsLastTalked(u32 healLocationIdx) { - gSpecialVar_LastTalked = gUnknown_83EECE8[healLocationIdx - 1]; + gSpecialVar_LastTalked = sBlackoutRespawnHealerNpcIds[healLocationIdx - 1]; } diff --git a/src/prof_pc.c b/src/prof_pc.c new file mode 100644 index 000000000..cfccbd6e3 --- /dev/null +++ b/src/prof_pc.c @@ -0,0 +1,108 @@ +#include "global.h" +#include "event_data.h" +#include "pokedex.h" +#include "field_message_box.h" +#include "constants/species.h" + +extern const u8 gUnknown_81A6D17[]; +extern const u8 gUnknown_81A6D6D[]; +extern const u8 gUnknown_81A6DDF[]; +extern const u8 gUnknown_81A6E36[]; +extern const u8 gUnknown_81A6EA4[]; +extern const u8 gUnknown_81A6F0B[]; +extern const u8 gUnknown_81A6F71[]; +extern const u8 gUnknown_81A6FAB[]; +extern const u8 gUnknown_81A6FF1[]; +extern const u8 gUnknown_81A7031[]; +extern const u8 gUnknown_81A7063[]; +extern const u8 gUnknown_81A70A5[]; +extern const u8 gUnknown_81A70D8[]; +extern const u8 gUnknown_81A7108[]; +extern const u8 gUnknown_81A7137[]; +extern const u8 gUnknown_81A7175[]; + +u16 Special_GetPokedexCount(void) +{ + if (gSpecialVar_0x8004 == 0) + { + gSpecialVar_0x8005 = sub_8088EDC(0); + gSpecialVar_0x8006 = sub_8088EDC(1); + } + else + { + gSpecialVar_0x8005 = pokedex_count(0); + gSpecialVar_0x8006 = pokedex_count(1); + } + return sub_806E25C(); +} + +const u8 * sub_80CA424(u16 count) +{ + gSpecialVar_Result = FALSE; + + if (count < 10) + return gUnknown_81A6D17; + + if (count < 20) + return gUnknown_81A6D6D; + + if (count < 30) + return gUnknown_81A6DDF; + + if (count < 40) + return gUnknown_81A6E36; + + if (count < 50) + return gUnknown_81A6EA4; + + if (count < 60) + return gUnknown_81A6F0B; + + if (count < 70) + return gUnknown_81A6F71; + + if (count < 80) + return gUnknown_81A6FAB; + + if (count < 90) + return gUnknown_81A6FF1; + + if (count < 100) + return gUnknown_81A7031; + + if (count < 110) + return gUnknown_81A7063; + + if (count < 120) + return gUnknown_81A70A5; + + if (count < 130) + return gUnknown_81A70D8; + + if (count < 140) + return gUnknown_81A7108; + + if (count < 150) + return gUnknown_81A7137; + + if (count == 150) + { + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_MEW), 1)) + return gUnknown_81A7137; + gSpecialVar_Result = TRUE; + return gUnknown_81A7175; + } + + if (count == 151) + { + gSpecialVar_Result = TRUE; + return gUnknown_81A7175; + } + + return gUnknown_81A6D17; +} + +void sub_80CA524(void) +{ + ShowFieldMessage(sub_80CA424(gSpecialVar_0x8004)); +} diff --git a/src/text_window_graphics.c b/src/text_window_graphics.c new file mode 100644 index 000000000..1133abbdb --- /dev/null +++ b/src/text_window_graphics.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "text_window_graphics.h" + +static const u16 gUnknown_8470D6C[] = INCBIN_U16("graphics/text_window/unk_8470D6C.4bpp"); +static const u16 gUnknown_8470E8C[] = INCBIN_U16("graphics/text_window/unk_8470E8C.4bpp"); +static const u16 gUnk_Empty_Space_8470FAC[16] = {0}; +static const u16 gUnknown_8470FCC[] = INCBIN_U16("graphics/text_window/unk_8470FCC.4bpp"); +static const u16 gUnknown_84710EC[] = INCBIN_U16("graphics/text_window/unk_84710EC.4bpp"); +static const u16 gUnknown_847120C[] = INCBIN_U16("graphics/text_window/unk_847120C.4bpp"); +static const u16 gUnknown_847132C[] = INCBIN_U16("graphics/text_window/unk_847132C.4bpp"); +static const u16 gUnknown_847144C[] = INCBIN_U16("graphics/text_window/unk_847144C.4bpp"); +static const u16 gUnknown_847156C[] = INCBIN_U16("graphics/text_window/unk_847156C.4bpp"); +static const u16 gUnk_Empty_Space_847168C[16] = {0}; +static const u16 gUnknown_84716AC[] = INCBIN_U16("graphics/text_window/unk_84716AC.4bpp"); +static const u16 gUnknown_84717CC[] = INCBIN_U16("graphics/text_window/unk_84717CC.4bpp"); +static const u16 gUnk_Empty_Space_84718EC[16] = {0}; +static const u16 gUnknown_847190C[] = INCBIN_U16("graphics/text_window/unk_8470D6C.gbapal"); +static const u16 gUnknown_847192C[] = INCBIN_U16("graphics/text_window/unk_8470E8C.gbapal"); +static const u16 gUnknown_847194C[] = INCBIN_U16("graphics/text_window/unk_8470FCC.gbapal"); +static const u16 gUnknown_847196C[] = INCBIN_U16("graphics/text_window/unk_84710EC.gbapal"); +static const u16 gUnknown_847198C[] = INCBIN_U16("graphics/text_window/unk_847120C.gbapal"); +static const u16 gUnknown_84719AC[] = INCBIN_U16("graphics/text_window/unk_847132C.gbapal"); +static const u16 gUnknown_84719CC[] = INCBIN_U16("graphics/text_window/unk_847144C.gbapal"); +static const u16 gUnknown_84719EC[] = INCBIN_U16("graphics/text_window/unk_847156C.gbapal"); +static const u16 gUnknown_8471A0C[] = INCBIN_U16("graphics/text_window/unk_84716AC.gbapal"); +static const u16 gUnknown_8471A2C[] = INCBIN_U16("graphics/text_window/unk_84717CC.gbapal"); + +const u16 gUnknown_8471A4C[] = INCBIN_U16("graphics/text_window/unk_8471A4C.4bpp"); +const u16 gUnknown_8471B6C[] = INCBIN_U16("graphics/text_window/unk_8471B6C.4bpp"); + +const u16 gUnknown_8471DEC[][16] = { + INCBIN_U16("graphics/text_window/stdpal_0.gbapal"), + INCBIN_U16("graphics/text_window/stdpal_1.gbapal"), + INCBIN_U16("graphics/text_window/stdpal_2.gbapal"), + INCBIN_U16("graphics/text_window/stdpal_3.gbapal"), + INCBIN_U16("graphics/text_window/stdpal_4.gbapal") +}; + +const struct TextWindowGraphics gUnknown_8471E8C[] = { + {gUnknown_8470D6C, gUnknown_847190C}, + {gUnknown_8470E8C, gUnknown_847192C}, + {gUnknown_8470FCC, gUnknown_847194C}, + {gUnknown_84710EC, gUnknown_847196C}, + {gUnknown_847120C, gUnknown_847198C}, + {gUnknown_847132C, gUnknown_84719AC}, + {gUnknown_847144C, gUnknown_84719CC}, + {gUnknown_847156C, gUnknown_84719EC}, + {gUnknown_84716AC, gUnknown_8471A0C}, + {gUnknown_84717CC, gUnknown_8471A2C} +}; // NELEMS = 10 + +const struct TextWindowGraphics * sub_8069788(u8 idx) +{ + if (idx >= 20) // if (idx >= NELEMS(gUnknown_8471E8C)) + return &gUnknown_8471E8C[0]; + else + return &gUnknown_8471E8C[idx]; +} |