updated battle_controller_opponent up to CONTROLLER_PRINTSTRING

This commit is contained in:
cawtds
2024-05-10 14:07:13 +02:00
parent 7331c111a9
commit bc98505134
3 changed files with 37 additions and 235 deletions

View File

@@ -265,7 +265,7 @@ void HideBagWindow(u8 whichWindow)
}
u8 OpenBagWindow(u8 whichWindow)
{
{
if (sOpenWindows[whichWindow] == 0xFF)
{
sOpenWindows[whichWindow] = AddWindow(&sWindowTemplates[whichWindow]);

View File

@@ -26,13 +26,6 @@ static void OpponentHandleSwitchInAnim(u32 battler);
static void OpponentHandleDrawTrainerPic(u32 battler);
static void OpponentHandleTrainerSlide(u32 battler);
static void OpponentHandleTrainerSlideBack(u32 battler);
static void OpponentHandleFaintAnimation(u32 battler);
static void OpponentHandlePaletteFade(u32 battler);
static void OpponentHandleSuccessBallThrowAnim(u32 battler);
static void OpponentHandleBallThrowAnim(u32 battler);
static void OpponentHandlePause(u32 battler);
static void OpponentHandleMoveAnimation(u32 battler);
static void OpponentHandlePrintString(u32 battler);
static void OpponentHandlePrintSelectionString(u32 battler);
static void OpponentHandleChooseAction(u32 battler);
static void OpponentHandleUnknownYesNoBox(u32 battler);
@@ -75,7 +68,6 @@ static void OpponentHandleCmd55(u32 battler);
static void OpponentCmdEnd(u32 battler);
static void OpponentBufferRunCommand(u32 battler);
static void OpponentDoMoveAnimation(u32 battler);
static void SwitchIn_HandleSoundAndEnd(u32 battler);
static void Task_StartSendOutAnim(u8 taskId);
static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite);
@@ -91,15 +83,15 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler)
[CONTROLLER_SWITCHINANIM] = OpponentHandleSwitchInAnim, // done
[CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, // done
[CONTROLLER_DRAWTRAINERPIC] = OpponentHandleDrawTrainerPic, // done
[CONTROLLER_TRAINERSLIDE] = OpponentHandleTrainerSlide,
[CONTROLLER_TRAINERSLIDEBACK] = OpponentHandleTrainerSlideBack,
[CONTROLLER_FAINTANIMATION] = OpponentHandleFaintAnimation,
[CONTROLLER_PALETTEFADE] = OpponentHandlePaletteFade,
[CONTROLLER_SUCCESSBALLTHROWANIM] = OpponentHandleSuccessBallThrowAnim,
[CONTROLLER_BALLTHROWANIM] = OpponentHandleBallThrowAnim,
[CONTROLLER_PAUSE] = OpponentHandlePause,
[CONTROLLER_MOVEANIMATION] = OpponentHandleMoveAnimation,
[CONTROLLER_PRINTSTRING] = OpponentHandlePrintString,
[CONTROLLER_TRAINERSLIDE] = OpponentHandleTrainerSlide, // done
[CONTROLLER_TRAINERSLIDEBACK] = OpponentHandleTrainerSlideBack, // done
[CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, // done
[CONTROLLER_PALETTEFADE] = BtlController_Empty, // done
[CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, // done
[CONTROLLER_BALLTHROWANIM] = BtlController_Empty, // done
[CONTROLLER_PAUSE] = BtlController_Empty, // done
[CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, // done
[CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, // done
[CONTROLLER_PRINTSTRINGPLAYERONLY] = OpponentHandlePrintSelectionString,
[CONTROLLER_CHOOSEACTION] = OpponentHandleChooseAction,
[CONTROLLER_UNKNOWNYESNOBOX] = OpponentHandleUnknownYesNoBox,
@@ -163,30 +155,6 @@ static void OpponentBufferRunCommand(u32 battler)
}
}
static void CompleteOnBattlerSpriteCallbackDummy(u32 battler)
{
if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy)
OpponentBufferExecCompleted(battler);
}
static void CompleteOnBattlerSpriteCallbackDummy2(u32 battler)
{
if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy)
OpponentBufferExecCompleted(battler);
}
static void FreeTrainerSpriteAfterSlide(u32 battler)
{
if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy)
{
FreeTrainerFrontPicPaletteAndTile(gSprites[gBattlerSpriteIds[battler]].oam.affineParam);
gSprites[gBattlerSpriteIds[battler]].oam.tileNum = gSprites[gBattlerSpriteIds[battler]].data[5];
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[battler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[battler]]);
OpponentBufferExecCompleted(battler);
}
}
static void Intro_DelayAndEnd(u32 battler)
{
if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1)
@@ -302,21 +270,6 @@ static void CompleteOnHealthbarDone(u32 battler)
}
}
static void HideHealthboxAfterMonFaint(u32 battler)
{
if (!gSprites[gBattlerSpriteIds[battler]].inUse)
{
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]);
OpponentBufferExecCompleted(battler);
}
}
static void CompleteOnInactiveTextPrinter(u32 battler)
{
if (!IsTextPrinterActive(0))
OpponentBufferExecCompleted(battler);
}
static void DoHitAnimBlinkSpriteEffect(u32 battler)
{
u8 spriteId = gBattlerSpriteIds[battler];
@@ -452,185 +405,13 @@ static void OpponentHandleDrawTrainerPic(u32 battler)
static void OpponentHandleTrainerSlide(u32 battler)
{
u32 trainerPicId;
if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
trainerPicId = GetSecretBaseTrainerPicIndex();
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
trainerPicId = GetBattleTowerTrainerFrontSpriteId();
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
trainerPicId = GetTrainerTowerTrainerFrontSpriteId();
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
trainerPicId = GetEreaderTrainerFrontSpriteId();
else
trainerPicId = gTrainers[gTrainerBattleOpponent_A].trainerPic;
DecompressTrainerFrontPic(trainerPicId, battler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(battler));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate,
176,
(8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 40,
30);
gSprites[gBattlerSpriteIds[battler]].x2 = 96;
gSprites[gBattlerSpriteIds[battler]].x += 32;
gSprites[gBattlerSpriteIds[battler]].data[0] = -2;
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[battler]].data[5] = gSprites[gBattlerSpriteIds[battler]].oam.tileNum;
gSprites[gBattlerSpriteIds[battler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[battler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn;
gBattlerControllerFuncs[battler] = CompleteOnBattlerSpriteCallbackDummy2;
u32 trainerPicId = OpponentGetTrainerPicId(battler);
BtlController_HandleTrainerSlide(battler, trainerPicId);
}
static void OpponentHandleTrainerSlideBack(u32 battler)
{
SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[battler]]);
gSprites[gBattlerSpriteIds[battler]].data[0] = 35;
gSprites[gBattlerSpriteIds[battler]].data[2] = 280;
gSprites[gBattlerSpriteIds[battler]].data[4] = gSprites[gBattlerSpriteIds[battler]].y;
gSprites[gBattlerSpriteIds[battler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[battler]], SpriteCallbackDummy);
gBattlerControllerFuncs[battler] = FreeTrainerSpriteAfterSlide;
}
static void OpponentHandleFaintAnimation(u32 battler)
{
if (!gBattleSpritesDataPtr->healthBoxesData[battler].animationState)
{
if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_SUBSTITUTE_TO_MON);
++gBattleSpritesDataPtr->healthBoxesData[battler].animationState;
}
else
{
if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive)
{
gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0;
PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET);
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[battler] = HideHealthboxAfterMonFaint;
}
}
}
static void OpponentHandlePaletteFade(u32 battler)
{
OpponentBufferExecCompleted(battler);
}
static void OpponentHandleSuccessBallThrowAnim(u32 battler)
{
OpponentBufferExecCompleted(battler);
}
static void OpponentHandleBallThrowAnim(u32 battler)
{
OpponentBufferExecCompleted(battler);
}
static void OpponentHandlePause(u32 battler)
{
OpponentBufferExecCompleted(battler);
}
static void OpponentHandleMoveAnimation(u32 battler)
{
if (!IsBattleSEPlaying(battler))
{
u16 move = gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8);
gAnimMoveTurn = gBattleResources->bufferA[battler][3];
gAnimMovePower = gBattleResources->bufferA[battler][4] | (gBattleResources->bufferA[battler][5] << 8);
gAnimMoveDmg = gBattleResources->bufferA[battler][6] | (gBattleResources->bufferA[battler][7] << 8) | (gBattleResources->bufferA[battler][8] << 16) | (gBattleResources->bufferA[battler][9] << 24);
gAnimFriendship = gBattleResources->bufferA[battler][10];
gWeatherMoveAnim = gBattleResources->bufferA[battler][12] | (gBattleResources->bufferA[battler][13] << 8);
gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[battler][16];
gTransformedPersonalities[battler] = gAnimDisableStructPtr->transformedMonPersonality;
if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
{
OpponentBufferExecCompleted(battler);
}
else
{
gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0;
gBattlerControllerFuncs[battler] = OpponentDoMoveAnimation;
}
}
}
static void OpponentDoMoveAnimation(u32 battler)
{
u16 move = gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8);
u8 multihit = gBattleResources->bufferA[battler][11];
switch (gBattleSpritesDataPtr->healthBoxesData[battler].animationState)
{
case 0:
if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute
&& !gBattleSpritesDataPtr->battlerData[battler].flag_x8)
{
gBattleSpritesDataPtr->battlerData[battler].flag_x8 = 1;
InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_SUBSTITUTE_TO_MON);
}
gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 1;
break;
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive)
{
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 2;
}
break;
case 2:
gAnimScriptCallback();
if (!gAnimScriptActive)
{
SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE);
gBattleSpritesDataPtr->battlerData[battler].flag_x8 = 0;
}
gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 3;
}
break;
case 3:
if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive)
{
CopyAllBattleSpritesInvisibilities();
TrySetBehindSubstituteSpriteBit(battler, gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8));
gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0;
OpponentBufferExecCompleted(battler);
}
break;
}
}
static void OpponentHandlePrintString(u32 battler)
{
u16 *stringId;
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
stringId = (u16 *)(&gBattleResources->bufferA[battler][2]);
BufferStringBattle(battler, *stringId);
if (BattleStringShouldBeColored(*stringId))
BattlePutTextOnWindow(gDisplayedStringBattle, (B_WIN_MSG | B_TEXT_FLAG_NPC_CONTEXT_FONT));
else
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{
switch (*stringId)
{
case 0x17F:
gBattlerControllerFuncs[battler] = PrintOakText_HowDisappointing;
return;
case 0xE3:
gBattlerControllerFuncs[battler] = PrintOakText_OakNoRunningFromATrainer;
return;
}
}
gBattlerControllerFuncs[battler] = CompleteOnInactiveTextPrinter;
{
BtlController_HandleTrainerSlideBack(battler, 35, FALSE);
}
static void OpponentHandlePrintSelectionString(u32 battler)

View File

@@ -1832,7 +1832,10 @@ static void Controller_HandleTrainerSlideBack(u32 battler)
if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy)
{
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
FreeTrainerFrontPicPalette(gSprites[gBattlerSpriteIds[battler]].oam.affineParam);
{
FreeTrainerFrontPicPaletteAndTile(gSprites[gBattlerSpriteIds[battler]].oam.affineParam);
gSprites[gBattlerSpriteIds[battler]].oam.tileNum = gSprites[gBattlerSpriteIds[battler]].data[5];
}
FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[battler]]);
DestroySprite(&gSprites[gBattlerSpriteIds[battler]]);
BattleControllerComplete(battler);
@@ -2154,9 +2157,11 @@ void BtlController_HandleTrainerSlide(u32 battler, u32 trainerPicId)
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 176, 40, 30);
gSprites[gBattlerSpriteIds[battler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[battler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[battler]].x2 = 96;
gSprites[gBattlerSpriteIds[battler]].x += 32;
gSprites[gBattlerSpriteIds[battler]].sSpeedX = -2;
gSprites[gBattlerSpriteIds[battler]].data[5] = gSprites[gBattlerSpriteIds[battler]].oam.tileNum;
}
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn;
@@ -2270,7 +2275,23 @@ void BtlController_HandlePrintString(u32 battler)
stringId = (u16 *)(&gBattleResources->bufferA[battler][2]);
BufferStringBattle(battler, *stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
if (BattleStringShouldBeColored(*stringId))
BattlePutTextOnWindow(gDisplayedStringBattle, (B_WIN_MSG | B_TEXT_FLAG_NPC_CONTEXT_FONT));
else
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE && GetBattlerSide(battler) == B_SIDE_OPPONENT)
{
switch (*stringId)
{
case STRINGID_TRAINER1WINTEXT:
gBattlerControllerFuncs[battler] = PrintOakText_HowDisappointing;
return;
case STRINGID_DONTLEAVEBIRCH:
gBattlerControllerFuncs[battler] = PrintOakText_OakNoRunningFromATrainer;
return;
}
}
gBattlerControllerFuncs[battler] = Controller_WaitForString;
}