Merge pull request #272 from DizzyEggg/final_battle_files_touches

Thoroughly document and label battle files
This commit is contained in:
Diegoisawesome
2018-07-16 13:35:17 -07:00
committed by GitHub
89 changed files with 3304 additions and 2671 deletions
+24 -24
View File
@@ -19871,8 +19871,8 @@ _081A4C84:
.pool .pool
thumb_func_end sub_81A4C30 thumb_func_end sub_81A4C30
thumb_func_start sub_81A4CB0 thumb_func_start GetFrontierBrainTrainerPicIndex
sub_81A4CB0: @ 81A4CB0 GetFrontierBrainTrainerPicIndex: @ 81A4CB0
push {lr} push {lr}
ldr r0, =gBattleTypeFlags ldr r0, =gBattleTypeFlags
ldr r0, [r0] ldr r0, [r0]
@@ -19881,7 +19881,7 @@ sub_81A4CB0: @ 81A4CB0
ands r0, r1 ands r0, r1
cmp r0, 0 cmp r0, 0
beq _081A4CD0 beq _081A4CD0
bl sub_8185EA0 bl GetRecordedBattleFrontierFacility
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
b _081A4CDA b _081A4CDA
@@ -19893,7 +19893,7 @@ _081A4CD0:
lsrs r0, 16 lsrs r0, 16
_081A4CDA: _081A4CDA:
ldr r2, =gTrainers ldr r2, =gTrainers
ldr r1, =gUnknown_08611D30 ldr r1, =gFacilityToBrainTrainerId
lsls r0, 1 lsls r0, 1
adds r0, r1 adds r0, r1
ldrh r1, [r0] ldrh r1, [r0]
@@ -19905,10 +19905,10 @@ _081A4CDA:
pop {r1} pop {r1}
bx r1 bx r1
.pool .pool
thumb_func_end sub_81A4CB0 thumb_func_end GetFrontierBrainTrainerPicIndex
thumb_func_start sub_81A4D00 thumb_func_start GetFrontierBrainTrainerClass
sub_81A4D00: @ 81A4D00 GetFrontierBrainTrainerClass: @ 81A4D00
push {lr} push {lr}
ldr r0, =gBattleTypeFlags ldr r0, =gBattleTypeFlags
ldr r0, [r0] ldr r0, [r0]
@@ -19917,7 +19917,7 @@ sub_81A4D00: @ 81A4D00
ands r0, r1 ands r0, r1
cmp r0, 0 cmp r0, 0
beq _081A4D20 beq _081A4D20
bl sub_8185EA0 bl GetRecordedBattleFrontierFacility
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
b _081A4D2A b _081A4D2A
@@ -19929,7 +19929,7 @@ _081A4D20:
lsrs r0, 16 lsrs r0, 16
_081A4D2A: _081A4D2A:
ldr r2, =gTrainers ldr r2, =gTrainers
ldr r1, =gUnknown_08611D30 ldr r1, =gFacilityToBrainTrainerId
lsls r0, 1 lsls r0, 1
adds r0, r1 adds r0, r1
ldrh r1, [r0] ldrh r1, [r0]
@@ -19941,10 +19941,10 @@ _081A4D2A:
pop {r1} pop {r1}
bx r1 bx r1
.pool .pool
thumb_func_end sub_81A4D00 thumb_func_end GetFrontierBrainTrainerClass
thumb_func_start sub_81A4D50 thumb_func_start CopyFrontierBrainTrainerName
sub_81A4D50: @ 81A4D50 CopyFrontierBrainTrainerName: @ 81A4D50
push {r4,lr} push {r4,lr}
adds r4, r0, 0 adds r4, r0, 0
ldr r0, =gBattleTypeFlags ldr r0, =gBattleTypeFlags
@@ -19954,7 +19954,7 @@ sub_81A4D50: @ 81A4D50
ands r0, r1 ands r0, r1
cmp r0, 0 cmp r0, 0
beq _081A4D70 beq _081A4D70
bl sub_8185EA0 bl GetRecordedBattleFrontierFacility
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
b _081A4D7A b _081A4D7A
@@ -19968,7 +19968,7 @@ _081A4D7A:
movs r3, 0 movs r3, 0
lsls r0, 1 lsls r0, 1
ldr r2, =gTrainers ldr r2, =gTrainers
ldr r1, =gUnknown_08611D30 ldr r1, =gFacilityToBrainTrainerId
adds r0, r1 adds r0, r1
ldrh r1, [r0] ldrh r1, [r0]
lsls r0, r1, 2 lsls r0, r1, 2
@@ -19991,7 +19991,7 @@ _081A4D90:
pop {r0} pop {r0}
bx r0 bx r0
.pool .pool
thumb_func_end sub_81A4D50 thumb_func_end CopyFrontierBrainTrainerName
thumb_func_start sub_81A4DB8 thumb_func_start sub_81A4DB8
sub_81A4DB8: @ 81A4DB8 sub_81A4DB8: @ 81A4DB8
@@ -20483,7 +20483,7 @@ sub_81A51A8: @ 81A51A8
ands r0, r1 ands r0, r1
cmp r0, 0 cmp r0, 0
beq _081A51D4 beq _081A51D4
bl sub_8185EA0 bl GetRecordedBattleFrontierFacility
lsls r0, 24 lsls r0, 24
lsrs r4, r0, 24 lsrs r4, r0, 24
bl sub_8185EAC bl sub_8185EAC
@@ -20646,29 +20646,29 @@ _081A5328:
ldr r4, =gDisplayedStringBattle ldr r4, =gDisplayedStringBattle
adds r0, r4, 0 adds r0, r4, 0
movs r1, 0xF movs r1, 0xF
bl BattleHandleAddTextPrinter bl BattlePutTextOnWindow
ldr r0, =gText_Vs ldr r0, =gText_Vs
movs r1, 0x10 movs r1, 0x10
bl BattleHandleAddTextPrinter bl BattlePutTextOnWindow
ldr r0, =gText_OpponentMon1Name ldr r0, =gText_OpponentMon1Name
bl BattleStringExpandPlaceholdersToDisplayedString bl BattleStringExpandPlaceholdersToDisplayedString
adds r0, r4, 0 adds r0, r4, 0
movs r1, 0x11 movs r1, 0x11
bl BattleHandleAddTextPrinter bl BattlePutTextOnWindow
ldr r0, =gText_Mind ldr r0, =gText_Mind
movs r1, 0x12 movs r1, 0x12
bl BattleHandleAddTextPrinter bl BattlePutTextOnWindow
ldr r0, =gText_Skill ldr r0, =gText_Skill
movs r1, 0x13 movs r1, 0x13
bl BattleHandleAddTextPrinter bl BattlePutTextOnWindow
ldr r0, =gText_Body ldr r0, =gText_Body
movs r1, 0x14 movs r1, 0x14
bl BattleHandleAddTextPrinter bl BattlePutTextOnWindow
ldr r0, =gText_Judgement ldr r0, =gText_Judgement
bl BattleStringExpandPlaceholdersToDisplayedString bl BattleStringExpandPlaceholdersToDisplayedString
adds r0, r4, 0 adds r0, r4, 0
movs r1, 0x15 movs r1, 0x15
bl BattleHandleAddTextPrinter bl BattlePutTextOnWindow
b _081A553E b _081A553E
.pool .pool
_081A53B4: _081A53B4:
@@ -20752,7 +20752,7 @@ _081A5464:
bl BattleStringExpandPlaceholdersToDisplayedString bl BattleStringExpandPlaceholdersToDisplayedString
ldr r0, =gDisplayedStringBattle ldr r0, =gDisplayedStringBattle
movs r1, 0x15 movs r1, 0x15
bl BattleHandleAddTextPrinter bl BattlePutTextOnWindow
ldrb r0, [r5] ldrb r0, [r5]
adds r0, 0x1 adds r0, 0x1
strb r0, [r5] strb r0, [r5]
+3 -3
View File
@@ -1353,7 +1353,7 @@ _08162AD0:
ldr r0, =0x000003fe ldr r0, =0x000003fe
cmp r4, r0 cmp r4, r0
bne _08162AE4 bne _08162AE4
bl sub_81A4CB0 bl GetFrontierBrainTrainerPicIndex
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
b _08162BCA b _08162BCA
@@ -1479,7 +1479,7 @@ _08162C08:
ldr r0, =0x000003fe ldr r0, =0x000003fe
cmp r4, r0 cmp r4, r0
bne _08162C1C bne _08162C1C
bl sub_81A4D00 bl GetFrontierBrainTrainerClass
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
b _08162D1E b _08162D1E
@@ -1729,7 +1729,7 @@ _08162E54:
cmp r5, r0 cmp r5, r0
bne _08162E68 bne _08162E68
adds r0, r6, 0 adds r0, r6, 0
bl sub_81A4D50 bl CopyFrontierBrainTrainerName
b _08162F62 b _08162F62
.pool .pool
_08162E68: _08162E68:
+2 -2
View File
@@ -6770,8 +6770,8 @@ _080DB1CC:
bl LoadCompressedPalette bl LoadCompressedPalette
adds r0, r5, 0 adds r0, r5, 0
movs r1, 0 movs r1, 0
bl sub_806A068 bl SetMultiuseSpriteTemplateToPokemon
ldr r4, =gUnknown_0202499C ldr r4, =gMultiuseSpriteTemplate
movs r0, 0x2 movs r0, 0x2
adds r1, r5, 0 adds r1, r5, 0
movs r2, 0 movs r2, 0
+2 -2
View File
@@ -1420,8 +1420,8 @@ _080F64F2:
bl LoadCompressedObjectPalette bl LoadCompressedObjectPalette
adds r0, r6, 0 adds r0, r6, 0
movs r1, 0x1 movs r1, 0x1
bl sub_806A068 bl SetMultiuseSpriteTemplateToPokemon
ldr r0, =gUnknown_0202499C ldr r0, =gMultiuseSpriteTemplate
ldrh r1, [r4, 0x4] ldrh r1, [r4, 0x4]
strh r1, [r0, 0x2] strh r1, [r0, 0x2]
movs r1, 0x88 movs r1, 0x88
+3 -3
View File
@@ -511,7 +511,7 @@
.byte \bank .byte \bank
.endm .endm
.macro atk5F .macro swapattackerwithtarget
.byte 0x5f .byte 0x5f
.endm .endm
@@ -525,7 +525,7 @@
.byte \bank .byte \bank
.endm .endm
.macro atk62 bank .macro hidepartystatussummary bank
.byte 0x62 .byte 0x62
.byte \bank .byte \bank
.endm .endm
@@ -1163,7 +1163,7 @@
.4byte \param0 .4byte \param0
.endm .endm
.macro snatchsetbanks .macro snatchsetbattlers
.byte 0xed .byte 0xed
.endm .endm
+5 -5
View File
@@ -12158,7 +12158,7 @@ sub_81B672C: @ 81B672C
bl sub_81B1B5C bl sub_81B1B5C
movs r0, 0x2 movs r0, 0x2
bl schedule_bg_copy_tilemap_to_vram bl schedule_bg_copy_tilemap_to_vram
bl sub_805EAE8 bl HandleBattleLowHpMusicChange
ldr r1, =gTasks ldr r1, =gTasks
lsls r0, r5, 2 lsls r0, r5, 2
adds r0, r5 adds r0, r5
@@ -16079,8 +16079,8 @@ _081B89A6:
bx r1 bx r1
thumb_func_end sub_81B8984 thumb_func_end sub_81B8984
thumb_func_start sub_81B89AC thumb_func_start OpenPartyMenuInBattle
sub_81B89AC: @ 81B89AC OpenPartyMenuInBattle: @ 81B89AC
push {r4,lr} push {r4,lr}
sub sp, 0xC sub sp, 0xC
adds r4, r0, 0 adds r4, r0, 0
@@ -16107,7 +16107,7 @@ sub_81B89AC: @ 81B89AC
pop {r0} pop {r0}
bx r0 bx r0
.pool .pool
thumb_func_end sub_81B89AC thumb_func_end OpenPartyMenuInBattle
thumb_func_start sub_81B89F0 thumb_func_start sub_81B89F0
sub_81B89F0: @ 81B89F0 sub_81B89F0: @ 81B89F0
@@ -16288,7 +16288,7 @@ _081B8B94:
ldrb r0, [r0, 0xB] ldrb r0, [r0, 0xB]
cmp r0, 0x4 cmp r0, 0x4
bne _081B8BA8 bne _081B8BA8
bl sub_806E994 bl SetMonPreventsSwitchingString
b _081B8C46 b _081B8C46
.pool .pool
_081B8BA8: _081B8BA8:
+4 -4
View File
@@ -1092,7 +1092,7 @@ _081C4750:
bl LoadCompressedObjectPalette bl LoadCompressedObjectPalette
ldrh r0, [r4, 0x4] ldrh r0, [r4, 0x4]
movs r1, 0x1 movs r1, 0x1
bl sub_806A068 bl SetMultiuseSpriteTemplateToPokemon
_081C4768: _081C4768:
ldrh r0, [r6] ldrh r0, [r6]
adds r0, 0x1 adds r0, 0x1
@@ -1116,7 +1116,7 @@ sub_81C4778: @ 81C4778
bne _081C47AE bne _081C47AE
adds r0, r1, 0 adds r0, r1, 0
adds r0, 0xC adds r0, 0xC
bl ShouldPlayNormalPokeCry bl ShouldPlayNormalMonCry
cmp r0, 0x1 cmp r0, 0x1
bne _081C47A4 bne _081C47A4
ldrh r0, [r4, 0x2] ldrh r0, [r4, 0x2]
@@ -1144,7 +1144,7 @@ sub_81C47B4: @ 81C47B4
ldr r0, =gUnknown_0203CF1C ldr r0, =gUnknown_0203CF1C
ldr r6, [r0] ldr r6, [r0]
adds r6, 0x70 adds r6, 0x70
ldr r0, =gUnknown_0202499C ldr r0, =gMultiuseSpriteTemplate
movs r1, 0x28 movs r1, 0x28
movs r2, 0x40 movs r2, 0x40
movs r3, 0x5 movs r3, 0x5
@@ -5297,7 +5297,7 @@ sub_81C6BD8: @ 81C6BD8
movs r0, 0 movs r0, 0
movs r1, 0xA movs r1, 0xA
movs r2, 0xD0 movs r2, 0xD0
bl copy_textbox_border_tile_patterns_to_vram bl LoadMessageBoxGfx
ldr r0, =gUnknown_0860F074 ldr r0, =gUnknown_0860F074
movs r1, 0xF0 movs r1, 0xF0
movs r2, 0x20 movs r2, 0x20
+1 -1
View File
@@ -11351,7 +11351,7 @@ sub_81CCA1C: @ 81CCA1C
lsrs r0, 24 lsrs r0, 24
movs r1, 0x42 movs r1, 0x42
movs r2, 0x40 movs r2, 0x40
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
ldrb r0, [r5, 0x8] ldrb r0, [r5, 0x8]
movs r1, 0x42 movs r1, 0x42
movs r2, 0x4 movs r2, 0x4
+9 -9
View File
@@ -10976,7 +10976,7 @@ _08018574:
movs r0, 0 movs r0, 0
movs r1, 0x1 movs r1, 0x1
movs r2, 0xF0 movs r2, 0xF0
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
movs r4, 0x20 movs r4, 0x20
str r4, [sp] str r4, [sp]
str r4, [sp, 0x4] str r4, [sp, 0x4]
@@ -15911,7 +15911,7 @@ _0801AD8C:
movs r0, 0 movs r0, 0
movs r1, 0x1 movs r1, 0x1
movs r2, 0xD0 movs r2, 0xD0
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
bl sub_819789C bl sub_819789C
ldr r0, =sub_801AC40 ldr r0, =sub_801AC40
bl SetVBlankCallback bl SetVBlankCallback
@@ -27085,7 +27085,7 @@ sub_8020740: @ 8020740
movs r0, 0x3 movs r0, 0x3
movs r1, 0xA movs r1, 0xA
movs r2, 0x20 movs r2, 0x20
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
ldr r0, =gUnknown_0860F074 ldr r0, =gUnknown_0860F074
movs r1, 0xE0 movs r1, 0xE0
movs r2, 0x20 movs r2, 0x20
@@ -30171,7 +30171,7 @@ _0802210C:
ldr r4, =0x0000021d ldr r4, =0x0000021d
adds r1, r4, 0 adds r1, r4, 0
movs r2, 0xD0 movs r2, 0xD0
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
ldrb r0, [r5] ldrb r0, [r5]
movs r1, 0 movs r1, 0
adds r2, r4, 0 adds r2, r4, 0
@@ -30370,7 +30370,7 @@ _08022296:
ldr r4, =0x0000021d ldr r4, =0x0000021d
adds r1, r4, 0 adds r1, r4, 0
movs r2, 0xD0 movs r2, 0xD0
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
ldrb r0, [r6, 0x2] ldrb r0, [r6, 0x2]
movs r1, 0 movs r1, 0
adds r2, r4, 0 adds r2, r4, 0
@@ -35221,7 +35221,7 @@ sub_80248B0: @ 80248B0
ldr r5, =0x0000021d ldr r5, =0x0000021d
adds r1, r5, 0 adds r1, r5, 0
movs r2, 0xD0 movs r2, 0xD0
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
ldrb r4, [r4] ldrb r4, [r4]
bl sub_80247BC bl sub_80247BC
adds r3, r0, 0 adds r3, r0, 0
@@ -41645,7 +41645,7 @@ sub_8027BEC: @ 8027BEC
adds r0, r7, 0 adds r0, r7, 0
adds r1, r4, 0 adds r1, r4, 0
movs r2, 0xD0 movs r2, 0xD0
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
adds r0, r7, 0 adds r0, r7, 0
adds r1, r4, 0 adds r1, r4, 0
movs r2, 0xD movs r2, 0xD
@@ -44214,7 +44214,7 @@ sub_802902C: @ 802902C
movs r0, 0 movs r0, 0
movs r1, 0xA movs r1, 0xA
movs r2, 0xB0 movs r2, 0xB0
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
pop {r0} pop {r0}
bx r0 bx r0
thumb_func_end sub_802902C thumb_func_end sub_802902C
@@ -54638,7 +54638,7 @@ sub_802E500: @ 802E500
adds r0, r4, 0 adds r0, r4, 0
adds r1, r5, 0 adds r1, r5, 0
movs r2, 0xD0 movs r2, 0xD0
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
adds r0, r4, 0 adds r0, r4, 0
adds r1, r5, 0 adds r1, r5, 0
movs r2, 0xD movs r2, 0xD
+2 -2
View File
@@ -737,8 +737,8 @@ _080F8DD8:
bl LoadCompressedObjectPalette bl LoadCompressedObjectPalette
adds r0, r6, 0 adds r0, r6, 0
movs r1, 0x1 movs r1, 0x1
bl sub_806A068 bl SetMultiuseSpriteTemplateToPokemon
ldr r0, =gUnknown_0202499C ldr r0, =gMultiuseSpriteTemplate
ldrh r1, [r4, 0x4] ldrh r1, [r4, 0x4]
strh r1, [r0, 0x2] strh r1, [r0, 0x2]
mov r1, r9 mov r1, r9
+1 -1
View File
@@ -1161,7 +1161,7 @@ BuyMenuInitWindows: @ 80E0468
movs r0, 0 movs r0, 0
movs r1, 0xA movs r1, 0xA
movs r2, 0xE0 movs r2, 0xE0
bl copy_textbox_border_tile_patterns_to_vram bl LoadMessageBoxGfx
movs r0, 0 movs r0, 0
bl PutWindowTilemap bl PutWindowTilemap
movs r0, 0x1 movs r0, 0x1
+1 -1
View File
@@ -634,7 +634,7 @@ sub_812AA48: @ 812AA48
lsls r1, 2 lsls r1, 2
movs r0, 0 movs r0, 0
movs r2, 0xF0 movs r2, 0xF0
bl copy_textbox_border_tile_patterns_to_vram bl LoadMessageBoxGfx
movs r1, 0x85 movs r1, 0x85
lsls r1, 2 lsls r1, 2
movs r0, 0 movs r0, 0
+3 -3
View File
@@ -241,7 +241,7 @@ _08077310:
movs r0, 0 movs r0, 0
movs r1, 0x14 movs r1, 0x14
movs r2, 0xC0 movs r2, 0xC0
bl box_border_load_tiles_and_pal bl LoadUserWindowBorderGfx_
movs r0, 0x2 movs r0, 0x2
movs r1, 0x1 movs r1, 0x1
movs r2, 0xE0 movs r2, 0xE0
@@ -7174,8 +7174,8 @@ _0807ADE0:
bl GetMonSpritePalStruct bl GetMonSpritePalStruct
ldrh r0, [r0, 0x4] ldrh r0, [r0, 0x4]
adds r1, r4, 0 adds r1, r4, 0
bl sub_806A068 bl SetMultiuseSpriteTemplateToPokemon
ldr r0, =gUnknown_0202499C ldr r0, =gMultiuseSpriteTemplate
movs r1, 0x78 movs r1, 0x78
movs r2, 0x3C movs r2, 0x3C
movs r3, 0x6 movs r3, 0x6
+3 -3
View File
@@ -3382,11 +3382,11 @@ AI_Safari_Flee:
flee flee
AI_FirstBattle: AI_FirstBattle:
if_hp_equal AI_TARGET, 20, BattleAIScript_82DE34D if_hp_equal AI_TARGET, 20, AI_FirstBattle_Flee
if_hp_less_than AI_TARGET, 20, BattleAIScript_82DE34D if_hp_less_than AI_TARGET, 20, AI_FirstBattle_Flee
end end
BattleAIScript_82DE34D: AI_FirstBattle_Flee:
flee flee
AI_Ret: AI_Ret:
+5 -2
View File
@@ -1,5 +1,6 @@
#include "constants/moves.h" #include "constants/moves.h"
#include "constants/species.h" #include "constants/species.h"
#include "constants/trainers.h"
.include "asm/macros.inc" .include "asm/macros.inc"
.include "constants/constants.inc" .include "constants/constants.inc"
@@ -1049,8 +1050,10 @@ gUnknown_08611D08:: @ 8611D08
.4byte gUnknown_085EE3C4 .4byte gUnknown_085EE3C4
.align 1 .align 1
gUnknown_08611D30:: @ 8611D30 gFacilityToBrainTrainerId:: @ 8611D30
.2byte 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, 0x032a, 0x032b, 0x0000 .2byte TRAINER_ANABEL, TRAINER_TUCKER, TRAINER_SPENSER
.2byte TRAINER_GRETA, TRAINER_NOLAND, TRAINER_LUCY
.2byte TRAINER_BRANDON
.align 2 .align 2
gUnknown_08611D40:: @ 8611D40 gUnknown_08611D40:: @ 8611D40
+16 -16
View File
@@ -2873,7 +2873,7 @@ BattleScript_FaintedMonTryChooseAnother::
jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonChooseAnother jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonChooseAnother
jumpifbattletype BATTLE_TYPE_LINK, BattleScript_FaintedMonChooseAnother jumpifbattletype BATTLE_TYPE_LINK, BattleScript_FaintedMonChooseAnother
jumpifbattletype BATTLE_TYPE_x2000000, BattleScript_FaintedMonChooseAnother jumpifbattletype BATTLE_TYPE_x2000000, BattleScript_FaintedMonChooseAnother
jumpifbattletype BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID, BattleScript_FaintedMonChooseAnother jumpifbattletype BATTLE_TYPE_FRONTIER, BattleScript_FaintedMonChooseAnother
jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonChooseAnother jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonChooseAnother
jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_FaintedMonChooseAnother jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_x400000, BattleScript_FaintedMonChooseAnother
jumpifbyte CMP_EQUAL, sBATTLE_STYLE, 0x1, BattleScript_FaintedMonChooseAnother jumpifbyte CMP_EQUAL, sBATTLE_STYLE, 0x1, BattleScript_FaintedMonChooseAnother
@@ -2899,7 +2899,7 @@ BattleScript_FaintedMonTryChooseAnother::
switchindataupdate BS_ATTACKER switchindataupdate BS_ATTACKER
hpthresholds BS_ATTACKER hpthresholds BS_ATTACKER
printstring STRINGID_SWITCHINMON printstring STRINGID_SWITCHINMON
atk62 BS_ATTACKER hidepartystatussummary BS_ATTACKER
switchinanim BS_ATTACKER, 0x0 switchinanim BS_ATTACKER, 0x0
waitstate waitstate
switchineffects BS_ATTACKER switchineffects BS_ATTACKER
@@ -2910,7 +2910,7 @@ BattleScript_FaintedMonChooseAnother::
switchindataupdate BS_FAINTED switchindataupdate BS_FAINTED
hpthresholds BS_FAINTED hpthresholds BS_FAINTED
printstring STRINGID_SWITCHINMON printstring STRINGID_SWITCHINMON
atk62 BS_FAINTED hidepartystatussummary BS_FAINTED
switchinanim BS_FAINTED, FALSE switchinanim BS_FAINTED, FALSE
waitstate waitstate
various7 BS_ATTACKER various7 BS_ATTACKER
@@ -2933,7 +2933,7 @@ BattleScript_82DA908::
switchindataupdate BS_FAINTED switchindataupdate BS_FAINTED
hpthresholds BS_FAINTED hpthresholds BS_FAINTED
printstring STRINGID_SWITCHINMON printstring STRINGID_SWITCHINMON
atk62 BS_FAINTED hidepartystatussummary BS_FAINTED
switchinanim BS_FAINTED, FALSE switchinanim BS_FAINTED, FALSE
waitstate waitstate
switchineffects 5 switchineffects 5
@@ -2968,7 +2968,7 @@ BattleScript_PayDayMoneyAndPickUpItems::
BattleScript_LocalBattleLost:: BattleScript_LocalBattleLost::
jumpifbattletype BATTLE_TYPE_DOME, BattleScript_CheckDomeDrew jumpifbattletype BATTLE_TYPE_DOME, BattleScript_CheckDomeDrew
jumpifbattletype BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID, BattleScript_LocalBattleLostPrintTrainersWinText jumpifbattletype BATTLE_TYPE_FRONTIER, BattleScript_LocalBattleLostPrintTrainersWinText
jumpifbattletype BATTLE_TYPE_x4000000, BattleScript_LocalBattleLostPrintTrainersWinText jumpifbattletype BATTLE_TYPE_x4000000, BattleScript_LocalBattleLostPrintTrainersWinText
jumpifbattletype BATTLE_TYPE_EREADER_TRAINER, BattleScript_LocalBattleLostEnd jumpifbattletype BATTLE_TYPE_EREADER_TRAINER, BattleScript_LocalBattleLostEnd
jumpifhalfword CMP_EQUAL, gTrainerBattleOpponent_A, 0x400, BattleScript_LocalBattleLostEnd jumpifhalfword CMP_EQUAL, gTrainerBattleOpponent_A, 0x400, BattleScript_LocalBattleLostEnd
@@ -3120,10 +3120,10 @@ BattleScript_PursuitSwitchDmgSetMultihit::
setmultihit 0x2 setmultihit 0x2
BattleScript_PursuitSwitchDmgLoop:: BattleScript_PursuitSwitchDmgLoop::
jumpifnopursuitswitchdmg BattleScript_DoSwitchOut jumpifnopursuitswitchdmg BattleScript_DoSwitchOut
atk5F swapattackerwithtarget
trysetdestinybondtohappen trysetdestinybondtohappen
call BattleScript_PursuitDmgOnSwitchOut call BattleScript_PursuitDmgOnSwitchOut
atk5F swapattackerwithtarget
BattleScript_DoSwitchOut:: BattleScript_DoSwitchOut::
decrementmultihit BattleScript_PursuitSwitchDmgLoop decrementmultihit BattleScript_PursuitSwitchDmgLoop
switchoutabilities BS_ATTACKER switchoutabilities BS_ATTACKER
@@ -3136,7 +3136,7 @@ BattleScript_DoSwitchOut::
switchindataupdate BS_ATTACKER switchindataupdate BS_ATTACKER
hpthresholds BS_ATTACKER hpthresholds BS_ATTACKER
printstring STRINGID_SWITCHINMON printstring STRINGID_SWITCHINMON
atk62 BS_ATTACKER hidepartystatussummary BS_ATTACKER
switchinanim BS_ATTACKER, FALSE switchinanim BS_ATTACKER, FALSE
waitstate waitstate
switchineffects BS_ATTACKER switchineffects BS_ATTACKER
@@ -3230,7 +3230,7 @@ BattleScript_DamagingWeatherContinues::
playanimation2 BS_ATTACKER, sB_ANIM_ARG1, NULL playanimation2 BS_ATTACKER, sB_ANIM_ARG1, NULL
setbyte gBattleCommunication, 0x0 setbyte gBattleCommunication, 0x0
BattleScript_DamagingWeatherLoop:: BattleScript_DamagingWeatherLoop::
copyarraywithindex gBattlerAttacker, gBattleTurnOrder, gBattleCommunication, 0x1 copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 0x1
weatherdamage weatherdamage
jumpifword CMP_EQUAL, gBattleMoveDamage, 0x0, BattleScript_DamagingWeatherLoopIncrement jumpifword CMP_EQUAL, gBattleMoveDamage, 0x0, BattleScript_DamagingWeatherLoopIncrement
printfromtable gSandStormHailDmgStringIds printfromtable gSandStormHailDmgStringIds
@@ -3710,12 +3710,12 @@ BattleScript_MagicCoatBounce::
BattleScript_SnatchedMove:: BattleScript_SnatchedMove::
attackstring attackstring
ppreduce ppreduce
snatchsetbanks snatchsetbattlers
playanimation BS_TARGET, B_ANIM_SNATCH_MOVE, NULL playanimation BS_TARGET, B_ANIM_SNATCH_MOVE, NULL
printstring STRINGID_PKMNSNATCHEDMOVE printstring STRINGID_PKMNSNATCHEDMOVE
waitmessage 0x40 waitmessage 0x40
orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_x800000 orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_x800000
atk5F swapattackerwithtarget
return return
BattleScript_EnduredMsg:: BattleScript_EnduredMsg::
@@ -3991,7 +3991,7 @@ BattleScript_DrizzleActivates::
pause 0x20 pause 0x20
printstring STRINGID_PKMNMADEITRAIN printstring STRINGID_PKMNMADEITRAIN
waitstate waitstate
playanimation BS_BANK_0, B_ANIM_RAIN_CONTINUES, NULL playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES, NULL
call BattleScript_WeatherFormChanges call BattleScript_WeatherFormChanges
end3 end3
@@ -4019,7 +4019,7 @@ BattleScript_SandstreamActivates::
pause 0x20 pause 0x20
printstring STRINGID_PKMNSXWHIPPEDUPSANDSTORM printstring STRINGID_PKMNSXWHIPPEDUPSANDSTORM
waitstate waitstate
playanimation BS_BANK_0, B_ANIM_SANDSTORM_CONTINUES, NULL playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES, NULL
call BattleScript_WeatherFormChanges call BattleScript_WeatherFormChanges
end3 end3
@@ -4085,7 +4085,7 @@ BattleScript_DroughtActivates::
pause 0x20 pause 0x20
printstring STRINGID_PKMNSXINTENSIFIEDSUN printstring STRINGID_PKMNSXINTENSIFIEDSUN
waitstate waitstate
playanimation BS_BANK_0, B_ANIM_SUN_CONTINUES, NULL playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES, NULL
call BattleScript_WeatherFormChanges call BattleScript_WeatherFormChanges
end3 end3
@@ -4561,8 +4561,8 @@ BattleScript_82DB973::
end2 end2
BattleScript_82DB992:: BattleScript_82DB992::
various16 BS_BANK_0 various16 BS_BATTLER_0
various17 BS_BANK_0 various17 BS_BATTLER_0
various9 BS_ATTACKER various9 BS_ATTACKER
various15 BS_ATTACKER various15 BS_ATTACKER
printstring STRINGID_TIEDOPPONENTBYREFEREE printstring STRINGID_TIEDOPPONENTBYREFEREE
+5 -5
View File
@@ -44,7 +44,7 @@ gBattlescriptsForSafariActions:: @ 82DBD58
.4byte BattleScript_ActionWatchesCarefully .4byte BattleScript_ActionWatchesCarefully
.4byte BattleScript_ActionGetNear .4byte BattleScript_ActionGetNear
.4byte BattleScript_ActionThrowPokeblock .4byte BattleScript_ActionThrowPokeblock
.4byte BattleScript_82DBEE3 .4byte BattleScript_ActionWallyThrow
BattleScript_BallThrow:: BattleScript_BallThrow::
jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally
@@ -176,17 +176,17 @@ BattleScript_RunByUsingItem::
setbyte gBattleOutcome, B_OUTCOME_RAN setbyte gBattleOutcome, B_OUTCOME_RAN
finishturn finishturn
BattleScript_ActionWatchesCarefully:: BattleScript_ActionWatchesCarefully:
printstring STRINGID_PKMNWATCHINGCAREFULLY printstring STRINGID_PKMNWATCHINGCAREFULLY
waitmessage 0x40 waitmessage 0x40
end2 end2
BattleScript_ActionGetNear:: BattleScript_ActionGetNear:
printfromtable gSafariGetNearStringIds printfromtable gSafariGetNearStringIds
waitmessage 0x40 waitmessage 0x40
end2 end2
BattleScript_ActionThrowPokeblock:: BattleScript_ActionThrowPokeblock:
printstring STRINGID_THREWPOKEBLOCKATPKMN printstring STRINGID_THREWPOKEBLOCKATPKMN
waitmessage 0x40 waitmessage 0x40
playanimation BS_ATTACKER, B_ANIM_x4, NULL playanimation BS_ATTACKER, B_ANIM_x4, NULL
@@ -194,7 +194,7 @@ BattleScript_ActionThrowPokeblock::
waitmessage 0x40 waitmessage 0x40
end2 end2
BattleScript_82DBEE3:: BattleScript_ActionWallyThrow:
printstring STRINGID_RETURNMON printstring STRINGID_RETURNMON
waitmessage 0x40 waitmessage 0x40
returnatktoball returnatktoball
+3 -7
View File
@@ -235,7 +235,7 @@ gUnknown_082FF704:: @ 82FF704
.2byte 0x0003, 0x0000, 0xffff, 0x0000 .2byte 0x0003, 0x0000, 0xffff, 0x0000
.align 2 .align 2
gUnknown_082FF70C:: @ 82FF70C gPlayerMonSpriteAnimsTable:: @ 82FF70C
.4byte gUnknown_082FF6EC .4byte gUnknown_082FF6EC
.4byte gUnknown_082FF6F4 .4byte gUnknown_082FF6F4
.4byte gUnknown_082FF6FC .4byte gUnknown_082FF6FC
@@ -4684,7 +4684,7 @@ gUnknown_0831AA00:: @ 831AA00
obj_tiles gUnknown_08D77B0C, 0x1000, 0x2710 obj_tiles gUnknown_08D77B0C, 0x1000, 0x2710
.align 2 .align 2
gUnknown_0831AA08:: @ 831AA08 gBattleBgTemplates:: @ 831AA08
.4byte 0x00000580, 0x000005c5, 0x000013e6, 0x000033ab .4byte 0x00000580, 0x000005c5, 0x000013e6, 0x000033ab
.align 2 .align 2
@@ -4743,7 +4743,7 @@ gUnknown_0831AAE0:: @ 831AAE0
null_window_template null_window_template
.align 2 .align 2
gUnknown_0831ABA0:: @ 831ABA0 gBattleWindowTemplates:: @ 831ABA0
.4byte gUnknown_0831AA18 .4byte gUnknown_0831AA18
.4byte gUnknown_0831AAE0 .4byte gUnknown_0831AAE0
@@ -4862,7 +4862,3 @@ gUnknown_0831ACC4:: @ 831ACC4
.align 2 .align 2
gUnknown_0831ACDC:: @ 831ACDC gUnknown_0831ACDC:: @ 831ACDC
.4byte gUnknown_0831ACC4 .4byte gUnknown_0831ACC4
.align 2
gUnknown_0831ACE0:: @ 831ACE0
.byte 0xe0, 0xf0, 0xf0, 0xe0, 0xe0, 0x00, 0x00, 0x00
+83 -96
View File
@@ -4,6 +4,7 @@
// should they be included here or included individually by every file? // should they be included here or included individually by every file?
#include "constants/battle.h" #include "constants/battle.h"
#include "battle_main.h" #include "battle_main.h"
#include "battle_message.h"
#include "battle_util.h" #include "battle_util.h"
#include "battle_script_commands.h" #include "battle_script_commands.h"
#include "battle_ai_switch_items.h" #include "battle_ai_switch_items.h"
@@ -15,12 +16,6 @@
#define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE) #define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE)
#define GET_BATTLER_SIDE2(battler) (GET_BATTLER_POSITION(battler) & BIT_SIDE) #define GET_BATTLER_SIDE2(battler) (GET_BATTLER_POSITION(battler) & BIT_SIDE)
#define TRAINER_OPPONENT_3FE 0x3FE
#define TRAINER_OPPONENT_C00 0xC00
#define TRAINER_OPPONENT_800 0x800
#define STEVEN_PARTNER_ID 0xC03
#define SECRET_BASE_OPPONENT 0x400
// Battle Actions // Battle Actions
// These determine what each battler will do in a turn // These determine what each battler will do in a turn
#define B_ACTION_USE_MOVE 0 #define B_ACTION_USE_MOVE 0
@@ -33,7 +28,7 @@
#define B_ACTION_SAFARI_GO_NEAR 7 #define B_ACTION_SAFARI_GO_NEAR 7
#define B_ACTION_SAFARI_RUN 8 #define B_ACTION_SAFARI_RUN 8
// The exact purposes of these are unclear // The exact purposes of these are unclear
#define B_ACTION_UNKNOWN9 9 #define B_ACTION_WALLY_THROW 9
#define B_ACTION_EXEC_SCRIPT 10 // when executing an action #define B_ACTION_EXEC_SCRIPT 10 // when executing an action
#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action #define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
#define B_ACTION_FINISHED 12 // when executing an action #define B_ACTION_FINISHED 12 // when executing an action
@@ -150,29 +145,29 @@ struct DisableStruct
/*0x08*/ u8 protectUses; /*0x08*/ u8 protectUses;
/*0x09*/ u8 stockpileCounter; /*0x09*/ u8 stockpileCounter;
/*0x0A*/ u8 substituteHP; /*0x0A*/ u8 substituteHP;
/*0x0B*/ u8 disableTimer1 : 4; /*0x0B*/ u8 disableTimer1:4;
/*0x0B*/ u8 disableTimer2 : 4; /*0x0B*/ u8 disableTimer2:4;
/*0x0C*/ u8 encoredMovePos; /*0x0C*/ u8 encoredMovePos;
/*0x0D*/ u8 unkD; /*0x0D*/ u8 unkD;
/*0x0E*/ u8 encoreTimer1 : 4; /*0x0E*/ u8 encoreTimer1:4;
/*0x0E*/ u8 encoreTimer2 : 4; /*0x0E*/ u8 encoreTimer2:4;
/*0x0F*/ u8 perishSongTimer1 : 4; /*0x0F*/ u8 perishSongTimer1:4;
/*0x0F*/ u8 perishSongTimer2 : 4; /*0x0F*/ u8 perishSongTimer2:4;
/*0x10*/ u8 furyCutterCounter; /*0x10*/ u8 furyCutterCounter;
/*0x11*/ u8 rolloutCounter1 : 4; /*0x11*/ u8 rolloutCounter1:4;
/*0x11*/ u8 rolloutCounter2 : 4; /*0x11*/ u8 rolloutCounter2:4;
/*0x12*/ u8 chargeTimer1 : 4; /*0x12*/ u8 chargeTimer1:4;
/*0x12*/ u8 chargeTimer2 : 4; /*0x12*/ u8 chargeTimer2:4;
/*0x13*/ u8 tauntTimer1:4; /*0x13*/ u8 tauntTimer1:4;
/*0x13*/ u8 tauntTimer2:4; /*0x13*/ u8 tauntTimer2:4;
/*0x14*/ u8 battlerPreventingEscape; /*0x14*/ u8 battlerPreventingEscape;
/*0x15*/ u8 battlerWithSureHit; /*0x15*/ u8 battlerWithSureHit;
/*0x16*/ u8 isFirstTurn; /*0x16*/ u8 isFirstTurn;
/*0x17*/ u8 unk17; /*0x17*/ u8 unk17;
/*0x18*/ u8 truantCounter : 1; /*0x18*/ u8 truantCounter:1;
/*0x18*/ u8 truantUnknownBit : 1; /*0x18*/ u8 truantUnknownBit:1;
/*0x18*/ u8 unk18_a_2 : 2; /*0x18*/ u8 unk18_a_2:2;
/*0x18*/ u8 unk18_b : 4; /*0x18*/ u8 unk18_b:4;
/*0x19*/ u8 rechargeCounter; /*0x19*/ u8 rechargeCounter;
/*0x1A*/ u8 unk1A[2]; /*0x1A*/ u8 unk1A[2];
}; };
@@ -182,7 +177,7 @@ struct ProtectStruct
/* field_0 */ /* field_0 */
u32 protected:1; u32 protected:1;
u32 endured:1; u32 endured:1;
u32 onlyStruggle:1; u32 noValidMoves:1;
u32 helpingHand:1; u32 helpingHand:1;
u32 bounceMove:1; u32 bounceMove:1;
u32 stealMove:1; u32 stealMove:1;
@@ -201,12 +196,12 @@ struct ProtectStruct
u32 flag2Unknown:1; // 0x2 u32 flag2Unknown:1; // 0x2
u32 flinchImmobility:1; // 0x4 u32 flinchImmobility:1; // 0x4
u32 notFirstStrike:1; // 0x8 u32 notFirstStrike:1; // 0x8
u32 flag_x10 : 1; // 0x10 u32 flag_x10:1; // 0x10
u32 flag_x20 : 1; // 0x20 u32 flag_x20:1; // 0x20
u32 flag_x40 : 1; // 0x40 u32 flag_x40:1; // 0x40
u32 flag_x80 : 1; // 0x80 u32 flag_x80:1; // 0x80
/* field_3 */ /* field_3 */
u32 field3 : 8; u32 field3:8;
/* field_4 */ u32 physicalDmg; /* field_4 */ u32 physicalDmg;
/* field_8 */ u32 specialDmg; /* field_8 */ u32 specialDmg;
@@ -217,14 +212,14 @@ struct ProtectStruct
struct SpecialStatus struct SpecialStatus
{ {
u8 statLowered : 1; // 0x1 u8 statLowered:1; // 0x1
u8 lightningRodRedirected : 1; // 0x2 u8 lightningRodRedirected:1; // 0x2
u8 restoredBankSprite: 1; // 0x4 u8 restoredBattlerSprite: 1; // 0x4
u8 intimidatedPoke : 1; // 0x8 u8 intimidatedMon:1; // 0x8
u8 traced : 1; // 0x10 u8 traced:1; // 0x10
u8 flag20 : 1; u8 flag20:1;
u8 flag40 : 1; u8 flag40:1;
u8 focusBanded : 1; u8 focusBanded:1;
u8 field1[3]; u8 field1[3];
s32 dmg; s32 dmg;
s32 physicalDmg; s32 physicalDmg;
@@ -336,20 +331,20 @@ struct BattleResults
u8 unk5_0:1; // 0x5 u8 unk5_0:1; // 0x5
u8 usedMasterBall:1; // 0x5 u8 usedMasterBall:1; // 0x5
u8 caughtMonBall:4; // 0x5 u8 caughtMonBall:4; // 0x5
u8 unk5_6:1; // 0x5 u8 shinyWildMon:1; // 0x5
u8 unk5_7:1; // 0x5 u8 unk5_7:1; // 0x5
u16 playerMon1Species; // 0x6 u16 playerMon1Species; // 0x6
u8 playerMon1Name[11]; // 0x8 u8 playerMon1Name[POKEMON_NAME_LENGTH + 1]; // 0x8
u8 battleTurnCounter; // 0x13 u8 battleTurnCounter; // 0x13
u8 playerMon2Name[11]; // 0x14 u8 playerMon2Name[POKEMON_NAME_LENGTH + 1]; // 0x14
u8 field_1F; // 0x1F u8 pokeblockThrows; // 0x1F
u16 lastOpponentSpecies; // 0x20 u16 lastOpponentSpecies; // 0x20
u16 lastUsedMovePlayer; // 0x22 u16 lastUsedMovePlayer; // 0x22
u16 lastUsedMoveOpponent; // 0x24 u16 lastUsedMoveOpponent; // 0x24
u16 playerMon2Species; // 0x26 u16 playerMon2Species; // 0x26
u16 caughtMonSpecies; // 0x28 u16 caughtMonSpecies; // 0x28
u8 caughtMonNick[10]; // 0x2A u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A
u8 filler34[2]; // 0x34 u8 filler35[1]; // 0x35
u8 catchAttempts[11]; // 0x36 u8 catchAttempts[11]; // 0x36
}; };
@@ -428,7 +423,7 @@ struct BattleTv_Mon
struct BattleTv struct BattleTv
{ {
struct BattleTv_Mon mon[2][6]; // [side][partyId] struct BattleTv_Mon mon[2][PARTY_SIZE]; // [side][partyId]
struct BattleTv_Position pos[2][2]; // [side][flank] struct BattleTv_Position pos[2][2]; // [side][flank]
struct BattleTv_Side side[2]; // [side] struct BattleTv_Side side[2]; // [side]
}; };
@@ -461,7 +456,7 @@ struct BattleStruct
u8 field_46; u8 field_46;
u8 field_47; u8 field_47;
u8 focusPunchBattlerId; u8 focusPunchBattlerId;
u8 field_49; u8 battlerPreventingSwitchout;
u8 moneyMultiplier; u8 moneyMultiplier;
u8 savedTurnActionNumber; u8 savedTurnActionNumber;
u8 switchInAbilitiesCounter; u8 switchInAbilitiesCounter;
@@ -478,10 +473,10 @@ struct BattleStruct
u8 runTries; u8 runTries;
u8 caughtMonNick[11]; u8 caughtMonNick[11];
u8 field_78; u8 field_78;
u8 field_79; u8 safariGoNearCounter;
u8 field_7A; u8 safariPkblThrowCounter;
u8 field_7B; u8 safariEscapeFactor;
u8 field_7C; u8 safariCatchFactor;
u8 field_7D; u8 field_7D;
u8 field_7E; u8 field_7E;
u8 formToChangeInto; u8 formToChangeInto;
@@ -514,7 +509,7 @@ struct BattleStruct
u8 field_A7; u8 field_A7;
u16 hpOnSwitchout[2]; u16 hpOnSwitchout[2];
u32 savedBattleTypeFlags; u32 savedBattleTypeFlags;
u8 field_B0; u8 abilityPreventingSwitchout;
u8 hpScale; u8 hpScale;
u8 synchronizeMoveEffect; u8 synchronizeMoveEffect;
bool8 anyMonHasTransformed; bool8 anyMonHasTransformed;
@@ -525,7 +520,7 @@ struct BattleStruct
u8 AI_itemFlags[2]; u8 AI_itemFlags[2];
u16 choicedMove[MAX_BATTLERS_COUNT]; u16 choicedMove[MAX_BATTLERS_COUNT];
u16 changedItems[MAX_BATTLERS_COUNT]; u16 changedItems[MAX_BATTLERS_COUNT];
u8 intimidateBank; u8 intimidateBattler;
u8 switchInItemsCounter; u8 switchInItemsCounter;
u8 field_DA; u8 field_DA;
u8 turnSideTracker; u8 turnSideTracker;
@@ -560,8 +555,8 @@ struct BattleStruct
typeArg = gBattleMoves[move].type; \ typeArg = gBattleMoves[move].type; \
} }
#define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY) #define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
#define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY) #define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0)) #define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0))
@@ -606,34 +601,22 @@ struct BattleScripting
u8 reshowMainState; u8 reshowMainState;
u8 reshowHelperState; u8 reshowHelperState;
u8 field_23; u8 field_23;
u8 field_24; u8 windowsType; // 0 - normal, 1 - battle arena
u8 multiplayerId; u8 multiplayerId;
}; };
enum
{
BACK_PIC_BRENDAN,
BACK_PIC_MAY,
BACK_PIC_RED,
BACK_PIC_LEAF,
BACK_PIC_RS_BRENDAN,
BACK_PIC_RS_MAY,
BACK_PIC_WALLY,
BACK_PIC_STEVEN
};
// rom_80A5C6C // rom_80A5C6C
u8 GetBattlerSide(u8 battler); u8 GetBattlerSide(u8 battler);
u8 GetBattlerPosition(u8 bank); u8 GetBattlerPosition(u8 battler);
u8 GetBattlerAtPosition(u8 bank); u8 GetBattlerAtPosition(u8 battler);
struct BattleSpriteInfo struct BattleSpriteInfo
{ {
u16 invisible : 1; // 0x1 u16 invisible:1; // 0x1
u16 lowHpSong : 1; // 0x2 u16 lowHpSong:1; // 0x2
u16 behindSubstitute : 1; // 0x4 u16 behindSubstitute:1; // 0x4
u16 flag_x8 : 1; // 0x8 u16 flag_x8:1; // 0x8
u16 hpNumbersNoBars : 1; // 0x10 u16 hpNumbersNoBars:1; // 0x10
u16 transformSpecies; u16 transformSpecies;
}; };
@@ -647,12 +630,12 @@ struct BattleAnimationInfo
u8 field_6; u8 field_6;
u8 field_7; u8 field_7;
u8 ballThrowCaseId; u8 ballThrowCaseId;
u8 field_9_x1 : 1; u8 field_9_x1:1;
u8 field_9_x2 : 1; u8 field_9_x2:1;
u8 field_9_x1C : 3; u8 field_9_x1C:3;
u8 field_9_x20 : 1; u8 field_9_x20:1;
u8 field_9_x40 : 1; u8 field_9_x40:1;
u8 field_9_x80 : 1; u8 field_9_x80:1;
u8 field_A; u8 field_A;
u8 field_B; u8 field_B;
u8 field_C; u8 field_C;
@@ -663,21 +646,21 @@ struct BattleAnimationInfo
struct BattleHealthboxInfo struct BattleHealthboxInfo
{ {
u8 flag_x1 : 1; u8 partyStatusSummaryShown:1;
u8 flag_x2 : 1; u8 healthboxIsBouncing:1;
u8 flag_x4 : 1; u8 battlerIsBouncing:1;
u8 ballAnimActive : 1; // 0x8 u8 ballAnimActive:1; // 0x8
u8 statusAnimActive : 1; // x10 u8 statusAnimActive:1; // x10
u8 animFromTableActive : 1; // x20 u8 animFromTableActive:1; // x20
u8 specialAnimActive : 1; //x40 u8 specialAnimActive:1; // x40
u8 flag_x80 : 1; u8 flag_x80:1;
u8 field_1_x1 : 1; u8 field_1_x1:1;
u8 field_1_x1E : 4; u8 field_1_x1E:4;
u8 field_1_x20 : 1; u8 field_1_x20:1;
u8 field_1_x40 : 1; u8 field_1_x40:1;
u8 field_1_x80 : 1; u8 field_1_x80:1;
u8 field_2; u8 healthboxBounceSpriteId;
u8 field_3; u8 battlerBounceSpriteId;
u8 animationState; u8 animationState;
u8 field_5; u8 field_5;
u8 field_6; u8 field_6;
@@ -692,9 +675,9 @@ struct BattleBarInfo
{ {
u8 healthboxSpriteId; u8 healthboxSpriteId;
s32 maxValue; s32 maxValue;
s32 currentValue; s32 oldValue;
s32 receivedValue; s32 receivedValue;
s32 field_10; s32 currValue;
}; };
struct BattleSpriteData struct BattleSpriteData
@@ -719,7 +702,11 @@ struct MonSpritesGfx
void *field_17C; void *field_17C;
}; };
// all battle variables are declared in battle_main.c // All battle variables are declared in battle_main.c
extern u8 gDisplayedStringBattle[300];
extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT];
extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT];
extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT];
extern u32 gBattleTypeFlags; extern u32 gBattleTypeFlags;
extern u8 gBattleTerrain; extern u8 gBattleTerrain;
extern u32 gUnknown_02022FF4; extern u32 gUnknown_02022FF4;
@@ -733,7 +720,7 @@ extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT]; extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT]; extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT]; extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT]; extern u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT];
extern u8 gCurrentTurnActionNumber; extern u8 gCurrentTurnActionNumber;
extern u8 gCurrentActionFuncId; extern u8 gCurrentActionFuncId;
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT]; extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
+10 -5
View File
@@ -1,13 +1,18 @@
#ifndef GUARD_BATTLE_AI_SCRIPT_COMMANDS_H #ifndef GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
#define GUARD_BATTLE_AI_SCRIPT_COMMANDS_H #define GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
// return values for BattleAI_ChooseMoveOrAction
// 0 - 3 are move idx
#define AI_CHOICE_FLEE 4
#define AI_CHOICE_WATCH 5
void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves); void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves);
void BattleAI_SetupAIData(u8 defaultScoreMoves); void BattleAI_SetupAIData(u8 defaultScoreMoves);
u8 BattleAI_ChooseMoveOrAction(void); u8 BattleAI_ChooseMoveOrAction(void);
void ClearBattlerMoveHistory(u8 bank); void ClearBattlerMoveHistory(u8 battlerId);
void RecordAbilityBattle(u8 bank, u8 abilityId); void RecordAbilityBattle(u8 battlerId, u8 abilityId);
void ClearBattlerAbilityHistory(u8 bank); void ClearBattlerAbilityHistory(u8 battlerId);
void RecordItemEffectBattle(u8 bank, u8 itemEffect); void RecordItemEffectBattle(u8 battlerId, u8 itemEffect);
void ClearBankItemEffectHistory(u8 bank); void ClearBattlerItemEffectHistory(u8 battlerId);
#endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H #endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
+3 -3
View File
@@ -1,13 +1,13 @@
#ifndef GUARD_BATTLE_BG_H #ifndef GUARD_BATTLE_BG_H
#define GUARD_BATTLE_BG_H #define GUARD_BATTLE_BG_H
void sub_8035658(void); void BattleInitBgsAndWindows(void);
void sub_80356D0(void); void sub_80356D0(void);
void ApplyPlayerChosenFrameToBattleMenu(void); void LoadBattleMenuWindowGfx(void);
void DrawMainBattleBackground(void); void DrawMainBattleBackground(void);
void LoadBattleTextboxAndBackground(void); void LoadBattleTextboxAndBackground(void);
void sub_8035D74(u8 taskId); void sub_8035D74(u8 taskId);
void LoadBattleEntryBackground(void); void DrawBattleEntryBackground(void);
bool8 LoadChosenBattleElement(u8 caseId); bool8 LoadChosenBattleElement(u8 caseId);
#endif // GUARD_BATTLE_BG_H #endif // GUARD_BATTLE_BG_H
+12 -9
View File
@@ -65,6 +65,8 @@ enum
REQUEST_TOUGH_RIBBON_BATTLE, REQUEST_TOUGH_RIBBON_BATTLE,
}; };
// Special arguments for Battle Controller functions.
#define RESET_ACTION_MOVE_SELECTION 0 #define RESET_ACTION_MOVE_SELECTION 0
#define RESET_ACTION_SELECTION 1 #define RESET_ACTION_SELECTION 1
#define RESET_MOVE_SELECTION 2 #define RESET_MOVE_SELECTION 2
@@ -76,14 +78,15 @@ enum
#define BALL_3_SHAKES_SUCCESS 4 #define BALL_3_SHAKES_SUCCESS 4
#define BALL_TRAINER_BLOCK 5 #define BALL_TRAINER_BLOCK 5
#define RET_VALUE_LEVELLED_UP 11
#define INSTANT_HP_BAR_DROP 32767 #define INSTANT_HP_BAR_DROP 32767
// Special return values in gBattleBufferB from Battle Controller functions.
#define RET_VALUE_LEVELED_UP 11
struct UnusedControllerStruct struct UnusedControllerStruct
{ {
u8 field_0 : 7; u8 field_0:7;
u8 flag_x80 : 1; u8 flag_x80:1;
}; };
struct HpAndStatus struct HpAndStatus
@@ -160,8 +163,8 @@ enum
CONTROLLER_INTROSLIDE, CONTROLLER_INTROSLIDE,
CONTROLLER_INTROTRAINERBALLTHROW, CONTROLLER_INTROTRAINERBALLTHROW,
CONTROLLER_DRAWPARTYSTATUSSUMMARY, CONTROLLER_DRAWPARTYSTATUSSUMMARY,
CONTROLLER_49, CONTROLLER_HIDEPARTYSTATUSSUMMARY,
CONTROLLER_50, CONTROLLER_ENDBOUNCE,
CONTROLLER_SPRITEINVISIBILITY, CONTROLLER_SPRITEINVISIBILITY,
CONTROLLER_BATTLEANIMATION, CONTROLLER_BATTLEANIMATION,
CONTROLLER_LINKSTANDBYMSG, CONTROLLER_LINKSTANDBYMSG,
@@ -230,13 +233,13 @@ void BtlController_EmitFaintingCry(u8 bufferId);
void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId); void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId);
void BtlController_EmitIntroTrainerBallThrow(u8 bufferId); void BtlController_EmitIntroTrainerBallThrow(u8 bufferId);
void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2); void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
void BtlController_EmitCmd49(u8 bufferId); void BtlController_EmitHidePartyStatusSummary(u8 bufferId);
void BtlController_EmitCmd50(u8 bufferId); void BtlController_EmitEndBounceEffect(u8 bufferId);
void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible); void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument); void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2); void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2);
void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId); void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
void BtlController_EmitCmd55(u8 bufferId, u8 arg1); void BtlController_EmitCmd55(u8 bufferId, u8 battleOutcome);
// player controller // player controller
void SetControllerToPlayer(void); void SetControllerToPlayer(void);
+2 -2
View File
@@ -35,7 +35,7 @@ void ClearBehindSubstituteBit(u8 battlerId);
void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId); void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId);
void BattleStopLowHpSound(void); void BattleStopLowHpSound(void);
u8 GetMonHPBarLevel(struct Pokemon *mon); u8 GetMonHPBarLevel(struct Pokemon *mon);
void sub_805EAE8(void); void HandleBattleLowHpMusicChange(void);
void sub_805EB9C(u8 affineMode); void sub_805EB9C(u8 affineMode);
void LoadAndCreateEnemyShadowSprites(void); void LoadAndCreateEnemyShadowSprites(void);
void SpriteCB_SetInvisible(struct Sprite *sprite); void SpriteCB_SetInvisible(struct Sprite *sprite);
@@ -45,6 +45,6 @@ void sub_805EF14(void);
void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute); void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute);
void AllocateMonSpritesGfx(void); void AllocateMonSpritesGfx(void);
void FreeMonSpritesGfx(void); void FreeMonSpritesGfx(void);
bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon); bool32 ShouldPlayNormalMonCry(struct Pokemon *mon);
#endif // GUARD_BATTLE_GFX_SFX_UTIL #endif // GUARD_BATTLE_GFX_SFX_UTIL
+8 -2
View File
@@ -29,12 +29,18 @@ enum
#define TAG_HEALTHBOX_OPPONENT1_TILE 0xD701 #define TAG_HEALTHBOX_OPPONENT1_TILE 0xD701
#define TAG_HEALTHBOX_OPPONENT2_TILE 0xD702 #define TAG_HEALTHBOX_OPPONENT2_TILE 0xD702
#define TAG_HEALTHBAR_PLAYER1_TILE 0xD704
#define TAG_HEALTHBAR_OPPONENT1_TILE 0xD705
#define TAG_HEALTHBAR_PLAYER2_TILE 0xD706
#define TAG_HEALTHBAR_OPPONENT2_TILE 0xD707
#define TAG_HEALTHBOX_SAFARI_TILE 0xD70B #define TAG_HEALTHBOX_SAFARI_TILE 0xD70B
#define TAG_STATUS_SUMMARY_BAR_TILE 0xD70C #define TAG_STATUS_SUMMARY_BAR_TILE 0xD70C
#define TAG_STATUS_SUMMARY_BALLS_TILE 0xD714 #define TAG_STATUS_SUMMARY_BALLS_TILE 0xD714
#define TAG_HEALTHBOX_PAL 0xD6FF #define TAG_HEALTHBOX_PAL 0xD6FF
#define TAG_HEALTHBAR_PAL 0xD704
#define TAG_STATUS_SUMMARY_BAR_PAL 0xD710 #define TAG_STATUS_SUMMARY_BAR_PAL 0xD710
#define TAG_STATUS_SUMMARY_BALLS_PAL 0xD712 #define TAG_STATUS_SUMMARY_BALLS_PAL 0xD712
@@ -66,9 +72,9 @@ void InitBattlerHealthboxCoords(u8 bank);
void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
void SwapHpBarsWithHpText(void); void SwapHpBarsWithHpText(void);
u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart); u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart);
void sub_8073C30(u8 taskId); void Task_HidePartyStatusSummary(u8 taskId);
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId); void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId);
s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3); s32 MoveBattleBar(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp); u8 GetHPBarLevel(s16 hp, s16 maxhp);
+8 -4
View File
@@ -25,6 +25,10 @@ struct TrainerMoney
#define TYPE_FORESIGHT 0xFE #define TYPE_FORESIGHT 0xFE
#define TYPE_ENDTABLE 0xFF #define TYPE_ENDTABLE 0xFF
// defines for the 'DoBounceEffect' function
#define BOUNCE_MON 0x0
#define BOUNCE_HEALTHBOX 0x1
void CB2_InitBattle(void); void CB2_InitBattle(void);
void BattleMainCB2(void); void BattleMainCB2(void);
void CB2_QuitRecordedBattle(void); void CB2_QuitRecordedBattle(void);
@@ -38,15 +42,15 @@ u32 sub_80391E0(u8 arrayId, u8 caseId);
u32 sub_80397C4(u32 setId, u32 tableId); u32 sub_80397C4(u32 setId, u32 tableId);
void oac_poke_opponent(struct Sprite *sprite); void oac_poke_opponent(struct Sprite *sprite);
void SpriteCallbackDummy_2(struct Sprite *sprite); void SpriteCallbackDummy_2(struct Sprite *sprite);
void sub_8039934(struct Sprite *sprite); void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
void sub_8039AD8(struct Sprite *sprite); void sub_8039AD8(struct Sprite *sprite);
void sub_8039B2C(struct Sprite *sprite); void sub_8039B2C(struct Sprite *sprite);
void sub_8039B58(struct Sprite *sprite); void sub_8039B58(struct Sprite *sprite);
void sub_8039BB4(struct Sprite *sprite); void sub_8039BB4(struct Sprite *sprite);
void sub_80105DC(struct Sprite *sprite); void sub_80105DC(struct Sprite *sprite);
void sub_8039C00(struct Sprite *sprite); void sub_8039C00(struct Sprite *sprite);
void dp11b_obj_instanciate(u8 battlerId, u8 b, s8 c, s8 d); void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d);
void dp11b_obj_free(u8 battlerId, bool8 b); void EndBounceEffect(u8 battlerId, bool8 b);
void sub_8039E44(struct Sprite *sprite); void sub_8039E44(struct Sprite *sprite);
void sub_8039E60(struct Sprite *sprite); void sub_8039E60(struct Sprite *sprite);
void sub_8039E84(struct Sprite *sprite); void sub_8039E84(struct Sprite *sprite);
@@ -80,6 +84,6 @@ extern const u8 gStatusConditionString_IceJpn[8];
extern const u8 gStatusConditionString_ConfusionJpn[8]; extern const u8 gStatusConditionString_ConfusionJpn[8];
extern const u8 gStatusConditionString_LoveJpn[8]; extern const u8 gStatusConditionString_LoveJpn[8];
extern const u8 * const gStatusConditionStringsTable[7][2]; extern const u8 *const gStatusConditionStringsTable[7][2];
#endif // GUARD_BATTLE_MAIN_H #endif // GUARD_BATTLE_MAIN_H
+15 -12
View File
@@ -1,8 +1,9 @@
#ifndef GUARD_BATTLE_MESSAGE_H #ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H
// for 0xFD #define TEXT_BUFF_ARRAY_COUNT 16
// for 0xFD
#define B_TXT_BUFF1 0x0 #define B_TXT_BUFF1 0x0
#define B_TXT_BUFF2 0x1 #define B_TXT_BUFF2 0x1
#define B_TXT_COPY_VAR_1 0x2 #define B_TXT_COPY_VAR_1 0x2
@@ -194,7 +195,7 @@
textVar[4] = B_BUFF_EOS; \ textVar[4] = B_BUFF_EOS; \
} }
struct StringInfoBattle struct BattleMsgData
{ {
u16 currentMove; u16 currentMove;
u16 originallyUsedMove; u16 originallyUsedMove;
@@ -203,25 +204,20 @@ struct StringInfoBattle
u8 scrActive; u8 scrActive;
u8 unk1605E; u8 unk1605E;
u8 hpScale; u8 hpScale;
u8 StringBank; u8 itemEffectBattler;
u8 moveType; u8 moveType;
u8 abilities[4]; u8 abilities[MAX_BATTLERS_COUNT];
u8 textBuffs[3][0x10]; u8 textBuffs[3][TEXT_BUFF_ARRAY_COUNT];
}; };
void BufferStringBattle(u16 stringID); void BufferStringBattle(u16 stringID);
u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src); u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src);
u32 BattleStringExpandPlaceholders(const u8* src, u8* dst); u32 BattleStringExpandPlaceholders(const u8* src, u8* dst);
void BattleHandleAddTextPrinter(const u8* text, u8 arg1); void BattlePutTextOnWindow(const u8* text, u8 arg1);
void SetPpNumbersPaletteInMoveSelection(void); void SetPpNumbersPaletteInMoveSelection(void);
u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp); u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp);
#define TEXT_BUFF_ARRAY_COUNT 16 extern struct BattleMsgData *gBattleMsgDataPtr;
extern u8 gDisplayedStringBattle[300];
extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT];
extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT];
extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT];
extern const u8* const gBattleStringsTable[]; extern const u8* const gBattleStringsTable[];
extern const u8* const gStatNamesTable[]; extern const u8* const gStatNamesTable[];
@@ -252,6 +248,13 @@ extern const u8 gText_BattleSwitchWhich4[];
extern const u8 gText_BattleSwitchWhich5[]; extern const u8 gText_BattleSwitchWhich5[];
extern const u8 gText_SafariBalls[]; extern const u8 gText_SafariBalls[];
extern const u8 gText_SafariBallLeft[]; extern const u8 gText_SafariBallLeft[];
extern const u8 gText_Sleep[];
extern const u8 gText_Poison[];
extern const u8 gText_Burn[];
extern const u8 gText_Paralysis[];
extern const u8 gText_Ice[];
extern const u8 gText_Confusion[];
extern const u8 gText_Love[];
extern const u8 gText_SpaceAndSpace[]; extern const u8 gText_SpaceAndSpace[];
extern const u8 gText_CommaSpace[]; extern const u8 gText_CommaSpace[];
extern const u8 gText_Space2[]; extern const u8 gText_Space2[];
+28 -33
View File
@@ -8,41 +8,36 @@
#define MOVE_LIMITATION_TAUNT (1 << 4) #define MOVE_LIMITATION_TAUNT (1 << 4)
#define MOVE_LIMITATION_IMPRISION (1 << 5) #define MOVE_LIMITATION_IMPRISION (1 << 5)
#define ABILITYEFFECT_ON_SWITCHIN 0x0 #define ABILITYEFFECT_ON_SWITCHIN 0x0
#define ABILITYEFFECT_ENDTURN 0x1 #define ABILITYEFFECT_ENDTURN 0x1
#define ABILITYEFFECT_MOVES_BLOCK 0x2 #define ABILITYEFFECT_MOVES_BLOCK 0x2
#define ABILITYEFFECT_ABSORBING 0x3 #define ABILITYEFFECT_ABSORBING 0x3
#define ABILITYEFFECT_CONTACT 0x4 #define ABILITYEFFECT_CONTACT 0x4
#define ABILITYEFFECT_IMMUNITY 0x5 #define ABILITYEFFECT_IMMUNITY 0x5
#define ABILITYEFFECT_FORECAST 0x6 #define ABILITYEFFECT_FORECAST 0x6
#define ABILITYEFFECT_SYNCHRONIZE 0x7 #define ABILITYEFFECT_SYNCHRONIZE 0x7
#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8 #define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
#define ABILITYEFFECT_INTIMIDATE1 0x9 #define ABILITYEFFECT_INTIMIDATE1 0x9
#define ABILITYEFFECT_INTIMIDATE2 0xA #define ABILITYEFFECT_INTIMIDATE2 0xA
#define ABILITYEFFECT_TRACE 0xB #define ABILITYEFFECT_TRACE 0xB
#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC #define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD #define ABILITYEFFECT_CHECK_BATTLER_SIDE 0xD
#define ABILITYEFFECT_FIELD_SPORT 0xE #define ABILITYEFFECT_FIELD_SPORT 0xE
#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK 0xF #define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 0xF
#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10 #define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11 #define ABILITYEFFECT_COUNT_BATTLER_SIDE 0x11
#define ABILITYEFFECT_COUNT_ON_FIELD 0x12 #define ABILITYEFFECT_COUNT_ON_FIELD 0x12
#define ABILITYEFFECT_CHECK_ON_FIELD 0x13 #define ABILITYEFFECT_CHECK_ON_FIELD 0x13
#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF #define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF
#define ABILITY_ON_OPPOSING_FIELD(battlerId, abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, battlerId, abilityId, 0, 0))
#define ABILITY_ON_FIELD(abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0))
#define ABILITY_ON_FIELD2(abilityId)(AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0))
#define ITEMEFFECT_ON_SWITCH_IN 0x0 #define ITEMEFFECT_ON_SWITCH_IN 0x0
#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0))) #define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK)))
#define WEATHER_HAS_EFFECT2 ((!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0))) #define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK)))
#define BS_GET_TARGET 0
#define BS_GET_ATTACKER 1
#define BS_GET_EFFECT_BANK 2
#define BS_GET_SCRIPTING_BANK 10
#define BS_GET_PLAYER1 11
#define BS_GET_OPPONENT1 12
#define BS_GET_PLAYER2 13
#define BS_GET_OPPONENT2 14
u8 GetBattlerForBattleScript(u8 caseId); u8 GetBattlerForBattleScript(u8 caseId);
void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move); void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move);
@@ -70,7 +65,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void);
bool8 HandleFaintedMonActions(void); bool8 HandleFaintedMonActions(void);
void TryClearRageStatuses(void); void TryClearRageStatuses(void);
u8 AtkCanceller_UnableToUseMove(void); u8 AtkCanceller_UnableToUseMove(void);
bool8 sub_80423F4(u8 battlerId, u8 r1, u8 r2); bool8 HasNoMonsToSwitch(u8 battlerId, u8 r1, u8 r2);
u8 CastformDataTypeChange(u8 battlerId); u8 CastformDataTypeChange(u8 battlerId);
u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg); u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg);
void BattleScriptExecute(const u8* BS_ptr); void BattleScriptExecute(const u8* BS_ptr);
+2
View File
@@ -80,4 +80,6 @@
#define ABILITY_CACOPHONY 76 #define ABILITY_CACOPHONY 76
#define ABILITY_AIR_LOCK 77 #define ABILITY_AIR_LOCK 77
#define ABILITIES_COUNT 78
#endif // GUARD_CONSTANTS_ABILITIES_H #endif // GUARD_CONSTANTS_ABILITIES_H
+2 -2
View File
@@ -130,7 +130,7 @@
#define STATUS2_TORMENT 0x80000000 #define STATUS2_TORMENT 0x80000000
// Seems like per-battler statuses. Not quite sure how to categorize these // Seems like per-battler statuses. Not quite sure how to categorize these
#define STATUS3_LEECHSEED_BANK 0x3 #define STATUS3_LEECHSEED_BATTLER 0x3
#define STATUS3_LEECHSEED 0x4 #define STATUS3_LEECHSEED 0x4
#define STATUS3_ALWAYS_HITS 0x18 // two bits #define STATUS3_ALWAYS_HITS 0x18 // two bits
#define STATUS3_PERISH_SONG 0x20 #define STATUS3_PERISH_SONG 0x20
@@ -159,7 +159,7 @@
#define HITMARKER_NO_ATTACKSTRING 0x00000200 #define HITMARKER_NO_ATTACKSTRING 0x00000200
#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400 #define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
#define HITMARKER_NO_PPDEDUCT 0x00000800 #define HITMARKER_NO_PPDEDUCT 0x00000800
#define HITMARKER_PURSUIT_TRAP 0x00001000 #define HITMARKER_SWAP_ATTACKER_TARGET 0x00001000
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000 #define HITMARKER_IGNORE_SAFEGUARD 0x00002000
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000 #define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
#define HITMARKER_RUN 0x00008000 #define HITMARKER_RUN 0x00008000
+13
View File
@@ -0,0 +1,13 @@
#ifndef GUARD_CONSTANTS_BATTLE_FRONTIER_H
#define GUARD_CONSTANTS_BATTLE_FRONTIER_H
// Battle Frontier facility ids.
#define FRONTIER_FACILITY_TOWER 0
#define FRONTIER_FACILITY_DOME 1
#define FRONTIER_FACILITY_PALACE 2
#define FRONTIER_FACILITY_ARENA 3
#define FRONTIER_FACILITY_FACTORY 4
#define FRONTIER_FACILITY_PIKE 5
#define FRONTIER_FACILITY_PYRAMID 6
#endif // GUARD_CONSTANTS_BATTLE_FRONTIER_H
+1 -1
View File
@@ -37,7 +37,7 @@
#define BS_ATTACKER 1 #define BS_ATTACKER 1
#define BS_EFFECT_BATTLER 2 #define BS_EFFECT_BATTLER 2
#define BS_FAINTED 3 #define BS_FAINTED 3
#define BS_BANK_0 7 #define BS_BATTLER_0 7
#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update #define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
#define BS_ATTACKER_SIDE 8 // for atk1E_jumpifability #define BS_ATTACKER_SIDE 8 // for atk1E_jumpifability
#define BS_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability #define BS_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
+2 -2
View File
@@ -462,8 +462,8 @@
#define ITEM_MAGMA_EMBLEM 375 #define ITEM_MAGMA_EMBLEM 375
#define ITEM_OLD_SEA_MAP 376 #define ITEM_OLD_SEA_MAP 376
#define ITEM_LAST_ID 376 #define ITEMS_COUNT 377
#define ITEM_FIELD_ARROW ITEM_LAST_ID + 1 #define ITEM_FIELD_ARROW ITEMS_COUNT
#define FIRST_BERRY_INDEX ITEM_CHERI_BERRY #define FIRST_BERRY_INDEX ITEM_CHERI_BERRY
#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY #define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY
+1 -1
View File
@@ -357,6 +357,6 @@
#define MOVE_DOOM_DESIRE 353 #define MOVE_DOOM_DESIRE 353
#define MOVE_PSYCHO_BOOST 354 #define MOVE_PSYCHO_BOOST 354
#define LAST_MOVE_INDEX MOVE_PSYCHO_BOOST #define MOVES_COUNT 355
#endif // GUARD_CONSTANTS_MOVES_H #endif // GUARD_CONSTANTS_MOVES_H
+17 -1
View File
@@ -857,7 +857,14 @@
#define TRAINER_BRENDAN_16 853 #define TRAINER_BRENDAN_16 853
#define TRAINER_MAY_16 854 #define TRAINER_MAY_16 854
#define NO_OF_TRAINERS 854 #define TRAINERS_COUNT 855
// Special Trainer Ids.
#define TRAINER_FRONTIER_BRAIN 1022
#define TRAINER_SECRET_BASE 1024
#define TRAINER_LINK_OPPONENT 2048
#define TRAINER_OPPONENT_C00 3072
#define TRAINER_STEVEN_PARTNER 3075
#define TRAINER_PIC_HIKER 0 #define TRAINER_PIC_HIKER 0
#define TRAINER_PIC_AQUA_GRUNT_M 1 #define TRAINER_PIC_AQUA_GRUNT_M 1
@@ -953,6 +960,15 @@
#define TRAINER_PIC_RUBY_SAPPHIRE_BRENDAN 91 #define TRAINER_PIC_RUBY_SAPPHIRE_BRENDAN 91
#define TRAINER_PIC_RUBY_SAPPHIRE_MAY 92 #define TRAINER_PIC_RUBY_SAPPHIRE_MAY 92
#define TRAINER_BACK_PIC_BRENDAN 0
#define TRAINER_BACK_PIC_MAY 1
#define TRAINER_BACK_PIC_RED 2
#define TRAINER_BACK_PIC_LEAF 3
#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN 4
#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY 5
#define TRAINER_BACK_PIC_WALLY 6
#define TRAINER_BACK_PIC_STEVEN 7
#define FACILITY_CLASS_HIKER 0x0 #define FACILITY_CLASS_HIKER 0x0
#define FACILITY_CLASS_TEAM_AQUA_1 0x1 #define FACILITY_CLASS_TEAM_AQUA_1 0x1
#define FACILITY_CLASS_PKMN_BREEDER_1 0x2 #define FACILITY_CLASS_PKMN_BREEDER_1 0x2
+1 -1
View File
@@ -1,7 +1,7 @@
#ifndef GUARD_DATA_BATTLE_MOVES #ifndef GUARD_DATA_BATTLE_MOVES
#define GUARD_DATA_BATTLE_MOVES #define GUARD_DATA_BATTLE_MOVES
const struct BattleMove gBattleMoves[LAST_MOVE_INDEX + 1] = const struct BattleMove gBattleMoves[MOVES_COUNT] =
{ {
{ // MOVE_NONE { // MOVE_NONE
.effect = EFFECT_HIT, .effect = EFFECT_HIT,
+2 -2
View File
@@ -80,7 +80,7 @@ static const u8 gShellArmorAbilityDescription[] = _("Blocks critical hits.");
static const u8 gCacophonyAbilityDescription[] = _("Avoids sound-based moves."); static const u8 gCacophonyAbilityDescription[] = _("Avoids sound-based moves.");
static const u8 gAirLockAbilityDescription[] = _("Negates weather effects."); static const u8 gAirLockAbilityDescription[] = _("Negates weather effects.");
const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1] = const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
{ {
_("-------"), _("-------"),
_("STENCH"), _("STENCH"),
@@ -162,7 +162,7 @@ const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1] =
_("AIR LOCK"), _("AIR LOCK"),
}; };
const u8 *const gAbilityDescriptionPointers[] = const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] =
{ {
gNoneAbilityDescription, gNoneAbilityDescription,
gStenchAbilityDescription, gStenchAbilityDescription,
+2
View File
@@ -582,6 +582,7 @@
#define BLDCNT_TGT1_BG3 (1 << 3) #define BLDCNT_TGT1_BG3 (1 << 3)
#define BLDCNT_TGT1_OBJ (1 << 4) #define BLDCNT_TGT1_OBJ (1 << 4)
#define BLDCNT_TGT1_BD (1 << 5) #define BLDCNT_TGT1_BD (1 << 5)
#define BLDCNT_TGT1_ALL (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD)
// Bits 6-7 select the special effect // Bits 6-7 select the special effect
#define BLDCNT_EFFECT_NONE (0 << 6) // no special effect #define BLDCNT_EFFECT_NONE (0 << 6) // no special effect
#define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA) #define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA)
@@ -594,6 +595,7 @@
#define BLDCNT_TGT2_BG3 (1 << 11) #define BLDCNT_TGT2_BG3 (1 << 11)
#define BLDCNT_TGT2_OBJ (1 << 12) #define BLDCNT_TGT2_OBJ (1 << 12)
#define BLDCNT_TGT2_BD (1 << 13) #define BLDCNT_TGT2_BD (1 << 13)
#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD)
// BLDALPHA // BLDALPHA
#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1)) #define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1))
+6
View File
@@ -35,12 +35,18 @@
// Converts a number to Q4.12 fixed-point format // Converts a number to Q4.12 fixed-point format
#define Q_4_12(n) ((s16)((n) * 4096)) #define Q_4_12(n) ((s16)((n) * 4096))
// Converts a number to Q24.8 fixed-point format
#define Q_24_8(n) ((s32)((n) * 256))
// Converts a Q8.8 fixed-point format number to a regular integer // Converts a Q8.8 fixed-point format number to a regular integer
#define Q_8_8_TO_INT(n) ((int)((n) / 256)) #define Q_8_8_TO_INT(n) ((int)((n) / 256))
// Converts a Q4.12 fixed-point format number to a regular integer // Converts a Q4.12 fixed-point format number to a regular integer
#define Q_4_12_TO_INT(n) ((int)((n) / 4096)) #define Q_4_12_TO_INT(n) ((int)((n) / 4096))
// Converts a Q24.8 fixed-point format number to a regular integer
#define Q_24_8_TO_INT(n) ((int)((n) >> 8))
#define PARTY_SIZE 6 #define PARTY_SIZE 6
#define POKEMON_SLOTS_NUMBER 412 #define POKEMON_SLOTS_NUMBER 412
+13
View File
@@ -1,6 +1,8 @@
#ifndef GUARD_PARTY_MENU_H #ifndef GUARD_PARTY_MENU_H
#define GUARD_PARTY_MENU_H #define GUARD_PARTY_MENU_H
#include "task.h" #include "task.h"
enum enum
{ {
AILMENT_NONE, AILMENT_NONE,
@@ -11,6 +13,16 @@ enum
AILMENT_BRN AILMENT_BRN
}; };
enum
{
PARTY_CHOOSE_MON,
PARTY_MUST_CHOOSE_MON,
PARTY_CANT_SWITCH,
PARTY_USE_ITEM_ON,
PARTY_ABILITY_PREVENTS,
PARTY_GIVE_ITEM,
};
struct Struct203CEC8 struct Struct203CEC8
{ {
u8 filler[0x9]; u8 filler[0x9];
@@ -38,5 +50,6 @@ void sub_81B1F18(u8 taskId, u8 pokemonIdx, s8 a, s16 hp, TaskFunc func);
void sub_81B1B5C(void *a, u8 b); void sub_81B1B5C(void *a, u8 b);
u8 sub_81B1BD4(); u8 sub_81B1BD4();
void sub_81B8448(); void sub_81B8448();
void OpenPartyMenuInBattle(u8 caseId);
#endif // GUARD_PARTY_MENU_H #endif // GUARD_PARTY_MENU_H
+6 -6
View File
@@ -438,7 +438,7 @@ extern u8 gPlayerPartyCount;
extern struct Pokemon gPlayerParty[PARTY_SIZE]; extern struct Pokemon gPlayerParty[PARTY_SIZE];
extern u8 gEnemyPartyCount; extern u8 gEnemyPartyCount;
extern struct Pokemon gEnemyParty[PARTY_SIZE]; extern struct Pokemon gEnemyParty[PARTY_SIZE];
extern struct SpriteTemplate gUnknown_0202499C; extern struct SpriteTemplate gMultiuseSpriteTemplate;
extern struct PokemonStorage* gPokemonStoragePtr; extern struct PokemonStorage* gPokemonStoragePtr;
extern const struct BattleMove gBattleMoves[]; extern const struct BattleMove gBattleMoves[];
@@ -505,9 +505,9 @@ u8 GetDefaultMoveTarget(u8 battlerId);
u8 GetMonGender(struct Pokemon *mon); u8 GetMonGender(struct Pokemon *mon);
u8 GetBoxMonGender(struct BoxPokemon *boxMon); u8 GetBoxMonGender(struct BoxPokemon *boxMon);
u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality); u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality);
void sub_806A068(u16 species, u8 battlerPosition); void SetMultiuseSpriteTemplateToPokemon(u16 species, u8 battlerPosition);
void sub_806A12C(u16 trainerSpriteId, u8 battlerPosition); void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosition);
void sub_806A1C0(u16 arg0, u8 battlerPosition); void SetMultiuseSpriteTemplateToTrainerFront(u16 arg0, u8 battlerPosition);
// These are full type signatures for GetMonData() and GetBoxMonData(), // These are full type signatures for GetMonData() and GetBoxMonData(),
// but they are not used since some code erroneously omits the third arg. // but they are not used since some code erroneously omits the third arg.
@@ -556,7 +556,7 @@ void sub_806D544(u16 species, u32 personality, u8 *dest);
void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4); void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4);
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
bool8 sub_806D7EC(void); bool8 sub_806D7EC(void);
bool16 sub_806D82C(u8 id); bool16 GetLinkTrainerFlankId(u8 id);
s32 GetBattlerMultiplayerId(u16 a1); s32 GetBattlerMultiplayerId(u16 a1);
u8 GetTrainerEncounterMusicId(u16 trainerOpponentId); u8 GetTrainerEncounterMusicId(u16 trainerOpponentId);
u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex); u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex);
@@ -593,7 +593,7 @@ bool8 IsTradedMon(struct Pokemon *mon);
bool8 IsOtherTrainer(u32 otId, u8 *otName); bool8 IsOtherTrainer(u32 otId, u8 *otName);
void MonRestorePP(struct Pokemon *mon); void MonRestorePP(struct Pokemon *mon);
void BoxMonRestorePP(struct BoxPokemon *boxMon); void BoxMonRestorePP(struct BoxPokemon *boxMon);
void sub_806E994(void); void SetMonPreventsSwitchingString(void);
void SetWildMonHeldItem(void); void SetWildMonHeldItem(void);
bool8 IsMonShiny(struct Pokemon *mon); bool8 IsMonShiny(struct Pokemon *mon);
bool8 IsShinyOtIdPersonality(u32 otId, u32 personality); bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
+1 -1
View File
@@ -16,7 +16,7 @@ void sub_81851A8(u8 *arg0);
bool32 CanCopyRecordedBattleSaveData(void); bool32 CanCopyRecordedBattleSaveData(void);
u32 MoveRecordedBattleToSaveData(void); u32 MoveRecordedBattleToSaveData(void);
void PlayRecordedBattle(void (*CB2_After)(void)); void PlayRecordedBattle(void (*CB2_After)(void));
u8 sub_8185EA0(void); u8 GetRecordedBattleFrontierFacility(void);
u8 sub_8185EAC(void); u8 sub_8185EAC(void);
void RecordedBattle_SaveParties(void); void RecordedBattle_SaveParties(void);
u8 GetActiveBattlerLinkPlayerGender(void); u8 GetActiveBattlerLinkPlayerGender(void);
+10
View File
@@ -2,7 +2,17 @@
#define GUARD_TEXT_H #define GUARD_TEXT_H
#define CHAR_SPACE 0x00 #define CHAR_SPACE 0x00
#define CHAR_PLUS 0x2E
#define CHAR_0 0xA1 #define CHAR_0 0xA1
#define CHAR_1 0xA2
#define CHAR_2 0xA3
#define CHAR_3 0xA4
#define CHAR_4 0xA5
#define CHAR_5 0xA6
#define CHAR_6 0xA7
#define CHAR_7 0xA8
#define CHAR_8 0xA9
#define CHAR_9 0xAA
#define CHAR_QUESTION_MARK 0xAC #define CHAR_QUESTION_MARK 0xAC
#define CHAR_PERIOD 0xAD #define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE #define CHAR_HYPHEN 0xAE
+3 -3
View File
@@ -12,11 +12,11 @@ struct TilesPal
extern const u8 gTextWindowFrame1_Gfx[]; extern const u8 gTextWindowFrame1_Gfx[];
extern const u16 gTextWindowFrame1_Pal[]; extern const u16 gTextWindowFrame1_Pal[];
const struct TilesPal* GetWindowFrameTilesPal(u8 id); const struct TilesPal *GetWindowFrameTilesPal(u8 id);
void copy_textbox_border_tile_patterns_to_vram(u8 windowId, u16 destOffset, u8 palOffset); void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset);
void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset); void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset);
void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset); void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset);
void box_border_load_tiles_and_pal(u8 windowId, u16 destOffset, u8 palOffset); void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset);
void sub_8098858(u8 windowId, u16 tileNum, u8 palNum); void sub_8098858(u8 windowId, u16 tileNum, u8 palNum);
void sub_80989E0(u8 windowId, u16 tileNum, u8 palNum); void sub_80989E0(u8 windowId, u16 tileNum, u8 palNum);
void rbox_fill_rectangle(u8 windowId); void rbox_fill_rectangle(u8 windowId);
File diff suppressed because it is too large Load Diff
+133 -130
View File
@@ -19,18 +19,20 @@ static bool8 ShouldSwitchIfPerishSong(void)
if (gStatuses3[gActiveBattler] & STATUS3_PERISH_SONG if (gStatuses3[gActiveBattler] & STATUS3_PERISH_SONG
&& gDisableStructs[gActiveBattler].perishSongTimer1 == 0) && gDisableStructs[gActiveBattler].perishSongTimer1 == 0)
{ {
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6; *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE; return TRUE;
} }
else
return FALSE; {
return FALSE;
}
} }
static bool8 ShouldSwitchIfWonderGuard(void) static bool8 ShouldSwitchIfWonderGuard(void)
{ {
u8 opposingPosition; u8 opposingPosition;
u8 opposingBank; u8 opposingBattler;
u8 moveFlags; u8 moveFlags;
s32 i, j; s32 i, j;
s32 firstId; s32 firstId;
@@ -46,22 +48,22 @@ static bool8 ShouldSwitchIfWonderGuard(void)
if (gBattleMons[GetBattlerAtPosition(opposingPosition)].ability != ABILITY_WONDER_GUARD) if (gBattleMons[GetBattlerAtPosition(opposingPosition)].ability != ABILITY_WONDER_GUARD)
return FALSE; return FALSE;
// check if pokemon has a super effective move // Check if Pokemon has a super effective move.
for (opposingBank = GetBattlerAtPosition(opposingPosition), i = 0; i < 4; i++) for (opposingBattler = GetBattlerAtPosition(opposingPosition), i = 0; i < 4; i++)
{ {
move = gBattleMons[gActiveBattler].moves[i]; move = gBattleMons[gActiveBattler].moves[i];
if (move == MOVE_NONE) if (move == MOVE_NONE)
continue; continue;
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability); moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE) if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
return FALSE; return FALSE;
} }
// get party information // Get party information.
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000)) if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{ {
if ((gActiveBattler & BIT_FLANK) == 0) if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3; firstId = 0, lastId = 3;
else else
firstId = 3, lastId = 6; firstId = 3, lastId = 6;
@@ -76,7 +78,7 @@ static bool8 ShouldSwitchIfWonderGuard(void)
else else
party = gEnemyParty; party = gEnemyParty;
// find a pokemon in the party that has a super effective move // Find a Pokemon in the party that has a super effective move.
for (i = firstId; i < lastId; i++) for (i = firstId; i < lastId; i++)
{ {
if (GetMonData(&party[i], MON_DATA_HP) == 0) if (GetMonData(&party[i], MON_DATA_HP) == 0)
@@ -88,19 +90,19 @@ static bool8 ShouldSwitchIfWonderGuard(void)
if (i == gBattlerPartyIndexes[gActiveBattler]) if (i == gBattlerPartyIndexes[gActiveBattler])
continue; continue;
GetMonData(&party[i], MON_DATA_SPECIES); // unused return value GetMonData(&party[i], MON_DATA_SPECIES); // Unused return value.
GetMonData(&party[i], MON_DATA_ALT_ABILITY); // unused return value GetMonData(&party[i], MON_DATA_ALT_ABILITY); // Unused return value.
for (opposingBank = GetBattlerAtPosition(opposingPosition), j = 0; j < 4; j++) for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < 4; j++)
{ {
move = GetMonData(&party[i], MON_DATA_MOVE1 + j); move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
if (move == MOVE_NONE) if (move == MOVE_NONE)
continue; continue;
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability); moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % 3 < 2) if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % 3 < 2)
{ {
// we found a mon // We found a mon.
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i; *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE; return TRUE;
@@ -108,12 +110,12 @@ static bool8 ShouldSwitchIfWonderGuard(void)
} }
} }
return FALSE; // at this point there is not a single pokemon in the party that has a super effective move against a pokemon with wonder guard return FALSE; // There is not a single Pokemon in the party that has a super effective move against a mon with Wonder Guard.
} }
static bool8 FindMonThatAbsorbsOpponentsMove(void) static bool8 FindMonThatAbsorbsOpponentsMove(void)
{ {
u8 bankIn1, bankIn2; u8 battlerIn1, battlerIn2;
u8 absorbingTypeAbility; u8 absorbingTypeAbility;
s32 firstId; s32 firstId;
s32 lastId; // + 1 s32 lastId; // + 1
@@ -131,16 +133,16 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{ {
bankIn1 = gActiveBattler; battlerIn1 = gActiveBattler;
if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))]) if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))])
bankIn2 = gActiveBattler; battlerIn2 = gActiveBattler;
else else
bankIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))); battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)));
} }
else else
{ {
bankIn1 = gActiveBattler; battlerIn1 = gActiveBattler;
bankIn2 = gActiveBattler; battlerIn2 = gActiveBattler;
} }
if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_FIRE) if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_FIRE)
@@ -157,7 +159,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000)) if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{ {
if ((gActiveBattler & BIT_FLANK) == 0) if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3; firstId = 0, lastId = 3;
else else
firstId = 3, lastId = 6; firstId = 3, lastId = 6;
@@ -183,13 +185,13 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
continue; continue;
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
continue; continue;
if (i == gBattlerPartyIndexes[bankIn1]) if (i == gBattlerPartyIndexes[battlerIn1])
continue; continue;
if (i == gBattlerPartyIndexes[bankIn2]) if (i == gBattlerPartyIndexes[battlerIn2])
continue; continue;
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1)) if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue; continue;
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2)) if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue; continue;
species = GetMonData(&party[i], MON_DATA_SPECIES); species = GetMonData(&party[i], MON_DATA_SPECIES);
@@ -200,7 +202,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
if (absorbingTypeAbility == monAbility && Random() & 1) if (absorbingTypeAbility == monAbility && Random() & 1)
{ {
// we found a mon // we found a mon.
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i; *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE; return TRUE;
@@ -221,13 +223,13 @@ static bool8 ShouldSwitchIfNaturalCure(void)
if ((gLastLandedMoves[gActiveBattler] == 0 || gLastLandedMoves[gActiveBattler] == 0xFFFF) && Random() & 1) if ((gLastLandedMoves[gActiveBattler] == 0 || gLastLandedMoves[gActiveBattler] == 0xFFFF) && Random() & 1)
{ {
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6; *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE; return TRUE;
} }
else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0 && Random() & 1) else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0 && Random() & 1)
{ {
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6; *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE; return TRUE;
} }
@@ -236,9 +238,10 @@ static bool8 ShouldSwitchIfNaturalCure(void)
return TRUE; return TRUE;
if (FindMonWithFlagsAndSuperEffective(MOVE_RESULT_NOT_VERY_EFFECTIVE, 1)) if (FindMonWithFlagsAndSuperEffective(MOVE_RESULT_NOT_VERY_EFFECTIVE, 1))
return TRUE; return TRUE;
if (Random() & 1) if (Random() & 1)
{ {
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6; *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE; return TRUE;
} }
@@ -249,15 +252,15 @@ static bool8 ShouldSwitchIfNaturalCure(void)
static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng) static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
{ {
u8 opposingPosition; u8 opposingPosition;
u8 opposingBank; u8 opposingBattler;
s32 i; s32 i;
u8 moveFlags; u8 moveFlags;
u16 move; u16 move;
opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(gActiveBattler)); opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(gActiveBattler));
opposingBank = GetBattlerAtPosition(opposingPosition); opposingBattler = GetBattlerAtPosition(opposingPosition);
if (!(gAbsentBattlerFlags & gBitTable[opposingBank])) if (!(gAbsentBattlerFlags & gBitTable[opposingBattler]))
{ {
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
@@ -265,7 +268,7 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
if (move == MOVE_NONE) if (move == MOVE_NONE)
continue; continue;
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability); moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE) if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
{ {
if (noRng) if (noRng)
@@ -278,9 +281,9 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
return FALSE; return FALSE;
opposingBank = GetBattlerAtPosition(BATTLE_PARTNER(opposingPosition)); opposingBattler = GetBattlerAtPosition(BATTLE_PARTNER(opposingPosition));
if (!(gAbsentBattlerFlags & gBitTable[opposingBank])) if (!(gAbsentBattlerFlags & gBitTable[opposingBattler]))
{ {
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
@@ -288,7 +291,7 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
if (move == MOVE_NONE) if (move == MOVE_NONE)
continue; continue;
moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability); moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE) if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
{ {
if (noRng) if (noRng)
@@ -318,7 +321,7 @@ static bool8 AreStatsRaised(void)
static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
{ {
u8 bankIn1, bankIn2; u8 battlerIn1, battlerIn2;
s32 firstId; s32 firstId;
s32 lastId; // + 1 s32 lastId; // + 1
struct Pokemon *party; struct Pokemon *party;
@@ -337,16 +340,16 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{ {
bankIn1 = gActiveBattler; battlerIn1 = gActiveBattler;
if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))]) if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))])
bankIn2 = gActiveBattler; battlerIn2 = gActiveBattler;
else else
bankIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))); battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)));
} }
else else
{ {
bankIn1 = gActiveBattler; battlerIn1 = gActiveBattler;
bankIn2 = gActiveBattler; battlerIn2 = gActiveBattler;
} }
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000)) if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
@@ -377,13 +380,13 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
continue; continue;
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
continue; continue;
if (i == gBattlerPartyIndexes[bankIn1]) if (i == gBattlerPartyIndexes[battlerIn1])
continue; continue;
if (i == gBattlerPartyIndexes[bankIn2]) if (i == gBattlerPartyIndexes[battlerIn2])
continue; continue;
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1)) if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue; continue;
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2)) if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue; continue;
species = GetMonData(&party[i], MON_DATA_SPECIES); species = GetMonData(&party[i], MON_DATA_SPECIES);
@@ -395,7 +398,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBattler], species, monAbility); moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBattler], species, monAbility);
if (moveFlags & flags) if (moveFlags & flags)
{ {
bankIn1 = gLastHitBy[gActiveBattler]; battlerIn1 = gLastHitBy[gActiveBattler];
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
{ {
@@ -403,7 +406,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
if (move == 0) if (move == 0)
continue; continue;
moveFlags = AI_TypeCalc(move, gBattleMons[bankIn1].species, gBattleMons[bankIn1].ability); moveFlags = AI_TypeCalc(move, gBattleMons[battlerIn1].species, gBattleMons[battlerIn1].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % moduloPercent == 0) if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % moduloPercent == 0)
{ {
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i; *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i;
@@ -419,23 +422,23 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
static bool8 ShouldSwitch(void) static bool8 ShouldSwitch(void)
{ {
u8 bankIn1, bankIn2; u8 battlerIn1, battlerIn2;
u8 *activeBankPtr; // needed to match u8 *activeBattlerPtr; // Needed to match.
s32 firstId; s32 firstId;
s32 lastId; // + 1 s32 lastId; // + 1
struct Pokemon *party; struct Pokemon *party;
s32 i; s32 i;
s32 availableToSwitch; s32 availableToSwitch;
if (gBattleMons[*(activeBankPtr = &gActiveBattler)].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) if (gBattleMons[*(activeBattlerPtr = &gActiveBattler)].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
return FALSE; return FALSE;
if (gStatuses3[gActiveBattler] & STATUS3_ROOTED) if (gStatuses3[gActiveBattler] & STATUS3_ROOTED)
return FALSE; return FALSE;
if (AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_SHADOW_TAG, 0, 0)) if (ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG))
return FALSE; return FALSE;
if (AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_ARENA_TRAP, 0, 0)) if (ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) // Misses the flying type and Levitate check.
return FALSE; // misses the flying or levitate check return FALSE;
if (AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MAGNET_PULL, 0, 0)) if (ABILITY_ON_FIELD2(ABILITY_MAGNET_PULL))
{ {
if (gBattleMons[gActiveBattler].type1 == TYPE_STEEL) if (gBattleMons[gActiveBattler].type1 == TYPE_STEEL)
return FALSE; return FALSE;
@@ -448,21 +451,21 @@ static bool8 ShouldSwitch(void)
availableToSwitch = 0; availableToSwitch = 0;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{ {
bankIn1 = *activeBankPtr; battlerIn1 = *activeBattlerPtr;
if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(*activeBankPtr) ^ BIT_FLANK)]) if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(*activeBattlerPtr) ^ BIT_FLANK)])
bankIn2 = *activeBankPtr; battlerIn2 = *activeBattlerPtr;
else else
bankIn2 = GetBattlerAtPosition(GetBattlerPosition(*activeBankPtr) ^ BIT_FLANK); battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(*activeBattlerPtr) ^ BIT_FLANK);
} }
else else
{ {
bankIn1 = *activeBankPtr; battlerIn1 = *activeBattlerPtr;
bankIn2 = *activeBankPtr; battlerIn2 = *activeBattlerPtr;
} }
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000)) if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{ {
if ((gActiveBattler & BIT_FLANK) == 0) if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3; firstId = 0, lastId = 3;
else else
firstId = 3, lastId = 6; firstId = 3, lastId = 6;
@@ -485,13 +488,13 @@ static bool8 ShouldSwitch(void)
continue; continue;
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
continue; continue;
if (i == gBattlerPartyIndexes[bankIn1]) if (i == gBattlerPartyIndexes[battlerIn1])
continue; continue;
if (i == gBattlerPartyIndexes[bankIn2]) if (i == gBattlerPartyIndexes[battlerIn2])
continue; continue;
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1)) if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue; continue;
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2)) if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue; continue;
availableToSwitch++; availableToSwitch++;
@@ -521,10 +524,10 @@ static bool8 ShouldSwitch(void)
void AI_TrySwitchOrUseItem(void) void AI_TrySwitchOrUseItem(void)
{ {
struct Pokemon *party; struct Pokemon *party;
u8 bankIn1, bankIn2; u8 battlerIn1, battlerIn2;
s32 firstId; s32 firstId;
s32 lastId; // + 1 s32 lastId; // + 1
u8 bankIdentity = GetBattlerPosition(gActiveBattler); u8 battlerIdentity = GetBattlerPosition(gActiveBattler);
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
party = gPlayerParty; party = gPlayerParty;
@@ -535,25 +538,25 @@ void AI_TrySwitchOrUseItem(void)
{ {
if (ShouldSwitch()) if (ShouldSwitch())
{ {
if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == 6) if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == PARTY_SIZE)
{ {
s32 monToSwitchId = GetMostSuitableMonToSwitchInto(); s32 monToSwitchId = GetMostSuitableMonToSwitchInto();
if (monToSwitchId == 6) if (monToSwitchId == PARTY_SIZE)
{ {
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{ {
bankIn1 = GetBattlerAtPosition(bankIdentity); battlerIn1 = GetBattlerAtPosition(battlerIdentity);
bankIn2 = bankIn1; battlerIn2 = battlerIn1;
} }
else else
{ {
bankIn1 = GetBattlerAtPosition(bankIdentity); battlerIn1 = GetBattlerAtPosition(battlerIdentity);
bankIn2 = GetBattlerAtPosition(bankIdentity ^ BIT_FLANK); battlerIn2 = GetBattlerAtPosition(battlerIdentity ^ BIT_FLANK);
} }
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000)) if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{ {
if ((gActiveBattler & BIT_FLANK) == 0) if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3; firstId = 0, lastId = 3;
else else
firstId = 3, lastId = 6; firstId = 3, lastId = 6;
@@ -567,13 +570,13 @@ void AI_TrySwitchOrUseItem(void)
{ {
if (GetMonData(&party[monToSwitchId], MON_DATA_HP) == 0) if (GetMonData(&party[monToSwitchId], MON_DATA_HP) == 0)
continue; continue;
if (monToSwitchId == gBattlerPartyIndexes[bankIn1]) if (monToSwitchId == gBattlerPartyIndexes[battlerIn1])
continue; continue;
if (monToSwitchId == gBattlerPartyIndexes[bankIn2]) if (monToSwitchId == gBattlerPartyIndexes[battlerIn2])
continue; continue;
if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + bankIn1)) if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue; continue;
if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + bankIn2)) if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue; continue;
break; break;
@@ -608,10 +611,10 @@ static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8
} }
else if (TYPE_EFFECT_ATK_TYPE(i) == atkType) else if (TYPE_EFFECT_ATK_TYPE(i) == atkType)
{ {
// check type1 // Check type1.
if (TYPE_EFFECT_DEF_TYPE(i) == defType1) if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10; *var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
// check type2 // Check type2.
if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10; *var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
} }
@@ -621,10 +624,10 @@ static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8
u8 GetMostSuitableMonToSwitchInto(void) u8 GetMostSuitableMonToSwitchInto(void)
{ {
u8 opposingBank; u8 opposingBattler;
u8 bestDmg; // note : should be changed to u32 for obvious reasons u8 bestDmg; // Note : should be changed to u32 for obvious reasons.
u8 bestMonId; u8 bestMonId;
u8 bankIn1, bankIn2; u8 battlerIn1, battlerIn2;
s32 firstId; s32 firstId;
s32 lastId; // + 1 s32 lastId; // + 1
struct Pokemon *party; struct Pokemon *party;
@@ -632,34 +635,34 @@ u8 GetMostSuitableMonToSwitchInto(void)
u8 invalidMons; u8 invalidMons;
u16 move; u16 move;
if (*(gBattleStruct->monToSwitchIntoId + gActiveBattler) != 6) if (*(gBattleStruct->monToSwitchIntoId + gActiveBattler) != PARTY_SIZE)
return *(gBattleStruct->monToSwitchIntoId + gActiveBattler); return *(gBattleStruct->monToSwitchIntoId + gActiveBattler);
if (gBattleTypeFlags & BATTLE_TYPE_ARENA) if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
return gBattlerPartyIndexes[gActiveBattler] + 1; return gBattlerPartyIndexes[gActiveBattler] + 1;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{ {
bankIn1 = gActiveBattler; battlerIn1 = gActiveBattler;
if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)]) if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)])
bankIn2 = gActiveBattler; battlerIn2 = gActiveBattler;
else else
bankIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK); battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK);
// UB: It considers the opponent only player's side even though it can battle alongside player; // UB: It considers the opponent only player's side even though it can battle alongside player.
opposingBank = Random() & BIT_FLANK; opposingBattler = Random() & BIT_FLANK;
if (gAbsentBattlerFlags & gBitTable[opposingBank]) if (gAbsentBattlerFlags & gBitTable[opposingBattler])
opposingBank ^= BIT_FLANK; opposingBattler ^= BIT_FLANK;
} }
else else
{ {
opposingBank = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_SIDE); opposingBattler = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_SIDE);
bankIn1 = gActiveBattler; battlerIn1 = gActiveBattler;
bankIn2 = gActiveBattler; battlerIn2 = gActiveBattler;
} }
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000)) if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{ {
if ((gActiveBattler & BIT_FLANK) == 0) if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3; firstId = 0, lastId = 3;
else else
firstId = 3, lastId = 6; firstId = 3, lastId = 6;
@@ -676,27 +679,27 @@ u8 GetMostSuitableMonToSwitchInto(void)
invalidMons = 0; invalidMons = 0;
while (invalidMons != 0x3F) // all mons are invalid while (invalidMons != 0x3F) // All mons are invalid.
{ {
bestDmg = 0; bestDmg = 0;
bestMonId = 6; bestMonId = 6;
// find the mon which type is the most suitable offensively // Find the mon whose type is the most suitable offensively.
for (i = firstId; i < lastId; i++) for (i = firstId; i < lastId; i++)
{ {
u16 species = GetMonData(&party[i], MON_DATA_SPECIES); u16 species = GetMonData(&party[i], MON_DATA_SPECIES);
if (species != SPECIES_NONE if (species != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_HP) != 0 && GetMonData(&party[i], MON_DATA_HP) != 0
&& !(gBitTable[i] & invalidMons) && !(gBitTable[i] & invalidMons)
&& gBattlerPartyIndexes[bankIn1] != i && gBattlerPartyIndexes[battlerIn1] != i
&& gBattlerPartyIndexes[bankIn2] != i && gBattlerPartyIndexes[battlerIn2] != i
&& i != *(gBattleStruct->monToSwitchIntoId + bankIn1) && i != *(gBattleStruct->monToSwitchIntoId + battlerIn1)
&& i != *(gBattleStruct->monToSwitchIntoId + bankIn2)) && i != *(gBattleStruct->monToSwitchIntoId + battlerIn2))
{ {
u8 type1 = gBaseStats[species].type1; u8 type1 = gBaseStats[species].type1;
u8 type2 = gBaseStats[species].type2; u8 type2 = gBaseStats[species].type2;
u8 typeDmg = 10; u8 typeDmg = 10;
ModulateByTypeEffectiveness(gBattleMons[opposingBank].type1, type1, type2, &typeDmg); ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type1, type1, type2, &typeDmg);
ModulateByTypeEffectiveness(gBattleMons[opposingBank].type2, type1, type2, &typeDmg); ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type2, type1, type2, &typeDmg);
if (bestDmg < typeDmg) if (bestDmg < typeDmg)
{ {
bestDmg = typeDmg; bestDmg = typeDmg;
@@ -709,24 +712,24 @@ u8 GetMostSuitableMonToSwitchInto(void)
} }
} }
// ok, we know the mon has the right typing but does it have at least one super effective move? // Ok, we know the mon has the right typing but does it have at least one super effective move?
if (bestMonId != 6) if (bestMonId != PARTY_SIZE)
{ {
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i); move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i);
if (move != MOVE_NONE && TypeCalc(move, gActiveBattler, opposingBank) & MOVE_RESULT_SUPER_EFFECTIVE) if (move != MOVE_NONE && TypeCalc(move, gActiveBattler, opposingBattler) & MOVE_RESULT_SUPER_EFFECTIVE)
break; break;
} }
if (i != 4) if (i != 4)
return bestMonId; // has both the typing and at least one super effective move return bestMonId; // Has both the typing and at least one super effective move.
invalidMons |= gBitTable[bestMonId]; // sorry buddy, we want something better invalidMons |= gBitTable[bestMonId]; // Sorry buddy, we want something better.
} }
else else
{ {
invalidMons = 0x3F; // no viable mon to switch invalidMons = 0x3F; // No viable mon to switch.
} }
} }
@@ -738,20 +741,20 @@ u8 GetMostSuitableMonToSwitchInto(void)
bestDmg = 0; bestDmg = 0;
bestMonId = 6; bestMonId = 6;
// if we couldn't find the best mon in terms of typing, find the one that deals most damage // If we couldn't find the best mon in terms of typing, find the one that deals most damage.
for (i = firstId; i < lastId; i++) for (i = firstId; i < lastId; i++)
{ {
if ((u16)(GetMonData(&party[i], MON_DATA_SPECIES)) == SPECIES_NONE) if ((u16)(GetMonData(&party[i], MON_DATA_SPECIES)) == SPECIES_NONE)
continue; continue;
if (GetMonData(&party[i], MON_DATA_HP) == 0) if (GetMonData(&party[i], MON_DATA_HP) == 0)
continue; continue;
if (gBattlerPartyIndexes[bankIn1] == i) if (gBattlerPartyIndexes[battlerIn1] == i)
continue; continue;
if (gBattlerPartyIndexes[bankIn2] == i) if (gBattlerPartyIndexes[battlerIn2] == i)
continue; continue;
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1)) if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue; continue;
if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2)) if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue; continue;
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
@@ -760,8 +763,8 @@ u8 GetMostSuitableMonToSwitchInto(void)
gBattleMoveDamage = 0; gBattleMoveDamage = 0;
if (move != MOVE_NONE && gBattleMoves[move].power != 1) if (move != MOVE_NONE && gBattleMoves[move].power != 1)
{ {
AI_CalcDmg(gActiveBattler, opposingBank); AI_CalcDmg(gActiveBattler, opposingBattler);
TypeCalc(move, gActiveBattler, opposingBank); TypeCalc(move, gActiveBattler, opposingBattler);
} }
if (bestDmg < gBattleMoveDamage) if (bestDmg < gBattleMoveDamage)
{ {
@@ -774,21 +777,21 @@ u8 GetMostSuitableMonToSwitchInto(void)
return bestMonId; return bestMonId;
} }
// TODO: use PokemonItemEffect struct instead of u8 once it's documented // TODO: use PokemonItemEffect struct instead of u8 once it's documented.
static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u16 as item Id argument static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u16 as item Id argument
{ {
if (itemId == ITEM_FULL_RESTORE) if (itemId == ITEM_FULL_RESTORE)
return AI_ITEM_FULL_RESTORE; return AI_ITEM_FULL_RESTORE;
if (itemEffect[4] & 4) else if (itemEffect[4] & 4)
return AI_ITEM_HEAL_HP; return AI_ITEM_HEAL_HP;
if (itemEffect[3] & 0x3F) else if (itemEffect[3] & 0x3F)
return AI_ITEM_CURE_CONDITION; return AI_ITEM_CURE_CONDITION;
if (itemEffect[0] & 0x3F || itemEffect[1] != 0 || itemEffect[2] != 0) else if (itemEffect[0] & 0x3F || itemEffect[1] != 0 || itemEffect[2] != 0)
return AI_ITEM_X_STAT; return AI_ITEM_X_STAT;
if (itemEffect[3] & 0x80) else if (itemEffect[3] & 0x80)
return AI_ITEM_GUARD_SPECS; return AI_ITEM_GUARD_SPECS;
else
return AI_ITEM_NOT_RECOGNIZABLE; return AI_ITEM_NOT_RECOGNIZABLE;
} }
static bool8 ShouldUseItem(void) static bool8 ShouldUseItem(void)
@@ -806,7 +809,7 @@ static bool8 ShouldUseItem(void)
else else
party = gEnemyParty; party = gEnemyParty;
for (i = 0; i < 6; i++) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (GetMonData(&party[i], MON_DATA_HP) != 0 if (GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
@@ -821,7 +824,7 @@ static bool8 ShouldUseItem(void)
u16 item; u16 item;
const u8 *itemEffects; const u8 *itemEffects;
u8 paramOffset; u8 paramOffset;
u8 bankSide; u8 battlerSide;
if (i != 0 && validMons > (gBattleResources->battleHistory->itemsNo - i) + 1) if (i != 0 && validMons > (gBattleResources->battleHistory->itemsNo - i) + 1)
continue; continue;
@@ -908,8 +911,8 @@ static bool8 ShouldUseItem(void)
shouldUse = TRUE; shouldUse = TRUE;
break; break;
case AI_ITEM_GUARD_SPECS: case AI_ITEM_GUARD_SPECS:
bankSide = GetBattlerSide(gActiveBattler); battlerSide = GetBattlerSide(gActiveBattler);
if (gDisableStructs[gActiveBattler].isFirstTurn != 0 && gSideTimers[bankSide].mistTimer == 0) if (gDisableStructs[gActiveBattler].isFirstTurn != 0 && gSideTimers[battlerSide].mistTimer == 0)
shouldUse = TRUE; shouldUse = TRUE;
break; break;
case AI_ITEM_NOT_RECOGNIZABLE: case AI_ITEM_NOT_RECOGNIZABLE:
+59 -58
View File
@@ -120,7 +120,7 @@ EWRAM_DATA static u16 sSoundAnimFramesToWait = 0;
EWRAM_DATA static u8 sMonAnimTaskIdArray[2] = {0}; EWRAM_DATA static u8 sMonAnimTaskIdArray[2] = {0};
EWRAM_DATA u8 gAnimMoveTurn = 0; EWRAM_DATA u8 gAnimMoveTurn = 0;
EWRAM_DATA static u8 sAnimBackgroundFadeState = 0; EWRAM_DATA static u8 sAnimBackgroundFadeState = 0;
EWRAM_DATA static u16 sAnimMoveIndex = 0; // set but unused. EWRAM_DATA static u16 sAnimMoveIndex = 0; // Set but unused.
EWRAM_DATA u8 gBattleAnimAttacker = 0; EWRAM_DATA u8 gBattleAnimAttacker = 0;
EWRAM_DATA u8 gBattleAnimTarget = 0; EWRAM_DATA u8 gBattleAnimTarget = 0;
EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0};
@@ -179,6 +179,7 @@ static void (* const sScriptCmdTable[])(void) =
ScriptCmd_stopsound ScriptCmd_stopsound
}; };
// code
void ClearBattleAnimationVars(void) void ClearBattleAnimationVars(void)
{ {
s32 i; s32 i;
@@ -192,11 +193,11 @@ void ClearBattleAnimationVars(void)
gAnimMovePower = 0; gAnimMovePower = 0;
gAnimFriendship = 0; gAnimFriendship = 0;
// clear index array. // Clear index array.
for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++)
sAnimSpriteIndexArray[i] |= 0xFFFF; sAnimSpriteIndexArray[i] |= 0xFFFF;
// clear anim args. // Clear anim args.
for (i = 0; i < ANIM_ARGS_COUNT; i++) for (i = 0; i < ANIM_ARGS_COUNT; i++)
gBattleAnimArgs[i] = 0; gBattleAnimArgs[i] = 0;
@@ -459,7 +460,7 @@ static void ScriptCmd_delay(void)
gAnimScriptCallback = WaitAnimFrameCount; gAnimScriptCallback = WaitAnimFrameCount;
} }
// wait for visual tasks to finish. // Wait for visual tasks to finish.
static void ScriptCmd_waitforvisualfinish(void) static void ScriptCmd_waitforvisualfinish(void)
{ {
if (gAnimVisualTaskCount == 0) if (gAnimVisualTaskCount == 0)
@@ -486,7 +487,7 @@ static void ScriptCmd_end(void)
s32 i; s32 i;
bool32 continuousAnim = FALSE; bool32 continuousAnim = FALSE;
// keep waiting as long as there is animations to be done. // Keep waiting as long as there are animations to be done.
if (gAnimVisualTaskCount != 0 || gAnimSoundTaskCount != 0 if (gAnimVisualTaskCount != 0 || gAnimSoundTaskCount != 0
|| sMonAnimTaskIdArray[0] != 0xFF || sMonAnimTaskIdArray[1] != 0xFF) || sMonAnimTaskIdArray[0] != 0xFF || sMonAnimTaskIdArray[1] != 0xFF)
{ {
@@ -495,10 +496,10 @@ static void ScriptCmd_end(void)
return; return;
} }
// finish the sound effects. // Finish the sound effects.
if (IsSEPlaying()) if (IsSEPlaying())
{ {
if (++sSoundAnimFramesToWait <= 90) // wait 90 frames, then halt the sound effect. if (++sSoundAnimFramesToWait <= 90) // Wait 90 frames, then halt the sound effect.
{ {
gAnimFramesToWait = 1; gAnimFramesToWait = 1;
return; return;
@@ -510,7 +511,7 @@ static void ScriptCmd_end(void)
} }
} }
// the SE has halted, so set the SE Frame Counter to 0 and continue. // The SE has halted, so set the SE Frame Counter to 0 and continue.
sSoundAnimFramesToWait = 0; sSoundAnimFramesToWait = 0;
for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++)
@@ -523,7 +524,7 @@ static void ScriptCmd_end(void)
} }
} }
if (!continuousAnim) // may have been used for debug? if (!continuousAnim) // May have been used for debug?
{ {
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
if (!IsContest()) if (!IsContest())
@@ -592,12 +593,12 @@ static void ScriptCmd_monbg(void)
bool8 toBG_2; bool8 toBG_2;
u8 taskId; u8 taskId;
u8 battlerId; u8 battlerId;
u8 animBank; u8 animBattler;
sBattleAnimScriptPtr++; sBattleAnimScriptPtr++;
animBank = sBattleAnimScriptPtr[0]; animBattler = sBattleAnimScriptPtr[0];
if (animBank & ANIM_TARGET) if (animBattler & ANIM_TARGET)
battlerId = gBattleAnimTarget; battlerId = gBattleAnimTarget;
else else
battlerId = gBattleAnimAttacker; battlerId = gBattleAnimAttacker;
@@ -655,7 +656,7 @@ bool8 IsBattlerSpriteVisible(u8 battlerId)
if (!IsBattlerSpritePresent(battlerId)) if (!IsBattlerSpritePresent(battlerId))
return FALSE; return FALSE;
if (IsContest()) if (IsContest())
return TRUE; // this line wont ever be reached. return TRUE; // This line won't ever be reached.
if (!gBattleSpritesDataPtr->battlerData[battlerId].invisible || !gSprites[gBattlerSpriteIds[battlerId]].invisible) if (!gBattleSpritesDataPtr->battlerData[battlerId].invisible || !gSprites[gBattlerSpriteIds[battlerId]].invisible)
return TRUE; return TRUE;
@@ -847,32 +848,32 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
static void ScriptCmd_clearmonbg(void) static void ScriptCmd_clearmonbg(void)
{ {
u8 animBankId; u8 animBattlerId;
u8 battlerId; u8 battlerId;
u8 taskId; u8 taskId;
sBattleAnimScriptPtr++; sBattleAnimScriptPtr++;
animBankId = sBattleAnimScriptPtr[0]; animBattlerId = sBattleAnimScriptPtr[0];
if (animBankId == ANIM_ATTACKER) if (animBattlerId == ANIM_ATTACKER)
animBankId = ANIM_ATK_PARTNER; animBattlerId = ANIM_ATK_PARTNER;
else if (animBankId == ANIM_TARGET) else if (animBattlerId == ANIM_TARGET)
animBankId = ANIM_DEF_PARTNER; animBattlerId = ANIM_DEF_PARTNER;
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER) if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER)
battlerId = gBattleAnimAttacker; battlerId = gBattleAnimAttacker;
else else
battlerId = gBattleAnimTarget; battlerId = gBattleAnimTarget;
if (sMonAnimTaskIdArray[0] != 0xFF) if (sMonAnimTaskIdArray[0] != 0xFF)
gSprites[gBattlerSpriteIds[battlerId]].invisible = 0; gSprites[gBattlerSpriteIds[battlerId]].invisible = 0;
if (animBankId > 1 && sMonAnimTaskIdArray[1] != 0xFF) if (animBattlerId > 1 && sMonAnimTaskIdArray[1] != 0xFF)
gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0; gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0;
else else
animBankId = 0; animBattlerId = 0;
taskId = CreateTask(sub_80A4980, 5); taskId = CreateTask(sub_80A4980, 5);
gTasks[taskId].data[0] = animBankId; gTasks[taskId].data[0] = animBattlerId;
gTasks[taskId].data[2] = battlerId; gTasks[taskId].data[2] = battlerId;
sBattleAnimScriptPtr++; sBattleAnimScriptPtr++;
@@ -910,18 +911,18 @@ static void ScriptCmd_monbg_22(void)
{ {
bool8 toBG_2; bool8 toBG_2;
u8 battlerId; u8 battlerId;
u8 animBankId; u8 animBattlerId;
sBattleAnimScriptPtr++; sBattleAnimScriptPtr++;
animBankId = sBattleAnimScriptPtr[0]; animBattlerId = sBattleAnimScriptPtr[0];
if (animBankId == ANIM_ATTACKER) if (animBattlerId == ANIM_ATTACKER)
animBankId = ANIM_ATK_PARTNER; animBattlerId = ANIM_ATK_PARTNER;
else if (animBankId == ANIM_TARGET) else if (animBattlerId == ANIM_TARGET)
animBankId = ANIM_DEF_PARTNER; animBattlerId = ANIM_DEF_PARTNER;
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER) if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER)
battlerId = gBattleAnimAttacker; battlerId = gBattleAnimAttacker;
else else
battlerId = gBattleAnimTarget; battlerId = gBattleAnimTarget;
@@ -938,7 +939,7 @@ static void ScriptCmd_monbg_22(void)
} }
battlerId ^= BIT_FLANK; battlerId ^= BIT_FLANK;
if (animBankId > 1 && IsBattlerSpriteVisible(battlerId)) if (animBattlerId > 1 && IsBattlerSpriteVisible(battlerId))
{ {
u8 position = GetBattlerPosition(battlerId); u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
@@ -954,32 +955,32 @@ static void ScriptCmd_monbg_22(void)
static void ScriptCmd_clearmonbg_23(void) static void ScriptCmd_clearmonbg_23(void)
{ {
u8 animBankId; u8 animBattlerId;
u8 battlerId; u8 battlerId;
u8 taskId; u8 taskId;
sBattleAnimScriptPtr++; sBattleAnimScriptPtr++;
animBankId = sBattleAnimScriptPtr[0]; animBattlerId = sBattleAnimScriptPtr[0];
if (animBankId == ANIM_ATTACKER) if (animBattlerId == ANIM_ATTACKER)
animBankId = ANIM_ATK_PARTNER; animBattlerId = ANIM_ATK_PARTNER;
else if (animBankId == ANIM_TARGET) else if (animBattlerId == ANIM_TARGET)
animBankId = ANIM_DEF_PARTNER; animBattlerId = ANIM_DEF_PARTNER;
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER) if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER)
battlerId = gBattleAnimAttacker; battlerId = gBattleAnimAttacker;
else else
battlerId = gBattleAnimTarget; battlerId = gBattleAnimTarget;
if (IsBattlerSpriteVisible(battlerId)) if (IsBattlerSpriteVisible(battlerId))
gSprites[gBattlerSpriteIds[battlerId]].invisible = 0; gSprites[gBattlerSpriteIds[battlerId]].invisible = 0;
if (animBankId > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK)) if (animBattlerId > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK))
gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0; gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0;
else else
animBankId = 0; animBattlerId = 0;
taskId = CreateTask(sub_80A4BB0, 5); taskId = CreateTask(sub_80A4BB0, 5);
gTasks[taskId].data[0] = animBankId; gTasks[taskId].data[0] = animBattlerId;
gTasks[taskId].data[2] = battlerId; gTasks[taskId].data[2] = battlerId;
sBattleAnimScriptPtr++; sBattleAnimScriptPtr++;
@@ -1419,18 +1420,18 @@ void Task_PanFromInitialToTarget(u8 taskId)
pan = currentPan + incrementPan; pan = currentPan + incrementPan;
gTasks[taskId].tCurrentPan = pan; gTasks[taskId].tCurrentPan = pan;
if (incrementPan == 0) // If we're not incrementing, just cancel the task immediately if (incrementPan == 0) // If we're not incrementing, just cancel the task immediately.
{ {
destroyTask = TRUE; destroyTask = TRUE;
} }
else if (initialPanning < targetPanning) // Panning increasing else if (initialPanning < targetPanning) // Panning increasing.
{ {
if (pan >= targetPanning) // Target reached if (pan >= targetPanning) // Target reached.
destroyTask = TRUE; destroyTask = TRUE;
} }
else // Panning decreasing else // Panning decreasing.
{ {
if (pan <= targetPanning) // Target reached if (pan <= targetPanning) // Target reached.
destroyTask = TRUE; destroyTask = TRUE;
} }
@@ -1684,14 +1685,14 @@ static void ScriptCmd_jumpifcontest(void)
static void ScriptCmd_monbgprio_28(void) static void ScriptCmd_monbgprio_28(void)
{ {
u8 wantedBank; u8 wantedBattler;
u8 battlerId; u8 battlerId;
u8 battlerPosition; u8 battlerPosition;
wantedBank = sBattleAnimScriptPtr[1]; wantedBattler = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2; sBattleAnimScriptPtr += 2;
if (wantedBank != ANIM_ATTACKER) if (wantedBattler != ANIM_ATTACKER)
battlerId = gBattleAnimTarget; battlerId = gBattleAnimTarget;
else else
battlerId = gBattleAnimAttacker; battlerId = gBattleAnimAttacker;
@@ -1716,15 +1717,15 @@ static void ScriptCmd_monbgprio_29(void)
static void ScriptCmd_monbgprio_2A(void) static void ScriptCmd_monbgprio_2A(void)
{ {
u8 wantedBank; u8 wantedBattler;
u8 battlerPosition; u8 battlerPosition;
u8 battlerId; u8 battlerId;
wantedBank = sBattleAnimScriptPtr[1]; wantedBattler = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2; sBattleAnimScriptPtr += 2;
if (GetBattlerSide(gBattleAnimAttacker) != GetBattlerSide(gBattleAnimTarget)) if (GetBattlerSide(gBattleAnimAttacker) != GetBattlerSide(gBattleAnimTarget))
{ {
if (wantedBank != ANIM_ATTACKER) if (wantedBattler != ANIM_ATTACKER)
battlerId = gBattleAnimTarget; battlerId = gBattleAnimTarget;
else else
battlerId = gBattleAnimAttacker; battlerId = gBattleAnimAttacker;
@@ -1762,16 +1763,16 @@ static void ScriptCmd_visible(void)
static void ScriptCmd_doublebattle_2D(void) static void ScriptCmd_doublebattle_2D(void)
{ {
u8 wantedBank; u8 wantedBattler;
u8 r4; u8 r4;
u8 spriteId; u8 spriteId;
wantedBank = sBattleAnimScriptPtr[1]; wantedBattler = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2; sBattleAnimScriptPtr += 2;
if (!IsContest() && IsDoubleBattle() if (!IsContest() && IsDoubleBattle()
&& GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
{ {
if (wantedBank == ANIM_ATTACKER) if (wantedBattler == ANIM_ATTACKER)
{ {
r4 = sub_80A8364(gBattleAnimAttacker); r4 = sub_80A8364(gBattleAnimAttacker);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
@@ -1797,16 +1798,16 @@ static void ScriptCmd_doublebattle_2D(void)
static void ScriptCmd_doublebattle_2E(void) static void ScriptCmd_doublebattle_2E(void)
{ {
u8 wantedBank; u8 wantedBattler;
u8 r4; u8 r4;
u8 spriteId; u8 spriteId;
wantedBank = sBattleAnimScriptPtr[1]; wantedBattler = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2; sBattleAnimScriptPtr += 2;
if (!IsContest() && IsDoubleBattle() if (!IsContest() && IsDoubleBattle()
&& GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
{ {
if (wantedBank == ANIM_ATTACKER) if (wantedBattler == ANIM_ATTACKER)
{ {
r4 = sub_80A8364(gBattleAnimAttacker); r4 = sub_80A8364(gBattleAnimAttacker);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+6 -6
View File
@@ -133,13 +133,13 @@ void sub_8158D8C(u8 taskId)
if (gBattleAnimArgs[0] == ANIM_ATTACKER) if (gBattleAnimArgs[0] == ANIM_ATTACKER)
species = gContestResources->field_18->field_0; species = gContestResources->field_18->field_0;
else else
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
} }
else else
{ {
u8 battlerId; u8 battlerId;
// get wanted battler // Get wanted battler.
if (gBattleAnimArgs[0] == ANIM_ATTACKER) if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battlerId = gBattleAnimAttacker; battlerId = gBattleAnimAttacker;
else if (gBattleAnimArgs[0] == ANIM_TARGET) else if (gBattleAnimArgs[0] == ANIM_TARGET)
@@ -149,7 +149,7 @@ void sub_8158D8C(u8 taskId)
else else
battlerId = BATTLE_PARTNER(gBattleAnimTarget); battlerId = BATTLE_PARTNER(gBattleAnimTarget);
// check if battler is visible // Check if battler is visible.
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId)) if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId))
{ {
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
@@ -179,13 +179,13 @@ void sub_8158E9C(u8 taskId)
if (gBattleAnimArgs[0] == ANIM_ATTACKER) if (gBattleAnimArgs[0] == ANIM_ATTACKER)
species = gContestResources->field_18->field_0; species = gContestResources->field_18->field_0;
else else
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
} }
else else
{ {
u8 battlerId; u8 battlerId;
// get wanted battler // Get wanted battler.
if (gBattleAnimArgs[0] == ANIM_ATTACKER) if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battlerId = gBattleAnimAttacker; battlerId = gBattleAnimAttacker;
else if (gBattleAnimArgs[0] == ANIM_TARGET) else if (gBattleAnimArgs[0] == ANIM_TARGET)
@@ -195,7 +195,7 @@ void sub_8158E9C(u8 taskId)
else else
battlerId = BATTLE_PARTNER(gBattleAnimTarget); battlerId = BATTLE_PARTNER(gBattleAnimTarget);
// check if battler is visible // Check if battler is visible.
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId)) if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId))
{ {
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
+49 -49
View File
@@ -32,8 +32,8 @@ struct BattleBackground
extern const struct SpriteTemplate gUnknown_0831A9D0; extern const struct SpriteTemplate gUnknown_0831A9D0;
extern const struct SpriteTemplate gUnknown_0831A9E8; extern const struct SpriteTemplate gUnknown_0831A9E8;
extern const struct CompressedSpriteSheet gUnknown_0831AA00; extern const struct CompressedSpriteSheet gUnknown_0831AA00;
extern const struct BgTemplate gUnknown_0831AA08[4]; extern const struct BgTemplate gBattleBgTemplates[4];
extern const struct WindowTemplate *gUnknown_0831ABA0[]; extern const struct WindowTemplate *const gBattleWindowTemplates[];
extern const struct BattleBackground gBattleTerrainTable[]; extern const struct BattleBackground gBattleTerrainTable[];
extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_X;
@@ -43,23 +43,23 @@ extern u16 gBattle_BG2_Y;
extern u8 GetCurrentMapBattleScene(void); extern u8 GetCurrentMapBattleScene(void);
void sub_8035658(void) void BattleInitBgsAndWindows(void)
{ {
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_0831AA08, ARRAY_COUNT(gUnknown_0831AA08)); InitBgsFromTemplates(0, gBattleBgTemplates, ARRAY_COUNT(gBattleBgTemplates));
if (gBattleTypeFlags & BATTLE_TYPE_ARENA) if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
{ {
gBattleScripting.field_24 = 1; gBattleScripting.windowsType = 1;
SetBgTilemapBuffer(1, gUnknown_02023060); SetBgTilemapBuffer(1, gUnknown_02023060);
SetBgTilemapBuffer(2, gUnknown_02023060); SetBgTilemapBuffer(2, gUnknown_02023060);
} }
else else
{ {
gBattleScripting.field_24 = 0; gBattleScripting.windowsType = 0;
} }
InitWindows(gUnknown_0831ABA0[gBattleScripting.field_24]); InitWindows(gBattleWindowTemplates[gBattleScripting.windowsType]);
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
} }
@@ -67,14 +67,14 @@ void sub_80356D0(void)
{ {
DisableInterrupts(INTR_FLAG_HBLANK); DisableInterrupts(INTR_FLAG_HBLANK);
EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
sub_8035658(); BattleInitBgsAndWindows();
SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0); SetGpuReg(REG_OFFSET_BLDY, 0);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON | DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON | DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
} }
void ApplyPlayerChosenFrameToBattleMenu(void) void LoadBattleMenuWindowGfx(void)
{ {
LoadUserWindowBorderGfx(2, 0x12, 0x10); LoadUserWindowBorderGfx(2, 0x12, 0x10);
LoadUserWindowBorderGfx(2, 0x22, 0x10); LoadUserWindowBorderGfx(2, 0x22, 0x10);
@@ -83,7 +83,7 @@ void ApplyPlayerChosenFrameToBattleMenu(void)
if (gBattleTypeFlags & BATTLE_TYPE_ARENA) if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
{ {
sub_81978B0(0x70); sub_81978B0(0x70);
copy_textbox_border_tile_patterns_to_vram(0, 0x30, 0x70); LoadMessageBoxGfx(0, 0x30, 0x70);
gPlttBufferUnfaded[0x76] = 0; gPlttBufferUnfaded[0x76] = 0;
CpuCopy16(&gPlttBufferUnfaded[0x76], &gPlttBufferFaded[0x76], 2); CpuCopy16(&gPlttBufferUnfaded[0x76], &gPlttBufferFaded[0x76], 2);
} }
@@ -194,12 +194,12 @@ void LoadBattleTextboxAndBackground(void)
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(0);
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40); LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
ApplyPlayerChosenFrameToBattleMenu(); LoadBattleMenuWindowGfx();
DrawMainBattleBackground(); DrawMainBattleBackground();
} }
static void sub_8035AE4(u8 taskId, u8 bank, u8 bgId, u8 destX, u8 destY) static void sub_8035AE4(u8 taskId, u8 battlerId, u8 bgId, u8 destX, u8 destY)
{ {
s32 i; s32 i;
u16 var = 0; u16 var = 0;
@@ -209,7 +209,7 @@ static void sub_8035AE4(u8 taskId, u8 bank, u8 bgId, u8 destX, u8 destY)
{ {
if (gTasks[taskId].data[5] != 0) if (gTasks[taskId].data[5] != 0)
{ {
switch (bank) switch (battlerId)
{ {
case 0: case 0:
var = 0x3F & gTasks[taskId].data[3]; var = 0x3F & gTasks[taskId].data[3];
@@ -227,7 +227,7 @@ static void sub_8035AE4(u8 taskId, u8 bank, u8 bgId, u8 destX, u8 destY)
} }
else else
{ {
switch (bank) switch (battlerId)
{ {
case 0: case 0:
var = 0x3F & gTasks[taskId].data[3]; var = 0x3F & gTasks[taskId].data[3];
@@ -254,7 +254,7 @@ static void sub_8035AE4(u8 taskId, u8 bank, u8 bgId, u8 destX, u8 destY)
} }
else else
{ {
if (bank == gBattleScripting.multiplayerId) if (battlerId == gBattleScripting.multiplayerId)
var = gTasks[taskId].data[3]; var = gTasks[taskId].data[3];
else else
var = gTasks[taskId].data[4]; var = gTasks[taskId].data[4];
@@ -273,7 +273,7 @@ static void sub_8035C4C(void)
{ {
if (gBattleOutcome == B_OUTCOME_DREW) if (gBattleOutcome == B_OUTCOME_DREW)
{ {
BattleHandleAddTextPrinter(gText_Draw, 0x15); BattlePutTextOnWindow(gText_Draw, 0x15);
} }
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
@@ -282,20 +282,20 @@ static void sub_8035C4C(void)
switch (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18) switch (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18)
{ {
case 0: case 0:
BattleHandleAddTextPrinter(gText_Win, 0x16); BattlePutTextOnWindow(gText_Win, 0x16);
BattleHandleAddTextPrinter(gText_Loss, 0x17); BattlePutTextOnWindow(gText_Loss, 0x17);
break; break;
case 1: case 1:
BattleHandleAddTextPrinter(gText_Win, 0x17); BattlePutTextOnWindow(gText_Win, 0x17);
BattleHandleAddTextPrinter(gText_Loss, 0x16); BattlePutTextOnWindow(gText_Loss, 0x16);
break; break;
case 2: case 2:
BattleHandleAddTextPrinter(gText_Win, 0x16); BattlePutTextOnWindow(gText_Win, 0x16);
BattleHandleAddTextPrinter(gText_Loss, 0x17); BattlePutTextOnWindow(gText_Loss, 0x17);
break; break;
case 3: case 3:
BattleHandleAddTextPrinter(gText_Win, 0x17); BattlePutTextOnWindow(gText_Win, 0x17);
BattleHandleAddTextPrinter(gText_Loss, 0x16); BattlePutTextOnWindow(gText_Loss, 0x16);
break; break;
} }
} }
@@ -304,20 +304,20 @@ static void sub_8035C4C(void)
switch (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18) switch (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18)
{ {
case 0: case 0:
BattleHandleAddTextPrinter(gText_Win, 0x17); BattlePutTextOnWindow(gText_Win, 0x17);
BattleHandleAddTextPrinter(gText_Loss, 0x16); BattlePutTextOnWindow(gText_Loss, 0x16);
break; break;
case 1: case 1:
BattleHandleAddTextPrinter(gText_Win, 0x16); BattlePutTextOnWindow(gText_Win, 0x16);
BattleHandleAddTextPrinter(gText_Loss, 0x17); BattlePutTextOnWindow(gText_Loss, 0x17);
break; break;
case 2: case 2:
BattleHandleAddTextPrinter(gText_Win, 0x17); BattlePutTextOnWindow(gText_Win, 0x17);
BattleHandleAddTextPrinter(gText_Loss, 0x16); BattlePutTextOnWindow(gText_Loss, 0x16);
break; break;
case 3: case 3:
BattleHandleAddTextPrinter(gText_Win, 0x16); BattlePutTextOnWindow(gText_Win, 0x16);
BattleHandleAddTextPrinter(gText_Loss, 0x17); BattlePutTextOnWindow(gText_Loss, 0x17);
break; break;
} }
} }
@@ -326,26 +326,26 @@ static void sub_8035C4C(void)
{ {
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 != 0) if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 != 0)
{ {
BattleHandleAddTextPrinter(gText_Win, 0x17); BattlePutTextOnWindow(gText_Win, 0x17);
BattleHandleAddTextPrinter(gText_Loss, 0x16); BattlePutTextOnWindow(gText_Loss, 0x16);
} }
else else
{ {
BattleHandleAddTextPrinter(gText_Win, 0x16); BattlePutTextOnWindow(gText_Win, 0x16);
BattleHandleAddTextPrinter(gText_Loss, 0x17); BattlePutTextOnWindow(gText_Loss, 0x17);
} }
} }
else else
{ {
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 != 0) if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 != 0)
{ {
BattleHandleAddTextPrinter(gText_Win, 0x16); BattlePutTextOnWindow(gText_Win, 0x16);
BattleHandleAddTextPrinter(gText_Loss, 0x17); BattlePutTextOnWindow(gText_Loss, 0x17);
} }
else else
{ {
BattleHandleAddTextPrinter(gText_Win, 0x17); BattlePutTextOnWindow(gText_Win, 0x17);
BattleHandleAddTextPrinter(gText_Loss, 0x16); BattlePutTextOnWindow(gText_Loss, 0x16);
} }
} }
} }
@@ -369,19 +369,19 @@ void sub_8035D74(u8 taskId)
switch (linkPlayer->lp_field_18) switch (linkPlayer->lp_field_18)
{ {
case 0: case 0:
BattleHandleAddTextPrinter(name, 0x11); BattlePutTextOnWindow(name, 0x11);
sub_8035AE4(taskId, linkPlayer->lp_field_18, 1, 2, 4); sub_8035AE4(taskId, linkPlayer->lp_field_18, 1, 2, 4);
break; break;
case 1: case 1:
BattleHandleAddTextPrinter(name, 0x12); BattlePutTextOnWindow(name, 0x12);
sub_8035AE4(taskId, linkPlayer->lp_field_18, 2, 2, 4); sub_8035AE4(taskId, linkPlayer->lp_field_18, 2, 2, 4);
break; break;
case 2: case 2:
BattleHandleAddTextPrinter(name, 0x13); BattlePutTextOnWindow(name, 0x13);
sub_8035AE4(taskId, linkPlayer->lp_field_18, 1, 2, 8); sub_8035AE4(taskId, linkPlayer->lp_field_18, 1, 2, 8);
break; break;
case 3: case 3:
BattleHandleAddTextPrinter(name, 0x14); BattlePutTextOnWindow(name, 0x14);
sub_8035AE4(taskId, linkPlayer->lp_field_18, 2, 2, 8); sub_8035AE4(taskId, linkPlayer->lp_field_18, 2, 2, 8);
break; break;
} }
@@ -397,10 +397,10 @@ void sub_8035D74(u8 taskId)
opponentId = playerId, playerId = opponentId_copy; opponentId = playerId, playerId = opponentId_copy;
name = gLinkPlayers[playerId].name; name = gLinkPlayers[playerId].name;
BattleHandleAddTextPrinter(name, 0xF); BattlePutTextOnWindow(name, 0xF);
name = gLinkPlayers[opponentId].name; name = gLinkPlayers[opponentId].name;
BattleHandleAddTextPrinter(name, 0x10); BattlePutTextOnWindow(name, 0x10);
sub_8035AE4(taskId, playerId, 1, 2, 7); sub_8035AE4(taskId, playerId, 1, 2, 7);
sub_8035AE4(taskId, opponentId, 2, 2, 7); sub_8035AE4(taskId, opponentId, 2, 2, 7);
@@ -458,7 +458,7 @@ void sub_8035D74(u8 taskId)
} }
} }
void LoadBattleEntryBackground(void) void DrawBattleEntryBackground(void)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{ {
@@ -479,7 +479,7 @@ void LoadBattleEntryBackground(void)
} }
else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_EREADER_TRAINER)) else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_EREADER_TRAINER))
{ {
if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId == STEVEN_PARTNER_ID) if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{ {
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(VRAM + 0x4000)); LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(VRAM + 0xE000)); LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(VRAM + 0xE000));
@@ -741,7 +741,7 @@ bool8 LoadChosenBattleElement(u8 caseId)
} }
break; break;
case 6: case 6:
ApplyPlayerChosenFrameToBattleMenu(); LoadBattleMenuWindowGfx();
break; break;
default: default:
ret = TRUE; ret = TRUE;
+24 -25
View File
@@ -34,7 +34,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *); extern void sub_81851A8(u8 *);
extern u16 sub_8068B48(void); extern u16 sub_8068B48(void);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -89,8 +88,8 @@ static void LinkOpponentHandleFaintingCry(void);
static void LinkOpponentHandleIntroSlide(void); static void LinkOpponentHandleIntroSlide(void);
static void LinkOpponentHandleIntroTrainerBallThrow(void); static void LinkOpponentHandleIntroTrainerBallThrow(void);
static void LinkOpponentHandleDrawPartyStatusSummary(void); static void LinkOpponentHandleDrawPartyStatusSummary(void);
static void LinkOpponentHandleCmd49(void); static void LinkOpponentHandleHidePartyStatusSummary(void);
static void LinkOpponentHandleCmd50(void); static void LinkOpponentHandleEndBounceEffect(void);
static void LinkOpponentHandleSpriteInvisibility(void); static void LinkOpponentHandleSpriteInvisibility(void);
static void LinkOpponentHandleBattleAnimation(void); static void LinkOpponentHandleBattleAnimation(void);
static void LinkOpponentHandleLinkStandbyMsg(void); static void LinkOpponentHandleLinkStandbyMsg(void);
@@ -161,8 +160,8 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
LinkOpponentHandleIntroSlide, LinkOpponentHandleIntroSlide,
LinkOpponentHandleIntroTrainerBallThrow, LinkOpponentHandleIntroTrainerBallThrow,
LinkOpponentHandleDrawPartyStatusSummary, LinkOpponentHandleDrawPartyStatusSummary,
LinkOpponentHandleCmd49, LinkOpponentHandleHidePartyStatusSummary,
LinkOpponentHandleCmd50, LinkOpponentHandleEndBounceEffect,
LinkOpponentHandleSpriteInvisibility, LinkOpponentHandleSpriteInvisibility,
LinkOpponentHandleBattleAnimation, LinkOpponentHandleBattleAnimation,
LinkOpponentHandleLinkStandbyMsg, LinkOpponentHandleLinkStandbyMsg,
@@ -191,7 +190,7 @@ static void LinkOpponentBufferRunCommand(void)
} }
} }
static void CompleteOnBankSpriteCallbackDummy(void) static void CompleteOnBattlerSpriteCallbackDummy(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
@@ -395,7 +394,7 @@ static void sub_8064B04(void)
static void CompleteOnHealthbarDone(void) static void CompleteOnHealthbarDone(void)
{ {
s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1135,9 +1134,9 @@ static void LinkOpponentHandleLoadMonSprite(void)
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
sub_806A068(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler)); sub_80A82E4(gActiveBattler));
@@ -1168,10 +1167,10 @@ static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
sub_806A068(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite( gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C, &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId)); sub_80A82E4(battlerId));
@@ -1302,8 +1301,8 @@ static void LinkOpponentHandleDrawTrainerPic(void)
} }
DecompressTrainerFrontPic(trainerPicId, gActiveBattler); DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos, xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
sub_80A82E4(gActiveBattler)); sub_80A82E4(gActiveBattler));
@@ -1314,7 +1313,7 @@ static void LinkOpponentHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
static void LinkOpponentHandleTrainerSlide(void) static void LinkOpponentHandleTrainerSlide(void)
@@ -1327,8 +1326,8 @@ static void LinkOpponentHandleTrainerSlide(void)
trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B); trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler); DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, 176, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, 0x1E); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 176, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, 0x1E);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 96; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 96;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.x += 32; gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.x += 32;
@@ -1366,7 +1365,7 @@ static void LinkOpponentHandleFaintAnimation(void)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_OPPONENT); PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_OPPONENT);
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039934; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[gActiveBattler] = sub_8064C14; gBattlerControllerFuncs[gActiveBattler] = sub_8064C14;
} }
} }
@@ -1475,7 +1474,7 @@ static void LinkOpponentHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
BattleTv_SetDataBasedOnString(*stringId); BattleTv_SetDataBasedOnString(*stringId);
} }
@@ -1716,8 +1715,8 @@ static void LinkOpponentHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_8067618, 5); taskId = CreateTask(sub_8067618, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_28; gBattlerControllerFuncs[gActiveBattler] = nullsub_28;
@@ -1762,7 +1761,7 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
if (gBattleBufferA[gActiveBattler][2] != 0) if (gBattleBufferA[gActiveBattler][2] != 0)
{ {
@@ -1796,14 +1795,14 @@ static void sub_806782C(void)
} }
} }
static void LinkOpponentHandleCmd49(void) static void LinkOpponentHandleHidePartyStatusSummary(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
static void LinkOpponentHandleCmd50(void) static void LinkOpponentHandleEndBounceEffect(void)
{ {
LinkOpponentBufferExecCompleted(); LinkOpponentBufferExecCompleted();
} }
+26 -26
View File
@@ -12,6 +12,7 @@
#include "util.h" #include "util.h"
#include "main.h" #include "main.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/trainers.h"
#include "sound.h" #include "sound.h"
#include "window.h" #include "window.h"
#include "m4a.h" #include "m4a.h"
@@ -33,7 +34,6 @@ extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *); extern void sub_81851A8(u8 *);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -87,8 +87,8 @@ static void LinkPartnerHandleFaintingCry(void);
static void LinkPartnerHandleIntroSlide(void); static void LinkPartnerHandleIntroSlide(void);
static void LinkPartnerHandleIntroTrainerBallThrow(void); static void LinkPartnerHandleIntroTrainerBallThrow(void);
static void LinkPartnerHandleDrawPartyStatusSummary(void); static void LinkPartnerHandleDrawPartyStatusSummary(void);
static void LinkPartnerHandleCmd49(void); static void LinkPartnerHandleHidePartyStatusSummary(void);
static void LinkPartnerHandleCmd50(void); static void LinkPartnerHandleEndBounceEffect(void);
static void LinkPartnerHandleSpriteInvisibility(void); static void LinkPartnerHandleSpriteInvisibility(void);
static void LinkPartnerHandleBattleAnimation(void); static void LinkPartnerHandleBattleAnimation(void);
static void LinkPartnerHandleLinkStandbyMsg(void); static void LinkPartnerHandleLinkStandbyMsg(void);
@@ -158,8 +158,8 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
LinkPartnerHandleIntroSlide, LinkPartnerHandleIntroSlide,
LinkPartnerHandleIntroTrainerBallThrow, LinkPartnerHandleIntroTrainerBallThrow,
LinkPartnerHandleDrawPartyStatusSummary, LinkPartnerHandleDrawPartyStatusSummary,
LinkPartnerHandleCmd49, LinkPartnerHandleHidePartyStatusSummary,
LinkPartnerHandleCmd50, LinkPartnerHandleEndBounceEffect,
LinkPartnerHandleSpriteInvisibility, LinkPartnerHandleSpriteInvisibility,
LinkPartnerHandleBattleAnimation, LinkPartnerHandleBattleAnimation,
LinkPartnerHandleLinkStandbyMsg, LinkPartnerHandleLinkStandbyMsg,
@@ -188,7 +188,7 @@ static void LinkPartnerBufferRunCommand(void)
} }
} }
static void CompleteOnBankSpriteCallbackDummy(void) static void CompleteOnBattlerSpriteCallbackDummy(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
@@ -279,7 +279,7 @@ static void sub_814B290(void)
static void CompleteOnHealthbarDone(void) static void CompleteOnHealthbarDone(void)
{ {
s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1023,9 +1023,9 @@ static void LinkPartnerHandleLoadMonSprite(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
sub_806A068(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler)); sub_80A82E4(gActiveBattler));
@@ -1053,10 +1053,10 @@ static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
sub_806A068(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite( gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C, &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId)); sub_80A82E4(battlerId));
@@ -1133,12 +1133,12 @@ static void LinkPartnerHandleDrawTrainerPic(void)
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN)
{ {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + BACK_PIC_RED; trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RED;
} }
else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE)
{ {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + BACK_PIC_RS_BRENDAN; trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
} }
else else
{ {
@@ -1146,15 +1146,15 @@ static void LinkPartnerHandleDrawTrainerPic(void)
} }
DecompressTrainerBackPic(trainerPicId, gActiveBattler); DecompressTrainerBackPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, sub_80A82E4(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
static void LinkPartnerHandleTrainerSlide(void) static void LinkPartnerHandleTrainerSlide(void)
@@ -1299,7 +1299,7 @@ static void LinkPartnerHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
BattleTv_SetDataBasedOnString(*stringId); BattleTv_SetDataBasedOnString(*stringId);
} }
@@ -1545,12 +1545,12 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN)
{ {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + BACK_PIC_RED; trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RED;
} }
else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE) || (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE)
{ {
trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + BACK_PIC_RS_BRENDAN; trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
} }
else else
{ {
@@ -1564,8 +1564,8 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_814DCCC, 5); taskId = CreateTask(sub_814DCCC, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_112; gBattlerControllerFuncs[gActiveBattler] = nullsub_112;
@@ -1611,7 +1611,7 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
@@ -1631,14 +1631,14 @@ static void sub_814DE9C(void)
} }
} }
static void LinkPartnerHandleCmd49(void) static void LinkPartnerHandleHidePartyStatusSummary(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
static void LinkPartnerHandleCmd50(void) static void LinkPartnerHandleEndBounceEffect(void)
{ {
LinkPartnerBufferExecCompleted(); LinkPartnerBufferExecCompleted();
} }
+30 -30
View File
@@ -16,6 +16,7 @@
#include "constants/songs.h" #include "constants/songs.h"
#include "sound.h" #include "sound.h"
#include "constants/moves.h" #include "constants/moves.h"
#include "constants/trainers.h"
#include "window.h" #include "window.h"
#include "m4a.h" #include "m4a.h"
#include "palette.h" #include "palette.h"
@@ -37,9 +38,8 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern void sub_81A57E4(u8 battlerId, u16 stringId); extern void sub_81A57E4(u8 battlerId, u16 stringId);
extern u8 sub_81A4CB0(void); extern u8 GetFrontierBrainTrainerPicIndex(void);
extern u8 sub_81D5588(u16 trainerId); extern u8 sub_81D5588(u16 trainerId);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
extern u8 GetEreaderTrainerFrontSpriteId(void); extern u8 GetEreaderTrainerFrontSpriteId(void);
@@ -94,8 +94,8 @@ static void OpponentHandleFaintingCry(void);
static void OpponentHandleIntroSlide(void); static void OpponentHandleIntroSlide(void);
static void OpponentHandleIntroTrainerBallThrow(void); static void OpponentHandleIntroTrainerBallThrow(void);
static void OpponentHandleDrawPartyStatusSummary(void); static void OpponentHandleDrawPartyStatusSummary(void);
static void OpponentHandleCmd49(void); static void OpponentHandleHidePartyStatusSummary(void);
static void OpponentHandleCmd50(void); static void OpponentHandleEndBounceEffect(void);
static void OpponentHandleSpriteInvisibility(void); static void OpponentHandleSpriteInvisibility(void);
static void OpponentHandleBattleAnimation(void); static void OpponentHandleBattleAnimation(void);
static void OpponentHandleLinkStandbyMsg(void); static void OpponentHandleLinkStandbyMsg(void);
@@ -166,8 +166,8 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
OpponentHandleIntroSlide, OpponentHandleIntroSlide,
OpponentHandleIntroTrainerBallThrow, OpponentHandleIntroTrainerBallThrow,
OpponentHandleDrawPartyStatusSummary, OpponentHandleDrawPartyStatusSummary,
OpponentHandleCmd49, OpponentHandleHidePartyStatusSummary,
OpponentHandleCmd50, OpponentHandleEndBounceEffect,
OpponentHandleSpriteInvisibility, OpponentHandleSpriteInvisibility,
OpponentHandleBattleAnimation, OpponentHandleBattleAnimation,
OpponentHandleLinkStandbyMsg, OpponentHandleLinkStandbyMsg,
@@ -199,7 +199,7 @@ static void OpponentBufferRunCommand(void)
} }
} }
static void CompleteOnBankSpriteCallbackDummy(void) static void CompleteOnBattlerSpriteCallbackDummy(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
@@ -391,7 +391,7 @@ static void sub_805F994(void)
static void CompleteOnHealthbarDone(void) static void CompleteOnHealthbarDone(void)
{ {
s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
if (hpValue != -1) if (hpValue != -1)
{ {
@@ -1127,9 +1127,9 @@ static void OpponentHandleLoadMonSprite(void)
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
sub_806A068(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler)); sub_80A82E4(gActiveBattler));
@@ -1162,9 +1162,9 @@ static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
sub_806A068(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId)); sub_80A82E4(battlerId));
@@ -1232,9 +1232,9 @@ static void OpponentHandleDrawTrainerPic(void)
{ {
trainerPicId = GetSecretBaseTrainerPicIndex(); trainerPicId = GetSecretBaseTrainerPicIndex();
} }
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE) else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
{ {
trainerPicId = sub_81A4CB0(); trainerPicId = GetFrontierBrainTrainerPicIndex();
} }
else if (gBattleTypeFlags & BATTLE_TYPE_x4000000) else if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
{ {
@@ -1293,8 +1293,8 @@ static void OpponentHandleDrawTrainerPic(void)
} }
DecompressTrainerFrontPic(trainerPicId, gActiveBattler); DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos, xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
sub_80A82E4(gActiveBattler)); sub_80A82E4(gActiveBattler));
@@ -1305,7 +1305,7 @@ static void OpponentHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
static void OpponentHandleTrainerSlide(void) static void OpponentHandleTrainerSlide(void)
@@ -1316,9 +1316,9 @@ static void OpponentHandleTrainerSlide(void)
{ {
trainerPicId = GetSecretBaseTrainerPicIndex(); trainerPicId = GetSecretBaseTrainerPicIndex();
} }
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE) else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
{ {
trainerPicId = sub_81A4CB0(); trainerPicId = GetFrontierBrainTrainerPicIndex();
} }
else if (gBattleTypeFlags & BATTLE_TYPE_x4000000) else if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
{ {
@@ -1365,8 +1365,8 @@ static void OpponentHandleTrainerSlide(void)
} }
DecompressTrainerFrontPic(trainerPicId, gActiveBattler); DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, 176, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, 0x1E); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 176, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, 0x1E);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 96; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 96;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.x += 32; gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.x += 32;
@@ -1403,7 +1403,7 @@ static void OpponentHandleFaintAnimation(void)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_OPPONENT); PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_OPPONENT);
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039934; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[gActiveBattler] = sub_805FAC4; gBattlerControllerFuncs[gActiveBattler] = sub_805FAC4;
} }
} }
@@ -1511,7 +1511,7 @@ static void OpponentHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
sub_81A57E4(gActiveBattler, *stringId); sub_81A57E4(gActiveBattler, *stringId);
} }
@@ -1865,8 +1865,8 @@ static void OpponentHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_8062828, 5); taskId = CreateTask(sub_8062828, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_26; gBattlerControllerFuncs[gActiveBattler] = nullsub_26;
@@ -1916,7 +1916,7 @@ static void OpponentHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
if (gBattleBufferA[gActiveBattler][2] != 0) if (gBattleBufferA[gActiveBattler][2] != 0)
{ {
@@ -1950,14 +1950,14 @@ static void sub_8062A2C(void)
} }
} }
static void OpponentHandleCmd49(void) static void OpponentHandleHidePartyStatusSummary(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
static void OpponentHandleCmd50(void) static void OpponentHandleEndBounceEffect(void)
{ {
OpponentBufferExecCompleted(); OpponentBufferExecCompleted();
} }
+113 -113
View File
@@ -15,6 +15,7 @@
#include "constants/songs.h" #include "constants/songs.h"
#include "sound.h" #include "sound.h"
#include "constants/moves.h" #include "constants/moves.h"
#include "constants/trainers.h"
#include "window.h" #include "window.h"
#include "m4a.h" #include "m4a.h"
#include "palette.h" #include "palette.h"
@@ -29,6 +30,7 @@
#include "battle_setup.h" #include "battle_setup.h"
#include "item_use.h" #include "item_use.h"
#include "recorded_battle.h" #include "recorded_battle.h"
#include "party_menu.h"
extern u8 gUnknown_0203CEE8; extern u8 gUnknown_0203CEE8;
extern u8 gUnknown_0203CEE9; extern u8 gUnknown_0203CEE9;
@@ -38,15 +40,13 @@ extern u16 gBattle_BG0_Y;
extern s32 gUnknown_0203CD70; extern s32 gUnknown_0203CD70;
extern struct UnusedControllerStruct gUnknown_02022D0C; extern struct UnusedControllerStruct gUnknown_02022D0C;
extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct SpriteTemplate gUnknown_0202499C; extern struct SpriteTemplate gMultiuseSpriteTemplate;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_81B89AC(u8 arg0);
extern void sub_81AABB0(void); extern void sub_81AABB0(void);
extern void sub_806A068(u16, u8);
extern void sub_81A57E4(u8 battlerId, u16 stringId); extern void sub_81A57E4(u8 battlerId, u16 stringId);
extern void sub_81851A8(u8 *); extern void sub_81851A8(u8 *);
@@ -100,8 +100,8 @@ static void PlayerHandleFaintingCry(void);
static void PlayerHandleIntroSlide(void); static void PlayerHandleIntroSlide(void);
static void PlayerHandleIntroTrainerBallThrow(void); static void PlayerHandleIntroTrainerBallThrow(void);
static void PlayerHandleDrawPartyStatusSummary(void); static void PlayerHandleDrawPartyStatusSummary(void);
static void PlayerHandleCmd49(void); static void PlayerHandleHidePartyStatusSummary(void);
static void PlayerHandleCmd50(void); static void PlayerHandleEndBounceEffect(void);
static void PlayerHandleSpriteInvisibility(void); static void PlayerHandleSpriteInvisibility(void);
static void PlayerHandleBattleAnimation(void); static void PlayerHandleBattleAnimation(void);
static void PlayerHandleLinkStandbyMsg(void); static void PlayerHandleLinkStandbyMsg(void);
@@ -120,13 +120,13 @@ static void MoveSelectionDisplayMoveType(void);
static void MoveSelectionDisplayMoveNames(void); static void MoveSelectionDisplayMoveNames(void);
static void HandleMoveSwitchting(void); static void HandleMoveSwitchting(void);
static void sub_8058FC0(void); static void sub_8058FC0(void);
static void sub_8059828(void); static void WaitForMonSelection(void);
static void CompleteWhenChoseItem(void); static void CompleteWhenChoseItem(void);
static void sub_8059544(u8 taskId); static void Task_LaunchLvlUpAnim(u8 taskId);
static void Task_PrepareToGiveExpWithExpBar(u8 taskId); static void Task_PrepareToGiveExpWithExpBar(u8 taskId);
static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId); static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId);
static void sub_8059400(u8 taskId); static void sub_8059400(u8 taskId);
static void sub_80595A4(u8 taskId); static void Task_UpdateLvlInHealthbox(u8 taskId);
static void PrintLinkStandbyMsg(void); static void PrintLinkStandbyMsg(void);
static u32 CopyPlayerMonData(u8 monId, u8 *dst); static u32 CopyPlayerMonData(u8 monId, u8 *dst);
static void SetPlayerMonData(u8 monId); static void SetPlayerMonData(u8 monId);
@@ -187,8 +187,8 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
PlayerHandleIntroSlide, PlayerHandleIntroSlide,
PlayerHandleIntroTrainerBallThrow, PlayerHandleIntroTrainerBallThrow,
PlayerHandleDrawPartyStatusSummary, PlayerHandleDrawPartyStatusSummary,
PlayerHandleCmd49, PlayerHandleHidePartyStatusSummary,
PlayerHandleCmd50, PlayerHandleEndBounceEffect,
PlayerHandleSpriteInvisibility, PlayerHandleSpriteInvisibility,
PlayerHandleBattleAnimation, PlayerHandleBattleAnimation,
PlayerHandleLinkStandbyMsg, PlayerHandleLinkStandbyMsg,
@@ -250,10 +250,10 @@ static void HandleInputChooseAction(void)
{ {
u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
dp11b_obj_instanciate(gActiveBattler, 1, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
dp11b_obj_instanciate(gActiveBattler, 0, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
if (gMain.newAndRepeatedKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == 2) if (gMain.newAndRepeatedKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
gPlayerDpadHoldFrames++; gPlayerDpadHoldFrames++;
else else
gPlayerDpadHoldFrames = 0; gPlayerDpadHoldFrames = 0;
@@ -347,8 +347,8 @@ static void HandleInputChooseAction(void)
static void sub_80577F0(void) // unused static void sub_80577F0(void) // unused
{ {
dp11b_obj_free(gActiveBattler, 1); EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
dp11b_obj_free(gActiveBattler, 0); EndBounceEffect(gActiveBattler, BOUNCE_MON);
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget; gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
} }
@@ -358,7 +358,7 @@ static void HandleInputChooseTarget(void)
u8 identities[4]; u8 identities[4];
memcpy(identities, sTargetIdentities, ARRAY_COUNT(sTargetIdentities)); memcpy(identities, sTargetIdentities, ARRAY_COUNT(sTargetIdentities));
dp11b_obj_instanciate(gMultiUsePlayerCursor, 1, 0xF, 1); DoBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX, 15, 1);
// what a weird loop // what a weird loop
i = 0; i = 0;
@@ -367,7 +367,7 @@ static void HandleInputChooseTarget(void)
do do
{ {
if (i != gMultiUsePlayerCursor) if (i != gMultiUsePlayerCursor)
dp11b_obj_free(i, 1); EndBounceEffect(i, BOUNCE_HEALTHBOX);
i++; i++;
} while (i < gBattlersCount); } while (i < gBattlersCount);
} }
@@ -382,7 +382,7 @@ static void HandleInputChooseTarget(void)
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C; gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
dp11b_obj_free(gMultiUsePlayerCursor, 1); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59) else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59)
@@ -390,9 +390,9 @@ static void HandleInputChooseTarget(void)
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C; gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
dp11b_obj_instanciate(gActiveBattler, 1, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
dp11b_obj_instanciate(gActiveBattler, 0, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
dp11b_obj_free(gMultiUsePlayerCursor, 1); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
} }
else if (gMain.newKeys & (DPAD_LEFT | DPAD_UP)) else if (gMain.newKeys & (DPAD_LEFT | DPAD_UP))
{ {
@@ -485,7 +485,7 @@ static void HandleInputChooseMove(void)
bool32 canSelectTarget = FALSE; bool32 canSelectTarget = FALSE;
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == 2) if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
gPlayerDpadHoldFrames++; gPlayerDpadHoldFrames++;
else else
gPlayerDpadHoldFrames = 0; gPlayerDpadHoldFrames = 0;
@@ -620,7 +620,7 @@ static void HandleInputChooseMove(void)
gMultiUsePlayerCursor = gMoveSelectionCursor[gActiveBattler] + 1; gMultiUsePlayerCursor = gMoveSelectionCursor[gActiveBattler] + 1;
MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
BattleHandleAddTextPrinter(gText_BattleSwitchWhich, 0xB); BattlePutTextOnWindow(gText_BattleSwitchWhich, 0xB);
gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitchting; gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitchting;
} }
} }
@@ -916,7 +916,7 @@ void sub_80587B0(void)
} }
} }
static void CompleteOnBankSpriteCallbackDummy(void) static void CompleteOnBattlerSpriteCallbackDummy(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
@@ -1120,7 +1120,7 @@ void c3_0802FDF4(u8 taskId)
static void CompleteOnHealthbarDone(void) static void CompleteOnHealthbarDone(void)
{ {
s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1143,16 +1143,16 @@ static void CompleteOnInactiveTextPrinter(void)
#define tExpTask_monId data[0] #define tExpTask_monId data[0]
#define tExpTask_gainedExp data[1] #define tExpTask_gainedExp data[1]
#define tExpTask_bank data[2] #define tExpTask_battler data[2]
#define tExpTask_frames data[10] #define tExpTask_frames data[10]
static void Task_GiveExpToMon(u8 taskId) static void Task_GiveExpToMon(u8 taskId)
{ {
u32 monId = (u8)(gTasks[taskId].tExpTask_monId); u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
u8 battlerId = gTasks[taskId].tExpTask_bank; u8 battlerId = gTasks[taskId].tExpTask_battler;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // give exp without the expbar if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // Give exp without moving the expbar.
{ {
struct Pokemon *mon = &gPlayerParty[monId]; struct Pokemon *mon = &gPlayerParty[monId];
u16 species = GetMonData(mon, MON_DATA_SPECIES); u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -1162,19 +1162,19 @@ static void Task_GiveExpToMon(u8 taskId)
if (currExp + gainedExp >= nextLvlExp) if (currExp + gainedExp >= nextLvlExp)
{ {
u8 savedActiveBank; u8 savedActiveBattler;
SetMonData(mon, MON_DATA_EXP, &nextLvlExp); SetMonData(mon, MON_DATA_EXP, &nextLvlExp);
CalculateMonStats(mon); CalculateMonStats(mon);
gainedExp -= nextLvlExp - currExp; gainedExp -= nextLvlExp - currExp;
savedActiveBank = gActiveBattler; savedActiveBattler = gActiveBattler;
gActiveBattler = battlerId; gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp); BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
gActiveBattler = savedActiveBank; gActiveBattler = savedActiveBattler;
if (IsDoubleBattle() == TRUE if (IsDoubleBattle() == TRUE
&& ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])) && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
gTasks[taskId].func = sub_8059544; gTasks[taskId].func = Task_LaunchLvlUpAnim;
else else
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
} }
@@ -1196,7 +1196,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
{ {
u8 monIndex = gTasks[taskId].tExpTask_monId; u8 monIndex = gTasks[taskId].tExpTask_monId;
s32 gainedExp = gTasks[taskId].tExpTask_gainedExp; s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
u8 battlerId = gTasks[taskId].tExpTask_bank; u8 battlerId = gTasks[taskId].tExpTask_battler;
struct Pokemon *mon = &gPlayerParty[monIndex]; struct Pokemon *mon = &gPlayerParty[monIndex];
u8 level = GetMonData(mon, MON_DATA_LEVEL); u8 level = GetMonData(mon, MON_DATA_LEVEL);
u16 species = GetMonData(mon, MON_DATA_SPECIES); u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -1221,12 +1221,12 @@ static void sub_8059400(u8 taskId)
{ {
u8 monId = gTasks[taskId].tExpTask_monId; u8 monId = gTasks[taskId].tExpTask_monId;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
u8 battlerId = gTasks[taskId].tExpTask_bank; u8 battlerId = gTasks[taskId].tExpTask_battler;
s16 r4; s16 newExpPoints;
r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0); newExpPoints = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
if (r4 == -1) if (newExpPoints == -1) // The bar has been filled with given exp points.
{ {
u8 level; u8 level;
s32 currExp; s32 currExp;
@@ -1241,16 +1241,16 @@ static void sub_8059400(u8 taskId)
if (currExp + gainedExp >= expOnNextLvl) if (currExp + gainedExp >= expOnNextLvl)
{ {
u8 savedActiveBank; u8 savedActiveBattler;
SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl); SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl);
CalculateMonStats(&gPlayerParty[monId]); CalculateMonStats(&gPlayerParty[monId]);
gainedExp -= expOnNextLvl - currExp; gainedExp -= expOnNextLvl - currExp;
savedActiveBank = gActiveBattler; savedActiveBattler = gActiveBattler;
gActiveBattler = battlerId; gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp); BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
gActiveBattler = savedActiveBank; gActiveBattler = savedActiveBattler;
gTasks[taskId].func = sub_8059544; gTasks[taskId].func = Task_LaunchLvlUpAnim;
} }
else else
{ {
@@ -1263,27 +1263,27 @@ static void sub_8059400(u8 taskId)
} }
} }
static void sub_8059544(u8 taskId) static void Task_LaunchLvlUpAnim(u8 taskId)
{ {
u8 battlerId = gTasks[taskId].tExpTask_bank; u8 battlerId = gTasks[taskId].tExpTask_battler;
u8 monIndex = gTasks[taskId].tExpTask_monId; u8 monIndex = gTasks[taskId].tExpTask_monId;
if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
battlerId ^= BIT_FLANK; battlerId ^= BIT_FLANK;
InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP); InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP);
gTasks[taskId].func = sub_80595A4; gTasks[taskId].func = Task_UpdateLvlInHealthbox;
} }
static void sub_80595A4(u8 taskId) static void Task_UpdateLvlInHealthbox(u8 taskId)
{ {
u8 battlerId = gTasks[taskId].tExpTask_bank; u8 battlerId = gTasks[taskId].tExpTask_battler;
if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive) if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive)
{ {
u8 monIndex = gTasks[taskId].tExpTask_monId; u8 monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value.
if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL); UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
@@ -1300,8 +1300,8 @@ static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
u8 battlerId; u8 battlerId;
monIndex = gTasks[taskId].tExpTask_monId; monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value.
battlerId = gTasks[taskId].tExpTask_bank; battlerId = gTasks[taskId].tExpTask_battler;
gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId); DestroyTask(taskId);
} }
@@ -1337,21 +1337,21 @@ static void CompleteOnInactiveTextPrinter2(void)
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
static void sub_80597CC(void) static void OpenPartyMenuToChooseMon(void)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
u8 r4; u8 caseId;
gBattlerControllerFuncs[gActiveBattler] = sub_8059828; gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection;
r4 = gTasks[gUnknown_03005D7C[gActiveBattler]].data[0]; caseId = gTasks[gUnknown_03005D7C[gActiveBattler]].data[0];
DestroyTask(gUnknown_03005D7C[gActiveBattler]); DestroyTask(gUnknown_03005D7C[gActiveBattler]);
FreeAllWindowBuffers(); FreeAllWindowBuffers();
sub_81B89AC(r4); OpenPartyMenuInBattle(caseId);
} }
} }
static void sub_8059828(void) static void WaitForMonSelection(void)
{ {
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
{ {
@@ -1458,7 +1458,7 @@ static void MoveSelectionDisplayMoveNames(void)
{ {
MoveSelectionDestroyCursorAt(i); MoveSelectionDestroyCursorAt(i);
StringCopy(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]); StringCopy(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, i + 3); BattlePutTextOnWindow(gDisplayedStringBattle, i + 3);
if (moveInfo->moves[i] != MOVE_NONE) if (moveInfo->moves[i] != MOVE_NONE)
gNumberOfMovesToChoose++; gNumberOfMovesToChoose++;
} }
@@ -1467,7 +1467,7 @@ static void MoveSelectionDisplayMoveNames(void)
static void MoveSelectionDisplayPpString(void) static void MoveSelectionDisplayPpString(void)
{ {
StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP); StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 7); BattlePutTextOnWindow(gDisplayedStringBattle, 7);
} }
static void MoveSelectionDisplayPpNumber(void) static void MoveSelectionDisplayPpNumber(void)
@@ -1485,7 +1485,7 @@ static void MoveSelectionDisplayPpNumber(void)
txtPtr++; txtPtr++;
ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2); ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 9); BattlePutTextOnWindow(gDisplayedStringBattle, 9);
} }
static void MoveSelectionDisplayMoveType(void) static void MoveSelectionDisplayMoveType(void)
@@ -1502,7 +1502,7 @@ static void MoveSelectionDisplayMoveType(void)
txtPtr++; txtPtr++;
StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]); StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 10); BattlePutTextOnWindow(gDisplayedStringBattle, 10);
} }
static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 arg1) static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
@@ -1573,7 +1573,7 @@ static void PrintLinkStandbyMsg(void)
{ {
gBattle_BG0_X = 0; gBattle_BG0_X = 0;
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
BattleHandleAddTextPrinter(gText_LinkStandby, 0); BattlePutTextOnWindow(gText_LinkStandby, 0);
} }
} }
@@ -2199,10 +2199,10 @@ static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
sub_806A068(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite( gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C, &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId)); sub_80A82E4(battlerId));
@@ -2259,9 +2259,9 @@ static void DoSwitchOutAnimation(void)
} }
} }
// some explanation here // In emerald it's possible to have a tag battle in the battle frontier facilities with AI
// in emerald it's possible to have a tag battle in the battle frontier facilities with AI // which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven)
// which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven) that use the back pic as well as animate it // that use an animated back pic.
static void PlayerHandleDrawTrainerPic(void) static void PlayerHandleDrawTrainerPic(void)
{ {
s16 xPos, yPos; s16 xPos, yPos;
@@ -2272,16 +2272,16 @@ static void PlayerHandleDrawTrainerPic(void)
if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN) || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN)
{ {
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RED;
} }
else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE) || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE)
{ {
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
} }
else else
{ {
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_BRENDAN;
} }
} }
else else
@@ -2291,12 +2291,12 @@ static void PlayerHandleDrawTrainerPic(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != B_FLANK_LEFT) // Second mon, on the right.
xPos = 90; xPos = 90;
else // first mon else // First mon, on the left.
xPos = 32; xPos = 32;
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != STEVEN_PARTNER_ID) if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
{ {
xPos = 90; xPos = 90;
yPos = (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 80; yPos = (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 80;
@@ -2314,12 +2314,12 @@ static void PlayerHandleDrawTrainerPic(void)
} }
// Use front pic table for any tag battles unless your partner is Steven. // Use front pic table for any tag battles unless your partner is Steven.
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != STEVEN_PARTNER_ID) if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
{ {
trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender); trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler); DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
sub_806A1C0(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -2329,12 +2329,12 @@ static void PlayerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1; gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1;
} }
// use the back pic in any other scenario // Use the back pic in any other scenario.
else else
{ {
DecompressTrainerBackPic(trainerPicId, gActiveBattler); DecompressTrainerBackPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -2342,7 +2342,7 @@ static void PlayerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
} }
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
static void PlayerHandleTrainerSlide(void) static void PlayerHandleTrainerSlide(void)
@@ -2354,26 +2354,26 @@ static void PlayerHandleTrainerSlide(void)
if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN) || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN)
{ {
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RED;
} }
else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE) || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE)
{ {
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
} }
else else
{ {
trainerPicId = gLinkPlayers[GetMultiplayerId()].gender; trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_BRENDAN;
} }
} }
else else
{ {
trainerPicId = gSaveBlock2Ptr->playerGender; trainerPicId = gSaveBlock2Ptr->playerGender + TRAINER_BACK_PIC_BRENDAN;
} }
DecompressTrainerBackPic(trainerPicId, gActiveBattler); DecompressTrainerBackPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, 80, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, 30); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 80, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, 30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
@@ -2466,7 +2466,7 @@ static void PlayerHandleMoveAnimation(void)
gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // Always returns FALSE.
{ {
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
@@ -2536,7 +2536,7 @@ static void PlayerHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
BattleTv_SetDataBasedOnString(*stringId); BattleTv_SetDataBasedOnString(*stringId);
sub_81A57E4(gActiveBattler, *stringId); sub_81A57E4(gActiveBattler, *stringId);
@@ -2566,14 +2566,14 @@ static void PlayerHandleChooseAction(void)
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
BattleTv_ClearExplosionFaintCause(); BattleTv_ClearExplosionFaintCause();
BattleHandleAddTextPrinter(gText_BattleMenu, 2); BattlePutTextOnWindow(gText_BattleMenu, 2);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
ActionSelectionDestroyCursorAt(i); ActionSelectionDestroyCursorAt(i);
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 1); BattlePutTextOnWindow(gDisplayedStringBattle, 1);
} }
static void PlayerHandleUnknownYesNoBox(void) static void PlayerHandleUnknownYesNoBox(void)
@@ -2581,7 +2581,7 @@ static void PlayerHandleUnknownYesNoBox(void)
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{ {
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 12); BattlePutTextOnWindow(gText_BattleYesNoChoice, 12);
gMultiUsePlayerCursor = 1; gMultiUsePlayerCursor = 1;
BattleCreateYesNoCursorAt(1); BattleCreateYesNoCursorAt(1);
gBattlerControllerFuncs[gActiveBattler] = PlayerHandleUnknownYesNoInput; gBattlerControllerFuncs[gActiveBattler] = PlayerHandleUnknownYesNoInput;
@@ -2655,7 +2655,7 @@ static void PlayerHandleChoosePokemon(void)
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][4 + i]; gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][4 + i];
if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != 2) if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != PARTY_CANT_SWITCH)
{ {
BtlController_EmitChosenMonReturnValue(1, gBattlerPartyIndexes[gActiveBattler] + 1, gUnknown_0203CF00); BtlController_EmitChosenMonReturnValue(1, gBattlerPartyIndexes[gActiveBattler] + 1, gUnknown_0203CF00);
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
@@ -2664,11 +2664,11 @@ static void PlayerHandleChoosePokemon(void)
{ {
gUnknown_03005D7C[gActiveBattler] = CreateTask(TaskDummy, 0xFF); gUnknown_03005D7C[gActiveBattler] = CreateTask(TaskDummy, 0xFF);
gTasks[gUnknown_03005D7C[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; gTasks[gUnknown_03005D7C[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF;
*(&gBattleStruct->field_49) = gBattleBufferA[gActiveBattler][1] >> 4; *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4;
*(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2]; *(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2];
*(&gBattleStruct->field_B0) = gBattleBufferA[gActiveBattler][3]; *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
gBattlerControllerFuncs[gActiveBattler] = sub_80597CC; gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
gBattlerInMenuId = gActiveBattler; gBattlerInMenuId = gActiveBattler;
} }
} }
@@ -2722,19 +2722,19 @@ static void PlayerHandleExpUpdate(void)
u8 taskId; u8 taskId;
LoadBattleBarGfx(1); LoadBattleBarGfx(1);
GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // unused return value GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // Unused return value.
expPointsToGive = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); expPointsToGive = T1_READ_16(&gBattleBufferA[gActiveBattler][2]);
taskId = CreateTask(Task_GiveExpToMon, 10); taskId = CreateTask(Task_GiveExpToMon, 10);
gTasks[taskId].tExpTask_monId = monId; gTasks[taskId].tExpTask_monId = monId;
gTasks[taskId].tExpTask_gainedExp = expPointsToGive; gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
gTasks[taskId].tExpTask_bank = gActiveBattler; gTasks[taskId].tExpTask_battler = gActiveBattler;
gBattlerControllerFuncs[gActiveBattler] = nullsub_21; gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
} }
} }
#undef tExpTask_monId #undef tExpTask_monId
#undef tExpTask_gainedExp #undef tExpTask_gainedExp
#undef tExpTask_bank #undef tExpTask_battler
#undef tExpTask_frames #undef tExpTask_frames
static void PlayerHandleStatusIconUpdate(void) static void PlayerHandleStatusIconUpdate(void)
@@ -2945,8 +2945,8 @@ static void PlayerHandleIntroTrainerBallThrow(void)
taskId = CreateTask(task05_08033660, 5); taskId = CreateTask(task05_08033660, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_21; gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
@@ -2971,7 +2971,7 @@ static void task05_08033660(u8 taskId)
} }
else else
{ {
u8 savedActiveBank = gActiveBattler; u8 savedActiveBattler = gActiveBattler;
gActiveBattler = gTasks[taskId].data[0]; gActiveBattler = gTasks[taskId].data[0];
if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
@@ -2990,7 +2990,7 @@ static void task05_08033660(u8 taskId)
gActiveBattler ^= BIT_FLANK; gActiveBattler ^= BIT_FLANK;
} }
gBattlerControllerFuncs[gActiveBattler] = sub_8058B40; gBattlerControllerFuncs[gActiveBattler] = sub_8058B40;
gActiveBattler = savedActiveBank; gActiveBattler = savedActiveBattler;
DestroyTask(taskId); DestroyTask(taskId);
} }
} }
@@ -3003,7 +3003,7 @@ static void PlayerHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
@@ -3023,17 +3023,17 @@ static void sub_805CE38(void)
} }
} }
static void PlayerHandleCmd49(void) static void PlayerHandleHidePartyStatusSummary(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
static void PlayerHandleCmd50(void) static void PlayerHandleEndBounceEffect(void)
{ {
dp11b_obj_free(gActiveBattler, 1); EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
dp11b_obj_free(gActiveBattler, 0); EndBounceEffect(gActiveBattler, BOUNCE_MON);
PlayerBufferExecCompleted(); PlayerBufferExecCompleted();
} }
@@ -3072,8 +3072,8 @@ static void PlayerHandleLinkStandbyMsg(void)
PrintLinkStandbyMsg(); PrintLinkStandbyMsg();
// fall through // fall through
case 1: case 1:
dp11b_obj_free(gActiveBattler, 1); EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
dp11b_obj_free(gActiveBattler, 0); EndBounceEffect(gActiveBattler, BOUNCE_MON);
break; break;
case 2: case 2:
PrintLinkStandbyMsg(); PrintLinkStandbyMsg();
+33 -32
View File
@@ -11,6 +11,7 @@
#include "util.h" #include "util.h"
#include "main.h" #include "main.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/trainers.h"
#include "sound.h" #include "sound.h"
#include "window.h" #include "window.h"
#include "m4a.h" #include "m4a.h"
@@ -34,7 +35,7 @@ extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_81358F4(void); extern void sub_81358F4(void);
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8); extern void SetMultiuseSpriteTemplateToPokemon(u16, u8);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
// this file's functions // this file's functions
@@ -87,8 +88,8 @@ static void PlayerPartnerHandleFaintingCry(void);
static void PlayerPartnerHandleIntroSlide(void); static void PlayerPartnerHandleIntroSlide(void);
static void PlayerPartnerHandleIntroTrainerBallThrow(void); static void PlayerPartnerHandleIntroTrainerBallThrow(void);
static void PlayerPartnerHandleDrawPartyStatusSummary(void); static void PlayerPartnerHandleDrawPartyStatusSummary(void);
static void PlayerPartnerHandleCmd49(void); static void PlayerPartnerHandleHidePartyStatusSummary(void);
static void PlayerPartnerHandleCmd50(void); static void PlayerPartnerHandleEndBounceEffect(void);
static void PlayerPartnerHandleSpriteInvisibility(void); static void PlayerPartnerHandleSpriteInvisibility(void);
static void PlayerPartnerHandleBattleAnimation(void); static void PlayerPartnerHandleBattleAnimation(void);
static void PlayerPartnerHandleLinkStandbyMsg(void); static void PlayerPartnerHandleLinkStandbyMsg(void);
@@ -164,8 +165,8 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
PlayerPartnerHandleIntroSlide, PlayerPartnerHandleIntroSlide,
PlayerPartnerHandleIntroTrainerBallThrow, PlayerPartnerHandleIntroTrainerBallThrow,
PlayerPartnerHandleDrawPartyStatusSummary, PlayerPartnerHandleDrawPartyStatusSummary,
PlayerPartnerHandleCmd49, PlayerPartnerHandleHidePartyStatusSummary,
PlayerPartnerHandleCmd50, PlayerPartnerHandleEndBounceEffect,
PlayerPartnerHandleSpriteInvisibility, PlayerPartnerHandleSpriteInvisibility,
PlayerPartnerHandleBattleAnimation, PlayerPartnerHandleBattleAnimation,
PlayerPartnerHandleLinkStandbyMsg, PlayerPartnerHandleLinkStandbyMsg,
@@ -203,7 +204,7 @@ static void PlayerPartnerBufferRunCommand(void)
} }
} }
static void CompleteOnBankSpriteCallbackDummy(void) static void CompleteOnBattlerSpriteCallbackDummy(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
PlayerPartnerBufferExecCompleted(); PlayerPartnerBufferExecCompleted();
@@ -294,7 +295,7 @@ static void sub_81BB1D4(void)
static void CompleteOnHealthbarDone(void) static void CompleteOnHealthbarDone(void)
{ {
s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -344,7 +345,7 @@ static void Task_GiveExpToMon(u8 taskId)
gainedExp -= nextLvlExp - currExp; gainedExp -= nextLvlExp - currExp;
savedActiveBank = gActiveBattler; savedActiveBank = gActiveBattler;
gActiveBattler = battlerId; gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp); BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
gActiveBattler = savedActiveBank; gActiveBattler = savedActiveBank;
if (IsDoubleBattle() == TRUE if (IsDoubleBattle() == TRUE
@@ -399,7 +400,7 @@ static void sub_81BB4E4(u8 taskId)
u8 battlerId = gTasks[taskId].tExpTask_bank; u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 r4; s16 r4;
r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0); r4 = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
if (r4 == -1) if (r4 == -1)
{ {
@@ -423,7 +424,7 @@ static void sub_81BB4E4(u8 taskId)
gainedExp -= expOnNextLvl - currExp; gainedExp -= expOnNextLvl - currExp;
savedActiveBank = gActiveBattler; savedActiveBank = gActiveBattler;
gActiveBattler = battlerId; gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp); BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
gActiveBattler = savedActiveBank; gActiveBattler = savedActiveBank;
gTasks[taskId].func = sub_81BB628; gTasks[taskId].func = sub_81BB628;
} }
@@ -1210,9 +1211,9 @@ static void PlayerPartnerHandleLoadMonSprite(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
sub_806A068(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler)); sub_80A82E4(gActiveBattler));
@@ -1240,10 +1241,10 @@ static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
sub_806A068(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite( gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C, &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId)); sub_80A82E4(battlerId));
@@ -1308,9 +1309,9 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
s16 xPos, yPos; s16 xPos, yPos;
u32 trainerPicId; u32 trainerPicId;
if (gPartnerTrainerId == STEVEN_PARTNER_ID) if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{ {
trainerPicId = BACK_PIC_STEVEN; trainerPicId = TRAINER_BACK_PIC_STEVEN;
xPos = 90; xPos = 90;
yPos = (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80; yPos = (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80;
} }
@@ -1322,11 +1323,11 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
} }
// Use back pic only if the partner is Steven // Use back pic only if the partner is Steven
if (gPartnerTrainerId == STEVEN_PARTNER_ID) if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{ {
DecompressTrainerBackPic(trainerPicId, gActiveBattler); DecompressTrainerBackPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1336,8 +1337,8 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
else // otherwise use front sprite else // otherwise use front sprite
{ {
DecompressTrainerFrontPic(trainerPicId, gActiveBattler); DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
sub_806A1C0(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1348,7 +1349,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1; gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1;
} }
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
static void PlayerPartnerHandleTrainerSlide(void) static void PlayerPartnerHandleTrainerSlide(void)
@@ -1492,7 +1493,7 @@ static void PlayerPartnerHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
} }
@@ -1793,9 +1794,9 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void)
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F9); paletteNum = AllocSpritePalette(0xD6F9);
if (gPartnerTrainerId == STEVEN_PARTNER_ID) if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{ {
u8 spriteId = BACK_PIC_STEVEN; u8 spriteId = TRAINER_BACK_PIC_STEVEN;
LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32); LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32);
} }
else else
@@ -1810,8 +1811,8 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_81BE2C8, 5); taskId = CreateTask(sub_81BE2C8, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_77; gBattlerControllerFuncs[gActiveBattler] = nullsub_77;
@@ -1857,7 +1858,7 @@ static void PlayerPartnerHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
@@ -1877,14 +1878,14 @@ static void sub_81BE498(void)
} }
} }
static void PlayerPartnerHandleCmd49(void) static void PlayerPartnerHandleHidePartyStatusSummary(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
PlayerPartnerBufferExecCompleted(); PlayerPartnerBufferExecCompleted();
} }
static void PlayerPartnerHandleCmd50(void) static void PlayerPartnerHandleEndBounceEffect(void)
{ {
PlayerPartnerBufferExecCompleted(); PlayerPartnerBufferExecCompleted();
} }
+23 -23
View File
@@ -13,6 +13,7 @@
#include "util.h" #include "util.h"
#include "main.h" #include "main.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/trainers.h"
#include "sound.h" #include "sound.h"
#include "window.h" #include "window.h"
#include "m4a.h" #include "m4a.h"
@@ -36,7 +37,6 @@ extern u8 gUnknown_0203C7B4;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern u16 sub_8068B48(void); extern u16 sub_8068B48(void);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -90,8 +90,8 @@ static void RecordedOpponentHandleFaintingCry(void);
static void RecordedOpponentHandleIntroSlide(void); static void RecordedOpponentHandleIntroSlide(void);
static void RecordedOpponentHandleIntroTrainerBallThrow(void); static void RecordedOpponentHandleIntroTrainerBallThrow(void);
static void RecordedOpponentHandleDrawPartyStatusSummary(void); static void RecordedOpponentHandleDrawPartyStatusSummary(void);
static void RecordedOpponentHandleCmd49(void); static void RecordedOpponentHandleHidePartyStatusSummary(void);
static void RecordedOpponentHandleCmd50(void); static void RecordedOpponentHandleEndBounceEffect(void);
static void RecordedOpponentHandleSpriteInvisibility(void); static void RecordedOpponentHandleSpriteInvisibility(void);
static void RecordedOpponentHandleBattleAnimation(void); static void RecordedOpponentHandleBattleAnimation(void);
static void RecordedOpponentHandleLinkStandbyMsg(void); static void RecordedOpponentHandleLinkStandbyMsg(void);
@@ -162,8 +162,8 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void
RecordedOpponentHandleIntroSlide, RecordedOpponentHandleIntroSlide,
RecordedOpponentHandleIntroTrainerBallThrow, RecordedOpponentHandleIntroTrainerBallThrow,
RecordedOpponentHandleDrawPartyStatusSummary, RecordedOpponentHandleDrawPartyStatusSummary,
RecordedOpponentHandleCmd49, RecordedOpponentHandleHidePartyStatusSummary,
RecordedOpponentHandleCmd50, RecordedOpponentHandleEndBounceEffect,
RecordedOpponentHandleSpriteInvisibility, RecordedOpponentHandleSpriteInvisibility,
RecordedOpponentHandleBattleAnimation, RecordedOpponentHandleBattleAnimation,
RecordedOpponentHandleLinkStandbyMsg, RecordedOpponentHandleLinkStandbyMsg,
@@ -192,7 +192,7 @@ static void RecordedOpponentBufferRunCommand(void)
} }
} }
static void CompleteOnBankSpriteCallbackDummy(void) static void CompleteOnBattlerSpriteCallbackDummy(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
RecordedOpponentBufferExecCompleted(); RecordedOpponentBufferExecCompleted();
@@ -377,7 +377,7 @@ static void sub_8186C48(void)
static void CompleteOnHealthbarDone(void) static void CompleteOnHealthbarDone(void)
{ {
s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1118,9 +1118,9 @@ static void RecordedOpponentHandleLoadMonSprite(void)
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
sub_806A068(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler)); sub_80A82E4(gActiveBattler));
@@ -1153,9 +1153,9 @@ static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
sub_806A068(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId)); sub_80A82E4(battlerId));
@@ -1251,8 +1251,8 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
} }
DecompressTrainerFrontPic(trainerPicId, gActiveBattler); DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos, xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
sub_80A82E4(gActiveBattler)); sub_80A82E4(gActiveBattler));
@@ -1263,7 +1263,7 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
static void RecordedOpponentHandleTrainerSlide(void) static void RecordedOpponentHandleTrainerSlide(void)
@@ -1296,7 +1296,7 @@ static void RecordedOpponentHandleFaintAnimation(void)
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_OPPONENT); PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_OPPONENT);
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039934; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[gActiveBattler] = sub_8186D58; gBattlerControllerFuncs[gActiveBattler] = sub_8186D58;
} }
} }
@@ -1404,7 +1404,7 @@ static void RecordedOpponentHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
} }
@@ -1658,8 +1658,8 @@ static void RecordedOpponentHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_8189548, 5); taskId = CreateTask(sub_8189548, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_70; gBattlerControllerFuncs[gActiveBattler] = nullsub_70;
@@ -1704,7 +1704,7 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
if (gBattleBufferA[gActiveBattler][2] != 0) if (gBattleBufferA[gActiveBattler][2] != 0)
{ {
@@ -1738,14 +1738,14 @@ static void sub_818975C(void)
} }
} }
static void RecordedOpponentHandleCmd49(void) static void RecordedOpponentHandleHidePartyStatusSummary(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
RecordedOpponentBufferExecCompleted(); RecordedOpponentBufferExecCompleted();
} }
static void RecordedOpponentHandleCmd50(void) static void RecordedOpponentHandleEndBounceEffect(void)
{ {
RecordedOpponentBufferExecCompleted(); RecordedOpponentBufferExecCompleted();
} }
+23 -24
View File
@@ -36,7 +36,6 @@ extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
// this file's functions // this file's functions
@@ -89,8 +88,8 @@ static void RecordedPlayerHandleFaintingCry(void);
static void RecordedPlayerHandleIntroSlide(void); static void RecordedPlayerHandleIntroSlide(void);
static void RecordedPlayerHandleIntroTrainerBallThrow(void); static void RecordedPlayerHandleIntroTrainerBallThrow(void);
static void RecordedPlayerHandleDrawPartyStatusSummary(void); static void RecordedPlayerHandleDrawPartyStatusSummary(void);
static void RecordedPlayerHandleCmd49(void); static void RecordedPlayerHandleHidePartyStatusSummary(void);
static void RecordedPlayerHandleCmd50(void); static void RecordedPlayerHandleEndBounceEffect(void);
static void RecordedPlayerHandleSpriteInvisibility(void); static void RecordedPlayerHandleSpriteInvisibility(void);
static void RecordedPlayerHandleBattleAnimation(void); static void RecordedPlayerHandleBattleAnimation(void);
static void RecordedPlayerHandleLinkStandbyMsg(void); static void RecordedPlayerHandleLinkStandbyMsg(void);
@@ -160,8 +159,8 @@ static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void)
RecordedPlayerHandleIntroSlide, RecordedPlayerHandleIntroSlide,
RecordedPlayerHandleIntroTrainerBallThrow, RecordedPlayerHandleIntroTrainerBallThrow,
RecordedPlayerHandleDrawPartyStatusSummary, RecordedPlayerHandleDrawPartyStatusSummary,
RecordedPlayerHandleCmd49, RecordedPlayerHandleHidePartyStatusSummary,
RecordedPlayerHandleCmd50, RecordedPlayerHandleEndBounceEffect,
RecordedPlayerHandleSpriteInvisibility, RecordedPlayerHandleSpriteInvisibility,
RecordedPlayerHandleBattleAnimation, RecordedPlayerHandleBattleAnimation,
RecordedPlayerHandleLinkStandbyMsg, RecordedPlayerHandleLinkStandbyMsg,
@@ -190,7 +189,7 @@ static void RecordedPlayerBufferRunCommand(void)
} }
} }
static void CompleteOnBankSpriteCallbackDummy(void) static void CompleteOnBattlerSpriteCallbackDummy(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
RecordedPlayerBufferExecCompleted(); RecordedPlayerBufferExecCompleted();
@@ -363,7 +362,7 @@ static void sub_818A064(void)
static void CompleteOnHealthbarDone(void) static void CompleteOnHealthbarDone(void)
{ {
s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1107,9 +1106,9 @@ static void RecordedPlayerHandleLoadMonSprite(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
sub_806A068(species, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2), GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler), GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler)); sub_80A82E4(gActiveBattler));
@@ -1137,10 +1136,10 @@ static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
sub_806A068(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite( gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C, &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId)); sub_80A82E4(battlerId));
@@ -1242,8 +1241,8 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
{ {
trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender); trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler); DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
sub_806A1C0(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1256,8 +1255,8 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
else else
{ {
DecompressTrainerBackPic(trainerPicId, gActiveBattler); DecompressTrainerBackPic(trainerPicId, gActiveBattler);
sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1265,7 +1264,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
} }
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
static void RecordedPlayerHandleTrainerSlide(void) static void RecordedPlayerHandleTrainerSlide(void)
@@ -1409,7 +1408,7 @@ static void RecordedPlayerHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
} }
@@ -1693,8 +1692,8 @@ static void RecordedPlayerHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_818CC24, 5); taskId = CreateTask(sub_818CC24, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_120; gBattlerControllerFuncs[gActiveBattler] = nullsub_120;
@@ -1740,7 +1739,7 @@ static void RecordedPlayerHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
@@ -1760,14 +1759,14 @@ static void sub_818CDF4(void)
} }
} }
static void RecordedPlayerHandleCmd49(void) static void RecordedPlayerHandleHidePartyStatusSummary(void)
{ {
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
RecordedPlayerBufferExecCompleted(); RecordedPlayerBufferExecCompleted();
} }
static void RecordedPlayerHandleCmd50(void) static void RecordedPlayerHandleEndBounceEffect(void)
{ {
RecordedPlayerBufferExecCompleted(); RecordedPlayerBufferExecCompleted();
} }
+13 -13
View File
@@ -80,8 +80,8 @@ static void SafariHandleFaintingCry(void);
static void SafariHandleIntroSlide(void); static void SafariHandleIntroSlide(void);
static void SafariHandleIntroTrainerBallThrow(void); static void SafariHandleIntroTrainerBallThrow(void);
static void SafariHandleDrawPartyStatusSummary(void); static void SafariHandleDrawPartyStatusSummary(void);
static void SafariHandleCmd49(void); static void SafariHandleHidePartyStatusSummary(void);
static void SafariHandleCmd50(void); static void SafariHandleEndBounceEffect(void);
static void SafariHandleSpriteInvisibility(void); static void SafariHandleSpriteInvisibility(void);
static void SafariHandleBattleAnimation(void); static void SafariHandleBattleAnimation(void);
static void SafariHandleLinkStandbyMsg(void); static void SafariHandleLinkStandbyMsg(void);
@@ -144,8 +144,8 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
SafariHandleIntroSlide, SafariHandleIntroSlide,
SafariHandleIntroTrainerBallThrow, SafariHandleIntroTrainerBallThrow,
SafariHandleDrawPartyStatusSummary, SafariHandleDrawPartyStatusSummary,
SafariHandleCmd49, SafariHandleHidePartyStatusSummary,
SafariHandleCmd50, SafariHandleEndBounceEffect,
SafariHandleSpriteInvisibility, SafariHandleSpriteInvisibility,
SafariHandleBattleAnimation, SafariHandleBattleAnimation,
SafariHandleLinkStandbyMsg, SafariHandleLinkStandbyMsg,
@@ -239,7 +239,7 @@ static void HandleInputChooseAction(void)
} }
} }
static void CompleteOnBankSpriteCallbackDummy(void) static void CompleteOnBattlerSpriteCallbackDummy(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
SafariBufferExecCompleted(); SafariBufferExecCompleted();
@@ -358,9 +358,9 @@ static void SafariHandleReturnMonToBall(void)
static void SafariHandleDrawTrainerPic(void) static void SafariHandleDrawTrainerPic(void)
{ {
DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, gActiveBattler); DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, gActiveBattler);
sub_806A12C(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite( gBattlerSpriteIds[gActiveBattler] = CreateSprite(
&gUnknown_0202499C, &gMultiuseSpriteTemplate,
80, 80,
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80, (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80,
30); 30);
@@ -368,7 +368,7 @@ static void SafariHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
static void SafariHandleTrainerSlide(void) static void SafariHandleTrainerSlide(void)
@@ -427,7 +427,7 @@ static void SafariHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
} }
@@ -454,14 +454,14 @@ static void SafariHandleChooseAction(void)
s32 i; s32 i;
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
BattleHandleAddTextPrinter(gText_SafariZoneMenu, 2); BattlePutTextOnWindow(gText_SafariZoneMenu, 2);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
ActionSelectionDestroyCursorAt(i); ActionSelectionDestroyCursorAt(i);
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo2); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo2);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 1); BattlePutTextOnWindow(gDisplayedStringBattle, 1);
} }
static void SafariHandleUnknownYesNoBox(void) static void SafariHandleUnknownYesNoBox(void)
@@ -645,12 +645,12 @@ static void SafariHandleDrawPartyStatusSummary(void)
SafariBufferExecCompleted(); SafariBufferExecCompleted();
} }
static void SafariHandleCmd49(void) static void SafariHandleHidePartyStatusSummary(void)
{ {
SafariBufferExecCompleted(); SafariBufferExecCompleted();
} }
static void SafariHandleCmd50(void) static void SafariHandleEndBounceEffect(void)
{ {
SafariBufferExecCompleted(); SafariBufferExecCompleted();
} }
+27 -27
View File
@@ -15,6 +15,7 @@
#include "constants/songs.h" #include "constants/songs.h"
#include "sound.h" #include "sound.h"
#include "constants/moves.h" #include "constants/moves.h"
#include "constants/trainers.h"
#include "window.h" #include "window.h"
#include "m4a.h" #include "m4a.h"
#include "palette.h" #include "palette.h"
@@ -38,7 +39,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
// this file's functions // this file's functions
static void WallyHandleGetMonData(void); static void WallyHandleGetMonData(void);
@@ -90,8 +90,8 @@ static void WallyHandleFaintingCry(void);
static void WallyHandleIntroSlide(void); static void WallyHandleIntroSlide(void);
static void WallyHandleIntroTrainerBallThrow(void); static void WallyHandleIntroTrainerBallThrow(void);
static void WallyHandleDrawPartyStatusSummary(void); static void WallyHandleDrawPartyStatusSummary(void);
static void WallyHandleCmd49(void); static void WallyHandleHidePartyStatusSummary(void);
static void WallyHandleCmd50(void); static void WallyHandleEndBounceEffect(void);
static void WallyHandleSpriteInvisibility(void); static void WallyHandleSpriteInvisibility(void);
static void WallyHandleBattleAnimation(void); static void WallyHandleBattleAnimation(void);
static void WallyHandleLinkStandbyMsg(void); static void WallyHandleLinkStandbyMsg(void);
@@ -159,8 +159,8 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
WallyHandleIntroSlide, WallyHandleIntroSlide,
WallyHandleIntroTrainerBallThrow, WallyHandleIntroTrainerBallThrow,
WallyHandleDrawPartyStatusSummary, WallyHandleDrawPartyStatusSummary,
WallyHandleCmd49, WallyHandleHidePartyStatusSummary,
WallyHandleCmd50, WallyHandleEndBounceEffect,
WallyHandleSpriteInvisibility, WallyHandleSpriteInvisibility,
WallyHandleBattleAnimation, WallyHandleBattleAnimation,
WallyHandleLinkStandbyMsg, WallyHandleLinkStandbyMsg,
@@ -253,7 +253,7 @@ static void WallyHandleActions(void)
} }
} }
static void CompleteOnBankSpriteCallbackDummy(void) static void CompleteOnBattlerSpriteCallbackDummy(void)
{ {
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
WallyBufferExecCompleted(); WallyBufferExecCompleted();
@@ -349,7 +349,7 @@ static void sub_8168818(void)
static void CompleteOnHealthbarDone(void) static void CompleteOnHealthbarDone(void)
{ {
s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1037,26 +1037,26 @@ static void WallyHandleReturnMonToBall(void)
static void WallyHandleDrawTrainerPic(void) static void WallyHandleDrawTrainerPic(void)
{ {
DecompressTrainerBackPic(BACK_PIC_WALLY, gActiveBattler); DecompressTrainerBackPic(TRAINER_BACK_PIC_WALLY, gActiveBattler);
sub_806A12C(BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
80 + 4 * (8 - gTrainerBackPicCoords[BACK_PIC_WALLY].coords), 80 + 4 * (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].coords),
30); 30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
} }
static void WallyHandleTrainerSlide(void) static void WallyHandleTrainerSlide(void)
{ {
DecompressTrainerBackPic(BACK_PIC_WALLY, gActiveBattler); DecompressTrainerBackPic(TRAINER_BACK_PIC_WALLY, gActiveBattler);
sub_806A12C(BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80, 80,
80 + 4 * (8 - gTrainerBackPicCoords[BACK_PIC_WALLY].coords), 80 + 4 * (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].coords),
30); 30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
@@ -1179,7 +1179,7 @@ static void WallyHandlePrintString(void)
gBattle_BG0_Y = 0; gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]); stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId); BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
} }
@@ -1206,14 +1206,14 @@ static void WallyHandleChooseAction(void)
s32 i; s32 i;
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
BattleHandleAddTextPrinter(gText_BattleMenu, 2); BattlePutTextOnWindow(gText_BattleMenu, 2);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
ActionSelectionDestroyCursorAt(i); ActionSelectionDestroyCursorAt(i);
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillWallyDo); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillWallyDo);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 1); BattlePutTextOnWindow(gDisplayedStringBattle, 1);
} }
static void WallyHandleUnknownYesNoBox(void) static void WallyHandleUnknownYesNoBox(void)
@@ -1444,14 +1444,14 @@ static void WallyHandleIntroTrainerBallThrow(void)
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8); paletteNum = AllocSpritePalette(0xD6F8);
LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_WALLY].data, 0x100 + paletteNum * 16, 32); LoadCompressedPalette(gTrainerBackPicPaletteTable[TRAINER_BACK_PIC_WALLY].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(sub_816AC04, 5); taskId = CreateTask(sub_816AC04, 5);
gTasks[taskId].data[0] = gActiveBattler; gTasks[taskId].data[0] = gActiveBattler;
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30; gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1; gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_21; gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
@@ -1465,8 +1465,8 @@ static void sub_816AA80(u8 battlerId)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
sub_806A068(species, GetBattlerPosition(battlerId)); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C, gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId)); sub_80A82E4(battlerId));
@@ -1511,18 +1511,18 @@ static void WallyHandleDrawPartyStatusSummary(void)
} }
else else
{ {
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
WallyBufferExecCompleted(); WallyBufferExecCompleted();
} }
} }
static void WallyHandleCmd49(void) static void WallyHandleHidePartyStatusSummary(void)
{ {
WallyBufferExecCompleted(); WallyBufferExecCompleted();
} }
static void WallyHandleCmd50(void) static void WallyHandleEndBounceEffect(void)
{ {
WallyBufferExecCompleted(); WallyBufferExecCompleted();
} }
+24 -24
View File
@@ -587,7 +587,7 @@ static void SetBattlePartyIds(void)
{ {
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
for (j = 0; j < 6; j++) for (j = 0; j < PARTY_SIZE; j++)
{ {
if (i < 2) if (i < 2)
{ {
@@ -1082,14 +1082,14 @@ void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 m
void BtlController_EmitPrintString(u8 bufferId, u16 stringID) void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
{ {
s32 i; s32 i;
struct StringInfoBattle* stringInfo; struct BattleMsgData* stringInfo;
sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING; sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING;
sBattleBuffersTransferData[1] = gBattleOutcome; sBattleBuffersTransferData[1] = gBattleOutcome;
sBattleBuffersTransferData[2] = stringID; sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
stringInfo = (struct StringInfoBattle*)(&sBattleBuffersTransferData[4]); stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove; stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove; stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem; stringInfo->lastItem = gLastUsedItem;
@@ -1097,7 +1097,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
stringInfo->scrActive = gBattleScripting.battler; stringInfo->scrActive = gBattleScripting.battler;
stringInfo->unk1605E = gBattleStruct->field_52; stringInfo->unk1605E = gBattleStruct->field_52;
stringInfo->hpScale = gBattleStruct->hpScale; stringInfo->hpScale = gBattleStruct->hpScale;
stringInfo->StringBank = gPotentialItemEffectBattler; stringInfo->itemEffectBattler = gPotentialItemEffectBattler;
stringInfo->moveType = gBattleMoves[gCurrentMove].type; stringInfo->moveType = gBattleMoves[gCurrentMove].type;
for (i = 0; i < MAX_BATTLERS_COUNT; i++) for (i = 0; i < MAX_BATTLERS_COUNT; i++)
@@ -1108,20 +1108,20 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i]; stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
stringInfo->textBuffs[2][i] = gBattleTextBuff3[i]; stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
} }
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4);
} }
void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID) void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
{ {
s32 i; s32 i;
struct StringInfoBattle *stringInfo; struct BattleMsgData *stringInfo;
sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY; sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY;
sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY; sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
sBattleBuffersTransferData[2] = stringID; sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
stringInfo = (struct StringInfoBattle*)(&sBattleBuffersTransferData[4]); stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove; stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove; stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem; stringInfo->lastItem = gLastUsedItem;
@@ -1137,7 +1137,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i]; stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
stringInfo->textBuffs[2][i] = gBattleTextBuff3[i]; stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
} }
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4);
} }
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2) void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2)
@@ -1181,7 +1181,7 @@ void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4) void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4)
{ {
s32 i; s32 i;
@@ -1191,7 +1191,7 @@ void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 ability
sBattleBuffersTransferData[3] = abilityId; sBattleBuffersTransferData[3] = abilityId;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
sBattleBuffersTransferData[4 + i] = arg4[i]; sBattleBuffersTransferData[4 + i] = arg4[i];
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // but only 7 bytes were written PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written.
} }
void BtlController_EmitCmd23(u8 bufferId) void BtlController_EmitCmd23(u8 bufferId)
@@ -1449,26 +1449,26 @@ void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* h
sBattleBuffersTransferData[1] = arg2 & 0x7F; sBattleBuffersTransferData[1] = arg2 & 0x7F;
sBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7; sBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7;
sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY; sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * 6); i++) for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); i++)
sBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus)); sBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus));
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * 6 + 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * PARTY_SIZE + 4);
} }
void BtlController_EmitCmd49(u8 bufferId) void BtlController_EmitHidePartyStatusSummary(u8 bufferId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_49; sBattleBuffersTransferData[0] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
sBattleBuffersTransferData[1] = CONTROLLER_49; sBattleBuffersTransferData[1] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
sBattleBuffersTransferData[2] = CONTROLLER_49; sBattleBuffersTransferData[2] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
sBattleBuffersTransferData[3] = CONTROLLER_49; sBattleBuffersTransferData[3] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
void BtlController_EmitCmd50(u8 bufferId) void BtlController_EmitEndBounceEffect(u8 bufferId)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_50; sBattleBuffersTransferData[0] = CONTROLLER_ENDBOUNCE;
sBattleBuffersTransferData[1] = CONTROLLER_50; sBattleBuffersTransferData[1] = CONTROLLER_ENDBOUNCE;
sBattleBuffersTransferData[2] = CONTROLLER_50; sBattleBuffersTransferData[2] = CONTROLLER_ENDBOUNCE;
sBattleBuffersTransferData[3] = CONTROLLER_50; sBattleBuffersTransferData[3] = CONTROLLER_ENDBOUNCE;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
} }
@@ -1511,10 +1511,10 @@ void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
} }
void BtlController_EmitCmd55(u8 bufferId, u8 arg1) void BtlController_EmitCmd55(u8 bufferId, u8 battleOutcome)
{ {
sBattleBuffersTransferData[0] = CONTROLLER_55; sBattleBuffersTransferData[0] = CONTROLLER_55;
sBattleBuffersTransferData[1] = arg1; sBattleBuffersTransferData[1] = battleOutcome;
sBattleBuffersTransferData[2] = gSaveBlock2Ptr->frontier.field_CA9_b; sBattleBuffersTransferData[2] = gSaveBlock2Ptr->frontier.field_CA9_b;
sBattleBuffersTransferData[3] = gSaveBlock2Ptr->frontier.field_CA9_b; sBattleBuffersTransferData[3] = gSaveBlock2Ptr->frontier.field_CA9_b;
sBattleBuffersTransferData[5] = sBattleBuffersTransferData[4] = sub_81850DC(&sBattleBuffersTransferData[6]); sBattleBuffersTransferData[5] = sBattleBuffersTransferData[4] = sub_81850DC(&sBattleBuffersTransferData[6]);
+8 -5
View File
@@ -16,14 +16,15 @@ extern const struct CompressedSpriteSheet gTrainerBackPicTable[];
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const union AffineAnimCmd *const gUnknown_082FF618[]; extern const union AffineAnimCmd *const gUnknown_082FF618[];
extern const union AffineAnimCmd *const gUnknown_082FF694[]; extern const union AffineAnimCmd *const gUnknown_082FF694[];
extern const union AnimCmd *const gUnknown_082FF70C[]; extern const union AnimCmd *const gPlayerMonSpriteAnimsTable[];
extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[NUM_SPECIES]; extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[NUM_SPECIES];
extern const union AnimCmd *const *const gUnknown_0830536C[]; extern const union AnimCmd *const *const gUnknown_0830536C[];
extern const u8 gFacilityClassToPicIndex[]; extern const u8 gFacilityClassToPicIndex[];
// Static type declarations // Static type declarations
struct BattleDomeCard { struct BattleDomeCard
{
u8 *frames; u8 *frames;
struct SpriteFrameImage *images; struct SpriteFrameImage *images;
u16 paletteTag; u16 paletteTag;
@@ -41,10 +42,12 @@ static EWRAM_DATA struct BattleDomeCard gUnknown_0203CD04[8] = {};
// .rodata // .rodata
static const struct BattleDomeCard gUnknown_0860B058 = {}; static const struct BattleDomeCard gUnknown_0860B058 = {};
static const struct OamData gUnknown_0860B064 = { static const struct OamData gUnknown_0860B064 =
{
.size = 3 .size = 3
}; };
static const struct OamData gUnknown_0860B06C = { static const struct OamData gUnknown_0860B06C =
{
.affineMode = 1, .size = 3 .affineMode = 1, .size = 3
}; };
@@ -158,7 +161,7 @@ static void uns_builder_assign_animtable1(bool8 isTrainer)
{ {
if (!isTrainer) if (!isTrainer)
{ {
gUnknown_0203CCEC.anims = gUnknown_082FF70C; gUnknown_0203CCEC.anims = gPlayerMonSpriteAnimsTable;
} }
else else
{ {
+104 -103
View File
@@ -67,48 +67,48 @@ static void sub_805D7EC(struct Sprite *sprite);
static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId); static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId);
static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId); static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId);
static void Task_ClearBitWhenSpecialAnimDone(u8 taskId); static void Task_ClearBitWhenSpecialAnimDone(u8 taskId);
static void ClearSpritesBankHealthboxAnimData(void); static void ClearSpritesBattlerHealthboxAnimData(void);
// const rom data // const rom data
static const struct CompressedSpriteSheet gUnknown_0832C0D0 = static const struct CompressedSpriteSheet sSpriteSheet_SinglesPlayerHealthbox =
{ {
gUnknown_08C1F1C8, 0x1000, TAG_HEALTHBOX_PLAYER1_TILE gUnknown_08C1F1C8, 0x1000, TAG_HEALTHBOX_PLAYER1_TILE
}; };
static const struct CompressedSpriteSheet gUnknown_0832C0D8 = static const struct CompressedSpriteSheet sSpriteSheet_SinglesOpponentHealthbox =
{ {
gUnknown_08C1F46C, 0x1000, TAG_HEALTHBOX_OPPONENT1_TILE gUnknown_08C1F46C, 0x1000, TAG_HEALTHBOX_OPPONENT1_TILE
}; };
static const struct CompressedSpriteSheet gUnknown_0832C0E0[2] = static const struct CompressedSpriteSheet sSpriteSheets_DoublesPlayerHealthbox[2] =
{ {
{gUnknown_08C1F5E8, 0x800, TAG_HEALTHBOX_PLAYER1_TILE}, {gUnknown_08C1F5E8, 0x800, TAG_HEALTHBOX_PLAYER1_TILE},
{gUnknown_08C1F5E8, 0x800, TAG_HEALTHBOX_PLAYER2_TILE} {gUnknown_08C1F5E8, 0x800, TAG_HEALTHBOX_PLAYER2_TILE}
}; };
static const struct CompressedSpriteSheet gUnknown_0832C0F0[2] = static const struct CompressedSpriteSheet sSpriteSheets_DoublesOpponentHealthbox[2] =
{ {
{gUnknown_08C1F76C, 0x800, TAG_HEALTHBOX_OPPONENT1_TILE}, {gUnknown_08C1F76C, 0x800, TAG_HEALTHBOX_OPPONENT1_TILE},
{gUnknown_08C1F76C, 0x800, TAG_HEALTHBOX_OPPONENT2_TILE} {gUnknown_08C1F76C, 0x800, TAG_HEALTHBOX_OPPONENT2_TILE}
}; };
static const struct CompressedSpriteSheet gUnknown_0832C100 = static const struct CompressedSpriteSheet sSpriteSheet_SafariHealthbox =
{ {
gUnknown_08C1F8E8, 0x1000, TAG_HEALTHBOX_SAFARI_TILE gUnknown_08C1F8E8, 0x1000, TAG_HEALTHBOX_SAFARI_TILE
}; };
static const struct CompressedSpriteSheet gUnknown_0832C108[MAX_BATTLERS_COUNT] = static const struct CompressedSpriteSheet sSpriteSheets_HealthBar[MAX_BATTLERS_COUNT] =
{ {
{gBlankGfxCompressed, 0x0100, 0xd704}, {gBlankGfxCompressed, 0x0100, TAG_HEALTHBAR_PLAYER1_TILE},
{gBlankGfxCompressed, 0x0120, 0xd705}, {gBlankGfxCompressed, 0x0120, TAG_HEALTHBAR_OPPONENT1_TILE},
{gBlankGfxCompressed, 0x0100, 0xd706}, {gBlankGfxCompressed, 0x0100, TAG_HEALTHBAR_PLAYER2_TILE},
{gBlankGfxCompressed, 0x0120, 0xd707} {gBlankGfxCompressed, 0x0120, TAG_HEALTHBAR_OPPONENT2_TILE}
}; };
static const struct SpritePalette gUnknown_0832C128[2] = static const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2] =
{ {
{gBattleInterface_BallStatusBarPal, TAG_HEALTHBOX_PAL}, {gBattleInterface_BallStatusBarPal, TAG_HEALTHBOX_PAL},
{gBattleInterface_BallDisplayPal, 0xd704} {gBattleInterface_BallDisplayPal, TAG_HEALTHBAR_PAL}
}; };
// code // code
@@ -411,35 +411,35 @@ void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status)
#define tBattlerId data[0] #define tBattlerId data[0]
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId, u16 argument) bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId, u16 argument)
{ {
u8 taskId; u8 taskId;
if (tableId == B_ANIM_CASTFORM_CHANGE && (argument & 0x80)) if (tableId == B_ANIM_CASTFORM_CHANGE && (argument & 0x80))
{ {
gBattleMonForms[activeBank] = (argument & ~(0x80)); gBattleMonForms[activeBattler] = (argument & ~(0x80));
return TRUE; return TRUE;
} }
if (gBattleSpritesDataPtr->battlerData[activeBank].behindSubstitute if (gBattleSpritesDataPtr->battlerData[activeBattler].behindSubstitute
&& !ShouldAnimBeDoneRegardlessOfSubsitute(tableId)) && !ShouldAnimBeDoneRegardlessOfSubsitute(tableId))
{ {
return TRUE; return TRUE;
} }
if (gBattleSpritesDataPtr->battlerData[activeBank].behindSubstitute if (gBattleSpritesDataPtr->battlerData[activeBattler].behindSubstitute
&& tableId == B_ANIM_SUBSTITUTE_FADE && tableId == B_ANIM_SUBSTITUTE_FADE
&& gSprites[gBattlerSpriteIds[activeBank]].invisible) && gSprites[gBattlerSpriteIds[activeBattler]].invisible)
{ {
LoadBattleMonGfxAndAnimate(activeBank, TRUE, gBattlerSpriteIds[activeBank]); LoadBattleMonGfxAndAnimate(activeBattler, TRUE, gBattlerSpriteIds[activeBattler]);
ClearBehindSubstituteBit(activeBank); ClearBehindSubstituteBit(activeBattler);
return TRUE; return TRUE;
} }
gBattleAnimAttacker = atkBank; gBattleAnimAttacker = atkBattler;
gBattleAnimTarget = defBank; gBattleAnimTarget = defBattler;
gBattleSpritesDataPtr->animationData->animArg = argument; gBattleSpritesDataPtr->animationData->animArg = argument;
LaunchBattleAnimation(gBattleAnims_VariousTable, tableId, FALSE); LaunchBattleAnimation(gBattleAnims_VariousTable, tableId, FALSE);
taskId = CreateTask(Task_ClearBitWhenBattleTableAnimDone, 10); taskId = CreateTask(Task_ClearBitWhenBattleTableAnimDone, 10);
gTasks[taskId].tBattlerId = activeBank; gTasks[taskId].tBattlerId = activeBattler;
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 1; gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 1;
return FALSE; return FALSE;
@@ -475,15 +475,15 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId)
#define tBattlerId data[0] #define tBattlerId data[0]
void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId) void InitAndLaunchSpecialAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId)
{ {
u8 taskId; u8 taskId;
gBattleAnimAttacker = atkBank; gBattleAnimAttacker = atkBattler;
gBattleAnimTarget = defBank; gBattleAnimTarget = defBattler;
LaunchBattleAnimation(gBattleAnims_Special, tableId, FALSE); LaunchBattleAnimation(gBattleAnims_Special, tableId, FALSE);
taskId = CreateTask(Task_ClearBitWhenSpecialAnimDone, 10); taskId = CreateTask(Task_ClearBitWhenSpecialAnimDone, 10);
gTasks[taskId].tBattlerId = activeBank; gTasks[taskId].tBattlerId = activeBattler;
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 1; gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 1;
} }
@@ -499,7 +499,7 @@ static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
#undef tBattlerId #undef tBattlerId
// great function to include newly added moves that don't have animation yet // Great function to include newly added moves that don't have animation yet.
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn) bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
{ {
return FALSE; return FALSE;
@@ -679,29 +679,30 @@ void FreeTrainerFrontPicPalette(u16 frontPicId)
FreeSpritePaletteByTag(gTrainerFrontPicPaletteTable[frontPicId].tag); FreeSpritePaletteByTag(gTrainerFrontPicPaletteTable[frontPicId].tag);
} }
void sub_805DFFC(void) // Unused.
void BattleLoadAllHealthBoxesGfxAtOnce(void)
{ {
u8 numberOfBanks = 0; u8 numberOfBattlers = 0;
u8 i; u8 i;
LoadSpritePalette(&gUnknown_0832C128[0]); LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]);
LoadSpritePalette(&gUnknown_0832C128[1]); LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]);
if (!IsDoubleBattle()) if (!IsDoubleBattle())
{ {
LoadCompressedObjectPic(&gUnknown_0832C0D0); LoadCompressedObjectPic(&sSpriteSheet_SinglesPlayerHealthbox);
LoadCompressedObjectPic(&gUnknown_0832C0D8); LoadCompressedObjectPic(&sSpriteSheet_SinglesOpponentHealthbox);
numberOfBanks = 2; numberOfBattlers = 2;
} }
else else
{ {
LoadCompressedObjectPic(&gUnknown_0832C0E0[0]); LoadCompressedObjectPic(&sSpriteSheets_DoublesPlayerHealthbox[0]);
LoadCompressedObjectPic(&gUnknown_0832C0E0[1]); LoadCompressedObjectPic(&sSpriteSheets_DoublesPlayerHealthbox[1]);
LoadCompressedObjectPic(&gUnknown_0832C0F0[0]); LoadCompressedObjectPic(&sSpriteSheets_DoublesOpponentHealthbox[0]);
LoadCompressedObjectPic(&gUnknown_0832C0F0[1]); LoadCompressedObjectPic(&sSpriteSheets_DoublesOpponentHealthbox[1]);
numberOfBanks = 4; numberOfBattlers = 4;
} }
for (i = 0; i < numberOfBanks; i++) for (i = 0; i < numberOfBattlers; i++)
LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[i]]); LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[i]]);
} }
bool8 BattleLoadAllHealthBoxesGfx(u8 state) bool8 BattleLoadAllHealthBoxesGfx(u8 state)
@@ -712,45 +713,45 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state)
{ {
if (state == 1) if (state == 1)
{ {
LoadSpritePalette(&gUnknown_0832C128[0]); LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]);
LoadSpritePalette(&gUnknown_0832C128[1]); LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]);
} }
else if (!IsDoubleBattle()) else if (!IsDoubleBattle())
{ {
if (state == 2) if (state == 2)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
LoadCompressedObjectPic(&gUnknown_0832C100); LoadCompressedObjectPic(&sSpriteSheet_SafariHealthbox);
else else
LoadCompressedObjectPic(&gUnknown_0832C0D0); LoadCompressedObjectPic(&sSpriteSheet_SinglesPlayerHealthbox);
} }
else if (state == 3) else if (state == 3)
LoadCompressedObjectPic(&gUnknown_0832C0D8); LoadCompressedObjectPic(&sSpriteSheet_SinglesOpponentHealthbox);
else if (state == 4) else if (state == 4)
LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[0]]); LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[0]]);
else if (state == 5) else if (state == 5)
LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[1]]); LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[1]]);
else else
retVal = TRUE; retVal = TRUE;
} }
else else
{ {
if (state == 2) if (state == 2)
LoadCompressedObjectPic(&gUnknown_0832C0E0[0]); LoadCompressedObjectPic(&sSpriteSheets_DoublesPlayerHealthbox[0]);
else if (state == 3) else if (state == 3)
LoadCompressedObjectPic(&gUnknown_0832C0E0[1]); LoadCompressedObjectPic(&sSpriteSheets_DoublesPlayerHealthbox[1]);
else if (state == 4) else if (state == 4)
LoadCompressedObjectPic(&gUnknown_0832C0F0[0]); LoadCompressedObjectPic(&sSpriteSheets_DoublesOpponentHealthbox[0]);
else if (state == 5) else if (state == 5)
LoadCompressedObjectPic(&gUnknown_0832C0F0[1]); LoadCompressedObjectPic(&sSpriteSheets_DoublesOpponentHealthbox[1]);
else if (state == 6) else if (state == 6)
LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[0]]); LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[0]]);
else if (state == 7) else if (state == 7)
LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[1]]); LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[1]]);
else if (state == 8) else if (state == 8)
LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[2]]); LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[2]]);
else if (state == 9) else if (state == 9)
LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[3]]); LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[3]]);
else else
retVal = TRUE; retVal = TRUE;
} }
@@ -771,7 +772,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId)
switch (*state1) switch (*state1)
{ {
case 0: case 0:
ClearSpritesBankHealthboxAnimData(); ClearSpritesBattlerHealthboxAnimData();
(*state1)++; (*state1)++;
break; break;
case 1: case 1:
@@ -849,7 +850,7 @@ void ClearSpritesHealthboxAnimData(void)
memset(gBattleSpritesDataPtr->animationData, 0, sizeof(struct BattleAnimationInfo)); memset(gBattleSpritesDataPtr->animationData, 0, sizeof(struct BattleAnimationInfo));
} }
static void ClearSpritesBankHealthboxAnimData(void) static void ClearSpritesBattlerHealthboxAnimData(void)
{ {
ClearSpritesHealthboxAnimData(); ClearSpritesHealthboxAnimData();
memset(gBattleSpritesDataPtr->battlerData, 0, sizeof(struct BattleSpriteInfo) * MAX_BATTLERS_COUNT); memset(gBattleSpritesDataPtr->battlerData, 0, sizeof(struct BattleSpriteInfo) * MAX_BATTLERS_COUNT);
@@ -868,7 +869,7 @@ void CopyBattleSpriteInvisibility(u8 battlerId)
gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible; gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible;
} }
void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform) void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform)
{ {
u16 paletteOffset; u16 paletteOffset;
u32 personalityValue; u32 personalityValue;
@@ -878,16 +879,16 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
if (notTransform) if (notTransform)
{ {
StartSpriteAnim(&gSprites[gBattlerSpriteIds[bankAtk]], gBattleSpritesDataPtr->animationData->animArg); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleSpritesDataPtr->animationData->animArg);
paletteOffset = 0x100 + bankAtk * 16; paletteOffset = 0x100 + battlerAtk * 16;
LoadPalette(gBattleStruct->castformPalette[gBattleSpritesDataPtr->animationData->animArg], paletteOffset, 32); LoadPalette(gBattleStruct->castformPalette[gBattleSpritesDataPtr->animationData->animArg], paletteOffset, 32);
gBattleMonForms[bankAtk] = gBattleSpritesDataPtr->animationData->animArg; gBattleMonForms[battlerAtk] = gBattleSpritesDataPtr->animationData->animArg;
if (gBattleSpritesDataPtr->battlerData[bankAtk].transformSpecies != SPECIES_NONE) if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies != SPECIES_NONE)
{ {
BlendPalette(paletteOffset, 16, 6, RGB_WHITE); BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
} }
gSprites[gBattlerSpriteIds[bankAtk]].pos1.y = GetBattlerSpriteDefault_Y(bankAtk); gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
} }
else else
{ {
@@ -909,48 +910,48 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
} }
else else
{ {
position = GetBattlerPosition(bankAtk); position = GetBattlerPosition(battlerAtk);
if (GetBattlerSide(bankDef) == B_SIDE_OPPONENT) if (GetBattlerSide(battlerDef) == B_SIDE_OPPONENT)
targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bankDef]], MON_DATA_SPECIES); targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
else else
targetSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bankDef]], MON_DATA_SPECIES); targetSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
if (GetBattlerSide(bankAtk) == B_SIDE_PLAYER) if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER)
{ {
personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bankAtk]], MON_DATA_PERSONALITY); personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bankAtk]], MON_DATA_OT_ID); otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies], HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies],
gMonSpritesGfxPtr->sprites[position], gMonSpritesGfxPtr->sprites[position],
targetSpecies, targetSpecies,
gTransformedPersonalities[bankAtk]); gTransformedPersonalities[battlerAtk]);
} }
else else
{ {
personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bankAtk]], MON_DATA_PERSONALITY); personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bankAtk]], MON_DATA_OT_ID); otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[targetSpecies], HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[targetSpecies],
gMonSpritesGfxPtr->sprites[position], gMonSpritesGfxPtr->sprites[position],
targetSpecies, targetSpecies,
gTransformedPersonalities[bankAtk]); gTransformedPersonalities[battlerAtk]);
} }
} }
src = gMonSpritesGfxPtr->sprites[position]; src = gMonSpritesGfxPtr->sprites[position];
dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[bankAtk]].oam.tileNum * 32); dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32);
DmaCopy32(3, src, dst, 0x800); DmaCopy32(3, src, dst, 0x800);
paletteOffset = 0x100 + bankAtk * 16; paletteOffset = 0x100 + battlerAtk * 16;
lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue);
LZDecompressWram(lzPaletteData, gDecompressionBuffer); LZDecompressWram(lzPaletteData, gDecompressionBuffer);
LoadPalette(gDecompressionBuffer, paletteOffset, 32); LoadPalette(gDecompressionBuffer, paletteOffset, 32);
if (targetSpecies == SPECIES_CASTFORM) if (targetSpecies == SPECIES_CASTFORM)
{ {
gSprites[gBattlerSpriteIds[bankAtk]].anims = gMonAnimationsSpriteAnimsPtrTable[targetSpecies]; gSprites[gBattlerSpriteIds[battlerAtk]].anims = gMonAnimationsSpriteAnimsPtrTable[targetSpecies];
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]); LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[bankDef] * 16, paletteOffset, 32); LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[battlerDef] * 16, paletteOffset, 32);
} }
BlendPalette(paletteOffset, 16, 6, RGB_WHITE); BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
@@ -958,12 +959,12 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
if (!IsContest()) if (!IsContest())
{ {
gBattleSpritesDataPtr->battlerData[bankAtk].transformSpecies = targetSpecies; gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies = targetSpecies;
gBattleMonForms[bankAtk] = gBattleMonForms[bankDef]; gBattleMonForms[battlerAtk] = gBattleMonForms[battlerDef];
} }
gSprites[gBattlerSpriteIds[bankAtk]].pos1.y = GetBattlerSpriteDefault_Y(bankAtk); gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[bankAtk]], gBattleMonForms[bankAtk]); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleMonForms[battlerAtk]);
} }
} }
@@ -1068,11 +1069,11 @@ void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId)
void BattleStopLowHpSound(void) void BattleStopLowHpSound(void)
{ {
u8 playerBank = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); u8 playerBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
gBattleSpritesDataPtr->battlerData[playerBank].lowHpSong = 0; gBattleSpritesDataPtr->battlerData[playerBattler].lowHpSong = 0;
if (IsDoubleBattle()) if (IsDoubleBattle())
gBattleSpritesDataPtr->battlerData[playerBank ^ BIT_FLANK].lowHpSong = 0; gBattleSpritesDataPtr->battlerData[playerBattler ^ BIT_FLANK].lowHpSong = 0;
m4aSongNumStop(SE_HINSI); m4aSongNumStop(SE_HINSI);
} }
@@ -1085,19 +1086,19 @@ u8 GetMonHPBarLevel(struct Pokemon *mon)
return GetHPBarLevel(hp, maxHP); return GetHPBarLevel(hp, maxHP);
} }
void sub_805EAE8(void) void HandleBattleLowHpMusicChange(void)
{ {
if (gMain.inBattle) if (gMain.inBattle)
{ {
u8 playerBank1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); u8 playerBattler1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
u8 playerBank2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); u8 playerBattler2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
u8 bank1PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBank1]); u8 battler1PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler1]);
u8 bank2PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBank2]); u8 battler2PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler2]);
if (GetMonData(&gPlayerParty[bank1PartyId], MON_DATA_HP) != 0) if (GetMonData(&gPlayerParty[battler1PartyId], MON_DATA_HP) != 0)
HandleLowHpMusicChange(&gPlayerParty[bank1PartyId], playerBank1); HandleLowHpMusicChange(&gPlayerParty[battler1PartyId], playerBattler1);
if (IsDoubleBattle() && GetMonData(&gPlayerParty[bank2PartyId], MON_DATA_HP) != 0) if (IsDoubleBattle() && GetMonData(&gPlayerParty[battler2PartyId], MON_DATA_HP) != 0)
HandleLowHpMusicChange(&gPlayerParty[bank2PartyId], playerBank2); HandleLowHpMusicChange(&gPlayerParty[battler2PartyId], playerBattler2);
} }
} }
@@ -1147,14 +1148,14 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
{ {
bool8 invisible = FALSE; bool8 invisible = FALSE;
u8 battlerId = shadowSprite->tBattlerId; u8 battlerId = shadowSprite->tBattlerId;
struct Sprite *bankSprite = &gSprites[gBattlerSpriteIds[battlerId]]; struct Sprite *battlerSprite = &gSprites[gBattlerSpriteIds[battlerId]];
if (!bankSprite->inUse || !IsBattlerSpritePresent(battlerId)) if (!battlerSprite->inUse || !IsBattlerSpritePresent(battlerId))
{ {
shadowSprite->callback = SpriteCB_SetInvisible; shadowSprite->callback = SpriteCB_SetInvisible;
return; return;
} }
if (gAnimScriptActive || bankSprite->invisible) if (gAnimScriptActive || battlerSprite->invisible)
invisible = TRUE; invisible = TRUE;
else if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE else if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE
&& gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies] == 0) && gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies] == 0)
@@ -1163,8 +1164,8 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
if (gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute) if (gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute)
invisible = TRUE; invisible = TRUE;
shadowSprite->pos1.x = bankSprite->pos1.x; shadowSprite->pos1.x = battlerSprite->pos1.x;
shadowSprite->pos2.x = bankSprite->pos2.x; shadowSprite->pos2.x = battlerSprite->pos2.x;
shadowSprite->invisible = invisible; shadowSprite->invisible = invisible;
} }
@@ -1177,7 +1178,7 @@ void SpriteCB_SetInvisible(struct Sprite *sprite)
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species) void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species)
{ {
// The player's shadow is never seen // The player's shadow is never seen.
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
return; return;
@@ -1270,7 +1271,7 @@ void FreeMonSpritesGfx(void)
FREE_AND_SET_NULL(gMonSpritesGfxPtr); FREE_AND_SET_NULL(gMonSpritesGfxPtr);
} }
bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon) bool32 ShouldPlayNormalMonCry(struct Pokemon *mon)
{ {
s16 hp, maxHP; s16 hp, maxHP;
s32 barLevel; s32 barLevel;
+467 -444
View File
File diff suppressed because it is too large Load Diff
+272 -249
View File
File diff suppressed because it is too large Load Diff
+679 -138
View File
File diff suppressed because it is too large Load Diff
+64 -63
View File
@@ -19,6 +19,7 @@
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/trainers.h" #include "constants/trainers.h"
#include "constants/battle_anim.h" #include "constants/battle_anim.h"
#include "constants/map_types.h"
#include "text.h" #include "text.h"
#include "sound.h" #include "sound.h"
#include "pokedex.h" #include "pokedex.h"
@@ -40,6 +41,7 @@
#include "constants/battle_string_ids.h" #include "constants/battle_string_ids.h"
#include "battle_setup.h" #include "battle_setup.h"
#include "overworld.h" #include "overworld.h"
#include "party_menu.h"
extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y; extern u16 gBattle_BG1_Y;
@@ -67,7 +69,6 @@ extern bool8 sub_81B1250(void); // ?
extern bool8 InBattlePike(void); extern bool8 InBattlePike(void);
extern bool8 InBattlePyramid(void); extern bool8 InBattlePyramid(void);
extern u16 GetBattlePyramidPickupItemId(void); extern u16 GetBattlePyramidPickupItemId(void);
extern u8 Overworld_GetMapTypeOfSaveblockLocation(void);
extern u8 sub_813B21C(void); extern u8 sub_813B21C(void);
extern u16 get_unknown_box_id(void); extern u16 get_unknown_box_id(void);
@@ -185,10 +186,10 @@ static void atk5B_yesnoboxstoplearningmove(void);
static void atk5C_hitanimation(void); static void atk5C_hitanimation(void);
static void atk5D_getmoneyreward(void); static void atk5D_getmoneyreward(void);
static void atk5E(void); static void atk5E(void);
static void atk5F(void); static void atk5F_swapattackerwithtarget(void);
static void atk60_incrementgamestat(void); static void atk60_incrementgamestat(void);
static void atk61_drawpartystatussummary(void); static void atk61_drawpartystatussummary(void);
static void atk62(void); static void atk62_hidepartystatussummary(void);
static void atk63_jumptorandomattack(void); static void atk63_jumptorandomattack(void);
static void atk64_statusanimation(void); static void atk64_statusanimation(void);
static void atk65_status2animation(void); static void atk65_status2animation(void);
@@ -327,7 +328,7 @@ static void atkE9_setweatherballtype(void);
static void atkEA_tryrecycleitem(void); static void atkEA_tryrecycleitem(void);
static void atkEB_settypetoterrain(void); static void atkEB_settypetoterrain(void);
static void atkEC_pursuitrelated(void); static void atkEC_pursuitrelated(void);
static void atkEF_snatchsetbanks(void); static void atkEF_snatchsetbattlers(void);
static void atkEE_removelightscreenreflect(void); static void atkEE_removelightscreenreflect(void);
static void atkEF_handleballthrow(void); static void atkEF_handleballthrow(void);
static void atkF0_givecaughtmon(void); static void atkF0_givecaughtmon(void);
@@ -437,10 +438,10 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atk5C_hitanimation, atk5C_hitanimation,
atk5D_getmoneyreward, atk5D_getmoneyreward,
atk5E, atk5E,
atk5F, atk5F_swapattackerwithtarget,
atk60_incrementgamestat, atk60_incrementgamestat,
atk61_drawpartystatussummary, atk61_drawpartystatussummary,
atk62, atk62_hidepartystatussummary,
atk63_jumptorandomattack, atk63_jumptorandomattack,
atk64_statusanimation, atk64_statusanimation,
atk65_status2animation, atk65_status2animation,
@@ -579,7 +580,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atkEA_tryrecycleitem, atkEA_tryrecycleitem,
atkEB_settypetoterrain, atkEB_settypetoterrain,
atkEC_pursuitrelated, atkEC_pursuitrelated,
atkEF_snatchsetbanks, atkEF_snatchsetbattlers,
atkEE_removelightscreenreflect, atkEE_removelightscreenreflect,
atkEF_handleballthrow, atkEF_handleballthrow,
atkF0_givecaughtmon, atkF0_givecaughtmon,
@@ -989,11 +990,11 @@ static void atk00_attackcanceler(void)
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if ((gProtectStructs[gBattleTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED)
{ {
PressurePPLose(gBattlerAttacker, gBattleTurnOrder[i], MOVE_SNATCH); PressurePPLose(gBattlerAttacker, gBattlerByTurnOrder[i], MOVE_SNATCH);
gProtectStructs[gBattleTurnOrder[i]].stealMove = 0; gProtectStructs[gBattlerByTurnOrder[i]].stealMove = 0;
gBattleScripting.battler = gBattleTurnOrder[i]; gBattleScripting.battler = gBattlerByTurnOrder[i];
BattleScriptPushCursor(); BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SnatchedMove; gBattlescriptCurrInstr = BattleScript_SnatchedMove;
return; return;
@@ -1172,7 +1173,7 @@ static void atk01_accuracycheck(void)
calc = (calc * 130) / 100; // 1.3 compound eyes boost calc = (calc * 130) / 100; // 1.3 compound eyes boost
if (WEATHER_HAS_EFFECT && gBattleMons[gBattlerTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY) if (WEATHER_HAS_EFFECT && gBattleMons[gBattlerTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY)
calc = (calc * 80) / 100; // 1.2 sand veil loss calc = (calc * 80) / 100; // 1.2 sand veil loss
if (gBattleMons[gBattlerAttacker].ability == ABILITY_HUSTLE && type < 9) if (gBattleMons[gBattlerAttacker].ability == ABILITY_HUSTLE && IS_TYPE_PHYSICAL(type))
calc = (calc * 80) / 100; // 1.2 hustle loss calc = (calc * 80) / 100; // 1.2 hustle loss
if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY) if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
@@ -1944,7 +1945,7 @@ static void atk0C_datahpupdate(void)
if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_x100000)) if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_x100000))
gSpecialStatuses[gActiveBattler].dmg = gHpDealt; gSpecialStatuses[gActiveBattler].dmg = gHpDealt;
if (IS_MOVE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT) if (IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
{ {
gProtectStructs[gActiveBattler].physicalDmg = gHpDealt; gProtectStructs[gActiveBattler].physicalDmg = gHpDealt;
gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt; gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt;
@@ -1959,7 +1960,7 @@ static void atk0C_datahpupdate(void)
gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerTarget; gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerTarget;
} }
} }
else if (!IS_MOVE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000)) else if (!IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000))
{ {
gProtectStructs[gActiveBattler].specialDmg = gHpDealt; gProtectStructs[gActiveBattler].specialDmg = gHpDealt;
gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt; gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt;
@@ -2216,7 +2217,7 @@ u8 GetBattlerTurnOrderNum(u8 battlerId)
s32 i; s32 i;
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if (gBattleTurnOrder[i] == battlerId) if (gBattlerByTurnOrder[i] == battlerId)
break; break;
} }
return i; return i;
@@ -3112,7 +3113,7 @@ static void atk1E_jumpifability(void)
if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE) if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE)
{ {
battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_BANK_SIDE, gBattlerAttacker, ability, 0, 0); battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_BATTLER_SIDE, gBattlerAttacker, ability, 0, 0);
if (battlerId) if (battlerId)
{ {
gLastUsedAbility = ability; gLastUsedAbility = ability;
@@ -3448,7 +3449,7 @@ static void atk23_getexp(void)
if (gBattleControllerExecFlags == 0) if (gBattleControllerExecFlags == 0)
{ {
gActiveBattler = gBattleStruct->expGetterBattlerId; gActiveBattler = gBattleStruct->expGetterBattlerId;
if (gBattleBufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBattler][1] == RET_VALUE_LEVELLED_UP) if (gBattleBufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBattler][1] == RET_VALUE_LEVELED_UP)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId) if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId)
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
@@ -3534,7 +3535,7 @@ static void atk24(void)
if (gBattleControllerExecFlags) if (gBattleControllerExecFlags)
return; return;
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == STEVEN_PARTNER_ID) if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{ {
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
@@ -4648,14 +4649,14 @@ static void atk49_moveend(void)
BtlController_EmitSpriteInvisibility(0, FALSE); BtlController_EmitSpriteInvisibility(0, FALSE);
MarkBattlerForControllerExec(gActiveBattler); MarkBattlerForControllerExec(gActiveBattler);
gStatuses3[gBattlerAttacker] &= ~(STATUS3_SEMI_INVULNERABLE); gStatuses3[gBattlerAttacker] &= ~(STATUS3_SEMI_INVULNERABLE);
gSpecialStatuses[gBattlerAttacker].restoredBankSprite = 1; gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = 1;
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
return; return;
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 10: // make target sprite visible case 10: // make target sprite visible
if (!gSpecialStatuses[gBattlerTarget].restoredBankSprite && gBattlerTarget < gBattlersCount if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite && gBattlerTarget < gBattlersCount
&& !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)) && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
{ {
gActiveBattler = gBattlerTarget; gActiveBattler = gBattlerTarget;
@@ -4676,12 +4677,12 @@ static void atk49_moveend(void)
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 14: // This case looks interesting, although I am not certain what it does. Probably fine tunes edge cases. case 14: // This case looks interesting, although I am not certain what it does. Probably fine tunes edge cases.
if (gHitMarker & HITMARKER_PURSUIT_TRAP) if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
{ {
gActiveBattler = gBattlerAttacker; gActiveBattler = gBattlerAttacker;
gBattlerAttacker = gBattlerTarget; gBattlerAttacker = gBattlerTarget;
gBattlerTarget = gActiveBattler; gBattlerTarget = gActiveBattler;
gHitMarker &= ~(HITMARKER_PURSUIT_TRAP); gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET);
} }
if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED)
{ {
@@ -5034,7 +5035,7 @@ static void atk4F_jumpifcantswitch(void)
party = gPlayerParty; party = gPlayerParty;
i = 0; i = 0;
if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE) if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
i = 3; i = 3;
} }
else else
@@ -5055,7 +5056,7 @@ static void atk4F_jumpifcantswitch(void)
party = gPlayerParty; party = gPlayerParty;
i = 0; i = 0;
if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE) if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
i = 3; i = 3;
} }
@@ -5144,7 +5145,7 @@ static void sub_804CF10(u8 arg0)
*(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6; *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6;
gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]); gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]);
BtlController_EmitChoosePokemon(0, 1, arg0, 0, gBattleStruct->field_60[gActiveBattler]); BtlController_EmitChoosePokemon(0, PARTY_MUST_CHOOSE_MON, arg0, 0, gBattleStruct->field_60[gActiveBattler]);
MarkBattlerForControllerExec(gActiveBattler); MarkBattlerForControllerExec(gActiveBattler);
} }
@@ -5167,7 +5168,7 @@ static void atk50_openpartyscreen(void)
{ {
if (gHitMarker & HITMARKER_FAINTED(gActiveBattler)) if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
{ {
if (sub_80423F4(gActiveBattler, 6, 6)) if (HasNoMonsToSwitch(gActiveBattler, 6, 6))
{ {
gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5196,7 +5197,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[0] & hitmarkerFaintBits) if (gBitTable[0] & hitmarkerFaintBits)
{ {
gActiveBattler = 0; gActiveBattler = 0;
if (sub_80423F4(0, 6, 6)) if (HasNoMonsToSwitch(0, 6, 6))
{ {
gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5218,7 +5219,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[2] & hitmarkerFaintBits && !(gBitTable[0] & hitmarkerFaintBits)) if (gBitTable[2] & hitmarkerFaintBits && !(gBitTable[0] & hitmarkerFaintBits))
{ {
gActiveBattler = 2; gActiveBattler = 2;
if (sub_80423F4(2, 6, 6)) if (HasNoMonsToSwitch(2, 6, 6))
{ {
gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5239,7 +5240,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[1] & hitmarkerFaintBits) if (gBitTable[1] & hitmarkerFaintBits)
{ {
gActiveBattler = 1; gActiveBattler = 1;
if (sub_80423F4(1, 6, 6)) if (HasNoMonsToSwitch(1, 6, 6))
{ {
gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5261,7 +5262,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[3] & hitmarkerFaintBits && !(gBitTable[1] & hitmarkerFaintBits)) if (gBitTable[3] & hitmarkerFaintBits && !(gBitTable[1] & hitmarkerFaintBits))
{ {
gActiveBattler = 3; gActiveBattler = 3;
if (sub_80423F4(3, 6, 6)) if (HasNoMonsToSwitch(3, 6, 6))
{ {
gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5324,7 +5325,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits) if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits)
{ {
gActiveBattler = 2; gActiveBattler = 2;
if (sub_80423F4(2, gBattleBufferB[0][1], 6)) if (HasNoMonsToSwitch(2, gBattleBufferB[0][1], 6))
{ {
gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5340,7 +5341,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1]) if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1])
{ {
gActiveBattler = 3; gActiveBattler = 3;
if (sub_80423F4(3, gBattleBufferB[1][1], 6)) if (HasNoMonsToSwitch(3, gBattleBufferB[1][1], 6))
{ {
gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5383,16 +5384,16 @@ static void atk50_openpartyscreen(void)
else else
{ {
if (gBattlescriptCurrInstr[1] & 0x80) if (gBattlescriptCurrInstr[1] & 0x80)
hitmarkerFaintBits = 0; // used here as the caseId for the EmitChoose function hitmarkerFaintBits = PARTY_CHOOSE_MON; // Used here as the caseId for the EmitChoose function.
else else
hitmarkerFaintBits = 1; hitmarkerFaintBits = PARTY_MUST_CHOOSE_MON;
battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(0x80)); battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(0x80));
if (gSpecialStatuses[battlerId].flag40) if (gSpecialStatuses[battlerId].flag40)
{ {
gBattlescriptCurrInstr += 6; gBattlescriptCurrInstr += 6;
} }
else if (sub_80423F4(battlerId, 6, 6)) else if (HasNoMonsToSwitch(battlerId, 6, 6))
{ {
gActiveBattler = battlerId; gActiveBattler = battlerId;
gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gAbsentBattlerFlags |= gBitTable[gActiveBattler];
@@ -5556,7 +5557,7 @@ static void atk52_switchineffects(void)
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if (gBattleTurnOrder[i] == gActiveBattler) if (gBattlerByTurnOrder[i] == gActiveBattler)
gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER; gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER;
} }
@@ -5687,7 +5688,7 @@ static void atk5A_yesnoboxlearnmove(void)
{ {
case 0: case 0:
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC); BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gBattleScripting.learnMoveState++; gBattleScripting.learnMoveState++;
gBattleCommunication[CURSOR_POSITION] = 0; gBattleCommunication[CURSOR_POSITION] = 0;
BattleCreateYesNoCursorAt(0); BattleCreateYesNoCursorAt(0);
@@ -5804,7 +5805,7 @@ static void atk5B_yesnoboxstoplearningmove(void)
{ {
case 0: case 0:
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC); BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gBattleScripting.learnMoveState++; gBattleScripting.learnMoveState++;
gBattleCommunication[CURSOR_POSITION] = 0; gBattleCommunication[CURSOR_POSITION] = 0;
BattleCreateYesNoCursorAt(0); BattleCreateYesNoCursorAt(0);
@@ -5871,7 +5872,7 @@ static u32 GetTrainerMoneyToGive(u16 trainerId)
u32 lastMonLevel = 0; u32 lastMonLevel = 0;
u32 moneyReward = 0; u32 moneyReward = 0;
if (trainerId == SECRET_BASE_OPPONENT) if (trainerId == TRAINER_SECRET_BASE)
{ {
moneyReward = 20 * gBattleResources->secretBase->party.levels[0] * gBattleStruct->moneyMultiplier; moneyReward = 20 * gBattleResources->secretBase->party.levels[0] * gBattleStruct->moneyMultiplier;
} }
@@ -5950,7 +5951,7 @@ static void atk5E(void)
if (gBattleControllerExecFlags == 0) if (gBattleControllerExecFlags == 0)
{ {
s32 i; s32 i;
struct BattlePokemon* bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBattler][4]; struct BattlePokemon *bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBattler][4];
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
gBattleMons[gActiveBattler].moves[i] = bufferPoke->moves[i]; gBattleMons[gActiveBattler].moves[i] = bufferPoke->moves[i];
@@ -5962,16 +5963,16 @@ static void atk5E(void)
} }
} }
static void atk5F(void) static void atk5F_swapattackerwithtarget(void)
{ {
gActiveBattler = gBattlerAttacker; gActiveBattler = gBattlerAttacker;
gBattlerAttacker = gBattlerTarget; gBattlerAttacker = gBattlerTarget;
gBattlerTarget = gActiveBattler; gBattlerTarget = gActiveBattler;
if (gHitMarker & HITMARKER_PURSUIT_TRAP) if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
gHitMarker &= ~(HITMARKER_PURSUIT_TRAP); gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET);
else else
gHitMarker |= HITMARKER_PURSUIT_TRAP; gHitMarker |= HITMARKER_SWAP_ATTACKER_TARGET;
gBattlescriptCurrInstr++; gBattlescriptCurrInstr++;
} }
@@ -5987,8 +5988,8 @@ static void atk60_incrementgamestat(void)
static void atk61_drawpartystatussummary(void) static void atk61_drawpartystatussummary(void)
{ {
s32 i; s32 i;
struct Pokemon* party; struct Pokemon *party;
struct HpAndStatus hpStatuses[6]; struct HpAndStatus hpStatuses[PARTY_SIZE];
if (gBattleControllerExecFlags) if (gBattleControllerExecFlags)
return; return;
@@ -6000,7 +6001,7 @@ static void atk61_drawpartystatussummary(void)
else else
party = gEnemyParty; party = gEnemyParty;
for (i = 0; i < 6; i++) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE
|| GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
@@ -6021,10 +6022,10 @@ static void atk61_drawpartystatussummary(void)
gBattlescriptCurrInstr += 2; gBattlescriptCurrInstr += 2;
} }
static void atk62(void) static void atk62_hidepartystatussummary(void)
{ {
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitCmd49(0); BtlController_EmitHidePartyStatusSummary(0);
MarkBattlerForControllerExec(gActiveBattler); MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 2; gBattlescriptCurrInstr += 2;
@@ -6100,7 +6101,7 @@ static void atk67_yesnobox(void)
{ {
case 0: case 0:
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC); BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gBattleCommunication[0]++; gBattleCommunication[0]++;
gBattleCommunication[CURSOR_POSITION] = 0; gBattleCommunication[CURSOR_POSITION] = 0;
BattleCreateYesNoCursorAt(0); BattleCreateYesNoCursorAt(0);
@@ -6631,7 +6632,7 @@ static void atk76_various(void)
gBattleCommunication[0] = 0; gBattleCommunication[0] = 0;
break; break;
case VARIOUS_RESET_INTIMIDATE_TRACE_BITS: case VARIOUS_RESET_INTIMIDATE_TRACE_BITS:
gSpecialStatuses[gActiveBattler].intimidatedPoke = 0; gSpecialStatuses[gActiveBattler].intimidatedMon = 0;
gSpecialStatuses[gActiveBattler].traced = 0; gSpecialStatuses[gActiveBattler].traced = 0;
break; break;
case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP: case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP:
@@ -6720,7 +6721,7 @@ static void atk76_various(void)
break; break;
case 16: case 16:
BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[gBattlescriptCurrInstr[1]]); BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[gBattlescriptCurrInstr[1]]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0x16); BattlePutTextOnWindow(gDisplayedStringBattle, 0x16);
break; break;
case 17: case 17:
if (IsTextPrinterActive(0x16)) if (IsTextPrinterActive(0x16))
@@ -7507,7 +7508,7 @@ static void atk8F_forcerandomswitch(void)
else if ((gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) else if ((gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|| (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_x2000000)) || (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_x2000000))
{ {
if (sub_806D82C(GetBattlerMultiplayerId(gBattlerTarget)) == 1) if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == 1)
{ {
firstMonId = 3; firstMonId = 3;
lastMonId = 6; lastMonId = 6;
@@ -8125,7 +8126,7 @@ static void atk9E_metronome(void)
s32 i; s32 i;
gCurrentMove = (Random() & 0x1FF) + 1; gCurrentMove = (Random() & 0x1FF) + 1;
if (gCurrentMove > LAST_MOVE_INDEX) if (gCurrentMove >= MOVES_COUNT)
continue; continue;
for (i = 0; i < 4; i++); // ? for (i = 0; i < 4; i++); // ?
@@ -8595,7 +8596,7 @@ static void atkAE_healpartystatus(void)
if (gCurrentMove == MOVE_HEAL_BELL) if (gCurrentMove == MOVE_HEAL_BELL)
{ {
struct Pokemon* party; struct Pokemon *party;
s32 i; s32 i;
gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@@ -8633,7 +8634,7 @@ static void atkAE_healpartystatus(void)
} }
} }
for (i = 0; i < 6; i++) for (i = 0; i < PARTY_SIZE; i++)
{ {
u16 species = GetMonData(&party[i], MON_DATA_SPECIES2); u16 species = GetMonData(&party[i], MON_DATA_SPECIES2);
u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY); u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY);
@@ -8957,7 +8958,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void)
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if (gBattleTurnOrder[i] == gBattlerTarget) if (gBattlerByTurnOrder[i] == gBattlerTarget)
gActionsByTurnOrder[i] = 11; gActionsByTurnOrder[i] = 11;
} }
@@ -9045,7 +9046,7 @@ static void atkBE_rapidspinfree(void)
else if (gStatuses3[gBattlerAttacker] & STATUS3_LEECHSEED) else if (gStatuses3[gBattlerAttacker] & STATUS3_LEECHSEED)
{ {
gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED); gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED);
gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED_BANK); gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED_BATTLER);
BattleScriptPushCursor(); BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_LeechSeedFree; gBattlescriptCurrInstr = BattleScript_LeechSeedFree;
} }
@@ -9761,7 +9762,7 @@ static void atkE1_trygetintimidatetarget(void)
{ {
u8 side; u8 side;
gBattleScripting.battler = gBattleStruct->intimidateBank; gBattleScripting.battler = gBattleStruct->intimidateBattler;
side = GetBattlerSide(gBattleScripting.battler); side = GetBattlerSide(gBattleScripting.battler);
PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gBattleMons[gBattleScripting.battler].ability) PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gBattleMons[gBattleScripting.battler].ability)
@@ -10053,7 +10054,7 @@ static void atkEC_pursuitrelated(void)
} }
} }
static void atkEF_snatchsetbanks(void) static void atkEF_snatchsetbattlers(void)
{ {
gEffectBattler = gBattlerAttacker; gEffectBattler = gBattlerAttacker;
@@ -10116,7 +10117,7 @@ static void atkEF_handleballthrow(void)
u8 catchRate; u8 catchRate;
if (gLastUsedItem == ITEM_SAFARI_BALL) if (gLastUsedItem == ITEM_SAFARI_BALL)
catchRate = gBattleStruct->field_7C * 1275 / 100; catchRate = gBattleStruct->safariCatchFactor * 1275 / 100;
else else
catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate; catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate;
@@ -10131,7 +10132,7 @@ static void atkEF_handleballthrow(void)
ballMultiplier = 10; ballMultiplier = 10;
break; break;
case ITEM_DIVE_BALL: case ITEM_DIVE_BALL:
if (Overworld_GetMapTypeOfSaveblockLocation() == 5) if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER)
ballMultiplier = 35; ballMultiplier = 35;
else else
ballMultiplier = 10; ballMultiplier = 10;
@@ -10406,7 +10407,7 @@ static void atkF3_trygivecaughtmonnick(void)
{ {
case 0: case 0:
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC); BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[MULTIUSE_STATE]++;
gBattleCommunication[CURSOR_POSITION] = 0; gBattleCommunication[CURSOR_POSITION] = 0;
BattleCreateYesNoCursorAt(0); BattleCreateYesNoCursorAt(0);
+18 -18
View File
@@ -799,7 +799,7 @@ static u8 GetTrainerBattleTransition(void)
u8 enemyLevel; u8 enemyLevel;
u8 playerLevel; u8 playerLevel;
if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT) if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
return B_TRANSITION_CHAMPION; return B_TRANSITION_CHAMPION;
if (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR) if (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR)
@@ -1089,14 +1089,14 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
switch (sTrainerBattleMode) switch (sTrainerBattleMode)
{ {
case 3: case TRAINER_BATTLE_NORMAL_NO_INTRO_TEXT:
TrainerBattleLoadArgs(sOrdinaryNoIntroBattleParams, data); TrainerBattleLoadArgs(sOrdinaryNoIntroBattleParams, data);
return EventScript_2713C2; return EventScript_2713C2;
case 4: case TRAINER_BATTLE_DOUBLE:
TrainerBattleLoadArgs(sDoubleBattleParams, data); TrainerBattleLoadArgs(sDoubleBattleParams, data);
SetMapVarsToTrainer(); SetMapVarsToTrainer();
return EventScript_TryDoDoubleTrainerBattle; return EventScript_TryDoDoubleTrainerBattle;
case 2: case TRAINER_BATTLE_CONTINUE_SCRIPT:
if (gApproachingTrainerId == 0) if (gApproachingTrainerId == 0)
{ {
TrainerBattleLoadArgs(sContinueScriptBattleParams, data); TrainerBattleLoadArgs(sContinueScriptBattleParams, data);
@@ -1107,26 +1107,26 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
TrainerBattleLoadArgs(sTrainerBContinueScriptBattleParams, data); TrainerBattleLoadArgs(sTrainerBContinueScriptBattleParams, data);
} }
return EventScript_271362; return EventScript_271362;
case 1: case TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC:
TrainerBattleLoadArgs(sContinueScriptBattleParams, data); TrainerBattleLoadArgs(sContinueScriptBattleParams, data);
SetMapVarsToTrainer(); SetMapVarsToTrainer();
return EventScript_271362; return EventScript_271362;
case 6: case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE:
case 8: case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC:
TrainerBattleLoadArgs(sContinueScriptDoubleBattleParams, data); TrainerBattleLoadArgs(sContinueScriptDoubleBattleParams, data);
SetMapVarsToTrainer(); SetMapVarsToTrainer();
return EventScript_TryDoDoubleTrainerBattle; return EventScript_TryDoDoubleTrainerBattle;
case 7: case TRAINER_BATTLE_REMATCH_DOUBLE:
TrainerBattleLoadArgs(sDoubleBattleParams, data); TrainerBattleLoadArgs(sDoubleBattleParams, data);
SetMapVarsToTrainer(); SetMapVarsToTrainer();
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
return EventScript_TryDoDoubleRematchBattle; return EventScript_TryDoDoubleRematchBattle;
case 5: case TRAINER_BATTLE_REMATCH:
TrainerBattleLoadArgs(sOrdinaryBattleParams, data); TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
SetMapVarsToTrainer(); SetMapVarsToTrainer();
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
return EventScript_2713D1; return EventScript_2713D1;
case 9: case TRAINER_BATTLE_9:
if (gApproachingTrainerId == 0) if (gApproachingTrainerId == 0)
{ {
TrainerBattleLoadArgs(sOrdinaryBattleParams, data); TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
@@ -1139,13 +1139,13 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
gTrainerBattleOpponent_B = sub_81A9AA8(gSpecialVar_LastTalked); gTrainerBattleOpponent_B = sub_81A9AA8(gSpecialVar_LastTalked);
} }
return EventScript_271362; return EventScript_271362;
case 10: case TRAINER_BATTLE_SET_TRAINER_A:
TrainerBattleLoadArgs(sOrdinaryBattleParams, data); TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
return NULL; return NULL;
case 11: case TRAINER_BATTLE_SET_TRAINER_B:
TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data); TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data);
return NULL; return NULL;
case 12: case TRAINER_BATTLE_12:
if (gApproachingTrainerId == 0) if (gApproachingTrainerId == 0)
{ {
TrainerBattleLoadArgs(sOrdinaryBattleParams, data); TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
@@ -1306,7 +1306,7 @@ void BattleSetup_StartTrainerBattle(void)
static void CB2_EndTrainerBattle(void) static void CB2_EndTrainerBattle(void)
{ {
if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT) if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
{ {
SetMainCallback2(CB2_ReturnToFieldContinueScript); SetMainCallback2(CB2_ReturnToFieldContinueScript);
} }
@@ -1330,7 +1330,7 @@ static void CB2_EndTrainerBattle(void)
static void CB2_EndRematchBattle(void) static void CB2_EndRematchBattle(void)
{ {
if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT) if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
{ {
SetMainCallback2(CB2_ReturnToFieldContinueScript); SetMainCallback2(CB2_ReturnToFieldContinueScript);
} }
@@ -1498,7 +1498,7 @@ const u8 *GetTrainerALoseText(void)
{ {
const u8 *string; const u8 *string;
if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT) if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
string = GetSecretBaseTrainerLoseText(); string = GetSecretBaseTrainerLoseText();
else else
string = sTrainerADefeatSpeech; string = sTrainerADefeatSpeech;
@@ -1592,11 +1592,11 @@ static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u
{ {
if (gSaveBlock1Ptr->trainerRematches[i] != 0) if (gSaveBlock1Ptr->trainerRematches[i] != 0)
{ {
// Trainer already wants a rematch. Don't bother updating it // Trainer already wants a rematch. Don't bother updating it.
ret = TRUE; ret = TRUE;
} }
else if (FlagGet(FLAG_MATCH_CALL_REGISTERED + i) else if (FlagGet(FLAG_MATCH_CALL_REGISTERED + i)
&& (Random() % 100) <= 30) // 31% chance of getting a rematch && (Random() % 100) <= 30) // 31% chance of getting a rematch.
{ {
SetRematchIdForTrainer(table, i); SetRematchIdForTrainer(table, i);
ret = TRUE; ret = TRUE;
+8 -10
View File
@@ -9,8 +9,6 @@
#include "battle_message.h" #include "battle_message.h"
#include "tv.h" #include "tv.h"
extern struct StringInfoBattle *gStringInfo;
// this file's functions // this file's functions
static bool8 sub_817E0B8(u16 stringId); static bool8 sub_817E0B8(u16 stringId);
static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3); static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3);
@@ -223,7 +221,7 @@ void BattleTv_SetDataBasedOnString(u16 stringId)
atkSide = GetBattlerSide(gBattlerAttacker); atkSide = GetBattlerSide(gBattlerAttacker);
defSide = GetBattlerSide(gBattlerTarget); defSide = GetBattlerSide(gBattlerTarget);
effSide = GetBattlerSide(gEffectBattler); effSide = GetBattlerSide(gEffectBattler);
scriptingSide = GetBattlerSide(gStringInfo->scrActive); scriptingSide = GetBattlerSide(gBattleMsgDataPtr->scrActive);
if (atkSide == B_SIDE_PLAYER) if (atkSide == B_SIDE_PLAYER)
atkMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]; atkMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
@@ -235,7 +233,7 @@ void BattleTv_SetDataBasedOnString(u16 stringId)
else else
defMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]; defMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gStringInfo->currentMove); moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gBattleMsgDataPtr->currentMove);
if (moveSlot >= 4 && sub_817E0B8(stringId) && stringId > BATTLESTRINGS_ID_ADDER) if (moveSlot >= 4 && sub_817E0B8(stringId) && stringId > BATTLESTRINGS_ID_ADDER)
{ {
@@ -480,8 +478,8 @@ void BattleTv_SetDataBasedOnString(u16 stringId)
break; break;
case STRINGID_PKMNFASTASLEEP: case STRINGID_PKMNFASTASLEEP:
if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId != 0 if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId != 0
&& gStringInfo->currentMove != MOVE_SNORE && gBattleMsgDataPtr->currentMove != MOVE_SNORE
&& gStringInfo->currentMove != MOVE_SLEEP_TALK) && gBattleMsgDataPtr->currentMove != MOVE_SLEEP_TALK)
AddMovePoints(9, 3, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMoveSlot); AddMovePoints(9, 3, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMoveSlot);
break; break;
case STRINGID_PKMNWASFROZEN: case STRINGID_PKMNWASFROZEN:
@@ -798,8 +796,8 @@ void TryPutLinkBattleTvShowOnAir(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
if ((playerBestMonId < 3 && !sub_806D82C(gBattleScripting.multiplayerId)) if ((playerBestMonId < 3 && !GetLinkTrainerFlankId(gBattleScripting.multiplayerId))
|| (playerBestMonId >= 3 && sub_806D82C(gBattleScripting.multiplayerId))) || (playerBestMonId >= 3 && GetLinkTrainerFlankId(gBattleScripting.multiplayerId)))
{ {
j = (opponentBestMonId < 3) ? 0 : 1; j = (opponentBestMonId < 3) ? 0 : 1;
PutBattleUpdateOnTheAir(sub_806EF84(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies); PutBattleUpdateOnTheAir(sub_806EF84(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies);
@@ -1080,7 +1078,7 @@ _0817E5C8:\n\
ldr r0, =gBattleScripting\n\ ldr r0, =gBattleScripting\n\
adds r0, 0x25\n\ adds r0, 0x25\n\
ldrb r0, [r0]\n\ ldrb r0, [r0]\n\
bl sub_806D82C\n\ bl GetLinkTrainerFlankId\n\
lsls r0, 16\n\ lsls r0, 16\n\
cmp r0, 0\n\ cmp r0, 0\n\
beq _0817E630\n\ beq _0817E630\n\
@@ -1090,7 +1088,7 @@ _0817E620:\n\
ldr r0, =gBattleScripting\n\ ldr r0, =gBattleScripting\n\
adds r0, 0x25\n\ adds r0, 0x25\n\
ldrb r0, [r0]\n\ ldrb r0, [r0]\n\
bl sub_806D82C\n\ bl GetLinkTrainerFlankId\n\
lsls r0, 16\n\ lsls r0, 16\n\
cmp r0, 0\n\ cmp r0, 0\n\
beq _0817E670\n\ beq _0817E670\n\
+166 -147
View File
@@ -46,7 +46,7 @@ u8 GetBattlerForBattleScript(u8 caseId)
case BS_EFFECT_BATTLER: case BS_EFFECT_BATTLER:
ret = gEffectBattler; ret = gEffectBattler;
break; break;
case BS_BANK_0: case BS_BATTLER_0:
ret = 0; ret = 0;
break; break;
case BS_SCRIPTING: case BS_SCRIPTING:
@@ -292,7 +292,7 @@ void sub_803FA70(u8 battler)
} }
} }
void BattleScriptPush(const u8* bsPtr) void BattleScriptPush(const u8 *bsPtr)
{ {
gBattleResources->battleScriptsStack->ptr[gBattleResources->battleScriptsStack->size++] = bsPtr; gBattleResources->battleScriptsStack->ptr[gBattleResources->battleScriptsStack->size++] = bsPtr;
} }
@@ -453,14 +453,14 @@ bool8 AreAllMovesUnusable(void)
u8 unusable; u8 unusable;
unusable = CheckMoveLimitations(gActiveBattler, 0, 0xFF); unusable = CheckMoveLimitations(gActiveBattler, 0, 0xFF);
if (unusable == 0xF) // all moves are unusable if (unusable == 0xF) // All moves are unusable.
{ {
gProtectStructs[gActiveBattler].onlyStruggle = 1; gProtectStructs[gActiveBattler].noValidMoves = 1;
gSelectionBattleScripts[gActiveBattler] = BattleScript_NoMovesLeft; gSelectionBattleScripts[gActiveBattler] = BattleScript_NoMovesLeft;
} }
else else
{ {
gProtectStructs[gActiveBattler].onlyStruggle = 0; gProtectStructs[gActiveBattler].noValidMoves = 0;
} }
return (unusable == 0xF); return (unusable == 0xF);
@@ -470,11 +470,11 @@ u8 GetImprisonedMovesCount(u8 battlerId, u16 move)
{ {
s32 i; s32 i;
u8 imprisionedMoves = 0; u8 imprisionedMoves = 0;
u8 bankSide = GetBattlerSide(battlerId); u8 battlerSide = GetBattlerSide(battlerId);
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if (bankSide != GetBattlerSide(i) && gStatuses3[i] & STATUS3_IMPRISONED_OTHERS) if (battlerSide != GetBattlerSide(i) && gStatuses3[i] & STATUS3_IMPRISONED_OTHERS)
{ {
s32 j; s32 j;
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
@@ -504,21 +504,21 @@ u8 UpdateTurnCounters(void)
do do
{ {
u8 sideBank; u8 side;
switch (gBattleStruct->turnCountersTracker) switch (gBattleStruct->turnCountersTracker)
{ {
case 0: case 0:
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
gBattleTurnOrder[i] = i; gBattlerByTurnOrder[i] = i;
} }
for (i = 0; i < gBattlersCount - 1; i++) for (i = 0; i < gBattlersCount - 1; i++)
{ {
s32 j; s32 j;
for (j = i + 1; j < gBattlersCount; j++) for (j = i + 1; j < gBattlersCount; j++)
{ {
if (GetWhoStrikesFirst(gBattleTurnOrder[i], gBattleTurnOrder[j], 0)) if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], 0))
SwapTurnOrder(i, j); SwapTurnOrder(i, j);
} }
} }
@@ -533,13 +533,13 @@ u8 UpdateTurnCounters(void)
case 1: case 1:
while (gBattleStruct->turnSideTracker < 2) while (gBattleStruct->turnSideTracker < 2)
{ {
sideBank = gBattleStruct->turnSideTracker; side = gBattleStruct->turnSideTracker;
gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].reflectBattlerId; gActiveBattler = gBattlerAttacker = gSideTimers[side].reflectBattlerId;
if (gSideStatuses[sideBank] & SIDE_STATUS_REFLECT) if (gSideStatuses[side] & SIDE_STATUS_REFLECT)
{ {
if (--gSideTimers[sideBank].reflectTimer == 0) if (--gSideTimers[side].reflectTimer == 0)
{ {
gSideStatuses[sideBank] &= ~SIDE_STATUS_REFLECT; gSideStatuses[side] &= ~SIDE_STATUS_REFLECT;
BattleScriptExecute(BattleScript_SideStatusWoreOff); BattleScriptExecute(BattleScript_SideStatusWoreOff);
PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_REFLECT); PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_REFLECT);
effect++; effect++;
@@ -558,15 +558,15 @@ u8 UpdateTurnCounters(void)
case 2: case 2:
while (gBattleStruct->turnSideTracker < 2) while (gBattleStruct->turnSideTracker < 2)
{ {
sideBank = gBattleStruct->turnSideTracker; side = gBattleStruct->turnSideTracker;
gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].lightscreenBattlerId; gActiveBattler = gBattlerAttacker = gSideTimers[side].lightscreenBattlerId;
if (gSideStatuses[sideBank] & SIDE_STATUS_LIGHTSCREEN) if (gSideStatuses[side] & SIDE_STATUS_LIGHTSCREEN)
{ {
if (--gSideTimers[sideBank].lightscreenTimer == 0) if (--gSideTimers[side].lightscreenTimer == 0)
{ {
gSideStatuses[sideBank] &= ~SIDE_STATUS_LIGHTSCREEN; gSideStatuses[side] &= ~SIDE_STATUS_LIGHTSCREEN;
BattleScriptExecute(BattleScript_SideStatusWoreOff); BattleScriptExecute(BattleScript_SideStatusWoreOff);
gBattleCommunication[MULTISTRING_CHOOSER] = sideBank; gBattleCommunication[MULTISTRING_CHOOSER] = side;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_LIGHT_SCREEN); PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_LIGHT_SCREEN);
effect++; effect++;
} }
@@ -584,14 +584,14 @@ u8 UpdateTurnCounters(void)
case 3: case 3:
while (gBattleStruct->turnSideTracker < 2) while (gBattleStruct->turnSideTracker < 2)
{ {
sideBank = gBattleStruct->turnSideTracker; side = gBattleStruct->turnSideTracker;
gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].mistBattlerId; gActiveBattler = gBattlerAttacker = gSideTimers[side].mistBattlerId;
if (gSideTimers[sideBank].mistTimer != 0 if (gSideTimers[side].mistTimer != 0
&& --gSideTimers[sideBank].mistTimer == 0) && --gSideTimers[side].mistTimer == 0)
{ {
gSideStatuses[sideBank] &= ~SIDE_STATUS_MIST; gSideStatuses[side] &= ~SIDE_STATUS_MIST;
BattleScriptExecute(BattleScript_SideStatusWoreOff); BattleScriptExecute(BattleScript_SideStatusWoreOff);
gBattleCommunication[MULTISTRING_CHOOSER] = sideBank; gBattleCommunication[MULTISTRING_CHOOSER] = side;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_MIST); PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_MIST);
effect++; effect++;
} }
@@ -608,13 +608,13 @@ u8 UpdateTurnCounters(void)
case 4: case 4:
while (gBattleStruct->turnSideTracker < 2) while (gBattleStruct->turnSideTracker < 2)
{ {
sideBank = gBattleStruct->turnSideTracker; side = gBattleStruct->turnSideTracker;
gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].safeguardBattlerId; gActiveBattler = gBattlerAttacker = gSideTimers[side].safeguardBattlerId;
if (gSideStatuses[sideBank] & SIDE_STATUS_SAFEGUARD) if (gSideStatuses[side] & SIDE_STATUS_SAFEGUARD)
{ {
if (--gSideTimers[sideBank].safeguardTimer == 0) if (--gSideTimers[side].safeguardTimer == 0)
{ {
gSideStatuses[sideBank] &= ~SIDE_STATUS_SAFEGUARD; gSideStatuses[side] &= ~SIDE_STATUS_SAFEGUARD;
BattleScriptExecute(BattleScript_SafeguardEnds); BattleScriptExecute(BattleScript_SafeguardEnds);
effect++; effect++;
} }
@@ -632,7 +632,7 @@ u8 UpdateTurnCounters(void)
case 5: case 5:
while (gBattleStruct->turnSideTracker < gBattlersCount) while (gBattleStruct->turnSideTracker < gBattlersCount)
{ {
gActiveBattler = gBattleTurnOrder[gBattleStruct->turnSideTracker]; gActiveBattler = gBattlerByTurnOrder[gBattleStruct->turnSideTracker];
if (gWishFutureKnock.wishCounter[gActiveBattler] != 0 if (gWishFutureKnock.wishCounter[gActiveBattler] != 0
&& --gWishFutureKnock.wishCounter[gActiveBattler] == 0 && --gWishFutureKnock.wishCounter[gActiveBattler] == 0
&& gBattleMons[gActiveBattler].hp != 0) && gBattleMons[gActiveBattler].hp != 0)
@@ -755,7 +755,7 @@ u8 TurnBasedEffects(void)
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE) while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE)
{ {
gActiveBattler = gBattlerAttacker = gBattleTurnOrder[gBattleStruct->turnEffectsBattlerId]; gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId];
if (gAbsentBattlerFlags & gBitTable[gActiveBattler]) if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
{ {
gBattleStruct->turnEffectsBattlerId++; gBattleStruct->turnEffectsBattlerId++;
@@ -795,10 +795,10 @@ u8 TurnBasedEffects(void)
break; break;
case 3: // leech seed case 3: // leech seed
if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED) if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED)
&& gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BANK].hp != 0 && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0
&& gBattleMons[gActiveBattler].hp != 0) && gBattleMons[gActiveBattler].hp != 0)
{ {
gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BANK; //funny how the 'target' is actually the battlerId that receives HP gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver.
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8; gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
if (gBattleMoveDamage == 0) if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1; gBattleMoveDamage = 1;
@@ -848,8 +848,8 @@ u8 TurnBasedEffects(void)
case 7: // spooky nightmares case 7: // spooky nightmares
if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0) if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0)
{ {
// R/S does not perform this sleep check, which causes the nighmare effect to // R/S does not perform this sleep check, which causes the nightmare effect to
// persist even after the affected Pokemon has been awakened by Shed Skin // persist even after the affected Pokemon has been awakened by Shed Skin.
if (gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) if (gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
{ {
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4; gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
@@ -983,7 +983,7 @@ u8 TurnBasedEffects(void)
case 12: // disable case 12: // disable
if (gDisableStructs[gActiveBattler].disableTimer1 != 0) if (gDisableStructs[gActiveBattler].disableTimer1 != 0)
{ {
int i; s32 i;
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
if (gDisableStructs[gActiveBattler].disabledMove == gBattleMons[gActiveBattler].moves[i]) if (gDisableStructs[gActiveBattler].disabledMove == gBattleMons[gActiveBattler].moves[i])
@@ -1121,7 +1121,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
case 1: case 1:
while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount) while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount)
{ {
gActiveBattler = gBattlerAttacker = gBattleTurnOrder[gBattleStruct->wishPerishSongBattlerId]; gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->wishPerishSongBattlerId];
if (gAbsentBattlerFlags & gBitTable[gActiveBattler]) if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
{ {
gBattleStruct->wishPerishSongBattlerId++; gBattleStruct->wishPerishSongBattlerId++;
@@ -1184,7 +1184,7 @@ bool8 HandleFaintedMonActions(void)
return FALSE; return FALSE;
do do
{ {
int i; s32 i;
switch (gBattleStruct->faintedActionsState) switch (gBattleStruct->faintedActionsState)
{ {
case 0: case 0:
@@ -1192,7 +1192,7 @@ bool8 HandleFaintedMonActions(void)
gBattleStruct->faintedActionsState++; gBattleStruct->faintedActionsState++;
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if (gAbsentBattlerFlags & gBitTable[i] && !sub_80423F4(i, 6, 6)) if (gAbsentBattlerFlags & gBitTable[i] && !HasNoMonsToSwitch(i, 6, 6))
gAbsentBattlerFlags &= ~(gBitTable[i]); gAbsentBattlerFlags &= ~(gBitTable[i]);
} }
// fall through // fall through
@@ -1256,7 +1256,7 @@ bool8 HandleFaintedMonActions(void)
void TryClearRageStatuses(void) void TryClearRageStatuses(void)
{ {
int i; s32 i;
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if ((gBattleMons[i].status2 & STATUS2_RAGE) && gChosenMoveByBattler[i] != MOVE_RAGE) if ((gBattleMons[i].status2 & STATUS2_RAGE) && gChosenMoveByBattler[i] != MOVE_RAGE)
@@ -1467,7 +1467,9 @@ u8 AtkCanceller_UnableToUseMove(void)
{ {
gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10); gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
if (Random() & 1) if (Random() & 1)
{
BattleScriptPushCursor(); BattleScriptPushCursor();
}
else else
{ {
BattleScriptPush(BattleScript_MoveUsedIsParalyzedCantAttack); BattleScriptPush(BattleScript_MoveUsedIsParalyzedCantAttack);
@@ -1485,7 +1487,9 @@ u8 AtkCanceller_UnableToUseMove(void)
{ {
gBattleMons[gBattlerAttacker].status2 -= 0x100; gBattleMons[gBattlerAttacker].status2 -= 0x100;
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE) if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
{
gBattlescriptCurrInstr = BattleScript_BideStoringEnergy; gBattlescriptCurrInstr = BattleScript_BideStoringEnergy;
}
else else
{ {
// This is removed in Emerald for some reason // This is removed in Emerald for some reason
@@ -1500,7 +1504,9 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattlescriptCurrInstr = BattleScript_BideAttack; gBattlescriptCurrInstr = BattleScript_BideAttack;
} }
else else
{
gBattlescriptCurrInstr = BattleScript_BideNoEnergyToAttack; gBattlescriptCurrInstr = BattleScript_BideNoEnergyToAttack;
}
} }
effect = 1; effect = 1;
} }
@@ -1535,29 +1541,31 @@ u8 AtkCanceller_UnableToUseMove(void)
return effect; return effect;
} }
bool8 sub_80423F4(u8 battler, u8 r1, u8 r2) bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
{ {
struct Pokemon* party; struct Pokemon *party;
u8 r7; u8 id1, id2;
u8 r6;
s32 i; s32 i;
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
return FALSE; return FALSE;
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{ {
if (GetBattlerSide(battler) == B_SIDE_PLAYER) if (GetBattlerSide(battler) == B_SIDE_PLAYER)
party = gPlayerParty; party = gPlayerParty;
else else
party = gEnemyParty; party = gEnemyParty;
r6 = ((battler & 2) / 2);
for (i = r6 * 3; i < r6 * 3 + 3; i++) id1 = ((battler & BIT_FLANK) / 2);
for (i = id1 * 3; i < id1 * 3 + 3; i++)
{ {
if (GetMonData(&party[i], MON_DATA_HP) != 0 if (GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != 0 && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
break; break;
} }
return (i == r6 * 3 + 3); return (i == id1 * 3 + 3);
} }
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{ {
@@ -1566,86 +1574,95 @@ bool8 sub_80423F4(u8 battler, u8 r1, u8 r2)
if (GetBattlerSide(battler) == B_SIDE_PLAYER) if (GetBattlerSide(battler) == B_SIDE_PLAYER)
{ {
party = gPlayerParty; party = gPlayerParty;
r7 = GetBattlerMultiplayerId(battler); id2 = GetBattlerMultiplayerId(battler);
r6 = sub_806D82C(r7); id1 = GetLinkTrainerFlankId(id2);
} }
else else
{ {
// FIXME: Compiler insists on moving r4 into r1 before doing the eor // FIXME: Compiler insists on moving r4 into r1 before doing the eor.
#ifndef NONMATCHING #ifndef NONMATCHING
register u32 var asm("r1"); register u32 var asm("r1");
#else #else
u32 var; u32 var;
#endif // NONMATCHING #endif // NONMATCHING
party = gEnemyParty; party = gEnemyParty;
var = battler ^ 1; var = battler ^ BIT_SIDE;
r6 = (var != 0) ? 1 : 0; if (var == 0)
id1 = 0;
else
id1 = 1;
} }
} }
else else
{ {
r7 = GetBattlerMultiplayerId(battler); id2 = GetBattlerMultiplayerId(battler);
if (GetBattlerSide(battler) == B_SIDE_PLAYER) if (GetBattlerSide(battler) == B_SIDE_PLAYER)
party = gPlayerParty; party = gPlayerParty;
else else
party = gEnemyParty; party = gEnemyParty;
r6 = sub_806D82C(r7);
id1 = GetLinkTrainerFlankId(id2);
} }
for (i = r6 * 3; i < r6 * 3 + 3; i++)
for (i = id1 * 3; i < id1 * 3 + 3; i++)
{ {
if (GetMonData(&party[i], MON_DATA_HP) != 0 if (GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != 0 && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
break; break;
} }
return (i == r6 * 3 + 3); return (i == id1 * 3 + 3);
} }
else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && GetBattlerSide(battler) == B_SIDE_OPPONENT) else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && GetBattlerSide(battler) == B_SIDE_OPPONENT)
{ {
party = gEnemyParty; party = gEnemyParty;
if (battler == 1) if (battler == 1)
r6 = 0; id1 = 0;
else else
r6 = 3; id1 = 3;
for (i = r6; i < r6 + 3; i++)
for (i = id1; i < id1 + 3; i++)
{ {
if (GetMonData(&party[i], MON_DATA_HP) != 0 if (GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != 0 && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
break; break;
} }
return (i == r6 + 3); return (i == id1 + 3);
} }
else else
{ {
if (GetBattlerSide(battler) == B_SIDE_OPPONENT) if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
{ {
r7 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); id2 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
r6 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); id1 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
party = gEnemyParty; party = gEnemyParty;
} }
else else
{ {
r7 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); id2 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
r6 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); id1 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
party = gPlayerParty; party = gPlayerParty;
} }
if (r1 == 6)
r1 = gBattlerPartyIndexes[r7]; if (partyIdBattlerOn1 == PARTY_SIZE)
if (r2 == 6) partyIdBattlerOn1 = gBattlerPartyIndexes[id2];
r2 = gBattlerPartyIndexes[r6]; if (partyIdBattlerOn2 == PARTY_SIZE)
for (i = 0; i < 6; i++) partyIdBattlerOn2 = gBattlerPartyIndexes[id1];
for (i = 0; i < PARTY_SIZE; i++)
{ {
if (GetMonData(&party[i], MON_DATA_HP) != 0 if (GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != 0 && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG
// FIXME: Using index[array] instead of array[index] is BAD! && i != partyIdBattlerOn1 && i != partyIdBattlerOn2
&& i != r1 && i != r2 && i != r7[gBattleStruct->monToSwitchIntoId] && i != r6[gBattleStruct->monToSwitchIntoId]) && i != *(gBattleStruct->monToSwitchIntoId + id2) && i != id1[gBattleStruct->monToSwitchIntoId])
break; break;
} }
return (i == 6); return (i == PARTY_SIZE);
} }
} }
@@ -1706,6 +1723,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (gBattlerAttacker >= gBattlersCount) if (gBattlerAttacker >= gBattlersCount)
gBattlerAttacker = battler; gBattlerAttacker = battler;
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
pokeAtk = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]; pokeAtk = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
else else
@@ -1713,6 +1731,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (gBattlerTarget >= gBattlersCount) if (gBattlerTarget >= gBattlersCount)
gBattlerTarget = battler; gBattlerTarget = battler;
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
pokeDef = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]]; pokeDef = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
else else
@@ -1724,7 +1743,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES); speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES);
pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY); pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY);
if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // why isn't that check done at the beginning? if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // Why isn't that check done at the beginning?
{ {
u8 moveType; u8 moveType;
s32 i; s32 i;
@@ -1821,10 +1840,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
} }
break; break;
case ABILITY_INTIMIDATE: case ABILITY_INTIMIDATE:
if (!(gSpecialStatuses[battler].intimidatedPoke)) if (!(gSpecialStatuses[battler].intimidatedMon))
{ {
gStatuses3[battler] |= STATUS3_INTIMIDATE_POKES; gStatuses3[battler] |= STATUS3_INTIMIDATE_POKES;
gSpecialStatuses[battler].intimidatedPoke = 1; gSpecialStatuses[battler].intimidatedMon = 1;
} }
break; break;
case ABILITY_FORECAST: case ABILITY_FORECAST:
@@ -2271,7 +2290,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
gLastUsedAbility = ABILITY_INTIMIDATE; gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursorAndCallback(BattleScript_82DB4B8); BattleScriptPushCursorAndCallback(BattleScript_82DB4B8);
gBattleStruct->intimidateBank = i; gBattleStruct->intimidateBattler = i;
effect++; effect++;
break; break;
} }
@@ -2343,7 +2362,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursor(); BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_82DB4C1; gBattlescriptCurrInstr = BattleScript_82DB4C1;
gBattleStruct->intimidateBank = i; gBattleStruct->intimidateBattler = i;
effect++; effect++;
break; break;
} }
@@ -2360,7 +2379,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
} }
} }
break; break;
case ABILITYEFFECT_CHECK_BANK_SIDE: // 13 case ABILITYEFFECT_CHECK_BATTLER_SIDE: // 13
side = GetBattlerSide(battler); side = GetBattlerSide(battler);
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
@@ -2410,7 +2429,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
} }
} }
break; break;
case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK: // 15 case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER: // 15
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if (gBattleMons[i].ability == ability && i != battler) if (gBattleMons[i].ability == ability && i != battler)
@@ -2431,7 +2450,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
} }
} }
break; break;
case ABILITYEFFECT_COUNT_BANK_SIDE: // 17 case ABILITYEFFECT_COUNT_BATTLER_SIDE: // 17
side = GetBattlerSide(battler); side = GetBattlerSide(battler);
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
@@ -2492,32 +2511,32 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
int i = 0; int i = 0;
u8 effect = ITEM_NO_EFFECT; u8 effect = ITEM_NO_EFFECT;
u8 changedPP = 0; u8 changedPP = 0;
u8 bankHoldEffect, atkHoldEffect, defHoldEffect; u8 battlerHoldEffect, atkHoldEffect, defHoldEffect;
u8 bankQuality, atkQuality, defQuality; u8 battlerHoldEffectParam, atkHoldEffectParam, defHoldEffectParam;
u16 atkItem, defItem; u16 atkItem, defItem;
gLastUsedItem = gBattleMons[battlerId].item; gLastUsedItem = gBattleMons[battlerId].item;
if (gLastUsedItem == ITEM_ENIGMA_BERRY) if (gLastUsedItem == ITEM_ENIGMA_BERRY)
{ {
bankHoldEffect = gEnigmaBerries[battlerId].holdEffect; battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect;
bankQuality = gEnigmaBerries[battlerId].holdEffectParam; battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam;
} }
else else
{ {
bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem); battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem); battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem);
} }
atkItem = gBattleMons[gBattlerAttacker].item; atkItem = gBattleMons[gBattlerAttacker].item;
if (atkItem == ITEM_ENIGMA_BERRY) if (atkItem == ITEM_ENIGMA_BERRY)
{ {
atkHoldEffect = gEnigmaBerries[gBattlerAttacker].holdEffect; atkHoldEffect = gEnigmaBerries[gBattlerAttacker].holdEffect;
atkQuality = gEnigmaBerries[gBattlerAttacker].holdEffectParam; atkHoldEffectParam = gEnigmaBerries[gBattlerAttacker].holdEffectParam;
} }
else else
{ {
atkHoldEffect = ItemId_GetHoldEffect(atkItem); atkHoldEffect = ItemId_GetHoldEffect(atkItem);
atkQuality = ItemId_GetHoldEffectParam(atkItem); atkHoldEffectParam = ItemId_GetHoldEffectParam(atkItem);
} }
// def variables are unused // def variables are unused
@@ -2525,18 +2544,18 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
if (defItem == ITEM_ENIGMA_BERRY) if (defItem == ITEM_ENIGMA_BERRY)
{ {
defHoldEffect = gEnigmaBerries[gBattlerTarget].holdEffect; defHoldEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
defQuality = gEnigmaBerries[gBattlerTarget].holdEffectParam; defHoldEffectParam = gEnigmaBerries[gBattlerTarget].holdEffectParam;
} }
else else
{ {
defHoldEffect = ItemId_GetHoldEffect(defItem); defHoldEffect = ItemId_GetHoldEffect(defItem);
defQuality = ItemId_GetHoldEffectParam(defItem); defHoldEffectParam = ItemId_GetHoldEffectParam(defItem);
} }
switch (caseID) switch (caseID)
{ {
case ITEMEFFECT_ON_SWITCH_IN: case ITEMEFFECT_ON_SWITCH_IN:
switch (bankHoldEffect) switch (battlerHoldEffect)
{ {
case HOLD_EFFECT_DOUBLE_PRIZE: case HOLD_EFFECT_DOUBLE_PRIZE:
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
@@ -2564,13 +2583,13 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
case 1: case 1:
if (gBattleMons[battlerId].hp) if (gBattleMons[battlerId].hp)
{ {
switch (bankHoldEffect) switch (battlerHoldEffect)
{ {
case HOLD_EFFECT_RESTORE_HP: case HOLD_EFFECT_RESTORE_HP:
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn) if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
{ {
gBattleMoveDamage = bankQuality; gBattleMoveDamage = battlerHoldEffectParam;
if (gBattleMons[battlerId].hp + bankQuality > gBattleMons[battlerId].maxHP) if (gBattleMons[battlerId].hp + battlerHoldEffectParam > gBattleMons[battlerId].maxHP)
gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp; gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
gBattleMoveDamage *= -1; gBattleMoveDamage *= -1;
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2599,10 +2618,10 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
if (i != 4) if (i != 4)
{ {
u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i); u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i);
if (changedPP + bankQuality > maxPP) if (changedPP + battlerHoldEffectParam > maxPP)
changedPP = maxPP; changedPP = maxPP;
else else
changedPP = changedPP + bankQuality; changedPP = changedPP + battlerHoldEffectParam;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, move); PREPARE_MOVE_BUFFER(gBattleTextBuff1, move);
@@ -2641,7 +2660,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
gBattleMoveDamage *= -1; gBattleMoveDamage *= -1;
BattleScriptExecute(BattleScript_ItemHealHP_End2); BattleScriptExecute(BattleScript_ItemHealHP_End2);
effect = ITEM_HP_CHANGE; effect = ITEM_HP_CHANGE;
RecordItemEffectBattle(battlerId, bankHoldEffect); RecordItemEffectBattle(battlerId, battlerHoldEffect);
} }
break; break;
// nice copy/paste there gamefreak, making a function for confuse berries was too much eh? // nice copy/paste there gamefreak, making a function for confuse berries was too much eh?
@@ -2650,7 +2669,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{ {
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SPICY); PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SPICY);
gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality; gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0) if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1; gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2668,7 +2687,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{ {
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_DRY); PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_DRY);
gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality; gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0) if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1; gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2686,7 +2705,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{ {
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SWEET); PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SWEET);
gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality; gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0) if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1; gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2704,7 +2723,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{ {
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_BITTER); PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_BITTER);
gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality; gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0) if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1; gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2722,7 +2741,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{ {
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SOUR); PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SOUR);
gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality; gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0) if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1; gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2737,7 +2756,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
break; break;
// copy/paste again, smh // copy/paste again, smh
case HOLD_EFFECT_ATTACK_UP: case HOLD_EFFECT_ATTACK_UP:
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < 0xC) if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < 0xC)
{ {
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE); PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE);
@@ -2751,7 +2770,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
} }
break; break;
case HOLD_EFFECT_DEFENSE_UP: case HOLD_EFFECT_DEFENSE_UP:
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_DEF] < 0xC) if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_DEF] < 0xC)
{ {
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF);
@@ -2764,7 +2783,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
} }
break; break;
case HOLD_EFFECT_SPEED_UP: case HOLD_EFFECT_SPEED_UP:
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPEED] < 0xC) if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPEED] < 0xC)
{ {
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED);
@@ -2777,7 +2796,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
} }
break; break;
case HOLD_EFFECT_SP_ATTACK_UP: case HOLD_EFFECT_SP_ATTACK_UP:
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPATK] < 0xC) if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPATK] < 0xC)
{ {
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK);
@@ -2790,7 +2809,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
} }
break; break;
case HOLD_EFFECT_SP_DEFENSE_UP: case HOLD_EFFECT_SP_DEFENSE_UP:
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPDEF] < 0xC) if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPDEF] < 0xC)
{ {
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF);
@@ -2803,7 +2822,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
} }
break; break;
case HOLD_EFFECT_CRITICAL_UP: case HOLD_EFFECT_CRITICAL_UP:
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY)) if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
{ {
gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY; gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY;
BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2); BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2);
@@ -2811,7 +2830,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
} }
break; break;
case HOLD_EFFECT_RANDOM_STAT_UP: case HOLD_EFFECT_RANDOM_STAT_UP:
if (!moveTurn && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality) if (!moveTurn && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam)
{ {
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
{ {
@@ -2977,15 +2996,15 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
gLastUsedItem = gBattleMons[battlerId].item; gLastUsedItem = gBattleMons[battlerId].item;
if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
{ {
bankHoldEffect = gEnigmaBerries[battlerId].holdEffect; battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect;
bankQuality = gEnigmaBerries[battlerId].holdEffectParam; battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam;
} }
else else
{ {
bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem); battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem); battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem);
} }
switch (bankHoldEffect) switch (battlerHoldEffect)
{ {
case HOLD_EFFECT_CURE_PAR: case HOLD_EFFECT_CURE_PAR:
if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS) if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
@@ -3127,7 +3146,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
case HOLD_EFFECT_FLINCH: case HOLD_EFFECT_FLINCH:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& TARGET_TURN_DAMAGED && TARGET_TURN_DAMAGED
&& (Random() % 100) < atkQuality && (Random() % 100) < atkHoldEffectParam
&& gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED && gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED
&& gBattleMons[gBattlerTarget].hp) && gBattleMons[gBattlerTarget].hp)
{ {
@@ -3148,7 +3167,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
gLastUsedItem = atkItem; gLastUsedItem = atkItem;
gPotentialItemEffectBattler = gBattlerAttacker; gPotentialItemEffectBattler = gBattlerAttacker;
gBattleScripting.battler = gBattlerAttacker; gBattleScripting.battler = gBattlerAttacker;
gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkQuality) * -1; gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkHoldEffectParam) * -1;
if (gBattleMoveDamage == 0) if (gBattleMoveDamage == 0)
gBattleMoveDamage = -1; gBattleMoveDamage = -1;
gSpecialStatuses[gBattlerTarget].dmg = 0; gSpecialStatuses[gBattlerTarget].dmg = 0;
@@ -3180,7 +3199,7 @@ void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands
u8 GetMoveTarget(u16 move, u8 setTarget) u8 GetMoveTarget(u16 move, u8 setTarget)
{ {
u8 targetBank = 0; u8 targetBattler = 0;
u8 moveTarget; u8 moveTarget;
u8 side; u8 side;
@@ -3194,21 +3213,21 @@ u8 GetMoveTarget(u16 move, u8 setTarget)
case MOVE_TARGET_SELECTED: case MOVE_TARGET_SELECTED:
side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
targetBank = gSideTimers[side].followmeTarget; targetBattler = gSideTimers[side].followmeTarget;
else else
{ {
side = GetBattlerSide(gBattlerAttacker); side = GetBattlerSide(gBattlerAttacker);
do do
{ {
targetBank = Random() % gBattlersCount; targetBattler = Random() % gBattlersCount;
} while (targetBank == gBattlerAttacker || side == GetBattlerSide(targetBank) || gAbsentBattlerFlags & gBitTable[targetBank]); } while (targetBattler == gBattlerAttacker || side == GetBattlerSide(targetBattler) || gAbsentBattlerFlags & gBitTable[targetBattler]);
if (gBattleMoves[move].type == TYPE_ELECTRIC if (gBattleMoves[move].type == TYPE_ELECTRIC
&& AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_LIGHTNING_ROD, 0, 0) && AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_LIGHTNING_ROD, 0, 0)
&& gBattleMons[targetBank].ability != ABILITY_LIGHTNING_ROD) && gBattleMons[targetBattler].ability != ABILITY_LIGHTNING_ROD)
{ {
targetBank ^= BIT_FLANK; targetBattler ^= BIT_FLANK;
RecordAbilityBattle(targetBank, gBattleMons[targetBank].ability); RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability);
gSpecialStatuses[targetBank].lightningRodRedirected = 1; gSpecialStatuses[targetBattler].lightningRodRedirected = 1;
} }
} }
break; break;
@@ -3216,45 +3235,45 @@ u8 GetMoveTarget(u16 move, u8 setTarget)
case MOVE_TARGET_BOTH: case MOVE_TARGET_BOTH:
case MOVE_TARGET_FOES_AND_ALLY: case MOVE_TARGET_FOES_AND_ALLY:
case MOVE_TARGET_OPPONENTS_FIELD: case MOVE_TARGET_OPPONENTS_FIELD:
targetBank = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE); targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
if (gAbsentBattlerFlags & gBitTable[targetBank]) if (gAbsentBattlerFlags & gBitTable[targetBattler])
targetBank ^= BIT_FLANK; targetBattler ^= BIT_FLANK;
break; break;
case MOVE_TARGET_RANDOM: case MOVE_TARGET_RANDOM:
side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
targetBank = gSideTimers[side].followmeTarget; targetBattler = gSideTimers[side].followmeTarget;
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM) else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM)
{ {
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
{ {
if (Random() & 1) if (Random() & 1)
targetBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
else else
targetBank = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
} }
else else
{ {
if (Random() & 1) if (Random() & 1)
targetBank = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
else else
targetBank = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
} }
if (gAbsentBattlerFlags & gBitTable[targetBank]) if (gAbsentBattlerFlags & gBitTable[targetBattler])
targetBank ^= BIT_FLANK; targetBattler ^= BIT_FLANK;
} }
else else
targetBank = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE); targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
break; break;
case MOVE_TARGET_USER_OR_SELECTED: case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_USER: case MOVE_TARGET_USER:
targetBank = gBattlerAttacker; targetBattler = gBattlerAttacker;
break; break;
} }
*(gBattleStruct->moveTarget + gBattlerAttacker) = targetBank; *(gBattleStruct->moveTarget + gBattlerAttacker) = targetBattler;
return targetBank; return targetBattler;
} }
static bool32 HasObedientBitSet(u8 battlerId) static bool32 HasObedientBitSet(u8 battlerId)
+3 -5
View File
@@ -15,6 +15,7 @@
#include "malloc.h" #include "malloc.h"
#include "gpu_regs.h" #include "gpu_regs.h"
#include "text.h" #include "text.h"
#include "text_window.h"
#include "event_data.h" #include "event_data.h"
#include "main.h" #include "main.h"
#include "link.h" #include "link.h"
@@ -153,8 +154,6 @@ extern const u8 gText_234Players[];
extern void sub_800A418(void); extern void sub_800A418(void);
extern u8 sub_800A9D8(void); extern u8 sub_800A9D8(void);
extern void LoadUserWindowBorderGfx(u8, u16, u8);
extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8);
extern void sub_81AABF0(void (*callback)(void)); extern void sub_81AABF0(void (*callback)(void));
extern void sub_800B4C0(void); extern void sub_800B4C0(void);
extern void ClearLinkCallback(void); extern void ClearLinkCallback(void);
@@ -928,7 +927,7 @@ static void sub_807FAC8(void)
SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]); SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]);
SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]); SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]);
LoadUserWindowBorderGfx(0, 1, 0xD0); LoadUserWindowBorderGfx(0, 1, 0xD0);
copy_textbox_border_tile_patterns_to_vram(0, 0x14, 0xF0); LoadMessageBoxGfx(0, 0x14, 0xF0);
InitBerryBlenderWindows(); InitBerryBlenderWindows();
sBerryBlenderData->mainState++; sBerryBlenderData->mainState++;
@@ -1330,9 +1329,8 @@ static void sub_8080588(void)
SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]); SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]);
SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]); SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]);
LoadUserWindowBorderGfx(0, 1, 0xD0); LoadUserWindowBorderGfx(0, 1, 0xD0);
copy_textbox_border_tile_patterns_to_vram(0, 0x14, 0xF0); LoadMessageBoxGfx(0, 0x14, 0xF0);
InitBerryBlenderWindows(); InitBerryBlenderWindows();
sBerryBlenderData->field_44 = 0; sBerryBlenderData->field_44 = 0;
+20 -8
View File
@@ -7,6 +7,7 @@
#include "task.h" #include "task.h"
#include "field_effect.h" #include "field_effect.h"
#include "constants/flags.h" #include "constants/flags.h"
#include "constants/maps.h"
extern void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatileId); // fieldmap extern void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatileId); // fieldmap
extern void DrawWholeMapView(); // field_camera extern void DrawWholeMapView(); // field_camera
@@ -14,7 +15,6 @@ extern void SetCameraPanningCallback(void ( *callback)()); // field_camera
extern void InstallCameraPanAheadCallback(void); extern void InstallCameraPanAheadCallback(void);
extern void SetCameraPanning(s16 x, s16 y); extern void SetCameraPanning(s16 x, s16 y);
extern u8 GetCursorSelectionMonId(void); extern u8 GetCursorSelectionMonId(void);
extern void FieldEffectActiveListRemove(u8 id); // field_effect
extern u8 oei_task_add(void); extern u8 oei_task_add(void);
// why do this, GF? // why do this, GF?
@@ -24,7 +24,8 @@ enum
FLY_PUZZLE FLY_PUZZLE
}; };
extern u8 gBraillePuzzleCallbackFlag; EWRAM_DATA static u8 sBraillePuzzleCallbackFlag = 0;
extern const u8 gUnknown_085EFE74[][2]; extern const u8 gUnknown_085EFE74[][2];
void SealedChamberShakingEffect(u8); void SealedChamberShakingEffect(u8);
@@ -205,14 +206,25 @@ void SealedChamberShakingEffect(u8 taskId)
// moved later in the function because it was rewritten. // moved later in the function because it was rewritten.
bool8 ShouldDoBrailleStrengthEffect(void) bool8 ShouldDoBrailleStrengthEffect(void)
{ {
if (!FlagGet(FLAG_SYS_BRAILLE_STRENGTH) && (gSaveBlock1Ptr->location.mapGroup == 0x18 && gSaveBlock1Ptr->location.mapNum == 0x06)) if (!FlagGet(FLAG_SYS_BRAILLE_STRENGTH)
&& gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(DESERT_RUINS)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(DESERT_RUINS))
{ {
if (gSaveBlock1Ptr->pos.x == 6 && gSaveBlock1Ptr->pos.y == 23) if (gSaveBlock1Ptr->pos.x == 6 && gSaveBlock1Ptr->pos.y == 23)
{ gBraillePuzzleCallbackFlag = STRENGTH_PUZZLE; return TRUE; } {
sBraillePuzzleCallbackFlag = STRENGTH_PUZZLE;
return TRUE;
}
else if (gSaveBlock1Ptr->pos.x == 5 && gSaveBlock1Ptr->pos.y == 23) else if (gSaveBlock1Ptr->pos.x == 5 && gSaveBlock1Ptr->pos.y == 23)
{ gBraillePuzzleCallbackFlag = STRENGTH_PUZZLE; return TRUE; } {
sBraillePuzzleCallbackFlag = STRENGTH_PUZZLE;
return TRUE;
}
else if (gSaveBlock1Ptr->pos.x == 7 && gSaveBlock1Ptr->pos.y == 23) else if (gSaveBlock1Ptr->pos.x == 7 && gSaveBlock1Ptr->pos.y == 23)
{ gBraillePuzzleCallbackFlag = STRENGTH_PUZZLE; return TRUE; } {
sBraillePuzzleCallbackFlag = STRENGTH_PUZZLE;
return TRUE;
}
} }
return FALSE; return FALSE;
@@ -249,7 +261,7 @@ bool8 ShouldDoBrailleFlyEffect(void)
if (!FlagGet(FLAG_SYS_BRAILLE_FLY) && (gSaveBlock1Ptr->location.mapGroup == 0x18 && gSaveBlock1Ptr->location.mapNum == 0x44)) if (!FlagGet(FLAG_SYS_BRAILLE_FLY) && (gSaveBlock1Ptr->location.mapGroup == 0x18 && gSaveBlock1Ptr->location.mapNum == 0x44))
{ {
if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 25) if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 25)
{ gBraillePuzzleCallbackFlag = FLY_PUZZLE; return TRUE; } { sBraillePuzzleCallbackFlag = FLY_PUZZLE; return TRUE; }
} }
return FALSE; return FALSE;
} }
@@ -362,7 +374,7 @@ bool8 FldEff_UsePuzzleEffect(void)
{ {
u8 taskId = oei_task_add(); u8 taskId = oei_task_add();
if (gBraillePuzzleCallbackFlag == FLY_PUZZLE) if (sBraillePuzzleCallbackFlag == FLY_PUZZLE)
{ {
gTasks[taskId].data[8] = (u32)UseFlyAncientTomb_Callback >> 16; gTasks[taskId].data[8] = (u32)UseFlyAncientTomb_Callback >> 16;
gTasks[taskId].data[9] = (u32)UseFlyAncientTomb_Callback; gTasks[taskId].data[9] = (u32)UseFlyAncientTomb_Callback;
+2 -4
View File
@@ -57,12 +57,10 @@ extern const u8 gText_NickHatchPrompt[];
extern u8 sav1_map_get_name(void); extern u8 sav1_map_get_name(void);
extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8); extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8);
extern void sub_806A068(u16, u8);
extern void FadeScreen(u8, u8); extern void FadeScreen(u8, u8);
extern void overworld_free_bg_tilemaps(void); extern void overworld_free_bg_tilemaps(void);
extern void sub_80AF168(void); extern void sub_80AF168(void);
extern void ScanlineEffect_Stop(void); extern void ScanlineEffect_Stop(void);
extern void CB2_ReturnToField(void);
extern void play_some_sound(void); extern void play_some_sound(void);
extern void DoNamingScreen(u8, const u8*, u16, u8, u32, MainCallback); extern void DoNamingScreen(u8, const u8*, u16, u8, u32, MainCallback);
extern u16 sub_80D22D0(void); extern u16 sub_80D22D0(void);
@@ -437,8 +435,8 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc
} }
break; break;
case 1: case 1:
sub_806A068(GetMonSpritePalStruct(mon)->tag, r5); SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, r5);
spriteID = CreateSprite(&gUnknown_0202499C, 120, 75, 6); spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 75, 6);
gSprites[spriteID].invisible = 1; gSprites[spriteID].invisible = 1;
gSprites[spriteID].callback = SpriteCallbackDummy; gSprites[spriteID].callback = SpriteCallbackDummy;
break; break;
+29 -30
View File
@@ -62,7 +62,6 @@ extern const u8 gText_CommunicationStandby5[];
extern void sub_80356D0(void); extern void sub_80356D0(void);
extern void sub_807B154(void); extern void sub_807B154(void);
extern void sub_806A068(u16, u8);
extern void sub_807F19C(void); extern void sub_807F19C(void);
extern void sub_807B140(void); extern void sub_807B140(void);
extern void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); extern void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
@@ -280,9 +279,9 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo,
pokePal = GetMonSpritePalStructFromOtIdPersonality(currSpecies, trainerId, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(currSpecies, trainerId, personality);
LoadCompressedPalette(pokePal->data, 0x110, 0x20); LoadCompressedPalette(pokePal->data, 0x110, 0x20);
sub_806A068(currSpecies, 1); SetMultiuseSpriteTemplateToPokemon(currSpecies, 1);
gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable; gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
sEvoStructPtr->preEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30); sEvoStructPtr->preEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2; gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 1; gSprites[ID].oam.paletteNum = 1;
@@ -295,9 +294,9 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo,
pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality);
LoadCompressedPalette(pokePal->data, 0x120, 0x20); LoadCompressedPalette(pokePal->data, 0x120, 0x20);
sub_806A068(speciesToEvolve, 3); SetMultiuseSpriteTemplateToPokemon(speciesToEvolve, 3);
gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable; gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30); sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2; gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 2; gSprites[ID].oam.paletteNum = 2;
gSprites[ID].invisible = 1; gSprites[ID].invisible = 1;
@@ -373,9 +372,9 @@ static void CB2_EvolutionSceneLoadGraphics(void)
LoadCompressedPalette(pokePal->data, 0x120, 0x20); LoadCompressedPalette(pokePal->data, 0x120, 0x20);
sub_806A068(postEvoSpecies, 3); SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 3);
gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable; gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30); sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2; gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 2; gSprites[ID].oam.paletteNum = 2;
@@ -450,9 +449,9 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
{ {
u8 ID; u8 ID;
sub_806A068(postEvoSpecies, 1); SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 1);
gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable; gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30); sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2; gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 2; gSprites[ID].oam.paletteNum = 2;
@@ -509,9 +508,9 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri
pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality); pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality);
LoadCompressedPalette(pokePal->data, 0x120, 0x20); LoadCompressedPalette(pokePal->data, 0x120, 0x20);
sub_806A068(speciesToEvolve, 1); SetMultiuseSpriteTemplateToPokemon(speciesToEvolve, 1);
gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable; gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30); sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2; gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 2; gSprites[ID].oam.paletteNum = 2;
@@ -635,7 +634,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving); StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving);
BattleHandleAddTextPrinter(gStringVar4, 0); BattlePutTextOnWindow(gStringVar4, 0);
gTasks[taskID].tState++; gTasks[taskID].tState++;
} }
break; break;
@@ -731,7 +730,7 @@ static void Task_EvolutionScene(u8 taskID)
if (IsCryFinished()) if (IsCryFinished())
{ {
StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved); StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
BattleHandleAddTextPrinter(gStringVar4, 0); BattlePutTextOnWindow(gStringVar4, 0);
PlayBGM(MUS_FANFA5); PlayBGM(MUS_FANFA5);
gTasks[taskID].tState++; gTasks[taskID].tState++;
SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies)); SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
@@ -818,7 +817,7 @@ static void Task_EvolutionScene(u8 taskID)
else // Fire Red leftover probably else // Fire Red leftover probably
StringExpandPlaceholders(gStringVar4, gText_PkmnStoppedEvolving); StringExpandPlaceholders(gStringVar4, gText_PkmnStoppedEvolving);
BattleHandleAddTextPrinter(gStringVar4, 0); BattlePutTextOnWindow(gStringVar4, 0);
gTasks[taskID].tEvoWasStopped = TRUE; gTasks[taskID].tEvoWasStopped = TRUE;
gTasks[taskID].tState = 15; gTasks[taskID].tState = 15;
} }
@@ -829,7 +828,7 @@ static void Task_EvolutionScene(u8 taskID)
BufferMoveToLearnIntoBattleTextBuff2(); BufferMoveToLearnIntoBattleTextBuff2();
PlayFanfare(MUS_FANFA1); PlayFanfare(MUS_FANFA1);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
gTasks[taskID].tState++; gTasks[taskID].tState++;
} }
@@ -846,7 +845,7 @@ static void Task_EvolutionScene(u8 taskID)
{ {
BufferMoveToLearnIntoBattleTextBuff2(); BufferMoveToLearnIntoBattleTextBuff2();
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState++; gTasks[taskID].tLearnMoveState++;
} }
break; break;
@@ -854,7 +853,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying()) if (!IsTextPrinterActive(0) && !IsSEPlaying())
{ {
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState++; gTasks[taskID].tLearnMoveState++;
} }
break; break;
@@ -862,7 +861,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying()) if (!IsTextPrinterActive(0) && !IsSEPlaying())
{ {
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tData7 = 5; gTasks[taskID].tData7 = 5;
gTasks[taskID].tData8 = 10; gTasks[taskID].tData8 = 10;
gTasks[taskID].tLearnMoveState++; gTasks[taskID].tLearnMoveState++;
@@ -871,7 +870,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying()) if (!IsTextPrinterActive(0) && !IsSEPlaying())
{ {
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0); HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC); BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gTasks[taskID].tLearnMoveState++; gTasks[taskID].tLearnMoveState++;
sEvoCursorPos = 0; sEvoCursorPos = 0;
BattleCreateYesNoCursorAt(0); BattleCreateYesNoCursorAt(0);
@@ -939,7 +938,7 @@ static void Task_EvolutionScene(u8 taskID)
if (IsHMMove2(move)) if (IsHMMove2(move))
{ {
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState = 12; gTasks[taskID].tLearnMoveState = 12;
} }
else else
@@ -955,14 +954,14 @@ static void Task_EvolutionScene(u8 taskID)
break; break;
case 7: case 7:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState++; gTasks[taskID].tLearnMoveState++;
break; break;
case 8: case 8:
if (!IsTextPrinterActive(0) && !IsSEPlaying()) if (!IsTextPrinterActive(0) && !IsSEPlaying())
{ {
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState++; gTasks[taskID].tLearnMoveState++;
} }
break; break;
@@ -970,20 +969,20 @@ static void Task_EvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying()) if (!IsTextPrinterActive(0) && !IsSEPlaying())
{ {
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tState = 20; gTasks[taskID].tState = 20;
} }
break; break;
case 10: case 10:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tData7 = 11; gTasks[taskID].tData7 = 11;
gTasks[taskID].tData8 = 0; gTasks[taskID].tData8 = 0;
gTasks[taskID].tLearnMoveState = 3; gTasks[taskID].tLearnMoveState = 3;
break; break;
case 11: case 11:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0); BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tState = 15; gTasks[taskID].tState = 15;
break; break;
case 12: case 12:
+3 -3
View File
@@ -380,7 +380,7 @@ u8 MapGridGetZCoordAt(int x, int y)
{ {
return 0; return 0;
} }
return block >> 12; return block >> 12;
} }
@@ -559,7 +559,7 @@ void mapdata_from_sav2(void)
a0 = 1; a0 = 1;
else else
a0 = -1; a0 = -1;
for (j = x; j < x + 15; j++) for (j = x; j < x + 15; j++)
{ {
if (!sub_8088BF0(&gUnknown_02032318[j + width * i], width, a0)) if (!sub_8088BF0(&gUnknown_02032318[j + width * i], width, a0))
@@ -922,7 +922,7 @@ bool8 sub_8088BF0(u16* a0, u16 a1, u8 a2)
{ {
if (a2 == 0xFF) if (a2 == 0xFF)
return FALSE; return FALSE;
if (a2 == 0) if (a2 == 0)
a0 -= a1; a0 -= a1;
else else
+10 -10
View File
@@ -33,12 +33,12 @@ struct HallofFameMon
u32 personality; u32 personality;
u16 species:9; u16 species:9;
u16 lvl:7; u16 lvl:7;
u8 nick[10]; u8 nick[POKEMON_NAME_LENGTH];
}; };
struct HallofFameTeam struct HallofFameTeam
{ {
struct HallofFameMon mon[6]; struct HallofFameMon mon[PARTY_SIZE];
}; };
struct HofGfx struct HofGfx
@@ -49,11 +49,11 @@ struct HofGfx
u8 tilemap2[0x1000]; u8 tilemap2[0x1000];
}; };
static EWRAM_DATA u32 sUnknown_0203BCD4 = 0;
static EWRAM_DATA struct HallofFameTeam *sHofMonPtr = NULL; static EWRAM_DATA struct HallofFameTeam *sHofMonPtr = NULL;
static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL; static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL;
extern bool8 gHasHallOfFameRecords; extern bool8 gHasHallOfFameRecords;
extern u32 gUnknown_0203BCD4;
extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern MainCallback gGameContinueCallback; extern MainCallback gGameContinueCallback;
extern u32 gDamagedSaveSectors; extern u32 gDamagedSaveSectors;
@@ -490,7 +490,7 @@ static void Task_Hof_InitMonData(u8 taskId)
} }
} }
gUnknown_0203BCD4 = 0; sUnknown_0203BCD4 = 0;
gTasks[taskId].tDisplayedMonId = 0; gTasks[taskId].tDisplayedMonId = 0;
gTasks[taskId].tPlayerSpriteID = 0xFF; gTasks[taskId].tPlayerSpriteID = 0xFF;
@@ -648,11 +648,11 @@ static void Task_Hof_TryDisplayAnotherMon(u8 taskId)
} }
else else
{ {
gUnknown_0203BCD4 |= (0x10000 << gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.paletteNum); sUnknown_0203BCD4 |= (0x10000 << gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.paletteNum);
if (gTasks[taskId].tDisplayedMonId <= 4 && currMon[1].species != SPECIES_NONE) // there is another pokemon to display if (gTasks[taskId].tDisplayedMonId <= 4 && currMon[1].species != SPECIES_NONE) // there is another pokemon to display
{ {
gTasks[taskId].tDisplayedMonId++; gTasks[taskId].tDisplayedMonId++;
BeginNormalPaletteFade(gUnknown_0203BCD4, 0, 12, 12, 0x63B0); BeginNormalPaletteFade(sUnknown_0203BCD4, 0, 12, 12, 0x63B0);
gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.priority = 1; gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.priority = 1;
gTasks[taskId].func = Task_Hof_DisplayMon; gTasks[taskId].func = Task_Hof_DisplayMon;
} }
@@ -696,7 +696,7 @@ static void sub_8173DC0(u8 taskId)
if (gTasks[taskId].tMonSpriteId(i) != 0xFF) if (gTasks[taskId].tMonSpriteId(i) != 0xFF)
gSprites[gTasks[taskId].tMonSpriteId(i)].oam.priority = 1; gSprites[gTasks[taskId].tMonSpriteId(i)].oam.priority = 1;
} }
BeginNormalPaletteFade(gUnknown_0203BCD4, 0, 12, 12, 0x63B0); BeginNormalPaletteFade(sUnknown_0203BCD4, 0, 12, 12, 0x63B0);
FillWindowPixelBuffer(0, 0); FillWindowPixelBuffer(0, 0);
CopyWindowToVram(0, 3); CopyWindowToVram(0, 3);
gTasks[taskId].tFrameCount = 7; gTasks[taskId].tFrameCount = 7;
@@ -923,7 +923,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
savedTeams++; savedTeams++;
currMon = &savedTeams->mon[0]; currMon = &savedTeams->mon[0];
gUnknown_0203BCD4 = 0; sUnknown_0203BCD4 = 0;
gTasks[taskId].tCurrMonId = 0; gTasks[taskId].tCurrMonId = 0;
gTasks[taskId].tMonNo = 0; gTasks[taskId].tMonNo = 0;
@@ -998,8 +998,8 @@ static void Task_HofPC_PrintMonInfo(u8 taskId)
currMonID = gTasks[taskId].tMonSpriteId(gTasks[taskId].tCurrMonId); currMonID = gTasks[taskId].tMonSpriteId(gTasks[taskId].tCurrMonId);
gSprites[currMonID].oam.priority = 0; gSprites[currMonID].oam.priority = 0;
gUnknown_0203BCD4 = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; sUnknown_0203BCD4 = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000;
BlendPalettesUnfaded(gUnknown_0203BCD4, 0xC, 0x63B0); BlendPalettesUnfaded(sUnknown_0203BCD4, 0xC, 0x63B0);
currMon = &savedTeams->mon[gTasks[taskId].tCurrMonId]; currMon = &savedTeams->mon[gTasks[taskId].tCurrMonId];
if (currMon->species != SPECIES_EGG) if (currMon->species != SPECIES_EGG)
+1 -1
View File
@@ -1024,7 +1024,7 @@ bool8 RemovePyramidBagItem(u16 itemId, u16 count)
static u16 SanitizeItemId(u16 itemId) static u16 SanitizeItemId(u16 itemId)
{ {
if (itemId >= ITEM_LAST_ID + 1) if (itemId >= ITEMS_COUNT)
return ITEM_NONE; return ITEM_NONE;
else else
return itemId; return itemId;
+1 -1
View File
@@ -162,7 +162,7 @@ const void *GetItemIconPicOrPalette(u16 itemId, u8 which)
{ {
if (itemId == 0xFFFF) if (itemId == 0xFFFF)
itemId = ITEM_FIELD_ARROW; itemId = ITEM_FIELD_ARROW;
else if (itemId > ITEM_LAST_ID) else if (itemId >= ITEMS_COUNT)
itemId = 0; itemId = 0;
return gItemIconTable[itemId][which]; return gItemIconTable[itemId][which];
+1 -1
View File
@@ -2104,7 +2104,7 @@ void setup_bag_menu_textboxes(void)
InitWindows(gUnknown_08614174); InitWindows(gUnknown_08614174);
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 1, -32); LoadUserWindowBorderGfx(0, 1, -32);
copy_textbox_border_tile_patterns_to_vram(0, 10, -48); LoadMessageBoxGfx(0, 10, -48);
sub_819A2BC(-64, 1); sub_819A2BC(-64, 1);
LoadPalette(&gUnknown_0860F074, 0xF0, 0x20); LoadPalette(&gUnknown_0860F074, 0xF0, 0x20);
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
+2 -2
View File
@@ -1066,7 +1066,7 @@ void task_new_game_prof_birch_speech_3(u8 taskId)
{ {
InitWindows(gUnknown_082FF080); InitWindows(gUnknown_082FF080);
LoadMainMenuWindowFrameTiles(0, 0xF3); LoadMainMenuWindowFrameTiles(0, 0xF3);
copy_textbox_border_tile_patterns_to_vram(0, 0xFC, 0xF0); LoadMessageBoxGfx(0, 0xFC, 0xF0);
unknown_rbox_to_vram(0, 1); unknown_rbox_to_vram(0, 1);
PutWindowTilemap(0); PutWindowTilemap(0);
CopyWindowToVram(0, 2); CopyWindowToVram(0, 2);
@@ -1593,7 +1593,7 @@ void new_game_prof_birch_speech_part2_start(void)
SetMainCallback2(CB2_MainMenu); SetMainCallback2(CB2_MainMenu);
InitWindows(gUnknown_082FF080); InitWindows(gUnknown_082FF080);
LoadMainMenuWindowFrameTiles(0, 0xF3); LoadMainMenuWindowFrameTiles(0, 0xF3);
copy_textbox_border_tile_patterns_to_vram(0, 0xFC, 0xF0); LoadMessageBoxGfx(0, 0xFC, 0xF0);
PutWindowTilemap(0); PutWindowTilemap(0);
CopyWindowToVram(0, 3); CopyWindowToVram(0, 3);
} }
+2 -2
View File
@@ -193,7 +193,7 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP
void sub_81973A4(void) void sub_81973A4(void)
{ {
copy_textbox_border_tile_patterns_to_vram(0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10); LoadMessageBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10);
LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM * 0x10); LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM * 0x10);
} }
@@ -412,7 +412,7 @@ void SetStandardWindowBorderStyle(u8 windowId, bool8 copyToVram)
void sub_819786C(u8 windowId, bool8 copyToVram) void sub_819786C(u8 windowId, bool8 copyToVram)
{ {
copy_textbox_border_tile_patterns_to_vram(windowId, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10); LoadMessageBoxGfx(windowId, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10);
sub_8197B1C(windowId, copyToVram, DLG_WINDOW_BASE_TILE_NUM, 0xF); sub_8197B1C(windowId, copyToVram, DLG_WINDOW_BASE_TILE_NUM, 0xF);
} }
+3 -3
View File
@@ -665,7 +665,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
gTasks[taskId].tCryTaskState = wantedCry + 1; gTasks[taskId].tCryTaskState = wantedCry + 1;
break; break;
case 1: case 1:
if (ShouldPlayNormalPokeCry(mon) == TRUE) if (ShouldPlayNormalMonCry(mon) == TRUE)
PlayCry3(species, pan, 0); PlayCry3(species, pan, 0);
else else
PlayCry3(species, pan, 11); PlayCry3(species, pan, 11);
@@ -680,7 +680,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
case 20: case 20:
if (gTasks[taskId].tCryTaskFrames == 0) if (gTasks[taskId].tCryTaskFrames == 0)
{ {
if (ShouldPlayNormalPokeCry(mon) == TRUE) if (ShouldPlayNormalMonCry(mon) == TRUE)
PlayCry4(species, pan, 1); PlayCry4(species, pan, 1);
else else
PlayCry4(species, pan, 12); PlayCry4(species, pan, 12);
@@ -719,7 +719,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
gTasks[taskId].tCryTaskFrames--; gTasks[taskId].tCryTaskFrames--;
break; break;
} }
if (ShouldPlayNormalPokeCry(mon) == TRUE) if (ShouldPlayNormalMonCry(mon) == TRUE)
PlayCry4(species, pan, 0); PlayCry4(species, pan, 0);
else else
PlayCry4(species, pan, 11); PlayCry4(species, pan, 11);
+2 -3
View File
@@ -3,6 +3,7 @@
#include "bg.h" #include "bg.h"
#include "strings.h" #include "strings.h"
#include "text.h" #include "text.h"
#include "text_window.h"
#include "menu.h" #include "menu.h"
#include "task.h" #include "task.h"
#include "menu_helpers.h" #include "menu_helpers.h"
@@ -75,8 +76,6 @@ extern const u16 gUnknown_0860F074[];
extern void CB2_ReturnToField(void); extern void CB2_ReturnToField(void);
extern bool8 sub_81221EC(void); extern bool8 sub_81221EC(void);
extern void LoadUserWindowBorderGfx(u8, u16, u8);
extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8);
extern void sub_80AF168(void); extern void sub_80AF168(void);
// this file's functions // this file's functions
@@ -567,7 +566,7 @@ static void HandleInitWindows(void)
InitWindows(sWindowTemplatesForPokeblockMenu); InitWindows(sWindowTemplatesForPokeblockMenu);
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 1, 0xE0); LoadUserWindowBorderGfx(0, 1, 0xE0);
copy_textbox_border_tile_patterns_to_vram(0, 0xA, 0xD0); LoadMessageBoxGfx(0, 0xA, 0xD0);
LoadPalette(gUnknown_0860F074, 0xF0, 0x20); LoadPalette(gUnknown_0860F074, 0xF0, 0x20);
for (i = 0; i < ARRAY_COUNT(sWindowTemplatesForPokeblockMenu) - 1; i++) for (i = 0; i < ARRAY_COUNT(sWindowTemplatesForPokeblockMenu) - 1; i++)
+3 -4
View File
@@ -21,6 +21,7 @@
#include "sound.h" #include "sound.h"
#include "trig.h" #include "trig.h"
#include "graphics.h" #include "graphics.h"
#include "text_window.h"
#include "battle.h" // to get rid of once gMonSpritesGfxPtr is put elsewhere #include "battle.h" // to get rid of once gMonSpritesGfxPtr is put elsewhere
struct PokeblockFeedStruct struct PokeblockFeedStruct
@@ -58,8 +59,6 @@ extern const struct CompressedSpriteSheet gMonFrontPicTable[];
extern const u16 gUnknown_0860F074[]; extern const u16 gUnknown_0860F074[];
extern bool8 sub_81221EC(void); extern bool8 sub_81221EC(void);
extern void sub_806A068(u16, u8);
extern void LoadUserWindowBorderGfx(u8, u16, u8);
// this file's functions // this file's functions
static void HandleInitBackgrounds(void); static void HandleInitBackgrounds(void);
@@ -661,7 +660,7 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon)
palette = GetMonSpritePalStructFromOtIdPersonality(species, trainerId, personality); palette = GetMonSpritePalStructFromOtIdPersonality(species, trainerId, personality);
LoadCompressedObjectPalette(palette); LoadCompressedObjectPalette(palette);
sub_806A068(palette->tag, 1); SetMultiuseSpriteTemplateToPokemon(palette->tag, 1);
sPokeblockFeed->loadGfxState++; sPokeblockFeed->loadGfxState++;
break; break;
case 2: case 2:
@@ -827,7 +826,7 @@ static void Task_PaletteFadeToReturn(u8 taskId)
static u8 CreateMonSprite(struct Pokemon* mon) static u8 CreateMonSprite(struct Pokemon* mon)
{ {
u16 species = GetMonData(mon, MON_DATA_SPECIES2); u16 species = GetMonData(mon, MON_DATA_SPECIES2);
u8 spriteId = CreateSprite(&gUnknown_0202499C, 48, 80, 2); u8 spriteId = CreateSprite(&gMultiuseSpriteTemplate, 48, 80, 2);
sPokeblockFeed->species = species; sPokeblockFeed->species = species;
sPokeblockFeed->monSpriteId_ = spriteId; sPokeblockFeed->monSpriteId_ = spriteId;
+76 -73
View File
@@ -63,7 +63,7 @@ extern const struct SpriteFrameImage gUnknown_082FF4F8[];
extern const struct SpriteFrameImage gUnknown_082FF518[]; extern const struct SpriteFrameImage gUnknown_082FF518[];
extern const union AffineAnimCmd *const gUnknown_082FF618[]; extern const union AffineAnimCmd *const gUnknown_082FF618[];
extern const union AffineAnimCmd *const gUnknown_082FF694[]; extern const union AffineAnimCmd *const gUnknown_082FF694[];
extern const union AnimCmd *gUnknown_082FF70C[]; extern const union AnimCmd *gPlayerMonSpriteAnimsTable[];
extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[]; extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[];
extern const union AnimCmd *const *const gUnknown_08305D0C[]; extern const union AnimCmd *const *const gUnknown_08305D0C[];
extern const union AnimCmd *const *const gUnknown_0830536C[]; extern const union AnimCmd *const *const gUnknown_0830536C[];
@@ -105,7 +105,7 @@ EWRAM_DATA u8 gPlayerPartyCount = 0;
EWRAM_DATA u8 gEnemyPartyCount = 0; EWRAM_DATA u8 gEnemyPartyCount = 0;
EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0};
EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0}; EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0};
EWRAM_DATA struct SpriteTemplate gUnknown_0202499C = {0}; EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0};
EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL}; EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL};
// const rom data // const rom data
@@ -1964,11 +1964,11 @@ void CalculateMonStats(struct Pokemon *mon)
SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP); SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP);
CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK) CALC_STAT(baseAttack, attackIV, attackEV, STAT_ATK, MON_DATA_ATK)
CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF) CALC_STAT(baseDefense, defenseIV, defenseEV, STAT_DEF, MON_DATA_DEF)
CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPEED) CALC_STAT(baseSpeed, speedIV, speedEV, STAT_SPEED, MON_DATA_SPEED)
CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK) CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, STAT_SPATK, MON_DATA_SPATK)
CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF) CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, STAT_SPDEF, MON_DATA_SPDEF)
if (species == SPECIES_SHEDINJA) if (species == SPECIES_SHEDINJA)
{ {
@@ -2265,7 +2265,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (attackerHoldEffect == sHoldEffectToType[i][0] if (attackerHoldEffect == sHoldEffectToType[i][0]
&& type == sHoldEffectToType[i][1]) && type == sHoldEffectToType[i][1])
{ {
if (type <= 8) if (IS_TYPE_PHYSICAL(type))
attack = (attack * (attackerHoldEffectParam + 100)) / 100; attack = (attack * (attackerHoldEffectParam + 100)) / 100;
else else
spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100; spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100;
@@ -2293,9 +2293,9 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
spAttack /= 2; spAttack /= 2;
if (attacker->ability == ABILITY_HUSTLE) if (attacker->ability == ABILITY_HUSTLE)
attack = (150 * attack) / 100; attack = (150 * attack) / 100;
if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MINUS, 0, 0)) if (attacker->ability == ABILITY_PLUS && ABILITY_ON_FIELD2(ABILITY_MINUS))
spAttack = (150 * spAttack) / 100; spAttack = (150 * spAttack) / 100;
if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_PLUS, 0, 0)) if (attacker->ability == ABILITY_MINUS && ABILITY_ON_FIELD2(ABILITY_PLUS))
spAttack = (150 * spAttack) / 100; spAttack = (150 * spAttack) / 100;
if (attacker->ability == ABILITY_GUTS && attacker->status1) if (attacker->ability == ABILITY_GUTS && attacker->status1)
attack = (150 * attack) / 100; attack = (150 * attack) / 100;
@@ -2316,7 +2316,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION) if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION)
defense /= 2; defense /= 2;
if (type < TYPE_MYSTERY) // is physical if (IS_TYPE_PHYSICAL(type))
{ {
if (gCritMultiplier == 2) if (gCritMultiplier == 2)
{ {
@@ -2366,7 +2366,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (type == TYPE_MYSTERY) if (type == TYPE_MYSTERY)
damage = 0; // is ??? type. does 0 damage. damage = 0; // is ??? type. does 0 damage.
if (type > TYPE_MYSTERY) // is special? if (IS_TYPE_SPECIAL(type))
{ {
if (gCritMultiplier == 2) if (gCritMultiplier == 2)
{ {
@@ -2406,8 +2406,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
damage /= 2; damage /= 2;
// are effects of weather negated with cloud nine or air lock // are effects of weather negated with cloud nine or air lock
if (!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0) if (WEATHER_HAS_EFFECT2)
&& !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0))
{ {
if (gBattleWeather & WEATHER_RAIN_TEMPORARY) if (gBattleWeather & WEATHER_RAIN_TEMPORARY)
{ {
@@ -2486,13 +2485,14 @@ static bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId)
{ {
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER)) if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
return FALSE; return FALSE;
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
return FALSE; return FALSE;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT) else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
return FALSE; return FALSE;
if (FlagGet(badgeFlag)) else if (FlagGet(badgeFlag))
return TRUE; return TRUE;
return FALSE; else
return FALSE;
} }
u8 GetDefaultMoveTarget(u8 battlerId) u8 GetDefaultMoveTarget(u8 battlerId)
@@ -2561,53 +2561,53 @@ u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality)
return MON_MALE; return MON_MALE;
} }
void sub_806A068(u16 species, u8 battlerPosition) void SetMultiuseSpriteTemplateToPokemon(u16 species, u8 battlerPosition)
{ {
if (gMonSpritesGfxPtr != NULL) if (gMonSpritesGfxPtr != NULL)
gUnknown_0202499C = gMonSpritesGfxPtr->templates[battlerPosition]; gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else if (gUnknown_020249B4[0]) else if (gUnknown_020249B4[0])
gUnknown_0202499C = gUnknown_020249B4[0]->templates[battlerPosition]; gMultiuseSpriteTemplate = gUnknown_020249B4[0]->templates[battlerPosition];
else if (gUnknown_020249B4[1]) else if (gUnknown_020249B4[1])
gUnknown_0202499C = gUnknown_020249B4[1]->templates[battlerPosition]; gMultiuseSpriteTemplate = gUnknown_020249B4[1]->templates[battlerPosition];
else else
gUnknown_0202499C = gUnknown_08329D98[battlerPosition]; gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
gUnknown_0202499C.paletteTag = species; gMultiuseSpriteTemplate.paletteTag = species;
if (battlerPosition == 0 || battlerPosition == 2) if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
gUnknown_0202499C.anims = gUnknown_082FF70C; gMultiuseSpriteTemplate.anims = gPlayerMonSpriteAnimsTable;
else if (species > 500) else if (species > 500)
gUnknown_0202499C.anims = gMonAnimationsSpriteAnimsPtrTable[species - 500]; gMultiuseSpriteTemplate.anims = gMonAnimationsSpriteAnimsPtrTable[species - 500];
else else
gUnknown_0202499C.anims = gMonAnimationsSpriteAnimsPtrTable[species]; gMultiuseSpriteTemplate.anims = gMonAnimationsSpriteAnimsPtrTable[species];
} }
void sub_806A12C(u16 trainerSpriteId, u8 battlerPosition) void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosition)
{ {
gUnknown_0202499C.paletteTag = trainerSpriteId; gMultiuseSpriteTemplate.paletteTag = trainerSpriteId;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT) if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
{ {
gUnknown_0202499C = gUnknown_08329DF8[trainerSpriteId]; gMultiuseSpriteTemplate = gUnknown_08329DF8[trainerSpriteId];
gUnknown_0202499C.anims = gUnknown_08305D0C[trainerSpriteId]; gMultiuseSpriteTemplate.anims = gUnknown_08305D0C[trainerSpriteId];
} }
else else
{ {
if (gMonSpritesGfxPtr != NULL) if (gMonSpritesGfxPtr != NULL)
gUnknown_0202499C = gMonSpritesGfxPtr->templates[battlerPosition]; gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else else
gUnknown_0202499C = gUnknown_08329D98[battlerPosition]; gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
gUnknown_0202499C.anims = gUnknown_0830536C[trainerSpriteId]; gMultiuseSpriteTemplate.anims = gUnknown_0830536C[trainerSpriteId];
} }
} }
void sub_806A1C0(u16 arg0, u8 battlerPosition) void SetMultiuseSpriteTemplateToTrainerFront(u16 arg0, u8 battlerPosition)
{ {
if (gMonSpritesGfxPtr != NULL) if (gMonSpritesGfxPtr != NULL)
gUnknown_0202499C = gMonSpritesGfxPtr->templates[battlerPosition]; gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else else
gUnknown_0202499C = gUnknown_08329D98[battlerPosition]; gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
gUnknown_0202499C.paletteTag = arg0; gMultiuseSpriteTemplate.paletteTag = arg0;
gUnknown_0202499C.anims = gUnknown_0830536C[arg0]; gMultiuseSpriteTemplate.anims = gUnknown_0830536C[arg0];
} }
static void EncryptBoxMon(struct BoxPokemon *boxMon) static void EncryptBoxMon(struct BoxPokemon *boxMon)
@@ -3136,7 +3136,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg)
{ {
const u8* data = dataArg; const u8 *data = dataArg;
switch (field) switch (field)
{ {
case MON_DATA_STATUS: case MON_DATA_STATUS:
@@ -3179,7 +3180,7 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg)
void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
{ {
const u8* data = dataArg; const u8 *data = dataArg;
struct PokemonSubstruct0 *substruct0 = NULL; struct PokemonSubstruct0 *substruct0 = NULL;
struct PokemonSubstruct1 *substruct1 = NULL; struct PokemonSubstruct1 *substruct1 = NULL;
@@ -4511,8 +4512,8 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
else else
holdEffect = ItemId_GetHoldEffect(heldItem); holdEffect = ItemId_GetHoldEffect(heldItem);
if (holdEffect == 38 && type != 3) if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != 3)
return 0; return SPECIES_NONE;
switch (type) switch (type)
{ {
@@ -4520,7 +4521,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
level = GetMonData(mon, MON_DATA_LEVEL, 0); level = GetMonData(mon, MON_DATA_LEVEL, 0);
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0); friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
for (i = 0; i < 5; i++) for (i = 0; i < EVOS_PER_MON; i++)
{ {
switch (gEvolutionTable[species][i].method) switch (gEvolutionTable[species][i].method)
{ {
@@ -4577,7 +4578,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
} }
break; break;
case 1: case 1:
for (i = 0; i < 5; i++) for (i = 0; i < EVOS_PER_MON; i++)
{ {
switch (gEvolutionTable[species][i].method) switch (gEvolutionTable[species][i].method)
{ {
@@ -4597,7 +4598,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
break; break;
case 2: case 2:
case 3: case 3:
for (i = 0; i < 5; i++) for (i = 0; i < EVOS_PER_MON; i++)
{ {
if (gEvolutionTable[species][i].method == EVO_ITEM if (gEvolutionTable[species][i].method == EVO_ITEM
&& gEvolutionTable[species][i].param == evolutionItem) && gEvolutionTable[species][i].param == evolutionItem)
@@ -4819,21 +4820,21 @@ bool8 sub_806D7EC(void)
return retVal; return retVal;
} }
bool16 sub_806D82C(u8 id) u16 GetLinkTrainerFlankId(u8 linkPlayerId)
{ {
bool16 retVal = FALSE; u16 flankId = 0;
switch (gLinkPlayers[id].lp_field_18) switch (gLinkPlayers[linkPlayerId].lp_field_18)
{ {
case 0: case 0:
case 3: case 3:
retVal = FALSE; flankId = 0;
break; break;
case 1: case 1:
case 2: case 2:
retVal = TRUE; flankId = 1;
break; break;
} }
return retVal; return flankId;
} }
s32 GetBattlerMultiplayerId(u16 a1) s32 GetBattlerMultiplayerId(u16 a1)
@@ -4849,16 +4850,17 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
{ {
if (InBattlePyramid()) if (InBattlePyramid())
return GetTrainerEncounterMusicIdInBattlePyramind(trainerOpponentId); return GetTrainerEncounterMusicIdInBattlePyramind(trainerOpponentId);
if (sub_81D5C18()) else if (sub_81D5C18())
return sub_81D63C8(trainerOpponentId); return sub_81D63C8(trainerOpponentId);
return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId); else
return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId);
} }
u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
{ {
if (statIndex < 1 || statIndex > 5) if (statIndex < 1 || statIndex > 5)
{ {
// should just be "return n", but it wouldn't match without this // Should just be "return n", but it wouldn't match without this.
u16 retVal = n; u16 retVal = n;
retVal++; retVal++;
retVal--; retVal--;
@@ -5165,7 +5167,7 @@ void PartySpreadPokerus(struct Pokemon *party)
{ {
if (pokerus & 0xF) if (pokerus & 0xF)
{ {
// spread to adjacent party members // Spread to adjacent party members.
if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0)) if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0))
SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus); SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus);
if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0)) if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0))
@@ -5365,11 +5367,11 @@ u16 GetBattleBGM(void)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
return MUS_BATTLE34; return MUS_BATTLE34;
if (gBattleTypeFlags & BATTLE_TYPE_REGI) else if (gBattleTypeFlags & BATTLE_TYPE_REGI)
return MUS_BATTLE36; return MUS_BATTLE36;
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
return MUS_BATTLE20; return MUS_BATTLE20;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{ {
u8 trainerClass; u8 trainerClass;
@@ -5414,7 +5416,8 @@ u16 GetBattleBGM(void)
return MUS_BATTLE20; return MUS_BATTLE20;
} }
} }
return MUS_BATTLE27; else
return MUS_BATTLE27;
} }
void PlayBattleBGM(void) void PlayBattleBGM(void)
@@ -5578,19 +5581,19 @@ void BoxMonRestorePP(struct BoxPokemon *boxMon)
} }
} }
void sub_806E994(void) void SetMonPreventsSwitchingString(void)
{ {
gLastUsedAbility = gBattleStruct->field_B0; gLastUsedAbility = gBattleStruct->abilityPreventingSwitchout;
gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN; gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
gBattleTextBuff1[1] = B_BUFF_MON_NICK_WITH_PREFIX; gBattleTextBuff1[1] = B_BUFF_MON_NICK_WITH_PREFIX;
gBattleTextBuff1[2] = gBattleStruct->field_49; gBattleTextBuff1[2] = gBattleStruct->battlerPreventingSwitchout;
gBattleTextBuff1[4] = B_BUFF_EOS; gBattleTextBuff1[4] = B_BUFF_EOS;
if (!GetBattlerSide(gBattleStruct->field_49)) if (GetBattlerSide(gBattleStruct->battlerPreventingSwitchout) == B_SIDE_PLAYER)
gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->field_49]); gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]);
else else
gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->field_49]; gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout];
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId])) PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]))
@@ -5678,7 +5681,7 @@ const u8 *GetTrainerPartnerName(void)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{ {
if (gPartnerTrainerId == STEVEN_PARTNER_ID) if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{ {
return gTrainers[TRAINER_STEVEN].trainerName; return gTrainers[TRAINER_STEVEN].trainerName;
} }
@@ -5891,15 +5894,15 @@ void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality)
const u8 *GetTrainerClassNameFromId(u16 trainerId) const u8 *GetTrainerClassNameFromId(u16 trainerId)
{ {
if (trainerId > NO_OF_TRAINERS) if (trainerId >= TRAINERS_COUNT)
trainerId = 0; trainerId = TRAINER_NONE;
return gTrainerClassNames[gTrainers[trainerId].trainerClass]; return gTrainerClassNames[gTrainers[trainerId].trainerClass];
} }
const u8 *GetTrainerNameFromId(u16 trainerId) const u8 *GetTrainerNameFromId(u16 trainerId)
{ {
if (trainerId > NO_OF_TRAINERS) if (trainerId >= TRAINERS_COUNT)
trainerId = 0; trainerId = TRAINER_NONE;
return gTrainers[trainerId].trainerName; return gTrainers[trainerId].trainerName;
} }
@@ -5948,7 +5951,7 @@ static void sub_806F1FC(struct Unknown_806F160_Struct* structPtr)
structPtr->frameImages[i * structPtr->field_0_0 + j].data = &structPtr->byteArrays[i][j * 0x800]; structPtr->frameImages[i * structPtr->field_0_0 + j].data = &structPtr->byteArrays[i][j * 0x800];
} }
structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_0_0]; structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_0_0];
structPtr->templates[i].anims = gUnknown_082FF70C; structPtr->templates[i].anims = gPlayerMonSpriteAnimsTable;
structPtr->templates[i].paletteTag = i; structPtr->templates[i].paletteTag = i;
} }
} }
+60 -60
View File
@@ -58,8 +58,8 @@ struct RecordedBattleSave
u8 field_4FC; u8 field_4FC;
u8 field_4FD; u8 field_4FD;
u8 field_4FE; u8 field_4FE;
u8 battleStyle : 1; u8 battleStyle:1;
u8 textSpeed : 3; u8 textSpeed:3;
u32 AI_scripts; u32 AI_scripts;
u8 field_504[8]; u8 field_504[8];
u8 field_50C; u8 field_50C;
@@ -79,19 +79,19 @@ EWRAM_DATA static u16 sUnknown_0203C79C[4] = {0};
EWRAM_DATA static u16 sUnknown_0203C7A4[4] = {0}; EWRAM_DATA static u16 sUnknown_0203C7A4[4] = {0};
EWRAM_DATA static u8 sUnknown_0203C7AC = 0; EWRAM_DATA static u8 sUnknown_0203C7AC = 0;
EWRAM_DATA static u8 sUnknown_0203C7AD = 0; EWRAM_DATA static u8 sUnknown_0203C7AD = 0;
EWRAM_DATA static u8 sUnknown_0203C7AE = 0; EWRAM_DATA static u8 sFrontierFacility = 0;
EWRAM_DATA static u8 sUnknown_0203C7AF = 0; EWRAM_DATA static u8 sUnknown_0203C7AF = 0;
EWRAM_DATA static MainCallback sCallback2_AfterRecordedBattle = NULL; EWRAM_DATA static MainCallback sCallback2_AfterRecordedBattle = NULL;
EWRAM_DATA u8 gUnknown_0203C7B4 = 0; EWRAM_DATA u8 gUnknown_0203C7B4 = 0;
EWRAM_DATA static u8 sUnknown_0203C7B5 = 0; EWRAM_DATA static u8 sUnknown_0203C7B5 = 0;
EWRAM_DATA static u8 sRecordedBattle_BattleStyle = 0; EWRAM_DATA static u8 sBattleStyle = 0;
EWRAM_DATA static u8 sRecordedBattle_TextSpeed = 0; EWRAM_DATA static u8 sTextSpeed = 0;
EWRAM_DATA static u32 sRecordedBattle_BattleFlags = 0; EWRAM_DATA static u32 sBattleFlags = 0;
EWRAM_DATA static u32 sRecordedBattle_AI_Scripts = 0; EWRAM_DATA static u32 sAI_Scripts = 0;
EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0};
EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0}; EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0};
EWRAM_DATA static u16 sRecordedBattle_PlayerMonMoves[2][4] = {0}; EWRAM_DATA static u16 sPlayerMonMoves[2][4] = {0};
EWRAM_DATA static struct PlayerInfo sRecordedBattle_Players[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA static u8 sUnknown_0203CCD0 = 0; EWRAM_DATA static u8 sUnknown_0203CCD0 = 0;
EWRAM_DATA static u8 sUnknown_0203CCD1[8] = {0}; EWRAM_DATA static u8 sUnknown_0203CCD1[8] = {0};
EWRAM_DATA static u8 sUnknown_0203CCD9 = 0; EWRAM_DATA static u8 sUnknown_0203CCD9 = 0;
@@ -126,8 +126,8 @@ void sub_8184DA4(u8 arg0)
{ {
sBattleRecords[i][j] |= 0xFF; sBattleRecords[i][j] |= 0xFF;
} }
sRecordedBattle_BattleFlags = gBattleTypeFlags; sBattleFlags = gBattleTypeFlags;
sRecordedBattle_AI_Scripts = gBattleResources->ai->aiFlags; sAI_Scripts = gBattleResources->ai->aiFlags;
} }
} }
} }
@@ -139,7 +139,7 @@ void sub_8184E58(void)
if (sUnknown_0203C7AC == 1) if (sUnknown_0203C7AC == 1)
{ {
gRecordedBattleRngSeed = gRngValue; gRecordedBattleRngSeed = gRngValue;
sUnknown_0203C7AE = VarGet(VAR_FRONTIER_FACILITY); sFrontierFacility = VarGet(VAR_FRONTIER_FACILITY);
sUnknown_0203C7AF = sub_81A513C(); sUnknown_0203C7AF = sub_81A513C();
} }
else if (sUnknown_0203C7AC == 2) else if (sUnknown_0203C7AC == 2)
@@ -157,37 +157,37 @@ void sub_8184E58(void)
for (i = 0; i < MAX_BATTLERS_COUNT; i++) for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{ {
sRecordedBattle_Players[i].trainerId = gLinkPlayers[i].trainerId; sPlayers[i].trainerId = gLinkPlayers[i].trainerId;
sRecordedBattle_Players[i].gender = gLinkPlayers[i].gender; sPlayers[i].gender = gLinkPlayers[i].gender;
sRecordedBattle_Players[i].battlerId = gLinkPlayers[i].lp_field_18; sPlayers[i].battlerId = gLinkPlayers[i].lp_field_18;
sRecordedBattle_Players[i].language = gLinkPlayers[i].language; sPlayers[i].language = gLinkPlayers[i].language;
if (i < linkPlayersCount) if (i < linkPlayersCount)
{ {
StringCopy(text, gLinkPlayers[i].name); StringCopy(text, gLinkPlayers[i].name);
StripExtCtrlCodes(text); StripExtCtrlCodes(text);
StringCopy(sRecordedBattle_Players[i].name, text); StringCopy(sPlayers[i].name, text);
} }
else else
{ {
for (j = 0; j < PLAYER_NAME_LENGTH; j++) for (j = 0; j < PLAYER_NAME_LENGTH; j++)
sRecordedBattle_Players[i].name[j] = gLinkPlayers[i].name[j]; sPlayers[i].name[j] = gLinkPlayers[i].name[j];
} }
} }
} }
else else
{ {
sRecordedBattle_Players[0].trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) sPlayers[0].trainerId = (gSaveBlock2Ptr->playerTrainerId[0])
| (gSaveBlock2Ptr->playerTrainerId[1] << 8) | (gSaveBlock2Ptr->playerTrainerId[1] << 8)
| (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[2] << 16)
| (gSaveBlock2Ptr->playerTrainerId[3] << 24); | (gSaveBlock2Ptr->playerTrainerId[3] << 24);
sRecordedBattle_Players[0].gender = gSaveBlock2Ptr->playerGender; sPlayers[0].gender = gSaveBlock2Ptr->playerGender;
sRecordedBattle_Players[0].battlerId = 0; sPlayers[0].battlerId = 0;
sRecordedBattle_Players[0].language = gGameLanguage; sPlayers[0].language = gGameLanguage;
for (i = 0; i < PLAYER_NAME_LENGTH; i++) for (i = 0; i < PLAYER_NAME_LENGTH; i++)
sRecordedBattle_Players[0].name[i] = gSaveBlock2Ptr->playerName[i]; sPlayers[0].name[i] = gSaveBlock2Ptr->playerName[i];
} }
} }
@@ -214,7 +214,7 @@ void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
u8 RecordedBattle_GetBattlerAction(u8 battlerId) u8 RecordedBattle_GetBattlerAction(u8 battlerId)
{ {
// trying to read past array or invalid action byte, battle is over // Trying to read past array or invalid action byte, battle is over.
if (sRecordedBytesNo[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == 0xFF) if (sRecordedBytesNo[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == 0xFF)
{ {
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah
@@ -345,37 +345,37 @@ u32 MoveRecordedBattleToSaveData(void)
{ {
for (j = 0; j < PLAYER_NAME_LENGTH; j++) for (j = 0; j < PLAYER_NAME_LENGTH; j++)
{ {
battleSave->playersName[i][j] = sRecordedBattle_Players[i].name[j]; battleSave->playersName[i][j] = sPlayers[i].name[j];
} }
battleSave->playersGender[i] = sRecordedBattle_Players[i].gender; battleSave->playersGender[i] = sPlayers[i].gender;
battleSave->playersLanguage[i] = sRecordedBattle_Players[i].language; battleSave->playersLanguage[i] = sPlayers[i].language;
battleSave->playersBattlers[i] = sRecordedBattle_Players[i].battlerId; battleSave->playersBattlers[i] = sPlayers[i].battlerId;
battleSave->playersTrainerId[i] = sRecordedBattle_Players[i].trainerId; battleSave->playersTrainerId[i] = sPlayers[i].trainerId;
} }
battleSave->rngSeed = gRecordedBattleRngSeed; battleSave->rngSeed = gRecordedBattleRngSeed;
if (sRecordedBattle_BattleFlags & BATTLE_TYPE_LINK) if (sBattleFlags & BATTLE_TYPE_LINK)
{ {
battleSave->battleFlags = (sRecordedBattle_BattleFlags & ~(BATTLE_TYPE_LINK | BATTLE_TYPE_20)); battleSave->battleFlags = (sBattleFlags & ~(BATTLE_TYPE_LINK | BATTLE_TYPE_20));
battleSave->battleFlags |= BATTLE_TYPE_x2000000; battleSave->battleFlags |= BATTLE_TYPE_x2000000;
if (sRecordedBattle_BattleFlags & BATTLE_TYPE_WILD) if (sBattleFlags & BATTLE_TYPE_WILD)
{ {
battleSave->battleFlags |= BATTLE_TYPE_x80000000; battleSave->battleFlags |= BATTLE_TYPE_x80000000;
} }
else if (sRecordedBattle_BattleFlags & BATTLE_TYPE_MULTI) else if (sBattleFlags & BATTLE_TYPE_MULTI)
{ {
switch (sRecordedBattle_Players[0].battlerId) switch (sPlayers[0].battlerId)
{ {
case 0: case 0:
case 2: case 2:
if (!(sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1)) if (!(sPlayers[gUnknown_0203C7B4].battlerId & 1))
battleSave->battleFlags |= BATTLE_TYPE_x80000000; battleSave->battleFlags |= BATTLE_TYPE_x80000000;
break; break;
case 1: case 1:
case 3: case 3:
if ((sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1)) if ((sPlayers[gUnknown_0203C7B4].battlerId & 1))
battleSave->battleFlags |= BATTLE_TYPE_x80000000; battleSave->battleFlags |= BATTLE_TYPE_x80000000;
break; break;
} }
@@ -383,19 +383,19 @@ u32 MoveRecordedBattleToSaveData(void)
} }
else else
{ {
battleSave->battleFlags = sRecordedBattle_BattleFlags; battleSave->battleFlags = sBattleFlags;
} }
battleSave->opponentA = gTrainerBattleOpponent_A; battleSave->opponentA = gTrainerBattleOpponent_A;
battleSave->opponentB = gTrainerBattleOpponent_B; battleSave->opponentB = gTrainerBattleOpponent_B;
battleSave->partnerId = gPartnerTrainerId; battleSave->partnerId = gPartnerTrainerId;
battleSave->field_4FA = gUnknown_0203C7B4; battleSave->field_4FA = gUnknown_0203C7B4;
battleSave->field_4FC = gSaveBlock2Ptr->frontier.field_CA9_b; battleSave->field_4FC = gSaveBlock2Ptr->field_CA9_b;
battleSave->field_4FD = sUnknown_0203C7AE; battleSave->field_4FD = sFrontierFacility;
battleSave->field_4FE = sUnknown_0203C7AF; battleSave->field_4FE = sUnknown_0203C7AF;
battleSave->battleStyle = gSaveBlock2Ptr->optionsBattleStyle; battleSave->battleStyle = gSaveBlock2Ptr->optionsBattleStyle;
battleSave->textSpeed = gSaveBlock2Ptr->optionsTextSpeed; battleSave->textSpeed = gSaveBlock2Ptr->optionsTextSpeed;
battleSave->AI_scripts = sRecordedBattle_AI_Scripts; battleSave->AI_scripts = sAI_Scripts;
/* Can't match it without proper knowledge of the Saveblock 2. /* Can't match it without proper knowledge of the Saveblock 2.
if (gTrainerBattleOpponent_A >= 300 && gTrainerBattleOpponent_A <= 399) if (gTrainerBattleOpponent_A >= 300 && gTrainerBattleOpponent_A <= 399)
@@ -525,7 +525,7 @@ _0818535E:\n\
lsls r3, 3\n\ lsls r3, 3\n\
adds r3, r7, r3\n\ adds r3, r7, r3\n\
str r3, [sp, 0x8]\n\ str r3, [sp, 0x8]\n\
ldr r5, =sRecordedBattle_Players\n\ ldr r5, =sPlayers\n\
mov r8, r6\n\ mov r8, r6\n\
mov r12, r6\n\ mov r12, r6\n\
movs r4, 0x96\n\ movs r4, 0x96\n\
@@ -536,7 +536,7 @@ _0818535E:\n\
adds r4, r7, r0\n\ adds r4, r7, r0\n\
_081853AC:\n\ _081853AC:\n\
lsls r1, r6, 3\n\ lsls r1, r6, 3\n\
ldr r0, =sRecordedBattle_Players\n\ ldr r0, =sPlayers\n\
adds r0, 0x4\n\ adds r0, 0x4\n\
mov r3, r8\n\ mov r3, r8\n\
adds r2, r3, r0\n\ adds r2, r3, r0\n\
@@ -578,7 +578,7 @@ _081853BA:\n\
ldr r5, =gRecordedBattleRngSeed\n\ ldr r5, =gRecordedBattleRngSeed\n\
ldr r0, [r5]\n\ ldr r0, [r5]\n\
str r0, [r1]\n\ str r0, [r1]\n\
ldr r0, =sRecordedBattle_BattleFlags\n\ ldr r0, =sBattleFlags\n\
ldr r2, [r0]\n\ ldr r2, [r0]\n\
movs r0, 0x2\n\ movs r0, 0x2\n\
ands r0, r2\n\ ands r0, r2\n\
@@ -608,7 +608,7 @@ _08185454:\n\
ands r2, r0\n\ ands r2, r0\n\
cmp r2, 0\n\ cmp r2, 0\n\
beq _081854E2\n\ beq _081854E2\n\
ldr r2, =sRecordedBattle_Players\n\ ldr r2, =sPlayers\n\
ldrh r0, [r2, 0xE]\n\ ldrh r0, [r2, 0xE]\n\
cmp r0, 0x1\n\ cmp r0, 0x1\n\
beq _081854A8\n\ beq _081854A8\n\
@@ -630,7 +630,7 @@ _0818547E:\n\
lsls r0, r1, 2\n\ lsls r0, r1, 2\n\
adds r0, r1\n\ adds r0, r1\n\
lsls r0, 2\n\ lsls r0, 2\n\
ldr r4, =sRecordedBattle_Players\n\ ldr r4, =sPlayers\n\
adds r0, r4\n\ adds r0, r4\n\
ldrh r1, [r0, 0xE]\n\ ldrh r1, [r0, 0xE]\n\
movs r0, 0x1\n\ movs r0, 0x1\n\
@@ -647,7 +647,7 @@ _081854A8:\n\
lsls r0, r1, 2\n\ lsls r0, r1, 2\n\
adds r0, r1\n\ adds r0, r1\n\
lsls r0, 2\n\ lsls r0, 2\n\
ldr r1, =sRecordedBattle_Players\n\ ldr r1, =sPlayers\n\
adds r0, r1\n\ adds r0, r1\n\
ldrh r1, [r0, 0xE]\n\ ldrh r1, [r0, 0xE]\n\
movs r0, 0x1\n\ movs r0, 0x1\n\
@@ -700,7 +700,7 @@ _081854E2:\n\
ldr r5, =0x000004fc\n\ ldr r5, =0x000004fc\n\
adds r1, r7, r5\n\ adds r1, r7, r5\n\
strb r0, [r1]\n\ strb r0, [r1]\n\
ldr r0, =sUnknown_0203C7AE\n\ ldr r0, =sFrontierFacility\n\
ldrb r1, [r0]\n\ ldrb r1, [r0]\n\
adds r2, 0x3\n\ adds r2, 0x3\n\
adds r0, r7, r2\n\ adds r0, r7, r2\n\
@@ -735,7 +735,7 @@ _081854E2:\n\
movs r2, 0xA0\n\ movs r2, 0xA0\n\
lsls r2, 3\n\ lsls r2, 3\n\
adds r1, r7, r2\n\ adds r1, r7, r2\n\
ldr r3, =sRecordedBattle_AI_Scripts\n\ ldr r3, =sAI_Scripts\n\
ldr r0, [r3]\n\ ldr r0, [r3]\n\
str r0, [r1]\n\ str r0, [r1]\n\
ldr r4, =0xfffffed4\n\ ldr r4, =0xfffffed4\n\
@@ -1354,11 +1354,11 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
gPartnerTrainerId = src->partnerId; gPartnerTrainerId = src->partnerId;
gUnknown_0203C7B4 = src->field_4FA; gUnknown_0203C7B4 = src->field_4FA;
sUnknown_0203C7AD = gSaveBlock2Ptr->frontier.chosenLvl; sUnknown_0203C7AD = gSaveBlock2Ptr->frontier.chosenLvl;
sUnknown_0203C7AE = src->field_4FD; sFrontierFacility = src->field_4FD;
sUnknown_0203C7AF = src->field_4FE; sUnknown_0203C7AF = src->field_4FE;
sRecordedBattle_BattleStyle = src->battleStyle; sBattleStyle = src->battleStyle;
sRecordedBattle_TextSpeed = src->textSpeed; sTextSpeed = src->textSpeed;
sRecordedBattle_AI_Scripts = src->AI_scripts; sAI_Scripts = src->AI_scripts;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
@@ -1415,9 +1415,9 @@ static void CB2_RecordedBattle(void)
RunTasks(); RunTasks();
} }
u8 sub_8185EA0(void) u8 GetRecordedBattleFrontierFacility(void)
{ {
return sUnknown_0203C7AE; return sFrontierFacility;
} }
u8 sub_8185EAC(void) u8 sub_8185EAC(void)
@@ -1480,12 +1480,12 @@ u8 sub_8185FAC(void)
u8 GetBattleStyleInRecordedBattle(void) u8 GetBattleStyleInRecordedBattle(void)
{ {
return sRecordedBattle_BattleStyle; return sBattleStyle;
} }
u8 GetTextSpeedInRecordedBattle(void) u8 GetTextSpeedInRecordedBattle(void)
{ {
return sRecordedBattle_TextSpeed; return sTextSpeed;
} }
void RecordedBattle_CopyBattlerMoves(void) void RecordedBattle_CopyBattlerMoves(void)
@@ -1501,7 +1501,7 @@ void RecordedBattle_CopyBattlerMoves(void)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
sRecordedBattle_PlayerMonMoves[gActiveBattler / 2][i] = gBattleMons[gActiveBattler].moves[i]; sPlayerMonMoves[gActiveBattler / 2][i] = gBattleMons[gActiveBattler].moves[i];
} }
} }
@@ -1522,7 +1522,7 @@ void sub_818603C(u8 arg0)
{ {
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
{ {
if (gBattleMons[battlerId].moves[j] != sRecordedBattle_PlayerMonMoves[battlerId / 2][j]) if (gBattleMons[battlerId].moves[j] != sPlayerMonMoves[battlerId / 2][j])
break; break;
} }
if (j != 4) // player's mon's move has been changed if (j != 4) // player's mon's move has been changed
@@ -1532,7 +1532,7 @@ void sub_818603C(u8 arg0)
{ {
for (k = 0; k < 4; k++) for (k = 0; k < 4; k++)
{ {
if (gBattleMons[battlerId].moves[j] == sRecordedBattle_PlayerMonMoves[battlerId / 2][k]) if (gBattleMons[battlerId].moves[j] == sPlayerMonMoves[battlerId / 2][k])
{ {
RecordedBattle_SetBattlerAction(battlerId, k); RecordedBattle_SetBattlerAction(battlerId, k);
break; break;
@@ -1612,7 +1612,7 @@ void sub_818603C(u8 arg0)
u32 GetAiScriptsInRecordedBattle(void) u32 GetAiScriptsInRecordedBattle(void)
{ {
return sRecordedBattle_AI_Scripts; return sAI_Scripts;
} }
void sub_8186444(void) void sub_8186444(void)
+26 -26
View File
@@ -11,6 +11,7 @@
#include "link.h" #include "link.h"
#include "sprite.h" #include "sprite.h"
#include "constants/species.h" #include "constants/species.h"
#include "constants/trainers.h"
#include "battle_interface.h" #include "battle_interface.h"
#include "battle_anim.h" #include "battle_anim.h"
#include "data2.h" #include "data2.h"
@@ -26,8 +27,7 @@ extern u16 gBattle_BG3_Y;
extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[]; extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[];
extern void sub_806A068(u16 species, u8 battlerPosition); extern void SetMultiuseSpriteTemplateToTrainerBack(u16 backPicId, u8 battlerPosition);
extern void sub_806A12C(u16 backPicId, u8 battlerPosition);
// this file's functions // this file's functions
static void CB2_ReshowBattleScreenAfterMenu(void); static void CB2_ReshowBattleScreenAfterMenu(void);
@@ -58,7 +58,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
{ {
case 0: case 0:
ScanlineEffect_Clear(); ScanlineEffect_Clear();
sub_8035658(); BattleInitBgsAndWindows();
SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0); SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0); SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
ShowBg(0); ShowBg(0);
@@ -144,20 +144,20 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
break; break;
case 19: case 19:
{ {
u8 opponentBank; u8 opponentBattler;
u16 species; u16 species;
LoadAndCreateEnemyShadowSprites(); LoadAndCreateEnemyShadowSprites();
opponentBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); opponentBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBank]], MON_DATA_SPECIES); species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBattler]], MON_DATA_SPECIES);
SetBattlerShadowSpriteCallback(opponentBank, species); SetBattlerShadowSpriteCallback(opponentBattler, species);
if (IsDoubleBattle()) if (IsDoubleBattle())
{ {
opponentBank = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); opponentBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBank]], MON_DATA_SPECIES); species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBattler]], MON_DATA_SPECIES);
SetBattlerShadowSpriteCallback(opponentBank, species); SetBattlerShadowSpriteCallback(opponentBattler, species);
} }
ActionSelectionCreateCursorAt(gActionSelectionCursor[gBattlerInMenuId], 0); ActionSelectionCreateCursorAt(gActionSelectionCursor[gBattlerInMenuId], 0);
@@ -204,10 +204,10 @@ static bool8 LoadBattlerSpriteGfx(u8 battler)
else else
BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE); BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE);
} }
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == 0) else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, battler); DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, battler);
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == 0) else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
DecompressTrainerBackPic(BACK_PIC_WALLY, battler); DecompressTrainerBackPic(TRAINER_BACK_PIC_WALLY, battler);
else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
else else
@@ -234,8 +234,8 @@ static void CreateBattlerSprite(u8 battler)
if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0) if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
return; return;
sub_806A068(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
gBattlerSpriteIds[battler] = CreateSprite(&gUnknown_0202499C, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler)); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler; gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -245,21 +245,21 @@ static void CreateBattlerSprite(u8 battler)
if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies == SPECIES_CASTFORM) if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies == SPECIES_CASTFORM)
gSprites[gBattlerSpriteIds[battler]].anims = gMonAnimationsSpriteAnimsPtrTable[SPECIES_CASTFORM]; gSprites[gBattlerSpriteIds[battler]].anims = gMonAnimationsSpriteAnimsPtrTable[SPECIES_CASTFORM];
} }
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == 0) else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT)
{ {
sub_806A12C(gSaveBlock2Ptr->playerGender, GetBattlerPosition(B_POSITION_PLAYER_LEFT)); SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(B_POSITION_PLAYER_LEFT));
gBattlerSpriteIds[battler] = CreateSprite(&gUnknown_0202499C, 0x50, gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80, (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80,
sub_80A82E4(0)); sub_80A82E4(0));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler; gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
} }
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == 0) else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == B_POSITION_PLAYER_LEFT)
{ {
sub_806A12C(BACK_PIC_WALLY, GetBattlerPosition(0)); SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(0));
gBattlerSpriteIds[battler] = CreateSprite(&gUnknown_0202499C, 0x50, gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
(8 - gTrainerBackPicCoords[BACK_PIC_WALLY].coords) * 4 + 80, (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].coords) * 4 + 80,
sub_80A82E4(0)); sub_80A82E4(0));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
@@ -270,8 +270,8 @@ static void CreateBattlerSprite(u8 battler)
if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0) if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
return; return;
sub_806A068(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
gBattlerSpriteIds[battler] = CreateSprite(&gUnknown_0202499C, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler)); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler; gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler; gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -292,9 +292,9 @@ static void CreateHealthboxSprite(u8 battler)
{ {
u8 healthboxSpriteId; u8 healthboxSpriteId;
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == 0) if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT)
healthboxSpriteId = CreateSafariPlayerHealthboxSprites(); healthboxSpriteId = CreateSafariPlayerHealthboxSprites();
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == 0) else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == B_POSITION_PLAYER_LEFT)
return; return;
else else
healthboxSpriteId = CreateBattlerHealthboxSprites(battler); healthboxSpriteId = CreateBattlerHealthboxSprites(battler);
+5 -5
View File
@@ -42,7 +42,7 @@ extern void PlayerGetDestCoords(s16* x, s16* y);
EWRAM_DATA u8 gNumSafariBalls = 0; EWRAM_DATA u8 gNumSafariBalls = 0;
EWRAM_DATA static u16 sSafariZoneStepCounter = 0; EWRAM_DATA static u16 sSafariZoneStepCounter = 0;
EWRAM_DATA static u8 sSafariZoneCaughtMons = 0; EWRAM_DATA static u8 sSafariZoneCaughtMons = 0;
EWRAM_DATA static u8 sSafariZoneFleedMons = 0; EWRAM_DATA static u8 sSafariZonePkblkUses = 0;
EWRAM_DATA static struct PokeblockFeeder sPokeblockFeeders[NUM_POKEBLOCK_FEEDERS] = {0}; EWRAM_DATA static struct PokeblockFeeder sPokeblockFeeders[NUM_POKEBLOCK_FEEDERS] = {0};
static void ClearAllPokeblockFeeders(void); static void ClearAllPokeblockFeeders(void);
@@ -71,12 +71,12 @@ void EnterSafariMode(void)
gNumSafariBalls = 30; gNumSafariBalls = 30;
sSafariZoneStepCounter = 500; sSafariZoneStepCounter = 500;
sSafariZoneCaughtMons = 0; sSafariZoneCaughtMons = 0;
sSafariZoneFleedMons = 0; sSafariZonePkblkUses = 0;
} }
void ExitSafariMode(void) void ExitSafariMode(void)
{ {
sub_80EE44C(sSafariZoneCaughtMons, sSafariZoneFleedMons); sub_80EE44C(sSafariZoneCaughtMons, sSafariZonePkblkUses);
ResetSafariZoneFlag(); ResetSafariZoneFlag();
ClearAllPokeblockFeeders(); ClearAllPokeblockFeeders();
gNumSafariBalls = 0; gNumSafariBalls = 0;
@@ -107,7 +107,7 @@ void SafariZoneRetirePrompt(void)
void CB2_EndSafariBattle(void) void CB2_EndSafariBattle(void)
{ {
sSafariZoneFleedMons += gBattleResults.field_1F; sSafariZonePkblkUses += gBattleResults.pokeblockThrows;
if (gBattleOutcome == B_OUTCOME_CAUGHT) if (gBattleOutcome == B_OUTCOME_CAUGHT)
sSafariZoneCaughtMons++; sSafariZoneCaughtMons++;
if (gNumSafariBalls != 0) if (gNumSafariBalls != 0)
@@ -172,7 +172,7 @@ void GetPokeblockFeederWithinRange(void)
{ {
if (gSaveBlock1Ptr->location.mapNum == sPokeblockFeeders[i].mapNum) if (gSaveBlock1Ptr->location.mapNum == sPokeblockFeeders[i].mapNum)
{ {
//Get absolute value of x and y distance from Pokeblock feeder on current map // Get absolute value of x and y distance from Pokeblock feeder on current map.
x -= sPokeblockFeeders[i].x; x -= sPokeblockFeeders[i].x;
y -= sPokeblockFeeders[i].y; y -= sPokeblockFeeders[i].y;
if (x < 0) if (x < 0)
+1 -1
View File
@@ -1208,7 +1208,7 @@ static bool32 sub_80A03E4(u8 *par1)
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sUnknown_085105A8, ARRAY_COUNT(sUnknown_085105A8)); InitBgsFromTemplates(0, sUnknown_085105A8, ARRAY_COUNT(sUnknown_085105A8));
InitWindows(sUnknown_085105AC); InitWindows(sUnknown_085105AC);
box_border_load_tiles_and_pal(0, 8, 224); LoadUserWindowBorderGfx_(0, 8, 224);
sub_81978B0(240); sub_81978B0(240);
break; break;
case 3: case 3:
+2 -3
View File
@@ -9,6 +9,7 @@
#include "main.h" #include "main.h"
#include "window.h" #include "window.h"
#include "text.h" #include "text.h"
#include "text_window.h"
#include "decompress.h" #include "decompress.h"
#include "menu.h" #include "menu.h"
#include "sound.h" #include "sound.h"
@@ -18,6 +19,7 @@
#include "data2.h" #include "data2.h"
#include "international_string_util.h" #include "international_string_util.h"
#include "trig.h" #include "trig.h"
#include "scanline_effect.h"
#define STARTER_MON_COUNT 3 #define STARTER_MON_COUNT 3
@@ -46,13 +48,10 @@ extern const u8 gStarterChoose_LabelCoords[][2];
extern const u8 gUnknown_085B1E0C[]; extern const u8 gUnknown_085B1E0C[];
extern const u8 gUnknown_085B1E28[][2]; extern const u8 gUnknown_085B1E28[][2];
extern void LoadUserWindowBorderGfx(u8, u16, u8);
extern void ScanlineEffect_Stop(void);
extern void clear_scheduled_bg_copies_to_vram(void); extern void clear_scheduled_bg_copies_to_vram(void);
extern void dp13_810BB8C(void); extern void dp13_810BB8C(void);
extern void do_scheduled_bg_tilemap_copies_to_vram(void); extern void do_scheduled_bg_tilemap_copies_to_vram(void);
extern u16 sub_818D820(u16); extern u16 sub_818D820(u16);
extern const u16 *GetOverworldTextboxPalettePtr(void);
extern u8 sub_818D3E4(u16 species, u32 trainerId, u32 personality, u8 flags, s16 x, s16 y, u8, u16); extern u8 sub_818D3E4(u16 species, u32 trainerId, u32 personality, u8 flags, s16 x, s16 y, u8, u16);
// this file's functions // this file's functions
+2 -2
View File
@@ -91,13 +91,13 @@ const struct TilesPal *GetWindowFrameTilesPal(u8 id)
return &sWindowFrames[id]; return &sWindowFrames[id];
} }
void copy_textbox_border_tile_patterns_to_vram(u8 windowId, u16 destOffset, u8 palOffset) void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset)
{ {
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_PRIORITY), gMessageBox_Gfx, 0x1C0, destOffset); LoadBgTiles(GetWindowAttribute(windowId, WINDOW_PRIORITY), gMessageBox_Gfx, 0x1C0, destOffset);
LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, 0x20); LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, 0x20);
} }
void box_border_load_tiles_and_pal(u8 windowId, u16 destOffset, u8 palOffset) void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset)
{ {
LoadUserWindowBorderGfx(windowId, destOffset, palOffset); LoadUserWindowBorderGfx(windowId, destOffset, palOffset);
} }
+2 -19
View File
@@ -174,9 +174,7 @@ gBattle_WIN1H: @ 2022E28
gBattle_WIN1V: @ 2022E2A gBattle_WIN1V: @ 2022E2A
.space 0x2 .space 0x2
.include "src/battle_message.o"
.include "src/battle_main.o" .include "src/battle_main.o"
.include "src/pokemon.o" .include "src/pokemon.o"
.include "src/random.o" .include "src/random.o"
.include "src/daycare.o" .include "src/daycare.o"
@@ -288,9 +286,6 @@ gUnknown_02038BC6: @ 2038BC6
.include "src/field_effect.o" .include "src/field_effect.o"
.include "src/scanline_effect.o" .include "src/scanline_effect.o"
.include "src/option_menu.o" .include "src/option_menu.o"
.align 2
.include "src/pokedex.o" .include "src/pokedex.o"
gTrainerCards: @ 2039B58 gTrainerCards: @ 2039B58
@@ -681,12 +676,7 @@ gUnknown_0203AB98: @ 203AB98
.include "src/coins.o" .include "src/coins.o"
.include "src/battle_transition.o" .include "src/battle_transition.o"
.include "src/battle_message.o"
gBattlerAbilities: @ 203ABA4
.space 0x4
gStringInfo: @ 203ABA8
.space 0x4
gUnknown_0203ABAC: @ 203ABAC gUnknown_0203ABAC: @ 203ABAC
.space 0x4 .space 0x4
@@ -737,10 +727,6 @@ gUnknown_0203BC8C: @ 203BC8C
.include "src/player_pc.o" .include "src/player_pc.o"
.include "src/intro.o" .include "src/intro.o"
.include "src/field_region_map.o" .include "src/field_region_map.o"
gUnknown_0203BCD4: @ 203BCD4
.space 0x4
.include "src/hall_of_fame.o" .include "src/hall_of_fame.o"
.include "src/credits.o" .include "src/credits.o"
.include "src/lottery_corner.o" .include "src/lottery_corner.o"
@@ -748,10 +734,7 @@ gUnknown_0203BCD4: @ 203BCD4
.include "src/berry_tag_screen.o" .include "src/berry_tag_screen.o"
.include "src/mystery_event_menu.o" .include "src/mystery_event_menu.o"
.include "src/save_failed_screen.o" .include "src/save_failed_screen.o"
.include "src/braille_puzzles.o"
gBraillePuzzleCallbackFlag: @ 203BD14
.space 0x4
.include "src/pokeblock_feed.o" .include "src/pokeblock_feed.o"
.include "src/intro_credits_graphics.o" .include "src/intro_credits_graphics.o"
.include "src/recorded_battle.o" .include "src/recorded_battle.o"