From d469c6f1d5df3c2a23df108b2fb8ce52575ed63b Mon Sep 17 00:00:00 2001 From: Fexty12573 Date: Tue, 1 Jul 2025 23:30:13 +0200 Subject: [PATCH] Document some more battle anim script cmds --- include/overlay012/ov12_0221FC20.h | 29 ++- src/overlay012/ov12_0221FC20.c | 311 +++++++++++++++-------------- src/overlay012/ov12_02226B84.c | 12 +- 3 files changed, 193 insertions(+), 159 deletions(-) diff --git a/include/overlay012/ov12_0221FC20.h b/include/overlay012/ov12_0221FC20.h index 968f938b07..fc32924049 100644 --- a/include/overlay012/ov12_0221FC20.h +++ b/include/overlay012/ov12_0221FC20.h @@ -26,6 +26,7 @@ #define BATTLE_ANIM_SCRIPT_MAX_CALL_STACK_DEPTH 3 #define BATTLE_ANIM_SCRIPT_MAX_POKEMON_SPRITES 5 #define BATTLE_ANIM_SCRIPT_MAX_SPRITES 10 +#define BATTLE_ANIM_SCRIPT_MAX_SPRITE_MANAGERS 4 enum BattleAnimSystemArc { BATTLE_ANIM_SYSTEM_ARC_BATT_BG = 0, @@ -49,6 +50,26 @@ enum BattleAnimMoveInfoType { BATTLE_ANIM_MOVE_INFO_COUNT }; +enum BgNarcMemberType { + BG_NARC_MEMBER_NCGR = 0, + BG_NARC_MEMBER_NCLR, + BG_NARC_MEMBER_NSCR1, + BG_NARC_MEMBER_NSCR2, + BG_NARC_MEMBER_NSCR3, + + BG_NARC_MEMBER_COUNT, +}; + +enum BattleAnimTrackingTask { + BATTLE_ANIM_TRACKING_TASK_SPRITE_0 = 0, + BATTLE_ANIM_TRACKING_TASK_SPRITE_1, + BATTLE_ANIM_TRACKING_TASK_SPRITE_2, + BATTLE_ANIM_TRACKING_TASK_SPRITE_3, + BATTLE_ANIM_TRACKING_TASK_BG, + + BATTLE_ANIM_TRACKING_TASK_COUNT, +}; + // Holds context information for the current move animation typedef struct BattleAnimContext { u8 unk_00; @@ -167,7 +188,7 @@ typedef struct BattleAnimSystem { BattleAnimContext *context; BgConfig *bgConfig; PaletteData *paletteData; - SpriteManager *spriteManagers[4]; + SpriteManager *spriteManagers[BATTLE_ANIM_SCRIPT_MAX_SPRITE_MANAGERS]; ManagedSprite *sprites[BATTLE_ANIM_SCRIPT_MAX_SPRITES]; SpriteTemplate lastSpriteTemplate; SpriteManager *pokemonSpriteManager; @@ -176,7 +197,7 @@ typedef struct BattleAnimSystem { SpriteTrackingTask *spriteTrackingTasks[BATTLE_ANIM_SCRIPT_MAX_POKEMON_SPRITES]; BgTrackingTask *bgTrackingTask; u8 unk_178; - u8 unk_179; + u8 soundEffectWaitTimer; u8 unk_17A; u8 unk_17B; UnkStruct_ov12_022222D4 *unk_17C; @@ -216,7 +237,7 @@ SpriteSystem *BattleAnimSystem_GetSpriteSystem(BattleAnimSystem *param0); void BattleAnimSystem_SetDefaultAlphaBlending(void); int BattleAnimSystem_GetMoveInfo(BattleAnimSystem *param0, enum BattleAnimMoveInfoType param1); void ov12_02220590(BattleAnimSystem *param0, UnkStruct_ov12_022380DC *param1, int param2); -void ov12_02221238(BattleAnimSystem *param0, int param1); +void BattleAnimSystem_CancelTrackingTask(BattleAnimSystem *param0, enum BattleAnimTrackingTask param1); void ov12_02222338(BattleAnimSystem *param0); int ov12_02222354(BattleAnimSystem *param0); void ov12_02222590(BattleAnimSystem *param0, int param1); @@ -246,7 +267,7 @@ int ov12_02223428(BattleAnimSystem *param0, int param1); void ov12_02223460(BattleAnimSystem *param0, int param1); void ov12_02223488(BattleAnimSystem *param0); BOOL ov12_022234A8(BattleAnimSystem *param0, int param1); -int ov12_022234E4(int param0, int param1); +int BattleAnimSystem_GetBgNarcMemberIndex(int bgID, enum BgNarcMemberType type); UnkStruct_ov12_02223764 *ov12_022234F8(BattleSystem *battleSys, int heapID, int param2); UnkStruct_ov12_02223764 *ov12_02223764(BattleSystem *battleSys, int heapID); void ov12_02223770(UnkStruct_ov12_02223764 *param0); diff --git a/src/overlay012/ov12_0221FC20.c b/src/overlay012/ov12_0221FC20.c index c31b08a89e..579acc1e1d 100644 --- a/src/overlay012/ov12_0221FC20.c +++ b/src/overlay012/ov12_0221FC20.c @@ -50,7 +50,8 @@ #include "system.h" #include "vram_transfer.h" -#define BATTLE_ANIM_SCRIPT_RES_ID(MEMBER_IDX) (MEMBER_IDX + 5000) +#define BATTLE_ANIM_SCRIPT_RES_ID(MEMBER_IDX) (MEMBER_IDX + 5000) +#define BATTLE_ANIM_SCRIPT_MAX_SFX_WAIT_FRAMES 90 // 3s typedef struct BattleAnimSoundContext { u8 type; @@ -145,7 +146,7 @@ static void BattleAnimScriptCmd_Delay(BattleAnimSystem *param0); static void BattleAnimScriptCmd_WaitForAnimTasks(BattleAnimSystem *param0); static void BattleAnimScriptCmd_BeginLoop(BattleAnimSystem *param0); static void BattleAnimScriptCmd_EndLoop(BattleAnimSystem *param0); -static void ov12_02220798(BattleAnimSystem *param0); +static void BattleAnimScriptCmd_End(BattleAnimSystem *param0); static void BattleAnimScriptCmd_PlaySoundEffect(BattleAnimSystem *param0); static void BattleAnimScriptCmd_Nop0(BattleAnimSystem *param0); static void BattleAnimScriptCmd_Nop1(BattleAnimSystem *param0); @@ -165,7 +166,7 @@ static void ov12_02222774(BattleAnimSystem *param0); static void ov12_022227CC(BattleAnimSystem *param0); static void ov12_02222820(BattleAnimSystem *param0); static void ov12_02222840(BattleAnimSystem *param0); -static void ov12_02222860(BattleAnimSystem *param0); +static void BattleAnimScriptCmd_SetBg(BattleAnimSystem *param0); static void BattleAnimScriptCmd_PlayPannedSoundEffect(BattleAnimSystem *param0); static void BattleAnimScriptCmd_PanSoundEffects(BattleAnimSystem *param0); static void BattleAnimScriptCmd_PlayMovingSoundEffectAtkDef(BattleAnimSystem *param0); @@ -176,12 +177,12 @@ static void BattleAnimScriptCmd_Nop3(BattleAnimSystem *param0); static void BattleAnimScriptCmd_WaitForSoundEffects(BattleAnimSystem *param0); static void BattleAnimScriptCmd_JumpIfEqual(BattleAnimSystem *param0); static void ov12_0222128C(BattleAnimSystem *param0); -static void ov12_0222144C(BattleAnimSystem *param0); -static void ov12_022214C4(BattleAnimSystem *param0); +static void BattleAnimScriptCmd_InitPokemonSpriteManager(BattleAnimSystem *param0); +static void BattleAnimScriptCmd_LoadPokemonSpriteDummyResources(BattleAnimSystem *param0); static void BattleAnimScriptCmd_AddPokemonSprite(BattleAnimSystem *param0); static void BattleAnimScriptCmd_FreePokemonSpriteManager(BattleAnimSystem *param0); static void BattleAnimScriptCmd_RemovePokemonSprite(BattleAnimSystem *param0); -static void ov12_02221A00(BattleAnimSystem *param0); +static void BattleAnimScriptCmd_CancelTrackingTask(BattleAnimSystem *param0); static void BattleAnimScriptCmd_SetCameraProjection(BattleAnimSystem *param0); static void BattleAnimScriptCmd_SetCameraFlip(BattleAnimSystem *param0); static void ov12_02221424(BattleAnimSystem *param0); @@ -222,7 +223,7 @@ static void BattleAnimScriptCmd_LoadAnimResObj(BattleAnimSystem *param0); static void BattleAnimScriptCmd_AddSpriteWithFunc(BattleAnimSystem *param0); static void BattleAnimScriptCmd_AddSprite(BattleAnimSystem *param0); static void BattleAnimScriptCmd_FreeSpriteManager(BattleAnimSystem *param0); -static void ov12_022230A8(BattleAnimSystem *param0); +static void BattleAnimScriptCmd_SetPokemonSpriteVisible(BattleAnimSystem *param0); static void ov12_02221834(BattleAnimSystem *param0); static void ov12_022219E8(BattleAnimSystem *param0); static void ov12_0222048C(BattleAnimSystem *param0); @@ -271,7 +272,6 @@ static const s16 Unk_ov12_02238660[] = { static void BattleAnimSystem_Script_WaitForDelay(BattleAnimSystem *system) { if (system->scriptDelay == 0) { - system->scriptDelay == 0; system->executeAnimScriptFunc = BattleAnimSystem_Script_Execute; } else { system->scriptDelay--; @@ -791,7 +791,7 @@ static const BattleAnimScriptCmd sBattleAnimScriptCmdTable[] = { BattleAnimScriptCmd_WaitForAnimTasks, BattleAnimScriptCmd_BeginLoop, BattleAnimScriptCmd_EndLoop, - ov12_02220798, + BattleAnimScriptCmd_End, BattleAnimScriptCmd_PlaySoundEffect, BattleAnimScriptCmd_Nop0, BattleAnimScriptCmd_Nop1, @@ -808,7 +808,7 @@ static const BattleAnimScriptCmd sBattleAnimScriptCmdTable[] = { ov12_022227CC, ov12_02222820, ov12_02222840, - ov12_02222860, + BattleAnimScriptCmd_SetBg, BattleAnimScriptCmd_PlayPannedSoundEffect, BattleAnimScriptCmd_PanSoundEffects, BattleAnimScriptCmd_PlayMovingSoundEffectAtkDef, @@ -843,12 +843,12 @@ static const BattleAnimScriptCmd sBattleAnimScriptCmdTable[] = { BattleAnimScriptCmd_UnloadParticleSystem, ov12_02223160, ov12_022230CC, - ov12_0222144C, - ov12_022214C4, + BattleAnimScriptCmd_InitPokemonSpriteManager, + BattleAnimScriptCmd_LoadPokemonSpriteDummyResources, BattleAnimScriptCmd_AddPokemonSprite, BattleAnimScriptCmd_FreePokemonSpriteManager, BattleAnimScriptCmd_RemovePokemonSprite, - ov12_02221A00, + BattleAnimScriptCmd_CancelTrackingTask, BattleAnimScriptCmd_SetCameraProjection, BattleAnimScriptCmd_SetCameraFlip, BattleAnimScriptCmd_JumpIfBattlerSide, @@ -868,7 +868,7 @@ static const BattleAnimScriptCmd sBattleAnimScriptCmdTable[] = { BattleAnimScriptCmd_AddSpriteWithFunc, BattleAnimScriptCmd_AddSprite, BattleAnimScriptCmd_FreeSpriteManager, - ov12_022230A8, + BattleAnimScriptCmd_SetPokemonSpriteVisible, ov12_02221834, ov12_022219E8, ov12_0222048C @@ -1088,10 +1088,10 @@ static void BattleAnimScriptCmd_EndLoop(BattleAnimSystem *system) } } -static void ov12_02220798(BattleAnimSystem *system) +static void BattleAnimScriptCmd_End(BattleAnimSystem *system) { int i; - int v1 = 0; + int totalEmitters = 0; if (system->unk_17A < 1) { system->scriptDelay = 1; @@ -1101,21 +1101,22 @@ static void ov12_02220798(BattleAnimSystem *system) for (i = 0; i < MAX_PARTICLE_SYSTEMS; i++) { if (system->context->particleSystems[i]) { - v1 += ParticleSystem_GetActiveEmitterCount(system->context->particleSystems[i]); + totalEmitters += ParticleSystem_GetActiveEmitterCount(system->context->particleSystems[i]); } } - if ((v1 != 0) || (system->activeAnimTasks != 0) || (system->activeSoundTasks != 0)) { + if (totalEmitters != 0 || system->activeAnimTasks != 0 || system->activeSoundTasks != 0) { system->scriptDelay = 1; - system->unk_179 = 0; + system->soundEffectWaitTimer = 0; return; } if (Sound_IsAnyEffectPlaying()) { - system->unk_179++; + system->soundEffectWaitTimer++; - if (system->unk_179 > 90) { - system->unk_179 = 0; + // If sound effects are still playing after 3 seconds, continue anyway + if (system->soundEffectWaitTimer > BATTLE_ANIM_SCRIPT_MAX_SFX_WAIT_FRAMES) { + system->soundEffectWaitTimer = 0; system->scriptDelay = 0; } else { system->scriptDelay = 1; @@ -1123,10 +1124,10 @@ static void ov12_02220798(BattleAnimSystem *system) } } - system->unk_179 = 0; + system->soundEffectWaitTimer = 0; system->unk_17A = 0; - for (i = 0; i < 3; i++) { + for (i = 0; i < BATTLE_ANIM_SCRIPT_MAX_CALL_STACK_DEPTH; i++) { system->callStack[i] = NULL; } @@ -1137,7 +1138,7 @@ static void ov12_02220798(BattleAnimSystem *system) system->loopStack[i].isActive = FALSE; } - for (i = 0; i < 4; i++) { + for (i = 0; i < BATTLE_ANIM_SCRIPT_MAX_SPRITE_MANAGERS; i++) { if (system->spriteManagers[i] != NULL) { SpriteSystem_FreeResourcesAndManager(system->context->spriteSystem, system->spriteManagers[i]); } @@ -1145,8 +1146,8 @@ static void ov12_02220798(BattleAnimSystem *system) system->spriteManagers[i] = NULL; } - for (i = 0; i < 5; i++) { - ov12_02221238(system, i); + for (i = 0; i < BATTLE_ANIM_TRACKING_TASK_COUNT; i++) { + BattleAnimSystem_CancelTrackingTask(system, i); } for (i = 0; i < MAX_PARTICLE_SYSTEMS; i++) { @@ -1160,7 +1161,7 @@ static void ov12_02220798(BattleAnimSystem *system) system->unk_17C = NULL; } - if (BattleAnimSystem_IsContest(system) == 0) { + if (BattleAnimSystem_IsContest(system) == FALSE) { Battle_SetDefaultBlend(); Bg_ClearTilesRange(ov12_022233B0(system, 1), 0x4000, 0, BattleAnimSystem_GetHeapID(system)); @@ -1748,19 +1749,19 @@ static void BattleAnimSystem_BgTrackingTaskFunc(SysTask *task, void *param) Bg_SetOffset(trackingTask->bg, BG_LAYER_MAIN_2, BG_OFFSET_UPDATE_SET_Y, -(y - 40)); } -void ov12_02221238(BattleAnimSystem *param0, int param1) +void BattleAnimSystem_CancelTrackingTask(BattleAnimSystem *system, enum BattleAnimTrackingTask task) { - if (param1 == 4) { - if (param0->bgTrackingTask != NULL) { - SysTask_Done(param0->bgTrackingTask->task); - Heap_Free(param0->bgTrackingTask); - param0->bgTrackingTask = NULL; + if (task == BATTLE_ANIM_TRACKING_TASK_BG) { + if (system->bgTrackingTask != NULL) { + SysTask_Done(system->bgTrackingTask->task); + Heap_Free(system->bgTrackingTask); + system->bgTrackingTask = NULL; } } else { - if (param0->spriteTrackingTasks[param1] != NULL) { - SysTask_Done(param0->spriteTrackingTasks[param1]->task); - Heap_Free(param0->spriteTrackingTasks[param1]); - param0->spriteTrackingTasks[param1] = NULL; + if (system->spriteTrackingTasks[task] != NULL) { + SysTask_Done(system->spriteTrackingTasks[task]->task); + Heap_Free(system->spriteTrackingTasks[task]); + system->spriteTrackingTasks[task] = NULL; } } } @@ -1775,7 +1776,7 @@ static void BattleAnimScriptCmd_Nop1(BattleAnimSystem *param0) return; } -static void ov12_0222128C(BattleAnimSystem *param0) +static void ov12_0222128C(BattleAnimSystem *system) { void *v0 = NULL; int v1; @@ -1786,21 +1787,21 @@ static void ov12_0222128C(BattleAnimSystem *param0) int v6; int v7; - param0->scriptPtr += 1; + system->scriptPtr += 1; - v1 = BattleAnimScript_ReadWord(param0->scriptPtr); - param0->scriptPtr += 1; + v1 = BattleAnimScript_ReadWord(system->scriptPtr); + system->scriptPtr += 1; - v2 = BattleAnimScript_ReadWord(param0->scriptPtr); - param0->scriptPtr += 1; + v2 = BattleAnimScript_ReadWord(system->scriptPtr); + system->scriptPtr += 1; - v3 = BattleAnimSystem_GetBattlerOfType(param0, v1); - v4 = param0->context->pokemonSpriteData[v3]->unk_04; - v5 = param0->context->pokemonSpriteData[v3]->unk_08; - v0 = param0->context->pokemonSpriteData[v3]->unk_00; - v7 = param0->context->battlerForms[v3]; + v3 = BattleAnimSystem_GetBattlerOfType(system, v1); + v4 = system->context->pokemonSpriteData[v3]->unk_04; + v5 = system->context->pokemonSpriteData[v3]->unk_08; + v0 = system->context->pokemonSpriteData[v3]->unk_00; + v7 = system->context->battlerForms[v3]; - if ((BattleAnimSystem_IsContest(param0) == 1) && (IsFormSymmetrical(BattleAnimSystem_GetBattlerSpecies(param0, v3), v7) == 1)) { + if ((BattleAnimSystem_IsContest(system) == 1) && (IsFormSymmetrical(BattleAnimSystem_GetBattlerSpecies(system, v3), v7) == 1)) { v6 = 265; } else { v6 = 264; @@ -1812,104 +1813,99 @@ static void ov12_0222128C(BattleAnimSystem *param0) } Bg_ToggleLayer(BG_LAYER_MAIN_2, FALSE); - Bg_LoadTiles(param0->bgConfig, 2, v0, (10 * 10 * ((8 / 2) * 8)), 0); - PaletteData_LoadBufferFromFileStart(param0->paletteData, v4, v5, param0->heapID, 0, 0, (8 * 16)); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->arcs[0], v6, param0->bgConfig, 2, 0, 0, 0, param0->heapID); + Bg_LoadTiles(system->bgConfig, BG_LAYER_MAIN_2, v0, (10 * 10 * ((8 / 2) * 8)), 0); + PaletteData_LoadBufferFromFileStart(system->paletteData, v4, v5, system->heapID, 0, 0, (8 * 16)); + Graphics_LoadTilemapToBgLayerFromOpenNARC(system->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_BG], v6, system->bgConfig, BG_LAYER_MAIN_2, 0, 0, FALSE, system->heapID); if (v2 == 1) { SysTask *v9; - param0->bgTrackingTask = Heap_AllocFromHeap(param0->heapID, sizeof(SpriteTrackingTask)); - param0->bgTrackingTask->bg = param0->bgConfig; - param0->bgTrackingTask->data.sprite = BattleAnimSystem_GetBattlerSprite(param0, v3); - param0->bgTrackingTask->data.frameCount = 0; - param0->bgTrackingTask->data.interval = 0; + system->bgTrackingTask = Heap_AllocFromHeap(system->heapID, sizeof(SpriteTrackingTask)); + system->bgTrackingTask->bg = system->bgConfig; + system->bgTrackingTask->data.sprite = BattleAnimSystem_GetBattlerSprite(system, v3); + system->bgTrackingTask->data.frameCount = 0; + system->bgTrackingTask->data.interval = 0; - v9 = SysTask_Start(BattleAnimSystem_BgTrackingTaskFunc, param0->bgTrackingTask, 0x1001); + v9 = SysTask_Start(BattleAnimSystem_BgTrackingTaskFunc, system->bgTrackingTask, 0x1001); - param0->bgTrackingTask->task = v9; + system->bgTrackingTask->task = v9; } { s16 v10; s16 v11; - v10 = PokemonSprite_GetAttribute(BattleAnimSystem_GetBattlerSprite(param0, v3), 0); - v11 = PokemonSprite_GetAttribute(BattleAnimSystem_GetBattlerSprite(param0, v3), 1); - v11 -= PokemonSprite_GetAttribute(BattleAnimSystem_GetBattlerSprite(param0, v3), 41); + v10 = PokemonSprite_GetAttribute(BattleAnimSystem_GetBattlerSprite(system, v3), 0); + v11 = PokemonSprite_GetAttribute(BattleAnimSystem_GetBattlerSprite(system, v3), 1); + v11 -= PokemonSprite_GetAttribute(BattleAnimSystem_GetBattlerSprite(system, v3), 41); - Bg_SetOffset(param0->bgConfig, BG_LAYER_MAIN_2, 0, -(v10 - 40)); - Bg_SetOffset(param0->bgConfig, BG_LAYER_MAIN_2, 3, -(v11 - 40)); + Bg_SetOffset(system->bgConfig, BG_LAYER_MAIN_2, 0, -(v10 - 40)); + Bg_SetOffset(system->bgConfig, BG_LAYER_MAIN_2, 3, -(v11 - 40)); } Bg_ToggleLayer(BG_LAYER_MAIN_2, 1); - Bg_SetPriority(BG_LAYER_MAIN_2, ov12_0222339C(param0)); + Bg_SetPriority(BG_LAYER_MAIN_2, ov12_0222339C(system)); } -static void ov12_02221424(BattleAnimSystem *param0) +static void ov12_02221424(BattleAnimSystem *system) { - param0->scriptPtr += 1; - param0->scriptPtr += 1; + BattleAnimScript_Next(system); + BattleAnimScript_Next(system); - { - u8 *v0 = Bg_GetCharPtr(2); - MI_CpuFill8(v0, 0, 10 * 10 * 2 * 0x20); - } + u8 *v0 = Bg_GetCharPtr(BG_LAYER_MAIN_2); + MI_CpuFill8(v0, 0, 10 * 10 * 2 * 0x20); - ov12_02221238(param0, 4); + BattleAnimSystem_CancelTrackingTask(system, BATTLE_ANIM_TRACKING_TASK_BG); } -static void ov12_0222144C(BattleAnimSystem *param0) +static void BattleAnimScriptCmd_InitPokemonSpriteManager(BattleAnimSystem *system) { - int v0 = (4 + 1); - SpriteResourceCapacities v1 = { - 0x5, - 0x5, - 0x5, - 0x5, - 0x0, - 0x0 + SpriteResourceCapacities caps = { + BATTLE_ANIM_SCRIPT_MAX_POKEMON_SPRITES, + BATTLE_ANIM_SCRIPT_MAX_POKEMON_SPRITES, + BATTLE_ANIM_SCRIPT_MAX_POKEMON_SPRITES, + BATTLE_ANIM_SCRIPT_MAX_POKEMON_SPRITES, + 0, + 0 }; - param0->scriptPtr += 1; - param0->pokemonSpriteManager = SpriteManager_New(param0->context->spriteSystem); + BattleAnimScript_Next(system); + system->pokemonSpriteManager = SpriteManager_New(system->context->spriteSystem); - SpriteSystem_InitSprites(param0->context->spriteSystem, param0->pokemonSpriteManager, v0); - SetSubScreenViewRect(SpriteSystem_GetRenderer(param0->context->spriteSystem), 0, ((192 + 80) << FX32_SHIFT)); - SpriteSystem_InitManagerWithCapacities(param0->context->spriteSystem, param0->pokemonSpriteManager, &v1); + SpriteSystem_InitSprites(system->context->spriteSystem, system->pokemonSpriteManager, BATTLE_ANIM_SCRIPT_MAX_POKEMON_SPRITES); + SetSubScreenViewRect(SpriteSystem_GetRenderer(system->context->spriteSystem), 0, ((192 + 80) << FX32_SHIFT)); + SpriteSystem_InitManagerWithCapacities(system->context->spriteSystem, system->pokemonSpriteManager, &caps); } -static void ov12_022214C4(BattleAnimSystem *param0) +static void BattleAnimScriptCmd_LoadPokemonSpriteDummyResources(BattleAnimSystem *system) { + BattleAnimScript_Next(system); + int resID = BattleAnimScript_ReadWord(system->scriptPtr); + BattleAnimScript_Next(system); + int resourceIDs[SPRITE_RESOURCE_MAX]; - int v1; - - param0->scriptPtr += 1; - v1 = BattleAnimScript_ReadWord(param0->scriptPtr); - param0->scriptPtr += 1; - - resourceIDs[SPRITE_RESOURCE_CHAR] = 20001 + v1 + ((param0->context->attacker) * 5000); - resourceIDs[SPRITE_RESOURCE_PLTT] = 20001 + v1 + ((param0->context->attacker) * 5000); - resourceIDs[SPRITE_RESOURCE_CELL] = 20001 + v1 + ((param0->context->attacker) * 5000); - resourceIDs[SPRITE_RESOURCE_ANIM] = 20001 + v1 + ((param0->context->attacker) * 5000); + resourceIDs[SPRITE_RESOURCE_CHAR] = 20001 + resID + (system->context->attacker * 5000); + resourceIDs[SPRITE_RESOURCE_PLTT] = 20001 + resID + (system->context->attacker * 5000); + resourceIDs[SPRITE_RESOURCE_CELL] = 20001 + resID + (system->context->attacker * 5000); + resourceIDs[SPRITE_RESOURCE_ANIM] = 20001 + resID + (system->context->attacker * 5000); resourceIDs[SPRITE_RESOURCE_MULTI_CELL] = 0; resourceIDs[SPRITE_RESOURCE_MULTI_ANIM] = 0; SpriteSystem_LoadCharResObjFromOpenNarc( - param0->context->spriteSystem, - param0->pokemonSpriteManager, - param0->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_OBJ], + system->context->spriteSystem, + system->pokemonSpriteManager, + system->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_OBJ], 76, FALSE, NNS_G2D_VRAM_TYPE_2DMAIN, resourceIDs[SPRITE_RESOURCE_PLTT]); SpriteSystem_LoadPaletteBufferFromOpenNarc( - param0->paletteData, + system->paletteData, PLTTBUF_MAIN_OBJ, - param0->context->spriteSystem, - param0->pokemonSpriteManager, - param0->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_OBJ], + system->context->spriteSystem, + system->pokemonSpriteManager, + system->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_OBJ], 75, FALSE, 1, @@ -1917,17 +1913,17 @@ static void ov12_022214C4(BattleAnimSystem *param0) resourceIDs[SPRITE_RESOURCE_PLTT]); SpriteSystem_LoadCellResObjFromOpenNarc( - param0->context->spriteSystem, - param0->pokemonSpriteManager, - param0->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_OBJ], + system->context->spriteSystem, + system->pokemonSpriteManager, + system->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_OBJ], 77, FALSE, resourceIDs[SPRITE_RESOURCE_CELL]); SpriteSystem_LoadAnimResObjFromOpenNarc( - param0->context->spriteSystem, - param0->pokemonSpriteManager, - param0->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_OBJ], + system->context->spriteSystem, + system->pokemonSpriteManager, + system->arcs[BATTLE_ANIM_SYSTEM_ARC_BATT_OBJ], 78, FALSE, resourceIDs[SPRITE_RESOURCE_ANIM]); @@ -2206,15 +2202,13 @@ static void ov12_022219E8(BattleAnimSystem *param0) param0->unk_48[v0].unk_0C = 0; } -static void ov12_02221A00(BattleAnimSystem *param0) +static void BattleAnimScriptCmd_CancelTrackingTask(BattleAnimSystem *system) { - int v0; + BattleAnimScript_Next(system); + int taskID = BattleAnimScript_ReadWord(system->scriptPtr); + BattleAnimScript_Next(system); - param0->scriptPtr += 1; - v0 = BattleAnimScript_ReadWord(param0->scriptPtr); - param0->scriptPtr += 1; - - ov12_02221238(param0, v0); + BattleAnimSystem_CancelTrackingTask(system, taskID); } static void BattleAnimScriptCmd_SetCameraProjection(BattleAnimSystem *system) @@ -2300,8 +2294,8 @@ static BOOL ov12_02221A54(UnkStruct_ov12_02221BBC *param0, BattleAnimSystem *par static void ov12_02221AA8(UnkStruct_ov12_02221BBC *param0, BattleAnimSystem *param1, int param2, int param3) { - Graphics_LoadTilesToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, ov12_022234E4(param3, HEAP_ID_SYSTEM), param1->bgConfig, param2, 0, 0, 1, param1->heapID); - PaletteData_LoadBufferFromFileStart(param1->paletteData, 7, ov12_022234E4(param3, 1), param1->heapID, 0, 0x20, (9 * 16)); + Graphics_LoadTilesToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, BattleAnimSystem_GetBgNarcMemberIndex(param3, HEAP_ID_SYSTEM), param1->bgConfig, param2, 0, 0, 1, param1->heapID); + PaletteData_LoadBufferFromFileStart(param1->paletteData, 7, BattleAnimSystem_GetBgNarcMemberIndex(param3, 1), param1->heapID, 0, 0x20, (9 * 16)); Bg_ClearTilemap(param1->bgConfig, param2); { @@ -2313,7 +2307,7 @@ static void ov12_02221AA8(UnkStruct_ov12_02221BBC *param0, BattleAnimSystem *par v0 = 3; } - Graphics_LoadTilemapToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, ov12_022234E4(param3, v0), param1->bgConfig, param2, 0, 0, 1, param1->heapID); + Graphics_LoadTilemapToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, BattleAnimSystem_GetBgNarcMemberIndex(param3, v0), param1->bgConfig, param2, 0, 0, 1, param1->heapID); } } @@ -2993,17 +2987,39 @@ static void ov12_02222840(BattleAnimSystem *param0) } } -static void ov12_02222860(BattleAnimSystem *param0) +static void BattleAnimScriptCmd_SetBg(BattleAnimSystem *system) { - int v0; + BattleAnimScript_Next(system); + int bgID = BattleAnimScript_ReadWord(system->scriptPtr); + BattleAnimScript_Next(system); - param0->scriptPtr += 1; - v0 = BattleAnimScript_ReadWord(param0->scriptPtr); - param0->scriptPtr += 1; - - Graphics_LoadTilesToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, ov12_022234E4(v0, HEAP_ID_SYSTEM), param0->bgConfig, 3, 0, 0, 1, param0->heapID); - Graphics_LoadPalette(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, ov12_022234E4(v0, HEAP_ID_SAVE), 0, 0, 0, param0->heapID); - Graphics_LoadTilemapToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, ov12_022234E4(v0, HEAP_ID_DEBUG), param0->bgConfig, 3, 0, 0, 1, param0->heapID); + Graphics_LoadTilesToBgLayer( + NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, + BattleAnimSystem_GetBgNarcMemberIndex(bgID, BG_NARC_MEMBER_NCGR), + system->bgConfig, + BG_LAYER_MAIN_3, + 0, + 0, + TRUE, + system->heapID); + + Graphics_LoadPalette( + NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, + BattleAnimSystem_GetBgNarcMemberIndex(bgID, BG_NARC_MEMBER_NCLR), + PAL_LOAD_MAIN_BG, + 0, + 0, + system->heapID); + + Graphics_LoadTilemapToBgLayer( + NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, + BattleAnimSystem_GetBgNarcMemberIndex(bgID, BG_NARC_MEMBER_NSCR1), + system->bgConfig, + BG_LAYER_MAIN_3, + 0, + 0, + TRUE, + system->heapID); } static void ov12_022228DC(BattleAnimSystem *param0) @@ -3262,22 +3278,22 @@ static void BattleAnimScriptCmd_WaitForSoundEffects(BattleAnimSystem *system) { if (system->activeSoundTasks) { system->scriptDelay = 1; - system->unk_179 = 0; + system->soundEffectWaitTimer = 0; return; } if (Sound_IsAnyEffectPlaying()) { - system->unk_179++; + system->soundEffectWaitTimer++; - if (system->unk_179 > 90) { - system->unk_179 = 0; + if (system->soundEffectWaitTimer > 90) { + system->soundEffectWaitTimer = 0; } else { system->scriptDelay = 1; return; } } else { system->scriptDelay = 0; - system->unk_179 = 0; + system->soundEffectWaitTimer = 0; BattleAnimScript_Next(system); } } @@ -3515,20 +3531,17 @@ static void BattleAnimScriptCmd_FreeSpriteManager(BattleAnimSystem *system) system->spriteManagers[id] = NULL; } -static void ov12_022230A8(BattleAnimSystem *param0) +static void BattleAnimScriptCmd_SetPokemonSpriteVisible(BattleAnimSystem *system) { - int v0; - int v1; + BattleAnimScript_Next(system); - param0->scriptPtr += 1; + int spriteID = BattleAnimScript_ReadWord(system->scriptPtr); + BattleAnimScript_Next(system); - v0 = BattleAnimScript_ReadWord(param0->scriptPtr); - param0->scriptPtr += 1; + int flag = BattleAnimScript_ReadWord(system->scriptPtr); + BattleAnimScript_Next(system); - v1 = BattleAnimScript_ReadWord(param0->scriptPtr); - param0->scriptPtr += 1; - - ManagedSprite_SetDrawFlag(param0->pokemonSprites[v0], v1); + ManagedSprite_SetDrawFlag(system->pokemonSprites[spriteID], flag); } static void ov12_022230CC(BattleAnimSystem *param0) @@ -3842,7 +3855,7 @@ BOOL ov12_022234A8(BattleAnimSystem *param0, int param1) return 0; } -static const int Unk_ov12_02238928[][5] = { +static const int sBgNarcIndices[][BG_NARC_MEMBER_COUNT] = { { 0x41, 0x123, 0x3E, 0x3F, 0x40 }, { 0x41, 0x123, 0x3E, 0x3F, 0x40 }, { 0x41, 0x123, 0x3E, 0x3F, 0x40 }, @@ -3903,9 +3916,9 @@ static const int Unk_ov12_02238928[][5] = { { 0x86, 0x142, 0x87, 0x87, 0x87 } }; -int ov12_022234E4(int param0, int param1) +int BattleAnimSystem_GetBgNarcMemberIndex(int bgID, enum BgNarcMemberType type) { - return Unk_ov12_02238928[param0][param1]; + return sBgNarcIndices[bgID][type]; } UnkStruct_ov12_02223764 *ov12_022234F8(BattleSystem *battleSys, int heapID, int param2) diff --git a/src/overlay012/ov12_02226B84.c b/src/overlay012/ov12_02226B84.c index 88018bee94..47cc6307e1 100644 --- a/src/overlay012/ov12_02226B84.c +++ b/src/overlay012/ov12_02226B84.c @@ -638,8 +638,8 @@ void ov12_02226EB0(BattleAnimSystem *param0) { int v2 = BattleAnimSystem_GetScriptVar(param0, 0); - Graphics_LoadTilesToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, ov12_022234E4(v2, HEAP_ID_SYSTEM), v0->unk_1C.unk_14, 2, 0, 0, 1, BattleAnimSystem_GetHeapID(param0)); - PaletteData_LoadBufferFromFileStart(v0->unk_1C.unk_18, 7, ov12_022234E4(v2, 1), BattleAnimSystem_GetHeapID(param0), 0, 0x20, (9 * 16)); + Graphics_LoadTilesToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, BattleAnimSystem_GetBgNarcMemberIndex(v2, HEAP_ID_SYSTEM), v0->unk_1C.unk_14, 2, 0, 0, 1, BattleAnimSystem_GetHeapID(param0)); + PaletteData_LoadBufferFromFileStart(v0->unk_1C.unk_18, 7, BattleAnimSystem_GetBgNarcMemberIndex(v2, 1), BattleAnimSystem_GetHeapID(param0), 0, 0x20, (9 * 16)); Bg_ClearTilemap(v0->unk_1C.unk_14, 2); { @@ -651,7 +651,7 @@ void ov12_02226EB0(BattleAnimSystem *param0) v3 = 3; } - Graphics_LoadTilemapToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, ov12_022234E4(v2, v3), v0->unk_1C.unk_14, 2, 0, 0, 1, BattleAnimSystem_GetHeapID(param0)); + Graphics_LoadTilemapToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, BattleAnimSystem_GetBgNarcMemberIndex(v2, v3), v0->unk_1C.unk_14, 2, 0, 0, 1, BattleAnimSystem_GetHeapID(param0)); } } @@ -798,8 +798,8 @@ void ov12_022271D8(BattleAnimSystem *param0) { int v2 = BattleAnimSystem_GetScriptVar(param0, 0); - Graphics_LoadTilesToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, ov12_022234E4(v2, HEAP_ID_SYSTEM), v0->unk_1C.unk_14, 2, 0, 0, 1, BattleAnimSystem_GetHeapID(param0)); - PaletteData_LoadBufferFromFileStart(v0->unk_1C.unk_18, 7, ov12_022234E4(v2, 1), BattleAnimSystem_GetHeapID(param0), 0, 0x20, (9 * 16)); + Graphics_LoadTilesToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, BattleAnimSystem_GetBgNarcMemberIndex(v2, HEAP_ID_SYSTEM), v0->unk_1C.unk_14, 2, 0, 0, 1, BattleAnimSystem_GetHeapID(param0)); + PaletteData_LoadBufferFromFileStart(v0->unk_1C.unk_18, 7, BattleAnimSystem_GetBgNarcMemberIndex(v2, 1), BattleAnimSystem_GetHeapID(param0), 0, 0x20, (9 * 16)); Bg_ClearTilemap(v0->unk_1C.unk_14, 2); { @@ -811,7 +811,7 @@ void ov12_022271D8(BattleAnimSystem *param0) v3 = 3; } - Graphics_LoadTilemapToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, ov12_022234E4(v2, v3), v0->unk_1C.unk_14, 2, 0, 0, 1, BattleAnimSystem_GetHeapID(param0)); + Graphics_LoadTilemapToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, BattleAnimSystem_GetBgNarcMemberIndex(v2, v3), v0->unk_1C.unk_14, 2, 0, 0, 1, BattleAnimSystem_GetHeapID(param0)); } }