Merge branch 'master' into secret_base
This commit is contained in:
@@ -85,7 +85,7 @@ extern u16 gTrainerBattleOpponent_B;
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[BATTLE_BANKS_COUNT];
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern void (*gBattleMainFunc)(void);
|
||||
extern void (*gUnknown_030061E8)(void);
|
||||
extern void (*gCB2_AfterEvolution)(void);
|
||||
extern struct UnknownPokemonStruct2 gUnknown_02022FF8[3]; // what is it used for?
|
||||
extern struct UnknownPokemonStruct2* gUnknown_02023058; // what is it used for?
|
||||
extern u8 gUnknown_02039B28[]; // possibly a struct?
|
||||
@@ -238,7 +238,6 @@ static void sub_8038F34(void);
|
||||
static void sub_80392A8(void);
|
||||
static void sub_803937C(void);
|
||||
static void sub_803939C(void);
|
||||
void oac_poke_opponent(struct Sprite *sprite);
|
||||
static void sub_803980C(struct Sprite *sprite);
|
||||
static void sub_8039838(struct Sprite *sprite);
|
||||
static void sub_8039894(struct Sprite *sprite);
|
||||
@@ -2121,7 +2120,7 @@ static void sub_8038F34(void)
|
||||
if (sub_800A520() == TRUE)
|
||||
{
|
||||
sub_800ADF8();
|
||||
sub_814F9EC(gText_LinkStandby3, 0);
|
||||
BattleHandleAddTextPrinter(gText_LinkStandby3, 0);
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
break;
|
||||
@@ -2247,17 +2246,17 @@ static void sub_803939C(void)
|
||||
case 3:
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
sub_814F9EC(gText_RecordBattleToPass, 0);
|
||||
BattleHandleAddTextPrinter(gText_RecordBattleToPass, 0);
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (!IsTextPrinterActive(0))
|
||||
{
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
|
||||
sub_814F9EC(gText_BattleYesNoChoice, 0xC);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
|
||||
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
|
||||
gBattleCommunication[CURSOR_POSITION] = 1;
|
||||
BattleCreateCursorAt(1);
|
||||
BattleCreateYesNoCursorAt(1);
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
break;
|
||||
@@ -2267,9 +2266,9 @@ static void sub_803939C(void)
|
||||
if (gBattleCommunication[CURSOR_POSITION] != 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 0;
|
||||
BattleCreateCursorAt(0);
|
||||
BattleCreateYesNoCursorAt(0);
|
||||
}
|
||||
}
|
||||
else if (gMain.newKeys & DPAD_DOWN)
|
||||
@@ -2277,9 +2276,9 @@ static void sub_803939C(void)
|
||||
if (gBattleCommunication[CURSOR_POSITION] == 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 1;
|
||||
BattleCreateCursorAt(1);
|
||||
BattleCreateYesNoCursorAt(1);
|
||||
}
|
||||
}
|
||||
else if (gMain.newKeys & A_BUTTON)
|
||||
@@ -2287,7 +2286,7 @@ static void sub_803939C(void)
|
||||
PlaySE(SE_SELECT);
|
||||
if (gBattleCommunication[CURSOR_POSITION] == 0)
|
||||
{
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
gBattleCommunication[1] = MoveRecordedBattleToSaveData();
|
||||
gBattleCommunication[MULTIUSE_STATE] = 10;
|
||||
}
|
||||
@@ -2305,11 +2304,11 @@ static void sub_803939C(void)
|
||||
case 6:
|
||||
if (sub_800A520() == TRUE)
|
||||
{
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
if (gMain.field_439_x4)
|
||||
{
|
||||
sub_800ADF8();
|
||||
sub_814F9EC(gText_LinkStandby3, 0);
|
||||
BattleHandleAddTextPrinter(gText_LinkStandby3, 0);
|
||||
}
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
@@ -2340,14 +2339,14 @@ static void sub_803939C(void)
|
||||
{
|
||||
PlaySE(SE_SAVE);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gText_BattleRecordedOnPass);
|
||||
sub_814F9EC(gDisplayedStringBattle, 0);
|
||||
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
|
||||
gBattleCommunication[1] = 0x80;
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gText_BattleRecordCouldntBeSaved);
|
||||
sub_814F9EC(gDisplayedStringBattle, 0);
|
||||
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
|
||||
gBattleCommunication[1] = 0x80;
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
@@ -2358,7 +2357,7 @@ static void sub_803939C(void)
|
||||
if (gMain.field_439_x4)
|
||||
{
|
||||
sub_800ADF8();
|
||||
sub_814F9EC(gText_LinkStandby3, 0);
|
||||
BattleHandleAddTextPrinter(gText_LinkStandby3, 0);
|
||||
}
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
@@ -3690,7 +3689,7 @@ static void TryDoEventsBeforeFirstTurn(void)
|
||||
TurnValuesCleanUp(FALSE);
|
||||
SpecialStatusesClear();
|
||||
*(&gBattleStruct->field_91) = gAbsentBankFlags;
|
||||
sub_814F9EC(gText_EmptyString3, 0);
|
||||
BattleHandleAddTextPrinter(gText_EmptyString3, 0);
|
||||
gBattleMainFunc = HandleTurnActionSelectionState;
|
||||
ResetSentPokesToOpponentValue();
|
||||
|
||||
@@ -3797,7 +3796,7 @@ void BattleTurnPassed(void)
|
||||
*(gBattleStruct->field_5C + i) = 6;
|
||||
|
||||
*(&gBattleStruct->field_91) = gAbsentBankFlags;
|
||||
sub_814F9EC(gText_EmptyString3, 0);
|
||||
BattleHandleAddTextPrinter(gText_EmptyString3, 0);
|
||||
gBattleMainFunc = HandleTurnActionSelectionState;
|
||||
gRandomTurnNumber = Random();
|
||||
|
||||
@@ -4025,7 +4024,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
EmitOpenBag(0, gBattleStruct->field_60[gActiveBank]);
|
||||
EmitChooseItem(0, gBattleStruct->field_60[gActiveBank]);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
}
|
||||
break;
|
||||
@@ -4070,7 +4069,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
break;
|
||||
case ACTION_POKEBLOCK_CASE:
|
||||
EmitOpenBag(0, gBattleStruct->field_60[gActiveBank]);
|
||||
EmitChooseItem(0, gBattleStruct->field_60[gActiveBank]);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
break;
|
||||
case ACTION_CANCEL_PARTNER:
|
||||
@@ -4939,7 +4938,7 @@ static void HandleEndTurn_FinishBattle(void)
|
||||
BeginFastPaletteFade(3);
|
||||
FadeOutMapMusic(5);
|
||||
gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions;
|
||||
gUnknown_030061E8 = BattleMainCB2;
|
||||
gCB2_AfterEvolution = BattleMainCB2;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -39,7 +39,7 @@ static bool8 ShouldSwitchIfPerishSong(void)
|
||||
&& gDisableStructs[gActiveBank].perishSong1 == 0)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd33(1, 2, 0);
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ static bool8 ShouldSwitchIfWonderGuard(void)
|
||||
{
|
||||
// we found a mon
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
EmitCmd33(1, 2, 0);
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -221,7 +221,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
|
||||
{
|
||||
// we found a mon
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
EmitCmd33(1, 2, 0);
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -241,13 +241,13 @@ static bool8 ShouldSwitchIfNaturalCure(void)
|
||||
if ((gUnknown_02024250[gActiveBank] == 0 || gUnknown_02024250[gActiveBank] == 0xFFFF) && Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd33(1, 2, 0);
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
else if (gBattleMoves[gUnknown_02024250[gActiveBank]].power == 0 && Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd33(1, 2, 0);
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -258,7 +258,7 @@ static bool8 ShouldSwitchIfNaturalCure(void)
|
||||
if (Random() & 1)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = 6;
|
||||
EmitCmd33(1, 2, 0);
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -426,7 +426,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
|
||||
if (moveFlags & MOVESTATUS_SUPEREFFECTIVE && Random() % moduloPercent == 0)
|
||||
{
|
||||
*(gBattleStruct->field_294 + gActiveBank) = i;
|
||||
EmitCmd33(1, 2, 0);
|
||||
EmitTwoReturnValues(1, ACTION_SWITCH, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -611,7 +611,7 @@ void AI_TrySwitchOrUseItem(void)
|
||||
}
|
||||
}
|
||||
|
||||
EmitCmd33(1, 0, (gActiveBank ^ BIT_SIDE) << 8);
|
||||
EmitTwoReturnValues(1, ACTION_USE_MOVE, (gActiveBank ^ BIT_SIDE) << 8);
|
||||
}
|
||||
|
||||
#define TYPE_FORESIGHT 0xFE
|
||||
@@ -940,8 +940,8 @@ static bool8 ShouldUseItem(void)
|
||||
|
||||
if (shouldUse)
|
||||
{
|
||||
EmitCmd33(1, 1, 0);
|
||||
*(gBattleStruct->field_C0 + (gActiveBank / 2) * 2) = item;
|
||||
EmitTwoReturnValues(1, ACTION_USE_ITEM, 0);
|
||||
*(gBattleStruct->chosenItem + (gActiveBank / 2) * 2) = item;
|
||||
gBattleResources->battleHistory->trainerItems[i] = 0;
|
||||
return shouldUse;
|
||||
}
|
||||
|
||||
@@ -47,18 +47,6 @@ extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
|
||||
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
|
||||
extern const struct BattleAnimBackground gBattleAnimBackgroundTable[];
|
||||
|
||||
extern void sub_80A8278(void); // rom_80A5C6C.s
|
||||
extern void sub_80A6B30(struct UnknownAnimStruct2*); // rom_80A5C6C.s
|
||||
extern void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1); // rom_80A5C6C.s
|
||||
extern u8 sub_80A82E4(u8 bank); // rom_80A5C6C.s
|
||||
extern u8 sub_80A5C6C(u8 bank, u8 attributeId); // rom_80A5C6C.s
|
||||
extern bool8 AnimBankSpriteExists(u8 bank); // rom_80A5C6C.s
|
||||
extern void sub_80A6C68(u8 arg0); // rom_80A5C6C.s
|
||||
extern u8 GetAnimBankSpriteId(u8 wantedBank); // rom_80A5C6C.s
|
||||
extern u8 sub_80A6D94(void);
|
||||
extern u8 sub_80A8364(u8);
|
||||
extern bool8 IsDoubleBattle(void);
|
||||
|
||||
// this file's functions
|
||||
static void ScriptCmd_loadspritegfx(void);
|
||||
static void ScriptCmd_unloadspritegfx(void);
|
||||
@@ -234,10 +222,10 @@ void DoMoveAnim(u16 move)
|
||||
{
|
||||
gAnimBankAttacker = gBankAttacker;
|
||||
gAnimBankTarget = gBankTarget;
|
||||
DoBattleAnim(gBattleAnims_Moves, move, TRUE);
|
||||
LaunchBattleAnimation(gBattleAnims_Moves, move, TRUE);
|
||||
}
|
||||
|
||||
void DoBattleAnim(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim)
|
||||
void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@@ -672,7 +660,7 @@ bool8 IsAnimBankSpriteVisible(u8 bank)
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
if (!AnimBankSpriteExists(bank))
|
||||
if (!IsBankSpritePresent(bank))
|
||||
return FALSE;
|
||||
if (IsContest())
|
||||
return TRUE; // this line wont ever be reached.
|
||||
@@ -1281,7 +1269,7 @@ static void ScriptCmd_changebg(void)
|
||||
|
||||
s8 BattleAnimAdjustPanning(s8 pan)
|
||||
{
|
||||
if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gAnimBankAttacker].flag_x10)
|
||||
if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gAnimBankAttacker].statusAnimActive)
|
||||
{
|
||||
if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER)
|
||||
pan = PAN_SIDE_OPPONENT;
|
||||
@@ -1323,7 +1311,7 @@ s8 BattleAnimAdjustPanning(s8 pan)
|
||||
|
||||
s8 BattleAnimAdjustPanning2(s8 pan)
|
||||
{
|
||||
if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gAnimBankAttacker].flag_x10)
|
||||
if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gAnimBankAttacker].statusAnimActive)
|
||||
{
|
||||
if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER)
|
||||
pan = PAN_SIDE_OPPONENT;
|
||||
|
||||
1891
src/battle_controller_link_opponent.c
Normal file
1891
src/battle_controller_link_opponent.c
Normal file
File diff suppressed because it is too large
Load Diff
1719
src/battle_controller_link_partner.c
Normal file
1719
src/battle_controller_link_partner.c
Normal file
File diff suppressed because it is too large
Load Diff
2033
src/battle_controller_opponent.c
Normal file
2033
src/battle_controller_opponent.c
Normal file
File diff suppressed because it is too large
Load Diff
3150
src/battle_controller_player.c
Normal file
3150
src/battle_controller_player.c
Normal file
File diff suppressed because it is too large
Load Diff
1960
src/battle_controller_player_partner.c
Normal file
1960
src/battle_controller_player_partner.c
Normal file
File diff suppressed because it is too large
Load Diff
1829
src/battle_controller_recorded_opponent.c
Normal file
1829
src/battle_controller_recorded_opponent.c
Normal file
File diff suppressed because it is too large
Load Diff
1844
src/battle_controller_recorded_player.c
Normal file
1844
src/battle_controller_recorded_player.c
Normal file
File diff suppressed because it is too large
Load Diff
714
src/battle_controller_safari.c
Normal file
714
src/battle_controller_safari.c
Normal file
@@ -0,0 +1,714 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
#include "util.h"
|
||||
#include "main.h"
|
||||
#include "songs.h"
|
||||
#include "sound.h"
|
||||
#include "window.h"
|
||||
#include "m4a.h"
|
||||
#include "palette.h"
|
||||
#include "task.h"
|
||||
#include "text.h"
|
||||
#include "bg.h"
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
|
||||
extern u32 gBattleExecBuffer;
|
||||
extern u8 gActiveBank;
|
||||
extern u8 gBankSpriteIds[BATTLE_BANKS_COUNT];
|
||||
extern u8 gActionSelectionCursor[BATTLE_BANKS_COUNT];
|
||||
extern u8 gNoOfAllBanks;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattleBankFunc[BATTLE_BANKS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlePartyID[BATTLE_BANKS_COUNT];
|
||||
extern u8 gBattleBufferA[BATTLE_BANKS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gScriptItemId;
|
||||
extern u8 gHealthBoxesIds[BATTLE_BANKS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gUnknown_020243FC;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
|
||||
extern const u8 gText_SafariZoneMenu[];
|
||||
extern const u8 gText_WhatWillPkmnDo2[];
|
||||
|
||||
extern void sub_81358F4(void);
|
||||
|
||||
// this file's functions
|
||||
static void SafariHandleGetMonData(void);
|
||||
static void SafariHandleGetRawMonData(void);
|
||||
static void SafariHandleSetMonData(void);
|
||||
static void SafariHandleSetRawMonData(void);
|
||||
static void SafariHandleLoadMonSprite(void);
|
||||
static void SafariHandleSwitchInAnim(void);
|
||||
static void SafariHandleReturnMonToBall(void);
|
||||
static void SafariHandleDrawTrainerPic(void);
|
||||
static void SafariHandleTrainerSlide(void);
|
||||
static void SafariHandleTrainerSlideBack(void);
|
||||
static void SafariHandleFaintAnimation(void);
|
||||
static void SafariHandlePaletteFade(void);
|
||||
static void SafariHandleSuccessBallThrowAnim(void);
|
||||
static void SafariHandleBallThrowAnim(void);
|
||||
static void SafariHandlePause(void);
|
||||
static void SafariHandleMoveAnimation(void);
|
||||
static void SafariHandlePrintString(void);
|
||||
static void SafariHandlePrintStringPlayerOnly(void);
|
||||
static void SafariHandleChooseAction(void);
|
||||
static void SafariHandleUnknownYesNoBox(void);
|
||||
static void SafariHandleChooseMove(void);
|
||||
static void SafariHandleChooseItem(void);
|
||||
static void SafariHandleChoosePokemon(void);
|
||||
static void SafariHandleCmd23(void);
|
||||
static void SafariHandleHealthBarUpdate(void);
|
||||
static void SafariHandleExpUpdate(void);
|
||||
static void SafariHandleStatusIconUpdate(void);
|
||||
static void SafariHandleStatusAnimation(void);
|
||||
static void SafariHandleStatusXor(void);
|
||||
static void SafariHandleDataTransfer(void);
|
||||
static void SafariHandleDMA3Transfer(void);
|
||||
static void SafariHandlePlayBGM(void);
|
||||
static void SafariHandleCmd32(void);
|
||||
static void SafariHandleTwoReturnValues(void);
|
||||
static void SafariHandleChosenMonReturnValue(void);
|
||||
static void SafariHandleOneReturnValue(void);
|
||||
static void SafariHandleOneReturnValue_Duplicate(void);
|
||||
static void SafariHandleCmd37(void);
|
||||
static void SafariHandleCmd38(void);
|
||||
static void SafariHandleCmd39(void);
|
||||
static void SafariHandleCmd40(void);
|
||||
static void SafariHandleHitAnimation(void);
|
||||
static void SafariHandleCmd42(void);
|
||||
static void SafariHandleEffectivenessSound(void);
|
||||
static void SafariHandlePlayFanfareOrBGM(void);
|
||||
static void SafariHandleFaintingCry(void);
|
||||
static void SafariHandleIntroSlide(void);
|
||||
static void SafariHandleIntroTrainerBallThrow(void);
|
||||
static void SafariHandleDrawPartyStatusSummary(void);
|
||||
static void SafariHandleCmd49(void);
|
||||
static void SafariHandleCmd50(void);
|
||||
static void SafariHandleSpriteInvisibility(void);
|
||||
static void SafariHandleBattleAnimation(void);
|
||||
static void SafariHandleLinkStandbyMsg(void);
|
||||
static void SafariHandleResetActionMoveSelection(void);
|
||||
static void SafariHandleCmd55(void);
|
||||
static void nullsub_115(void);
|
||||
|
||||
static void SafariBufferRunCommand(void);
|
||||
static void SafariBufferExecCompleted(void);
|
||||
static void CompleteWhenChosePokeblock(void);
|
||||
|
||||
static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
|
||||
{
|
||||
SafariHandleGetMonData,
|
||||
SafariHandleGetRawMonData,
|
||||
SafariHandleSetMonData,
|
||||
SafariHandleSetRawMonData,
|
||||
SafariHandleLoadMonSprite,
|
||||
SafariHandleSwitchInAnim,
|
||||
SafariHandleReturnMonToBall,
|
||||
SafariHandleDrawTrainerPic,
|
||||
SafariHandleTrainerSlide,
|
||||
SafariHandleTrainerSlideBack,
|
||||
SafariHandleFaintAnimation,
|
||||
SafariHandlePaletteFade,
|
||||
SafariHandleSuccessBallThrowAnim,
|
||||
SafariHandleBallThrowAnim,
|
||||
SafariHandlePause,
|
||||
SafariHandleMoveAnimation,
|
||||
SafariHandlePrintString,
|
||||
SafariHandlePrintStringPlayerOnly,
|
||||
SafariHandleChooseAction,
|
||||
SafariHandleUnknownYesNoBox,
|
||||
SafariHandleChooseMove,
|
||||
SafariHandleChooseItem,
|
||||
SafariHandleChoosePokemon,
|
||||
SafariHandleCmd23,
|
||||
SafariHandleHealthBarUpdate,
|
||||
SafariHandleExpUpdate,
|
||||
SafariHandleStatusIconUpdate,
|
||||
SafariHandleStatusAnimation,
|
||||
SafariHandleStatusXor,
|
||||
SafariHandleDataTransfer,
|
||||
SafariHandleDMA3Transfer,
|
||||
SafariHandlePlayBGM,
|
||||
SafariHandleCmd32,
|
||||
SafariHandleTwoReturnValues,
|
||||
SafariHandleChosenMonReturnValue,
|
||||
SafariHandleOneReturnValue,
|
||||
SafariHandleOneReturnValue_Duplicate,
|
||||
SafariHandleCmd37,
|
||||
SafariHandleCmd38,
|
||||
SafariHandleCmd39,
|
||||
SafariHandleCmd40,
|
||||
SafariHandleHitAnimation,
|
||||
SafariHandleCmd42,
|
||||
SafariHandleEffectivenessSound,
|
||||
SafariHandlePlayFanfareOrBGM,
|
||||
SafariHandleFaintingCry,
|
||||
SafariHandleIntroSlide,
|
||||
SafariHandleIntroTrainerBallThrow,
|
||||
SafariHandleDrawPartyStatusSummary,
|
||||
SafariHandleCmd49,
|
||||
SafariHandleCmd50,
|
||||
SafariHandleSpriteInvisibility,
|
||||
SafariHandleBattleAnimation,
|
||||
SafariHandleLinkStandbyMsg,
|
||||
SafariHandleResetActionMoveSelection,
|
||||
SafariHandleCmd55,
|
||||
nullsub_115
|
||||
};
|
||||
|
||||
static void nullsub_114(void)
|
||||
{
|
||||
}
|
||||
|
||||
void SetControllerToSafari(void)
|
||||
{
|
||||
gBattleBankFunc[gActiveBank] = SafariBufferRunCommand;
|
||||
}
|
||||
|
||||
static void SafariBufferRunCommand(void)
|
||||
{
|
||||
if (gBattleExecBuffer & gBitTable[gActiveBank])
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][0] < ARRAY_COUNT(sSafariBufferCommands))
|
||||
sSafariBufferCommands[gBattleBufferA[gActiveBank][0]]();
|
||||
else
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
static void HandleInputChooseAction(void)
|
||||
{
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
|
||||
switch (gActionSelectionCursor[gActiveBank])
|
||||
{
|
||||
case 0:
|
||||
EmitTwoReturnValues(1, ACTION_SAFARI_ZONE_BALL, 0);
|
||||
break;
|
||||
case 1:
|
||||
EmitTwoReturnValues(1, ACTION_POKEBLOCK_CASE, 0);
|
||||
break;
|
||||
case 2:
|
||||
EmitTwoReturnValues(1, ACTION_GO_NEAR, 0);
|
||||
break;
|
||||
case 3:
|
||||
EmitTwoReturnValues(1, ACTION_SAFARI_ZONE_RUN, 0);
|
||||
break;
|
||||
}
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
else if (gMain.newKeys & DPAD_LEFT)
|
||||
{
|
||||
if (gActionSelectionCursor[gActiveBank] & 1)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
|
||||
gActionSelectionCursor[gActiveBank] ^= 1;
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
|
||||
}
|
||||
}
|
||||
else if (gMain.newKeys & DPAD_RIGHT)
|
||||
{
|
||||
if (!(gActionSelectionCursor[gActiveBank] & 1))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
|
||||
gActionSelectionCursor[gActiveBank] ^= 1;
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
|
||||
}
|
||||
}
|
||||
else if (gMain.newKeys & DPAD_UP)
|
||||
{
|
||||
if (gActionSelectionCursor[gActiveBank] & 2)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
|
||||
gActionSelectionCursor[gActiveBank] ^= 2;
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
|
||||
}
|
||||
}
|
||||
else if (gMain.newKeys & DPAD_DOWN)
|
||||
{
|
||||
if (!(gActionSelectionCursor[gActiveBank] & 2))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBank]);
|
||||
gActionSelectionCursor[gActiveBank] ^= 2;
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void CompleteOnBankSpriteCallbackDummy(void)
|
||||
{
|
||||
if (gSprites[gBankSpriteIds[gActiveBank]].callback == SpriteCallbackDummy)
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void CompleteOnInactiveTextPrinter(void)
|
||||
{
|
||||
if (!IsTextPrinterActive(0))
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void CompleteOnHealthboxSpriteCallbackDummy(void)
|
||||
{
|
||||
if (gSprites[gHealthBoxesIds[gActiveBank]].callback == SpriteCallbackDummy)
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void sub_81595E4(void)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
gMain.inBattle = FALSE;
|
||||
gMain.callback1 = gPreBattleCallback1;
|
||||
SetMainCallback2(gMain.savedCallback);
|
||||
}
|
||||
}
|
||||
|
||||
static void CompleteOnSpecialAnimDone(void)
|
||||
{
|
||||
if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[gActiveBank].specialAnimActive)
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void OpenPokeblockCase(void)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
gBattleBankFunc[gActiveBank] = CompleteWhenChosePokeblock;
|
||||
FreeAllWindowBuffers();
|
||||
sub_81358F4();
|
||||
}
|
||||
}
|
||||
|
||||
static void CompleteWhenChosePokeblock(void)
|
||||
{
|
||||
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
|
||||
{
|
||||
EmitOneReturnValue(1, gScriptItemId);
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
static void CompleteOnFinishedBattleAnimation(void)
|
||||
{
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].animFromTableActive)
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariBufferExecCompleted(void)
|
||||
{
|
||||
gBattleBankFunc[gActiveBank] = SafariBufferRunCommand;
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
u8 playerId = GetMultiplayerId();
|
||||
|
||||
PrepareBufferDataTransferLink(2, 4, &playerId);
|
||||
gBattleBufferA[gActiveBank][0] = CONTROLLER_TERMINATOR_NOP;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleExecBuffer &= ~gBitTable[gActiveBank];
|
||||
}
|
||||
}
|
||||
|
||||
static void CompleteOnFinishedStatusAnimation(void)
|
||||
{
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBank].statusAnimActive)
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleGetMonData(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleGetRawMonData(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleSetMonData(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleSetRawMonData(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleLoadMonSprite(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleSwitchInAnim(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleReturnMonToBall(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleDrawTrainerPic(void)
|
||||
{
|
||||
DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, gActiveBank);
|
||||
sub_806A12C(gSaveBlock2Ptr->playerGender, GetBankIdentity(gActiveBank));
|
||||
gBankSpriteIds[gActiveBank] = CreateSprite(
|
||||
&gUnknown_0202499C,
|
||||
80,
|
||||
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80,
|
||||
30);
|
||||
gSprites[gBankSpriteIds[gActiveBank]].oam.paletteNum = gActiveBank;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].pos2.x = 240;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].data0 = -2;
|
||||
gSprites[gBankSpriteIds[gActiveBank]].callback = sub_805D7AC;
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnBankSpriteCallbackDummy;
|
||||
}
|
||||
|
||||
static void SafariHandleTrainerSlide(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleTrainerSlideBack(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleFaintAnimation(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandlePaletteFade(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleSuccessBallThrowAnim(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
|
||||
gDoingBattleAnim = TRUE;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
static void SafariHandleBallThrowAnim(void)
|
||||
{
|
||||
u8 ballThrowCaseId = gBattleBufferA[gActiveBank][1];
|
||||
|
||||
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
|
||||
gDoingBattleAnim = TRUE;
|
||||
DoSpecialBattleAnimation(gActiveBank, gActiveBank, GetBankByIdentity(IDENTITY_OPPONENT_MON1), B_ANIM_SAFARI_BALL_THROW);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnSpecialAnimDone;
|
||||
}
|
||||
|
||||
static void SafariHandlePause(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleMoveAnimation(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandlePrintString(void)
|
||||
{
|
||||
u16 *stringId;
|
||||
|
||||
gBattle_BG0_X = 0;
|
||||
gBattle_BG0_Y = 0;
|
||||
stringId = (u16*)(&gBattleBufferA[gActiveBank][2]);
|
||||
BufferStringBattle(*stringId);
|
||||
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnInactiveTextPrinter;
|
||||
}
|
||||
|
||||
static void SafariHandlePrintStringPlayerOnly(void)
|
||||
{
|
||||
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
|
||||
SafariHandlePrintString();
|
||||
else
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void HandleChooseActionAfterDma3(void)
|
||||
{
|
||||
if (!IsDma3ManagerBusyWithBgCopy())
|
||||
{
|
||||
gBattle_BG0_X = 0;
|
||||
gBattle_BG0_Y = 160;
|
||||
gBattleBankFunc[gActiveBank] = HandleInputChooseAction;
|
||||
}
|
||||
}
|
||||
|
||||
static void SafariHandleChooseAction(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBankFunc[gActiveBank] = HandleChooseActionAfterDma3;
|
||||
BattleHandleAddTextPrinter(gText_SafariZoneMenu, 2);
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
ActionSelectionDestroyCursorAt(i);
|
||||
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBank], 0);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo2);
|
||||
BattleHandleAddTextPrinter(gDisplayedStringBattle, 1);
|
||||
}
|
||||
|
||||
static void SafariHandleUnknownYesNoBox(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleChooseMove(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleChooseItem(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
|
||||
gBattleBankFunc[gActiveBank] = OpenPokeblockCase;
|
||||
gBankInMenu = gActiveBank;
|
||||
}
|
||||
|
||||
static void SafariHandleChoosePokemon(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd23(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleHealthBarUpdate(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleExpUpdate(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleStatusIconUpdate(void)
|
||||
{
|
||||
UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_SAFARI_BALLS_TEXT);
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleStatusAnimation(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleStatusXor(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleDataTransfer(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleDMA3Transfer(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandlePlayBGM(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd32(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleTwoReturnValues(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleChosenMonReturnValue(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleOneReturnValue(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleOneReturnValue_Duplicate(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd37(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd38(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd39(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd40(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleHitAnimation(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd42(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleEffectivenessSound(void)
|
||||
{
|
||||
s8 pan;
|
||||
|
||||
if (GetBankSide(gActiveBank) == SIDE_PLAYER)
|
||||
pan = PAN_SIDE_PLAYER;
|
||||
else
|
||||
pan = PAN_SIDE_OPPONENT;
|
||||
|
||||
PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandlePlayFanfareOrBGM(void)
|
||||
{
|
||||
if (gBattleBufferA[gActiveBank][3])
|
||||
{
|
||||
BattleMusicStop();
|
||||
PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
|
||||
}
|
||||
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleFaintingCry(void)
|
||||
{
|
||||
u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
|
||||
|
||||
PlayCry1(species, 25);
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBank][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleIntroTrainerBallThrow(void)
|
||||
{
|
||||
UpdateHealthboxAttribute(gHealthBoxesIds[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], HEALTHBOX_SAFARI_ALL_TEXT);
|
||||
sub_8076918(gActiveBank);
|
||||
SetHealthboxSpriteVisible(gHealthBoxesIds[gActiveBank]);
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnHealthboxSpriteCallbackDummy;
|
||||
}
|
||||
|
||||
static void SafariHandleDrawPartyStatusSummary(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd49(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd50(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleSpriteInvisibility(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleBattleAnimation(void)
|
||||
{
|
||||
u8 animationId = gBattleBufferA[gActiveBank][1];
|
||||
u16 argument = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
|
||||
|
||||
if (DoBattleAnimationFromTable(gActiveBank, gActiveBank, gActiveBank, animationId, argument))
|
||||
SafariBufferExecCompleted();
|
||||
else
|
||||
gBattleBankFunc[gActiveBank] = CompleteOnFinishedBattleAnimation;
|
||||
}
|
||||
|
||||
static void SafariHandleLinkStandbyMsg(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleResetActionMoveSelection(void)
|
||||
{
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
static void SafariHandleCmd55(void)
|
||||
{
|
||||
gBattleOutcome = gBattleBufferA[gActiveBank][1];
|
||||
FadeOutMapMusic(5);
|
||||
BeginFastPaletteFade(3);
|
||||
SafariBufferExecCompleted();
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD))
|
||||
gBattleBankFunc[gActiveBank] = sub_81595E4;
|
||||
}
|
||||
|
||||
static void nullsub_115(void)
|
||||
{
|
||||
}
|
||||
1597
src/battle_controller_wally.c
Normal file
1597
src/battle_controller_wally.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -145,30 +145,30 @@ static void SetControllersVariables(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
|
||||
{
|
||||
gBattleBankFunc[0] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToPlayerPartnerBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToPlayerPartner;
|
||||
gBanksByIdentity[2] = IDENTITY_PLAYER_MON2;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToOpponent;
|
||||
gBanksByIdentity[3] = IDENTITY_OPPONENT_MON2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToPlayer;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToPlayerPartnerBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToPlayerPartner;
|
||||
gBanksByIdentity[2] = IDENTITY_PLAYER_MON2;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToOpponent;
|
||||
gBanksByIdentity[3] = IDENTITY_OPPONENT_MON2;
|
||||
}
|
||||
|
||||
@@ -189,15 +189,15 @@ static void SetControllersVariables(void)
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
|
||||
gBattleBankFunc[0] = SetBankFuncToSafariBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToSafari;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
|
||||
gBattleBankFunc[0] = SetBankFuncToWallyBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToWally;
|
||||
else
|
||||
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToPlayer;
|
||||
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gNoOfAllBanks = 2;
|
||||
@@ -210,20 +210,20 @@ static void SetControllersVariables(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattleBankFunc[0] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToRecordedOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToRecordedOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gNoOfAllBanks = 2;
|
||||
}
|
||||
else // see how the banks are switched
|
||||
{
|
||||
gBattleBankFunc[1] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[1] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[0] = SetBankFuncToRecordedOpponentBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToRecordedOpponent;
|
||||
gBanksByIdentity[0] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gNoOfAllBanks = 2;
|
||||
@@ -231,10 +231,10 @@ static void SetControllersVariables(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[0] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
}
|
||||
}
|
||||
@@ -243,16 +243,16 @@ static void SetControllersVariables(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToPlayer;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToPlayer;
|
||||
gBanksByIdentity[2] = IDENTITY_PLAYER_MON2;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToOpponent;
|
||||
gBanksByIdentity[3] = IDENTITY_OPPONENT_MON2;
|
||||
|
||||
gNoOfAllBanks = 4;
|
||||
@@ -263,16 +263,16 @@ static void SetControllersVariables(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattleBankFunc[0] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[0] = 0;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToOpponent;
|
||||
gBanksByIdentity[1] = 1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[2] = 2;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToOpponent;
|
||||
gBanksByIdentity[3] = 3;
|
||||
|
||||
gNoOfAllBanks = 4;
|
||||
@@ -307,7 +307,7 @@ static void SetControllersVariables(void)
|
||||
|
||||
if (i == var)
|
||||
{
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetControllerToRecordedPlayer;
|
||||
switch (gLinkPlayers[i].lp_field_18)
|
||||
{
|
||||
case 0:
|
||||
@@ -325,7 +325,7 @@ static void SetControllersVariables(void)
|
||||
else if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[var].lp_field_18 & 1))
|
||||
|| ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[var].lp_field_18 & 1)))
|
||||
{
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetControllerToRecordedPlayer;
|
||||
switch (gLinkPlayers[i].lp_field_18)
|
||||
{
|
||||
case 0:
|
||||
@@ -342,7 +342,7 @@ static void SetControllersVariables(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToRecordedOpponentBufferRunCommand;
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetControllerToRecordedOpponent;
|
||||
switch (gLinkPlayers[i].lp_field_18)
|
||||
{
|
||||
case 0:
|
||||
@@ -361,51 +361,51 @@ static void SetControllersVariables(void)
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_WILD)
|
||||
{
|
||||
gBattleBankFunc[0] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[2] = IDENTITY_PLAYER_MON2;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
|
||||
{
|
||||
gBattleBankFunc[1] = SetBankFuncToRecordedOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToRecordedOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToRecordedOpponentBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToRecordedOpponent;
|
||||
gBanksByIdentity[3] = IDENTITY_OPPONENT_MON2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToOpponent;
|
||||
gBanksByIdentity[3] = IDENTITY_OPPONENT_MON2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[1] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[1] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToRecordedPlayerBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToRecordedPlayer;
|
||||
gBanksByIdentity[3] = IDENTITY_PLAYER_MON2;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
|
||||
{
|
||||
gBattleBankFunc[0] = SetBankFuncToRecordedOpponentBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToRecordedOpponent;
|
||||
gBanksByIdentity[0] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToRecordedOpponentBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToRecordedOpponent;
|
||||
gBanksByIdentity[2] = IDENTITY_OPPONENT_MON2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[0] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToOpponent;
|
||||
gBanksByIdentity[0] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToOpponent;
|
||||
gBanksByIdentity[2] = IDENTITY_OPPONENT_MON2;
|
||||
}
|
||||
}
|
||||
@@ -424,20 +424,20 @@ static void SetControllersVariablesInLinkBattle(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToPlayer;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToLinkOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gNoOfAllBanks = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToPlayer;
|
||||
gBanksByIdentity[1] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToLinkOpponent;
|
||||
gBanksByIdentity[0] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gNoOfAllBanks = 2;
|
||||
@@ -449,32 +449,32 @@ static void SetControllersVariablesInLinkBattle(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToPlayer;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToLinkOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToPlayer;
|
||||
gBanksByIdentity[2] = IDENTITY_PLAYER_MON2;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToLinkOpponentBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToLinkOpponent;
|
||||
gBanksByIdentity[3] = IDENTITY_OPPONENT_MON2;
|
||||
|
||||
gNoOfAllBanks = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToPlayer;
|
||||
gBanksByIdentity[1] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToLinkOpponent;
|
||||
gBanksByIdentity[0] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToPlayer;
|
||||
gBanksByIdentity[3] = IDENTITY_PLAYER_MON2;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToLinkOpponentBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToLinkOpponent;
|
||||
gBanksByIdentity[2] = IDENTITY_OPPONENT_MON2;
|
||||
|
||||
gNoOfAllBanks = 4;
|
||||
@@ -486,32 +486,32 @@ static void SetControllersVariablesInLinkBattle(void)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToPlayer;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToLinkPartnerBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToLinkPartner;
|
||||
gBanksByIdentity[2] = IDENTITY_PLAYER_MON2;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToOpponent;
|
||||
gBanksByIdentity[3] = IDENTITY_OPPONENT_MON2;
|
||||
|
||||
gNoOfAllBanks = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[0] = SetBankFuncToLinkPartnerBufferRunCommand;
|
||||
gBattleBankFunc[0] = SetControllerToLinkPartner;
|
||||
gBanksByIdentity[0] = IDENTITY_PLAYER_MON1;
|
||||
|
||||
gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand;
|
||||
gBattleBankFunc[1] = SetControllerToLinkOpponent;
|
||||
gBanksByIdentity[1] = IDENTITY_OPPONENT_MON1;
|
||||
|
||||
gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[2] = SetControllerToPlayer;
|
||||
gBanksByIdentity[2] = IDENTITY_PLAYER_MON2;
|
||||
|
||||
gBattleBankFunc[3] = SetBankFuncToLinkOpponentBufferRunCommand;
|
||||
gBattleBankFunc[3] = SetControllerToLinkOpponent;
|
||||
gBanksByIdentity[3] = IDENTITY_OPPONENT_MON2;
|
||||
|
||||
gNoOfAllBanks = 4;
|
||||
@@ -549,7 +549,7 @@ static void SetControllersVariablesInLinkBattle(void)
|
||||
|
||||
if (i == multiplayerId)
|
||||
{
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToPlayerBufferRunCommand;
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetControllerToPlayer;
|
||||
switch (gLinkPlayers[i].lp_field_18)
|
||||
{
|
||||
case 0:
|
||||
@@ -569,7 +569,7 @@ static void SetControllersVariablesInLinkBattle(void)
|
||||
if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[multiplayerId].lp_field_18 & 1))
|
||||
|| ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[multiplayerId].lp_field_18 & 1)))
|
||||
{
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkPartnerBufferRunCommand;
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetControllerToLinkPartner;
|
||||
switch (gLinkPlayers[i].lp_field_18)
|
||||
{
|
||||
case 0:
|
||||
@@ -586,7 +586,7 @@ static void SetControllersVariablesInLinkBattle(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkOpponentBufferRunCommand;
|
||||
gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetControllerToLinkOpponent;
|
||||
switch (gLinkPlayers[i].lp_field_18)
|
||||
{
|
||||
case 0:
|
||||
@@ -939,11 +939,11 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void EmitGetMonData(u8 bufferId, u8 arg1, u8 arg2)
|
||||
void EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_GETMONDATA;
|
||||
gBattleBuffersTransferData[1] = arg1;
|
||||
gBattleBuffersTransferData[2] = arg2;
|
||||
gBattleBuffersTransferData[1] = requestId;
|
||||
gBattleBuffersTransferData[2] = monToCheck;
|
||||
gBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
@@ -957,13 +957,13 @@ void EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes)
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitSetMonData(u8 bufferId, u8 request, u8 c, u8 bytes, void *data)
|
||||
void EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA;
|
||||
gBattleBuffersTransferData[1] = request;
|
||||
gBattleBuffersTransferData[2] = c;
|
||||
gBattleBuffersTransferData[1] = requestId;
|
||||
gBattleBuffersTransferData[2] = monToCheck;
|
||||
for (i = 0; i < bytes; i++)
|
||||
gBattleBuffersTransferData[3 + i] = *(u8*)(data++);
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 3 + bytes);
|
||||
@@ -984,9 +984,9 @@ void EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data)
|
||||
void EmitLoadMonSprite(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_LOADMONSPRITE;
|
||||
gBattleBuffersTransferData[1] = 4;
|
||||
gBattleBuffersTransferData[2] = 4;
|
||||
gBattleBuffersTransferData[3] = 4;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_LOADMONSPRITE;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_LOADMONSPRITE;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_LOADMONSPRITE;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1009,60 +1009,60 @@ void EmitReturnMonToBall(u8 bufferId, u8 arg1)
|
||||
void EmitDrawTrainerPic(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_DRAWTRAINERPIC;
|
||||
gBattleBuffersTransferData[1] = 7;
|
||||
gBattleBuffersTransferData[2] = 7;
|
||||
gBattleBuffersTransferData[3] = 7;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_DRAWTRAINERPIC;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_DRAWTRAINERPIC;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_DRAWTRAINERPIC;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitTrainerSlide(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDE;
|
||||
gBattleBuffersTransferData[1] = 8;
|
||||
gBattleBuffersTransferData[2] = 8;
|
||||
gBattleBuffersTransferData[3] = 8;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDE;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDE;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDE;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitTrainerSlideBack(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
gBattleBuffersTransferData[1] = 9;
|
||||
gBattleBuffersTransferData[2] = 9;
|
||||
gBattleBuffersTransferData[3] = 9;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_TRAINERSLIDEBACK;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitFaintAnimation(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_FAINTANIMATION;
|
||||
gBattleBuffersTransferData[1] = 10;
|
||||
gBattleBuffersTransferData[2] = 10;
|
||||
gBattleBuffersTransferData[3] = 10;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_FAINTANIMATION;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_FAINTANIMATION;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_FAINTANIMATION;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitCmd11(u8 bufferId)
|
||||
void EmitPaletteFade(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_11;
|
||||
gBattleBuffersTransferData[1] = 11;
|
||||
gBattleBuffersTransferData[2] = 11;
|
||||
gBattleBuffersTransferData[3] = 11;
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_PALETTEFADE;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_PALETTEFADE;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_PALETTEFADE;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitCmd12(u8 bufferId)
|
||||
void EmitSuccessBallThrowAnim(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_12;
|
||||
gBattleBuffersTransferData[1] = 12;
|
||||
gBattleBuffersTransferData[2] = 12;
|
||||
gBattleBuffersTransferData[3] = 12;
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_SUCCESSBALLTHROWANIM;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitBallThrow(u8 bufferId, u8 caseId)
|
||||
void EmitBallThrowAnim(u8 bufferId, u8 caseId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_BALLTHROW;
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_BALLTHROWANIM;
|
||||
gBattleBuffersTransferData[1] = caseId;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 2);
|
||||
}
|
||||
@@ -1146,7 +1146,7 @@ void EmitPrintStringPlayerOnly(u8 bufferId, u16 stringID)
|
||||
struct StringInfoBattle* stringInfo;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY;
|
||||
gBattleBuffersTransferData[1] = 17;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
|
||||
gBattleBuffersTransferData[2] = stringID;
|
||||
gBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
|
||||
|
||||
@@ -1178,12 +1178,12 @@ void EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2)
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitCmd19(u8 bufferId)
|
||||
void EmitUnknownYesNoBox(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_19;
|
||||
gBattleBuffersTransferData[1] = 19;
|
||||
gBattleBuffersTransferData[2] = 19;
|
||||
gBattleBuffersTransferData[3] = 19;
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_UNKNOWNYESNOBOX;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1200,7 +1200,7 @@ void EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(*movePpData) + 4);
|
||||
}
|
||||
|
||||
void EmitOpenBag(u8 bufferId, u8 *arg1)
|
||||
void EmitChooseItem(u8 bufferId, u8 *arg1)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@@ -1226,9 +1226,9 @@ void EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4)
|
||||
void EmitCmd23(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_23;
|
||||
gBattleBuffersTransferData[1] = 23;
|
||||
gBattleBuffersTransferData[2] = 23;
|
||||
gBattleBuffersTransferData[3] = 23;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_23;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_23;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_23;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1289,7 +1289,7 @@ void EmitDataTransfer(u8 bufferId, u16 size, void *data)
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_DATATRANSFER;
|
||||
gBattleBuffersTransferData[1] = 29;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER;
|
||||
gBattleBuffersTransferData[2] = size;
|
||||
gBattleBuffersTransferData[3] = (size & 0xFF00) >> 8;
|
||||
for (i = 0; i < size; i++)
|
||||
@@ -1337,38 +1337,38 @@ void EmitCmd32(u8 bufferId, u16 size, void *data)
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, size + 3);
|
||||
}
|
||||
|
||||
void EmitCmd33(u8 bufferId, u8 arg1, u16 arg2)
|
||||
void EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_33;
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
|
||||
gBattleBuffersTransferData[1] = arg1;
|
||||
gBattleBuffersTransferData[2] = arg2;
|
||||
gBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitCmd34(u8 bufferId, u8 b, u8 *c)
|
||||
void EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_34;
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
|
||||
gBattleBuffersTransferData[1] = b;
|
||||
for (i = 0; i < 3; i++)
|
||||
gBattleBuffersTransferData[2 + i] = c[i];
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 5);
|
||||
}
|
||||
|
||||
void EmitCmd35(u8 bufferId, u16 b)
|
||||
void EmitOneReturnValue(u8 bufferId, u16 arg1)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_35;
|
||||
gBattleBuffersTransferData[1] = b;
|
||||
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE;
|
||||
gBattleBuffersTransferData[1] = arg1;
|
||||
gBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8;
|
||||
gBattleBuffersTransferData[3] = 0;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitCmd36(u8 bufferId, u16 b)
|
||||
void EmitOneReturnValue_Duplicate(u8 bufferId, u16 b)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_36;
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE;
|
||||
gBattleBuffersTransferData[1] = b;
|
||||
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
|
||||
gBattleBuffersTransferData[3] = 0;
|
||||
@@ -1378,9 +1378,9 @@ void EmitCmd36(u8 bufferId, u16 b)
|
||||
void EmitCmd37(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_37;
|
||||
gBattleBuffersTransferData[1] = 37;
|
||||
gBattleBuffersTransferData[2] = 37;
|
||||
gBattleBuffersTransferData[3] = 37;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_37;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_37;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_37;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1394,36 +1394,36 @@ void EmitCmd38(u8 bufferId, u8 b)
|
||||
void EmitCmd39(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_39;
|
||||
gBattleBuffersTransferData[1] = 39;
|
||||
gBattleBuffersTransferData[2] = 39;
|
||||
gBattleBuffersTransferData[3] = 39;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_39;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_39;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_39;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitCmd40(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_40;
|
||||
gBattleBuffersTransferData[1] = 40;
|
||||
gBattleBuffersTransferData[2] = 40;
|
||||
gBattleBuffersTransferData[3] = 40;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_40;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_40;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_40;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitHitAnimation(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_HITANIMATION;
|
||||
gBattleBuffersTransferData[1] = 41;
|
||||
gBattleBuffersTransferData[2] = 41;
|
||||
gBattleBuffersTransferData[3] = 41;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_HITANIMATION;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_HITANIMATION;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_HITANIMATION;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitCmd42(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_42;
|
||||
gBattleBuffersTransferData[1] = 42;
|
||||
gBattleBuffersTransferData[2] = 42;
|
||||
gBattleBuffersTransferData[3] = 42;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_42;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_42;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_42;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1448,9 +1448,9 @@ void EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM)
|
||||
void EmitFaintingCry(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_FAINTINGCRY;
|
||||
gBattleBuffersTransferData[1] = 45;
|
||||
gBattleBuffersTransferData[2] = 45;
|
||||
gBattleBuffersTransferData[3] = 45;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_FAINTINGCRY;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_FAINTINGCRY;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_FAINTINGCRY;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1464,9 +1464,9 @@ void EmitIntroSlide(u8 bufferId, u8 terrainId)
|
||||
void EmitIntroTrainerBallThrow(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
gBattleBuffersTransferData[1] = 47;
|
||||
gBattleBuffersTransferData[2] = 47;
|
||||
gBattleBuffersTransferData[3] = 47;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_INTROTRAINERBALLTHROW;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1477,7 +1477,7 @@ void EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
|
||||
gBattleBuffersTransferData[1] = arg2 & 0x7F;
|
||||
gBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7;
|
||||
gBattleBuffersTransferData[3] = 48;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
|
||||
for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * 6); i++)
|
||||
gBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus));
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, sizeof(struct HpAndStatus) * 6 + 4);
|
||||
@@ -1486,18 +1486,18 @@ void EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8
|
||||
void EmitCmd49(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_49;
|
||||
gBattleBuffersTransferData[1] = 49;
|
||||
gBattleBuffersTransferData[2] = 49;
|
||||
gBattleBuffersTransferData[3] = 49;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_49;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_49;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_49;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
void EmitCmd50(u8 bufferId)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_50;
|
||||
gBattleBuffersTransferData[1] = 50;
|
||||
gBattleBuffersTransferData[2] = 50;
|
||||
gBattleBuffersTransferData[3] = 50;
|
||||
gBattleBuffersTransferData[1] = CONTROLLER_50;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_50;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_50;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
@@ -1505,8 +1505,8 @@ void EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible)
|
||||
{
|
||||
gBattleBuffersTransferData[0] = CONTROLLER_SPRITEINVISIBILITY;
|
||||
gBattleBuffersTransferData[1] = isInvisible;
|
||||
gBattleBuffersTransferData[2] = 51;
|
||||
gBattleBuffersTransferData[3] = 51;
|
||||
gBattleBuffersTransferData[2] = CONTROLLER_SPRITEINVISIBILITY;
|
||||
gBattleBuffersTransferData[3] = CONTROLLER_SPRITEINVISIBILITY;
|
||||
PrepareBufferDataTransfer(bufferId, gBattleBuffersTransferData, 4);
|
||||
}
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ static void sub_818D0C4(u16 species, u32 otId, u32 personality, u8 paletteSlot,
|
||||
else
|
||||
{
|
||||
gUnknown_0203CCEC.paletteTag = paletteTag;
|
||||
LoadCompressedObjectPalette(sub_806E7CC(species, otId, personality));
|
||||
LoadCompressedObjectPalette(GetMonSpritePalStructFromOtIdPersonality(species, otId, personality));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -21,23 +21,11 @@
|
||||
#include "safari_zone.h"
|
||||
#include "battle_anim.h"
|
||||
|
||||
enum
|
||||
{
|
||||
HEALTH_BAR,
|
||||
EXP_BAR
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
HP_CURRENT,
|
||||
HP_MAX
|
||||
};
|
||||
|
||||
struct TestingBar
|
||||
{
|
||||
s32 maxValue;
|
||||
s32 currValue;
|
||||
s32 field_8;
|
||||
s32 receivedValue;
|
||||
u32 unkC_0:5;
|
||||
u32 unk10;
|
||||
};
|
||||
@@ -189,7 +177,6 @@ extern const u16 gBattleInterface_BallDisplayPal[];
|
||||
extern const u8 gHealthboxElementsGfxTable[][32];
|
||||
|
||||
// functions
|
||||
extern bool8 IsDoubleBattle(void);
|
||||
extern void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor *color, s8 speed, const u8 *str); // menu.h
|
||||
extern void LoadBattleBarGfx(u8 arg0);
|
||||
|
||||
@@ -220,10 +207,10 @@ static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite);
|
||||
static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite);
|
||||
|
||||
static u8 GetStatusIconForBankId(u8 statusElementId, u8 bank);
|
||||
static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4, u16 arg5);
|
||||
static u8 GetScaledExpFraction(s32 currValue, s32 arg1, s32 maxValue, u8 scale);
|
||||
static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5);
|
||||
static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale);
|
||||
static void sub_8074B9C(u8 bank, u8 whichBar);
|
||||
static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 *arg4, u8 arg5);
|
||||
static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 *arg4, u8 arg5);
|
||||
static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2);
|
||||
|
||||
// const rom data
|
||||
@@ -1055,12 +1042,12 @@ static void sub_8072924(struct Sprite *sprite)
|
||||
sprite->pos2.y = gSprites[otherSpriteId].pos2.y;
|
||||
}
|
||||
|
||||
void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 field_C)
|
||||
void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue)
|
||||
{
|
||||
gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId = healthboxSpriteId;
|
||||
gBattleSpritesDataPtr->battleBars[bank].maxValue = maxVal;
|
||||
gBattleSpritesDataPtr->battleBars[bank].currentValue = currVal;
|
||||
gBattleSpritesDataPtr->battleBars[bank].field_C = field_C;
|
||||
gBattleSpritesDataPtr->battleBars[bank].receivedValue = receivedValue;
|
||||
gBattleSpritesDataPtr->battleBars[bank].field_10 = -32768;
|
||||
}
|
||||
|
||||
@@ -2268,22 +2255,22 @@ s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3)
|
||||
{
|
||||
var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].currentValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].field_C,
|
||||
gBattleSpritesDataPtr->battleBars[bank].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[bank].field_10,
|
||||
6, 1);
|
||||
}
|
||||
else // exp bar
|
||||
{
|
||||
u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[bank].currentValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].field_C,
|
||||
gBattleSpritesDataPtr->battleBars[bank].receivedValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].maxValue, 8);
|
||||
if (expFraction == 0)
|
||||
expFraction = 1;
|
||||
expFraction = abs(gBattleSpritesDataPtr->battleBars[bank].field_C / expFraction);
|
||||
expFraction = abs(gBattleSpritesDataPtr->battleBars[bank].receivedValue / expFraction);
|
||||
|
||||
var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].currentValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].field_C,
|
||||
gBattleSpritesDataPtr->battleBars[bank].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[bank].field_10,
|
||||
8, expFraction);
|
||||
}
|
||||
@@ -2299,7 +2286,7 @@ s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3)
|
||||
|
||||
static void sub_8074B9C(u8 bank, u8 whichBar)
|
||||
{
|
||||
u8 array[7];
|
||||
u8 array[8];
|
||||
u8 subRet, level;
|
||||
u8 barElementId;
|
||||
u8 i;
|
||||
@@ -2309,7 +2296,7 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
|
||||
case HEALTH_BAR:
|
||||
subRet = sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].currentValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].field_C,
|
||||
gBattleSpritesDataPtr->battleBars[bank].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[bank].field_10,
|
||||
array, 6);
|
||||
barElementId = 3;
|
||||
@@ -2333,7 +2320,7 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
|
||||
case EXP_BAR:
|
||||
sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].currentValue,
|
||||
gBattleSpritesDataPtr->battleBars[bank].field_C,
|
||||
gBattleSpritesDataPtr->battleBars[bank].receivedValue,
|
||||
&gBattleSpritesDataPtr->battleBars[bank].field_10,
|
||||
array, 8);
|
||||
level = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_LEVEL);
|
||||
@@ -2355,7 +2342,7 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
|
||||
}
|
||||
}
|
||||
|
||||
static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4, u16 arg5)
|
||||
static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5)
|
||||
{
|
||||
s32 r6;
|
||||
s32 ret;
|
||||
@@ -2369,7 +2356,7 @@ static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4
|
||||
*arg3 = currValue;
|
||||
}
|
||||
|
||||
currValue -= arg2;
|
||||
currValue -= receivedValue;
|
||||
if (currValue < 0)
|
||||
currValue = 0;
|
||||
else if (currValue > maxValue)
|
||||
@@ -2394,7 +2381,7 @@ static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4
|
||||
{
|
||||
s32 var = (maxValue << 8) / arg4;
|
||||
|
||||
if (arg2 < 0)
|
||||
if (receivedValue < 0)
|
||||
{
|
||||
*arg3 = r6 + var;
|
||||
ret = *arg3 >> 8;
|
||||
@@ -2419,7 +2406,7 @@ static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4
|
||||
}
|
||||
else
|
||||
{
|
||||
if (arg2 < 0)
|
||||
if (receivedValue < 0)
|
||||
{
|
||||
*arg3 += arg5;
|
||||
if (*arg3 > currValue)
|
||||
@@ -2438,9 +2425,9 @@ static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 arg4
|
||||
return ret;
|
||||
}
|
||||
|
||||
static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 arg2, s32 *arg3, u8 *arg4, u8 arg5)
|
||||
static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 *arg4, u8 arg5)
|
||||
{
|
||||
s32 r5 = currValue - arg2;
|
||||
s32 r5 = currValue - receivedValue;
|
||||
u8 ret;
|
||||
u8 i;
|
||||
u8 r2;
|
||||
@@ -2493,7 +2480,7 @@ static s16 sub_8074F28(struct TestingBar *barInfo, s32 *arg1, u16 *arg2, s32 arg
|
||||
|
||||
ret = sub_8074DB8(barInfo->maxValue,
|
||||
barInfo->currValue,
|
||||
barInfo->field_8,
|
||||
barInfo->receivedValue,
|
||||
arg1, 6, 1);
|
||||
sub_8074F88(barInfo, arg1, arg2);
|
||||
|
||||
@@ -2514,7 +2501,7 @@ static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2)
|
||||
u8 i;
|
||||
|
||||
sub_8074E8C(barInfo->maxValue, barInfo->currValue,
|
||||
barInfo->field_8, arg1, sp8, 6);
|
||||
barInfo->receivedValue, arg1, sp8, 6);
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
sp10[i] = (barInfo->unkC_0 << 12) | (barInfo->unk10 + sp8[i]);
|
||||
@@ -2522,13 +2509,13 @@ static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2)
|
||||
CpuCopy16(sp10, arg2, sizeof(sp10));
|
||||
}
|
||||
|
||||
static u8 GetScaledExpFraction(s32 currValue, s32 arg1, s32 maxValue, u8 scale)
|
||||
static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale)
|
||||
{
|
||||
s32 r5, result;
|
||||
s8 r4, r0;
|
||||
|
||||
scale *= 8;
|
||||
r5 = currValue - arg1;
|
||||
r5 = currValue - receivedValue;
|
||||
|
||||
if (r5 < 0)
|
||||
r5 = 0;
|
||||
|
||||
@@ -1858,16 +1858,16 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
toCpy = gLinkPlayers[multiplayerID].name;
|
||||
break;
|
||||
case B_TXT_1F: // link partner name?
|
||||
toCpy = gLinkPlayers[sub_806D864(2 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
|
||||
toCpy = gLinkPlayers[GetBankMultiplayerId(2 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
|
||||
break;
|
||||
case B_TXT_20: // link opponent 1 name?
|
||||
toCpy = gLinkPlayers[sub_806D864(1 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
|
||||
toCpy = gLinkPlayers[GetBankMultiplayerId(1 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
|
||||
break;
|
||||
case B_TXT_21: // link opponent 2 name?
|
||||
toCpy = gLinkPlayers[sub_806D864(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
|
||||
toCpy = gLinkPlayers[GetBankMultiplayerId(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
|
||||
break;
|
||||
case B_TXT_22: // link scripting active name
|
||||
toCpy = gLinkPlayers[sub_806D864(gBattleScripting.bank)].name;
|
||||
toCpy = gLinkPlayers[GetBankMultiplayerId(gBattleScripting.bank)].name;
|
||||
break;
|
||||
case B_TXT_PLAYER_NAME: // player name
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
|
||||
@@ -2209,7 +2209,7 @@ static void sub_814F950(u8* dst)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_814F9EC(const u8 *text, u8 arg1)
|
||||
void BattleHandleAddTextPrinter(const u8 *text, u8 arg1)
|
||||
{
|
||||
const u8 *r8 = gUnknown_085CD660[gBattleScripting.field_24];
|
||||
bool32 r9;
|
||||
|
||||
@@ -3625,7 +3625,7 @@ static void atk23_getexp(void)
|
||||
if (gBattleExecBuffer == 0)
|
||||
{
|
||||
gActiveBank = gBattleStruct->expGetterBank;
|
||||
if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB)
|
||||
if (gBattleBufferB[gActiveBank][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBank][1] == RET_VALUE_LEVELLED_UP)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == gBattleStruct->expGetterId)
|
||||
sub_805E990(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
|
||||
@@ -5463,7 +5463,7 @@ static void atk4F_jump_if_cannot_switch(void)
|
||||
party = gPlayerParty;
|
||||
|
||||
val = 0;
|
||||
if (sub_806D82C(sub_806D864(gActiveBank)) == TRUE)
|
||||
if (sub_806D82C(GetBankMultiplayerId(gActiveBank)) == TRUE)
|
||||
val = 3;
|
||||
}
|
||||
else
|
||||
@@ -5485,7 +5485,7 @@ static void atk4F_jump_if_cannot_switch(void)
|
||||
|
||||
|
||||
val = 0;
|
||||
if (sub_806D82C(sub_806D864(gActiveBank)) == TRUE)
|
||||
if (sub_806D82C(GetBankMultiplayerId(gActiveBank)) == TRUE)
|
||||
val = 3;
|
||||
}
|
||||
|
||||
@@ -6114,33 +6114,33 @@ static void atk5A_yesnoboxlearnmove(void)
|
||||
switch (gBattleScripting.learnMoveState)
|
||||
{
|
||||
case 0:
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
|
||||
sub_814F9EC(gText_BattleYesNoChoice, 0xC);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
|
||||
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
|
||||
gBattleScripting.learnMoveState++;
|
||||
gBattleCommunication[CURSOR_POSITION] = 0;
|
||||
BattleCreateCursorAt(0);
|
||||
BattleCreateYesNoCursorAt(0);
|
||||
break;
|
||||
case 1:
|
||||
if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 0;
|
||||
BattleCreateCursorAt(0);
|
||||
BattleCreateYesNoCursorAt(0);
|
||||
}
|
||||
if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 1;
|
||||
BattleCreateCursorAt(1);
|
||||
BattleCreateYesNoCursorAt(1);
|
||||
}
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
if (gBattleCommunication[1] == 0)
|
||||
{
|
||||
sub_8056A3C(0x18, 0x8, 0x1D, 0xD, 1);
|
||||
HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
|
||||
gBattleScripting.learnMoveState++;
|
||||
}
|
||||
@@ -6214,7 +6214,7 @@ static void atk5A_yesnoboxlearnmove(void)
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
gBattlescriptCurrInstr += 5;
|
||||
break;
|
||||
case 6:
|
||||
@@ -6231,26 +6231,26 @@ static void atk5B_yesnoboxstoplearningmove(void)
|
||||
switch (gBattleScripting.learnMoveState)
|
||||
{
|
||||
case 0:
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
|
||||
sub_814F9EC(gText_BattleYesNoChoice, 0xC);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
|
||||
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
|
||||
gBattleScripting.learnMoveState++;
|
||||
gBattleCommunication[CURSOR_POSITION] = 0;
|
||||
BattleCreateCursorAt(0);
|
||||
BattleCreateYesNoCursorAt(0);
|
||||
break;
|
||||
case 1:
|
||||
if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 0;
|
||||
BattleCreateCursorAt(0);
|
||||
BattleCreateYesNoCursorAt(0);
|
||||
}
|
||||
if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 1;
|
||||
BattleCreateCursorAt(1);
|
||||
BattleCreateYesNoCursorAt(1);
|
||||
}
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
@@ -6261,13 +6261,13 @@ static void atk5B_yesnoboxstoplearningmove(void)
|
||||
else
|
||||
gBattlescriptCurrInstr += 5;
|
||||
|
||||
sub_8056A3C(0x18, 0x8, 0x1D, 0xD, 1);
|
||||
HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
}
|
||||
else if (gMain.newKeys & B_BUTTON)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
|
||||
sub_8056A3C(0x18, 0x8, 0x1D, 0xD, 1);
|
||||
HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -6527,38 +6527,38 @@ static void atk67_yesnobox(void)
|
||||
switch (gBattleCommunication[0])
|
||||
{
|
||||
case 0:
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
|
||||
sub_814F9EC(gText_BattleYesNoChoice, 0xC);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
|
||||
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
|
||||
gBattleCommunication[0]++;
|
||||
gBattleCommunication[CURSOR_POSITION] = 0;
|
||||
BattleCreateCursorAt(0);
|
||||
BattleCreateYesNoCursorAt(0);
|
||||
break;
|
||||
case 1:
|
||||
if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 0;
|
||||
BattleCreateCursorAt(0);
|
||||
BattleCreateYesNoCursorAt(0);
|
||||
}
|
||||
if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 1;
|
||||
BattleCreateCursorAt(1);
|
||||
BattleCreateYesNoCursorAt(1);
|
||||
}
|
||||
if (gMain.newKeys & B_BUTTON)
|
||||
{
|
||||
gBattleCommunication[CURSOR_POSITION] = 1;
|
||||
PlaySE(SE_SELECT);
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
gBattlescriptCurrInstr++;
|
||||
}
|
||||
else if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 1);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
gBattlescriptCurrInstr++;
|
||||
}
|
||||
break;
|
||||
@@ -6674,7 +6674,7 @@ static void atk6C_draw_lvlupbox(void)
|
||||
SetBgAttribute(1, BG_CTRL_ATTR_MOSAIC, 0);
|
||||
ShowBg(0);
|
||||
ShowBg(1);
|
||||
sub_8056A3C(0x12, 7, 0x1D, 0x13, 0x80);
|
||||
HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80);
|
||||
gBattleScripting.atk6C_state = 4;
|
||||
break;
|
||||
case 4:
|
||||
@@ -6704,7 +6704,7 @@ static void atk6C_draw_lvlupbox(void)
|
||||
if (gMain.newKeys != 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
sub_8056A3C(0x12, 7, 0x1D, 0x13, 0x81);
|
||||
HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80 | WINDOW_CLEAR);
|
||||
gBattleScripting.atk6C_state++;
|
||||
}
|
||||
break;
|
||||
@@ -7136,8 +7136,8 @@ static void atk76_various(void)
|
||||
gDisableStructs[0].truantUnknownBit = 1;
|
||||
gDisableStructs[1].truantUnknownBit = 1;
|
||||
break;
|
||||
case 13:
|
||||
EmitCmd19(0);
|
||||
case VARIOUS_EMIT_YESNOBOX:
|
||||
EmitUnknownYesNoBox(0);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
break;
|
||||
case 14:
|
||||
@@ -7148,7 +7148,7 @@ static void atk76_various(void)
|
||||
break;
|
||||
case 16:
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[gBattlescriptCurrInstr[1]]);
|
||||
sub_814F9EC(gDisplayedStringBattle, 0x16);
|
||||
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0x16);
|
||||
break;
|
||||
case 17:
|
||||
if (IsTextPrinterActive(0x16))
|
||||
@@ -7255,7 +7255,7 @@ static void atk78_faintifabilitynotdamp(void)
|
||||
{
|
||||
gActiveBank = gBankAttacker;
|
||||
gBattleMoveDamage = gBattleMons[gActiveBank].hp;
|
||||
EmitHealthBarUpdate(0, 0x7FFF);
|
||||
EmitHealthBarUpdate(0, INSTANT_HP_BAR_DROP);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
gBattlescriptCurrInstr++;
|
||||
|
||||
@@ -7933,7 +7933,7 @@ static void atk8F_forcerandomswitch(void)
|
||||
else if ((gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
|| (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_x2000000))
|
||||
{
|
||||
if (sub_806D82C(sub_806D864(gBankTarget)) == 1)
|
||||
if (sub_806D82C(GetBankMultiplayerId(gBankTarget)) == 1)
|
||||
{
|
||||
firstMonId = 3;
|
||||
lastMonId = 6;
|
||||
@@ -8443,7 +8443,7 @@ static void atk9B_transformdataexecution(void)
|
||||
gBattleMons[gBankAttacker].status2 |= STATUS2_TRANSFORMED;
|
||||
gDisableStructs[gBankAttacker].disabledMove = 0;
|
||||
gDisableStructs[gBankAttacker].disableTimer1 = 0;
|
||||
gDisableStructs[gBankAttacker].unk0 = gBattleMons[gBankTarget].personality;
|
||||
gDisableStructs[gBankAttacker].transformedMonPersonality = gBattleMons[gBankTarget].personality;
|
||||
gDisableStructs[gBankAttacker].unk18_b = 0;
|
||||
|
||||
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBankTarget].species)
|
||||
@@ -9152,7 +9152,7 @@ static void atkA8_copymovepermanently(void) // sketch
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
movePpData.move[i] = gBattleMons[gBankAttacker].moves[i];
|
||||
movePpData.moves[i] = gBattleMons[gBankAttacker].moves[i];
|
||||
movePpData.pp[i] = gBattleMons[gBankAttacker].pp[i];
|
||||
}
|
||||
movePpData.ppBonuses = gBattleMons[gBankAttacker].ppBonuses;
|
||||
@@ -10184,7 +10184,7 @@ static void atkC9_jumpifattackandspecialattackcannotfall(void) // memento
|
||||
{
|
||||
gActiveBank = gBankAttacker;
|
||||
gBattleMoveDamage = gBattleMons[gActiveBank].hp;
|
||||
EmitHealthBarUpdate(0, 0x7FFF);
|
||||
EmitHealthBarUpdate(0, INSTANT_HP_BAR_DROP);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
gBattlescriptCurrInstr += 5;
|
||||
}
|
||||
@@ -11003,13 +11003,13 @@ static void atkEF_pokeball_catch_calculation(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
|
||||
{
|
||||
EmitBallThrow(0, BALL_TRAINER_BLOCK);
|
||||
EmitBallThrowAnim(0, BALL_TRAINER_BLOCK);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
gBattlescriptCurrInstr = BattleScript_TrainerBallBlock;
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
|
||||
{
|
||||
EmitBallThrow(0, BALL_3_SHAKES_SUCCESS);
|
||||
EmitBallThrowAnim(0, BALL_3_SHAKES_SUCCESS);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
gBattlescriptCurrInstr = BattleScript_WallyBallThrow;
|
||||
}
|
||||
@@ -11098,7 +11098,7 @@ static void atkEF_pokeball_catch_calculation(void)
|
||||
|
||||
if (odds > 254) // mon caught
|
||||
{
|
||||
EmitBallThrow(0, BALL_3_SHAKES_SUCCESS);
|
||||
EmitBallThrowAnim(0, BALL_3_SHAKES_SUCCESS);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
|
||||
SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
|
||||
@@ -11120,7 +11120,7 @@ static void atkEF_pokeball_catch_calculation(void)
|
||||
if (gLastUsedItem == ITEM_MASTER_BALL)
|
||||
shakes = BALL_3_SHAKES_SUCCESS; // why calculate the shakes before that check?
|
||||
|
||||
EmitBallThrow(0, shakes);
|
||||
EmitBallThrowAnim(0, shakes);
|
||||
MarkBufferBankForExecution(gActiveBank);
|
||||
|
||||
if (shakes == BALL_3_SHAKES_SUCCESS) // mon caught, copy of the code above
|
||||
@@ -11238,7 +11238,7 @@ static void atkF2_display_dex_info(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
|
||||
void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
|
||||
{
|
||||
s32 destY, destX;
|
||||
u16 var = 0;
|
||||
@@ -11275,10 +11275,10 @@ void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
|
||||
var = 0x1026;
|
||||
}
|
||||
|
||||
if (flags & 1)
|
||||
if (flags & WINDOW_CLEAR)
|
||||
var = 0;
|
||||
|
||||
if (flags & 0x80)
|
||||
if (flags & WINDOW_x80)
|
||||
CopyToBgTilemapBufferRect_ChangePalette(1, &var, destX, destY, 1, 1, 0x11);
|
||||
else
|
||||
CopyToBgTilemapBufferRect_ChangePalette(0, &var, destX, destY, 1, 1, 0x11);
|
||||
@@ -11286,7 +11286,7 @@ void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
|
||||
}
|
||||
}
|
||||
|
||||
void BattleCreateCursorAt(u8 cursorPosition)
|
||||
void BattleCreateYesNoCursorAt(u8 cursorPosition)
|
||||
{
|
||||
u16 src[2];
|
||||
src[0] = 1;
|
||||
@@ -11296,7 +11296,7 @@ void BattleCreateCursorAt(u8 cursorPosition)
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
}
|
||||
|
||||
void BattleDestroyCursorAt(u8 cursorPosition)
|
||||
void BattleDestroyYesNoCursorAt(u8 cursorPosition)
|
||||
{
|
||||
u16 src[2];
|
||||
src[0] = 0x1016;
|
||||
@@ -11311,26 +11311,26 @@ static void atkF3_nickname_caught_poke(void)
|
||||
switch (gBattleCommunication[MULTIUSE_STATE])
|
||||
{
|
||||
case 0:
|
||||
sub_8056A3C(0x18, 8, 0x1D, 0xD, 0);
|
||||
sub_814F9EC(gText_BattleYesNoChoice, 0xC);
|
||||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
|
||||
BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
gBattleCommunication[CURSOR_POSITION] = 0;
|
||||
BattleCreateCursorAt(0);
|
||||
BattleCreateYesNoCursorAt(0);
|
||||
break;
|
||||
case 1:
|
||||
if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 0;
|
||||
BattleCreateCursorAt(0);
|
||||
BattleCreateYesNoCursorAt(0);
|
||||
}
|
||||
if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
BattleDestroyCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]);
|
||||
gBattleCommunication[CURSOR_POSITION] = 1;
|
||||
BattleCreateCursorAt(1);
|
||||
BattleCreateYesNoCursorAt(1);
|
||||
}
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
|
||||
@@ -1729,7 +1729,7 @@ bool8 sub_80423F4(u8 bank, u8 r1, u8 r2)
|
||||
if (GetBankSide(bank) == SIDE_PLAYER)
|
||||
{
|
||||
party = gPlayerParty;
|
||||
r7 = sub_806D864(bank);
|
||||
r7 = GetBankMultiplayerId(bank);
|
||||
r6 = sub_806D82C(r7);
|
||||
}
|
||||
else
|
||||
@@ -1748,7 +1748,7 @@ bool8 sub_80423F4(u8 bank, u8 r1, u8 r2)
|
||||
}
|
||||
else
|
||||
{
|
||||
r7 = sub_806D864(bank);
|
||||
r7 = GetBankMultiplayerId(bank);
|
||||
if (GetBankSide(bank) == SIDE_PLAYER)
|
||||
party = gPlayerParty;
|
||||
else
|
||||
|
||||
611
src/evolution_graphics.c
Normal file
611
src/evolution_graphics.c
Normal file
@@ -0,0 +1,611 @@
|
||||
#include "global.h"
|
||||
#include "evolution_graphics.h"
|
||||
#include "sprite.h"
|
||||
#include "trig.h"
|
||||
#include "rng.h"
|
||||
#include "decompress.h"
|
||||
#include "task.h"
|
||||
#include "sound.h"
|
||||
#include "songs.h"
|
||||
#include "palette.h"
|
||||
|
||||
// this file's functions
|
||||
static void EvoSparkle_DummySpriteCb(struct Sprite* sprite);
|
||||
static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID);
|
||||
static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID);
|
||||
static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskID);
|
||||
static void EvoTask_BeginPreSparklesSet2(u8 taskID);
|
||||
static void EvoTask_CreatePreEvoSparklesSet2(u8 taskID);
|
||||
static void EvoTask_DestroyPreSet2Task(u8 taskID);
|
||||
static void EvoTask_BeginPostSparklesSet1(u8 taskID);
|
||||
static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID);
|
||||
static void EvoTask_DestroyPostSet1Task(u8 taskID);
|
||||
static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID);
|
||||
static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID);
|
||||
static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID);
|
||||
static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID);
|
||||
static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID);
|
||||
static void sub_817C4EC(u8 taskID);
|
||||
static void sub_817C510(u8 taskID);
|
||||
static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskID);
|
||||
static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskID);
|
||||
static void sub_817C560(u8 taskID);
|
||||
|
||||
static const u16 sEvoSparklePalette[] = INCBIN_U16("graphics/misc/evo_sparkle.gbapal");
|
||||
static const u8 sEvoSparkleTiles[] = INCBIN_U8("graphics/misc/evo_sparkle.4bpp.lz");
|
||||
|
||||
static const struct CompressedSpriteSheet sEvoSparkleSpriteSheets[] =
|
||||
{
|
||||
{sEvoSparkleTiles, 0x20, 1001},
|
||||
{NULL, 0, 0}
|
||||
};
|
||||
|
||||
static const struct SpritePalette sEvoSparkleSpritePals[] =
|
||||
{
|
||||
{sEvoSparklePalette, 1001},
|
||||
{NULL, 0}
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_EvoSparkle =
|
||||
{
|
||||
.y = 160,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 0,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_EvoSparkle[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 8),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_EvoSparkle[] =
|
||||
{
|
||||
sSpriteAnim_EvoSparkle,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sEvoSparkleSpriteTemplate =
|
||||
{
|
||||
.tileTag = 1001,
|
||||
.paletteTag = 1001,
|
||||
.oam = &sOamData_EvoSparkle,
|
||||
.anims = sSpriteAnimTable_EvoSparkle,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = EvoSparkle_DummySpriteCb
|
||||
};
|
||||
|
||||
static const s16 sEvoSparkleMatrices[] =
|
||||
{
|
||||
0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280, 0x240, 0x200, 0x1C0,
|
||||
0x180, 0x140, 0x100, -4, 0x10, -3, 0x30, -2, 0x50,
|
||||
-1, 0x70, 0x1, 0x70, 0x2, 0x50, 0x3, 0x30, 0x4, 0x10
|
||||
};
|
||||
|
||||
static void EvoSparkle_DummySpriteCb(struct Sprite *sprite)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void SetEvoSparklesMatrices(void)
|
||||
{
|
||||
u16 i;
|
||||
for (i = 0; i < 12; i++)
|
||||
{
|
||||
SetOamMatrix(20 + i, sEvoSparkleMatrices[i], 0, 0, sEvoSparkleMatrices[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_PreEvoSparkleSet1(struct Sprite* sprite)
|
||||
{
|
||||
if (sprite->pos1.y > 8)
|
||||
{
|
||||
u8 matrixNum;
|
||||
|
||||
sprite->pos1.y = 88 - (sprite->data7 * sprite->data7) / 80;
|
||||
sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5) / 4;
|
||||
sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5);
|
||||
sprite->data6 += 4;
|
||||
if (sprite->data7 & 1)
|
||||
sprite->data5--;
|
||||
sprite->data7++;
|
||||
if (sprite->pos2.y > 0)
|
||||
sprite->subpriority = 1;
|
||||
else
|
||||
sprite->subpriority = 20;
|
||||
matrixNum = sprite->data5 / 4 + 20;
|
||||
if (matrixNum > 31)
|
||||
matrixNum = 31;
|
||||
sprite->oam.matrixNum = matrixNum;
|
||||
}
|
||||
else
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
|
||||
static void CreatePreEvoSparkleSet1(u8 arg0)
|
||||
{
|
||||
u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 88, 0);
|
||||
if (spriteID != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteID].data5 = 48;
|
||||
gSprites[spriteID].data6 = arg0;
|
||||
gSprites[spriteID].data7 = 0;
|
||||
gSprites[spriteID].oam.affineMode = 1;
|
||||
gSprites[spriteID].oam.matrixNum = 31;
|
||||
gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet1;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_PreEvoSparkleSet2(struct Sprite* sprite)
|
||||
{
|
||||
if (sprite->pos1.y < 88)
|
||||
{
|
||||
sprite->pos1.y = 8 + (sprite->data7 * sprite->data7) / 5;
|
||||
sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5) / 4;
|
||||
sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5);
|
||||
sprite->data5 = 8 + Sin((u8)(sprite->data7 * 4), 40);
|
||||
sprite->data7++;
|
||||
}
|
||||
else
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
|
||||
static void CreatePreEvoSparkleSet2(u8 arg0)
|
||||
{
|
||||
u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 8, 0);
|
||||
if (spriteID != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteID].data5 = 8;
|
||||
gSprites[spriteID].data6 = arg0;
|
||||
gSprites[spriteID].data7 = 0;
|
||||
gSprites[spriteID].oam.affineMode = 1;
|
||||
gSprites[spriteID].oam.matrixNum = 25;
|
||||
gSprites[spriteID].subpriority = 1;
|
||||
gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet2;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_PostEvoSparkleSet1(struct Sprite* sprite)
|
||||
{
|
||||
if (sprite->data5 > 8)
|
||||
{
|
||||
sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5);
|
||||
sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5);
|
||||
sprite->data5 -= sprite->data3;
|
||||
sprite->data6 += 4;
|
||||
}
|
||||
else
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
|
||||
static void CreatePostEvoSparkleSet1(u8 arg0, u8 arg1)
|
||||
{
|
||||
u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0);
|
||||
if (spriteID != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteID].data3 = arg1;
|
||||
gSprites[spriteID].data5 = 120;
|
||||
gSprites[spriteID].data6 = arg0;
|
||||
gSprites[spriteID].data7 = 0;
|
||||
gSprites[spriteID].oam.affineMode = 1;
|
||||
gSprites[spriteID].oam.matrixNum = 31;
|
||||
gSprites[spriteID].subpriority = 1;
|
||||
gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet1;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_PostEvoSparkleSet2(struct Sprite* sprite)
|
||||
{
|
||||
if (!(sprite->data7 & 3))
|
||||
sprite->pos1.y++;
|
||||
if (sprite->data6 < 128)
|
||||
{
|
||||
u8 matrixNum;
|
||||
|
||||
sprite->pos2.y = -Sin((u8)(sprite->data6), sprite->data5);
|
||||
sprite->pos1.x = 120 + (sprite->data3 * sprite->data7) / 3;
|
||||
sprite->data6++;
|
||||
matrixNum = 31 - (sprite->data6 * 12 / 128);
|
||||
if (sprite->data6 > 64)
|
||||
sprite->subpriority = 1;
|
||||
else
|
||||
{
|
||||
sprite->invisible = 0;
|
||||
sprite->subpriority = 20;
|
||||
if (sprite->data6 > 112 && sprite->data6 & 1)
|
||||
sprite->invisible = 1;
|
||||
}
|
||||
if (matrixNum < 20)
|
||||
matrixNum = 20;
|
||||
sprite->oam.matrixNum = matrixNum;
|
||||
sprite->data7++;
|
||||
}
|
||||
else
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
|
||||
static void CreatePostEvoSparkleSet2(u8 arg0)
|
||||
{
|
||||
u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0);
|
||||
if (spriteID != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteID].data3 = 3 - (Random() % 7);
|
||||
gSprites[spriteID].data5 = 48 + (Random() & 0x3F);
|
||||
gSprites[spriteID].data7 = 0;
|
||||
gSprites[spriteID].oam.affineMode = 1;
|
||||
gSprites[spriteID].oam.matrixNum = 31;
|
||||
gSprites[spriteID].subpriority = 20;
|
||||
gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet2;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadEvoSparkleSpriteAndPal(void)
|
||||
{
|
||||
LoadCompressedObjectPicUsingHeap(&sEvoSparkleSpriteSheets[0]);
|
||||
LoadSpritePalettes(sEvoSparkleSpritePals);
|
||||
}
|
||||
|
||||
#define tFrameCounter data[15]
|
||||
|
||||
u8 LaunchTask_PreEvoSparklesSet1(u16 arg0)
|
||||
{
|
||||
u8 taskID = CreateTask(EvoTask_BeginPreSet1_FadeAndPlaySE, 0);
|
||||
gTasks[taskID].data[1] = arg0;
|
||||
return taskID;
|
||||
}
|
||||
|
||||
static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID)
|
||||
{
|
||||
SetEvoSparklesMatrices();
|
||||
gTasks[taskID].tFrameCounter = 0;
|
||||
BeginNormalPaletteFade(3 << gTasks[taskID].data[1], 0xA, 0, 0x10, 0x7FFF);
|
||||
gTasks[taskID].func = EvoTask_CreatePreEvoSparkleSet1;
|
||||
PlaySE(SE_W025);
|
||||
}
|
||||
|
||||
static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID)
|
||||
{
|
||||
if (gTasks[taskID].tFrameCounter < 64)
|
||||
{
|
||||
if (!(gTasks[taskID].tFrameCounter & 7))
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < 4; i++)
|
||||
CreatePreEvoSparkleSet1((0x78 & gTasks[taskID].tFrameCounter) * 2 + i * 64);
|
||||
}
|
||||
gTasks[taskID].tFrameCounter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskID].tFrameCounter = 96;
|
||||
gTasks[taskID].func = EvoTask_WaitForPre1SparklesToGoUp;
|
||||
}
|
||||
}
|
||||
|
||||
static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskID)
|
||||
{
|
||||
if (gTasks[taskID].tFrameCounter != 0)
|
||||
gTasks[taskID].tFrameCounter--;
|
||||
else
|
||||
DestroyTask(taskID);
|
||||
}
|
||||
|
||||
u8 LaunchTask_PreEvoSparklesSet2(void)
|
||||
{
|
||||
return CreateTask(EvoTask_BeginPreSparklesSet2, 0);
|
||||
}
|
||||
|
||||
static void EvoTask_BeginPreSparklesSet2(u8 taskID)
|
||||
{
|
||||
SetEvoSparklesMatrices();
|
||||
gTasks[taskID].tFrameCounter = 0;
|
||||
gTasks[taskID].func = EvoTask_CreatePreEvoSparklesSet2;
|
||||
PlaySE(SE_W062B);
|
||||
}
|
||||
|
||||
static void EvoTask_CreatePreEvoSparklesSet2(u8 taskID)
|
||||
{
|
||||
if (gTasks[taskID].tFrameCounter < 96)
|
||||
{
|
||||
if (gTasks[taskID].tFrameCounter < 6)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < 9; i++)
|
||||
CreatePreEvoSparkleSet2(i * 16);
|
||||
}
|
||||
gTasks[taskID].tFrameCounter++;
|
||||
}
|
||||
else
|
||||
gTasks[taskID].func = EvoTask_DestroyPreSet2Task;
|
||||
}
|
||||
|
||||
static void EvoTask_DestroyPreSet2Task(u8 taskID)
|
||||
{
|
||||
DestroyTask(taskID);
|
||||
}
|
||||
|
||||
u8 LaunchTask_PostEvoSparklesSet1(void)
|
||||
{
|
||||
return CreateTask(EvoTask_BeginPostSparklesSet1, 0);
|
||||
}
|
||||
|
||||
static void EvoTask_BeginPostSparklesSet1(u8 taskID)
|
||||
{
|
||||
SetEvoSparklesMatrices();
|
||||
gTasks[taskID].tFrameCounter = 0;
|
||||
gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet1;
|
||||
PlaySE(SE_REAPOKE);
|
||||
}
|
||||
|
||||
static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID)
|
||||
{
|
||||
if (gTasks[taskID].tFrameCounter < 48)
|
||||
{
|
||||
if (gTasks[taskID].tFrameCounter == 0)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < 16; i++)
|
||||
CreatePostEvoSparkleSet1(i * 16, 4);
|
||||
}
|
||||
if (gTasks[taskID].tFrameCounter == 32)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < 16; i++)
|
||||
CreatePostEvoSparkleSet1(i * 16, 8);
|
||||
}
|
||||
gTasks[taskID].tFrameCounter++;
|
||||
}
|
||||
else
|
||||
gTasks[taskID].func = EvoTask_DestroyPostSet1Task;
|
||||
}
|
||||
|
||||
static void EvoTask_DestroyPostSet1Task(u8 taskID)
|
||||
{
|
||||
DestroyTask(taskID);
|
||||
}
|
||||
|
||||
u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species)
|
||||
{
|
||||
u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash, 0);
|
||||
gTasks[taskID].data[2] = species;
|
||||
return taskID;
|
||||
}
|
||||
|
||||
static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID)
|
||||
{
|
||||
SetEvoSparklesMatrices();
|
||||
gTasks[taskID].tFrameCounter = 0;
|
||||
CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30);
|
||||
BeginNormalPaletteFade(0xFFF9041C, 0, 0, 0x10, 0x7FFF); // was 0xFFF9001C in R/S
|
||||
gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash;
|
||||
PlaySE(SE_W080);
|
||||
}
|
||||
|
||||
static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID)
|
||||
{
|
||||
if (gTasks[taskID].tFrameCounter < 128)
|
||||
{
|
||||
u8 i;
|
||||
switch (gTasks[taskID].tFrameCounter)
|
||||
{
|
||||
default:
|
||||
if (gTasks[taskID].tFrameCounter < 50)
|
||||
CreatePostEvoSparkleSet2(Random() & 7);
|
||||
break;
|
||||
case 0:
|
||||
for (i = 0; i < 8; i++)
|
||||
CreatePostEvoSparkleSet2(i);
|
||||
break;
|
||||
case 32:
|
||||
BeginNormalPaletteFade(0xFFFF041C, 0x10, 0x10, 0, 0x7FFF); // was 0xFFF9001C in R/S
|
||||
break;
|
||||
}
|
||||
gTasks[taskID].tFrameCounter++;
|
||||
}
|
||||
else
|
||||
gTasks[taskID].func = EvoTask_DestroyPostSet2AndFlashTask;
|
||||
}
|
||||
|
||||
static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
DestroyTask(taskID);
|
||||
}
|
||||
|
||||
u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species)
|
||||
{
|
||||
u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash_Trade, 0);
|
||||
gTasks[taskID].data[2] = species;
|
||||
return taskID;
|
||||
}
|
||||
|
||||
static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID)
|
||||
{
|
||||
SetEvoSparklesMatrices();
|
||||
gTasks[taskID].tFrameCounter = 0;
|
||||
CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30);
|
||||
BeginNormalPaletteFade(0xFFF90400, 0, 0, 0x10, 0x7FFF); // was 0xFFFF0001 in R/S
|
||||
gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade;
|
||||
PlaySE(SE_W080);
|
||||
}
|
||||
|
||||
static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID)
|
||||
{
|
||||
if (gTasks[taskID].tFrameCounter < 128)
|
||||
{
|
||||
u8 i;
|
||||
switch (gTasks[taskID].tFrameCounter)
|
||||
{
|
||||
default:
|
||||
if (gTasks[taskID].tFrameCounter < 50)
|
||||
CreatePostEvoSparkleSet2(Random() & 7);
|
||||
break;
|
||||
case 0:
|
||||
for (i = 0; i < 8; i++)
|
||||
CreatePostEvoSparkleSet2(i);
|
||||
break;
|
||||
case 32:
|
||||
BeginNormalPaletteFade(0xFFFF0400, 0x10, 0x10, 0, 0x7FFF); // was 0xFFFF0001 in R/S
|
||||
break;
|
||||
}
|
||||
gTasks[taskID].tFrameCounter++;
|
||||
}
|
||||
else
|
||||
gTasks[taskID].func = EvoTask_DestroyPostSet2AndFlashTask;
|
||||
}
|
||||
|
||||
#undef tFrameCounter
|
||||
|
||||
static void PokeEvoSprite_DummySpriteCB(struct Sprite* sprite)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#define tPreEvoSpriteID data[1]
|
||||
#define tPostEvoSpriteID data[2]
|
||||
#define tEvoStopped data[8]
|
||||
|
||||
u8 sub_817C3A0(u8 preEvoSpriteID, u8 postEvoSpriteID)
|
||||
{
|
||||
u16 i;
|
||||
u16 stack[16];
|
||||
u8 taskID;
|
||||
s32 toDiv;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
stack[i] = 0x7FFF;
|
||||
|
||||
taskID = CreateTask(sub_817C4EC, 0);
|
||||
gTasks[taskID].tPreEvoSpriteID = preEvoSpriteID;
|
||||
gTasks[taskID].tPostEvoSpriteID = postEvoSpriteID;
|
||||
gTasks[taskID].data[3] = 256;
|
||||
gTasks[taskID].data[4] = 16;
|
||||
|
||||
toDiv = 65536;
|
||||
SetOamMatrix(30, 256, 0, 0, 256);
|
||||
SetOamMatrix(31, toDiv / gTasks[taskID].data[4], 0, 0, toDiv / gTasks[taskID].data[4]);
|
||||
|
||||
gSprites[preEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB;
|
||||
gSprites[preEvoSpriteID].oam.affineMode = 1;
|
||||
gSprites[preEvoSpriteID].oam.matrixNum = 30;
|
||||
gSprites[preEvoSpriteID].invisible = 0;
|
||||
CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteID].oam.paletteNum * 16)], 16);
|
||||
|
||||
gSprites[postEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB;
|
||||
gSprites[postEvoSpriteID].oam.affineMode = 1;
|
||||
gSprites[postEvoSpriteID].oam.matrixNum = 31;
|
||||
gSprites[postEvoSpriteID].invisible = 0;
|
||||
CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteID].oam.paletteNum * 16)], 16);
|
||||
|
||||
gTasks[taskID].tEvoStopped = FALSE;
|
||||
return taskID;
|
||||
}
|
||||
|
||||
static void sub_817C4EC(u8 taskID)
|
||||
{
|
||||
gTasks[taskID].data[5] = 0;
|
||||
gTasks[taskID].data[6] = 8;
|
||||
gTasks[taskID].func = sub_817C510;
|
||||
}
|
||||
|
||||
static void sub_817C510(u8 taskID)
|
||||
{
|
||||
if (gTasks[taskID].tEvoStopped)
|
||||
PreEvoVisible_PostEvoInvisible_KillTask(taskID);
|
||||
else if (gTasks[taskID].data[6] == 128)
|
||||
PreEvoInvisible_PostEvoVisible_KillTask(taskID);
|
||||
else
|
||||
{
|
||||
gTasks[taskID].data[6] += 2;
|
||||
gTasks[taskID].data[5] ^= 1;
|
||||
gTasks[taskID].func = sub_817C560;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_817C560(u8 taskID)
|
||||
{
|
||||
if (gTasks[taskID].tEvoStopped)
|
||||
gTasks[taskID].func = PreEvoVisible_PostEvoInvisible_KillTask;
|
||||
else
|
||||
{
|
||||
u16 oamMatrixArg;
|
||||
u8 r6 = 0;
|
||||
if (gTasks[taskID].data[5] == 0)
|
||||
{
|
||||
if (gTasks[taskID].data[3] < 256 - gTasks[taskID].data[6])
|
||||
gTasks[taskID].data[3] += gTasks[taskID].data[6];
|
||||
else
|
||||
{
|
||||
gTasks[taskID].data[3] = 256;
|
||||
r6++;
|
||||
}
|
||||
if (gTasks[taskID].data[4] > 16 + gTasks[taskID].data[6])
|
||||
gTasks[taskID].data[4] -= gTasks[taskID].data[6];
|
||||
else
|
||||
{
|
||||
gTasks[taskID].data[4] = 16;
|
||||
r6++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gTasks[taskID].data[4] < 256 - gTasks[taskID].data[6])
|
||||
gTasks[taskID].data[4] += gTasks[taskID].data[6];
|
||||
else
|
||||
{
|
||||
gTasks[taskID].data[4] = 256;
|
||||
r6++;
|
||||
}
|
||||
if (gTasks[taskID].data[3] > 16 + gTasks[taskID].data[6])
|
||||
gTasks[taskID].data[3] -= gTasks[taskID].data[6];
|
||||
else
|
||||
{
|
||||
gTasks[taskID].data[3] = 16;
|
||||
r6++;
|
||||
}
|
||||
}
|
||||
oamMatrixArg = 65536 / gTasks[taskID].data[3];
|
||||
SetOamMatrix(30, oamMatrixArg, 0, 0, oamMatrixArg);
|
||||
|
||||
oamMatrixArg = 65536 / gTasks[taskID].data[4];
|
||||
SetOamMatrix(31, oamMatrixArg, 0, 0, oamMatrixArg);
|
||||
if (r6 == 2)
|
||||
gTasks[taskID].func = sub_817C510;
|
||||
}
|
||||
}
|
||||
|
||||
static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskID)
|
||||
{
|
||||
gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0;
|
||||
gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0;
|
||||
gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = 1;
|
||||
|
||||
gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0;
|
||||
gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0;
|
||||
gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = 0;
|
||||
|
||||
DestroyTask(taskID);
|
||||
}
|
||||
|
||||
static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskID)
|
||||
{
|
||||
gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0;
|
||||
gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0;
|
||||
gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = 0;
|
||||
|
||||
gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0;
|
||||
gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0;
|
||||
gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = 1;
|
||||
|
||||
DestroyTask(taskID);
|
||||
}
|
||||
1506
src/evolution_scene.c
Normal file
1506
src/evolution_scene.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -84,7 +84,7 @@ bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 bank)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u8 sub_8069F34(u8 bank)
|
||||
u8 GetDefaultMoveTarget(u8 bank)
|
||||
{
|
||||
u8 status = GetBankIdentity(bank) & 1;
|
||||
|
||||
@@ -194,6 +194,7 @@ void sub_806A1C0(u16 arg0, u8 bankIdentity)
|
||||
gUnknown_0202499C = gMonSpritesGfxPtr->templates[bankIdentity];
|
||||
else
|
||||
gUnknown_0202499C = gUnknown_08329D98[bankIdentity];
|
||||
|
||||
gUnknown_0202499C.paletteTag = arg0;
|
||||
gUnknown_0202499C.anims = gUnknown_0830536C[arg0];
|
||||
}
|
||||
@@ -1304,7 +1305,7 @@ void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex)
|
||||
}
|
||||
|
||||
void sub_803FA70(u8 bank);
|
||||
void sub_805EF84(u8 bank, bool8);
|
||||
void ClearTemporarySpeciesSpriteData(u8 bank, bool8);
|
||||
|
||||
extern struct BattlePokemon gBattleMons[4];
|
||||
|
||||
@@ -1360,5 +1361,5 @@ void CopyPlayerPartyMonToBattleData(u8 bank, u8 partyIndex)
|
||||
|
||||
gBattleMons[bank].status2 = 0;
|
||||
sub_803FA70(bank);
|
||||
sub_805EF84(bank, FALSE);
|
||||
ClearTemporarySpeciesSpriteData(bank, FALSE);
|
||||
}
|
||||
|
||||
@@ -618,7 +618,7 @@ bool16 sub_806D82C(u8 id)
|
||||
return retVal;
|
||||
}
|
||||
|
||||
s32 sub_806D864(u16 a1)
|
||||
s32 GetBankMultiplayerId(u16 a1)
|
||||
{
|
||||
s32 id;
|
||||
for (id = 0; id < MAX_LINK_PLAYERS; id++)
|
||||
@@ -1267,10 +1267,10 @@ const struct CompressedSpritePalette *sub_806E794(struct Pokemon *mon)
|
||||
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
|
||||
u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0);
|
||||
u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0);
|
||||
return sub_806E7CC(species, otId, personality);
|
||||
return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
|
||||
}
|
||||
|
||||
const struct CompressedSpritePalette *sub_806E7CC(u16 species, u32 otId , u32 personality)
|
||||
const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality)
|
||||
{
|
||||
u32 shinyValue;
|
||||
|
||||
@@ -1477,7 +1477,7 @@ const u8* GetTrainerPartnerName(void)
|
||||
else
|
||||
{
|
||||
u8 id = GetMultiplayerId();
|
||||
return gLinkPlayers[sub_806D864(gLinkPlayers[id].lp_field_18 ^ 2)].name;
|
||||
return gLinkPlayers[GetBankMultiplayerId(gLinkPlayers[id].lp_field_18 ^ 2)].name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1659,7 +1659,7 @@ u16 sub_806EFF0(u16 arg0)
|
||||
return gUnknown_0831F578[arg0];
|
||||
}
|
||||
|
||||
u16 sub_806F000(u8 playerGender)
|
||||
u16 PlayerGenderToFrontTrainerPicId(u8 playerGender)
|
||||
{
|
||||
if (playerGender)
|
||||
return sub_806EFF0(0x3F);
|
||||
|
||||
@@ -220,9 +220,9 @@ static bool8 LoadBankSpriteGfx(u8 bank)
|
||||
BattleLoadSubstituteSpriteGfx(bank, FALSE);
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0)
|
||||
LoadBackTrainerBankSpriteGfx(gSaveBlock2Ptr->playerGender, bank);
|
||||
DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, bank);
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0)
|
||||
LoadBackTrainerBankSpriteGfx(BACK_PIC_WALLY, bank);
|
||||
DecompressTrainerBackPic(BACK_PIC_WALLY, bank);
|
||||
else if (!gBattleSpritesDataPtr->bankData[bank].behindSubstitute)
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlePartyID[bank]], bank);
|
||||
else
|
||||
|
||||
@@ -704,7 +704,7 @@ u8 sub_80E98AC(struct Pokemon *pokemon)
|
||||
evTotal = GetMonData(pokemon, MON_DATA_HP_EV);
|
||||
evTotal += GetMonData(pokemon, MON_DATA_ATK_EV);
|
||||
evTotal += GetMonData(pokemon, MON_DATA_DEF_EV);
|
||||
evTotal += GetMonData(pokemon, MON_DATA_SPD_EV);
|
||||
evTotal += GetMonData(pokemon, MON_DATA_SPEED_EV);
|
||||
evTotal += GetMonData(pokemon, MON_DATA_SPATK_EV);
|
||||
evTotal += GetMonData(pokemon, MON_DATA_SPDEF_EV);
|
||||
return evTotal / 6;
|
||||
|
||||
Reference in New Issue
Block a user