mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-25 19:24:16 +01:00
Start misc battle documentation
This commit is contained in:
parent
e26f9d10d7
commit
31b501e7eb
1
.gitignore
vendored
1
.gitignore
vendored
@ -34,3 +34,4 @@ porymap.project.cfg
|
||||
*.a
|
||||
.fuse_hidden*
|
||||
*.sna
|
||||
*.diff
|
||||
|
@ -34,20 +34,20 @@
|
||||
.Lcreatetask_\@_2:
|
||||
.endm
|
||||
|
||||
.macro delay param0:req
|
||||
.macro delay frames:req
|
||||
.byte 0x4
|
||||
.byte \param0
|
||||
.byte \frames
|
||||
.endm
|
||||
|
||||
.macro waitforvisualfinish
|
||||
.byte 0x5
|
||||
.endm
|
||||
|
||||
.macro hang1
|
||||
.macro nop
|
||||
.byte 0x6
|
||||
.endm
|
||||
|
||||
.macro hang2
|
||||
.macro nop2
|
||||
.byte 0x7
|
||||
.endm
|
||||
|
||||
@ -79,30 +79,30 @@
|
||||
.byte 0xd
|
||||
.endm
|
||||
|
||||
.macro call param0:req
|
||||
.macro call ptr:req
|
||||
.byte 0xe
|
||||
.4byte \param0
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
.macro return
|
||||
.byte 0xf
|
||||
.endm
|
||||
|
||||
.macro setarg param0:req, param1:req
|
||||
.macro setarg argId:req, value:req
|
||||
.byte 0x10
|
||||
.byte \param0
|
||||
.2byte \param1
|
||||
.byte \argId
|
||||
.2byte \value
|
||||
.endm
|
||||
|
||||
.macro choosetwoturnanim param0:req, param1:req
|
||||
.macro choosetwoturnanim ptr1:req, ptr2:req
|
||||
.byte 0x11
|
||||
.4byte \param0
|
||||
.4byte \param1
|
||||
.4byte \ptr1
|
||||
.4byte \ptr2
|
||||
.endm
|
||||
|
||||
.macro jumpifmoveturn param0:req, ptr:req
|
||||
.macro jumpifmoveturn value:req, ptr:req
|
||||
.byte 0x12
|
||||
.byte \param0
|
||||
.byte \value
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
@ -144,13 +144,13 @@
|
||||
.byte \pan
|
||||
.endm
|
||||
|
||||
.macro panse_1B se:req, param1:req, param2:req, param3:req, param4:req
|
||||
.macro panse se:req, currentPan:req, targetPan:req, incrementPan:req, delay:req
|
||||
.byte 0x1b
|
||||
.2byte \se
|
||||
.byte \param1
|
||||
.byte \param2
|
||||
.byte \param3
|
||||
.byte \param4
|
||||
.byte \currentPan
|
||||
.byte \targetPan
|
||||
.byte \incrementPan
|
||||
.byte \delay
|
||||
.endm
|
||||
|
||||
.macro loopsewithpan se:req, pan:req, wait:req, times:req
|
||||
@ -168,9 +168,9 @@
|
||||
.byte \wait
|
||||
.endm
|
||||
|
||||
.macro setbldcnt param0:req
|
||||
.macro setbldcnt bldcnt:req
|
||||
.byte 0x1e
|
||||
.2byte \param0
|
||||
.2byte \bldcnt
|
||||
.endm
|
||||
|
||||
.macro createsoundtask addr:req, argv:vararg
|
||||
@ -186,10 +186,10 @@
|
||||
.byte 0x20
|
||||
.endm
|
||||
|
||||
.macro jumpargeq param0:req, param1:req, ptr:req
|
||||
.macro jumpargeq argId:req, value:req, ptr:req
|
||||
.byte 0x21
|
||||
.byte \param0
|
||||
.2byte \param1
|
||||
.byte \argId
|
||||
.2byte \value
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
@ -208,29 +208,29 @@
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
.macro fadetobgfromset param0:req, param1:req, param2:req
|
||||
.macro fadetobgfromset bgOpponent:req, bgPlayer:req, bgContest:req
|
||||
.byte 0x25
|
||||
.byte \param0
|
||||
.byte \param1
|
||||
.byte \param2
|
||||
.byte \bgOpponent
|
||||
.byte \bgPlayer
|
||||
.byte \bgContest
|
||||
.endm
|
||||
|
||||
.macro panse_26 se:req, param1:req, param2:req, param3:req, param4:req
|
||||
.macro panse_adjustnone se:req, currentPan:req, targetPan:req, incrementPan:req, delay:req
|
||||
.byte 0x26
|
||||
.2byte \se
|
||||
.byte \param1
|
||||
.byte \param2
|
||||
.byte \param3
|
||||
.byte \param4
|
||||
.byte \currentPan
|
||||
.byte \targetPan
|
||||
.byte \incrementPan
|
||||
.byte \delay
|
||||
.endm
|
||||
|
||||
.macro panse_27 se:req, param1:req, param2:req, param3:req, param4:req
|
||||
.macro panse_adjustall se:req, currentPan:req, targetPan:req, incrementPan:req, delay:req
|
||||
.byte 0x27
|
||||
.2byte \se
|
||||
.byte \param1
|
||||
.byte \param2
|
||||
.byte \param3
|
||||
.byte \param4
|
||||
.byte \currentPan
|
||||
.byte \targetPan
|
||||
.byte \incrementPan
|
||||
.byte \delay
|
||||
.endm
|
||||
|
||||
.macro monbgprio_28 battler:req
|
||||
|
@ -2234,7 +2234,7 @@ Move_ICY_WIND:
|
||||
playsewithpan SE_M_ICY_WIND, 0
|
||||
waitbgfadein
|
||||
waitforvisualfinish
|
||||
panse_1B SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
call IcyWindSwirlingSnowballs
|
||||
delay 5
|
||||
call IcyWindSwirlingSnowballs
|
||||
@ -2551,7 +2551,7 @@ Move_SING:
|
||||
monbg ANIM_DEF_PARTNER
|
||||
createvisualtask AnimTask_MusicNotesRainbowBlend, 2
|
||||
waitforvisualfinish
|
||||
panse_1B SE_M_SING, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_SING, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 7, 0, 12
|
||||
delay 5
|
||||
createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 6, 1, 12
|
||||
@ -3460,7 +3460,7 @@ Move_HEAT_WAVE:
|
||||
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 6, 6, RGB_RED
|
||||
createvisualtask AnimTask_LoadSandstormBackground, 5, TRUE
|
||||
createvisualtask AnimTask_BlendBackground, 6, 6, RGB_RED
|
||||
panse_1B SE_M_HEAT_WAVE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_HEAT_WAVE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
delay 4
|
||||
createvisualtask AnimTask_MoveHeatWaveTargets, 5
|
||||
delay 12
|
||||
@ -4232,7 +4232,7 @@ Move_GRASS_WHISTLE:
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_MusicNotesRainbowBlend, 2
|
||||
waitforvisualfinish
|
||||
panse_1B SE_M_GRASSWHISTLE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_GRASSWHISTLE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 7, 1, 0
|
||||
delay 5
|
||||
createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 6, 1, 0
|
||||
@ -4464,7 +4464,7 @@ Move_WATER_SPORT:
|
||||
delay 44
|
||||
playsewithpan SE_M_SURF, SOUND_PAN_ATTACKER
|
||||
delay 44
|
||||
panse_1B SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
end
|
||||
|
||||
Move_CALM_MIND:
|
||||
@ -5475,7 +5475,7 @@ SolarBeamAbsorbEffect:
|
||||
return
|
||||
SolarBeamUnleash:
|
||||
call SetSolarbeamBg
|
||||
panse_1B SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
createvisualtask AnimTask_CreateSmallSolarbeamOrbs, 5
|
||||
createsprite gSolarbeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0
|
||||
delay 4
|
||||
@ -5527,7 +5527,7 @@ BlizzardContinue:
|
||||
createvisualtask AnimTask_StartSlidingBg, 5, -2304, 0, 1, -1
|
||||
waitbgfadein
|
||||
waitforvisualfinish
|
||||
panse_1B SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
call BlizzardIceCrystals
|
||||
call BlizzardIceCrystals
|
||||
playsewithpan SE_M_BLIZZARD2, SOUND_PAN_TARGET
|
||||
@ -5573,7 +5573,7 @@ Move_POWDER_SNOW:
|
||||
monbg ANIM_DEF_PARTNER
|
||||
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 1, 0, 3, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
panse_1B SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
call PowderSnowSnowballs
|
||||
call PowderSnowSnowballs
|
||||
playsewithpan SE_M_GUST2, SOUND_PAN_TARGET
|
||||
@ -5610,7 +5610,7 @@ Move_HYDRO_PUMP:
|
||||
setalpha 12, 8
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1
|
||||
delay 6
|
||||
panse_1B SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
createvisualtask AnimTask_StartSinAnimTimer, 5, 100
|
||||
call HydroPumpBeams
|
||||
call HydroPumpBeams
|
||||
@ -5655,7 +5655,7 @@ Move_SIGNAL_BEAM:
|
||||
loadspritegfx ANIM_TAG_DUCK
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 25, 1
|
||||
delay 6
|
||||
panse_1B SE_M_BUBBLE_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0
|
||||
panse SE_M_BUBBLE_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0
|
||||
createvisualtask AnimTask_StartSinAnimTimer, 5, 100
|
||||
call SignalBeamOrbs
|
||||
call SignalBeamOrbs
|
||||
@ -6297,7 +6297,7 @@ Move_CRABHAMMER:
|
||||
Move_SURF:
|
||||
createvisualtask AnimTask_CreateSurfWave, 2, FALSE
|
||||
delay 24
|
||||
panse_1B SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
@ -6309,7 +6309,7 @@ Move_FLAMETHROWER:
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1
|
||||
delay 6
|
||||
createvisualtask AnimTask_StartSinAnimTimer, 5, 100
|
||||
panse_1B SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
call FlamethrowerCreateFlames
|
||||
call FlamethrowerCreateFlames
|
||||
call FlamethrowerCreateFlames
|
||||
@ -6722,7 +6722,7 @@ Move_SUNNY_DAY:
|
||||
setalpha 13, 3
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 1, 0, 6, RGB_WHITE
|
||||
waitforvisualfinish
|
||||
panse_26 SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0
|
||||
panse_adjustnone SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0
|
||||
call SunnyDayLightRay
|
||||
call SunnyDayLightRay
|
||||
call SunnyDayLightRay
|
||||
@ -7599,7 +7599,7 @@ Move_MIMIC:
|
||||
setalpha 11, 5
|
||||
monbg_22 ANIM_DEF_PARTNER
|
||||
monbgprio_29
|
||||
panse_1B SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0
|
||||
panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0
|
||||
createvisualtask AnimTask_ShrinkTargetCopy, 5, 128, 24
|
||||
delay 15
|
||||
createsprite gMimicOrbSpriteTemplate, ANIM_TARGET, 2, -12, 24
|
||||
@ -7943,7 +7943,7 @@ Move_PERISH_SONG:
|
||||
createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 15, 0, 240
|
||||
createsprite gPerishSongMusicNote2SpriteTemplate, ANIM_ATTACKER, 4, 15, 0, 0
|
||||
delay 20
|
||||
panse_1B SE_M_PERISH_SONG, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_PERISH_SONG, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
delay 80
|
||||
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 16, RGB_BLACK
|
||||
createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 4, 0
|
||||
@ -8150,7 +8150,7 @@ Move_WISH:
|
||||
loadspritegfx ANIM_TAG_SPARKLE_2
|
||||
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 10, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
panse_27 SE_M_REFLECT, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0
|
||||
panse_adjustall SE_M_REFLECT, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0
|
||||
createsprite gWishStarSpriteTemplate, ANIM_ATTACKER, 40
|
||||
waitforvisualfinish
|
||||
delay 60
|
||||
@ -8591,7 +8591,7 @@ ArmThrustLeft:
|
||||
goto ArmThrustContinue
|
||||
|
||||
Move_MUDDY_WATER:
|
||||
panse_1B SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
createvisualtask AnimTask_CreateSurfWave, 2, TRUE
|
||||
waitforvisualfinish
|
||||
end
|
||||
@ -8689,7 +8689,7 @@ Move_MUD_SHOT:
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1
|
||||
delay 6
|
||||
createvisualtask AnimTask_StartSinAnimTimer, 5, 100
|
||||
panse_1B SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0
|
||||
panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0
|
||||
call MudShotOrbs
|
||||
call MudShotOrbs
|
||||
call MudShotOrbs
|
||||
@ -8717,7 +8717,7 @@ Move_METEOR_MASH:
|
||||
loadspritegfx ANIM_TAG_GOLD_STARS
|
||||
loadspritegfx ANIM_TAG_IMPACT
|
||||
loadspritegfx ANIM_TAG_HANDS_AND_FEET
|
||||
panse_1B SE_M_BARRIER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +3, 0
|
||||
panse SE_M_BARRIER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +3, 0
|
||||
fadetobg BG_COSMIC
|
||||
waitbgfadein
|
||||
waitforvisualfinish
|
||||
@ -8860,7 +8860,7 @@ Move_METAL_SOUND:
|
||||
waitforvisualfinish
|
||||
end
|
||||
MetalSoundRings:
|
||||
panse_1B SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
createsprite gMetalSoundSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 30, 0
|
||||
delay 2
|
||||
return
|
||||
@ -9154,7 +9154,7 @@ Move_ROCK_TOMB:
|
||||
|
||||
Move_SILVER_WIND:
|
||||
loadspritegfx ANIM_TAG_SPARKLE_6
|
||||
panse_1B SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
playsewithpan SE_M_MORNING_SUN, 0
|
||||
delay 0
|
||||
monbg ANIM_DEF_PARTNER
|
||||
@ -9368,7 +9368,7 @@ Move_HYDRO_CANNON:
|
||||
delay 10
|
||||
createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
|
||||
delay 30
|
||||
panse_1B SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
call HydroCannonBeam
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 10, 0, 40, 1
|
||||
createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0
|
||||
@ -10296,7 +10296,7 @@ Status_Nightmare:
|
||||
|
||||
General_CastformChange:
|
||||
createvisualtask AnimTask_IsMonInvisible, 2
|
||||
jumpreteq 1, CastformChangeSkipAnim
|
||||
jumpreteq TRUE, CastformChangeSkipAnim
|
||||
goto CastformChangeContinue
|
||||
CastformChangeContinue:
|
||||
monbg ANIM_ATTACKER
|
||||
|
@ -2829,10 +2829,12 @@ BattleScript_HandleFaintedMon::
|
||||
jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_FaintedMonEnd
|
||||
jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonTryChooseAnother
|
||||
jumpifword CMP_NO_COMMON_BITS, gHitMarker, HITMARKER_PLAYER_FAINTED, BattleScript_FaintedMonTryChooseAnother
|
||||
@ Yes/No for sending out a new Pokémon, when sending out is optional
|
||||
printstring STRINGID_USENEXTPKMN
|
||||
setbyte gBattleCommunication, 0
|
||||
yesnobox
|
||||
jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 0, BattleScript_FaintedMonTryChooseAnother
|
||||
@ Player said no, try to run
|
||||
jumpifplayerran BattleScript_FaintedMonEnd
|
||||
printstring STRINGID_CANTESCAPE2
|
||||
BattleScript_FaintedMonTryChooseAnother::
|
||||
@ -2904,7 +2906,7 @@ BattleScript_HandleFaintedMonLoop::
|
||||
hidepartystatussummary BS_FAINTED
|
||||
switchinanim BS_FAINTED, FALSE
|
||||
waitstate
|
||||
switchineffects 5
|
||||
switchineffects BS_UNK_5
|
||||
jumpifbytenotequal gBattlerFainted, gBattlersCount, BattleScript_HandleFaintedMonLoop
|
||||
BattleScript_HandleFaintedMonMultipleEnd::
|
||||
end2
|
||||
|
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 286 B |
@ -32,7 +32,6 @@
|
||||
#define B_ACTION_EXEC_SCRIPT 10
|
||||
#define B_ACTION_TRY_FINISH 11
|
||||
#define B_ACTION_FINISHED 12
|
||||
|
||||
#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
|
||||
#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
|
||||
#define B_ACTION_NONE 0xFF
|
||||
@ -50,14 +49,17 @@
|
||||
#define MSG_DISPLAY 7
|
||||
#define BATTLE_COMMUNICATION_ENTRIES_COUNT 8
|
||||
|
||||
#define MOVE_TARGET_SELECTED 0x0
|
||||
#define MOVE_TARGET_DEPENDS 0x1
|
||||
#define MOVE_TARGET_USER_OR_SELECTED 0x2
|
||||
#define MOVE_TARGET_RANDOM 0x4
|
||||
#define MOVE_TARGET_BOTH 0x8
|
||||
#define MOVE_TARGET_USER 0x10
|
||||
#define MOVE_TARGET_FOES_AND_ALLY 0x20
|
||||
#define MOVE_TARGET_OPPONENTS_FIELD 0x40
|
||||
#define MOVE_TARGET_SELECTED 0
|
||||
#define MOVE_TARGET_DEPENDS (1 << 0)
|
||||
#define MOVE_TARGET_USER_OR_SELECTED (1 << 1)
|
||||
#define MOVE_TARGET_RANDOM (1 << 2)
|
||||
#define MOVE_TARGET_BOTH (1 << 3)
|
||||
#define MOVE_TARGET_USER (1 << 4)
|
||||
#define MOVE_TARGET_FOES_AND_ALLY (1 << 5)
|
||||
#define MOVE_TARGET_OPPONENTS_FIELD (1 << 6)
|
||||
|
||||
// For the second argument of GetMoveTarget, when no target override is needed
|
||||
#define NO_TARGET_OVERRIDE 0
|
||||
|
||||
#define BATTLE_BUFFER_LINK_SIZE 0x1000
|
||||
|
||||
@ -115,7 +117,7 @@ struct ProtectStruct
|
||||
u32 confusionSelfDmg:1;
|
||||
u32 targetNotAffected:1;
|
||||
u32 chargingTurn:1;
|
||||
u32 fleeFlag:2; // For RunAway and Smoke Ball.
|
||||
u32 fleeType:2; // 0: Normal, 1: FLEE_ITEM, 2: FLEE_ABILITY
|
||||
u32 usedImprisonedMove:1;
|
||||
u32 loveImmobility:1;
|
||||
u32 usedDisabledMove:1;
|
||||
@ -426,7 +428,7 @@ struct BattleStruct
|
||||
u8 unused_6[3];
|
||||
u8 givenExpMons; // Bits for enemy party's pokemon that gave exp to player's party.
|
||||
u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2]; // a 3-D array [target][attacker][byte]
|
||||
u16 castformPalette[MAX_BATTLERS_COUNT][16];
|
||||
u16 castformPalette[NUM_CASTFORM_FORMS][16];
|
||||
union {
|
||||
struct LinkBattlerHeader linkBattlerHeader;
|
||||
u32 battleVideo[2];
|
||||
@ -447,10 +449,14 @@ struct BattleStruct
|
||||
u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed pokemon.
|
||||
};
|
||||
|
||||
#define F_DYNAMIC_TYPE_1 (1 << 6)
|
||||
#define F_DYNAMIC_TYPE_2 (1 << 7)
|
||||
#define DYNAMIC_TYPE_MASK (F_DYNAMIC_TYPE_1 - 1)
|
||||
|
||||
#define GET_MOVE_TYPE(move, typeArg) \
|
||||
{ \
|
||||
if (gBattleStruct->dynamicMoveType) \
|
||||
typeArg = gBattleStruct->dynamicMoveType & 0x3F; \
|
||||
typeArg = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; \
|
||||
else \
|
||||
typeArg = gBattleMoves[move].type; \
|
||||
}
|
||||
@ -502,7 +508,7 @@ struct BattleScripting
|
||||
u8 reshowMainState;
|
||||
u8 reshowHelperState;
|
||||
u8 levelUpHP;
|
||||
u8 windowsType; // 0 - normal, 1 - battle arena
|
||||
u8 windowsType; // B_WIN_TYPE_*
|
||||
u8 multiplayerId;
|
||||
u8 specialTrainerBattleType;
|
||||
};
|
||||
@ -624,8 +630,8 @@ extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT];
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gBattleTerrain;
|
||||
extern u32 gUnusedFirstBattleVar1;
|
||||
extern u8 *gUnknown_0202305C;
|
||||
extern u8 *gUnknown_02023060;
|
||||
extern u8 *gBattleAnimBgTileBuffer;
|
||||
extern u8 *gBattleAnimBgTilemapBuffer;
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gActiveBattler;
|
||||
|
@ -64,12 +64,12 @@ s8 BattleAnimAdjustPanning(s8 pan);
|
||||
s8 BattleAnimAdjustPanning2(s8 pan);
|
||||
s16 KeepPanInRange(s16 a, int oldPan);
|
||||
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
|
||||
void sub_80A4720(u16 a, u16 *b, u32 c, u8 d);
|
||||
void RelocateBattleBgPal(u16 paletteNum, u16 *dest, u32 offset, bool8 largeScreen);
|
||||
void ResetBattleAnimBg(bool8);
|
||||
|
||||
// battle_intro.c
|
||||
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
|
||||
void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 arg7);
|
||||
void DrawBattlerOnBg(int bgId, u8 x, u8 y, u8 battlerPosition, u8 paletteId, u8 *tiles, u16 *tilemap, u16 tilesOffset);
|
||||
void HandleIntroSlide(u8 terrainId);
|
||||
int GetAnimBgAttribute(u8 bgId, u8 attributeId);
|
||||
|
||||
@ -107,7 +107,7 @@ void AnimTranslateLinear_WaitEnd(struct Sprite *sprite);
|
||||
u8 GetBattlerSpriteBGPriority(u8 battlerId);
|
||||
void *LoadPointerFromVars(s16 bottom, s16 top);
|
||||
void StorePointerInVars(s16 *bottom, s16 *top, const void *ptr);
|
||||
void sub_80A8278(void);
|
||||
void InitPrioritiesForVisibleBattlers(void);
|
||||
void GetBattleAnimBg1Data(struct BattleAnimBgData*);
|
||||
void GetBattleAnimBgData(struct BattleAnimBgData*, u32 arg1);
|
||||
u8 GetBattlerSpriteSubpriority(u8 battlerId);
|
||||
@ -125,7 +125,7 @@ u8 AnimDummyReturnArg(u8 battler);
|
||||
s16 CloneBattlerSpriteWithBlend(u8);
|
||||
void obj_delete_but_dont_free_vram(struct Sprite*);
|
||||
u8 CreateInvisibleSpriteCopy(int, u8, int);
|
||||
void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData*, const void*, u32);
|
||||
void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData*, const void*, bool32);
|
||||
void AnimLoadCompressedBgGfx(u32, const u32*, u32);
|
||||
void UpdateAnimBg3ScreenSize(bool8);
|
||||
void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *);
|
||||
|
@ -7,7 +7,6 @@ void BattleArena_InitPoints(void);
|
||||
void BattleArena_AddMindPoints(u8 battler);
|
||||
void BattleArena_AddSkillPoints(u8 battler);
|
||||
void BattleArena_DeductMindPoints(u8 battler, u16 stringId);
|
||||
void sub_81A586C(u8 battler);
|
||||
void DrawArenaRefereeTextBox(void);
|
||||
void EraseArenaRefereeTextBox(void);
|
||||
|
||||
|
@ -18,7 +18,6 @@ void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
|
||||
void DecompressTrainerBackPic(u16 backPicId, u8 battlerId);
|
||||
void BattleGfxSfxDummy3(u8 gender);
|
||||
void FreeTrainerFrontPicPalette(u16 frontPicId);
|
||||
void sub_805DFFC(void);
|
||||
bool8 BattleLoadAllHealthBoxesGfx(u8 state);
|
||||
void LoadBattleBarGfx(u8 arg0);
|
||||
bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId);
|
||||
|
@ -7,7 +7,8 @@ struct TrainerMoney
|
||||
u8 value;
|
||||
};
|
||||
|
||||
struct UnknownPokemonStruct4
|
||||
// For displaying a multi battle partner's Pokémon in the party menu
|
||||
struct MultiPartnerMenuPokemon
|
||||
{
|
||||
/*0x00*/ u16 species;
|
||||
/*0x02*/ u16 heldItem;
|
||||
@ -46,8 +47,6 @@ struct UnknownPokemonStruct4
|
||||
void CB2_InitBattle(void);
|
||||
void BattleMainCB2(void);
|
||||
void CB2_QuitRecordedBattle(void);
|
||||
void sub_8038528(struct Sprite* sprite);
|
||||
void sub_8038A04(void); // unused
|
||||
void VBlankCB_Battle(void);
|
||||
void SpriteCB_VsLetterDummy(struct Sprite *sprite);
|
||||
void SpriteCB_VsLetterInit(struct Sprite *sprite);
|
||||
@ -59,13 +58,12 @@ void SpriteCallbackDummy_2(struct Sprite *sprite);
|
||||
void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
|
||||
void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite);
|
||||
void SpriteCb_HideAsMoveTarget(struct Sprite *sprite);
|
||||
void SpriteCb_OpponentMonFromBall(struct Sprite *sprite);
|
||||
void SpriteCB_OpponentMonFromBall(struct Sprite *sprite);
|
||||
void SpriteCB_BattleSpriteStartSlideLeft(struct Sprite *sprite);
|
||||
void SpriteCB_FaintSlideAnim(struct Sprite *sprite);
|
||||
void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d);
|
||||
void EndBounceEffect(u8 battlerId, bool8 b);
|
||||
void SpriteCb_PlayerMonFromBall(struct Sprite *sprite);
|
||||
void sub_8039E60(struct Sprite *sprite);
|
||||
void SpriteCB_PlayerMonFromBall(struct Sprite *sprite);
|
||||
void SpriteCB_TrainerThrowObject(struct Sprite *sprite);
|
||||
void sub_8039E9C(struct Sprite *sprite);
|
||||
void BeginBattleIntroDummy(void);
|
||||
@ -82,9 +80,9 @@ void RunBattleScriptCommands(void);
|
||||
bool8 TryRunFromBattle(u8 battlerId);
|
||||
void SpecialStatusesClear(void);
|
||||
|
||||
extern struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE];
|
||||
extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE];
|
||||
|
||||
extern const struct SpriteTemplate gUnknown_0831AC88;
|
||||
extern const struct SpriteTemplate gUnusedBattleInitSprite;
|
||||
extern const struct OamData gOamData_BattleSpriteOpponentSide;
|
||||
extern const struct OamData gOamData_BattleSpritePlayerSide;
|
||||
extern const u8 gTypeEffectiveness[336];
|
||||
|
@ -63,7 +63,6 @@ void CB2_PyramidBagMenuFromStartMenu(void);
|
||||
void CB2_ReturnToPyramidBagMenu(void);
|
||||
void UpdatePyramidBagList(void);
|
||||
void UpdatePyramidBagCursorPos(void);
|
||||
void sub_81C4EFC(void);
|
||||
void GoToBattlePyramidBagMenu(u8 location, void (*exitCallback)(void));
|
||||
void Task_CloseBattlePyramidBagMessage(u8 taskId);
|
||||
void TryStoreHeldItemsInPyramidBag(void);
|
||||
|
@ -11,8 +11,7 @@ void GetBg0TilesDst(u16 **tilemap, u16 **tileset);
|
||||
|
||||
extern const struct SpritePalette gSpritePalette_Pokeball;
|
||||
|
||||
enum // TRANSITION_MUGSHOT
|
||||
{
|
||||
enum {
|
||||
MUGSHOT_SIDNEY,
|
||||
MUGSHOT_PHOEBE,
|
||||
MUGSHOT_GLACIA,
|
||||
@ -21,52 +20,64 @@ enum // TRANSITION_MUGSHOT
|
||||
MUGSHOTS_COUNT
|
||||
};
|
||||
|
||||
// credits for the names go to Dyskinesia, Tetrable and Farore
|
||||
// names are naturally subject to change
|
||||
enum {
|
||||
B_TRANSITION_BLUR,
|
||||
B_TRANSITION_SWIRL,
|
||||
B_TRANSITION_SHUFFLE,
|
||||
B_TRANSITION_BIG_POKEBALL,
|
||||
B_TRANSITION_POKEBALLS_TRAIL,
|
||||
B_TRANSITION_CLOCKWISE_BLACKFADE,
|
||||
B_TRANSITION_RIPPLE,
|
||||
B_TRANSITION_WAVE,
|
||||
B_TRANSITION_SLICE,
|
||||
B_TRANSITION_WHITEFADE,
|
||||
B_TRANSITION_GRID_SQUARES,
|
||||
B_TRANSITION_SHARDS,
|
||||
B_TRANSITION_SIDNEY,
|
||||
B_TRANSITION_PHOEBE,
|
||||
B_TRANSITION_GLACIA,
|
||||
B_TRANSITION_DRAKE,
|
||||
B_TRANSITION_CHAMPION,
|
||||
B_TRANSITION_AQUA, // Here below added in Emerald
|
||||
B_TRANSITION_MAGMA,
|
||||
B_TRANSITION_REGICE,
|
||||
B_TRANSITION_REGISTEEL,
|
||||
B_TRANSITION_REGIROCK,
|
||||
B_TRANSITION_KYOGRE,
|
||||
B_TRANSITION_GROUDON,
|
||||
B_TRANSITION_RAYQUAZA,
|
||||
B_TRANSITION_SHRED_SPLIT,
|
||||
B_TRANSITION_BLACKHOLE1,
|
||||
B_TRANSITION_BLACKHOLE2,
|
||||
B_TRANSITION_RECTANGULAR_SPIRAL,
|
||||
B_TRANSITION_FRONTIER_LOGO_WIGGLE,
|
||||
B_TRANSITION_FRONTIER_LOGO_WAVE,
|
||||
B_TRANSITION_FRONTIER_SQUARES,
|
||||
B_TRANSITION_FRONTIER_SQUARES_SCROLL,
|
||||
B_TRANSITION_FRONTIER_SQUARES_SPIRAL,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_MEET,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_CROSS,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ,
|
||||
B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ,
|
||||
B_TRANSITION_COUNT
|
||||
};
|
||||
|
||||
#define B_TRANSITION_BLUR 0
|
||||
#define B_TRANSITION_SWIRL 1
|
||||
#define B_TRANSITION_SHUFFLE 2
|
||||
#define B_TRANSITION_BIG_POKEBALL 3
|
||||
#define B_TRANSITION_POKEBALLS_TRAIL 4
|
||||
#define B_TRANSITION_CLOCKWISE_BLACKFADE 5
|
||||
#define B_TRANSITION_RIPPLE 6
|
||||
#define B_TRANSITION_WAVE 7
|
||||
#define B_TRANSITION_SLICE 8
|
||||
#define B_TRANSITION_WHITEFADE 9
|
||||
#define B_TRANSITION_GRID_SQUARES 10
|
||||
#define B_TRANSITION_SHARDS 11
|
||||
#define B_TRANSITION_SIDNEY 12
|
||||
#define B_TRANSITION_PHOEBE 13
|
||||
#define B_TRANSITION_GLACIA 14
|
||||
#define B_TRANSITION_DRAKE 15
|
||||
#define B_TRANSITION_CHAMPION 16
|
||||
// added in Emerald
|
||||
#define B_TRANSITION_AQUA 17
|
||||
#define B_TRANSITION_MAGMA 18
|
||||
#define B_TRANSITION_REGICE 19
|
||||
#define B_TRANSITION_REGISTEEL 20
|
||||
#define B_TRANSITION_REGIROCK 21
|
||||
#define B_TRANSITION_KYOGRE 22
|
||||
#define B_TRANSITION_GROUDON 23
|
||||
#define B_TRANSITION_RAYQUAZA 24
|
||||
#define B_TRANSITION_SHRED_SPLIT 25
|
||||
#define B_TRANSITION_BLACKHOLE1 26
|
||||
#define B_TRANSITION_BLACKHOLE2 27
|
||||
#define B_TRANSITION_RECTANGULAR_SPIRAL 28
|
||||
#define B_TRANSITION_FRONTIER_LOGO_WIGGLE 29
|
||||
#define B_TRANSITION_FRONTIER_LOGO_WAVE 30
|
||||
#define B_TRANSITION_FRONTIER_SQUARES 31
|
||||
#define B_TRANSITION_FRONTIER_SQUARES_SCROLL 32
|
||||
#define B_TRANSITION_FRONTIER_SQUARES_SPIRAL 33
|
||||
#define B_TRANSITION_FRONTIER_CIRCLES_MEET 34
|
||||
#define B_TRANSITION_FRONTIER_CIRCLES_CROSS 35
|
||||
#define B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL 36
|
||||
#define B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL 37
|
||||
#define B_TRANSITION_FRONTIER_CIRCLES_MEET_IN_SEQ 38
|
||||
#define B_TRANSITION_FRONTIER_CIRCLES_CROSS_IN_SEQ 39
|
||||
#define B_TRANSITION_FRONTIER_CIRCLES_ASYMMETRIC_SPIRAL_IN_SEQ 40
|
||||
#define B_TRANSITION_FRONTIER_CIRCLES_SYMMETRIC_SPIRAL_IN_SEQ 41
|
||||
#define B_TRANSITION_COUNT 42
|
||||
// IDs for GetSpecialBattleTransition
|
||||
enum {
|
||||
B_TRANSITION_GROUP_B_TOWER,
|
||||
B_TRANSITION_GROUP_B_DOME = 3,
|
||||
B_TRANSITION_GROUP_B_PALACE,
|
||||
B_TRANSITION_GROUP_B_ARENA,
|
||||
B_TRANSITION_GROUP_B_FACTORY,
|
||||
B_TRANSITION_GROUP_B_PIKE,
|
||||
B_TRANSITION_GROUP_B_PYRAMID = 10,
|
||||
B_TRANSITION_GROUP_TRAINER_HILL,
|
||||
B_TRANSITION_GROUP_SECRET_BASE,
|
||||
B_TRANSITION_GROUP_E_READER,
|
||||
};
|
||||
|
||||
#endif // GUARD_BATTLE_TRANSITION_H
|
||||
|
@ -7,38 +7,42 @@
|
||||
#define MOVE_LIMITATION_TORMENTED (1 << 3)
|
||||
#define MOVE_LIMITATION_TAUNT (1 << 4)
|
||||
#define MOVE_LIMITATION_IMPRISON (1 << 5)
|
||||
#define MOVE_LIMITATIONS_ALL 0xFF
|
||||
|
||||
#define ABILITYEFFECT_ON_SWITCHIN 0x0
|
||||
#define ABILITYEFFECT_ENDTURN 0x1
|
||||
#define ABILITYEFFECT_MOVES_BLOCK 0x2
|
||||
#define ABILITYEFFECT_ABSORBING 0x3
|
||||
#define ABILITYEFFECT_ON_DAMAGE 0x4
|
||||
#define ABILITYEFFECT_IMMUNITY 0x5
|
||||
#define ABILITYEFFECT_FORECAST 0x6
|
||||
#define ABILITYEFFECT_SYNCHRONIZE 0x7
|
||||
#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
|
||||
#define ABILITYEFFECT_INTIMIDATE1 0x9
|
||||
#define ABILITYEFFECT_INTIMIDATE2 0xA
|
||||
#define ABILITYEFFECT_TRACE 0xB
|
||||
#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
|
||||
#define ABILITYEFFECT_CHECK_BATTLER_SIDE 0xD
|
||||
#define ABILITYEFFECT_FIELD_SPORT 0xE
|
||||
#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 0xF
|
||||
#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
|
||||
#define ABILITYEFFECT_COUNT_BATTLER_SIDE 0x11
|
||||
#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
|
||||
#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
|
||||
#define ABILITYEFFECT_MUD_SPORT 0xFD
|
||||
#define ABILITYEFFECT_WATER_SPORT 0xFE
|
||||
#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF
|
||||
#define ABILITYEFFECT_ON_SWITCHIN 0
|
||||
#define ABILITYEFFECT_ENDTURN 1
|
||||
#define ABILITYEFFECT_MOVES_BLOCK 2
|
||||
#define ABILITYEFFECT_ABSORBING 3
|
||||
#define ABILITYEFFECT_ON_DAMAGE 4
|
||||
#define ABILITYEFFECT_IMMUNITY 5
|
||||
#define ABILITYEFFECT_FORECAST 6
|
||||
#define ABILITYEFFECT_SYNCHRONIZE 7
|
||||
#define ABILITYEFFECT_ATK_SYNCHRONIZE 8
|
||||
#define ABILITYEFFECT_INTIMIDATE1 9
|
||||
#define ABILITYEFFECT_INTIMIDATE2 10
|
||||
#define ABILITYEFFECT_TRACE 11
|
||||
#define ABILITYEFFECT_CHECK_OTHER_SIDE 12
|
||||
#define ABILITYEFFECT_CHECK_BATTLER_SIDE 13
|
||||
#define ABILITYEFFECT_FIELD_SPORT 14
|
||||
#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 15
|
||||
#define ABILITYEFFECT_COUNT_OTHER_SIDE 16
|
||||
#define ABILITYEFFECT_COUNT_BATTLER_SIDE 17
|
||||
#define ABILITYEFFECT_COUNT_ON_FIELD 18
|
||||
#define ABILITYEFFECT_CHECK_ON_FIELD 19
|
||||
#define ABILITYEFFECT_MUD_SPORT 253
|
||||
#define ABILITYEFFECT_WATER_SPORT 254
|
||||
#define ABILITYEFFECT_SWITCH_IN_WEATHER 255
|
||||
|
||||
#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_MOVE_END 0x3
|
||||
#define ITEMEFFECT_KINGSROCK_SHELLBELL 0x4
|
||||
// For the first argument of ItemBattleEffects, to deteremine which block of item effects to try
|
||||
#define ITEMEFFECT_ON_SWITCH_IN 0
|
||||
#define ITEMEFFECT_NORMAL 1
|
||||
#define ITEMEFFECT_DUMMY 2 // Unused, empty
|
||||
#define ITEMEFFECT_MOVE_END 3
|
||||
#define ITEMEFFECT_KINGSROCK_SHELLBELL 4
|
||||
|
||||
#define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK)))
|
||||
#define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK)))
|
||||
|
@ -306,4 +306,17 @@
|
||||
#define B_WAIT_TIME_MED 48
|
||||
#define B_WAIT_TIME_SHORT 32
|
||||
|
||||
#define CASTFORM_NORMAL 0
|
||||
#define CASTFORM_FIRE 1
|
||||
#define CASTFORM_WATER 2
|
||||
#define CASTFORM_ICE 3
|
||||
#define NUM_CASTFORM_FORMS 4
|
||||
#define CASTFORM_SUBSTITUTE (1 << 7)
|
||||
|
||||
#define FLEE_ITEM 1
|
||||
#define FLEE_ABILITY 2
|
||||
|
||||
#define B_WIN_TYPE_NORMAL 0
|
||||
#define B_WIN_TYPE_ARENA 1
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_H
|
||||
|
@ -318,7 +318,7 @@
|
||||
#define SOUND_PAN_TARGET 63
|
||||
|
||||
// move background ids
|
||||
#define BG_DARK_ 0 // the same as BG_DARK but is unused
|
||||
#define BG_NONE 0 // the same as BG_DARK but is unused
|
||||
#define BG_DARK 1
|
||||
#define BG_GHOST 2
|
||||
#define BG_PSYCHIC 3
|
||||
|
@ -294,7 +294,7 @@ struct ContestResources
|
||||
u8 * contestBgTilemaps[CONTESTANT_COUNT];
|
||||
void * boxBlinkTiles1;
|
||||
void * boxBlinkTiles2;
|
||||
void * field_3c;
|
||||
void * animBgTileBuffer;
|
||||
};
|
||||
|
||||
#define eContest (*gContestResources->contest)
|
||||
|
@ -66,7 +66,7 @@ enum {
|
||||
REMATCH_TRENT,
|
||||
REMATCH_SAWYER,
|
||||
REMATCH_KIRA_AND_DAN,
|
||||
REMATCH_WALLY_3, // Entries above WALLY are considered normal trainers, from Wally below are special trainers
|
||||
REMATCH_WALLY_VR, // Entries above WALLY are considered normal trainers, from Wally below are special trainers
|
||||
REMATCH_ROXANNE,
|
||||
REMATCH_BRAWLY,
|
||||
REMATCH_WATTSON,
|
||||
@ -75,7 +75,7 @@ enum {
|
||||
REMATCH_WINONA,
|
||||
REMATCH_TATE_AND_LIZA,
|
||||
REMATCH_JUAN,
|
||||
REMATCH_SIDNEY, // Entries below SIDNEY are considered part of REMATCH_ELITE_FOUR_ENTRIES.
|
||||
REMATCH_SIDNEY, // Entries from SIDNEY below are considered part of REMATCH_ELITE_FOUR_ENTRIES.
|
||||
REMATCH_PHOEBE,
|
||||
REMATCH_GLACIA,
|
||||
REMATCH_DRAKE,
|
||||
@ -83,7 +83,7 @@ enum {
|
||||
REMATCH_TABLE_ENTRIES // The total number of rematch entries. Must be last in enum
|
||||
};
|
||||
|
||||
#define REMATCH_SPECIAL_TRAINER_START REMATCH_WALLY_3
|
||||
#define REMATCH_SPECIAL_TRAINER_START REMATCH_WALLY_VR
|
||||
#define REMATCH_ELITE_FOUR_ENTRIES REMATCH_SIDNEY
|
||||
|
||||
void UpdateGymLeaderRematch(void);
|
||||
|
@ -9,7 +9,7 @@ extern u8 gRecordedBattleMultiplayerId;
|
||||
#define B_RECORD_MODE_PLAYBACK 2
|
||||
|
||||
void RecordedBattle_Init(u8 arg0);
|
||||
void sub_8184E58(void);
|
||||
void RecordedBattle_SetTrainerInfo(void);
|
||||
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action);
|
||||
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear);
|
||||
u8 RecordedBattle_GetBattlerAction(u8 battlerId);
|
||||
@ -30,8 +30,8 @@ u8 GetTextSpeedInRecordedBattle(void);
|
||||
void RecordedBattle_CopyBattlerMoves(void);
|
||||
void sub_818603C(u8 arg0);
|
||||
u32 GetAiScriptsInRecordedBattle(void);
|
||||
void sub_8186444(void);
|
||||
bool8 sub_8186450(void);
|
||||
void RecordedBattle_SetPlaybackFinished(void);
|
||||
bool8 RecordedBattle_CanStopPlayback(void);
|
||||
void GetRecordedBattleRecordMixFriendName(u8 *dst);
|
||||
u8 GetRecordedBattleRecordMixFriendClass(void);
|
||||
u8 GetRecordedBattleApprenticeId(void);
|
||||
|
@ -334,7 +334,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves)
|
||||
defaultScoreMoves >>= 1;
|
||||
}
|
||||
|
||||
moveLimitations = CheckMoveLimitations(gActiveBattler, 0, 0xFF);
|
||||
moveLimitations = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL);
|
||||
|
||||
// Ignore moves that aren't possible to use.
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
|
@ -27,15 +27,14 @@ extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern const u16 gMovesWithQuietBGM[];
|
||||
extern const u8 *const gBattleAnims_Moves[];
|
||||
|
||||
// this file's functions
|
||||
static void ScriptCmd_loadspritegfx(void);
|
||||
static void ScriptCmd_unloadspritegfx(void);
|
||||
static void ScriptCmd_createsprite(void);
|
||||
static void ScriptCmd_createvisualtask(void);
|
||||
static void ScriptCmd_delay(void);
|
||||
static void ScriptCmd_waitforvisualfinish(void);
|
||||
static void ScriptCmd_hang1(void);
|
||||
static void ScriptCmd_hang2(void);
|
||||
static void ScriptCmd_nop(void);
|
||||
static void ScriptCmd_nop2(void);
|
||||
static void ScriptCmd_end(void);
|
||||
static void ScriptCmd_playse(void);
|
||||
static void ScriptCmd_monbg(void);
|
||||
@ -55,7 +54,7 @@ static void ScriptCmd_waitbgfadein(void);
|
||||
static void ScriptCmd_changebg(void);
|
||||
static void ScriptCmd_playsewithpan(void);
|
||||
static void ScriptCmd_setpan(void);
|
||||
static void ScriptCmd_panse_1B(void);
|
||||
static void ScriptCmd_panse(void);
|
||||
static void ScriptCmd_loopsewithpan(void);
|
||||
static void ScriptCmd_waitplaysewithpan(void);
|
||||
static void ScriptCmd_setbldcnt(void);
|
||||
@ -66,8 +65,8 @@ static void ScriptCmd_monbg_22(void);
|
||||
static void ScriptCmd_clearmonbg_23(void);
|
||||
static void ScriptCmd_jumpifcontest(void);
|
||||
static void ScriptCmd_fadetobgfromset(void);
|
||||
static void ScriptCmd_panse_26(void);
|
||||
static void ScriptCmd_panse_27(void);
|
||||
static void ScriptCmd_panse_adjustnone(void);
|
||||
static void ScriptCmd_panse_adjustall(void);
|
||||
static void ScriptCmd_monbgprio_28(void);
|
||||
static void ScriptCmd_monbgprio_29(void);
|
||||
static void ScriptCmd_monbgprio_2A(void);
|
||||
@ -79,8 +78,8 @@ static void ScriptCmd_stopsound(void);
|
||||
|
||||
static void RunAnimScriptCommand(void);
|
||||
static void task_pA_ma0A_obj_to_bg_pal(u8 taskId);
|
||||
static void sub_80A46A0(void);
|
||||
static void sub_80A4980(u8 taskId);
|
||||
static void FlipBattlerBgTiles(void);
|
||||
static void Task_ClearMonBg(u8 taskId);
|
||||
static void sub_80A4BB0(u8 taskId);
|
||||
static void Task_FadeToBg(u8 taskId);
|
||||
static void Task_PanFromInitialToTarget(u8 taskId);
|
||||
@ -89,11 +88,10 @@ static void Task_WaitAndPlaySE(u8 taskId);
|
||||
static void LoadDefaultBg(void);
|
||||
static void LoadMoveBg(u16 bgId);
|
||||
|
||||
// ewram
|
||||
EWRAM_DATA static const u8 *sBattleAnimScriptPtr = NULL;
|
||||
EWRAM_DATA static const u8 *sBattleAnimScriptRetAddr = NULL;
|
||||
EWRAM_DATA void (*gAnimScriptCallback)(void) = NULL;
|
||||
EWRAM_DATA static s8 gAnimFramesToWait = 0;
|
||||
EWRAM_DATA static s8 sAnimFramesToWait = 0;
|
||||
EWRAM_DATA bool8 gAnimScriptActive = FALSE;
|
||||
EWRAM_DATA u8 gAnimVisualTaskCount = 0;
|
||||
EWRAM_DATA u8 gAnimSoundTaskCount = 0;
|
||||
@ -1711,7 +1709,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
|
||||
|
||||
const struct BattleAnimBackground gBattleAnimBackgroundTable[] =
|
||||
{
|
||||
[BG_DARK_] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark},
|
||||
[BG_NONE] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark},
|
||||
[BG_DARK] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark},
|
||||
[BG_GHOST] = {gBattleAnimBgImage_Ghost, gBattleAnimBgPalette_Ghost, gBattleAnimBgTilemap_Ghost},
|
||||
[BG_PSYCHIC] = {gBattleAnimBgImage_Psychic, gBattleAnimBgPalette_Psychic, gBattleAnimBgTilemap_Psychic},
|
||||
@ -1748,8 +1746,8 @@ static void (* const sScriptCmdTable[])(void) =
|
||||
ScriptCmd_createvisualtask,
|
||||
ScriptCmd_delay,
|
||||
ScriptCmd_waitforvisualfinish,
|
||||
ScriptCmd_hang1,
|
||||
ScriptCmd_hang2,
|
||||
ScriptCmd_nop,
|
||||
ScriptCmd_nop2,
|
||||
ScriptCmd_end,
|
||||
ScriptCmd_playse,
|
||||
ScriptCmd_monbg,
|
||||
@ -1769,7 +1767,7 @@ static void (* const sScriptCmdTable[])(void) =
|
||||
ScriptCmd_changebg,
|
||||
ScriptCmd_playsewithpan,
|
||||
ScriptCmd_setpan,
|
||||
ScriptCmd_panse_1B,
|
||||
ScriptCmd_panse,
|
||||
ScriptCmd_loopsewithpan,
|
||||
ScriptCmd_waitplaysewithpan,
|
||||
ScriptCmd_setbldcnt,
|
||||
@ -1780,8 +1778,8 @@ static void (* const sScriptCmdTable[])(void) =
|
||||
ScriptCmd_clearmonbg_23,
|
||||
ScriptCmd_jumpifcontest,
|
||||
ScriptCmd_fadetobgfromset,
|
||||
ScriptCmd_panse_26,
|
||||
ScriptCmd_panse_27,
|
||||
ScriptCmd_panse_adjustnone,
|
||||
ScriptCmd_panse_adjustall,
|
||||
ScriptCmd_monbgprio_28,
|
||||
ScriptCmd_monbgprio_29,
|
||||
ScriptCmd_monbgprio_2A,
|
||||
@ -1792,12 +1790,11 @@ static void (* const sScriptCmdTable[])(void) =
|
||||
ScriptCmd_stopsound
|
||||
};
|
||||
|
||||
// code
|
||||
void ClearBattleAnimationVars(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gAnimFramesToWait = 0;
|
||||
sAnimFramesToWait = 0;
|
||||
gAnimScriptActive = FALSE;
|
||||
gAnimVisualTaskCount = 0;
|
||||
gAnimSoundTaskCount = 0;
|
||||
@ -1837,7 +1834,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
|
||||
|
||||
if (!IsContest())
|
||||
{
|
||||
sub_80A8278();
|
||||
InitPrioritiesForVisibleBattlers();
|
||||
UpdateOamPriorityInAllHealthboxes(0);
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
@ -1865,7 +1862,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
|
||||
sMonAnimTaskIdArray[1] = TASK_NONE;
|
||||
sBattleAnimScriptPtr = animsTable[tableId];
|
||||
gAnimScriptActive = TRUE;
|
||||
gAnimFramesToWait = 0;
|
||||
sAnimFramesToWait = 0;
|
||||
gAnimScriptCallback = RunAnimScriptCommand;
|
||||
|
||||
for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++)
|
||||
@ -1938,14 +1935,14 @@ static void ClearSpriteIndex(u16 index)
|
||||
|
||||
static void WaitAnimFrameCount(void)
|
||||
{
|
||||
if (gAnimFramesToWait <= 0)
|
||||
if (sAnimFramesToWait <= 0)
|
||||
{
|
||||
gAnimScriptCallback = RunAnimScriptCommand;
|
||||
gAnimFramesToWait = 0;
|
||||
sAnimFramesToWait = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
gAnimFramesToWait--;
|
||||
sAnimFramesToWait--;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1954,7 +1951,7 @@ static void RunAnimScriptCommand(void)
|
||||
do
|
||||
{
|
||||
sScriptCmdTable[sBattleAnimScriptPtr[0]]();
|
||||
} while (gAnimFramesToWait == 0 && gAnimScriptActive);
|
||||
} while (sAnimFramesToWait == 0 && gAnimScriptActive);
|
||||
}
|
||||
|
||||
static void ScriptCmd_loadspritegfx(void)
|
||||
@ -1967,7 +1964,7 @@ static void ScriptCmd_loadspritegfx(void)
|
||||
LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]);
|
||||
sBattleAnimScriptPtr += 2;
|
||||
AddSpriteIndex(GET_TRUE_SPRITE_INDEX(index));
|
||||
gAnimFramesToWait = 1;
|
||||
sAnimFramesToWait = 1;
|
||||
gAnimScriptCallback = WaitAnimFrameCount;
|
||||
}
|
||||
|
||||
@ -2070,9 +2067,9 @@ static void ScriptCmd_createvisualtask(void)
|
||||
static void ScriptCmd_delay(void)
|
||||
{
|
||||
sBattleAnimScriptPtr++;
|
||||
gAnimFramesToWait = sBattleAnimScriptPtr[0];
|
||||
if (gAnimFramesToWait == 0)
|
||||
gAnimFramesToWait = -1;
|
||||
sAnimFramesToWait = sBattleAnimScriptPtr[0];
|
||||
if (sAnimFramesToWait == 0)
|
||||
sAnimFramesToWait = -1;
|
||||
sBattleAnimScriptPtr++;
|
||||
gAnimScriptCallback = WaitAnimFrameCount;
|
||||
}
|
||||
@ -2083,19 +2080,19 @@ static void ScriptCmd_waitforvisualfinish(void)
|
||||
if (gAnimVisualTaskCount == 0)
|
||||
{
|
||||
sBattleAnimScriptPtr++;
|
||||
gAnimFramesToWait = 0;
|
||||
sAnimFramesToWait = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
gAnimFramesToWait = 1;
|
||||
sAnimFramesToWait = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void ScriptCmd_hang1(void)
|
||||
static void ScriptCmd_nop(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void ScriptCmd_hang2(void)
|
||||
static void ScriptCmd_nop2(void)
|
||||
{
|
||||
}
|
||||
|
||||
@ -2109,7 +2106,7 @@ static void ScriptCmd_end(void)
|
||||
|| sMonAnimTaskIdArray[0] != TASK_NONE || sMonAnimTaskIdArray[1] != TASK_NONE)
|
||||
{
|
||||
sSoundAnimFramesToWait = 0;
|
||||
gAnimFramesToWait = 1;
|
||||
sAnimFramesToWait = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2118,7 +2115,7 @@ static void ScriptCmd_end(void)
|
||||
{
|
||||
if (++sSoundAnimFramesToWait <= 90) // Wait 90 frames, then halt the sound effect.
|
||||
{
|
||||
gAnimFramesToWait = 1;
|
||||
sAnimFramesToWait = 1;
|
||||
return;
|
||||
}
|
||||
else
|
||||
@ -2146,7 +2143,7 @@ static void ScriptCmd_end(void)
|
||||
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
|
||||
if (!IsContest())
|
||||
{
|
||||
sub_80A8278();
|
||||
InitPrioritiesForVisibleBattlers();
|
||||
UpdateOamPriorityInAllHealthboxes(1);
|
||||
}
|
||||
gAnimScriptActive = FALSE;
|
||||
@ -2160,11 +2157,16 @@ static void ScriptCmd_playse(void)
|
||||
sBattleAnimScriptPtr += 2;
|
||||
}
|
||||
|
||||
#define t1_MONBG_BATTLER 0
|
||||
#define t1_MON_IN_BG2 1
|
||||
// These two tasks share context and similar task data
|
||||
// To differentiate them their task data is prefixed t1/t2
|
||||
|
||||
// Task data for sub_80A40F4
|
||||
#define t1_BattlerSpriteId data[0]
|
||||
#define t1_InBg2 data[1]
|
||||
#define t1_CREATE_ANOTHER_TASK 2
|
||||
#define t1_IS_SECONDMON_BG 3
|
||||
|
||||
// Task data for task_pA_ma0A_obj_to_bg_pal
|
||||
#define t2_BATTLER_SPRITE_ID 0
|
||||
#define t2_MON_IN_BG2 5
|
||||
#define t2_MONBG_BATTLER 6
|
||||
@ -2173,11 +2175,11 @@ static void sub_80A40F4(u8 taskId)
|
||||
{
|
||||
u8 newTaskId;
|
||||
|
||||
s16 *selfData = gTasks[taskId].data;
|
||||
u8 battlerSpriteId = gBattlerSpriteIds[selfData[t1_MONBG_BATTLER]];
|
||||
s16 *data = gTasks[taskId].data;
|
||||
u8 battlerSpriteId = gBattlerSpriteIds[t1_BattlerSpriteId];
|
||||
gSprites[battlerSpriteId].invisible = TRUE;
|
||||
|
||||
if (!selfData[t1_CREATE_ANOTHER_TASK])
|
||||
if (!data[t1_CREATE_ANOTHER_TASK])
|
||||
{
|
||||
DestroyAnimVisualTask(taskId);
|
||||
return;
|
||||
@ -2188,7 +2190,7 @@ static void sub_80A40F4(u8 taskId)
|
||||
gTasks[newTaskId].data[1] = gSprites[battlerSpriteId].x + gSprites[battlerSpriteId].x2;
|
||||
gTasks[newTaskId].data[2] = gSprites[battlerSpriteId].y + gSprites[battlerSpriteId].y2;
|
||||
|
||||
if (!selfData[t1_MON_IN_BG2])
|
||||
if (!t1_InBg2)
|
||||
{
|
||||
gTasks[newTaskId].data[3] = gBattle_BG1_X;
|
||||
gTasks[newTaskId].data[4] = gBattle_BG1_Y;
|
||||
@ -2199,9 +2201,9 @@ static void sub_80A40F4(u8 taskId)
|
||||
gTasks[newTaskId].data[4] = gBattle_BG2_Y;
|
||||
}
|
||||
|
||||
gTasks[newTaskId].data[t2_MON_IN_BG2] = selfData[t1_MON_IN_BG2];
|
||||
gTasks[newTaskId].data[t2_MONBG_BATTLER] = selfData[t1_MONBG_BATTLER];
|
||||
sMonAnimTaskIdArray[selfData[t1_IS_SECONDMON_BG]] = newTaskId;
|
||||
gTasks[newTaskId].data[t2_MON_IN_BG2] = t1_InBg2;
|
||||
gTasks[newTaskId].data[t2_MONBG_BATTLER] = t1_BattlerSpriteId;
|
||||
sMonAnimTaskIdArray[data[t1_IS_SECONDMON_BG]] = newTaskId;
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
@ -2231,8 +2233,8 @@ static void ScriptCmd_monbg(void)
|
||||
MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE);
|
||||
taskId = CreateTask(sub_80A40F4, 10);
|
||||
gAnimVisualTaskCount++;
|
||||
gTasks[taskId].data[t1_MONBG_BATTLER] = battlerId;
|
||||
gTasks[taskId].data[t1_MON_IN_BG2] = toBG_2;
|
||||
gTasks[taskId].t1_BattlerSpriteId = battlerId;
|
||||
gTasks[taskId].t1_InBg2 = toBG_2;
|
||||
gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE;
|
||||
gTasks[taskId].data[t1_IS_SECONDMON_BG] = 0;
|
||||
|
||||
@ -2257,7 +2259,7 @@ static void ScriptCmd_monbg(void)
|
||||
}
|
||||
|
||||
sBattleAnimScriptPtr++;
|
||||
gAnimFramesToWait = 1;
|
||||
sAnimFramesToWait = 1;
|
||||
gAnimScriptCallback = WaitAnimFrameCount;
|
||||
}
|
||||
|
||||
@ -2329,10 +2331,10 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
|
||||
else
|
||||
battlerPosition = GetBattlerPosition(battlerId);
|
||||
|
||||
sub_8118FBC(1, 0, 0, battlerPosition, animBg.paletteId, animBg.bgTiles, animBg.bgTilemap, animBg.tilesOffset);
|
||||
DrawBattlerOnBg(1, 0, 0, battlerPosition, animBg.paletteId, animBg.bgTiles, animBg.bgTilemap, animBg.tilesOffset);
|
||||
|
||||
if (IsContest())
|
||||
sub_80A46A0();
|
||||
FlipBattlerBgTiles();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2359,11 +2361,11 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
|
||||
LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20);
|
||||
CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + 0x120), 0x20);
|
||||
|
||||
sub_8118FBC(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset);
|
||||
DrawBattlerOnBg(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80A46A0(void)
|
||||
static void FlipBattlerBgTiles(void)
|
||||
{
|
||||
s32 i, j;
|
||||
struct BattleAnimBgData animBg;
|
||||
@ -2377,10 +2379,8 @@ static void sub_80A46A0(void)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
u16 temp = ptr[j + i * 32];
|
||||
|
||||
ptr[j + i * 32] = ptr[7 - j + i * 32];
|
||||
ptr[7 - j + i * 32] = temp;
|
||||
u16 temp;
|
||||
SWAP(ptr[j + i * 32], ptr[7 - j + i * 32], temp);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 8; i++)
|
||||
@ -2391,20 +2391,20 @@ static void sub_80A46A0(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80A4720(u16 a, u16 *b, u32 c, u8 d)
|
||||
void RelocateBattleBgPal(u16 paletteNum, u16 *dest, u32 offset, bool8 largeScreen)
|
||||
{
|
||||
s32 i, j;
|
||||
s32 var;
|
||||
s32 size;
|
||||
|
||||
if (d == 0)
|
||||
var = 32;
|
||||
if (!largeScreen)
|
||||
size = 32;
|
||||
else
|
||||
var = 64;
|
||||
a <<= 12;
|
||||
for (i = 0; i < var; i++)
|
||||
size = 64;
|
||||
paletteNum <<= 12;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
for (j = 0; j < 32; j++)
|
||||
b[j + i * 32] = ((b[j + i * 32] & 0xFFF) | a) + c;
|
||||
dest[j + i * 32] = ((dest[j + i * 32] & 0xFFF) | paletteNum) + offset;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2446,8 +2446,8 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
|
||||
|
||||
gBattle_BG1_X = x + gTasks[taskId].data[3];
|
||||
gBattle_BG1_Y = y + gTasks[taskId].data[4];
|
||||
src = gPlttBufferFaded + 0x100 + palIndex * 16;
|
||||
dst = gPlttBufferFaded + 0x100 + animBg.paletteId * 16 - 256;
|
||||
src = &gPlttBufferFaded[0x100 + palIndex * 16];
|
||||
dst = &gPlttBufferFaded[0x100 + animBg.paletteId * 16 - 256];
|
||||
CpuCopy32(src, dst, 0x20);
|
||||
}
|
||||
else
|
||||
@ -2457,8 +2457,8 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
|
||||
|
||||
gBattle_BG2_X = x + gTasks[taskId].data[3];
|
||||
gBattle_BG2_Y = y + gTasks[taskId].data[4];
|
||||
src = gPlttBufferFaded + 0x100 + palIndex * 16;
|
||||
dst = gPlttBufferFaded + 0x100 - 112;
|
||||
src = &gPlttBufferFaded[0x100 + palIndex * 16];
|
||||
dst = &gPlttBufferFaded[0x100 - 112];
|
||||
CpuCopy32(src, dst, 0x20);
|
||||
}
|
||||
}
|
||||
@ -2489,14 +2489,14 @@ static void ScriptCmd_clearmonbg(void)
|
||||
else
|
||||
animBattlerId = 0;
|
||||
|
||||
taskId = CreateTask(sub_80A4980, 5);
|
||||
taskId = CreateTask(Task_ClearMonBg, 5);
|
||||
gTasks[taskId].data[0] = animBattlerId;
|
||||
gTasks[taskId].data[2] = battlerId;
|
||||
|
||||
sBattleAnimScriptPtr++;
|
||||
}
|
||||
|
||||
static void sub_80A4980(u8 taskId)
|
||||
static void Task_ClearMonBg(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[1]++;
|
||||
if (gTasks[taskId].data[1] != 1)
|
||||
@ -2625,8 +2625,8 @@ static void sub_80A4BB0(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
#undef t1_MONBG_BATTLER
|
||||
#undef t1_MON_IN_BG2
|
||||
#undef t1_BattlerSpriteId
|
||||
#undef t1_InBg2
|
||||
#undef t1_CREATE_ANOTHER_TASK
|
||||
#undef t1_IS_SECONDMON_BG
|
||||
|
||||
@ -2676,6 +2676,10 @@ static void ScriptCmd_return(void)
|
||||
|
||||
static void ScriptCmd_setarg(void)
|
||||
{
|
||||
// Save original address to return to
|
||||
// after the T1_READ_16, + 4.
|
||||
// They could have equivalently just advanced
|
||||
// sBattleAnimScriptPtr by 2 afterwards.
|
||||
const u8 *addr = sBattleAnimScriptPtr;
|
||||
u16 value;
|
||||
u8 argId;
|
||||
@ -2809,17 +2813,17 @@ static void LoadMoveBg(u16 bgId)
|
||||
void *dmaDest;
|
||||
|
||||
LZDecompressWram(tilemap, gDecompressionBuffer);
|
||||
sub_80A4720(GetBattleBgPaletteNum(), (void*)(gDecompressionBuffer), 0x100, 0);
|
||||
RelocateBattleBgPal(GetBattleBgPaletteNum(), (void*)gDecompressionBuffer, 0x100, FALSE);
|
||||
dmaSrc = gDecompressionBuffer;
|
||||
dmaDest = (void *)(BG_SCREEN_ADDR(26));
|
||||
dmaDest = (void *)BG_SCREEN_ADDR(26);
|
||||
DmaCopy32(3, dmaSrc, dmaDest, 0x800);
|
||||
LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_SCREEN_ADDR(4)));
|
||||
LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_SCREEN_ADDR(4));
|
||||
LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, GetBattleBgPaletteNum() * 16, 32);
|
||||
}
|
||||
else
|
||||
{
|
||||
LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)(BG_SCREEN_ADDR(26)));
|
||||
LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_CHAR_ADDR(2)));
|
||||
LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)BG_SCREEN_ADDR(26));
|
||||
LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_CHAR_ADDR(2));
|
||||
LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, 32, 32);
|
||||
}
|
||||
}
|
||||
@ -2850,11 +2854,11 @@ static void ScriptCmd_waitbgfadeout(void)
|
||||
if (sAnimBackgroundFadeState == 2)
|
||||
{
|
||||
sBattleAnimScriptPtr++;
|
||||
gAnimFramesToWait = 0;
|
||||
sAnimFramesToWait = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
gAnimFramesToWait = 1;
|
||||
sAnimFramesToWait = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2863,11 +2867,11 @@ static void ScriptCmd_waitbgfadein(void)
|
||||
if (sAnimBackgroundFadeState == 0)
|
||||
{
|
||||
sBattleAnimScriptPtr++;
|
||||
gAnimFramesToWait = 0;
|
||||
sAnimFramesToWait = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
gAnimFramesToWait = 1;
|
||||
sAnimFramesToWait = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2992,7 +2996,7 @@ static void ScriptCmd_setpan(void)
|
||||
#define tCurrentPan data[4]
|
||||
#define tFrameCounter data[8]
|
||||
|
||||
static void ScriptCmd_panse_1B(void)
|
||||
static void ScriptCmd_panse(void)
|
||||
{
|
||||
u16 songNum;
|
||||
s8 currentPanArg, incrementPan, incrementPanArg, currentPan, targetPan;
|
||||
@ -3002,13 +3006,14 @@ static void ScriptCmd_panse_1B(void)
|
||||
sBattleAnimScriptPtr++;
|
||||
songNum = T1_READ_16(sBattleAnimScriptPtr);
|
||||
currentPanArg = sBattleAnimScriptPtr[2];
|
||||
incrementPan = sBattleAnimScriptPtr[3];
|
||||
incrementPan = sBattleAnimScriptPtr[3]; // targetPan, var is re-used
|
||||
incrementPanArg = sBattleAnimScriptPtr[4];
|
||||
framesToWait = sBattleAnimScriptPtr[5];
|
||||
|
||||
currentPan = BattleAnimAdjustPanning(currentPanArg);
|
||||
targetPan = BattleAnimAdjustPanning(incrementPan);
|
||||
incrementPan = CalculatePanIncrement(currentPan, targetPan, incrementPanArg);
|
||||
|
||||
taskId = CreateTask(Task_PanFromInitialToTarget, 1);
|
||||
gTasks[taskId].tInitialPan = currentPan;
|
||||
gTasks[taskId].tTargetPan = targetPan;
|
||||
@ -3064,7 +3069,7 @@ void Task_PanFromInitialToTarget(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void ScriptCmd_panse_26(void)
|
||||
static void ScriptCmd_panse_adjustnone(void)
|
||||
{
|
||||
u16 songId;
|
||||
s8 currentPan, targetPan, incrementPan;
|
||||
@ -3091,7 +3096,7 @@ static void ScriptCmd_panse_26(void)
|
||||
sBattleAnimScriptPtr += 6;
|
||||
}
|
||||
|
||||
static void ScriptCmd_panse_27(void)
|
||||
static void ScriptCmd_panse_adjustall(void)
|
||||
{
|
||||
u16 songId;
|
||||
s8 targetPanArg, incrementPanArg, currentPanArg, currentPan, targetPan, incrementPan;
|
||||
@ -3254,7 +3259,7 @@ static void ScriptCmd_waitsound(void)
|
||||
if (gAnimSoundTaskCount != 0)
|
||||
{
|
||||
sSoundAnimFramesToWait = 0;
|
||||
gAnimFramesToWait = 1;
|
||||
sAnimFramesToWait = 1;
|
||||
}
|
||||
else if (IsSEPlaying())
|
||||
{
|
||||
@ -3266,14 +3271,14 @@ static void ScriptCmd_waitsound(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gAnimFramesToWait = 1;
|
||||
sAnimFramesToWait = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sSoundAnimFramesToWait = 0;
|
||||
sBattleAnimScriptPtr++;
|
||||
gAnimFramesToWait = 0;
|
||||
sAnimFramesToWait = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3250,7 +3250,7 @@ void AnimTask_HeartsBackground(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
AnimLoadCompressedBgGfx(animBg.bgId, &gBattleAnimBgImage_Attract, animBg.tilesOffset);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_Attract, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_Attract, FALSE);
|
||||
LoadCompressedPalette(&gBattleAnimBgPalette_Attract, animBg.paletteId * 16, 32);
|
||||
gTasks[taskId].func = AnimTask_HeartsBackground_Step;
|
||||
}
|
||||
@ -3328,11 +3328,11 @@ void AnimTask_ScaryFace(u8 taskId)
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
if (IsContest())
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceContest, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceContest, FALSE);
|
||||
else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFacePlayer, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFacePlayer, FALSE);
|
||||
else
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceOpponent, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceOpponent, FALSE);
|
||||
|
||||
AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_ScaryFace, animBg.tilesOffset);
|
||||
LoadCompressedPalette(gBattleAnimBgPalette_ScaryFace, animBg.paletteId * 16, 32);
|
||||
|
@ -2388,7 +2388,7 @@ void AnimTask_MorningSunLightBeam(u8 taskId)
|
||||
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
|
||||
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimMaskTilemap_LightBeam, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimMaskTilemap_LightBeam, FALSE);
|
||||
if (IsContest())
|
||||
{
|
||||
gBattle_BG1_X = -56;
|
||||
@ -2569,7 +2569,7 @@ void AnimTask_DoomDesireLightBeam(u8 taskId)
|
||||
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
|
||||
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimMaskTilemap_LightBeam, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimMaskTilemap_LightBeam, FALSE);
|
||||
if (IsContest())
|
||||
{
|
||||
gBattle_BG1_X = -56;
|
||||
|
@ -1000,7 +1000,7 @@ void AnimTask_HazeScrollingFog(u8 taskId)
|
||||
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, FALSE);
|
||||
LoadPalette(&gFogPalette, animBg.paletteId * 16, 32);
|
||||
|
||||
gTasks[taskId].func = AnimTask_HazeScrollingFog_Step;
|
||||
@ -1105,7 +1105,7 @@ void AnimTask_LoadMistTiles(u8 taskId)
|
||||
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimFogTilemap, FALSE);
|
||||
LoadPalette(&gFogPalette, animBg.paletteId * 16, 32);
|
||||
|
||||
gTasks[taskId].data[15] = -1;
|
||||
|
@ -37,15 +37,15 @@ static void sub_80A8D78(struct Task *task, u8 taskId);
|
||||
EWRAM_DATA static union AffineAnimCmd *gAnimTaskAffineAnim = NULL;
|
||||
|
||||
// Const rom data
|
||||
static const struct UCoords8 sBattlerCoords[][4] =
|
||||
static const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] =
|
||||
{
|
||||
{
|
||||
{ // Single battle
|
||||
{ 72, 80 },
|
||||
{ 176, 40 },
|
||||
{ 48, 40 },
|
||||
{ 112, 80 },
|
||||
},
|
||||
{
|
||||
{ // Double battle
|
||||
{ 32, 80 },
|
||||
{ 200, 40 },
|
||||
{ 90, 88 },
|
||||
@ -54,29 +54,29 @@ static const struct UCoords8 sBattlerCoords[][4] =
|
||||
};
|
||||
|
||||
// One entry for each of the four Castform forms.
|
||||
const struct MonCoords gCastformFrontSpriteCoords[] =
|
||||
const struct MonCoords gCastformFrontSpriteCoords[NUM_CASTFORM_FORMS] =
|
||||
{
|
||||
{ .size = 0x44, .y_offset = 17 }, // NORMAL
|
||||
{ .size = 0x66, .y_offset = 9 }, // SUN
|
||||
{ .size = 0x46, .y_offset = 9 }, // RAIN
|
||||
{ .size = 0x86, .y_offset = 8 }, // HAIL
|
||||
[CASTFORM_NORMAL] = { .size = 0x44, .y_offset = 17 },
|
||||
[CASTFORM_FIRE] = { .size = 0x66, .y_offset = 9 },
|
||||
[CASTFORM_WATER] = { .size = 0x46, .y_offset = 9 },
|
||||
[CASTFORM_ICE] = { .size = 0x86, .y_offset = 8 },
|
||||
};
|
||||
|
||||
static const u8 sCastformElevations[] =
|
||||
static const u8 sCastformElevations[NUM_CASTFORM_FORMS] =
|
||||
{
|
||||
13, // NORMAL
|
||||
14, // SUN
|
||||
13, // RAIN
|
||||
13, // HAIL
|
||||
[CASTFORM_NORMAL] = 13,
|
||||
[CASTFORM_FIRE] = 14,
|
||||
[CASTFORM_WATER] = 13,
|
||||
[CASTFORM_ICE] = 13,
|
||||
};
|
||||
|
||||
// Y position of the backsprite for each of the four Castform forms.
|
||||
static const u8 sCastformBackSpriteYCoords[] =
|
||||
static const u8 sCastformBackSpriteYCoords[NUM_CASTFORM_FORMS] =
|
||||
{
|
||||
0, // NORMAL
|
||||
0, // SUN
|
||||
0, // RAIN
|
||||
0, // HAIL
|
||||
[CASTFORM_NORMAL] = 0,
|
||||
[CASTFORM_FIRE] = 0,
|
||||
[CASTFORM_WATER] = 0,
|
||||
[CASTFORM_ICE] = 0,
|
||||
};
|
||||
|
||||
// Placeholders for pokemon sprites to be created for a move animation effect (e.g. Role Play / Snatch)
|
||||
@ -853,8 +853,8 @@ void GetBattleAnimBg1Data(struct BattleAnimBgData *out)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
out->bgTiles = gUnknown_0202305C;
|
||||
out->bgTilemap = (u16 *)gUnknown_02023060;
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
out->paletteId = 14;
|
||||
out->bgId = 1;
|
||||
out->tilesOffset = 0;
|
||||
@ -862,8 +862,8 @@ void GetBattleAnimBg1Data(struct BattleAnimBgData *out)
|
||||
}
|
||||
else
|
||||
{
|
||||
out->bgTiles = gUnknown_0202305C;
|
||||
out->bgTilemap = (u16 *)gUnknown_02023060;
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
out->paletteId = 8;
|
||||
out->bgId = 1;
|
||||
out->tilesOffset = 0x200;
|
||||
@ -875,8 +875,8 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId)
|
||||
{
|
||||
if (IsContest())
|
||||
{
|
||||
out->bgTiles = gUnknown_0202305C;
|
||||
out->bgTilemap = (u16 *)gUnknown_02023060;
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
out->paletteId = 14;
|
||||
out->bgId = 1;
|
||||
out->tilesOffset = 0;
|
||||
@ -888,8 +888,8 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId)
|
||||
}
|
||||
else
|
||||
{
|
||||
out->bgTiles = gUnknown_0202305C;
|
||||
out->bgTilemap = (u16 *)gUnknown_02023060;
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
out->paletteId = 9;
|
||||
out->bgId = 2;
|
||||
out->tilesOffset = 0x300;
|
||||
@ -899,8 +899,8 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId)
|
||||
|
||||
void sub_80A6BFC(struct BattleAnimBgData *out, u8 unused)
|
||||
{
|
||||
out->bgTiles = gUnknown_0202305C;
|
||||
out->bgTilemap = (u16 *)gUnknown_02023060;
|
||||
out->bgTiles = gBattleAnimBgTileBuffer;
|
||||
out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer;
|
||||
if (IsContest())
|
||||
{
|
||||
out->paletteId = 14;
|
||||
@ -937,9 +937,9 @@ void ClearBattleAnimBg(u32 bgId)
|
||||
|
||||
void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset)
|
||||
{
|
||||
CpuFill32(0, gUnknown_0202305C, 0x2000);
|
||||
LZDecompressWram(src, gUnknown_0202305C);
|
||||
LoadBgTiles(bgId, gUnknown_0202305C, 0x2000, tilesOffset);
|
||||
CpuFill32(0, gBattleAnimBgTileBuffer, 0x2000);
|
||||
LZDecompressWram(src, gBattleAnimBgTileBuffer);
|
||||
LoadBgTiles(bgId, gBattleAnimBgTileBuffer, 0x2000, tilesOffset);
|
||||
}
|
||||
|
||||
static void InitAnimBgTilemapBuffer(u32 bgId, const void *src)
|
||||
@ -954,12 +954,12 @@ void AnimLoadCompressedBgTilemap(u32 bgId, const void *src)
|
||||
CopyBgTilemapBufferToVram(bgId);
|
||||
}
|
||||
|
||||
void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData *unk, const void *src, u32 arg2)
|
||||
void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData *data, const void *src, bool32 largeScreen)
|
||||
{
|
||||
InitAnimBgTilemapBuffer(unk->bgId, src);
|
||||
InitAnimBgTilemapBuffer(data->bgId, src);
|
||||
if (IsContest() == TRUE)
|
||||
sub_80A4720(unk->paletteId, unk->bgTilemap, 0, arg2);
|
||||
CopyBgTilemapBufferToVram(unk->bgId);
|
||||
RelocateBattleBgPal(data->paletteId, data->bgTilemap, 0, largeScreen);
|
||||
CopyBgTilemapBufferToVram(data->bgId);
|
||||
}
|
||||
|
||||
u8 GetBattleBgPaletteNum(void)
|
||||
@ -1947,7 +1947,8 @@ void AnimTask_GetFrustrationPowerLevel(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void sub_80A8174(u8 priority)
|
||||
// Unused
|
||||
static void SetPriorityForVisibleBattlers(u8 priority)
|
||||
{
|
||||
if (IsBattlerSpriteVisible(gBattleAnimTarget))
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].oam.priority = priority;
|
||||
@ -1959,7 +1960,7 @@ void sub_80A8174(u8 priority)
|
||||
gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority = priority;
|
||||
}
|
||||
|
||||
void sub_80A8278(void)
|
||||
void InitPrioritiesForVisibleBattlers(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -409,7 +409,7 @@ void AnimTask_LoadSandstormBackground(u8 taskId)
|
||||
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Sandstorm, animBg.tilesOffset);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Sandstorm, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Sandstorm, FALSE);
|
||||
LoadCompressedPalette(gBattleAnimSpritePal_FlyingDirt, animBg.paletteId * 16, 32);
|
||||
|
||||
if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
|
@ -331,7 +331,7 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId)
|
||||
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
newSpriteId = CreateInvisibleSpriteCopy(gBattleAnimAttacker, spriteId, species);
|
||||
GetBattleAnimBg1Data(&animBgData);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleAnimMaskTilemap_Curse, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleAnimMaskTilemap_Curse, FALSE);
|
||||
AnimLoadCompressedBgGfx(animBgData.bgId, gBattleAnimMaskImage_Curse, animBgData.tilesOffset);
|
||||
LoadPalette(sCurseLinesPalette, animBgData.paletteId * 16 + 1, 2);
|
||||
|
||||
@ -470,9 +470,9 @@ static void StatsChangeAnimation_Step2(u8 taskId)
|
||||
|
||||
GetBattleAnimBg1Data(&animBgData);
|
||||
if (sAnimStatsChangeData->data[0] == 0)
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask1_Tilemap, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask1_Tilemap, FALSE);
|
||||
else
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask2_Tilemap, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask2_Tilemap, FALSE);
|
||||
|
||||
AnimLoadCompressedBgGfx(animBgData.bgId, gBattleStatMask_Gfx, animBgData.tilesOffset);
|
||||
switch (sAnimStatsChangeData->data[1])
|
||||
@ -821,7 +821,7 @@ void StartMonScrollingBgMask(u8 taskId, int unused, u16 scrollSpeed, u8 battler,
|
||||
spriteId2 = CreateInvisibleSpriteCopy(battler2, gBattlerSpriteIds[battler2], species);
|
||||
|
||||
GetBattleAnimBg1Data(&animBgData);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBgData, tilemap, 0);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBgData, tilemap, FALSE);
|
||||
AnimLoadCompressedBgGfx(animBgData.bgId, gfx, animBgData.tilesOffset);
|
||||
LoadCompressedPalette(palette, animBgData.paletteId * 16, 32);
|
||||
|
||||
|
@ -54,9 +54,8 @@ static void AnimTask_WaterSport_Step(u8);
|
||||
static void CreateWaterSportDroplet(struct Task*);
|
||||
static void CreateWaterPulseRingBubbles(struct Sprite*, int, int);
|
||||
|
||||
// Both unused
|
||||
const u8 gUnknown_8593C80[] = INCBIN_U8("graphics/unknown/unknown_593C80.4bpp");
|
||||
const u8 gUnknown_8593FFC[] = INCBIN_U8("graphics/unknown/unknown_593FFC.bin");
|
||||
static const u8 sUnusedWater_Gfx[] = INCBIN_U8("graphics/battle_anims/unused_water_gfx.4bpp");
|
||||
static const u8 sUnusedWater[] = INCBIN_U8("graphics/battle_anims/unused_water.bin");
|
||||
|
||||
static const union AnimCmd sAnim_RainDrop[] =
|
||||
{
|
||||
@ -822,7 +821,7 @@ void AnimTask_CreateSurfWave(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_SurfContest, 1);
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_SurfContest, TRUE);
|
||||
}
|
||||
AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Surf, animBg.tilesOffset);
|
||||
if (gBattleAnimArgs[0] == 0)
|
||||
|
@ -594,8 +594,8 @@ static const struct WindowTemplate gBattleArenaWindowTemplates[] =
|
||||
|
||||
const struct WindowTemplate * const gBattleWindowTemplates[] =
|
||||
{
|
||||
gStandardBattleWindowTemplates,
|
||||
gBattleArenaWindowTemplates,
|
||||
[B_WIN_TYPE_NORMAL] = gStandardBattleWindowTemplates,
|
||||
[B_WIN_TYPE_ARENA] = gBattleArenaWindowTemplates,
|
||||
};
|
||||
|
||||
static const struct BattleBackground gBattleTerrainTable[] =
|
||||
@ -691,20 +691,19 @@ static const struct BattleBackground gBattleTerrainTable[] =
|
||||
},
|
||||
};
|
||||
|
||||
static void sub_8035648(void);
|
||||
static void CB2_UnusedBattleInit(void);
|
||||
|
||||
// Unused
|
||||
static void sub_8035608(void)
|
||||
static void UnusedBattleInit(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
ResetSpriteData();
|
||||
spriteId = CreateSprite(&gUnknown_0831AC88, 0, 0, 0);
|
||||
spriteId = CreateSprite(&gUnusedBattleInitSprite, 0, 0, 0);
|
||||
gSprites[spriteId].invisible = TRUE;
|
||||
SetMainCallback2(sub_8035648);
|
||||
SetMainCallback2(CB2_UnusedBattleInit);
|
||||
}
|
||||
|
||||
static void sub_8035648(void)
|
||||
static void CB2_UnusedBattleInit(void)
|
||||
{
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
@ -717,13 +716,13 @@ void BattleInitBgsAndWindows(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||
{
|
||||
gBattleScripting.windowsType = 1;
|
||||
SetBgTilemapBuffer(1, gUnknown_02023060);
|
||||
SetBgTilemapBuffer(2, gUnknown_02023060);
|
||||
gBattleScripting.windowsType = B_WIN_TYPE_ARENA;
|
||||
SetBgTilemapBuffer(1, gBattleAnimBgTilemapBuffer);
|
||||
SetBgTilemapBuffer(2, gBattleAnimBgTilemapBuffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleScripting.windowsType = 0;
|
||||
gBattleScripting.windowsType = B_WIN_TYPE_NORMAL;
|
||||
}
|
||||
|
||||
InitWindows(gBattleWindowTemplates[gBattleScripting.windowsType]);
|
||||
|
@ -251,16 +251,16 @@ static void HandleInputChooseAction(void)
|
||||
|
||||
switch (gActionSelectionCursor[gActiveBattler])
|
||||
{
|
||||
case 0:
|
||||
case B_ACTION_USE_MOVE:
|
||||
BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, 0);
|
||||
break;
|
||||
case 1:
|
||||
case B_ACTION_USE_ITEM:
|
||||
BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0);
|
||||
break;
|
||||
case 2:
|
||||
case B_ACTION_SWITCH:
|
||||
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
|
||||
break;
|
||||
case 3:
|
||||
case B_ACTION_RUN:
|
||||
BtlController_EmitTwoReturnValues(1, B_ACTION_RUN, 0);
|
||||
break;
|
||||
}
|
||||
@ -858,7 +858,7 @@ static void SetLinkBattleEndCallbacks(void)
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
m4aSongNumStop(SE_LOW_HEALTH);
|
||||
gMain.inBattle = 0;
|
||||
gMain.inBattle = FALSE;
|
||||
gMain.callback1 = gPreBattleCallback1;
|
||||
SetMainCallback2(CB2_InitEndLinkBattle);
|
||||
if (gBattleOutcome == B_OUTCOME_WON)
|
||||
@ -871,7 +871,7 @@ static void SetLinkBattleEndCallbacks(void)
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
m4aSongNumStop(SE_LOW_HEALTH);
|
||||
gMain.inBattle = 0;
|
||||
gMain.inBattle = FALSE;
|
||||
gMain.callback1 = gPreBattleCallback1;
|
||||
SetMainCallback2(CB2_InitEndLinkBattle);
|
||||
if (gBattleOutcome == B_OUTCOME_WON)
|
||||
@ -901,7 +901,7 @@ void SetBattleEndCallbacks(void)
|
||||
else
|
||||
{
|
||||
m4aSongNumStop(SE_LOW_HEALTH);
|
||||
gMain.inBattle = 0;
|
||||
gMain.inBattle = FALSE;
|
||||
gMain.callback1 = gPreBattleCallback1;
|
||||
SetMainCallback2(gMain.savedCallback);
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
|
||||
s32 i, var1, var2;
|
||||
s32 chosenMoveId = -1;
|
||||
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
|
||||
u8 unusableMovesBits = CheckMoveLimitations(gActiveBattler, 0, 0xFF);
|
||||
u8 unusableMovesBits = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL);
|
||||
s32 percent = Random() % 100;
|
||||
|
||||
// Heavy variable re-use here makes this hard to read without defines
|
||||
@ -438,9 +438,10 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 de
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
if (tableId == B_ANIM_CASTFORM_CHANGE && (argument & 0x80))
|
||||
if (tableId == B_ANIM_CASTFORM_CHANGE && (argument & CASTFORM_SUBSTITUTE))
|
||||
{
|
||||
gBattleMonForms[activeBattler] = (argument & ~(0x80));
|
||||
// If Castform is behind substitute, set the new form but skip the animation
|
||||
gBattleMonForms[activeBattler] = (argument & ~CASTFORM_SUBSTITUTE);
|
||||
return TRUE;
|
||||
}
|
||||
if (gBattleSpritesDataPtr->battlerData[activeBattler].behindSubstitute
|
||||
@ -593,7 +594,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
if (species == SPECIES_CASTFORM)
|
||||
{
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[CASTFORM_NORMAL]);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
|
||||
}
|
||||
|
||||
@ -656,7 +657,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
if (species == SPECIES_CASTFORM)
|
||||
{
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[CASTFORM_NORMAL]);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
|
||||
}
|
||||
|
||||
@ -895,7 +896,7 @@ void CopyBattleSpriteInvisibility(u8 battlerId)
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible;
|
||||
}
|
||||
|
||||
void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform)
|
||||
void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform)
|
||||
{
|
||||
u16 paletteOffset;
|
||||
u32 personalityValue;
|
||||
@ -903,7 +904,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform
|
||||
u8 position;
|
||||
const u32 *lzPaletteData;
|
||||
|
||||
if (notTransform)
|
||||
if (castform)
|
||||
{
|
||||
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleSpritesDataPtr->animationData->animArg);
|
||||
paletteOffset = 0x100 + battlerAtk * 16;
|
||||
@ -976,8 +977,8 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform
|
||||
if (targetSpecies == SPECIES_CASTFORM)
|
||||
{
|
||||
gSprites[gBattlerSpriteIds[battlerAtk]].anims = gMonFrontAnimsPtrTable[targetSpecies];
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
|
||||
LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[battlerDef] * 16, paletteOffset, 32);
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[CASTFORM_NORMAL]);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerDef]], paletteOffset, 32);
|
||||
}
|
||||
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
|
@ -584,36 +584,35 @@ static void BattleIntroSlidePartner(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset)
|
||||
void DrawBattlerOnBg(int bgId, u8 x, u8 y, u8 battlerPosition, u8 paletteId, u8 *tiles, u16 *tilemap, u16 tilesOffset)
|
||||
{
|
||||
int i, j;
|
||||
u8 battler = GetBattlerAtPosition(battlerPosition);
|
||||
int offset = tilesOffset;
|
||||
CpuCopy16(gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE);
|
||||
LoadBgTiles(bgId, arg5, 0x1000, tilesOffset);
|
||||
for (i = arg2; i < arg2 + 8; i++)
|
||||
CpuCopy16(gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], tiles, BG_SCREEN_SIZE);
|
||||
LoadBgTiles(bgId, tiles, 0x1000, tilesOffset);
|
||||
for (i = y; i < y + 8; i++)
|
||||
{
|
||||
for (j = arg1; j < arg1 + 8; j++)
|
||||
for (j = x; j < x + 8; j++)
|
||||
{
|
||||
arg6[i * 32 + j] = offset | (arg4 << 12);
|
||||
tilemap[i * 32 + j] = offset | (paletteId << 12);
|
||||
offset++;
|
||||
}
|
||||
}
|
||||
|
||||
LoadBgTilemap(bgId, arg6, BG_SCREEN_SIZE, 0);
|
||||
LoadBgTilemap(bgId, tilemap, BG_SCREEN_SIZE, 0);
|
||||
}
|
||||
|
||||
void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7)
|
||||
static void DrawBattlerOnBgDMA(u8 x, u8 y, u8 battlerPosition, u8 arg3, u8 paletteId, u16 arg5, u8 arg6, u8 arg7)
|
||||
{
|
||||
int i, j, offset;
|
||||
|
||||
DmaCopy16(3, gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE);
|
||||
offset = (arg5 >> 5) - (arg7 << 9);
|
||||
for (i = arg1; i < arg1 + 8; i++)
|
||||
for (i = y; i < y + 8; i++)
|
||||
{
|
||||
for (j = arg0; j < arg0 + 8; j++)
|
||||
for (j = x; j < x + 8; j++)
|
||||
{
|
||||
*((u16 *)(BG_VRAM) + (i * 32) + (j + (arg6 << 10))) = offset | (arg4 << 12);
|
||||
*((u16 *)(BG_VRAM) + (i * 32) + (j + (arg6 << 10))) = offset | (paletteId << 12);
|
||||
offset++;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2053,7 +2053,8 @@ static const struct BattleWindowText sTextOnWindowsInfo_Arena[] =
|
||||
|
||||
static const struct BattleWindowText *const sBattleTextOnWindowsInfo[] =
|
||||
{
|
||||
sTextOnWindowsInfo_Normal, sTextOnWindowsInfo_Arena
|
||||
[B_WIN_TYPE_NORMAL] = sTextOnWindowsInfo_Normal,
|
||||
[B_WIN_TYPE_ARENA] = sTextOnWindowsInfo_Arena
|
||||
};
|
||||
|
||||
static const u8 sRecordedBattleTextSpeeds[] = {8, 4, 1, 0};
|
||||
|
@ -1834,8 +1834,8 @@ static void Cmd_datahpupdate(void)
|
||||
|
||||
if (gBattleStruct->dynamicMoveType == 0)
|
||||
moveType = gBattleMoves[gCurrentMove].type;
|
||||
else if (!(gBattleStruct->dynamicMoveType & 0x40))
|
||||
moveType = gBattleStruct->dynamicMoveType & 0x3F;
|
||||
else if (!(gBattleStruct->dynamicMoveType & F_DYNAMIC_TYPE_1))
|
||||
moveType = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK;
|
||||
else
|
||||
moveType = gBattleMoves[gCurrentMove].type;
|
||||
|
||||
@ -3489,6 +3489,8 @@ static void Cmd_getexp(void)
|
||||
}
|
||||
}
|
||||
|
||||
// For battles that aren't BATTLE_TYPE_LINK or BATTLE_TYPE_RECORDED_LINK, the only thing this
|
||||
// command does is check whether the player has won/lost by totaling each team's HP
|
||||
static void Cmd_unknown_24(void)
|
||||
{
|
||||
u16 HP_count = 0;
|
||||
@ -3497,11 +3499,14 @@ static void Cmd_unknown_24(void)
|
||||
if (gBattleControllerExecFlags)
|
||||
return;
|
||||
|
||||
// Get total HP for the player's party to determine if the player has lost
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
|
||||
{
|
||||
// In multi battle with Steven, skip his Pokémon
|
||||
for (i = 0; i < MULTI_PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)
|
||||
&& !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
|
||||
HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
|
||||
}
|
||||
}
|
||||
@ -3509,28 +3514,30 @@ static void Cmd_unknown_24(void)
|
||||
{
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)
|
||||
&& (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostPlayerMons & gBitTable[i])))
|
||||
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)
|
||||
&& !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)
|
||||
&& (!(gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||
|| !(gBattleStruct->arenaLostPlayerMons & gBitTable[i])))
|
||||
{
|
||||
HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (HP_count == 0)
|
||||
gBattleOutcome |= B_OUTCOME_LOST;
|
||||
|
||||
HP_count = 0;
|
||||
|
||||
// Get total HP for the enemy's party to determine if the player has won
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG)
|
||||
&& (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i])))
|
||||
if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES)
|
||||
&& !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG)
|
||||
&& (!(gBattleTypeFlags & BATTLE_TYPE_ARENA)
|
||||
|| !(gBattleStruct->arenaLostOpponentMons & gBitTable[i])))
|
||||
{
|
||||
HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP);
|
||||
}
|
||||
}
|
||||
|
||||
if (HP_count == 0)
|
||||
gBattleOutcome |= B_OUTCOME_WON;
|
||||
|
||||
@ -4844,7 +4851,7 @@ static void Cmd_openpartyscreen(void)
|
||||
else if (!gSpecialStatuses[gActiveBattler].flag40)
|
||||
{
|
||||
ChooseMonToSendOut(PARTY_SIZE);
|
||||
gSpecialStatuses[gActiveBattler].flag40 = 1;
|
||||
gSpecialStatuses[gActiveBattler].flag40 = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -4873,7 +4880,7 @@ static void Cmd_openpartyscreen(void)
|
||||
else if (!gSpecialStatuses[gActiveBattler].flag40)
|
||||
{
|
||||
ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[2]);
|
||||
gSpecialStatuses[gActiveBattler].flag40 = 1;
|
||||
gSpecialStatuses[gActiveBattler].flag40 = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4895,7 +4902,7 @@ static void Cmd_openpartyscreen(void)
|
||||
else if (!gSpecialStatuses[gActiveBattler].flag40)
|
||||
{
|
||||
ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[0]);
|
||||
gSpecialStatuses[gActiveBattler].flag40 = 1;
|
||||
gSpecialStatuses[gActiveBattler].flag40 = TRUE;
|
||||
}
|
||||
else if (!(flags & 1))
|
||||
{
|
||||
@ -4916,7 +4923,7 @@ static void Cmd_openpartyscreen(void)
|
||||
else if (!gSpecialStatuses[gActiveBattler].flag40)
|
||||
{
|
||||
ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[3]);
|
||||
gSpecialStatuses[gActiveBattler].flag40 = 1;
|
||||
gSpecialStatuses[gActiveBattler].flag40 = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4938,7 +4945,7 @@ static void Cmd_openpartyscreen(void)
|
||||
else if (!gSpecialStatuses[gActiveBattler].flag40)
|
||||
{
|
||||
ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[1]);
|
||||
gSpecialStatuses[gActiveBattler].flag40 = 1;
|
||||
gSpecialStatuses[gActiveBattler].flag40 = TRUE;
|
||||
}
|
||||
else if (!(flags & 2))
|
||||
{
|
||||
@ -5001,7 +5008,7 @@ static void Cmd_openpartyscreen(void)
|
||||
else if (!gSpecialStatuses[gActiveBattler].flag40)
|
||||
{
|
||||
ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[0]);
|
||||
gSpecialStatuses[gActiveBattler].flag40 = 1;
|
||||
gSpecialStatuses[gActiveBattler].flag40 = TRUE;
|
||||
}
|
||||
}
|
||||
if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1])
|
||||
@ -5017,7 +5024,7 @@ static void Cmd_openpartyscreen(void)
|
||||
else if (!gSpecialStatuses[gActiveBattler].flag40)
|
||||
{
|
||||
ChooseMonToSendOut(gBattleStruct->monToSwitchIntoId[1]);
|
||||
gSpecialStatuses[gActiveBattler].flag40 = 1;
|
||||
gSpecialStatuses[gActiveBattler].flag40 = TRUE;
|
||||
}
|
||||
}
|
||||
gBattlescriptCurrInstr += 6;
|
||||
@ -5175,7 +5182,7 @@ static void Cmd_switchineffects(void)
|
||||
UpdateSentPokesToOpponentValue(gActiveBattler);
|
||||
|
||||
gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler);
|
||||
gSpecialStatuses[gActiveBattler].flag40 = 0;
|
||||
gSpecialStatuses[gActiveBattler].flag40 = FALSE;
|
||||
|
||||
if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED)
|
||||
&& (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES)
|
||||
@ -5230,7 +5237,7 @@ static void Cmd_switchineffects(void)
|
||||
*hpOnSwitchout = gBattleMons[i].hp;
|
||||
}
|
||||
|
||||
if (gBattlescriptCurrInstr[1] == 5)
|
||||
if (gBattlescriptCurrInstr[1] == BS_UNK_5)
|
||||
{
|
||||
u32 hitmarkerFaintBits = gHitMarker >> 28;
|
||||
|
||||
@ -6282,7 +6289,7 @@ static void Cmd_various(void)
|
||||
gBattleCommunication[0] = IsRunningFromBattleImpossible();
|
||||
break;
|
||||
case VARIOUS_GET_MOVE_TARGET:
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
|
||||
break;
|
||||
case VARIOUS_GET_BATTLER_FAINTED:
|
||||
if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
|
||||
@ -6597,7 +6604,7 @@ static void Cmd_trymirrormove(void)
|
||||
{
|
||||
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
|
||||
gCurrentMove = move;
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
|
||||
gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
|
||||
}
|
||||
else if (validMovesCount)
|
||||
@ -6605,7 +6612,7 @@ static void Cmd_trymirrormove(void)
|
||||
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
|
||||
i = Random() % validMovesCount;
|
||||
gCurrentMove = movesArray[i];
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
|
||||
gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
|
||||
}
|
||||
else
|
||||
@ -7805,7 +7812,7 @@ static void Cmd_metronome(void)
|
||||
{
|
||||
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
|
||||
gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -8154,7 +8161,7 @@ static void Cmd_trychoosesleeptalkmove(void)
|
||||
gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition];
|
||||
gCurrMovePos = movePosition;
|
||||
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
|
||||
gBattlerTarget = GetMoveTarget(gCalledMove, 0);
|
||||
gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE);
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
}
|
||||
}
|
||||
@ -8758,17 +8765,14 @@ static void Cmd_recoverbasedonsunlight(void)
|
||||
|
||||
static void Cmd_hiddenpowercalc(void)
|
||||
{
|
||||
u8 powerBits;
|
||||
u8 typeBits;
|
||||
|
||||
powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1)
|
||||
u8 powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1)
|
||||
| ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0)
|
||||
| ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1)
|
||||
| ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2)
|
||||
| ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3)
|
||||
| ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4);
|
||||
|
||||
typeBits = ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0)
|
||||
u8 typeBits = ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0)
|
||||
| ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1)
|
||||
| ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2)
|
||||
| ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3)
|
||||
@ -8777,10 +8781,12 @@ static void Cmd_hiddenpowercalc(void)
|
||||
|
||||
gDynamicBasePower = (40 * powerBits) / 63 + 30;
|
||||
|
||||
gBattleStruct->dynamicMoveType = (15 * typeBits) / 63 + 1;
|
||||
// Subtract 3 instead of 1 below because 2 types are excluded (TYPE_NORMAL and TYPE_MYSTERY)
|
||||
// The final + 1 skips past Normal, and the following conditional skips TYPE_MYSTERY
|
||||
gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 3) * typeBits) / 63 + 1;
|
||||
if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY)
|
||||
gBattleStruct->dynamicMoveType++;
|
||||
gBattleStruct->dynamicMoveType |= 0xC0;
|
||||
gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_1 | F_DYNAMIC_TYPE_2;
|
||||
|
||||
gBattlescriptCurrInstr++;
|
||||
}
|
||||
@ -8972,7 +8978,7 @@ static void Cmd_callterrainattack(void) // nature power
|
||||
{
|
||||
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
|
||||
gCurrentMove = sNaturePowerMoves[gBattleTerrain];
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, 0);
|
||||
gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
|
||||
BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
|
||||
gBattlescriptCurrInstr++;
|
||||
}
|
||||
@ -9382,7 +9388,7 @@ static void Cmd_assistattackselect(void)
|
||||
{
|
||||
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
|
||||
gCalledMove = movesArray[((Random() & 0xFF) * chooseableMovesNo) >> 8];
|
||||
gBattlerTarget = GetMoveTarget(gCalledMove, 0);
|
||||
gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE);
|
||||
gBattlescriptCurrInstr += 5;
|
||||
}
|
||||
else
|
||||
@ -9527,7 +9533,7 @@ static void Cmd_pickup(void)
|
||||
ability = gBaseStats[species].abilities[0];
|
||||
|
||||
if (ability == ABILITY_PICKUP
|
||||
&& species != 0
|
||||
&& species != SPECIES_NONE
|
||||
&& species != SPECIES_EGG
|
||||
&& heldItem == ITEM_NONE
|
||||
&& (Random() % 10) == 0)
|
||||
@ -9550,7 +9556,7 @@ static void Cmd_pickup(void)
|
||||
ability = gBaseStats[species].abilities[0];
|
||||
|
||||
if (ability == ABILITY_PICKUP
|
||||
&& species != 0
|
||||
&& species != SPECIES_NONE
|
||||
&& species != SPECIES_EGG
|
||||
&& heldItem == ITEM_NONE
|
||||
&& (Random() % 10) == 0)
|
||||
@ -9586,7 +9592,7 @@ static void Cmd_docastformchangeanimation(void)
|
||||
gActiveBattler = gBattleScripting.battler;
|
||||
|
||||
if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE)
|
||||
*(&gBattleStruct->formToChangeInto) |= 0x80;
|
||||
*(&gBattleStruct->formToChangeInto) |= CASTFORM_SUBSTITUTE;
|
||||
|
||||
BtlController_EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, gBattleStruct->formToChangeInto);
|
||||
MarkBattlerForControllerExec(gActiveBattler);
|
||||
@ -9643,15 +9649,15 @@ static void Cmd_setweatherballtype(void)
|
||||
if (gBattleWeather & B_WEATHER_ANY)
|
||||
gBattleScripting.dmgMultiplier = 2;
|
||||
if (gBattleWeather & B_WEATHER_RAIN)
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_WATER | 0x80;
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_WATER | F_DYNAMIC_TYPE_2;
|
||||
else if (gBattleWeather & B_WEATHER_SANDSTORM)
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_ROCK | 0x80;
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_ROCK | F_DYNAMIC_TYPE_2;
|
||||
else if (gBattleWeather & B_WEATHER_SUN)
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_FIRE | 0x80;
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_FIRE | F_DYNAMIC_TYPE_2;
|
||||
else if (gBattleWeather & B_WEATHER_HAIL)
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_ICE | 0x80;
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_ICE | F_DYNAMIC_TYPE_2;
|
||||
else
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_NORMAL | 0x80;
|
||||
*(&gBattleStruct->dynamicMoveType) = TYPE_NORMAL | F_DYNAMIC_TYPE_2;
|
||||
}
|
||||
|
||||
gBattlescriptCurrInstr++;
|
||||
@ -9663,10 +9669,10 @@ static void Cmd_tryrecycleitem(void)
|
||||
|
||||
gActiveBattler = gBattlerAttacker;
|
||||
usedHeldItem = &gBattleStruct->usedHeldItems[gActiveBattler];
|
||||
if (*usedHeldItem != 0 && gBattleMons[gActiveBattler].item == 0)
|
||||
if (*usedHeldItem != ITEM_NONE && gBattleMons[gActiveBattler].item == ITEM_NONE)
|
||||
{
|
||||
gLastUsedItem = *usedHeldItem;
|
||||
*usedHeldItem = 0;
|
||||
*usedHeldItem = ITEM_NONE;
|
||||
gBattleMons[gActiveBattler].item = gLastUsedItem;
|
||||
|
||||
BtlController_EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBattler].item);
|
||||
@ -9704,7 +9710,7 @@ static void Cmd_pursuitrelated(void)
|
||||
&& gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_MOVE
|
||||
&& gChosenMoveByBattler[gActiveBattler] == MOVE_PURSUIT)
|
||||
{
|
||||
gActionsByTurnOrder[gActiveBattler] = 11;
|
||||
gActionsByTurnOrder[gActiveBattler] = B_ACTION_TRY_FINISH;
|
||||
gCurrentMove = MOVE_PURSUIT;
|
||||
gBattlescriptCurrInstr += 5;
|
||||
gBattleScripting.animTurn = 1;
|
||||
@ -9849,7 +9855,7 @@ static void Cmd_handleballthrow(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL] < 0xFF)
|
||||
if (gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL] < 255)
|
||||
gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL]++;
|
||||
}
|
||||
}
|
||||
|
@ -319,7 +319,7 @@ const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] =
|
||||
[REMATCH_TRENT] = REMATCH(TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5, ROUTE112),
|
||||
[REMATCH_SAWYER] = REMATCH(TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5, MT_CHIMNEY),
|
||||
[REMATCH_KIRA_AND_DAN] = REMATCH(TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5, ABANDONED_SHIP_ROOMS2_1F),
|
||||
[REMATCH_WALLY_3] = REMATCH(TRAINER_WALLY_VR_2, TRAINER_WALLY_VR_3, TRAINER_WALLY_VR_4, TRAINER_WALLY_VR_5, TRAINER_WALLY_VR_5, VICTORY_ROAD_1F),
|
||||
[REMATCH_WALLY_VR] = REMATCH(TRAINER_WALLY_VR_2, TRAINER_WALLY_VR_3, TRAINER_WALLY_VR_4, TRAINER_WALLY_VR_5, TRAINER_WALLY_VR_5, VICTORY_ROAD_1F),
|
||||
[REMATCH_ROXANNE] = REMATCH(TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5, RUSTBORO_CITY),
|
||||
[REMATCH_BRAWLY] = REMATCH(TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5, DEWFORD_TOWN),
|
||||
[REMATCH_WATTSON] = REMATCH(TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5, MAUVILLE_CITY),
|
||||
@ -460,12 +460,12 @@ static void DoTrainerBattle(void)
|
||||
TryUpdateGymLeaderRematchFromTrainer();
|
||||
}
|
||||
|
||||
static void sub_80B0828(void)
|
||||
static void DoBattlePyramidTrainerHillBattle(void)
|
||||
{
|
||||
if (InBattlePyramid())
|
||||
CreateBattleStartTask(GetSpecialBattleTransition(10), 0);
|
||||
CreateBattleStartTask(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PYRAMID), 0);
|
||||
else
|
||||
CreateBattleStartTask(GetSpecialBattleTransition(11), 0);
|
||||
CreateBattleStartTask(GetSpecialBattleTransition(B_TRANSITION_GROUP_TRAINER_HILL), 0);
|
||||
|
||||
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
|
||||
IncrementGameStat(GAME_STAT_TRAINER_BATTLES);
|
||||
@ -853,16 +853,7 @@ static u8 GetTrainerBattleTransition(void)
|
||||
return sBattleTransitionTable_Trainer[transitionType][1];
|
||||
}
|
||||
|
||||
// 0: Battle Tower
|
||||
// 3: Battle Dome
|
||||
// 4: Battle Palace
|
||||
// 5: Battle Arena
|
||||
// 6: Battle Factory
|
||||
// 7: Battle Pike
|
||||
// 10: Battle Pyramid
|
||||
// 11: Trainer Hill
|
||||
// 12: Secret Base
|
||||
// 13: E-Reader
|
||||
#define RANDOM_TRANSITION(table)(table[Random() % ARRAY_COUNT(table)])
|
||||
u8 GetSpecialBattleTransition(s32 id)
|
||||
{
|
||||
u16 var;
|
||||
@ -873,35 +864,35 @@ u8 GetSpecialBattleTransition(s32 id)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case B_TRANSITION_GROUP_TRAINER_HILL:
|
||||
case B_TRANSITION_GROUP_SECRET_BASE:
|
||||
case B_TRANSITION_GROUP_E_READER:
|
||||
return B_TRANSITION_POKEBALLS_TRAIL;
|
||||
case 10:
|
||||
return sBattleTransitionTable_BattlePyramid[Random() % ARRAY_COUNT(sBattleTransitionTable_BattlePyramid)];
|
||||
case 3:
|
||||
return sBattleTransitionTable_BattleDome[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleDome)];
|
||||
case B_TRANSITION_GROUP_B_PYRAMID:
|
||||
return RANDOM_TRANSITION(sBattleTransitionTable_BattlePyramid);
|
||||
case B_TRANSITION_GROUP_B_DOME:
|
||||
return RANDOM_TRANSITION(sBattleTransitionTable_BattleDome);
|
||||
}
|
||||
|
||||
if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS)
|
||||
return sBattleTransitionTable_BattleFrontier[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)];
|
||||
return RANDOM_TRANSITION(sBattleTransitionTable_BattleFrontier);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case B_TRANSITION_GROUP_TRAINER_HILL:
|
||||
case B_TRANSITION_GROUP_SECRET_BASE:
|
||||
case B_TRANSITION_GROUP_E_READER:
|
||||
return B_TRANSITION_BIG_POKEBALL;
|
||||
case 10:
|
||||
return sBattleTransitionTable_BattlePyramid[Random() % ARRAY_COUNT(sBattleTransitionTable_BattlePyramid)];
|
||||
case 3:
|
||||
return sBattleTransitionTable_BattleDome[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleDome)];
|
||||
case B_TRANSITION_GROUP_B_PYRAMID:
|
||||
return RANDOM_TRANSITION(sBattleTransitionTable_BattlePyramid);
|
||||
case B_TRANSITION_GROUP_B_DOME:
|
||||
return RANDOM_TRANSITION(sBattleTransitionTable_BattleDome);
|
||||
}
|
||||
|
||||
if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS)
|
||||
return sBattleTransitionTable_BattleFrontier[Random() % ARRAY_COUNT(sBattleTransitionTable_BattleFrontier)];
|
||||
return RANDOM_TRANSITION(sBattleTransitionTable_BattleFrontier);
|
||||
}
|
||||
|
||||
var = gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum * 2 + 0]
|
||||
@ -1319,7 +1310,7 @@ void BattleSetup_StartTrainerBattle(void)
|
||||
gMain.savedCallback = CB2_EndTrainerBattle;
|
||||
|
||||
if (InBattlePyramid() || InTrainerHillChallenge())
|
||||
sub_80B0828();
|
||||
DoBattlePyramidTrainerHillBattle();
|
||||
else
|
||||
DoTrainerBattle();
|
||||
|
||||
@ -1575,12 +1566,14 @@ static s32 TrainerIdToRematchTableId(const struct RematchTrainer *table, u16 tra
|
||||
return -1;
|
||||
}
|
||||
|
||||
static bool32 sub_80B1D94(s32 rematchTableId)
|
||||
// Returns TRUE if the given trainer (by their entry in the rematch table) is not allowed to have rematches.
|
||||
// This applies to the Elite Four and Victory Road Wally (if he's not been defeated yet)
|
||||
static bool32 IsRematchForbidden(s32 rematchTableId)
|
||||
{
|
||||
if (rematchTableId >= REMATCH_ELITE_FOUR_ENTRIES)
|
||||
return TRUE;
|
||||
else if (rematchTableId == REMATCH_WALLY_3)
|
||||
return (FlagGet(FLAG_DEFEATED_WALLY_VICTORY_ROAD) == FALSE);
|
||||
else if (rematchTableId == REMATCH_WALLY_VR)
|
||||
return !FlagGet(FLAG_DEFEATED_WALLY_VICTORY_ROAD);
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
@ -1609,7 +1602,7 @@ static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u
|
||||
|
||||
for (i = 0; i <= REMATCH_SPECIAL_TRAINER_START; i++)
|
||||
{
|
||||
if (table[i].mapGroup == mapGroup && table[i].mapNum == mapNum && !sub_80B1D94(i))
|
||||
if (table[i].mapGroup == mapGroup && table[i].mapNum == mapNum && !IsRematchForbidden(i))
|
||||
{
|
||||
if (gSaveBlock1Ptr->trainerRematches[i] != 0)
|
||||
{
|
||||
|
@ -2025,7 +2025,7 @@ void DoSpecialTrainerBattle(void)
|
||||
}
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(0));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_TOWER));
|
||||
break;
|
||||
case SPECIAL_BATTLE_SECRET_BASE:
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
@ -2035,7 +2035,7 @@ void DoSpecialTrainerBattle(void)
|
||||
}
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(12));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_SECRET_BASE));
|
||||
break;
|
||||
case SPECIAL_BATTLE_EREADER:
|
||||
ZeroEnemyPartyMons();
|
||||
@ -2045,7 +2045,7 @@ void DoSpecialTrainerBattle(void)
|
||||
gTrainerBattleOpponent_A = 0;
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(13));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_E_READER));
|
||||
break;
|
||||
case SPECIAL_BATTLE_DOME:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOME;
|
||||
@ -2055,7 +2055,7 @@ void DoSpecialTrainerBattle(void)
|
||||
FillFrontierTrainerParty(DOME_BATTLE_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
CreateTask_PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(3));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_DOME));
|
||||
break;
|
||||
case SPECIAL_BATTLE_PALACE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE;
|
||||
@ -2067,7 +2067,7 @@ void DoSpecialTrainerBattle(void)
|
||||
FillTentTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(4));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PALACE));
|
||||
break;
|
||||
case SPECIAL_BATTLE_ARENA:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_ARENA;
|
||||
@ -2077,7 +2077,7 @@ void DoSpecialTrainerBattle(void)
|
||||
FillTentTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(5));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_ARENA));
|
||||
break;
|
||||
case SPECIAL_BATTLE_FACTORY:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_FACTORY;
|
||||
@ -2086,28 +2086,28 @@ void DoSpecialTrainerBattle(void)
|
||||
FillFactoryTrainerParty();
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(6));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_FACTORY));
|
||||
break;
|
||||
case SPECIAL_BATTLE_PIKE_SINGLE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER;
|
||||
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(7));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PIKE));
|
||||
break;
|
||||
case SPECIAL_BATTLE_PYRAMID:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID;
|
||||
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(10));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PYRAMID));
|
||||
break;
|
||||
case SPECIAL_BATTLE_PIKE_DOUBLE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS;
|
||||
FillFrontierTrainersParties(1);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(7));
|
||||
BattleTransition_StartOnField(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PIKE));
|
||||
break;
|
||||
case SPECIAL_BATTLE_STEVEN:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -34,8 +34,8 @@ void AllocateBattleResources(void)
|
||||
gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
||||
gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
||||
|
||||
gUnknown_0202305C = AllocZeroed(0x2000);
|
||||
gUnknown_02023060 = AllocZeroed(0x1000);
|
||||
gBattleAnimBgTileBuffer = AllocZeroed(0x2000);
|
||||
gBattleAnimBgTilemapBuffer = AllocZeroed(0x1000);
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
|
||||
{
|
||||
@ -66,8 +66,8 @@ void FreeBattleResources(void)
|
||||
FREE_AND_SET_NULL(gLinkBattleSendBuffer);
|
||||
FREE_AND_SET_NULL(gLinkBattleRecvBuffer);
|
||||
|
||||
FREE_AND_SET_NULL(gUnknown_0202305C);
|
||||
FREE_AND_SET_NULL(gUnknown_02023060);
|
||||
FREE_AND_SET_NULL(gBattleAnimBgTileBuffer);
|
||||
FREE_AND_SET_NULL(gBattleAnimBgTilemapBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1136,9 +1136,9 @@ static void AllocContestResources(void)
|
||||
gContestResources->contestBgTilemaps[3] = AllocZeroed(0x1000);
|
||||
gContestResources->boxBlinkTiles1 = AllocZeroed(0x800);
|
||||
gContestResources->boxBlinkTiles2 = AllocZeroed(0x800);
|
||||
gContestResources->field_3c = AllocZeroed(0x2000);
|
||||
gUnknown_0202305C = gContestResources->field_3c;
|
||||
gUnknown_02023060 = gContestResources->contestBgTilemaps[1];
|
||||
gContestResources->animBgTileBuffer = AllocZeroed(0x2000);
|
||||
gBattleAnimBgTileBuffer = gContestResources->animBgTileBuffer;
|
||||
gBattleAnimBgTilemapBuffer = gContestResources->contestBgTilemaps[1];
|
||||
}
|
||||
|
||||
static void FreeContestResources(void)
|
||||
@ -1158,10 +1158,10 @@ static void FreeContestResources(void)
|
||||
FREE_AND_SET_NULL(gContestResources->contestBgTilemaps[3]);
|
||||
FREE_AND_SET_NULL(gContestResources->boxBlinkTiles1);
|
||||
FREE_AND_SET_NULL(gContestResources->boxBlinkTiles2);
|
||||
FREE_AND_SET_NULL(gContestResources->field_3c);
|
||||
FREE_AND_SET_NULL(gContestResources->animBgTileBuffer);
|
||||
FREE_AND_SET_NULL(gContestResources);
|
||||
gUnknown_0202305C = NULL;
|
||||
gUnknown_02023060 = NULL;
|
||||
gBattleAnimBgTileBuffer = NULL;
|
||||
gBattleAnimBgTilemapBuffer = NULL;
|
||||
}
|
||||
|
||||
void CB2_StartContest(void)
|
||||
|
@ -454,7 +454,7 @@ const u8 *const gMatchCallFlavorTexts[REMATCH_TABLE_ENTRIES][CHECK_PAGE_ENTRY_CO
|
||||
[REMATCH_TRENT] = MCFLAVOR(Hiker_Trent),
|
||||
[REMATCH_SAWYER] = MCFLAVOR(Hiker_Sawyer),
|
||||
[REMATCH_KIRA_AND_DAN] = MCFLAVOR(YoungCouple_LoisAndHal),
|
||||
[REMATCH_WALLY_3] = MCFLAVOR(PkmnTrainer_Wally),
|
||||
[REMATCH_WALLY_VR] = MCFLAVOR(PkmnTrainer_Wally),
|
||||
[REMATCH_ROXANNE] = MCFLAVOR(RockinWhiz_Roxanne),
|
||||
[REMATCH_BRAWLY] = MCFLAVOR(TheBigHit_Brawly),
|
||||
[REMATCH_WATTSON] = MCFLAVOR(SwellShock_Wattson),
|
||||
|
@ -944,7 +944,7 @@ static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor)
|
||||
static void DisplayPartyPokemonDataForMultiBattle(u8 slot)
|
||||
{
|
||||
struct PartyMenuBox *menuBox = &sPartyMenuBoxes[slot];
|
||||
u8 actualSlot = slot - (3);
|
||||
u8 actualSlot = slot - MULTI_PARTY_SIZE;
|
||||
|
||||
if (gMultiPartnerParty[actualSlot].species == SPECIES_NONE)
|
||||
{
|
||||
@ -6103,7 +6103,7 @@ static void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId)
|
||||
s16 *data = gTasks[taskId].data;
|
||||
u8 i;
|
||||
|
||||
for (i = 3; i < PARTY_SIZE; i++)
|
||||
for (i = MULTI_PARTY_SIZE; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (gMultiPartnerParty[i - MULTI_PARTY_SIZE].species != SPECIES_NONE)
|
||||
{
|
||||
|
@ -801,9 +801,9 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], BATTLER_AFFINE_EMERGE);
|
||||
|
||||
if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT)
|
||||
gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCb_OpponentMonFromBall;
|
||||
gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCB_OpponentMonFromBall;
|
||||
else
|
||||
gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCb_PlayerMonFromBall;
|
||||
gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCB_PlayerMonFromBall;
|
||||
|
||||
AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
|
||||
gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000;
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/battle_move_effects.h"
|
||||
#include "constants/battle_script_commands.h"
|
||||
#include "constants/hold_effects.h"
|
||||
#include "constants/item_effects.h"
|
||||
#include "constants/items.h"
|
||||
@ -3103,7 +3104,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
|
||||
if (!typeOverride)
|
||||
type = gBattleMoves[move].type;
|
||||
else
|
||||
type = typeOverride & 0x3F;
|
||||
type = typeOverride & DYNAMIC_TYPE_MASK;
|
||||
|
||||
attack = attacker->attack;
|
||||
defense = defender->defense;
|
||||
|
@ -336,7 +336,7 @@ static const struct MatchCallWally sWallyMatchCallHeader =
|
||||
.type = MC_TYPE_WALLY,
|
||||
.mapSec = 0,
|
||||
.flag = FLAG_ENABLE_WALLY_MATCH_CALL,
|
||||
.rematchTableIdx = REMATCH_WALLY_3,
|
||||
.rematchTableIdx = REMATCH_WALLY_VR,
|
||||
.desc = gText_WallyMatchCallDesc,
|
||||
.textData = sWallyTextScripts,
|
||||
.locationData = sWallyLocationData
|
||||
|
@ -65,7 +65,7 @@ struct RecordedBattleSave
|
||||
u8 recordMixFriendName[PLAYER_NAME_LENGTH + 1];
|
||||
u8 recordMixFriendClass;
|
||||
u8 apprenticeId;
|
||||
u16 easyChatSpeech[6];
|
||||
u16 easyChatSpeech[EASY_CHAT_BATTLE_WORDS_COUNT];
|
||||
u8 recordMixFriendLanguage;
|
||||
u8 apprenticeLanguage;
|
||||
u8 battleRecord[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE];
|
||||
@ -93,11 +93,11 @@ EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0};
|
||||
EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0};
|
||||
EWRAM_DATA static u16 sPlayerMonMoves[2][MAX_MON_MOVES] = {0};
|
||||
EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA static bool8 sUnknown_0203CCD0 = 0;
|
||||
EWRAM_DATA static bool8 sIsPlaybackFinished = 0;
|
||||
EWRAM_DATA static u8 sRecordMixFriendName[PLAYER_NAME_LENGTH + 1] = {0};
|
||||
EWRAM_DATA static u8 sRecordMixFriendClass = 0;
|
||||
EWRAM_DATA static u8 sApprenticeId = 0;
|
||||
EWRAM_DATA static u16 sEasyChatSpeech[6] = {0};
|
||||
EWRAM_DATA static u16 sEasyChatSpeech[EASY_CHAT_BATTLE_WORDS_COUNT] = {0};
|
||||
EWRAM_DATA static u8 sBattleOutcome = 0;
|
||||
|
||||
static u8 sRecordMixFriendLanguage;
|
||||
@ -113,7 +113,7 @@ void RecordedBattle_Init(u8 mode)
|
||||
s32 i, j;
|
||||
|
||||
sRecordMode = mode;
|
||||
sUnknown_0203CCD0 = FALSE;
|
||||
sIsPlaybackFinished = FALSE;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
@ -124,16 +124,14 @@ void RecordedBattle_Init(u8 mode)
|
||||
if (mode == B_RECORD_MODE_RECORDING)
|
||||
{
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
sBattleRecords[i][j] = 0xFF;
|
||||
}
|
||||
sBattleFlags = gBattleTypeFlags;
|
||||
sAI_Scripts = gBattleResources->ai->aiFlags;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8184E58(void)
|
||||
void RecordedBattle_SetTrainerInfo(void)
|
||||
{
|
||||
s32 i, j;
|
||||
|
||||
@ -150,6 +148,7 @@ void sub_8184E58(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
// Link recorded battle, record info for all trainers
|
||||
u8 linkPlayersCount;
|
||||
u8 text[30];
|
||||
|
||||
@ -163,6 +162,7 @@ void sub_8184E58(void)
|
||||
sPlayers[i].battlerId = gLinkPlayers[i].id;
|
||||
sPlayers[i].language = gLinkPlayers[i].language;
|
||||
|
||||
// Record names
|
||||
if (i < linkPlayersCount)
|
||||
{
|
||||
StringCopy(text, gLinkPlayers[i].name);
|
||||
@ -178,6 +178,7 @@ void sub_8184E58(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Local battle, just record own info
|
||||
sPlayers[0].trainerId = (gSaveBlock2Ptr->playerTrainerId[0])
|
||||
| (gSaveBlock2Ptr->playerTrainerId[1] << 8)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[2] << 16)
|
||||
@ -195,9 +196,7 @@ void sub_8184E58(void)
|
||||
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action)
|
||||
{
|
||||
if (sBattlerRecordSizes[battlerId] < BATTLER_RECORD_SIZE && sRecordMode != B_RECORD_MODE_PLAYBACK)
|
||||
{
|
||||
sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]++] = action;
|
||||
}
|
||||
}
|
||||
|
||||
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
|
||||
@ -220,7 +219,7 @@ u8 RecordedBattle_GetBattlerAction(u8 battlerId)
|
||||
{
|
||||
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah
|
||||
ResetPaletteFadeControl();
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
|
||||
SetMainCallback2(CB2_QuitRecordedBattle);
|
||||
return 0xFF;
|
||||
}
|
||||
@ -249,9 +248,7 @@ u8 RecordedBattle_BufferNewBattlerData(u8 *dst)
|
||||
dst[idx++] = sBattlerRecordSizes[i] - sBattlerPrevRecordSizes[i];
|
||||
|
||||
for (j = 0; j < sBattlerRecordSizes[i] - sBattlerPrevRecordSizes[i]; j++)
|
||||
{
|
||||
dst[idx++] = sBattleRecords[i][sBattlerPrevRecordSizes[i] + j];
|
||||
}
|
||||
|
||||
sBattlerPrevRecordSizes[i] = sBattlerRecordSizes[i];
|
||||
}
|
||||
@ -283,11 +280,9 @@ void RecordedBattle_RecordAllBattlerData(u8 *src)
|
||||
u8 numActions = GetNextRecordedDataByte(src, &idx, &size);
|
||||
|
||||
for (i = 0; i < numActions; i++)
|
||||
{
|
||||
sBattleRecords[battlerId][sBattlerSavedRecordSizes[battlerId]++] = GetNextRecordedDataByte(src, &idx, &size);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static u8 GetNextRecordedDataByte(u8 *data, u8 *idx, u8 *size)
|
||||
@ -318,7 +313,7 @@ static bool32 IsRecordedBattleSaveValid(struct RecordedBattleSave *save)
|
||||
|
||||
static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSection)
|
||||
{
|
||||
memset(saveSection, 0, 0x1000);
|
||||
memset(saveSection, 0, SECTOR_SIZE);
|
||||
memcpy(saveSection, battleSave, sizeof(*battleSave));
|
||||
|
||||
saveSection->checksum = CalcByteArraySum((void*)(saveSection), sizeof(*saveSection) - 4);
|
||||
@ -338,7 +333,7 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
|
||||
saveAttempts = 0;
|
||||
battleSave = AllocZeroed(sizeof(struct RecordedBattleSave));
|
||||
savSection = AllocZeroed(0x1000);
|
||||
savSection = AllocZeroed(SECTOR_SIZE);
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
@ -349,9 +344,7 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
|
||||
{
|
||||
battleSave->playersName[i][j] = sPlayers[i].name[j];
|
||||
}
|
||||
battleSave->playersGender[i] = sPlayers[i].gender;
|
||||
battleSave->playersLanguage[i] = sPlayers[i].language;
|
||||
battleSave->playersBattlers[i] = sPlayers[i].battlerId;
|
||||
@ -471,12 +464,8 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
battleSave->battleRecord[i][j] = sBattleRecords[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
@ -585,29 +574,21 @@ static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src)
|
||||
sAI_Scripts = src->AI_scripts;
|
||||
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
|
||||
{
|
||||
sRecordMixFriendName[i] = src->recordMixFriendName[i];
|
||||
}
|
||||
|
||||
sRecordMixFriendClass = src->recordMixFriendClass;
|
||||
sApprenticeId = src->apprenticeId;
|
||||
sRecordMixFriendLanguage = src->recordMixFriendLanguage;
|
||||
sApprenticeLanguage = src->apprenticeLanguage;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
sEasyChatSpeech[i] = src->easyChatSpeech[i];
|
||||
}
|
||||
|
||||
gSaveBlock2Ptr->frontier.lvlMode = src->lvlMode;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
sBattleRecords[i][j] = src->battleRecord[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PlayRecordedBattle(void (*CB2_After)(void))
|
||||
@ -741,17 +722,20 @@ void sub_818603C(u8 arg0)
|
||||
|
||||
for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
|
||||
{
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) // player's side only
|
||||
// Player's side only
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT)
|
||||
{
|
||||
if (arg0 == 1)
|
||||
{
|
||||
// Check if any of the battler's moves have changed
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
if (gBattleMons[battlerId].moves[j] != sPlayerMonMoves[battlerId / 2][j])
|
||||
break;
|
||||
}
|
||||
if (j != MAX_MON_MOVES) // player's mon's move has been changed
|
||||
if (j != MAX_MON_MOVES)
|
||||
{
|
||||
// At least one of the moves has been changed
|
||||
RecordedBattle_SetBattlerAction(battlerId, ACTION_MOVE_CHANGE);
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
@ -779,9 +763,8 @@ void sub_818603C(u8 arg0)
|
||||
|
||||
RecordedBattle_GetBattlerAction(battlerId);
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & ((3 << (j << 1)))) >> (j << 1));
|
||||
}
|
||||
ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & (3 << (j << 1))) >> (j << 1));
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
array1[j] = RecordedBattle_GetBattlerAction(battlerId);
|
||||
@ -806,9 +789,8 @@ void sub_818603C(u8 arg0)
|
||||
if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED))
|
||||
{
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1));
|
||||
}
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + array1[j], NULL);
|
||||
@ -822,12 +804,10 @@ void sub_818603C(u8 arg0)
|
||||
}
|
||||
var = 0;
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
var |= (array3[j]) << (j << 1);
|
||||
}
|
||||
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, &var);
|
||||
}
|
||||
|
||||
gChosenMoveByBattler[battlerId] = gBattleMons[battlerId].moves[*(gBattleStruct->chosenMovePositions + battlerId)];
|
||||
}
|
||||
}
|
||||
@ -840,24 +820,24 @@ u32 GetAiScriptsInRecordedBattle(void)
|
||||
return sAI_Scripts;
|
||||
}
|
||||
|
||||
void sub_8186444(void)
|
||||
// Used to determine when the player is allowed to press B to end a recorded battle's playback
|
||||
void RecordedBattle_SetPlaybackFinished(void)
|
||||
{
|
||||
sUnknown_0203CCD0 = TRUE;
|
||||
sIsPlaybackFinished = TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_8186450(void)
|
||||
bool8 RecordedBattle_CanStopPlayback(void)
|
||||
{
|
||||
return (sUnknown_0203CCD0 == FALSE);
|
||||
return (sIsPlaybackFinished == FALSE);
|
||||
}
|
||||
|
||||
void GetRecordedBattleRecordMixFriendName(u8 *dst)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
|
||||
dst[i] = sRecordMixFriendName[i];
|
||||
|
||||
dst[7] = EOS;
|
||||
dst[PLAYER_NAME_LENGTH] = EOS;
|
||||
ConvertInternationalString(dst, sRecordMixFriendLanguage);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user