diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2017-09-11 14:42:13 +0200 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2017-09-11 14:42:13 +0200 |
commit | 5394435520c4942ec9935454ff420acbab2ff4e4 (patch) | |
tree | 1dbd23c0b1300d4553dbffc6d5a8d784ff687854 | |
parent | 154a70e22829891ec56561e454a73a67e609679d (diff) |
more of pokemon3 decompiled
-rw-r--r-- | asm/battle_2.s | 6 | ||||
-rw-r--r-- | asm/battle_4.s | 2 | ||||
-rw-r--r-- | asm/battle_anim_80FE840.s | 2 | ||||
-rw-r--r-- | asm/battle_controller_player.s | 4 | ||||
-rw-r--r-- | asm/battle_controller_player_partner.s | 6 | ||||
-rw-r--r-- | asm/battle_message.s | 8 | ||||
-rw-r--r-- | asm/battle_setup.s | 4 | ||||
-rw-r--r-- | asm/cable_club.s | 8 | ||||
-rw-r--r-- | asm/link.s | 2 | ||||
-rw-r--r-- | asm/pokeblock_feed.s | 2 | ||||
-rw-r--r-- | asm/pokemon_3.s | 1000 | ||||
-rw-r--r-- | asm/recorded_battle.s | 20 | ||||
-rw-r--r-- | asm/rom_8034C54.s | 2 | ||||
-rw-r--r-- | asm/rom_8161F74.s | 44 | ||||
-rw-r--r-- | asm/rom_818E9AC.s | 12 | ||||
-rw-r--r-- | asm/rom_81BE66C.s | 4 | ||||
-rw-r--r-- | asm/trade.s | 4 | ||||
-rw-r--r-- | data/battle_message.s | 4 | ||||
-rw-r--r-- | data/data2c.s | 7 | ||||
-rw-r--r-- | include/battle.h | 102 | ||||
-rw-r--r-- | include/m4a.h | 1 | ||||
-rw-r--r-- | include/pokemon.h | 8 | ||||
-rw-r--r-- | include/trainer_classes.h (renamed from include/trainer_class.h) | 6 | ||||
-rw-r--r-- | include/trainer_ids.h | 6 | ||||
-rw-r--r-- | src/decompress.c | 3 | ||||
-rw-r--r-- | src/pokemon_3.c | 374 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
27 files changed, 563 insertions, 1080 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s index b15b67cdd..803533525 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -95,7 +95,7 @@ InitBattle: @ 80367D4 ands r0, r1 cmp r0, 0 beq _08036870 - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId ldrh r1, [r0] ldr r0, =0x00000c03 cmp r1, r0 @@ -1537,12 +1537,12 @@ _08037530: adds r0, 0x40 ldr r4, =gTrainerBattleOpponent_A ldrh r1, [r4] - bl sub_8162E20 + bl GetFrontierTrainerName adds r0, r6, 0 adds r0, 0x5C ldr r5, =gTrainerBattleOpponent_B ldrh r1, [r5] - bl sub_8162E20 + bl GetFrontierTrainerName ldrh r1, [r4] mov r0, sp bl sub_8165B88 diff --git a/asm/battle_4.s b/asm/battle_4.s index d3046e74f..03ceae49a 100644 --- a/asm/battle_4.s +++ b/asm/battle_4.s @@ -8717,7 +8717,7 @@ _0804ACE2: ands r0, r1 cmp r0, 0 beq _0804AD48 - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId ldrh r1, [r0] ldr r0, =0x00000c03 cmp r1, r0 diff --git a/asm/battle_anim_80FE840.s b/asm/battle_anim_80FE840.s index 7dff7335a..c7a493410 100644 --- a/asm/battle_anim_80FE840.s +++ b/asm/battle_anim_80FE840.s @@ -50455,7 +50455,7 @@ battle_intro_launch: @ 81181D4 ands r0, r1 cmp r0, 0 beq _08118208 - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId ldrh r1, [r0] ldr r0, =0x00000c03 cmp r1, r0 diff --git a/asm/battle_controller_player.s b/asm/battle_controller_player.s index 4678c8e79..b3680e75c 100644 --- a/asm/battle_controller_player.s +++ b/asm/battle_controller_player.s @@ -7364,7 +7364,7 @@ _0805B5E0: ands r0, r1 cmp r0, 0 beq _0805B618 - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId ldrh r1, [r0] ldr r0, =0x00000c03 cmp r1, r0 @@ -7413,7 +7413,7 @@ _0805B656: bne _0805B664 b _0805B794 _0805B664: - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId ldrh r1, [r0] ldr r0, =0x00000c03 cmp r1, r0 diff --git a/asm/battle_controller_player_partner.s b/asm/battle_controller_player_partner.s index 668d6fcda..a0c9c6360 100644 --- a/asm/battle_controller_player_partner.s +++ b/asm/battle_controller_player_partner.s @@ -4174,7 +4174,7 @@ sub_81BD37C: @ 81BD37C mov r7, r9 mov r6, r8 push {r6,r7} - ldr r2, =gUnknown_02038BCE + ldr r2, =gPartnerTrainerId ldrh r1, [r2] ldr r0, =0x00000c03 cmp r1, r0 @@ -4205,7 +4205,7 @@ _081BD3BE: lsls r1, 15 adds r0, r1 lsrs r7, r0, 16 - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId ldrh r1, [r0] ldr r0, =0x00000c03 cmp r1, r0 @@ -5823,7 +5823,7 @@ sub_81BE10C: @ 81BE10C bl AllocSpritePalette lsls r0, 24 lsrs r4, r0, 24 - ldr r2, =gUnknown_02038BCE + ldr r2, =gPartnerTrainerId ldrh r1, [r2] ldr r0, =0x00000c03 cmp r1, r0 diff --git a/asm/battle_message.s b/asm/battle_message.s index d33dc3b48..dec210b25 100644 --- a/asm/battle_message.s +++ b/asm/battle_message.s @@ -2237,11 +2237,11 @@ _0814F584: b _0814F5C0 .pool _0814F594: - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId _0814F596: ldrh r0, [r0] _0814F598: - bl sub_8162BD8 + bl GetFrontierOpponentClass _0814F59C: lsls r0, 24 lsrs r0, 24 @@ -2254,12 +2254,12 @@ _0814F5A2: b _0814F5C0 .pool _0814F5B4: - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId _0814F5B6: ldrh r1, [r0] _0814F5B8: mov r0, sp - bl sub_8162E20 + bl GetFrontierTrainerName _0814F5BE: mov r4, sp _0814F5C0: diff --git a/asm/battle_setup.s b/asm/battle_setup.s index 43f30e0ec..bbe852f9b 100644 --- a/asm/battle_setup.s +++ b/asm/battle_setup.s @@ -75,7 +75,7 @@ task_add_01_battle_start: @ 80B065C adds r1, r2 strh r4, [r1, 0xA] adds r0, r5, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM pop {r4,r5} pop {r0} bx r0 @@ -1359,7 +1359,7 @@ sub_80B1158: @ 80B1158 movs r3, 0 bl sub_80F9244 bl ResetTasks - bl sub_806E64C + bl PlayBattleBGM ldr r0, =sub_80B11A8 bl SetMainCallback2 movs r0, 0 diff --git a/asm/cable_club.s b/asm/cable_club.s index 156fac66c..6e29bde58 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -1855,13 +1855,13 @@ _080B3354: cmp r0, 0 beq _080B3370 ldr r0, =0x000001dd - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM b _080B3378 .pool _080B3370: movs r0, 0xEE lsls r0, 1 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM _080B3378: ldr r0, =gSpecialVar_0x8004 ldrh r0, [r0] @@ -2025,13 +2025,13 @@ _080B34DE: cmp r0, 0 beq _080B34FC ldr r0, =0x000001dd - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM b _080B3504 .pool _080B34FC: movs r0, 0xEE lsls r0, 1 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM _080B3504: ldr r1, =gLinkPlayers ldr r0, =0x00002211 diff --git a/asm/link.s b/asm/link.s index 1fd881b99..42f58b67f 100644 --- a/asm/link.s +++ b/asm/link.s @@ -21076,7 +21076,7 @@ sub_8014210: @ 8014210 str r0, [r1, 0x8] ldr r0, =gBattleTypeFlags str r6, [r0] - bl sub_806E64C + bl PlayBattleBGM pop {r4-r6} pop {r0} bx r0 diff --git a/asm/pokeblock_feed.s b/asm/pokeblock_feed.s index 8e05da5e3..a38379935 100644 --- a/asm/pokeblock_feed.s +++ b/asm/pokeblock_feed.s @@ -889,7 +889,7 @@ sub_817A358: @ 817A358 movs r1, 0x1 strb r1, [r0] adds r0, r4, 0 - bl sub_806E840 + bl IsPokeSpriteNotFlipped lsls r0, 24 cmp r0, 0 bne _0817A402 diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s index bb1edc48d..c3c7aeab8 100644 --- a/asm/pokemon_3.s +++ b/asm/pokemon_3.s @@ -5,1006 +5,6 @@ .text - - - thumb_func_start song_id_for_battle -song_id_for_battle: @ 806E42C - push {lr} - ldr r0, =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - beq _0806E448 - movs r0, 0xF0 - lsls r0, 1 - b _0806E646 - .pool -_0806E448: - movs r0, 0x80 - lsls r0, 7 - ands r0, r1 - cmp r0, 0 - beq _0806E45C - ldr r0, =0x000001df - b _0806E646 - .pool -_0806E45C: - ldr r0, =0x02000002 - ands r0, r1 - cmp r0, 0 - beq _0806E466 - b _0806E63C -_0806E466: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _0806E470 - b _0806E642 -_0806E470: - ldr r0, =0x003f0100 - ands r0, r1 - cmp r0, 0 - beq _0806E494 - ldr r0, =gTrainerBattleOpponent_A - ldrh r0, [r0] - bl sub_8162BD8 - lsls r0, 24 - lsrs r0, 24 - b _0806E4B2 - .pool -_0806E494: - movs r0, 0x80 - lsls r0, 19 - ands r1, r0 - cmp r1, 0 - beq _0806E4A2 - movs r0, 0xA - b _0806E4B2 -_0806E4A2: - ldr r2, =gTrainers - ldr r0, =gTrainerBattleOpponent_A - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x1] -_0806E4B2: - subs r0, 0x3 - cmp r0, 0x3D - bls _0806E4BA - b _0806E63C -_0806E4BA: - lsls r0, 2 - ldr r1, =_0806E4D0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_0806E4D0: - .4byte _0806E5D0 - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E5D0 - .4byte _0806E63C - .4byte _0806E5D0 - .4byte _0806E63C - .4byte _0806E5C8 - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E62C - .4byte _0806E5D8 - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E5E0 - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E5D0 - .4byte _0806E5E6 - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E5C8 - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E63C - .4byte _0806E632 - .4byte _0806E632 - .4byte _0806E632 - .4byte _0806E632 - .4byte _0806E632 - .4byte _0806E632 - .4byte _0806E632 -_0806E5C8: - ldr r0, =0x000001e3 - b _0806E646 - .pool -_0806E5D0: - ldr r0, =0x000001db - b _0806E646 - .pool -_0806E5D8: - ldr r0, =0x000001dd - b _0806E646 - .pool -_0806E5E0: - movs r0, 0xEF - lsls r0, 1 - b _0806E646 -_0806E5E6: - ldr r0, =gBattleTypeFlags - ldr r0, [r0] - ldr r1, =0x003f0100 - ands r0, r1 - cmp r0, 0 - beq _0806E604 -_0806E5F2: - ldr r0, =0x000001e1 - b _0806E646 - .pool -_0806E604: - ldr r0, =gTrainerBattleOpponent_A - ldrh r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, =gTrainers + 0x4 @ name offset - adds r0, r1 - ldr r1, =gUnknown_085CCB98 - bl StringCompare - cmp r0, 0 - beq _0806E63C - b _0806E5F2 - .pool -_0806E62C: - movs r0, 0xF1 - lsls r0, 1 - b _0806E646 -_0806E632: - ldr r0, =0x000001d7 - b _0806E646 - .pool -_0806E63C: - movs r0, 0xEE - lsls r0, 1 - b _0806E646 -_0806E642: - movs r0, 0xED - lsls r0, 1 -_0806E646: - pop {r1} - bx r1 - thumb_func_end song_id_for_battle - - thumb_func_start sub_806E64C -sub_806E64C: @ 806E64C - push {lr} - bl ResetMapMusic - bl m4aMPlayAllStop - bl song_id_for_battle - lsls r0, 16 - lsrs r0, 16 - bl PlayBGM - pop {r0} - bx r0 - thumb_func_end sub_806E64C - - thumb_func_start PlayNewMapMusic__default_for_battle -PlayNewMapMusic__default_for_battle: @ 806E668 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - bl ResetMapMusic - bl m4aMPlayAllStop - cmp r4, 0 - beq _0806E682 - adds r0, r4, 0 - bl PlayNewMapMusic - b _0806E68E -_0806E682: - bl song_id_for_battle - lsls r0, 16 - lsrs r0, 16 - bl PlayNewMapMusic -_0806E68E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayNewMapMusic__default_for_battle - - thumb_func_start sub_806E694 -sub_806E694: @ 806E694 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl ResetMapMusic - bl m4aMPlayAllStop - ldr r0, =sub_806E6CC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0x8] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_806E694 - - thumb_func_start sub_806E6CC -sub_806E6CC: @ 806E6CC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _0806E6F0 - ldrh r0, [r1, 0x8] - bl PlayNewMapMusic - b _0806E6FC - .pool -_0806E6F0: - bl song_id_for_battle - lsls r0, 16 - lsrs r0, 16 - bl PlayNewMapMusic -_0806E6FC: - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_806E6CC - - thumb_func_start pokemon_get_pal -pokemon_get_pal: @ 806E708 - 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 species_and_otid_get_pal - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end pokemon_get_pal - - thumb_func_start species_and_otid_get_pal -species_and_otid_get_pal: @ 806E740 - 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 _0806E75C - ldr r0, =gMonPaletteTable - ldr r0, [r0] - b _0806E788 - .pool -_0806E75C: - lsrs r0, r1, 16 - ldr r2, =0x0000ffff - ands r1, r2 - eors r0, r1 - lsrs r1, r3, 16 - eors r0, r1 - ands r3, r2 - eors r0, r3 - cmp r0, 0x7 - bls _0806E780 - ldr r0, =gMonPaletteTable - lsls r1, r4, 3 - b _0806E784 - .pool -_0806E780: - ldr r0, =gMonShinyPaletteTable - lsls r1, r5, 3 -_0806E784: - adds r1, r0 - ldr r0, [r1] -_0806E788: - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end species_and_otid_get_pal - - thumb_func_start sub_806E794 -sub_806E794: @ 806E794 - 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 sub_806E7CC - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_806E794 - - thumb_func_start sub_806E7CC -sub_806E7CC: @ 806E7CC - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsrs r0, r1, 16 - ldr r3, =0x0000ffff - ands r1, r3 - eors r0, r1 - lsrs r1, r2, 16 - eors r0, r1 - ands r2, r3 - eors r0, r2 - cmp r0, 0x7 - bls _0806E7F4 - lsls r0, r4, 3 - ldr r1, =gMonPaletteTable - b _0806E7F8 - .pool -_0806E7F4: - lsls r0, r4, 3 - ldr r1, =gMonShinyPaletteTable -_0806E7F8: - adds r0, r1 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_806E7CC - - thumb_func_start IsHMMove2 -IsHMMove2: @ 806E804 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - ldr r2, =gHMMoves - ldrh r0, [r2] - ldr r1, =0x0000ffff - cmp r0, r1 - beq _0806E836 - adds r4, r1, 0 - adds r1, r2, 0 -_0806E818: - ldrh r0, [r2] - adds r1, 0x2 - adds r2, 0x2 - cmp r0, r3 - bne _0806E830 - movs r0, 0x1 - b _0806E838 - .pool -_0806E830: - ldrh r0, [r1] - cmp r0, r4 - bne _0806E818 -_0806E836: - movs r0, 0 -_0806E838: - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsHMMove2 - - thumb_func_start sub_806E840 -sub_806E840: @ 806E840 - lsls r0, 16 - lsrs r0, 16 - ldr r2, =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x19] - lsrs r0, 7 - bx lr - .pool - thumb_func_end sub_806E840 - - thumb_func_start GetMonFlavourRelation -GetMonFlavourRelation: @ 806E858 - push {r4,lr} - lsls r4, r1, 24 - lsrs r4, 24 - bl GetNature - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gPokeblockFlavorCompatibilityTable - 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 - .pool - thumb_func_end GetMonFlavourRelation - - thumb_func_start GetFlavourRelationByPersonality -GetFlavourRelationByPersonality: @ 806E880 - push {r4,lr} - lsls r4, r1, 24 - lsrs r4, 24 - bl GetNatureFromPersonality - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gPokeblockFlavorCompatibilityTable - 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 - .pool - thumb_func_end GetFlavourRelationByPersonality - - thumb_func_start IsTradedMon -IsTradedMon: @ 806E8A8 - 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: @ 806E8D4 - push {r4,r5,lr} - adds r5, r1, 0 - ldr r1, =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 _0806E91C - movs r4, 0 - ldrb r0, [r5] - cmp r0, 0xFF - beq _0806E912 - adds r2, r5, 0 -_0806E8FE: - adds r1, r3, r4 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _0806E91C - adds r2, 0x1 - adds r4, 0x1 - ldrb r0, [r2] - cmp r0, 0xFF - bne _0806E8FE -_0806E912: - movs r0, 0 - b _0806E91E - .pool -_0806E91C: - movs r0, 0x1 -_0806E91E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end IsOtherTrainer - - thumb_func_start MonRestorePP -MonRestorePP: @ 806E924 - push {lr} - bl BoxMonRestorePP - pop {r0} - bx r0 - thumb_func_end MonRestorePP - - thumb_func_start BoxMonRestorePP -BoxMonRestorePP: @ 806E930 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r6, 0 -_0806E938: - adds r4, r6, 0 - adds r4, 0xD - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl GetBoxMonData - cmp r0, 0 - beq _0806E984 - 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 -_0806E984: - adds r6, 0x1 - cmp r6, 0x3 - ble _0806E938 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end BoxMonRestorePP - - thumb_func_start sub_806E994 -sub_806E994: @ 806E994 - push {r4,r5,lr} - ldr r2, =gLastUsedAbility - ldr r5, =gBattleStruct - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0xB0 - ldrb r0, [r0] - strb r0, [r2] - ldr r4, =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 GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0806E9E8 - ldr r1, =gBattlePartyID - ldr r0, [r5] - adds r0, 0x49 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - bl pokemon_order_func - b _0806E9F6 - .pool -_0806E9E8: - ldr r1, =gBattlePartyID - ldr r0, [r5] - adds r0, 0x49 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] -_0806E9F6: - strb r0, [r4, 0x3] - ldr r4, =gBattleTextBuff2 - movs r0, 0xFD - strb r0, [r4] - movs r0, 0x4 - strb r0, [r4, 0x1] - ldr r1, =gBankInMenu - ldrb r0, [r1] - strb r0, [r4, 0x2] - ldr r2, =gBattlePartyID - 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, =gUnknown_085CB2A1 - ldr r1, =gStringVar4 - bl StrCpyDecodeBattle - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_806E994 - - thumb_func_start GetWildMonTableIdInAlteringCave -GetWildMonTableIdInAlteringCave: @ 806EA40 - push {lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r1, 0 - ldr r2, =gUnknown_08329EFC -_0806EA4A: - ldrh r0, [r2] - cmp r0, r3 - bne _0806EA58 - adds r0, r1, 0 - b _0806EA62 - .pool -_0806EA58: - adds r2, 0x4 - adds r1, 0x1 - cmp r1, 0x8 - ble _0806EA4A - movs r0, 0 -_0806EA62: - pop {r1} - bx r1 - thumb_func_end GetWildMonTableIdInAlteringCave - - thumb_func_start SetWildMonHeldItem -SetWildMonHeldItem: @ 806EA68 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, =gBattleTypeFlags - ldr r0, [r0] - ldr r1, =0x00302008 - ands r0, r1 - cmp r0, 0 - beq _0806EA7C - b _0806EB90 -_0806EA7C: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, =gEnemyParty - movs r1, 0xB - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0x2D - mov r8, r0 - movs r7, 0x5F - ldr r5, =gPlayerParty - adds r0, r5, 0 - movs r1, 0x6 - movs r2, 0 - bl GetMonData - cmp r0, 0 - bne _0806EAC6 - adds r0, r5, 0 - bl GetMonAbility - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xE - bne _0806EAC6 - movs r2, 0x14 - mov r8, r2 - movs r7, 0x50 -_0806EAC6: - ldr r0, =gMapHeader - ldrh r1, [r0, 0x12] - movs r0, 0xD2 - lsls r0, 1 - cmp r1, r0 - bne _0806EB2C - adds r0, r4, 0 - bl GetWildMonTableIdInAlteringCave - adds r2, r0, 0 - cmp r2, 0 - beq _0806EB04 - cmp r6, r7 - bcc _0806EB90 - ldr r0, =gEnemyParty - lsls r2, 2 - ldr r1, =gAlteringCaveWildMonHeldItems - b _0806EB6C - .pool -_0806EB04: - cmp r6, r8 - bcc _0806EB90 - cmp r6, r7 - bcs _0806EB18 - ldr r0, =gEnemyParty - lsls r2, r4, 3 - b _0806EB66 - .pool -_0806EB18: - ldr r0, =gEnemyParty - lsls r2, r4, 3 - subs r2, r4 - lsls r2, 2 - ldr r1, =gBaseStats + 0xe @ item 2 offset - b _0806EB6C - .pool -_0806EB2C: - ldr r0, =gBaseStats - mov r12, r0 - lsls r0, r4, 3 - subs r1, r0, r4 - lsls r5, r1, 2 - mov r2, r12 - adds r1, r5, r2 - ldrh r3, [r1, 0xC] - adds r2, r0, 0 - ldrh r1, [r1, 0xE] - cmp r3, r1 - bne _0806EB5C - cmp r3, 0 - beq _0806EB5C - ldr r0, =gEnemyParty - mov r2, r12 - adds r2, 0xC - adds r2, r5, r2 - b _0806EB6E - .pool -_0806EB5C: - cmp r6, r8 - bcc _0806EB90 - cmp r6, r7 - bcs _0806EB80 - ldr r0, =gEnemyParty -_0806EB66: - subs r2, r4 - lsls r2, 2 - ldr r1, =gBaseStats + 0xc @ item 1 offset -_0806EB6C: - adds r2, r1 -_0806EB6E: - movs r1, 0xC - bl SetMonData - b _0806EB90 - .pool -_0806EB80: - ldr r0, =gEnemyParty - subs r2, r4 - lsls r2, 2 - ldr r1, =gBaseStats + 0xe @ item 2 offset - adds r2, r1 - movs r1, 0xC - bl SetMonData -_0806EB90: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end SetWildMonHeldItem - - thumb_func_start IsMonShiny -IsMonShiny: @ 806EBA4 - 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: @ 806EBD0 - push {r4,lr} - movs r4, 0 - lsrs r2, r0, 16 - ldr r3, =0x0000ffff - ands r0, r3 - eors r2, r0 - lsrs r0, r1, 16 - eors r2, r0 - ands r1, r3 - eors r2, r1 - cmp r2, 0x7 - bhi _0806EBEA - movs r4, 0x1 -_0806EBEA: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end IsShinyOtIdPersonality - - thumb_func_start sub_806EBF8 -sub_806EBF8: @ 806EBF8 - push {r4,lr} - ldr r0, =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 15 - ands r0, r1 - cmp r0, 0 - beq _0806EC3C - ldr r2, =gUnknown_02038BCE - ldrh r1, [r2] - ldr r0, =0x00000c03 - cmp r1, r0 - bne _0806EC28 - ldr r0, =gTrainers + TRAINER_STEVEN * 0x28 + 0x4 @ Steven's name - b _0806EC64 - .pool -_0806EC28: - ldr r4, =gStringVar1 - ldrh r1, [r2] - adds r0, r4, 0 - bl sub_8162E20 - adds r0, r4, 0 - b _0806EC64 - .pool -_0806EC3C: - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - ldr r4, =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 sub_806D864 - adds r1, r0, 0 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r4, 0x8 - adds r0, r4 -_0806EC64: - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_806EBF8 - - thumb_func_start sub_806EC70 -sub_806EC70: @ 806EC70 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - ldrh r0, [r2, 0xE] - subs r0, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _0806ECA0 - ldrh r0, [r2, 0x8] - ldrh r1, [r2, 0xA] - lsls r1, 16 - orrs r0, r1 - ldrb r1, [r2, 0xC] - bl sub_817F544 - adds r0, r4, 0 - bl DestroyTask -_0806ECA0: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_806EC70 - thumb_func_start sub_806ECAC sub_806ECAC: @ 806ECAC push {r4,lr} diff --git a/asm/recorded_battle.s b/asm/recorded_battle.s index 5a4a811e6..53824dfea 100644 --- a/asm/recorded_battle.s +++ b/asm/recorded_battle.s @@ -883,7 +883,7 @@ _081854E2: ldr r2, =0x000004f6 adds r0, r7, r2 strh r1, [r0] - ldr r3, =gUnknown_02038BCE + ldr r3, =gPartnerTrainerId ldrh r1, [r3] movs r4, 0x9F lsls r4, 3 @@ -1196,7 +1196,7 @@ _081857B6: b _08185856 .pool _081857E4: - ldr r3, =gUnknown_02038BCE + ldr r3, =gPartnerTrainerId ldrh r3, [r3] adds r0, r1, r3 lsls r0, 16 @@ -1207,7 +1207,7 @@ _081857E4: ldr r4, =0x00000504 adds r3, r7, r4 mov r10, r9 - ldr r5, =gUnknown_02038BCE + ldr r5, =gPartnerTrainerId mov r12, r5 ldr r0, =0xfffffed4 mov r8, r0 @@ -1231,7 +1231,7 @@ _08185804: ble _08185804 mov r0, r9 ldr r1, [r0] - ldr r2, =gUnknown_02038BCE + ldr r2, =gPartnerTrainerId ldrh r0, [r2] ldr r3, =0xfffffed4 adds r0, r3 @@ -1246,7 +1246,7 @@ _08185804: strb r1, [r0] mov r0, r9 ldr r1, [r0] - ldr r4, =gUnknown_02038BCE + ldr r4, =gPartnerTrainerId ldrh r0, [r4] adds r0, r3 muls r0, r2 @@ -1374,7 +1374,7 @@ _08185936: b _081859AC .pool _0818597C: - ldr r3, =gUnknown_02038BCE + ldr r3, =gPartnerTrainerId ldrh r0, [r3] cmp r0, r1 bls _081859C0 @@ -1395,7 +1395,7 @@ _0818597C: adds r1, r7, r5 strb r0, [r1] ldr r2, [r4] - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId ldrh r1, [r0] adds r1, r3 _081859AC: @@ -1546,7 +1546,7 @@ sub_8185AB0: @ 8185AB0 strh r1, [r0] ldr r0, =gTrainerBattleOpponent_B strh r1, [r0] - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId strh r1, [r0] bl sub_8185EFC ldr r0, =gUnknown_0203C7B0 @@ -1725,7 +1725,7 @@ _08185C2A: adds r0, r7, r3 ldrh r0, [r0] strh r0, [r1] - ldr r1, =gUnknown_02038BCE + ldr r1, =gPartnerTrainerId adds r2, 0x4 adds r0, r7, r2 ldrh r0, [r0] @@ -1905,7 +1905,7 @@ sub_8185E24: @ 8185E24 ldr r0, =gUnknown_0203C7B0 str r5, [r0] movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM ldr r0, =sub_8185E8C bl SetMainCallback2 _08185E6E: diff --git a/asm/rom_8034C54.s b/asm/rom_8034C54.s index 2690b0f98..8b0c99138 100644 --- a/asm/rom_8034C54.s +++ b/asm/rom_8034C54.s @@ -2524,7 +2524,7 @@ _08036208: ands r1, r0 cmp r1, 0 beq _08036224 - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId ldrh r1, [r0] ldr r0, =0x00000c03 cmp r1, r0 diff --git a/asm/rom_8161F74.s b/asm/rom_8161F74.s index 339476c45..51eed4e4c 100644 --- a/asm/rom_8161F74.s +++ b/asm/rom_8161F74.s @@ -1456,8 +1456,8 @@ _08162BCA: .pool thumb_func_end sub_8162AA0 - thumb_func_start sub_8162BD8 -sub_8162BD8: @ 8162BD8 + thumb_func_start GetFrontierOpponentClass +GetFrontierOpponentClass: @ 8162BD8 push {r4,r5,lr} lsls r0, 16 lsrs r4, r0, 16 @@ -1594,7 +1594,7 @@ _08162D1E: pop {r1} bx r1 .pool - thumb_func_end sub_8162BD8 + thumb_func_end GetFrontierOpponentClass thumb_func_start sub_8162D34 sub_8162D34: @ 8162D34 @@ -1697,8 +1697,8 @@ _08162E0C: .pool thumb_func_end sub_8162D34 - thumb_func_start sub_8162E20 -sub_8162E20: @ 8162E20 + thumb_func_start GetFrontierTrainerName +GetFrontierTrainerName: @ 8162E20 push {r4-r6,lr} adds r6, r0, 0 lsls r1, 16 @@ -1846,7 +1846,7 @@ _08162F62: pop {r4-r6} pop {r0} bx r0 - thumb_func_end sub_8162E20 + thumb_func_end GetFrontierTrainerName thumb_func_start sub_8162F68 sub_8162F68: @ 8162F68 @@ -3275,7 +3275,7 @@ _08163B56: _08163B64: movs r0, 0x2 bl sub_816306C - ldr r1, =gUnknown_02038BCE + ldr r1, =gPartnerTrainerId ldr r0, =gSaveBlock2Ptr ldr r0, [r0] ldr r2, =0x00000cd6 @@ -3302,7 +3302,7 @@ _08163BA6: movs r1, 0x1 bl CreateTask movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM movs r0, 0 b _08163E10 .pool @@ -3334,7 +3334,7 @@ _08163BC4: movs r1, 0x1 bl CreateTask movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM movs r0, 0xC b _08163E10 .pool @@ -3369,7 +3369,7 @@ _08163C18: movs r1, 0x1 bl CreateTask movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM movs r0, 0xD b _08163E10 .pool @@ -3438,7 +3438,7 @@ _08163D12: movs r1, 0x1 bl CreateTask movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM movs r0, 0x4 b _08163E10 .pool @@ -3467,7 +3467,7 @@ _08163D5E: movs r1, 0x1 bl CreateTask movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM movs r0, 0x5 b _08163E10 .pool @@ -3490,7 +3490,7 @@ _08163D8E: movs r1, 0x1 bl CreateTask movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM movs r0, 0x6 b _08163E10 .pool @@ -3513,7 +3513,7 @@ _08163DC8: movs r1, 0x1 bl CreateTask movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM movs r0, 0xA b _08163E10 .pool @@ -3528,7 +3528,7 @@ _08163E00: movs r1, 0x1 bl CreateTask movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM movs r0, 0x7 _08163E10: bl sub_80B100C @@ -3553,13 +3553,13 @@ _08163E2C: strb r0, [r4] ldr r0, =gUnknown_08224167 bl TrainerBattleConfigure - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId strh r5, [r0] ldr r0, =sub_8163A8C movs r1, 0x1 bl CreateTask movs r0, 0 - bl PlayNewMapMusic__default_for_battle + bl PlayMapChosenOrBattleBGM movs r0, 0x12 bl sub_8145EF4 _08163E68: @@ -4782,7 +4782,7 @@ _081648D6: _081648E2: ldr r0, =gStringVar1 adds r1, r7, 0 - bl sub_8162E20 + bl GetFrontierTrainerName b _08164AC2 .pool _081648F4: @@ -4841,7 +4841,7 @@ _08164910: ldr r0, =gStringVar3 mov r3, r10 lsrs r1, r3, 16 - bl sub_8162E20 + bl GetFrontierTrainerName b _08164AC2 .pool _08164984: @@ -4867,7 +4867,7 @@ _081649A8: b _08164AC2 .pool _081649BC: - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId strh r7, [r0] ldr r0, =0x0000012b cmp r7, r0 @@ -4944,7 +4944,7 @@ _08164A60: bl sub_8162548 lsls r0, 16 lsrs r3, r0, 16 - ldr r0, =gUnknown_02038BCE + ldr r0, =gPartnerTrainerId ldrh r0, [r0] cmp r0, r3 beq _08164A60 @@ -5340,7 +5340,7 @@ sub_8164E04: @ 8164E04 ldr r5, =gTrainerBattleOpponent_A ldrh r1, [r5] mov r0, sp - bl sub_8162E20 + bl GetFrontierTrainerName mov r0, sp bl StripExtCtrlCodes ldr r4, =gSaveBlock2Ptr diff --git a/asm/rom_818E9AC.s b/asm/rom_818E9AC.s index 730bb2fee..147258e31 100644 --- a/asm/rom_818E9AC.s +++ b/asm/rom_818E9AC.s @@ -7186,7 +7186,7 @@ _08192784: .pool _08192798: ldr r0, [sp, 0x24] - bl sub_8162BD8 + bl GetFrontierOpponentClass _0819279E: lsls r0, 24 lsrs r5, r0, 24 @@ -41472,14 +41472,14 @@ _081A4450: ldr r0, =gStringVar1 ldr r1, =gTrainerBattleOpponent_A ldrh r1, [r1] - bl sub_8162E20 + bl GetFrontierTrainerName b _081A446E .pool _081A4464: ldr r0, =gStringVar2 ldr r1, =gTrainerBattleOpponent_A ldrh r1, [r1] - bl sub_8162E20 + bl GetFrontierTrainerName _081A446E: pop {r0} bx r0 @@ -44244,7 +44244,7 @@ sub_81A5BE0: @ 81A5BE0 ldr r0, =gStringVar1 ldr r1, =gTrainerBattleOpponent_A ldrh r1, [r1] - bl sub_8162E20 + bl GetFrontierTrainerName pop {r0} bx r0 .pool @@ -80272,7 +80272,7 @@ sub_81B8A7C: @ 81B8A7C bne _081B8AC4 _081B8AA2: ldr r4, =gStringVar1 - bl sub_806EBF8 + bl GetTrainerPartnerName adds r1, r0, 0 adds r0, r4, 0 bl StringCopy @@ -82460,7 +82460,7 @@ sub_81B9CF0: @ 81B9CF0 ldr r0, =gStringVar1 ldr r1, =gTrainerBattleOpponent_A ldrh r1, [r1] - bl sub_8162E20 + bl GetFrontierTrainerName pop {r0} bx r0 .pool diff --git a/asm/rom_81BE66C.s b/asm/rom_81BE66C.s index 8981c1b11..d0143fabb 100644 --- a/asm/rom_81BE66C.s +++ b/asm/rom_81BE66C.s @@ -11162,7 +11162,7 @@ sub_81C47B4: @ 81C47B4 ands r0, r1 strb r0, [r7, 0x5] ldrh r0, [r6, 0x2] - bl sub_806E840 + bl IsPokeSpriteNotFlipped lsls r0, 24 cmp r0, 0 bne _081C4828 @@ -11210,7 +11210,7 @@ sub_81C4844: @ 81C4844 cmp r0, 0x1 beq _081C487E ldrh r0, [r4, 0x2E] - bl sub_806E840 + bl IsPokeSpriteNotFlipped lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x30] diff --git a/asm/trade.s b/asm/trade.s index 624f4e1e9..8b8a496b2 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -9588,7 +9588,7 @@ _0807C66C: ldr r0, [r5] adds r0, 0xF0 ldrh r0, [r0] - bl sub_806E840 + bl IsPokeSpriteNotFlipped lsls r0, 24 cmp r0, 0 bne _0807C6E4 @@ -11662,7 +11662,7 @@ _0807DA74: ldr r0, [r5] adds r0, 0xF0 ldrh r0, [r0] - bl sub_806E840 + bl IsPokeSpriteNotFlipped lsls r0, 24 cmp r0, 0 bne _0807DAEC diff --git a/data/battle_message.s b/data/battle_message.s index 75bd65d23..d1bd0c8ef 100644 --- a/data/battle_message.s +++ b/data/battle_message.s @@ -249,7 +249,7 @@ gUnknown_085CA459:: @ 85CA459 .string "{STRING 19} transformed!$" .string "{STRING 16}’s {STRING 25}\ntook the attack!$" -gUnknown_085CB2A1:: @ 85CB2A1 +BattleText_PreventedSwitch:: @ 85CB2A1 .string "{STRING 0}’s {STRING 23}\nprevents switching!\p$" .string "{STRING 16}’s {STRING 25}\nprevented {STRING 19}’s\l{STRING 0} from working!$" @@ -682,7 +682,7 @@ gUnknown_085CCB8C:: @ 85CCB8C gUnknown_085CCB90:: @ 85CCB90 .incbin "baserom.gba", 0x5ccb90, 0x8 -gUnknown_085CCB98:: @ 85CCB98 +BattleText_Wally:: @ 85CCB98 .incbin "baserom.gba", 0x5ccb98, 0x6 gUnknown_085CCB9E:: @ 85CCB9E diff --git a/data/data2c.s b/data/data2c.s index 94d9c30e8..92e26785d 100644 --- a/data/data2c.s +++ b/data/data2c.s @@ -101,11 +101,8 @@ gUnknown_08329ECE:: @ 8329ECE gHMMoves:: @ 8329EEA .incbin "baserom.gba", 0x329eea, 0x12 -gUnknown_08329EFC:: @ 8329EFC - .incbin "baserom.gba", 0x329efc, 0x2 - -gAlteringCaveWildMonHeldItems:: @ 8329EFE - .incbin "baserom.gba", 0x329efe, 0x2a +gAlteringCaveWildMonHeldItems:: @ 8329EFC + .incbin "baserom.gba", 0x329efc, 0x2c gUnknown_08329F28:: @ 8329F28 .incbin "baserom.gba", 0x329f28, 0x18 diff --git a/include/battle.h b/include/battle.h index 81d3e2c82..61270bed0 100644 --- a/include/battle.h +++ b/include/battle.h @@ -32,6 +32,8 @@ #define BATTLE_TYPE_KYORGE 0x20000000 #define BATTLE_TYPE_RAYQUAZA 0x40000000 +#define STEVEN_PARTNER_ID 0xC03 + #define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_x100000 | BATTLE_TYPE_PYRAMID) #define BATTLE_WON 0x1 @@ -337,7 +339,105 @@ struct BattleStruct u8 wildVictorySong; u8 dynamicMoveType; u8 wrappedBy[4]; - u8 field_18[0x63]; // TODO: expand + u8 field_18; + u8 field_19; + u8 field_1A; + u8 field_1B; + u8 field_1C; + u8 field_1D; + u8 field_1E; + u8 field_1F; + u8 field_20; + u8 field_21; + u8 field_22; + u8 field_23; + u8 field_24; + u8 field_25; + u8 field_26; + u8 field_27; + u8 field_28; + u8 field_29; + u8 field_2A; + u8 field_2B; + u8 field_2C; + u8 field_2D; + u8 field_2E; + u8 field_2F; + u8 field_30; + u8 field_31; + u8 field_32; + u8 field_33; + u8 field_34; + u8 field_35; + u8 field_36; + u8 field_37; + u8 field_38; + u8 field_39; + u8 field_3A; + u8 field_3B; + u8 field_3C; + u8 field_3D; + u8 field_3E; + u8 field_3F; + u8 field_40; + u8 field_41; + u8 field_42; + u8 field_43; + u8 field_44; + u8 field_45; + u8 field_46; + u8 field_47; + u8 field_48; + u8 field_49; + u8 field_4A; + u8 field_4B; + u8 field_4C; + u8 field_4D; + u8 field_4E; + u8 field_4F; + u8 field_50; + u8 field_51; + u8 field_52; + u8 field_53; + u8 field_54; + u8 field_55; + u8 field_56; + u8 field_57; + u8 field_58; + u8 field_59; + u8 field_5A; + u8 field_5B; + u8 field_5C; + u8 field_5D; + u8 field_5E; + u8 field_5F; + u8 field_60; + u8 field_61; + u8 field_62; + u8 field_63; + u8 field_64; + u8 field_65; + u8 field_66; + u8 field_67; + u8 field_68; + u8 field_69; + u8 field_6A; + u8 field_6B; + u8 field_6C; + u8 field_6D; + u8 field_6E; + u8 field_6F; + u8 field_70; + u8 field_71; + u8 field_72; + u8 field_73; + u8 field_74; + u8 field_75; + u8 field_76; + u8 field_77; + u8 field_78; + u8 field_79; + u8 field_7A; u8 field_7B; u8 field_7C; u8 field_7D; diff --git a/include/m4a.h b/include/m4a.h index 949403885..b6c8f9072 100644 --- a/include/m4a.h +++ b/include/m4a.h @@ -9,6 +9,7 @@ void m4aSoundInit(void); void m4aSoundMain(void); void m4aSongNumStart(u16); void m4aSongNumStop(u16 n); +void m4aMPlayAllStop(void); void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo); void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed); void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed); diff --git a/include/pokemon.h b/include/pokemon.h index cfee4261c..12b58ba9f 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -562,6 +562,7 @@ u8 GetNatureFromPersonality(u32 personality); u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex); void MonRestorePP(struct Pokemon *); +void BoxMonRestorePP(struct BoxPokemon *); u16 NationalPokedexNumToSpecies(u16 nationalNum); u16 NationalToHoennOrder(u16); @@ -583,4 +584,11 @@ bool8 IsOtherTrainer(u32, u8 *); void SetWildMonHeldItem(void); u16 GetMonEVCount(struct Pokemon *); +const struct CompressedSpritePalette *sub_806E794(struct Pokemon *mon); +const struct CompressedSpritePalette *sub_806E7CC(u16 species, u32 otId , u32 personality); +bool32 IsHMMove2(u16 move); +bool8 IsPokeSpriteNotFlipped(u16 species); +bool8 IsMonShiny(struct Pokemon *mon); +bool8 IsShinyOtIdPersonality(u32 otId, u32 personality); + #endif // GUARD_POKEMON_H diff --git a/include/trainer_class.h b/include/trainer_classes.h index 14fc69a24..3f13dfc37 100644 --- a/include/trainer_class.h +++ b/include/trainer_classes.h @@ -1,5 +1,5 @@ -#ifndef GUARD_TRAINER_CLASS_H -#define GUARD_TRAINER_CLASS_H +#ifndef GUARD_TRAINER_CLASSES_H +#define GUARD_TRAINER_CLASSES_H enum { @@ -50,4 +50,4 @@ enum CLASS_PKMN_TRAINER2, // 0x41 }; -#endif // GUARD_TRAINER_CLASS_H +#endif // GUARD_TRAINER_CLASSES_H diff --git a/include/trainer_ids.h b/include/trainer_ids.h new file mode 100644 index 000000000..1dd3ba3ac --- /dev/null +++ b/include/trainer_ids.h @@ -0,0 +1,6 @@ +#ifndef GUARD_TRAINER_IDS_H +#define GUARD_TRAINER_IDS_H + +#define TRAINER_ID_STEVEN 804 + +#endif // GUARD_TRAINER_IDS_H diff --git a/src/decompress.c b/src/decompress.c index befdbaba2..2863ff1f5 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -3,14 +3,13 @@ #include "species.h" #include "text.h" #include "malloc.h" +#include "pokemon.h" EWRAM_DATA ALIGNED(4) u8 gDecompressionBuffer[0x4000] = {0}; extern const struct CompressedSpriteSheet gMonFrontPicTable[]; extern const struct CompressedSpriteSheet gMonBackPicTable[]; -extern void DrawSpindaSpots(u16 species, u32 personality, void* dest, bool8 isFrontPic); - static void DuplicateDeoxysTiles(void *pointer, s32 species); void LZDecompressWram(const void *src, void *dest) diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 78dca4967..2ec6d08d0 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -11,7 +11,15 @@ #include "link.h" #include "hold_effects.h" #include "rng.h" -#include "trainer_class.h" +#include "trainer_classes.h" +#include "trainer_ids.h" +#include "songs.h" +#include "sound.h" +#include "m4a.h" +#include "task.h" +#include "sprite.h" +#include "text.h" +#include "abilities.h" extern struct BattlePokemon gBattleMons[4]; extern struct BattleEnigmaBerry gEnigmaBerries[4]; @@ -23,6 +31,9 @@ extern u8 gStringBank; extern u16 gTrainerBattleOpponent_A; extern u32 gBattleTypeFlags; extern u8 gBattleMonForms[4]; +extern u16 gBattlePartyID[4]; +extern u8 gLastUsedAbility; +extern u16 gPartnerTrainerId; extern const u16 gSpeciesToHoennPokedexNum[]; extern const u16 gSpeciesToNationalPokedexNum[]; @@ -40,6 +51,12 @@ extern const s8 gNatureStatTable[][5]; extern const s8 gUnknown_08329ECE[][3]; extern const u32 gBitTable[]; extern const u32 gTMHMLearnsets[][2]; +extern const u8 BattleText_Wally[]; +extern const u8 BattleText_PreventedSwitch[]; +extern const struct CompressedSpritePalette gMonPaletteTable[]; +extern const struct CompressedSpritePalette gMonShinyPaletteTable[]; +extern const u16 gHMMoves[]; +extern const s8 gPokeblockFlavorCompatibilityTable[]; extern bool8 InBattlePyramid(void); extern bool8 sub_81D5C18(void); @@ -48,6 +65,9 @@ extern bool32 IsNationalPokedexEnabled(void); extern u8 GetTrainerEncounterMusicIdInBattlePyramind(u16 trainerOpponentId); extern u8 sub_81D63C8(u16 trainerOpponentId); extern u8 sav1_map_get_name(void); +extern u8 GetFrontierOpponentClass(u16 trainerId); +extern u8 pokemon_order_func(u8 bankPartyId); +extern void GetFrontierTrainerName(u8* dest, u16 trainerId); bool8 HealStatusConditions(struct Pokemon *mon, u32 battlePartyId, u32 healMask, u8 battleBank) { @@ -1111,3 +1131,355 @@ void ClearBattleMonForms(void) for (i = 0; i < 4; i++) gBattleMonForms[i] = 0; } + +u16 GetBattleBGM(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) + return 0x1E0; + if (gBattleTypeFlags & BATTLE_TYPE_REGI) + return 0x1DF; + if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) + return 0x1DC; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + u8 trainerClass; + if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + trainerClass = GetFrontierOpponentClass(gTrainerBattleOpponent_A); + else if (gBattleTypeFlags & BATTLE_TYPE_x4000000) + trainerClass = CLASS_EXPERT; + else + trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass; + switch (trainerClass) + { + case CLASS_AQUA_LEADER: + case CLASS_MAGMA_LEADER: + return 0x1E3; + case CLASS_TEAM_AQUA: + case CLASS_TEAM_MAGMA: + case CLASS_AQUA_ADMIN: + case CLASS_MAGMA_ADMIN: + return 0x1DB; + case CLASS_LEADER: + return 0x1DD; + case CLASS_CHAMPION: + return 0x1DE; + case CLASS_PKMN_TRAINER_RIVAL: + if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + return 0x1E1; + if (!StringCompare(gTrainers[gTrainerBattleOpponent_A].trainerName, BattleText_Wally)) + return 0x1DC; + return 0x1E1; + case CLASS_ELITE_FOUR: + return 0x1E2; + case CLASS_SALON_MAIDEN: + case CLASS_DOME_ACE: + case CLASS_PALACE_MAVEN: + case CLASS_ARENA_TYCOON: + case CLASS_FACTORY_HEAD: + case CLASS_PIKE_QUEEN: + case CLASS_PYRAMID_KING: + return 0x1D7; + default: + return 0x1DC; + } + } + return 0x1DA; +} + +void PlayBattleBGM(void) +{ + ResetMapMusic(); + m4aMPlayAllStop(); + PlayBGM(GetBattleBGM()); +} + +void PlayMapChosenOrBattleBGM(u16 songId) +{ + ResetMapMusic(); + m4aMPlayAllStop(); + if (songId) + PlayNewMapMusic(songId); + else + PlayNewMapMusic(GetBattleBGM()); +} + +static void sub_806E6CC(u8 taskId); + +void sub_806E694(u16 songId) +{ + u8 taskId; + + ResetMapMusic(); + m4aMPlayAllStop(); + + taskId = CreateTask(sub_806E6CC, 0); + gTasks[taskId].data[0] = songId; +} + +static void sub_806E6CC(u8 taskId) +{ + if (gTasks[taskId].data[0]) + PlayNewMapMusic(gTasks[taskId].data[0]); + else + PlayNewMapMusic(GetBattleBGM()); + DestroyTask(taskId); +} + +const u8 *pokemon_get_pal(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 species_and_otid_get_pal(species, otId, personality); +} + +//Extracts the upper 16 bits of a 32-bit number +#define HIHALF(n) (((n) & 0xFFFF0000) >> 16) + +//Extracts the lower 16 bits of a 32-bit number +#define LOHALF(n) ((n) & 0xFFFF) + +const u8 *species_and_otid_get_pal(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 *sub_806E794(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 sub_806E7CC(species, otId, personality); +} + +const struct CompressedSpritePalette *sub_806E7CC(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 (gHMMoves[i] != 0xFFFF) + { + if (gHMMoves[i++] == move) + return TRUE; + } + return FALSE; +} + +bool8 IsPokeSpriteNotFlipped(u16 species) +{ + return gBaseStats[species].noFlip; +} + +s8 GetMonFlavourRelation(struct Pokemon *mon, u8 a2) +{ + u8 nature = GetNature(mon); + return gPokeblockFlavorCompatibilityTable[nature * 5 + a2]; +} + +s8 GetFlavourRelationByPersonality(u32 personality, u8 a2) +{ + u8 nature = GetNatureFromPersonality(personality); + return gPokeblockFlavorCompatibilityTable[nature * 5 + a2]; +} + +bool8 IsTradedMon(struct Pokemon *mon) +{ + u8 otName[8]; + 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); + } + } +} + +void sub_806E994(void) +{ + gLastUsedAbility = gBattleStruct->field_B0; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = gBattleStruct->field_49; + gBattleTextBuff1[4] = EOS; + if (!GetBankSide(gBattleStruct->field_49)) + gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[gBattleStruct->field_49]); + else + gBattleTextBuff1[3] = gBattlePartyID[gBattleStruct->field_49]; + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 4; + gBattleTextBuff2[2] = gBankInMenu; + gBattleTextBuff2[3] = pokemon_order_func(gBattlePartyID[gBankInMenu]); + gBattleTextBuff2[4] = EOS; + StrCpyDecodeBattle(BattleText_PreventedSwitch, gStringVar4); +} + +struct PokeItem +{ + u16 species; + u16 item; +}; + +extern const struct PokeItem gAlteringCaveWildMonHeldItems[9]; + +static s32 GetWildMonTableIdInAlteringCave(u16 species) +{ + s32 i; + for (i = 0; i < 9; i++) + if (gAlteringCaveWildMonHeldItems[i].species == species) + return i; + return 0; +} + +void SetWildMonHeldItem(void) +{ + if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID | BATTLE_TYPE_x100000))) + { + u16 rnd = Random() % 100; + u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0); + u16 var1 = 45; + u16 var2 = 95; + if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3, 0) + && GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES) + { + var1 = 20; + var2 = 80; + } + if (gMapHeader.mapDataId == 0x1A4) + { + s32 alteringCaveId = GetWildMonTableIdInAlteringCave(species); + if (alteringCaveId != 0) + { + if (rnd < var2) + return; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gAlteringCaveWildMonHeldItems[alteringCaveId].item); + } + else + { + if (rnd < var1) + return; + if (rnd < var2) + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); + else + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2); + } + } + else + { + if (gBaseStats[species].item1 == gBaseStats[species].item2 && gBaseStats[species].item1 != 0) + { + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); + } + else + { + if (rnd < var1) + return; + if (rnd < var2) + 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; +} + +const u8* GetTrainerPartnerName(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + { + if (gPartnerTrainerId == STEVEN_PARTNER_ID) + return gTrainers[TRAINER_ID_STEVEN].trainerName; + else + { + GetFrontierTrainerName(gStringVar1, gPartnerTrainerId); + return gStringVar1; + } + } + else + { + u8 id = GetMultiplayerId(); + return gLinkPlayers[sub_806D864(gLinkPlayers[id].lp_field_18 ^ 2)].name; + } +} + +void sub_817F544(void (*spriteCallback)(struct Sprite*), u8); + +void sub_806EC70(u8 taskId) +{ + if (--gTasks[taskId].data[3] == 0) + { + void* ptr = (void*)((u16)(gTasks[taskId].data[0]) | ((u16)(gTasks[taskId].data[1]) << 0x10)); + sub_817F544(ptr, gTasks[taskId].data[2]); + DestroyTask(taskId); + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index b05bf725f..5ce6e59f8 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -854,7 +854,7 @@ gTrainerBattleOpponent_A: @ 2038BCA gTrainerBattleOpponent_B: @ 2038BCC .space 0x2 -gUnknown_02038BCE: @ 2038BCE +gPartnerTrainerId: @ 2038BCE .space 0x2 gUnknown_02038BD0: @ 2038BD0 |