diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2018-10-10 00:47:44 -0400 |
---|---|---|
committer | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2018-10-10 00:47:44 -0400 |
commit | 05d03f7f3256b143a01506421c19964bcceaea5c (patch) | |
tree | d45390654cd3f80ffccd4af95760133ef77366bd | |
parent | 799a9ccfe28999477776cd3ae79ff0d32c836565 (diff) |
decompile up to sub_80444C4
-rw-r--r-- | asm/battle_2.s | 10 | ||||
-rw-r--r-- | asm/battle_anim_8074480.s | 16 | ||||
-rw-r--r-- | asm/battle_anim_80A22E8.s | 4 | ||||
-rw-r--r-- | asm/battle_anim_80DE2C0.s | 4 | ||||
-rw-r--r-- | asm/battle_controller_link_opponent.s | 8 | ||||
-rw-r--r-- | asm/battle_controller_link_partner.s | 8 | ||||
-rw-r--r-- | asm/battle_controller_oak.s | 4 | ||||
-rw-r--r-- | asm/battle_controller_opponent.s | 8 | ||||
-rw-r--r-- | asm/battle_controller_player.s | 4 | ||||
-rw-r--r-- | asm/battle_controller_pokedude.s | 8 | ||||
-rw-r--r-- | asm/battle_controllers.s | 2 | ||||
-rw-r--r-- | asm/battle_gfx_sfx_util.s | 34 | ||||
-rw-r--r-- | asm/battle_message.s | 8 | ||||
-rw-r--r-- | asm/field_effect.s | 4 | ||||
-rw-r--r-- | asm/pokemon_3.s | 1306 | ||||
-rw-r--r-- | asm/reshow_battle_screen.s | 8 | ||||
-rw-r--r-- | data/data.s | 10 | ||||
-rw-r--r-- | data/data_84827AC.s | 2 | ||||
-rw-r--r-- | include/battle.h | 6 | ||||
-rw-r--r-- | src/pokemon.c | 411 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
21 files changed, 482 insertions, 1385 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s index 4775fc06b..8e620bd18 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -4155,7 +4155,7 @@ _08011F50: cmp r4, r0 bne _08011F74 ldr r0, _08011F6C @ =gUnknown_83AE03C - ldr r1, _08011F70 @ =gUnknown_2024024 + ldr r1, _08011F70 @ =gBattleMonForms adds r1, r6, r1 ldrb r1, [r1] lsls r1, 2 @@ -4165,7 +4165,7 @@ _08011F50: .align 2, 0 _08011F68: .4byte 0x00000181 _08011F6C: .4byte gUnknown_83AE03C -_08011F70: .4byte gUnknown_2024024 +_08011F70: .4byte gBattleMonForms _08011F74: movs r0, 0xCE lsls r0, 1 @@ -4240,7 +4240,7 @@ _08011FE8: lsrs r0, 22 adds r1, 0x4 adds r1, r0 - ldr r2, _08012040 @ =gUnknown_2024024 + ldr r2, _08012040 @ =gBattleMonForms movs r3, 0x2E ldrsh r0, [r4, r3] adds r0, r2 @@ -4260,7 +4260,7 @@ _0801201A: subs r0, 0x1 cmp r0, 0 bge _0801201A - ldr r0, _08012040 @ =gUnknown_2024024 + ldr r0, _08012040 @ =gBattleMonForms movs r3, 0x2E ldrsh r1, [r4, r3] adds r1, r0 @@ -4273,7 +4273,7 @@ _08012034: bx r0 .align 2, 0 _0801203C: .4byte gMonSpritesGfxPtr -_08012040: .4byte gUnknown_2024024 +_08012040: .4byte gBattleMonForms thumb_func_end sub_8011FB4 thumb_func_start sub_8012044 diff --git a/asm/battle_anim_8074480.s b/asm/battle_anim_8074480.s index a80d7f759..1881e7a8f 100644 --- a/asm/battle_anim_8074480.s +++ b/asm/battle_anim_8074480.s @@ -227,7 +227,7 @@ _08074638: cmp r4, r0 bne _08074658 ldr r0, _08074650 @ =gUnknown_83AE050 - ldr r1, _08074654 @ =gUnknown_2024024 + ldr r1, _08074654 @ =gBattleMonForms adds r1, r5, r1 ldrb r1, [r1] adds r1, r0 @@ -236,7 +236,7 @@ _08074638: .align 2, 0 _0807464C: .4byte 0x00000181 _08074650: .4byte gUnknown_83AE050 -_08074654: .4byte gUnknown_2024024 +_08074654: .4byte gBattleMonForms _08074658: movs r0, 0xCE lsls r0, 1 @@ -328,7 +328,7 @@ _08074704: cmp r4, r0 bne _08074728 ldr r0, _08074720 @ =gUnknown_83AE03C - ldr r1, _08074724 @ =gUnknown_2024024 + ldr r1, _08074724 @ =gBattleMonForms adds r1, r6, r1 ldrb r1, [r1] lsls r1, 2 @@ -338,7 +338,7 @@ _08074704: .align 2, 0 _0807471C: .4byte 0x00000181 _08074720: .4byte gUnknown_83AE03C -_08074724: .4byte gUnknown_2024024 +_08074724: .4byte gBattleMonForms _08074728: movs r0, 0xCE lsls r0, 1 @@ -382,7 +382,7 @@ sub_807474C: @ 807474C cmp r4, r0 bne _08074788 ldr r0, _08074780 @ =gUnknown_83AE04C - ldr r1, _08074784 @ =gUnknown_2024024 + ldr r1, _08074784 @ =gBattleMonForms adds r1, r6, r1 ldrb r1, [r1] adds r1, r0 @@ -391,7 +391,7 @@ sub_807474C: @ 807474C .align 2, 0 _0807477C: .4byte 0x00000181 _08074780: .4byte gUnknown_83AE04C -_08074784: .4byte gUnknown_2024024 +_08074784: .4byte gBattleMonForms _08074788: movs r0, 0xCE lsls r0, 1 @@ -5431,7 +5431,7 @@ _08076CA6: ldr r0, _08076CBC @ =0x00000181 cmp r7, r0 bne _08076CC8 - ldr r0, _08076CC0 @ =gUnknown_2024024 + ldr r0, _08076CC0 @ =gBattleMonForms add r0, r8 ldrb r0, [r0] lsls r0, 2 @@ -5440,7 +5440,7 @@ _08076CA6: b _08076CDE .align 2, 0 _08076CBC: .4byte 0x00000181 -_08076CC0: .4byte gUnknown_2024024 +_08076CC0: .4byte gBattleMonForms _08076CC4: .4byte gUnknown_83AE03C _08076CC8: movs r0, 0xCE diff --git a/asm/battle_anim_80A22E8.s b/asm/battle_anim_80A22E8.s index 7eaeff07e..2c5feb2f1 100644 --- a/asm/battle_anim_80A22E8.s +++ b/asm/battle_anim_80A22E8.s @@ -55250,7 +55250,7 @@ sub_80BCEF4: @ 80BCEF4 lsls r4, 2 adds r2, 0x4 adds r2, r4 - ldr r1, _080BCFC8 @ =gUnknown_2024024 + ldr r1, _080BCFC8 @ =gBattleMonForms adds r0, r1 ldrb r1, [r0] lsls r1, 11 @@ -55320,7 +55320,7 @@ _080BCFA0: bx r0 .align 2, 0 _080BCFC4: .4byte gMonSpritesGfxPtr -_080BCFC8: .4byte gUnknown_2024024 +_080BCFC8: .4byte gBattleMonForms thumb_func_end sub_80BCEF4 thumb_func_start sub_80BCFCC diff --git a/asm/battle_anim_80DE2C0.s b/asm/battle_anim_80DE2C0.s index 7ee2d2075..9b56509a2 100644 --- a/asm/battle_anim_80DE2C0.s +++ b/asm/battle_anim_80DE2C0.s @@ -3164,7 +3164,7 @@ _080DFAC6: lsls r0, r1, 2 adds r2, 0x4 adds r2, r0 - ldr r1, _080DFB0C @ =gUnknown_2024024 + ldr r1, _080DFB0C @ =gBattleMonForms ldr r0, _080DFB10 @ =gUnknown_2037F1A ldrb r0, [r0] adds r0, r1 @@ -3193,7 +3193,7 @@ _080DFB00: b _080DFBCE .align 2, 0 _080DFB08: .4byte gMonSpritesGfxPtr -_080DFB0C: .4byte gUnknown_2024024 +_080DFB0C: .4byte gBattleMonForms _080DFB10: .4byte gUnknown_2037F1A _080DFB14: .4byte 0x04000200 _080DFB18: .4byte gTasks diff --git a/asm/battle_controller_link_opponent.s b/asm/battle_controller_link_opponent.s index 564fb7e3c..d5a9b8ae6 100644 --- a/asm/battle_controller_link_opponent.s +++ b/asm/battle_controller_link_opponent.s @@ -3641,7 +3641,7 @@ LinkOpponentHandleLoadPokeSprite: @ 803C3B4 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _0803C4F8 @ =gUnknown_2024024 + ldr r1, _0803C4F8 @ =gBattleMonForms adds r2, r1 ldrb r1, [r2] bl StartSpriteAnim @@ -3681,7 +3681,7 @@ _0803C4E8: .4byte gMultiuseSpriteTemplate _0803C4EC: .4byte gUnknown_2023D44 _0803C4F0: .4byte gSprites _0803C4F4: .4byte 0x0000ff10 -_0803C4F8: .4byte gUnknown_2024024 +_0803C4F8: .4byte gBattleMonForms _0803C4FC: .4byte gUnknown_3004FE0 _0803C500: .4byte sub_803AC14 thumb_func_end LinkOpponentHandleLoadPokeSprite @@ -3844,7 +3844,7 @@ sub_803C550: @ 803C550 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _0803C6CC @ =gUnknown_2024024 + ldr r1, _0803C6CC @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -3895,7 +3895,7 @@ _0803C6BC: .4byte gUnknown_3004FFC _0803C6C0: .4byte gMultiuseSpriteTemplate _0803C6C4: .4byte gUnknown_2023D44 _0803C6C8: .4byte gSprites -_0803C6CC: .4byte gUnknown_2024024 +_0803C6CC: .4byte gBattleMonForms _0803C6D0: .4byte SpriteCallbackDummy thumb_func_end sub_803C550 diff --git a/asm/battle_controller_link_partner.s b/asm/battle_controller_link_partner.s index 57c231075..7480e8b12 100644 --- a/asm/battle_controller_link_partner.s +++ b/asm/battle_controller_link_partner.s @@ -3435,7 +3435,7 @@ LinkPartnerHandleLoadPokeSprite: @ 80D5DB4 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _080D5EC4 @ =gUnknown_2024024 + ldr r1, _080D5EC4 @ =gBattleMonForms adds r2, r1 ldrb r1, [r2] bl StartSpriteAnim @@ -3458,7 +3458,7 @@ _080D5EB4: .4byte gMultiuseSpriteTemplate _080D5EB8: .4byte gUnknown_2023D44 _080D5EBC: .4byte gSprites _080D5EC0: .4byte 0x0000ff10 -_080D5EC4: .4byte gUnknown_2024024 +_080D5EC4: .4byte gBattleMonForms _080D5EC8: .4byte gUnknown_3004FE0 _080D5ECC: .4byte sub_80D4590 thumb_func_end LinkPartnerHandleLoadPokeSprite @@ -3626,7 +3626,7 @@ sub_80D5F40: @ 80D5F40 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _080D60A4 @ =gUnknown_2024024 + ldr r1, _080D60A4 @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -3677,7 +3677,7 @@ _080D6094: .4byte gUnknown_3004FFC _080D6098: .4byte gMultiuseSpriteTemplate _080D609C: .4byte gUnknown_2023D44 _080D60A0: .4byte gSprites -_080D60A4: .4byte gUnknown_2024024 +_080D60A4: .4byte gBattleMonForms _080D60A8: .4byte SpriteCallbackDummy thumb_func_end sub_80D5F40 diff --git a/asm/battle_controller_oak.s b/asm/battle_controller_oak.s index 83bbdd333..16fb18cdf 100644 --- a/asm/battle_controller_oak.s +++ b/asm/battle_controller_oak.s @@ -7135,7 +7135,7 @@ sub_80EAF34: @ 80EAF34 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _080EB0A0 @ =gUnknown_2024024 + ldr r1, _080EB0A0 @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -7187,7 +7187,7 @@ _080EB090: .4byte gUnknown_3004FFC _080EB094: .4byte gMultiuseSpriteTemplate _080EB098: .4byte gUnknown_2023D44 _080EB09C: .4byte gSprites -_080EB0A0: .4byte gUnknown_2024024 +_080EB0A0: .4byte gBattleMonForms _080EB0A4: .4byte SpriteCallbackDummy thumb_func_end sub_80EAF34 diff --git a/asm/battle_controller_opponent.s b/asm/battle_controller_opponent.s index 0c57693bf..0405efdf1 100644 --- a/asm/battle_controller_opponent.s +++ b/asm/battle_controller_opponent.s @@ -3717,7 +3717,7 @@ _080378AA: adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _080379B0 @ =gUnknown_2024024 + ldr r1, _080379B0 @ =gBattleMonForms adds r2, r1 ldrb r1, [r2] bl StartSpriteAnim @@ -3762,7 +3762,7 @@ _080379A0: .4byte gMultiuseSpriteTemplate _080379A4: .4byte gUnknown_2023D44 _080379A8: .4byte gSprites _080379AC: .4byte 0x0000ff10 -_080379B0: .4byte gUnknown_2024024 +_080379B0: .4byte gBattleMonForms _080379B4: .4byte gBattleTypeFlags _080379B8: .4byte gBattlerPartyIndexes _080379BC: .4byte gEnemyParty @@ -3936,7 +3936,7 @@ sub_8037A28: @ 8037A28 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _08037BA4 @ =gUnknown_2024024 + ldr r1, _08037BA4 @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -3987,7 +3987,7 @@ _08037B94: .4byte gUnknown_3004FFC _08037B98: .4byte gMultiuseSpriteTemplate _08037B9C: .4byte gUnknown_2023D44 _08037BA0: .4byte gSprites -_08037BA4: .4byte gUnknown_2024024 +_08037BA4: .4byte gBattleMonForms _08037BA8: .4byte SpriteCallbackDummy thumb_func_end sub_8037A28 diff --git a/asm/battle_controller_player.s b/asm/battle_controller_player.s index 9b9c5f21d..1ae03fe5e 100644 --- a/asm/battle_controller_player.s +++ b/asm/battle_controller_player.s @@ -7506,7 +7506,7 @@ sub_8031FF4: @ 8031FF4 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _08032158 @ =gUnknown_2024024 + ldr r1, _08032158 @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -7557,7 +7557,7 @@ _08032148: .4byte gUnknown_3004FFC _0803214C: .4byte gMultiuseSpriteTemplate _08032150: .4byte gUnknown_2023D44 _08032154: .4byte gSprites -_08032158: .4byte gUnknown_2024024 +_08032158: .4byte gBattleMonForms _0803215C: .4byte SpriteCallbackDummy thumb_func_end sub_8031FF4 diff --git a/asm/battle_controller_pokedude.s b/asm/battle_controller_pokedude.s index 1f01cec2d..5c3c0ebf0 100644 --- a/asm/battle_controller_pokedude.s +++ b/asm/battle_controller_pokedude.s @@ -4001,7 +4001,7 @@ sub_81580E0: @ 81580E0 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _08158230 @ =gUnknown_2024024 + ldr r1, _08158230 @ =gBattleMonForms adds r2, r1 ldrb r1, [r2] bl StartSpriteAnim @@ -4041,7 +4041,7 @@ _08158220: .4byte gMultiuseSpriteTemplate _08158224: .4byte gUnknown_2023D44 _08158228: .4byte gSprites _0815822C: .4byte 0x0000ff10 -_08158230: .4byte gUnknown_2024024 +_08158230: .4byte gBattleMonForms _08158234: .4byte gUnknown_3004FE0 _08158238: .4byte sub_8156184 thumb_func_end sub_81580E0 @@ -6400,7 +6400,7 @@ sub_8159478: @ 8159478 adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _081595E4 @ =gUnknown_2024024 + ldr r1, _081595E4 @ =gBattleMonForms adds r6, r1 ldrb r1, [r6] bl StartSpriteAnim @@ -6452,7 +6452,7 @@ _081595D4: .4byte gUnknown_3004FFC _081595D8: .4byte gMultiuseSpriteTemplate _081595DC: .4byte gUnknown_2023D44 _081595E0: .4byte gSprites -_081595E4: .4byte gUnknown_2024024 +_081595E4: .4byte gBattleMonForms _081595E8: .4byte SpriteCallbackDummy thumb_func_end sub_8159478 diff --git a/asm/battle_controllers.s b/asm/battle_controllers.s index 3305979c3..71c39120f 100644 --- a/asm/battle_controllers.s +++ b/asm/battle_controllers.s @@ -81,7 +81,7 @@ _0800D298: movs r4, 0 str r4, [r0] bl ClearBattleAnimationVars - bl sub_8043FBC + bl ClearBattleMonForms bl BattleAI_HandleItemUseBeforeAISetup ldr r0, _0800D304 @ =gUnknown_2022B54 str r4, [r0] diff --git a/asm/battle_gfx_sfx_util.s b/asm/battle_gfx_sfx_util.s index 1aa87e8a4..dd319645e 100644 --- a/asm/battle_gfx_sfx_util.s +++ b/asm/battle_gfx_sfx_util.s @@ -348,7 +348,7 @@ TryHandleLaunchBattleTableAnimation: @ 803401C ands r0, r7 cmp r0, 0 beq _08034064 - ldr r0, _08034060 @ =gUnknown_2024024 + ldr r0, _08034060 @ =gBattleMonForms adds r0, r6, r0 movs r2, 0x7F adds r1, r7, 0 @@ -357,7 +357,7 @@ TryHandleLaunchBattleTableAnimation: @ 803401C movs r0, 0x1 b _08034132 .align 2, 0 -_08034060: .4byte gUnknown_2024024 +_08034060: .4byte gBattleMonForms _08034064: ldr r0, _08034090 @ =gUnknown_2024018 mov r9, r0 @@ -829,7 +829,7 @@ _080343DA: adds r1, r4 adds r0, r6, 0 bl LZDecompressWram - ldr r0, _08034480 @ =gUnknown_2024024 + ldr r0, _08034480 @ =gBattleMonForms add r0, r8 ldrb r1, [r0] lsls r1, 5 @@ -872,7 +872,7 @@ _08034468: .align 2, 0 _08034478: .4byte 0x00000181 _0803447C: .4byte gBattleStruct -_08034480: .4byte gUnknown_2024024 +_08034480: .4byte gBattleMonForms _08034484: .4byte gUnknown_2024018 _08034488: .4byte 0x00007fff _0803448C: .4byte gUnknown_20375F8 @@ -1035,7 +1035,7 @@ _0803459A: adds r1, r4 adds r0, r6, 0 bl LZDecompressWram - ldr r0, _08034640 @ =gUnknown_2024024 + ldr r0, _08034640 @ =gBattleMonForms add r0, r8 ldrb r1, [r0] lsls r1, 5 @@ -1077,7 +1077,7 @@ _08034626: .align 2, 0 _08034638: .4byte 0x00000181 _0803463C: .4byte gBattleStruct -_08034640: .4byte gUnknown_2024024 +_08034640: .4byte gBattleMonForms _08034644: .4byte gUnknown_2024018 _08034648: .4byte 0x00007fff _0803464C: .4byte gUnknown_20375F8 @@ -1927,7 +1927,7 @@ _08034C16: adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _08034D7C @ =gUnknown_2024024 + ldr r1, _08034D7C @ =gBattleMonForms add r1, r9 ldrb r1, [r1] bl StartSpriteAnim @@ -1968,7 +1968,7 @@ _08034D6C: .4byte gUnknown_2023D44 _08034D70: .4byte 0x06010000 _08034D74: .4byte 0x040000d4 _08034D78: .4byte 0x84000200 -_08034D7C: .4byte gUnknown_2024024 +_08034D7C: .4byte gBattleMonForms _08034D80: .4byte gSpeciesNames _08034D84: .4byte gUnknown_3004FF0 _08034D88: @@ -2008,7 +2008,7 @@ _08034D88: mov r1, r10 movs r2, 0x20 bl LoadPalette - ldr r1, _08034E38 @ =gUnknown_2024024 + ldr r1, _08034E38 @ =gBattleMonForms add r1, r9 ldr r0, [r4] ldr r0, [r0, 0x8] @@ -2052,7 +2052,7 @@ _08034E28: .4byte gUnknown_2023D44 _08034E2C: .4byte gSprites _08034E30: .4byte gUnknown_2024018 _08034E34: .4byte gBattleStruct -_08034E38: .4byte gUnknown_2024024 +_08034E38: .4byte gBattleMonForms _08034E3C: .4byte 0x00007fff _08034E40: .4byte gUnknown_20375F8 _08034E44: .4byte gUnknown_20371F8 @@ -2244,7 +2244,7 @@ _08034F5E: adds r1, r4 adds r0, r6, 0 bl LZDecompressWram - ldr r0, _080350A4 @ =gUnknown_2024024 + ldr r0, _080350A4 @ =gBattleMonForms ldr r1, [sp] adds r0, r1, r0 ldrb r1, [r0] @@ -2276,7 +2276,7 @@ _08034FFC: adds r0, r3, r0 mov r1, r8 strh r1, [r0, 0x2] - ldr r0, _080350A4 @ =gUnknown_2024024 + ldr r0, _080350A4 @ =gBattleMonForms mov r2, r9 adds r4, r2, r0 ldr r3, [sp] @@ -2325,7 +2325,7 @@ _08035094: .4byte 0x040000d4 _08035098: .4byte 0x84000200 _0803509C: .4byte 0x00000181 _080350A0: .4byte gBattleStruct -_080350A4: .4byte gUnknown_2024024 +_080350A4: .4byte gBattleMonForms _080350A8: .4byte 0x00007fff _080350AC: .4byte gUnknown_20375F8 _080350B0: .4byte gUnknown_20371F8 @@ -2465,7 +2465,7 @@ LoadBattleMonGfxAndAnimate: @ 80351A8 lsls r0, 2 ldr r1, _080351E4 @ =gSprites adds r4, r0, r1 - ldr r0, _080351E8 @ =gUnknown_2024024 + ldr r0, _080351E8 @ =gBattleMonForms adds r0, r6, r0 ldrb r1, [r0] adds r0, r4, 0 @@ -2477,7 +2477,7 @@ LoadBattleMonGfxAndAnimate: @ 80351A8 b _080351F2 .align 2, 0 _080351E4: .4byte gSprites -_080351E8: .4byte gUnknown_2024024 +_080351E8: .4byte gBattleMonForms _080351EC: adds r0, r6, 0 bl GetBankSpriteDefault_Y @@ -3371,7 +3371,7 @@ ClearTemporarySpeciesSpriteData: @ 803589C movs r3, 0 movs r2, 0 strh r2, [r0, 0x2] - ldr r0, _080358D0 @ =gUnknown_2024024 + ldr r0, _080358D0 @ =gBattleMonForms adds r0, r4, r0 strb r3, [r0] cmp r1, 0 @@ -3384,7 +3384,7 @@ _080358C4: bx r0 .align 2, 0 _080358CC: .4byte gUnknown_2024018 -_080358D0: .4byte gUnknown_2024024 +_080358D0: .4byte gBattleMonForms thumb_func_end ClearTemporarySpeciesSpriteData thumb_func_start AllocateMonSpritesGfx diff --git a/asm/battle_message.s b/asm/battle_message.s index 9e2e38828..0b58fd3fb 100644 --- a/asm/battle_message.s +++ b/asm/battle_message.s @@ -707,7 +707,7 @@ _080D77F0: .4byte gUnknown_83FDF3C BattleStringExpandPlaceholdersToDisplayedString: @ 80D77F4 push {lr} ldr r1, _080D7800 @ =gDisplayedStringBattle - bl sub_80D7868 + bl BattleStringExpandPlaceholders pop {r1} bx r1 .align 2, 0 @@ -770,8 +770,8 @@ _080D785E: bx r1 thumb_func_end TryGetStatusString - thumb_func_start sub_80D7868 -sub_80D7868: @ 80D7868 + thumb_func_start BattleStringExpandPlaceholders +BattleStringExpandPlaceholders: @ 80D7868 push {r4-r7,lr} mov r7, r9 mov r6, r8 @@ -2177,7 +2177,7 @@ _080D83FA: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_80D7868 + thumb_func_end BattleStringExpandPlaceholders thumb_func_start ExpandBattleTextBuffPlaceholders ExpandBattleTextBuffPlaceholders: @ 80D8418 diff --git a/asm/field_effect.s b/asm/field_effect.s index 1382a6dae..df8562b04 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -734,7 +734,7 @@ sub_8083970: @ 8083970 str r2, [sp, 0x4] movs r1, 0 str r1, [sp, 0x8] - ldr r1, _080839C0 @ =gUnknown_823730C + ldr r1, _080839C0 @ =gMonPaletteTable lsls r4, r0, 3 adds r4, r1 ldrh r1, [r4, 0x4] @@ -758,7 +758,7 @@ sub_8083970: @ 8083970 lsrs r0, 24 b _080839CA .align 2, 0 -_080839C0: .4byte gUnknown_823730C +_080839C0: .4byte gMonPaletteTable _080839C4: .4byte 0x0000ffff _080839C8: movs r0, 0x40 diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s index 870757af8..42ab9387b 100644 --- a/asm/pokemon_3.s +++ b/asm/pokemon_3.s @@ -5,1312 +5,6 @@ .text - thumb_func_start sub_8043B48 -sub_8043B48: @ 8043B48 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - str r3, [sp] - ldr r2, _08043B88 @ =gExperienceTables - ldr r3, _08043B8C @ =gBaseStats - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r1, [r0, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r1 - movs r1, 0xC8 - lsls r1, 1 - adds r2, r1 - adds r0, r2 - ldr r1, [r0] - ldr r0, [sp] - cmp r0, r1 - bls _08043B80 - str r1, [sp] - adds r0, r4, 0 - movs r1, 0x19 - mov r2, sp - bl SetMonData -_08043B80: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08043B88: .4byte gExperienceTables -_08043B8C: .4byte gBaseStats - thumb_func_end sub_8043B48 - - thumb_func_start sub_8043B90 -sub_8043B90: @ 8043B90 - push {r4-r7,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r7, r0, 24 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r0, 24 - mov r1, sp - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x19 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - cmp r7, 0x63 - bhi _08043C14 - ldr r3, _08043C0C @ =gExperienceTables - mov r0, sp - ldrb r1, [r0] - lsls r1, 2 - ldr r2, _08043C10 @ =gBaseStats - lsls r0, r6, 3 - subs r0, r6 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r2 - adds r1, r0 - adds r1, r3 - ldr r0, [r1] - cmp r5, r0 - bls _08043C20 - adds r0, r4, 0 - movs r1, 0x38 - mov r2, sp - bl SetMonData - mov r0, sp - ldrb r2, [r0] - adds r0, r4, 0 - adds r1, r6, 0 - adds r3, r5, 0 - bl sub_8043B48 - movs r0, 0x1 - b _08043C22 - .align 2, 0 -_08043C0C: .4byte gExperienceTables -_08043C10: .4byte gBaseStats -_08043C14: - adds r0, r4, 0 - adds r1, r6, 0 - adds r2, r7, 0 - adds r3, r5, 0 - bl sub_8043B48 -_08043C20: - movs r0, 0 -_08043C22: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8043B90 - - thumb_func_start CanMonLearnTMHM -CanMonLearnTMHM: @ 8043C2C - push {r4,r5,lr} - lsls r1, 24 - lsrs r4, r1, 24 - adds r5, r4, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - adds r3, r1, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - bne _08043C4E - movs r0, 0 - b _08043C7A -_08043C4E: - cmp r4, 0x1F - bls _08043C6C - adds r0, r4, 0 - subs r0, 0x20 - movs r2, 0x1 - lsls r2, r0 - ldr r0, _08043C68 @ =gUnknown_8252BC8 - lsls r1, 3 - adds r0, 0x4 - adds r1, r0 - ldr r0, [r1] - ands r0, r2 - b _08043C7A - .align 2, 0 -_08043C68: .4byte gUnknown_8252BC8 -_08043C6C: - movs r1, 0x1 - lsls r1, r5 - ldr r2, _08043C80 @ =gUnknown_8252BC8 - lsls r0, r3, 3 - adds r0, r2 - ldr r0, [r0] - ands r0, r1 -_08043C7A: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08043C80: .4byte gUnknown_8252BC8 - thumb_func_end CanMonLearnTMHM - - thumb_func_start GetMoveRelearnerMoves -GetMoveRelearnerMoves: @ 8043C84 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - adds r6, r0, 0 - str r1, [sp, 0x8] - movs r0, 0 - mov r10, r0 - adds r0, r6, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r7, r0, 16 - adds r0, r6, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0xC] - movs r5, 0 - mov r4, sp -_08043CBA: - adds r1, r5, 0 - adds r1, 0xD - adds r0, r6, 0 - movs r2, 0 - bl GetMonData - strh r0, [r4] - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _08043CBA - movs r5, 0 - ldr r6, _08043DC8 @ =gLevelUpLearnsets - lsls r1, r7, 2 - adds r2, r1, r6 - ldr r3, [r2] - ldrh r0, [r3] - ldr r4, _08043DCC @ =0x0000ffff - str r1, [sp, 0x14] - cmp r0, r4 - beq _08043DB4 - mov r9, r2 - str r3, [sp, 0x10] -_08043CE8: - lsls r2, r5, 1 - ldr r1, [sp, 0x10] - adds r0, r2, r1 - ldrh r3, [r0] - movs r0, 0xFE - lsls r0, 8 - ands r0, r3 - ldr r4, [sp, 0xC] - lsls r1, r4, 9 - adds r7, r2, 0 - adds r5, 0x1 - mov r12, r5 - cmp r0, r1 - bgt _08043D9E - movs r4, 0 - mov r0, sp - ldrh r1, [r0] - ldr r0, _08043DD0 @ =0x000001ff - ands r0, r3 - cmp r1, r0 - beq _08043D38 - ldr r0, [sp, 0x14] - ldr r1, _08043DC8 @ =gLevelUpLearnsets - adds r6, r0, r1 - ldr r2, _08043DD0 @ =0x000001ff - mov r8, r2 - mov r3, sp - adds r5, r7, 0 -_08043D20: - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - bgt _08043D38 - ldr r0, [r6] - adds r0, r5, r0 - ldrh r1, [r0] - ldrh r2, [r3] - mov r0, r8 - ands r0, r1 - cmp r2, r0 - bne _08043D20 -_08043D38: - cmp r4, 0x4 - bne _08043D9E - movs r4, 0 - cmp r4, r10 - bge _08043D7C - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - ldrh r1, [r0] - ldr r0, [sp, 0x8] - ldrh r2, [r0] - ldr r0, _08043DD0 @ =0x000001ff - ands r0, r1 - cmp r2, r0 - beq _08043D7C - ldr r1, [sp, 0x14] - ldr r2, _08043DC8 @ =gLevelUpLearnsets - adds r6, r1, r2 - ldr r0, _08043DD0 @ =0x000001ff - mov r8, r0 - ldr r3, [sp, 0x8] - adds r5, r7, 0 -_08043D64: - adds r3, 0x2 - adds r4, 0x1 - cmp r4, r10 - bge _08043D7C - ldr r0, [r6] - adds r0, r5, r0 - ldrh r1, [r0] - ldrh r2, [r3] - mov r0, r8 - ands r0, r1 - cmp r2, r0 - bne _08043D64 -_08043D7C: - cmp r4, r10 - bne _08043D9E - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r2, r4, 1 - ldr r1, [sp, 0x8] - adds r2, r1 - mov r4, r9 - ldr r0, [r4] - adds r0, r7, r0 - ldrh r1, [r0] - ldr r0, _08043DD0 @ =0x000001ff - ands r0, r1 - strh r0, [r2] -_08043D9E: - mov r5, r12 - cmp r5, 0x13 - bgt _08043DB4 - mov r1, r9 - ldr r0, [r1] - lsls r1, r5, 1 - adds r1, r0 - ldrh r0, [r1] - ldr r2, _08043DCC @ =0x0000ffff - cmp r0, r2 - bne _08043CE8 -_08043DB4: - mov r0, r10 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08043DC8: .4byte gLevelUpLearnsets -_08043DCC: .4byte 0x0000ffff -_08043DD0: .4byte 0x000001ff - thumb_func_end GetMoveRelearnerMoves - - thumb_func_start GetLevelUpMovesBySpecies -GetLevelUpMovesBySpecies: @ 8043DD4 - push {r4-r7,lr} - adds r6, r1, 0 - lsls r0, 16 - movs r5, 0 - movs r4, 0 - ldr r1, _08043E20 @ =gLevelUpLearnsets - lsrs r0, 14 - adds r0, r1 - ldr r2, [r0] - ldrh r0, [r2] - ldr r1, _08043E24 @ =0x0000ffff - cmp r0, r1 - beq _08043E18 - ldr r0, _08043E28 @ =0x000001ff - mov r12, r0 - adds r7, r1, 0 - adds r3, r2, 0 -_08043DF6: - adds r1, r5, 0 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 1 - adds r1, r6 - ldrh r2, [r3] - mov r0, r12 - ands r0, r2 - strh r0, [r1] - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0x13 - bgt _08043E18 - ldrh r0, [r3] - cmp r0, r7 - bne _08043DF6 -_08043E18: - adds r0, r5, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08043E20: .4byte gLevelUpLearnsets -_08043E24: .4byte 0x0000ffff -_08043E28: .4byte 0x000001ff - thumb_func_end GetLevelUpMovesBySpecies - - thumb_func_start GetNumberOfRelearnableMoves -GetNumberOfRelearnableMoves: @ 8043E2C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x3C - adds r6, r0, 0 - movs r0, 0 - mov r10, r0 - adds r0, r6, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r6, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x30] - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bne _08043E68 - movs r0, 0 - b _08043F72 -_08043E68: - movs r5, 0 - lsls r4, 2 - str r4, [sp, 0x38] - mov r4, sp -_08043E70: - adds r1, r5, 0 - adds r1, 0xD - adds r0, r6, 0 - movs r2, 0 - bl GetMonData - strh r0, [r4] - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _08043E70 - movs r5, 0 - ldr r3, _08043F84 @ =gLevelUpLearnsets - ldr r2, [sp, 0x38] - adds r1, r2, r3 - ldr r0, [r1] - ldrh r0, [r0] - ldr r2, _08043F88 @ =0x0000ffff - cmp r0, r2 - beq _08043F70 - mov r9, r1 - mov r4, sp - adds r4, 0x8 - str r4, [sp, 0x34] -_08043EA0: - mov r1, r9 - ldr r0, [r1] - lsls r2, r5, 1 - adds r0, r2, r0 - ldrh r3, [r0] - movs r0, 0xFE - lsls r0, 8 - ands r0, r3 - ldr r4, [sp, 0x30] - lsls r1, r4, 9 - adds r7, r2, 0 - adds r5, 0x1 - mov r12, r5 - cmp r0, r1 - bgt _08043F5A - movs r4, 0 - mov r0, sp - ldrh r1, [r0] - ldr r0, _08043F8C @ =0x000001ff - ands r0, r3 - cmp r1, r0 - beq _08043EF2 - ldr r0, [sp, 0x38] - ldr r1, _08043F84 @ =gLevelUpLearnsets - adds r6, r0, r1 - ldr r2, _08043F8C @ =0x000001ff - mov r8, r2 - mov r3, sp - adds r5, r7, 0 -_08043EDA: - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - bgt _08043EF2 - ldr r0, [r6] - adds r0, r5, r0 - ldrh r1, [r0] - ldrh r2, [r3] - mov r0, r8 - ands r0, r1 - cmp r2, r0 - bne _08043EDA -_08043EF2: - cmp r4, 0x4 - bne _08043F5A - movs r4, 0 - cmp r4, r10 - bge _08043F38 - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - ldrh r1, [r0] - ldr r0, [sp, 0x34] - ldrh r2, [r0] - ldr r0, _08043F8C @ =0x000001ff - ands r0, r1 - add r1, sp, 0x8 - cmp r2, r0 - beq _08043F38 - ldr r2, [sp, 0x38] - ldr r0, _08043F84 @ =gLevelUpLearnsets - adds r6, r2, r0 - ldr r2, _08043F8C @ =0x000001ff - mov r8, r2 - adds r3, r1, 0 - adds r5, r7, 0 -_08043F20: - adds r3, 0x2 - adds r4, 0x1 - cmp r4, r10 - bge _08043F38 - ldr r0, [r6] - adds r0, r5, r0 - ldrh r1, [r0] - ldrh r2, [r3] - mov r0, r8 - ands r0, r1 - cmp r2, r0 - bne _08043F20 -_08043F38: - cmp r4, r10 - bne _08043F5A - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r2, r4, 1 - ldr r4, [sp, 0x34] - adds r2, r4, r2 - mov r1, r9 - ldr r0, [r1] - adds r0, r7, r0 - ldrh r1, [r0] - ldr r0, _08043F8C @ =0x000001ff - ands r0, r1 - strh r0, [r2] -_08043F5A: - mov r5, r12 - cmp r5, 0x13 - bgt _08043F70 - mov r2, r9 - ldr r0, [r2] - lsls r1, r5, 1 - adds r1, r0 - ldrh r0, [r1] - ldr r4, _08043F88 @ =0x0000ffff - cmp r0, r4 - bne _08043EA0 -_08043F70: - mov r0, r10 -_08043F72: - add sp, 0x3C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08043F84: .4byte gLevelUpLearnsets -_08043F88: .4byte 0x0000ffff -_08043F8C: .4byte 0x000001ff - thumb_func_end GetNumberOfRelearnableMoves - - thumb_func_start sub_8043F90 -sub_8043F90: @ 8043F90 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl SpeciesToNationalPokedexNum - adds r4, r0, 0 - bl sub_806E25C - cmp r0, 0 - bne _08043FB4 - cmp r4, 0x97 - bls _08043FB4 - ldr r0, _08043FB0 @ =0x0000ffff - b _08043FB6 - .align 2, 0 -_08043FB0: .4byte 0x0000ffff -_08043FB4: - adds r0, r4, 0 -_08043FB6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8043F90 - - thumb_func_start sub_8043FBC -sub_8043FBC: @ 8043FBC - push {lr} - ldr r1, _08043FD0 @ =gUnknown_2024024 - movs r2, 0 - adds r0, r1, 0x3 -_08043FC4: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08043FC4 - pop {r0} - bx r0 - .align 2, 0 -_08043FD0: .4byte gUnknown_2024024 - thumb_func_end sub_8043FBC - - thumb_func_start sub_8043FD4 -sub_8043FD4: @ 8043FD4 - push {lr} - ldr r0, _08043FFC @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - bne _0804406C - movs r0, 0x80 - lsls r0, 7 - ands r0, r1 - cmp r0, 0 - bne _08043FF6 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08044000 -_08043FF6: - movs r0, 0x85 - lsls r0, 1 - b _08044070 - .align 2, 0 -_08043FFC: .4byte gBattleTypeFlags -_08044000: - movs r0, 0x8 - ands r1, r0 - cmp r1, 0 - beq _0804406C - ldr r2, _08044028 @ =gTrainers - ldr r0, _0804402C @ =gTrainerBattleOpponent_A - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x1] - subs r0, 0x53 - cmp r0, 0x7 - bhi _08044062 - lsls r0, 2 - ldr r1, _08044030 @ =_08044034 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08044028: .4byte gTrainers -_0804402C: .4byte gTrainerBattleOpponent_A -_08044030: .4byte _08044034 - .align 2, 0 -_08044034: - .4byte _08044062 - .4byte _0804405C - .4byte _08044062 - .4byte _08044062 - .4byte _0804405C - .4byte _08044062 - .4byte _08044062 - .4byte _08044054 -_08044054: - ldr r0, _08044058 @ =0x0000012b - b _08044070 - .align 2, 0 -_08044058: .4byte 0x0000012b -_0804405C: - movs r0, 0x94 - lsls r0, 1 - b _08044070 -_08044062: - ldr r0, _08044068 @ =0x00000129 - b _08044070 - .align 2, 0 -_08044068: .4byte 0x00000129 -_0804406C: - movs r0, 0x95 - lsls r0, 1 -_08044070: - pop {r1} - bx r1 - thumb_func_end sub_8043FD4 - - thumb_func_start PlayBattleBGM -PlayBattleBGM: @ 8044074 - push {lr} - bl ResetMapMusic - bl m4aMPlayAllStop - bl sub_8043FD4 - lsls r0, 16 - lsrs r0, 16 - bl PlayBGM - pop {r0} - bx r0 - thumb_func_end PlayBattleBGM - - thumb_func_start PlayMapChosenOrBattleBGM -PlayMapChosenOrBattleBGM: @ 8044090 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - bl ResetMapMusic - bl m4aMPlayAllStop - cmp r4, 0 - beq _080440AA - adds r0, r4, 0 - bl PlayNewMapMusic - b _080440B6 -_080440AA: - bl sub_8043FD4 - lsls r0, 16 - lsrs r0, 16 - bl PlayNewMapMusic -_080440B6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayMapChosenOrBattleBGM - - thumb_func_start GetMonFrontSpritePal -GetMonFrontSpritePal: @ 80440BC - push {r4-r6,lr} - adds r5, r0, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - adds r6, r0, 0 - adds r0, r5, 0 - movs r1, 0 - movs r2, 0 - bl GetMonData - adds r2, r0, 0 - adds r0, r4, 0 - adds r1, r6, 0 - bl GetFrontSpritePalFromSpeciesAndPersonality - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetMonFrontSpritePal - - thumb_func_start GetFrontSpritePalFromSpeciesAndPersonality -GetFrontSpritePalFromSpeciesAndPersonality: @ 80440F4 - push {r4,r5,lr} - adds r3, r2, 0 - lsls r0, 16 - lsrs r4, r0, 16 - adds r5, r4, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bls _08044110 - ldr r0, _0804410C @ =gUnknown_823730C - ldr r0, [r0] - b _0804413C - .align 2, 0 -_0804410C: .4byte gUnknown_823730C -_08044110: - lsrs r0, r1, 16 - ldr r2, _0804412C @ =0x0000ffff - ands r1, r2 - eors r0, r1 - lsrs r1, r3, 16 - eors r0, r1 - ands r3, r2 - eors r0, r3 - cmp r0, 0x7 - bls _08044134 - ldr r0, _08044130 @ =gUnknown_823730C - lsls r1, r4, 3 - b _08044138 - .align 2, 0 -_0804412C: .4byte 0x0000ffff -_08044130: .4byte gUnknown_823730C -_08044134: - ldr r0, _08044144 @ =gUnknown_82380CC - lsls r1, r5, 3 -_08044138: - adds r1, r0 - ldr r0, [r1] -_0804413C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08044144: .4byte gUnknown_82380CC - thumb_func_end GetFrontSpritePalFromSpeciesAndPersonality - - thumb_func_start GetMonSpritePalStruct -GetMonSpritePalStruct: @ 8044148 - push {r4-r6,lr} - adds r5, r0, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - adds r6, r0, 0 - adds r0, r5, 0 - movs r1, 0 - movs r2, 0 - bl GetMonData - adds r2, r0, 0 - adds r0, r4, 0 - adds r1, r6, 0 - bl GetMonSpritePalStructFromOtIdPersonality - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetMonSpritePalStruct - - thumb_func_start GetMonSpritePalStructFromOtIdPersonality -GetMonSpritePalStructFromOtIdPersonality: @ 8044180 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsrs r0, r1, 16 - ldr r3, _080441A0 @ =0x0000ffff - ands r1, r3 - eors r0, r1 - lsrs r1, r2, 16 - eors r0, r1 - ands r2, r3 - eors r0, r2 - cmp r0, 0x7 - bls _080441A8 - lsls r0, r4, 3 - ldr r1, _080441A4 @ =gUnknown_823730C - b _080441AC - .align 2, 0 -_080441A0: .4byte 0x0000ffff -_080441A4: .4byte gUnknown_823730C -_080441A8: - lsls r0, r4, 3 - ldr r1, _080441B4 @ =gUnknown_82380CC -_080441AC: - adds r0, r1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080441B4: .4byte gUnknown_82380CC - thumb_func_end GetMonSpritePalStructFromOtIdPersonality - - thumb_func_start IsHMMove2 -IsHMMove2: @ 80441B8 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - ldr r2, _080441DC @ =gUnknown_825E014 - ldrh r0, [r2] - ldr r1, _080441E0 @ =0x0000ffff - cmp r0, r1 - beq _080441EA - adds r4, r1, 0 - adds r1, r2, 0 -_080441CC: - ldrh r0, [r2] - adds r1, 0x2 - adds r2, 0x2 - cmp r0, r3 - bne _080441E4 - movs r0, 0x1 - b _080441EC - .align 2, 0 -_080441DC: .4byte gUnknown_825E014 -_080441E0: .4byte 0x0000ffff -_080441E4: - ldrh r0, [r1] - cmp r0, r4 - bne _080441CC -_080441EA: - movs r0, 0 -_080441EC: - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsHMMove2 - - thumb_func_start IsPokeSpriteNotFlipped -IsPokeSpriteNotFlipped: @ 80441F4 - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08044208 @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x19] - lsrs r0, 7 - bx lr - .align 2, 0 -_08044208: .4byte gBaseStats - thumb_func_end IsPokeSpriteNotFlipped - - thumb_func_start GetMonFlavorRelation -GetMonFlavorRelation: @ 804420C - push {r4,lr} - lsls r4, r1, 24 - lsrs r4, 24 - bl GetNature - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08044230 @ =gUnknown_825DE24 - lsls r1, r0, 2 - adds r1, r0 - adds r1, r4 - adds r1, r2 - movs r0, 0 - ldrsb r0, [r1, r0] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08044230: .4byte gUnknown_825DE24 - thumb_func_end GetMonFlavorRelation - - thumb_func_start GetFlavorRelationByPersonality -GetFlavorRelationByPersonality: @ 8044234 - push {r4,lr} - lsls r4, r1, 24 - lsrs r4, 24 - bl GetNatureFromPersonality - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08044258 @ =gUnknown_825DE24 - lsls r1, r0, 2 - adds r1, r0 - adds r1, r4 - adds r1, r2 - movs r0, 0 - ldrsb r0, [r1, r0] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08044258: .4byte gUnknown_825DE24 - thumb_func_end GetFlavorRelationByPersonality - - thumb_func_start IsTradedMon -IsTradedMon: @ 804425C - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - movs r1, 0x7 - mov r2, sp - bl GetMonData - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - mov r1, sp - bl IsOtherTrainer - lsls r0, 24 - lsrs r0, 24 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsTradedMon - - thumb_func_start IsOtherTrainer -IsOtherTrainer: @ 8044288 - push {r4,r5,lr} - adds r5, r1, 0 - ldr r1, _080442CC @ =gSaveBlock2Ptr - ldr r3, [r1] - ldrb r2, [r3, 0xA] - ldrb r1, [r3, 0xB] - lsls r1, 8 - orrs r2, r1 - ldrb r1, [r3, 0xC] - lsls r1, 16 - orrs r2, r1 - ldrb r1, [r3, 0xD] - lsls r1, 24 - orrs r2, r1 - cmp r0, r2 - bne _080442D0 - movs r4, 0 - ldrb r0, [r5] - cmp r0, 0xFF - beq _080442C6 - adds r2, r5, 0 -_080442B2: - adds r1, r3, r4 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _080442D0 - adds r2, 0x1 - adds r4, 0x1 - ldrb r0, [r2] - cmp r0, 0xFF - bne _080442B2 -_080442C6: - movs r0, 0 - b _080442D2 - .align 2, 0 -_080442CC: .4byte gSaveBlock2Ptr -_080442D0: - movs r0, 0x1 -_080442D2: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end IsOtherTrainer - - thumb_func_start MonRestorePP -MonRestorePP: @ 80442D8 - push {lr} - bl BoxMonRestorePP - pop {r0} - bx r0 - thumb_func_end MonRestorePP - - thumb_func_start BoxMonRestorePP -BoxMonRestorePP: @ 80442E4 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r6, 0 -_080442EC: - adds r4, r6, 0 - adds r4, 0xD - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl GetBoxMonData - cmp r0, 0 - beq _08044338 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl GetBoxMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - movs r1, 0x15 - movs r2, 0 - bl GetBoxMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r2, r6, 24 - lsrs r2, 24 - adds r0, r4, 0 - bl CalculatePPWithBonus - mov r1, sp - strb r0, [r1] - adds r1, r6, 0 - adds r1, 0x11 - adds r0, r5, 0 - mov r2, sp - bl SetBoxMonData -_08044338: - adds r6, 0x1 - cmp r6, 0x3 - ble _080442EC - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end BoxMonRestorePP - - thumb_func_start sub_8044348 -sub_8044348: @ 8044348 - push {r4,r5,lr} - ldr r2, _0804438C @ =gLastUsedAbility - ldr r5, _08044390 @ =gBattleStruct - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0xAC - ldrb r0, [r0] - strb r0, [r2] - ldr r4, _08044394 @ =gBattleTextBuff1 - movs r0, 0xFD - strb r0, [r4] - movs r0, 0x4 - strb r0, [r4, 0x1] - adds r1, 0x49 - ldrb r0, [r1] - strb r0, [r4, 0x2] - movs r0, 0xFF - strb r0, [r4, 0x4] - ldrb r0, [r1] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0804439C - ldr r1, _08044398 @ =gBattlerPartyIndexes - ldr r0, [r5] - adds r0, 0x49 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - bl pokemon_order_func - b _080443AA - .align 2, 0 -_0804438C: .4byte gLastUsedAbility -_08044390: .4byte gBattleStruct -_08044394: .4byte gBattleTextBuff1 -_08044398: .4byte gBattlerPartyIndexes -_0804439C: - ldr r1, _080443E0 @ =gBattlerPartyIndexes - ldr r0, [r5] - adds r0, 0x49 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] -_080443AA: - strb r0, [r4, 0x3] - ldr r4, _080443E4 @ =gBattleTextBuff2 - movs r0, 0xFD - strb r0, [r4] - movs r0, 0x4 - strb r0, [r4, 0x1] - ldr r1, _080443E8 @ =gBattlerInMenuId - ldrb r0, [r1] - strb r0, [r4, 0x2] - ldr r2, _080443E0 @ =gBattlerPartyIndexes - ldrb r0, [r1] - lsls r0, 1 - adds r0, r2 - ldrb r0, [r0] - bl pokemon_order_func - strb r0, [r4, 0x3] - movs r0, 0xFF - strb r0, [r4, 0x4] - ldr r0, _080443EC @ =gUnknown_83FCA2C - ldr r1, _080443F0 @ =gStringVar4 - bl sub_80D7868 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080443E0: .4byte gBattlerPartyIndexes -_080443E4: .4byte gBattleTextBuff2 -_080443E8: .4byte gBattlerInMenuId -_080443EC: .4byte gUnknown_83FCA2C -_080443F0: .4byte gStringVar4 - thumb_func_end sub_8044348 - - thumb_func_start SetWildMonHeldItem -SetWildMonHeldItem: @ 80443F4 - push {r4,r5,lr} - ldr r0, _0804444C @ =gBattleTypeFlags - ldr r0, [r0] - ldr r1, _08044450 @ =0x00012008 - ands r0, r1 - cmp r0, 0 - bne _08044468 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r4, _08044454 @ =gEnemyParty - adds r0, r4, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08044458 @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r3, r1, 2 - adds r1, r3, r2 - ldrh r0, [r1, 0xC] - ldrh r1, [r1, 0xE] - cmp r0, r1 - beq _0804443E - cmp r5, 0x2C - bls _08044468 - cmp r5, 0x5E - bhi _0804445C -_0804443E: - adds r2, 0xC - adds r2, r3, r2 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData - b _08044468 - .align 2, 0 -_0804444C: .4byte gBattleTypeFlags -_08044450: .4byte 0x00012008 -_08044454: .4byte gEnemyParty -_08044458: .4byte gBaseStats -_0804445C: - adds r2, 0xE - adds r2, r3, r2 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData -_08044468: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end SetWildMonHeldItem - - thumb_func_start IsMonShiny -IsMonShiny: @ 8044470 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - adds r0, r5, 0 - bl IsShinyOtIdPersonality - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end IsMonShiny - - thumb_func_start IsShinyOtIdPersonality -IsShinyOtIdPersonality: @ 804449C - push {r4,lr} - movs r4, 0 - lsrs r2, r0, 16 - ldr r3, _080444C0 @ =0x0000ffff - ands r0, r3 - eors r2, r0 - lsrs r0, r1, 16 - eors r2, r0 - ands r1, r3 - eors r2, r1 - cmp r2, 0x7 - bhi _080444B6 - movs r4, 0x1 -_080444B6: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080444C0: .4byte 0x0000ffff - thumb_func_end IsShinyOtIdPersonality - - thumb_func_start sub_80444C4 -sub_80444C4: @ 80444C4 - push {r4,lr} - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080444F4 @ =gLinkPlayers - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r1, [r1, 0x18] - movs r0, 0x2 - eors r0, r1 - bl GetBankMultiplayerId - adds r1, r0, 0 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r4, 0x8 - adds r0, r4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080444F4: .4byte gLinkPlayers - thumb_func_end sub_80444C4 - thumb_func_start sub_80444F8 sub_80444F8: @ 80444F8 push {r4-r6,lr} diff --git a/asm/reshow_battle_screen.s b/asm/reshow_battle_screen.s index e946e5087..a30d8e833 100644 --- a/asm/reshow_battle_screen.s +++ b/asm/reshow_battle_screen.s @@ -726,7 +726,7 @@ _08077CD2: adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _08077DA8 @ =gUnknown_2024024 + ldr r1, _08077DA8 @ =gBattleMonForms adds r1, r7, r1 ldrb r1, [r1] bl StartSpriteAnim @@ -738,7 +738,7 @@ _08077D98: .4byte gMultiuseSpriteTemplate _08077D9C: .4byte gUnknown_2023D44 _08077DA0: .4byte gSprites _08077DA4: .4byte SpriteCallbackDummy -_08077DA8: .4byte gUnknown_2024024 +_08077DA8: .4byte gBattleMonForms _08077DAC: ldr r0, _08077E00 @ =gBattleTypeFlags ldr r1, [r0] @@ -952,7 +952,7 @@ _08077EA8: adds r0, r1 lsls r0, 2 adds r0, r5 - ldr r1, _08077FDC @ =gUnknown_2024024 + ldr r1, _08077FDC @ =gBattleMonForms adds r1, r7, r1 ldrb r1, [r1] bl StartSpriteAnim @@ -996,7 +996,7 @@ _08077FCC: .4byte gMultiuseSpriteTemplate _08077FD0: .4byte gUnknown_2023D44 _08077FD4: .4byte gSprites _08077FD8: .4byte SpriteCallbackDummy -_08077FDC: .4byte gUnknown_2024024 +_08077FDC: .4byte gBattleMonForms _08077FE0: .4byte gUnknown_2024018 thumb_func_end sub_8077C38 diff --git a/data/data.s b/data/data.s index 12499d26a..c8b79e61a 100644 --- a/data/data.s +++ b/data/data.s @@ -79,13 +79,13 @@ gUnknown_8235E6C:: @ 8235E6C gUnknown_823654C:: @ 823654C .incbin "baserom.gba", 0x23654C, 0xDC0 -gUnknown_823730C:: @ 823730C +gMonPaletteTable:: @ 823730C .incbin "baserom.gba", 0x23730C, 0xE8 gUnknown_82373F4:: @ 82373F4 .incbin "baserom.gba", 0x2373F4, 0xCD8 -gUnknown_82380CC:: @ 82380CC +gMonShinyPaletteTable:: @ 82380CC .incbin "baserom.gba", 0x2380CC, 0x1010 gTrainerFrontAnimsPtrTable:: @ 82390DC @@ -316,7 +316,7 @@ gItemEffectTable:: @ 82528BC gNatureStatTable:: @ 8252B48 .incbin "baserom.gba", 0x252B48, 0x80 -gUnknown_8252BC8:: @ 8252BC8 +gTMHMLearnsets:: @ 8252BC8 .incbin "baserom.gba", 0x252BC8, 0xCE0 gFacilityClassToPicIndex:: @ 82538A8 @@ -343,7 +343,7 @@ gEvolutionTable:: @ 8259754 gLevelUpLearnsets:: @ 825D7B4 .incbin "baserom.gba", 0x25D7B4, 0x670 -gUnknown_825DE24:: @ 825DE24 +gPokeblockFlavorCompatibilityTable:: @ 825DE24 .incbin "baserom.gba", 0x25DE24, 0x7D gUnknown_825DEA1:: @ 825DEA1 @@ -379,7 +379,7 @@ gUnknown_825DFF0:: @ 825DFF0 sFriendshipEventDeltas:: @ 825DFF6 .incbin "baserom.gba", 0x25DFF6, 0x1E -gUnknown_825E014:: @ 825E014 +sHMMoves:: @ 825E014 .incbin "baserom.gba", 0x25E014, 0x12 gUnknown_825E026:: @ 825E026 diff --git a/data/data_84827AC.s b/data/data_84827AC.s index 880c97ae1..9d3e5a38c 100644 --- a/data/data_84827AC.s +++ b/data/data_84827AC.s @@ -282,7 +282,7 @@ BattleText_MistShroud:: @ 83FBBB4 BattleText_GetPumped:: @ 83FBBE9 .incbin "baserom.gba", 0x3FBBE9, 0xE43 -gUnknown_83FCA2C:: @ 83FCA2C +gText_PkmnsXPreventsSwitching:: @ 83FCA2C .incbin "baserom.gba", 0x3FCA2C, 0x11E BattleText_Rose:: @ 83FCB4A diff --git a/include/battle.h b/include/battle.h index b1d442c73..ee707f78b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -47,7 +47,7 @@ #define BATTLE_TYPE_LEGENDARY 0x2000 #define BATTLE_TYPE_REGI 0x4000 #define BATTLE_TYPE_TWO_OPPONENTS 0x8000 -#define BATTLE_TYPE_DOME 0x10000 +#define BATTLE_TYPE_DOME 0x10000 // this is used in pokemon.c, but its clearly not the correct name for FR/LG. TODO: Fix these #define BATTLE_TYPE_PALACE 0x20000 #define BATTLE_TYPE_ARENA 0x40000 #define BATTLE_TYPE_FACTORY 0x80000 @@ -545,7 +545,7 @@ struct BattleStruct u8 field_46; u8 field_47; u8 focusPunchBank; - u8 field_49; + u8 battlerPreventingSwitchout; u8 moneyMultiplier; u8 savedTurnActionNumber; u8 switchInAbilitiesCounter; @@ -598,7 +598,7 @@ struct BattleStruct u8 field_A7; u16 hpOnSwitchout[2]; u32 savedBattleTypeFlags; - u8 field_B0; + u8 abilityPreventingSwitchout; u8 hpScale; u8 synchronizeMoveEffect; u8 field_B3; diff --git a/src/pokemon.c b/src/pokemon.c index f4e712b46..ff7c907ca 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -15,6 +15,8 @@ #include "evolution_scene.h" #include "battle_message.h" #include "link.h" +#include "m4a.h" +#include "sound.h" #include "constants/items.h" #include "constants/species.h" #include "constants/pokemon.h" @@ -51,14 +53,13 @@ extern const u8 gUnknown_825DEA1[]; extern const u8 gPPUpWriteMasks[]; extern u8 *gUnknown_83FD5D0[]; extern const u8 gUnknown_825DFF0[]; -extern u8 gBattleTextBuff1[]; -extern u8 gBattleTextBuff2[]; extern const u8 gText_EggNickname[]; extern const u8 gText_BadEgg[]; extern const u8 BattleText_Rose[]; extern const u8 BattleText_UnknownString3[]; extern const u8 BattleText_GetPumped[]; extern const u8 BattleText_MistShroud[]; +extern const u8 gText_PkmnsXPreventsSwitching[]; extern const u8 sHoldEffectToType[][2]; extern u8 sLearningMoveTableID; extern const u8 sSecretBaseFacilityClasses[2][5]; @@ -69,6 +70,12 @@ extern u16 gUnknown_82539D4[]; extern struct SpindaSpot gSpindaSpotGraphics[]; extern s8 gNatureStatTable[][5]; extern const s8 sFriendshipEventDeltas[][3]; +extern u32 gTMHMLearnsets[][2]; +extern u8 gBattleMonForms[4]; +extern const struct CompressedSpritePalette gMonPaletteTable[]; +extern const struct CompressedSpritePalette gMonShinyPaletteTable[]; +extern const u16 sHMMoves[]; +extern s8 gPokeblockFlavorCompatibilityTable[]; // External functions extern u8 sav1_map_get_name(void); // overworld @@ -4577,7 +4584,7 @@ u8 GetNatureFromPersonality(u32 personality) return personality % 25; } -extern bool32 sub_806E25C(u16 targetSpecies); +extern bool32 sub_806E25C(void); u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) { @@ -4679,7 +4686,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) if (gEvolutionTable[species][i].param == heldItem) { targetSpecies = gEvolutionTable[species][i].targetSpecies; - if (sub_806E25C(targetSpecies) || targetSpecies <= 151) + if (sub_806E25C() || targetSpecies <= 151) { heldItem = 0; SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); @@ -5204,3 +5211,399 @@ void sub_8043B40(void) { u8 foo[4]; // huh? } + +void sub_8043B48(struct Pokemon *mon, int species, u8 unused, u32 data) +{ + if (data > gExperienceTables[gBaseStats[species].growthRate][100]) + { + data = gExperienceTables[gBaseStats[species].growthRate][100]; + SetMonData(mon, MON_DATA_EXP, &data); + } +} + +bool32 sub_8043B90(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL); + u8 newLevel = level + 1; + u32 exp = GetMonData(mon, MON_DATA_EXP, NULL); + + if(level < 100) + { + if(exp > gExperienceTables[gBaseStats[species].growthRate][newLevel]) + { + SetMonData(mon, MON_DATA_LEVEL, &newLevel); + sub_8043B48(mon, species, newLevel, exp); + return TRUE; + } + else + return FALSE; + } + else + { + sub_8043B48(mon, species, level, exp); + return FALSE; + } +} + +u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + if (species == SPECIES_EGG) + { + return 0; + } + else if (tm < 32) + { + u32 mask = 1 << tm; + return gTMHMLearnsets[species][0] & mask; + } + else + { + u32 mask = 1 << (tm - 32); + return gTMHMLearnsets[species][1] & mask; + } +} + +u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves) +{ + u16 learnedMoves[4]; + u8 numMoves = 0; + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); + int i, j, k; + + for (i = 0; i < 4; i++) + learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0); + + for (i = 0; i < 20; i++) + { + u16 moveLevel; + + if (gLevelUpLearnsets[species][i] == 0xFFFF) + break; + + moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; + + if (moveLevel <= (level << 9)) + { + for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) + ; + + if (j == 4) + { + for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) + ; + + if (k == numMoves) + moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + } + } + } + + return numMoves; +} + +u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves) +{ + u8 numMoves = 0; + int i; + + for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++) + moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + + return numMoves; +} + +u8 GetNumberOfRelearnableMoves(struct Pokemon *mon) +{ + u16 learnedMoves[4]; + u16 moves[20]; + u8 numMoves = 0; + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); + int i, j, k; + + if (species == SPECIES_EGG) + return 0; + + for (i = 0; i < 4; i++) + learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0); + + for (i = 0; i < 20; i++) + { + u16 moveLevel; + + if (gLevelUpLearnsets[species][i] == 0xFFFF) + break; + + moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; + + if (moveLevel <= (level << 9)) + { + for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) + ; + + if (j == 4) + { + for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) + ; + + if (k == numMoves) + moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + } + } + } + + return numMoves; +} + +// SpeciesToPokedexNum? +u16 sub_8043F90(u16 species) +{ + species = SpeciesToNationalPokedexNum(species); + + if (!sub_806E25C() && species > 151) + return 0xFFFF; + return species; +} + +void ClearBattleMonForms(void) +{ + int i; + for(i = 0; i < 4; i++) + gBattleMonForms[i] = 0; +} + +u16 GetMUS_ForBattle(void) +{ + if(gBattleTypeFlags & 0x1000) + return 0x12A; + if(gBattleTypeFlags & 0x4000) + return 0x10A; + if(gBattleTypeFlags & 0x2) + return 0x10A; + if(gBattleTypeFlags & 0x8) + { + switch (gTrainers[gTrainerBattleOpponent_A].trainerClass) + { + case 0x5A: + return 0x12B; + case 0x54: + case 0x57: + return 0x128; + case 0x53: + case 0x55: + case 0x56: + case 0x58: + case 0x59: + default: + return 0x129; + } + } + return 0x12A; +} + +void PlayBattleBGM(void) +{ + ResetMapMusic(); + m4aMPlayAllStop(); + PlayBGM(GetMUS_ForBattle()); +} + +void PlayMapChosenOrBattleBGM(u16 songId) +{ + ResetMapMusic(); + m4aMPlayAllStop(); + if (songId) + PlayNewMapMusic(songId); + else + PlayNewMapMusic(GetMUS_ForBattle()); +} + +const u8 *GetMonFrontSpritePal(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality); +} + +const u8 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality) +{ + u32 shinyValue; + + if (species > SPECIES_EGG) + return gMonPaletteTable[0].data; + + shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + return gMonShinyPaletteTable[species].data; + else + return gMonPaletteTable[species].data; +} + +const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); +} + +const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality) +{ + u32 shinyValue; + + shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + return &gMonShinyPaletteTable[species]; + else + return &gMonPaletteTable[species]; +} + +bool32 IsHMMove2(u16 move) +{ + int i = 0; + while (sHMMoves[i] != 0xFFFF) + { + if (sHMMoves[i++] == move) + return TRUE; + } + return FALSE; +} + +bool8 IsPokeSpriteNotFlipped(u16 species) +{ + return gBaseStats[species].noFlip; +} + +s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor) +{ + u8 nature = GetNature(mon); + return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor]; +} + +s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor) +{ + u8 nature = GetNatureFromPersonality(personality); + return gPokeblockFlavorCompatibilityTable[nature * 5 + flavor]; +} + +bool8 IsTradedMon(struct Pokemon *mon) +{ + u8 otName[7 + 1]; // change PLAYER_NAME_LENGTH to 7 + u32 otId; + GetMonData(mon, MON_DATA_OT_NAME, otName); + otId = GetMonData(mon, MON_DATA_OT_ID, 0); + return IsOtherTrainer(otId, otName); +} + +bool8 IsOtherTrainer(u32 otId, u8 *otName) +{ + if (otId == + (gSaveBlock2Ptr->playerTrainerId[0] + | (gSaveBlock2Ptr->playerTrainerId[1] << 8) + | (gSaveBlock2Ptr->playerTrainerId[2] << 16) + | (gSaveBlock2Ptr->playerTrainerId[3] << 24))) + { + int i; + + for (i = 0; otName[i] != EOS; i++) + if (otName[i] != gSaveBlock2Ptr->playerName[i]) + return TRUE; + return FALSE; + } + + return TRUE; +} + +void MonRestorePP(struct Pokemon *mon) +{ + BoxMonRestorePP(&mon->box); +} + +void BoxMonRestorePP(struct BoxPokemon *boxMon) +{ + int i; + + for (i = 0; i < 4; i++) + { + if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0)) + { + u16 move = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0); + u16 bonus = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, 0); + u8 pp = CalculatePPWithBonus(move, bonus, i); + SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp); + } + } +} + +// SetMonPreventsSwitchingString +void sub_8044348(void) +{ +#ifdef NONMATCHING + gLastUsedAbility = gBattleStruct -> abilityPreventingSwitchout; // fixed from the original +#else + gLastUsedAbility = ((u8 *) gBattleStruct)[0xac]; // huh? why is this wrong? +#endif + + gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN; + gBattleTextBuff1[1] = B_BUFF_MON_NICK_WITH_PREFIX; + gBattleTextBuff1[2] = gBattleStruct->battlerPreventingSwitchout; + gBattleTextBuff1[4] = B_BUFF_EOS; + + if (GetBattlerSide(gBattleStruct->battlerPreventingSwitchout) == B_SIDE_PLAYER) + gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]); + else + gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]; + + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId])) + + BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4); +} + +void SetWildMonHeldItem(void) +{ + // TODO: Replace 0x00010000 with the right flag that isnt BATTLE_TYPE_DOME + if (!(gBattleTypeFlags & (0x00010000 | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER))) + { + u16 rnd = Random() % 100; + u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0); + if (gBaseStats[species].item1 == gBaseStats[species].item2) + { + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); + return; + } + + if (rnd > 44) + { + if (rnd <= 94) + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); + else + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2); + } + } +} + +bool8 IsMonShiny(struct Pokemon *mon) +{ + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return IsShinyOtIdPersonality(otId, personality); +} + +bool8 IsShinyOtIdPersonality(u32 otId, u32 personality) +{ + bool8 retVal = FALSE; + u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + retVal = TRUE; + return retVal; +} + +u8 *sub_80444C4(void) +{ + u8 id = GetMultiplayerId(); + return gLinkPlayers[GetBankMultiplayerId(gLinkPlayers[id].id ^ 2)].name; +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 059b4b8f5..93d27674a 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -464,7 +464,7 @@ gBattleMovePower: @ 2024020 gMoveToLearn: @ 2024022 .space 0x2 -gUnknown_2024024: @ 2024024 +gBattleMonForms: @ 2024024 .space 0x4 sLearningMoveTableID: @ 2024028 |