From b5701c9dea3010e4763bff611a8b716e7b6c966a Mon Sep 17 00:00:00 2001 From: VicSevenT Date: Fri, 27 Feb 2026 20:42:28 -0600 Subject: [PATCH] Document Battle Factory App graphics (#978) --- generated/text_banks.txt | 2 +- .../frontier/battle_factory/cursor.h | 27 + .../frontier/battle_factory/helpers.h | 13 + .../frontier/battle_factory/main.h | 14 + .../frontier/battle_factory/panel_sprite.h | 16 + .../frontier/battle_factory/pokeball_sprite.h | 31 + .../frontier/battle_factory/sprite_manager.h | 36 + .../frontier/battle_factory/windows.h | 11 + include/constants/heap.h | 3 +- include/coordinates.h | 9 + include/narc_frontier_bg.h | 123 +- include/narc_frontier_obj.h | 4 + include/overlay105/ov105_02241AE0.h | 14 - include/overlay105/ov105_02245AAC.h | 12 - include/overlay105/ov105_02245CD0.h | 12 - include/overlay105/ov105_02245DC4.h | 12 - include/overlay105/ov105_02245E54.h | 25 - include/overlay105/ov105_02245FB8.h | 16 - include/overlay105/ov105_02246214.h | 11 - .../overlay105/struct_ov105_02241FF4_decl.h | 6 - include/overlay105/struct_ov105_02245AAC.h | 15 - .../overlay105/struct_ov105_02245E1C_decl.h | 6 - .../overlay105/struct_ov105_02245EA8_decl.h | 6 - .../overlay105/struct_ov105_02246060_decl.h | 6 - include/overlay105/struct_ov105_02246394.h | 9 - platinum.us/main.lsf | 14 +- ...{unk_0364.json => battle_factory_app.json} | 54 +- .../frontier/battle_factory/cursor.c | 159 + .../frontier/battle_factory/helpers.c | 56 + .../frontier/battle_factory/main.c | 3191 ++++++++++++++++ .../frontier/battle_factory/panel_sprite.c | 48 + .../frontier/battle_factory/pokeball_sprite.c | 117 + .../frontier/battle_factory/sprite_manager.c | 107 + .../frontier/battle_factory/windows.c | 51 + src/meson.build | 14 +- src/overlay104/ov104_022332B4.c | 14 +- src/overlay105/ov105_02241AE0.c | 3307 ----------------- src/overlay105/ov105_02245AAC.c | 138 - src/overlay105/ov105_02245CD0.c | 68 - src/overlay105/ov105_02245DC4.c | 59 - src/overlay105/ov105_02245E54.c | 151 - src/overlay105/ov105_02245FB8.c | 192 - src/overlay105/ov105_02246214.c | 66 - src/unk_0209BA80.c | 2 +- 44 files changed, 4008 insertions(+), 4239 deletions(-) create mode 100644 include/applications/frontier/battle_factory/cursor.h create mode 100644 include/applications/frontier/battle_factory/helpers.h create mode 100644 include/applications/frontier/battle_factory/main.h create mode 100644 include/applications/frontier/battle_factory/panel_sprite.h create mode 100644 include/applications/frontier/battle_factory/pokeball_sprite.h create mode 100644 include/applications/frontier/battle_factory/sprite_manager.h create mode 100644 include/applications/frontier/battle_factory/windows.h create mode 100644 include/coordinates.h delete mode 100644 include/overlay105/ov105_02241AE0.h delete mode 100644 include/overlay105/ov105_02245AAC.h delete mode 100644 include/overlay105/ov105_02245CD0.h delete mode 100644 include/overlay105/ov105_02245DC4.h delete mode 100644 include/overlay105/ov105_02245E54.h delete mode 100644 include/overlay105/ov105_02245FB8.h delete mode 100644 include/overlay105/ov105_02246214.h delete mode 100644 include/overlay105/struct_ov105_02241FF4_decl.h delete mode 100644 include/overlay105/struct_ov105_02245AAC.h delete mode 100644 include/overlay105/struct_ov105_02245E1C_decl.h delete mode 100644 include/overlay105/struct_ov105_02245EA8_decl.h delete mode 100644 include/overlay105/struct_ov105_02246060_decl.h delete mode 100644 include/overlay105/struct_ov105_02246394.h rename res/text/{unk_0364.json => battle_factory_app.json} (55%) create mode 100644 src/applications/frontier/battle_factory/cursor.c create mode 100644 src/applications/frontier/battle_factory/helpers.c create mode 100644 src/applications/frontier/battle_factory/main.c create mode 100644 src/applications/frontier/battle_factory/panel_sprite.c create mode 100644 src/applications/frontier/battle_factory/pokeball_sprite.c create mode 100644 src/applications/frontier/battle_factory/sprite_manager.c create mode 100644 src/applications/frontier/battle_factory/windows.c delete mode 100644 src/overlay105/ov105_02241AE0.c delete mode 100644 src/overlay105/ov105_02245AAC.c delete mode 100644 src/overlay105/ov105_02245CD0.c delete mode 100644 src/overlay105/ov105_02245DC4.c delete mode 100644 src/overlay105/ov105_02245E54.c delete mode 100644 src/overlay105/ov105_02245FB8.c delete mode 100644 src/overlay105/ov105_02246214.c diff --git a/generated/text_banks.txt b/generated/text_banks.txt index 2bd6455d7e..d4fcb91c76 100644 --- a/generated/text_banks.txt +++ b/generated/text_banks.txt @@ -362,7 +362,7 @@ TEXT_BANK_UNK_0360 TEXT_BANK_MENU_ENTRIES TEXT_BANK_DUMMY_0362 TEXT_BANK_UNK_0363 -TEXT_BANK_UNK_0364 +TEXT_BANK_BATTLE_FACTORY_APP TEXT_BANK_BATTLE_FACTORY_SCENE TEXT_BANK_JOURNAL_ENTRIES TEXT_BANK_START_MENU diff --git a/include/applications/frontier/battle_factory/cursor.h b/include/applications/frontier/battle_factory/cursor.h new file mode 100644 index 0000000000..09128fa42c --- /dev/null +++ b/include/applications/frontier/battle_factory/cursor.h @@ -0,0 +1,27 @@ +#ifndef POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_CURSOR_H +#define POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_CURSOR_H + +#include "applications/frontier/battle_factory/sprite_manager.h" + +#include "coordinates.h" + +typedef struct BattleFactoryAppCursorSprite { + u8 unk_00; + u8 unk_01; + u8 currentSlot; + u8 unk_03; + const CoordinatesS16 *positions; + const u8 *animIDs; + Sprite *sprite; + u8 unk_10; +} BattleFactoryAppCursor; + +BattleFactoryAppCursor *BattleFactoryAppCursor_New(BattleFactoryAppSpriteManager *spriteMan, u8 param1, u8 param2, u8 param3, u8 startingSlot, const CoordinatesS16 *positions, const u8 *animIDs); +void *BattleFactoryAppCursor_Free(BattleFactoryAppCursor *cursor); +void BattleFactoryAppCursor_SetDrawFlag(BattleFactoryAppCursor *cursor, BOOL draw); +void ov105_02246080(BattleFactoryAppCursor *cursor); +u8 BattleFactoryAppCursor_GetCurrentSlot(BattleFactoryAppCursor *cursor); +void ov105_022461A4(BattleFactoryAppCursor *cursor, int param1); +void BattleFactoryAppCursor_UpdatePosition(BattleFactoryAppCursor *cursor, u8 slot); + +#endif // POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_CURSOR_H diff --git a/include/applications/frontier/battle_factory/helpers.h b/include/applications/frontier/battle_factory/helpers.h new file mode 100644 index 0000000000..8031e24a5e --- /dev/null +++ b/include/applications/frontier/battle_factory/helpers.h @@ -0,0 +1,13 @@ +#ifndef POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_HELPERS_H +#define POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_HELPERS_H + +#include "struct_defs/pokemon.h" + +#include "pokemon_sprite.h" + +void BattleFactoryApp_Setup3D(void); +void BattleFactoryApp_UpdateMonGraphics(PokemonSpriteManager *spriteMan); +PokemonSprite *BattleFactoryApp_CreateMonSprite(PokemonSpriteManager *spriteMan, int polygonID, Pokemon *mon, int x, int y, int z); +void BattleFactoryApp_FlipMonSprite(PokemonSprite *sprite, BOOL flipHorizontal); + +#endif // POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_HELPERS_H diff --git a/include/applications/frontier/battle_factory/main.h b/include/applications/frontier/battle_factory/main.h new file mode 100644 index 0000000000..51bddc41f2 --- /dev/null +++ b/include/applications/frontier/battle_factory/main.h @@ -0,0 +1,14 @@ +#ifndef POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_MAIN_H +#define POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_MAIN_H + +#include "overlay_manager.h" + +int BattleFactoryApp_Init(ApplicationManager *appMan, int *state); +int BattleFactoryApp_Main(ApplicationManager *appMan, int *state); +int BattleFactoryApp_Exit(ApplicationManager *appMan, int *state); +void ov105_0224569C(int param0, int param1, void *param2, void *param3); +void ov105_02245744(int param0, int param1, void *param2, void *param3); +void ov105_022457B8(int param0, int param1, void *param2, void *param3); +void ov105_022458A4(int param0, int param1, void *param2, void *param3); + +#endif // POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_MAIN_H diff --git a/include/applications/frontier/battle_factory/panel_sprite.h b/include/applications/frontier/battle_factory/panel_sprite.h new file mode 100644 index 0000000000..60658d10b4 --- /dev/null +++ b/include/applications/frontier/battle_factory/panel_sprite.h @@ -0,0 +1,16 @@ +#ifndef POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_SCREEN_SPRITE_H +#define POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_SCREEN_SPRITE_H + +#include "applications/frontier/battle_factory/sprite_manager.h" + +typedef struct BattleFactoryAppPanelSprite { + int x; + int y; + Sprite *sprite; +} BattleFactoryAppPanelSprite; + +BattleFactoryAppPanelSprite *BattleFactoryAppPanelSprite_New(BattleFactoryAppSpriteManager *spriteMan, u32 animID, int x, int y, enum HeapID heapID); +void *BattleFactoryAppPanelSprite_Free(BattleFactoryAppPanelSprite *sprite); +BOOL BattleFactoryAppPanelSprite_IsAnimated(BattleFactoryAppPanelSprite *sprite); + +#endif // POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_SCREEN_SPRITE_H diff --git a/include/applications/frontier/battle_factory/pokeball_sprite.h b/include/applications/frontier/battle_factory/pokeball_sprite.h new file mode 100644 index 0000000000..3bda651eb3 --- /dev/null +++ b/include/applications/frontier/battle_factory/pokeball_sprite.h @@ -0,0 +1,31 @@ +#ifndef POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_POKEBALL_SPRITE_H +#define POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_POKEBALL_SPRITE_H + +#include + +#include "applications/frontier/battle_factory/sprite_manager.h" + +typedef struct BattleFactoryAppPokeballSprite { + u16 isSelected; + u16 unused; + int x; + int y; + Sprite *sprite; +} BattleFactoryAppPokeballSprite; + +BattleFactoryAppPokeballSprite *BattleFactoryAppPokeballSprite_New(BattleFactoryAppSpriteManager *spriteMan, int x, int y, u32 heapID); +void *BattleFactoryAppPokeballSprite_Free(BattleFactoryAppPokeballSprite *ballSprite); +void BattleFactoryAppPokeballSprite_SetDrawFlag(BattleFactoryAppPokeballSprite *ballSprite, BOOL draw); +VecFx32 BattleFactoryAppPokeballSprite_SetAndGetPosition(BattleFactoryAppPokeballSprite *ballSprite, int x, int y); +void BattleFactoryAppPokeballSprite_SetPosition(BattleFactoryAppPokeballSprite *ballSprite, int x, int y); +const VecFx32 *BattleFactoryAppPokeballSprite_GetPosition(BattleFactoryAppPokeballSprite *ballSprite); +u8 BattleFactoryAppPokeballSprite_IsSelected(BattleFactoryAppPokeballSprite *ballSprite); +void BattleFactoryAppPokeballSprite_SelectMon(BattleFactoryAppPokeballSprite *ballSprite); +void BattleFactoryAppPokeballSprite_UnselectMon(BattleFactoryAppPokeballSprite *ballSprite); +void ov105_02245F5C(BattleFactoryAppPokeballSprite *ballSprite); +int BattleFactoryAppPokeballSprite_GetX(BattleFactoryAppPokeballSprite *ballSprite); +int BattleFactoryAppPokeballSprite_GetY(BattleFactoryAppPokeballSprite *ballSprite); +void BattleFactoryAppPokeballSprite_SetAnim(BattleFactoryAppPokeballSprite *ballSprite, u32 animID); +void BattleFactoryAppPokeballSprite_UpdatePalette(BattleFactoryAppPokeballSprite *ballSprite, u32 palette); + +#endif // POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_POKEBALL_SPRITE_H diff --git a/include/applications/frontier/battle_factory/sprite_manager.h b/include/applications/frontier/battle_factory/sprite_manager.h new file mode 100644 index 0000000000..5a2359cdc8 --- /dev/null +++ b/include/applications/frontier/battle_factory/sprite_manager.h @@ -0,0 +1,36 @@ +#ifndef POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_SPRITE_MANAGER_H +#define POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_SPRITE_MANAGER_H + +#include "sprite.h" +#include "sprite_resource.h" +#include "sprite_util.h" + +enum BattleFactoryAppAnimIDs { + ANIM_ID_MON_PANEL_OPEN = 0, + ANIM_ID_MON_PANEL_CLOSE, + ANIM_ID_PARTNER_PANEL_OPEN, + ANIM_ID_PARTNER_PANEL_CLOSE, + ANIM_ID_UNK_4, + ANIM_ID_UNK_5, + ANIM_ID_BALL_STATIC, + ANIM_ID_BALL_SHAKING, + ANIM_ID_CURSOR, + ANIM_ID_MENU_CURSOR, + ANIM_ID_BALL_ONE_SHAKE, + ANIM_ID_UNK_11, + ANIM_ID_UNK_12, + ANIM_ID_CURSOR_SELECTED, +}; + +typedef struct { + SpriteList *spriteList; + G2dRenderer unk_04; + SpriteResourceCollection *resourceCollection[4]; + SpriteResource *resources[1][4]; +} BattleFactoryAppSpriteManager; + +void BattleFactoryApp_InitSpriteManager(BattleFactoryAppSpriteManager *sprites); +Sprite *BattleFactoryApp_InitSprite(BattleFactoryAppSpriteManager *spriteMan, u32 resourceID, u32 animID, u32 priority, int resourcePriority, u8 onSubScreen); +void BattleFactoryApp_FreeSprites(BattleFactoryAppSpriteManager *spriteMan); + +#endif // POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_SPRITE_MANAGER_H diff --git a/include/applications/frontier/battle_factory/windows.h b/include/applications/frontier/battle_factory/windows.h new file mode 100644 index 0000000000..97907bcbc7 --- /dev/null +++ b/include/applications/frontier/battle_factory/windows.h @@ -0,0 +1,11 @@ +#ifndef POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_WINDOWS_H +#define POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_WINDOWS_H + +#include "bg_window.h" + +void BattleFactoryApp_InitWindows(BgConfig *bgConfig, Window *windows); +void BattleFactoryApp_FreeWindows(Window *windows); +void BattleFactoryApp_DrawWindow(BgConfig *bgConfig, Window *window); +void BattleFactoryApp_DrawMessageBox(Window *window, int frame); + +#endif // POKEPLATINUM_APPLICATIONS_BATTLE_FACTORY_WINDOWS_H diff --git a/include/constants/heap.h b/include/constants/heap.h index d8f404ed2c..573e6e16b5 100644 --- a/include/constants/heap.h +++ b/include/constants/heap.h @@ -95,7 +95,7 @@ enum HeapID { HEAP_ID_90, HEAP_ID_91, HEAP_ID_92, - HEAP_ID_93, + HEAP_ID_BATTLE_FACTORY_APP, HEAP_ID_94, HEAP_ID_95, HEAP_ID_96, @@ -135,6 +135,7 @@ enum HeapSize { HEAP_SIZE_APPLICATION = 0x10D800, HEAP_SIZE_BATTLE_HALL_APP = 0x20000, + HEAP_SIZE_BATTLE_FACTORY_APP = 0x20000, HEAP_SIZE_BAG = 0x30000, HEAP_SIZE_PRE_POKETCH_SUBSCREEN = 0x18000, diff --git a/include/coordinates.h b/include/coordinates.h new file mode 100644 index 0000000000..a25c043886 --- /dev/null +++ b/include/coordinates.h @@ -0,0 +1,9 @@ +#ifndef POKEPLATINUM_COORDINATES_H +#define POKEPLATINUM_COORDINATES_H + +typedef struct CoordinatesS16 { + s16 x; + s16 y; +} CoordinatesS16; + +#endif // POKEPLATINUM_COORDINATES_H diff --git a/include/narc_frontier_bg.h b/include/narc_frontier_bg.h index c53c57821e..12203cf85d 100644 --- a/include/narc_frontier_bg.h +++ b/include/narc_frontier_bg.h @@ -4,62 +4,71 @@ // frontier_bg.narc. This file should eventually be deleted and the constants // replaced with those from a naix file once the NARC is unpacked. -#define BATTLE_FACTORY_TILES 0 -#define BATTLE_FACTORY_BATTLE_ROOM_TILEMAP 1 -#define BATTLE_FACTORY_CORRIDOR_TILEMAP 2 -#define BATTLE_FACTORY_CORRIDOR_FLOOR_TILEMAP 3 -#define BATTLE_HALL_BATTLE_ROOM_TILES 14 -#define BATTLE_HALL_CORRIDOR_TILES 16 -#define BATTLE_HALL_CORRIDOR_TILEMAP 17 -#define BATTLE_HALL_BATTLE_ROOM_LIGHTS_TILES 19 -#define BATTLE_HALL_BATTLE_ROOM_TILEMAP 20 -#define BATTLE_HALL_BATTLE_ROOM_LIGHTS_TILEMAP 22 -#define BATTLE_HALL_APP_TILES 23 -#define BATTLE_HALL_APP_TILEMAP 24 -#define BATTLE_CASTLE_CORRIDOR_TILES 25 -#define BATTLE_CASTLE_CORRIDOR_TILEMAP 26 -#define BATTLE_CASTLE_BATTLE_ROOM_TILES 29 -#define BATTLE_CASTLE_BATTLE_ROOM_TILEMAP 30 -#define BATTLE_CASTLE_BATTLE_ROOM_CURTAINS_TILEMAP 33 -#define BATTLE_CASTLE_SELF_APP_TILES 34 -#define BATTLE_CASTLE_SELF_APP_SOLO_TILEMAP 35 -#define BATTLE_CASTLE_SELF_APP_MULTI_TILEMAP 36 -#define BATTLE_CASTLE_SELF_APP_ITEMS_TILEMAP 37 -#define BATTLE_CASTLE_SELF_APP_SUMMARY_TILEMAP 38 -#define BATTLE_CASTLE_SELF_APP_MOVES_TILEMAP 39 -#define BATTLE_CASTLE_OPPONENT_APP_SOLO_TILEMAP 40 -#define BATTLE_CASTLE_OPPONENT_APP_MULTI_TILEMAP 41 -#define BATTLE_CASTLE_OPPONENT_APP_SUMMARY_TILEMAP 42 -#define BATTLE_CASTLE_OPPONENT_APP_MOVES_TILEMAP 43 -#define BATTLE_CASTLE_OPPONENT_APP_TILES 44 -#define BATTLE_TOWER_TILES 45 -#define BATTLE_TOWER_MULTI_BATTLE_ROOM_TILEMAP 46 -#define BATTLE_TOWER_MULTI_CORRIDOR_TILEMAP 47 -#define BATTLE_TOWER_MULTI_CORRIDOR_FG_TILEMAP 48 -#define BATTLE_TOWER_BATTLE_ROOM_TILEMAP 49 -#define BATTLE_TOWER_CORRIDOR_TILEMAP 50 -#define BATTLE_TOWER_CORRIDOR_FG_TILEMAP 51 -#define BATTLE_ARCADE_BATTLE_ROOM_TILEMAP 52 -#define BATTLE_ARCADE_BATTLE_ROOM_TILES 54 -#define BATTLE_ARCADE_CORRIDOR_TILEMAP 55 -#define BATTLE_ARCADE_CORRIDOR_TILES 56 -#define BATTLE_ARCADE_BATTLE_ROOM_HP_SCREEN_TILEMAP 57 -#define BATTLE_ARCADE_BATTLE_ROOM_HP_SCREEN_TILES 89 -#define BATTLE_FRONTIER_APP_SUB_SCREEN_TILES 125 -#define BATTLE_FRONTIER_APP_SUB_SCREEN_TILEMAP 126 -#define BATTLE_FACTORY_PLTT 129 -#define BATTLE_HALL_BATTLE_ROOM_PLTT 131 -#define BATTLE_HALL_CORRIDOR_PLTT 132 -#define BATTLE_HALL_BATTLE_ROOM_LIGHTS_PLTT 133 -#define BATTLE_HALL_APP_PLTT 134 -#define BATTLE_CASTLE_CORRIDOR_PLTT 135 -#define BATTLE_CASTLE_SELF_APP_PLTT 137 -#define BATTLE_CASTLE_OPPONENT_APP_PLTT 138 -#define BATTLE_CASTLE_BATTLE_ROOM_PLTT 140 -#define BATTLE_TOWER_PLTT 141 -#define BATTLE_ARCADE_BATTLE_ROOM_PLTT 142 -#define BATTLE_ARCADE_CORRIDOR_PLTT 143 -#define BATTLE_ARCADE_BATTLE_ROOM_HP_SCREEN_PLTT 169 -#define BATTLE_FRONTIER_APP_SUB_SCREEN_PLTT 171 +#define BATTLE_FACTORY_TILES 0 +#define BATTLE_FACTORY_BATTLE_ROOM_TILEMAP 1 +#define BATTLE_FACTORY_CORRIDOR_TILEMAP 2 +#define BATTLE_FACTORY_CORRIDOR_FLOOR_TILEMAP 3 +#define BATTLE_FACTORY_APP_TILES 4 +#define BATTLE_FACTORY_APP_MON_SELECTION_TILEMAP 5 +#define BATTLE_FACTORY_APP_NO_SCREENS_TILEMAP 7 +#define BATTLE_FACTORY_APP_CONVEYOR_TILEMAP 8 +#define BATTLE_FACTORY_APP_WHEEL_TILEMAP 9 +#define BATTLE_FACTORY_APP_SUMMARY_TILEMAP 10 +#define BATTLE_FACTORY_APP_MULTI_MON_SELECTION_TILEMAP 11 +#define BATTLE_FACTORY_APP_MULTI_SUMMARY_TILEMAP 12 +#define BATTLE_HALL_BATTLE_ROOM_TILES 14 +#define BATTLE_HALL_CORRIDOR_TILES 16 +#define BATTLE_HALL_CORRIDOR_TILEMAP 17 +#define BATTLE_HALL_BATTLE_ROOM_LIGHTS_TILES 19 +#define BATTLE_HALL_BATTLE_ROOM_TILEMAP 20 +#define BATTLE_HALL_BATTLE_ROOM_LIGHTS_TILEMAP 22 +#define BATTLE_HALL_APP_TILES 23 +#define BATTLE_HALL_APP_TILEMAP 24 +#define BATTLE_CASTLE_CORRIDOR_TILES 25 +#define BATTLE_CASTLE_CORRIDOR_TILEMAP 26 +#define BATTLE_CASTLE_BATTLE_ROOM_TILES 29 +#define BATTLE_CASTLE_BATTLE_ROOM_TILEMAP 30 +#define BATTLE_CASTLE_BATTLE_ROOM_CURTAINS_TILEMAP 33 +#define BATTLE_CASTLE_SELF_APP_TILES 34 +#define BATTLE_CASTLE_SELF_APP_SOLO_TILEMAP 35 +#define BATTLE_CASTLE_SELF_APP_MULTI_TILEMAP 36 +#define BATTLE_CASTLE_SELF_APP_ITEMS_TILEMAP 37 +#define BATTLE_CASTLE_SELF_APP_SUMMARY_TILEMAP 38 +#define BATTLE_CASTLE_SELF_APP_MOVES_TILEMAP 39 +#define BATTLE_CASTLE_OPPONENT_APP_SOLO_TILEMAP 40 +#define BATTLE_CASTLE_OPPONENT_APP_MULTI_TILEMAP 41 +#define BATTLE_CASTLE_OPPONENT_APP_SUMMARY_TILEMAP 42 +#define BATTLE_CASTLE_OPPONENT_APP_MOVES_TILEMAP 43 +#define BATTLE_CASTLE_OPPONENT_APP_TILES 44 +#define BATTLE_TOWER_TILES 45 +#define BATTLE_TOWER_MULTI_BATTLE_ROOM_TILEMAP 46 +#define BATTLE_TOWER_MULTI_CORRIDOR_TILEMAP 47 +#define BATTLE_TOWER_MULTI_CORRIDOR_FG_TILEMAP 48 +#define BATTLE_TOWER_BATTLE_ROOM_TILEMAP 49 +#define BATTLE_TOWER_CORRIDOR_TILEMAP 50 +#define BATTLE_TOWER_CORRIDOR_FG_TILEMAP 51 +#define BATTLE_ARCADE_BATTLE_ROOM_TILEMAP 52 +#define BATTLE_ARCADE_BATTLE_ROOM_TILES 54 +#define BATTLE_ARCADE_CORRIDOR_TILEMAP 55 +#define BATTLE_ARCADE_CORRIDOR_TILES 56 +#define BATTLE_ARCADE_BATTLE_ROOM_HP_SCREEN_TILEMAP 57 +#define BATTLE_ARCADE_BATTLE_ROOM_HP_SCREEN_TILES 89 +#define BATTLE_FRONTIER_APP_SUB_SCREEN_TILES 125 +#define BATTLE_FRONTIER_APP_SUB_SCREEN_TILEMAP 126 +#define BATTLE_FACTORY_PLTT 129 +#define BATTLE_FACTORY_APP_PLTT 130 +#define BATTLE_HALL_BATTLE_ROOM_PLTT 131 +#define BATTLE_HALL_CORRIDOR_PLTT 132 +#define BATTLE_HALL_BATTLE_ROOM_LIGHTS_PLTT 133 +#define BATTLE_HALL_APP_PLTT 134 +#define BATTLE_CASTLE_CORRIDOR_PLTT 135 +#define BATTLE_CASTLE_SELF_APP_PLTT 137 +#define BATTLE_CASTLE_OPPONENT_APP_PLTT 138 +#define BATTLE_CASTLE_BATTLE_ROOM_PLTT 140 +#define BATTLE_TOWER_PLTT 141 +#define BATTLE_ARCADE_BATTLE_ROOM_PLTT 142 +#define BATTLE_ARCADE_CORRIDOR_PLTT 143 +#define BATTLE_ARCADE_BATTLE_ROOM_HP_SCREEN_PLTT 169 +#define BATTLE_FRONTIER_APP_SUB_SCREEN_PLTT 171 #endif diff --git a/include/narc_frontier_obj.h b/include/narc_frontier_obj.h index 1e6e3ad25c..4984bb35c9 100644 --- a/include/narc_frontier_obj.h +++ b/include/narc_frontier_obj.h @@ -4,12 +4,16 @@ // frontier_obj.narc. This file should eventually be deleted and the constants // replaced with those from a naix file once the NARC is unpacked. +#define BATTLE_FACTORY_APP_SPRITES_NCGR 0 +#define BATTLE_FACTORY_APP_SPRITES_NANR 1 +#define BATTLE_FACTORY_APP_SPRITES_NCER 2 #define BATTLE_HALL_APP_CURSOR_BOX_NCGR 12 #define BATTLE_HALL_APP_CURSOR_BOX_NANR 13 #define BATTLE_HALL_APP_CURSOR_BOX_NCER 14 #define BATTLE_CASTLE_APP_SPRITES_NCGR 15 #define BATTLE_CASTLE_APP_SPRITES_NANR 16 #define BATTLE_CASTLE_APP_SPRITES_NCER 17 +#define BATTLE_FACTORY_APP_SPRITES_PLTT 36 #define BATTLE_HALL_APP_CURSOR_BOX_PLTT 38 #define BATTLE_CASTLE_APP_SPRITES_PLTT 39 diff --git a/include/overlay105/ov105_02241AE0.h b/include/overlay105/ov105_02241AE0.h deleted file mode 100644 index a0397db460..0000000000 --- a/include/overlay105/ov105_02241AE0.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef POKEPLATINUM_OV105_02241AE0_H -#define POKEPLATINUM_OV105_02241AE0_H - -#include "overlay_manager.h" - -int ov105_02241AE0(ApplicationManager *appMan, int *param1); -int ov105_02241BD8(ApplicationManager *appMan, int *param1); -int ov105_02241F54(ApplicationManager *appMan, int *param1); -void ov105_0224569C(int param0, int param1, void *param2, void *param3); -void ov105_02245744(int param0, int param1, void *param2, void *param3); -void ov105_022457B8(int param0, int param1, void *param2, void *param3); -void ov105_022458A4(int param0, int param1, void *param2, void *param3); - -#endif // POKEPLATINUM_OV105_02241AE0_H diff --git a/include/overlay105/ov105_02245AAC.h b/include/overlay105/ov105_02245AAC.h deleted file mode 100644 index 37af22dd74..0000000000 --- a/include/overlay105/ov105_02245AAC.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef POKEPLATINUM_OV105_02245AAC_H -#define POKEPLATINUM_OV105_02245AAC_H - -#include "overlay105/struct_ov105_02245AAC.h" - -#include "sprite.h" - -void ov105_02245AAC(UnkStruct_ov105_02245AAC *param0); -Sprite *ov105_02245BA4(UnkStruct_ov105_02245AAC *param0, u32 param1, u32 param2, u32 param3, int param4, u8 param5); -void ov105_02245C50(UnkStruct_ov105_02245AAC *param0); - -#endif // POKEPLATINUM_OV105_02245AAC_H diff --git a/include/overlay105/ov105_02245CD0.h b/include/overlay105/ov105_02245CD0.h deleted file mode 100644 index 22fe1982fe..0000000000 --- a/include/overlay105/ov105_02245CD0.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef POKEPLATINUM_OV105_02245CD0_H -#define POKEPLATINUM_OV105_02245CD0_H - -#include "pokemon.h" -#include "pokemon_sprite.h" - -void ov105_02245CD0(void); -void ov105_02245D50(PokemonSpriteManager *param0); -PokemonSprite *ov105_02245D88(PokemonSpriteManager *param0, int param1, Pokemon *param2, int param3, int param4, int param5); -void ov105_02245DB8(PokemonSprite *param0, int param1); - -#endif // POKEPLATINUM_OV105_02245CD0_H diff --git a/include/overlay105/ov105_02245DC4.h b/include/overlay105/ov105_02245DC4.h deleted file mode 100644 index 1819701b48..0000000000 --- a/include/overlay105/ov105_02245DC4.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef POKEPLATINUM_OV105_02245DC4_H -#define POKEPLATINUM_OV105_02245DC4_H - -#include "overlay105/struct_ov105_02245AAC.h" -#include "overlay105/struct_ov105_02245E1C_decl.h" - -UnkStruct_ov105_02245E1C *ov105_02245DC4(UnkStruct_ov105_02245AAC *param0, u32 param1, int param2, int param3, enum HeapID heapID); -void *ov105_02245E1C(UnkStruct_ov105_02245E1C *param0); -void ov105_02245E30(UnkStruct_ov105_02245E1C *param0, int param1, int param2); -BOOL ov105_02245E48(UnkStruct_ov105_02245E1C *param0); - -#endif // POKEPLATINUM_OV105_02245DC4_H diff --git a/include/overlay105/ov105_02245E54.h b/include/overlay105/ov105_02245E54.h deleted file mode 100644 index 71fb84a6fd..0000000000 --- a/include/overlay105/ov105_02245E54.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef POKEPLATINUM_OV105_02245E54_H -#define POKEPLATINUM_OV105_02245E54_H - -#include - -#include "overlay105/struct_ov105_02245AAC.h" -#include "overlay105/struct_ov105_02245EA8_decl.h" - -UnkStruct_ov105_02245EA8 *ov105_02245E54(UnkStruct_ov105_02245AAC *param0, int param1, int param2, u32 heapID); -void *ov105_02245EA8(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245EBC(UnkStruct_ov105_02245EA8 *param0, int param1); -VecFx32 ov105_02245EC8(UnkStruct_ov105_02245EA8 *param0, int param1, int param2); -void ov105_02245F14(UnkStruct_ov105_02245EA8 *param0, int param1, int param2); -const VecFx32 *ov105_02245F2C(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F38(UnkStruct_ov105_02245EA8 *param0, u8 param1); -u8 ov105_02245F3C(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F44(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F50(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F5C(UnkStruct_ov105_02245EA8 *param0); -int ov105_02245F88(UnkStruct_ov105_02245EA8 *param0); -int ov105_02245F8C(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F90(UnkStruct_ov105_02245EA8 *param0, u32 param1); -void ov105_02245FAC(UnkStruct_ov105_02245EA8 *param0, u32 param1); - -#endif // POKEPLATINUM_OV105_02245E54_H diff --git a/include/overlay105/ov105_02245FB8.h b/include/overlay105/ov105_02245FB8.h deleted file mode 100644 index f04a2b4088..0000000000 --- a/include/overlay105/ov105_02245FB8.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef POKEPLATINUM_OV105_02245FB8_H -#define POKEPLATINUM_OV105_02245FB8_H - -#include "overlay105/struct_ov105_02245AAC.h" -#include "overlay105/struct_ov105_02246060_decl.h" -#include "overlay105/struct_ov105_02246394.h" - -UnkStruct_ov105_02246060 *ov105_02245FB8(UnkStruct_ov105_02245AAC *param0, u8 param1, u8 param2, u8 param3, u8 param4, const UnkStruct_ov105_02246394 *param5, const u8 *param6); -void *ov105_02246060(UnkStruct_ov105_02246060 *param0); -void ov105_02246074(UnkStruct_ov105_02246060 *param0, int param1); -void ov105_02246080(UnkStruct_ov105_02246060 *param0); -u8 ov105_022461A0(UnkStruct_ov105_02246060 *param0); -void ov105_022461A4(UnkStruct_ov105_02246060 *param0, int param1); -void ov105_022461C0(UnkStruct_ov105_02246060 *param0, u8 param1); - -#endif // POKEPLATINUM_OV105_02245FB8_H diff --git a/include/overlay105/ov105_02246214.h b/include/overlay105/ov105_02246214.h deleted file mode 100644 index 4bc369e6d7..0000000000 --- a/include/overlay105/ov105_02246214.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef POKEPLATINUM_OV105_02246214_H -#define POKEPLATINUM_OV105_02246214_H - -#include "bg_window.h" - -void ov105_02246214(BgConfig *param0, Window *param1); -void ov105_02246244(Window *param0); -void ov105_02246260(BgConfig *param0, Window *param1); -void ov105_0224628C(Window *param0, int param1); - -#endif // POKEPLATINUM_OV105_02246214_H diff --git a/include/overlay105/struct_ov105_02241FF4_decl.h b/include/overlay105/struct_ov105_02241FF4_decl.h deleted file mode 100644 index 3bb4a8a22c..0000000000 --- a/include/overlay105/struct_ov105_02241FF4_decl.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV105_02241FF4_DECL_H -#define POKEPLATINUM_STRUCT_OV105_02241FF4_DECL_H - -typedef struct UnkStruct_ov105_02241FF4_t UnkStruct_ov105_02241FF4; - -#endif // POKEPLATINUM_STRUCT_OV105_02241FF4_DECL_H diff --git a/include/overlay105/struct_ov105_02245AAC.h b/include/overlay105/struct_ov105_02245AAC.h deleted file mode 100644 index 4a326da1df..0000000000 --- a/include/overlay105/struct_ov105_02245AAC.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV105_02245AAC_H -#define POKEPLATINUM_STRUCT_OV105_02245AAC_H - -#include "sprite.h" -#include "sprite_resource.h" -#include "sprite_util.h" - -typedef struct { - SpriteList *unk_00; - G2dRenderer unk_04; - SpriteResourceCollection *unk_190[4]; - SpriteResource *unk_1A0[1][4]; -} UnkStruct_ov105_02245AAC; - -#endif // POKEPLATINUM_STRUCT_OV105_02245AAC_H diff --git a/include/overlay105/struct_ov105_02245E1C_decl.h b/include/overlay105/struct_ov105_02245E1C_decl.h deleted file mode 100644 index 1df1b1e355..0000000000 --- a/include/overlay105/struct_ov105_02245E1C_decl.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV105_02245E1C_DECL_H -#define POKEPLATINUM_STRUCT_OV105_02245E1C_DECL_H - -typedef struct UnkStruct_ov105_02245E1C_t UnkStruct_ov105_02245E1C; - -#endif // POKEPLATINUM_STRUCT_OV105_02245E1C_DECL_H diff --git a/include/overlay105/struct_ov105_02245EA8_decl.h b/include/overlay105/struct_ov105_02245EA8_decl.h deleted file mode 100644 index c00c2e029e..0000000000 --- a/include/overlay105/struct_ov105_02245EA8_decl.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV105_02245EA8_DECL_H -#define POKEPLATINUM_STRUCT_OV105_02245EA8_DECL_H - -typedef struct UnkStruct_ov105_02245EA8_t UnkStruct_ov105_02245EA8; - -#endif // POKEPLATINUM_STRUCT_OV105_02245EA8_DECL_H diff --git a/include/overlay105/struct_ov105_02246060_decl.h b/include/overlay105/struct_ov105_02246060_decl.h deleted file mode 100644 index f18af7cf01..0000000000 --- a/include/overlay105/struct_ov105_02246060_decl.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV105_02246060_DECL_H -#define POKEPLATINUM_STRUCT_OV105_02246060_DECL_H - -typedef struct UnkStruct_ov105_02246060_t UnkStruct_ov105_02246060; - -#endif // POKEPLATINUM_STRUCT_OV105_02246060_DECL_H diff --git a/include/overlay105/struct_ov105_02246394.h b/include/overlay105/struct_ov105_02246394.h deleted file mode 100644 index 006093ab7c..0000000000 --- a/include/overlay105/struct_ov105_02246394.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV105_02246394_H -#define POKEPLATINUM_STRUCT_OV105_02246394_H - -typedef struct { - s16 unk_00; - s16 unk_02; -} UnkStruct_ov105_02246394; - -#endif // POKEPLATINUM_STRUCT_OV105_02246394_H diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index 1fed91ea07..fe06f53338 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -1573,13 +1573,13 @@ Overlay overlay104 Overlay overlay105 { After overlay104 - Object main.nef.p/src_overlay105_ov105_02241AE0.c.o - Object main.nef.p/src_overlay105_ov105_02245AAC.c.o - Object main.nef.p/src_overlay105_ov105_02245CD0.c.o - Object main.nef.p/src_overlay105_ov105_02245DC4.c.o - Object main.nef.p/src_overlay105_ov105_02245E54.c.o - Object main.nef.p/src_overlay105_ov105_02245FB8.c.o - Object main.nef.p/src_overlay105_ov105_02246214.c.o + Object main.nef.p/src_applications_frontier_battle_factory_main.c.o + Object main.nef.p/src_applications_frontier_battle_factory_sprite_manager.c.o + Object main.nef.p/src_applications_frontier_battle_factory_helpers.c.o + Object main.nef.p/src_applications_frontier_battle_factory_panel_sprite.c.o + Object main.nef.p/src_applications_frontier_battle_factory_pokeball_sprite.c.o + Object main.nef.p/src_applications_frontier_battle_factory_cursor.c.o + Object main.nef.p/src_applications_frontier_battle_factory_windows.c.o } Overlay battle_hall_app diff --git a/res/text/unk_0364.json b/res/text/battle_factory_app.json similarity index 55% rename from res/text/unk_0364.json rename to res/text/battle_factory_app.json index aef7b04023..e58e41f5ec 100644 --- a/res/text/unk_0364.json +++ b/res/text/battle_factory_app.json @@ -2,89 +2,89 @@ "key": 3949, "messages": [ { - "id": "pl_msg_00000364_00000", + "id": "BattleFactoryApp_Text_ChoosePokemon", "en_US": [ "Please choose Pokémon\n", "no. {STRVAR_1 50, 0, 0}." ] }, { - "id": "pl_msg_00000364_00001", + "id": "BattleFactoryApp_Text_OkWithSelection", "en_US": [ "Are you OK with the\n", "chosen {STRVAR_1 50, 0, 0} Pokémon?" ] }, { - "id": "pl_msg_00000364_00002", + "id": "BattleFactoryApp_Text_PleaseWait", "en_US": "Please wait a moment." }, { - "id": "pl_msg_00000364_00003", + "id": "BattleFactoryApp_Text_Yes", "en_US": "YES" }, { - "id": "pl_msg_00000364_00004", + "id": "BattleFactoryApp_Text_No", "en_US": "NO" }, { - "id": "pl_msg_00000364_00005", + "id": "BattleFactoryApp_Text_Summary", "en_US": "SUMMARY" }, { - "id": "pl_msg_00000364_00006", + "id": "BattleFactoryApp_Text_Rent", "en_US": "RENT" }, { - "id": "pl_msg_00000364_00007", + "id": "BattleFactoryApp_Text_Cancel", "en_US": "CANCEL" }, { - "id": "pl_msg_00000364_00008", + "id": "BattleFactoryApp_Text_Remove", "en_US": "REMOVE" }, { - "id": "pl_msg_00000364_00009", + "id": "BattleFactoryApp_Text_ChooseExchange", "en_US": [ "Choose the Pokémon to\n", "be exchanged." ] }, { - "id": "pl_msg_00000364_00010", + "id": "BattleFactoryApp_Text_CancelTrade", "en_US": [ "Cancel the Pokémon\n", "trade?" ] }, { - "id": "pl_msg_00000364_00011", + "id": "BattleFactoryApp_Text_Dummy1", "garbage": 2 }, { - "id": "pl_msg_00000364_00012", + "id": "BattleFactoryApp_Text_Dummy2", "garbage": 3 }, { - "id": "pl_msg_00000364_00013", + "id": "BattleFactoryApp_Text_ChooseReceive", "en_US": [ "Choose the Pokémon you\n", "want to receive." ] }, { - "id": "pl_msg_00000364_00014", + "id": "BattleFactoryApp_Text_AcceptPokemon", "en_US": [ "Will you accept this\n", "Pokémon?" ] }, { - "id": "pl_msg_00000364_00015", + "id": "BattleFactoryApp_Text_PleaseWait2", "en_US": "Please wait a moment." }, { - "id": "pl_msg_00000364_00016", + "id": "BattleFactoryApp_Text_TradeOccurred", "en_US": [ "{STRVAR_1 3, 0, 0} traded\n", "away {STRVAR_1 0, 1, 0} and\f", @@ -92,43 +92,43 @@ ] }, { - "id": "pl_msg_00000364_00017", + "id": "BattleFactoryApp_Text_Dummy3", "garbage": 2 }, { - "id": "pl_msg_00000364_00018", + "id": "BattleFactoryApp_Text_Dummy4", "garbage": 3 }, { - "id": "pl_msg_00000364_00019", + "id": "BattleFactoryApp_Text_Cancel2", "en_US": "CANCEL" }, { - "id": "pl_msg_00000364_00020", + "id": "BattleFactoryApp_Text_Dummy5", "garbage": 6 }, { - "id": "pl_msg_00000364_00021", + "id": "BattleFactoryApp_Text_Exchange", "en_US": "EXCHANGE" }, { - "id": "pl_msg_00000364_00022", + "id": "BattleFactoryApp_Text_Dummy6", "garbage": 3 }, { - "id": "pl_msg_00000364_00023", + "id": "BattleFactoryApp_Text_Back", "en_US": "BACK" }, { - "id": "pl_msg_00000364_00024", + "id": "BattleFactoryApp_Text_Cancel3", "en_US": "CANCEL" }, { - "id": "pl_msg_00000364_00025", + "id": "BattleFactoryApp_Text_MaleSymbol", "en_US": "♂" }, { - "id": "pl_msg_00000364_00026", + "id": "BattleFactoryApp_Text_FemaleSymbol", "en_US": "♀" } ] diff --git a/src/applications/frontier/battle_factory/cursor.c b/src/applications/frontier/battle_factory/cursor.c new file mode 100644 index 0000000000..e05ff7d666 --- /dev/null +++ b/src/applications/frontier/battle_factory/cursor.c @@ -0,0 +1,159 @@ +#include "applications/frontier/battle_factory/cursor.h" + +#include +#include + +#include "applications/frontier/battle_factory/sprite_manager.h" + +#include "heap.h" +#include "sprite.h" +#include "system.h" + +BattleFactoryAppCursor *BattleFactoryAppCursor_New(BattleFactoryAppSpriteManager *spriteMan, u8 param1, u8 param2, u8 param3, u8 startingSlot, const CoordinatesS16 *positions, const u8 *animIDs) +{ + BattleFactoryAppCursor *cursor = Heap_Alloc(HEAP_ID_BATTLE_FACTORY_APP, sizeof(BattleFactoryAppCursor)); + memset(cursor, 0, sizeof(BattleFactoryAppCursor)); + + cursor->unk_00 = param1; + cursor->unk_10 = param2; + cursor->unk_01 = param3; + cursor->currentSlot = startingSlot; + cursor->positions = positions; + cursor->animIDs = animIDs; + + if (animIDs != NULL) { + cursor->sprite = BattleFactoryApp_InitSprite(spriteMan, 0, cursor->animIDs[startingSlot], 0, 0, FALSE); + } else { + if (param3 == 0) { + cursor->sprite = BattleFactoryApp_InitSprite(spriteMan, 0, ANIM_ID_CURSOR, 0, 0, FALSE); + } else { + cursor->sprite = BattleFactoryApp_InitSprite(spriteMan, 0, ANIM_ID_MENU_CURSOR, 0, 0, FALSE); + } + } + + VecFx32 position; + position.x = cursor->positions[cursor->currentSlot].x * FX32_ONE; + position.y = cursor->positions[cursor->currentSlot].y * FX32_ONE; + + Sprite_SetPosition(cursor->sprite, &position); + return cursor; +} + +void *BattleFactoryAppCursor_Free(BattleFactoryAppCursor *cursor) +{ + Sprite_Delete(cursor->sprite); + Heap_Free(cursor); + + return NULL; +} + +void BattleFactoryAppCursor_SetDrawFlag(BattleFactoryAppCursor *cursor, BOOL draw) +{ + Sprite_SetDrawFlag(cursor->sprite, draw); +} + +void ov105_02246080(BattleFactoryAppCursor *cursor) +{ + if (cursor->unk_03 == 1) { + return; + } + + if (gSystem.pressedKeys == 0) { + return; + } + + if (cursor->unk_01 == 2) { + if (JOY_NEW(PAD_KEY_LEFT)) { + if (cursor->currentSlot == 0) { + cursor->currentSlot = (cursor->unk_00 - 1); + } else { + cursor->currentSlot--; + } + } else if (JOY_NEW(PAD_KEY_RIGHT)) { + if (cursor->currentSlot == (cursor->unk_00 - 1)) { + cursor->currentSlot = 0; + } else { + cursor->currentSlot++; + } + } else if (JOY_NEW(PAD_KEY_DOWN)) { + if (cursor->currentSlot < (cursor->unk_10)) { + cursor->currentSlot = cursor->unk_10; + } else if (cursor->currentSlot == (cursor->unk_00 - 1)) { + cursor->currentSlot = 0; + } else { + cursor->currentSlot++; + } + } else if (JOY_NEW(PAD_KEY_UP)) { + if (cursor->currentSlot < (cursor->unk_10)) { + cursor->currentSlot = (cursor->unk_00 - 1); + } else { + cursor->currentSlot--; + } + } + } else { + u32 v1, v2; + if (cursor->unk_01 == 0) { + v1 = PAD_KEY_RIGHT; + v2 = PAD_KEY_LEFT; + } else { + v1 = PAD_KEY_DOWN; + v2 = PAD_KEY_UP; + } + + if (JOY_NEW(v1)) { + cursor->currentSlot++; + + if (cursor->currentSlot >= cursor->unk_00) { + cursor->currentSlot = 0; + } + } else if (JOY_NEW(v2)) { + if (cursor->currentSlot == 0) { + cursor->currentSlot = cursor->unk_00; + } + + cursor->currentSlot--; + } + } + + if (cursor->animIDs != NULL) { + Sprite_SetAnimNoRestart(cursor->sprite, cursor->animIDs[cursor->currentSlot]); + } + + VecFx32 position = *Sprite_GetPosition(cursor->sprite); + position.x = cursor->positions[cursor->currentSlot].x * FX32_ONE; + position.y = cursor->positions[cursor->currentSlot].y * FX32_ONE; + + Sprite_SetPosition(cursor->sprite, &position); +} + +u8 BattleFactoryAppCursor_GetCurrentSlot(BattleFactoryAppCursor *cursor) +{ + return cursor->currentSlot; +} + +void ov105_022461A4(BattleFactoryAppCursor *cursor, int param1) +{ + cursor->unk_03 = param1; + + if (param1 == 0) { + Sprite_SetAnimNoRestart(cursor->sprite, ANIM_ID_CURSOR); + } else { + Sprite_SetAnimNoRestart(cursor->sprite, ANIM_ID_CURSOR_SELECTED); + } +} + +void BattleFactoryAppCursor_UpdatePosition(BattleFactoryAppCursor *cursor, u8 slot) +{ + cursor->currentSlot = slot; + + if (cursor->animIDs != NULL) { + Sprite_SetAnimNoRestart(cursor->sprite, cursor->animIDs[cursor->currentSlot]); + } + + VecFx32 position = *Sprite_GetPosition(cursor->sprite); + + position.x = cursor->positions[cursor->currentSlot].x * FX32_ONE; + position.y = cursor->positions[cursor->currentSlot].y * FX32_ONE; + + Sprite_SetPosition(cursor->sprite, &position); +} diff --git a/src/applications/frontier/battle_factory/helpers.c b/src/applications/frontier/battle_factory/helpers.c new file mode 100644 index 0000000000..48a5107b3f --- /dev/null +++ b/src/applications/frontier/battle_factory/helpers.c @@ -0,0 +1,56 @@ +#include "applications/frontier/battle_factory/helpers.h" + +#include "nitro/hw/common/lcd.h" +#include + +#include "constants/graphics.h" + +#include "gx_layers.h" +#include "pokemon.h" +#include "pokemon_sprite.h" +#include "unk_0202419C.h" + +void BattleFactoryApp_Setup3D(void) +{ + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0, TRUE); + G2_SetBG0Priority(0); + + G3X_SetShading(GX_SHADING_TOON); + G3X_AntiAlias(TRUE); + G3X_AlphaTest(FALSE, 0); + G3X_AlphaBlend(TRUE); + G3X_EdgeMarking(FALSE); + G3X_SetFog(FALSE, GX_FOGBLEND_COLOR_ALPHA, GX_FOGSLOPE_0x8000, 0); + G3X_SetClearColor(GX_RGB(0, 0, 0), 0, G3X_DEPTH_MAX, 63, FALSE); + + G3_ViewPort(0, 0, HW_LCD_WIDTH - 1, HW_LCD_HEIGHT - 1); +} + +void BattleFactoryApp_UpdateMonGraphics(PokemonSpriteManager *spriteMan) +{ + G3_ResetG3X(); + + G3_MtxMode(GX_MTXMODE_PROJECTION); + G3_Identity(); + G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); + G3_Identity(); + + NNS_G3dGlbFlush(); + NNS_G2dSetupSoftwareSpriteCamera(); + + PokemonSpriteManager_DrawSprites(spriteMan); + G3_SwapBuffers(GX_SORTMODE_MANUAL, GX_BUFFERMODE_Z); +} + +PokemonSprite *BattleFactoryApp_CreateMonSprite(PokemonSpriteManager *spriteMan, int polygonID, Pokemon *mon, int x, int y, int z) +{ + PokemonSpriteTemplate template; + Pokemon_BuildSpriteTemplate(&template, mon, FACE_FRONT); + + return PokemonSpriteManager_CreateSprite(spriteMan, &template, x, y, z, polygonID, NULL, NULL); +} + +void BattleFactoryApp_FlipMonSprite(PokemonSprite *sprite, BOOL flipHorizontal) +{ + PokemonSprite_SetAttribute(sprite, MON_SPRITE_FLIP_H, flipHorizontal); +} diff --git a/src/applications/frontier/battle_factory/main.c b/src/applications/frontier/battle_factory/main.c new file mode 100644 index 0000000000..630f073b3b --- /dev/null +++ b/src/applications/frontier/battle_factory/main.c @@ -0,0 +1,3191 @@ +#include "applications/frontier/battle_factory/main.h" + +#include +#include + +#include "applications/frontier/battle_factory/cursor.h" +#include "applications/frontier/battle_factory/helpers.h" +#include "applications/frontier/battle_factory/panel_sprite.h" +#include "applications/frontier/battle_factory/pokeball_sprite.h" +#include "applications/frontier/battle_factory/sprite_manager.h" +#include "applications/frontier/battle_factory/windows.h" +#include "applications/pokemon_summary_screen/main.h" +#include "overlay104/ov104_0222DCE0.h" +#include "overlay104/ov104_0223A7F4.h" +#include "overlay104/struct_ov104_02234130.h" + +#include "bg_window.h" +#include "communication_information.h" +#include "communication_system.h" +#include "coordinates.h" +#include "dexmode_checker.h" +#include "font.h" +#include "g3d_pipeline.h" +#include "game_options.h" +#include "game_overlay.h" +#include "graphics.h" +#include "gx_layers.h" +#include "heap.h" +#include "menu.h" +#include "message.h" +#include "narc.h" +#include "narc_frontier_bg.h" +#include "overlay_manager.h" +#include "palette.h" +#include "party.h" +#include "pokemon.h" +#include "pokemon_sprite.h" +#include "render_oam.h" +#include "render_window.h" +#include "save_player.h" +#include "savedata.h" +#include "screen_fade.h" +#include "sound_playback.h" +#include "sprite.h" +#include "sprite_util.h" +#include "string_gf.h" +#include "string_list.h" +#include "string_template.h" +#include "system.h" +#include "text.h" +#include "trainer_info.h" +#include "unk_020363E8.h" +#include "unk_020393C8.h" +#include "unk_0209BA80.h" +#include "vram_transfer.h" + +#include "constdata/const_020F410C.h" +#include "res/text/bank/battle_factory_app.h" + +FS_EXTERN_OVERLAY(overlay104); + +typedef struct BattleFactoryApp { + ApplicationManager *appMan; + ApplicationManager *unk_04; + u8 subState; + u8 challengeType; + u8 unk_0A; + u8 unk_0B; + int unk_0C; + u8 unk_10; + u8 unk_11; + u8 unk_12; + u8 unk_13_0 : 1; + u8 unk_13_1 : 1; + u8 unk_13_2 : 1; + u8 unk_13_3 : 1; + u8 unk_13_4 : 1; + u8 unk_13_5 : 1; + u8 unk_13_6 : 1; + u8 unk_13_7 : 1; + u32 unk_14; + u8 unk_18; + u8 unk_19; + u8 unk_1A; + u8 unk_1B; + MessageLoader *msgLoader; + StringTemplate *strTemplate; + String *displayStr; + String *fmtStr; + String *menuStr[4]; + u16 unk_3C[8]; + BgConfig *bgConfig; + Window windows[10]; + MenuTemplate menuTemplate; + Menu *menu; + StringList strList[4]; + PaletteData *plttData; + G3DPipelineBuffers *g3dPipeline; + PokemonSpriteManager *monSpriteMan; + PokemonSprite *unk_12C[3]; + Options *options; + SaveData *saveData; + PokemonSummary *unk_140; + BattleFactoryAppSpriteManager spriteMan; + BattleFactoryAppPokeballSprite *unk_2F4[6]; + BattleFactoryAppCursor *unk_30C; + BattleFactoryAppCursor *unk_310; + BattleFactoryAppPanelSprite *unk_314; + BattleFactoryAppPanelSprite *unk_318; + Party *unk_31C; + Party *unk_320; + u16 unk_324[6]; + u16 *unk_330; + int unk_334; + NARC *narc; + u16 unk_33C[60]; + u16 unk_3B4; + u16 unk_3B6[2]; + u16 unk_3BA[2]; + u8 unk_3BE; + u8 unk_3BF; + u32 unk_3C0; +} BattleFactoryApp; + +static BOOL ov105_02241FF4(BattleFactoryApp *param0); +static BOOL ov105_022421F0(BattleFactoryApp *app); +static BOOL ov105_02242698(BattleFactoryApp *param0); +static void ov105_0224227C(BattleFactoryApp *param0); +static void ov105_0224246C(BattleFactoryApp *app); +static void ov105_022424A0(BattleFactoryApp *app); +static void ov105_022424CC(BattleFactoryApp *param0); +static void ov105_0224260C(BattleFactoryApp *app); +static BOOL ov105_022426E0(BattleFactoryApp *param0); +static void ov105_0224296C(BattleFactoryApp *param0); +static void ov105_02242A58(BattleFactoryApp *param0); +static void ov105_02242B54(BattleFactoryApp *param0); +static BOOL ov105_02242D04(BattleFactoryApp *param0); +static BOOL ov105_02243144(BattleFactoryApp *param0); +static void ov105_022433AC(BattleFactoryApp *param0); +static BOOL ov105_022434BC(BattleFactoryApp *param0); +static void ov105_02243738(BattleFactoryApp *param0); +static BOOL ov105_02243818(BattleFactoryApp *param0); +static void ov105_0224396C(BattleFactoryApp *param0); +static BOOL ov105_02243A3C(BattleFactoryApp *param0); +static void ov105_02243D20(BattleFactoryApp *param0); +static void ov105_02243D84(BattleFactoryApp *param0); +static void ov105_02243DE4(BattleFactoryApp *param0); +static BOOL ov105_02243E84(BattleFactoryApp *param0); +static void ov105_02243FDC(BattleFactoryApp *param0); +static BOOL ov105_0224400C(BattleFactoryApp *param0); +static BOOL ov105_0224435C(BattleFactoryApp *param0); +static BOOL ov105_0224439C(BattleFactoryApp *param0); +static BOOL ov105_022443DC(BattleFactoryApp *param0); +static BOOL ov105_02244424(BattleFactoryApp *param0); +static void FreeAssets(BattleFactoryApp *app); +static void ReInitApp(BattleFactoryApp *app); +static void InitGraphicsPlane(void); +static void LoadAssets(BattleFactoryApp *app); +static void ov105_022453F8(BattleFactoryApp *param0, u8 param1, u8 param2, int param3, const Party *param4); +static void InitSpriteManager(BattleFactoryApp *app); +static void LoadBackgrounds(BattleFactoryApp *app); +static void FreeBackgrounds(BgConfig *bgConfig); +static void VBlankCallback(void *data); +static void SetGXBanks(void); +static void InitBackgrounds(BgConfig *app); +static void ChangeState(BattleFactoryApp *app, int *state, int newState); +static BOOL ov105_02244780(BattleFactoryApp *param0); +static BOOL ov105_02244830(BattleFactoryApp *param0); +static void ov105_022448BC(BattleFactoryApp *param0); +static void ov105_022448F4(BattleFactoryApp *param0, u32 param1, u8 param2, u8 param3, u8 param4); +static void ov105_02244924(BattleFactoryApp *param0, u32 param1); +static void LoadMonSelectionBackground(BattleFactoryApp *app, enum BgLayer bgLayer); +static void LoadConveyorBackground(BattleFactoryApp *app, enum BgLayer bgLayer); +static void LoadAppStartupBackground(BattleFactoryApp *app, enum BgLayer bgLayer); +static void LoadWheelBackground(BattleFactoryApp *app, enum BgLayer bgLayer); +static void LoadPalette(void); +static void LoadSubScreenBackground(BattleFactoryApp *app, enum BgLayer bgLayer); +static void ReloadMonSelectionBackground(BattleFactoryApp *app, enum BgLayer bgLayer); +static void ReloadNoScreensBackground(BattleFactoryApp *app, enum BgLayer bgLayer); +static void LoadSelectionConfirmBackground(BattleFactoryApp *app, enum BgLayer bgLayer); +static u8 PrintMessageWithBg(BattleFactoryApp *app, Window *window, int entryID, u32 xOffset, u32 yOffset, u32 renderDelay, u8 fgColor, u8 shadowColor, u8 bgColor, u8 font); +static u8 PrintMessage(BattleFactoryApp *app, Window *window, int entryID, u32 xOffset, u32 yOffset, u32 renderDelay, u8 fgColor, u8 shadowColor, u8 bgColor, u8 font); +static u8 PrintMessageAndCopyToVRAM(BattleFactoryApp *app, int entryID); +static void InitMenu(BattleFactoryApp *app, Window *window, u8 numOptions); +static void AddStringToMenu(BattleFactoryApp *app, u8 strIndex, u8 listIndex, int entryID); +static void OpenMonOptionsMenu(BattleFactoryApp *app); +static void OpenYesNoMenu(BattleFactoryApp *app); +static void SetStringTemplateNumber(BattleFactoryApp *app, u32 idx, s32 num); +static void SetStringTemplateSpecies(BattleFactoryApp *app, u32 idx, BoxPokemon *boxMon); +static void PrintPlayersName(BattleFactoryApp *app, Window *window, u32 xOffset, u32 yOffset, u8 font); +static void PrintPartnersName(BattleFactoryApp *app, Window *window, u32 xOffset, u32 yOffset, u8 font); +static void PrintMonNameAndGender(BattleFactoryApp *app, Window *window, u8 slot, u32 xOffset, u32 yOffset, u8 fgColor, u8 shadowColor, u8 bgColor, u8 font, const Party *party); +static void PrintPartnersMonNameAndGender(BattleFactoryApp *app, Window *window, u32 xOffset, u32 yOffset, u8 fgColor, u8 shadowColor, u8 bgColor, u8 font, u16 species, u8 gender); +static void ov105_02245464(BattleFactoryApp *param0); +static BOOL ov105_022454F8(BattleFactoryApp *param0, u8 param1); +static u8 ov105_02245508(u8 param0); +static BOOL ov105_02245518(BattleFactoryApp *param0); +static void ov105_02245528(BattleFactoryApp *param0, u8 param1); +static u8 ov105_02245538(BattleFactoryApp *param0, u8 param1, u8 param2); +static u32 ov105_02245584(BattleFactoryApp *param0, u32 param1); +static void ov105_022455C4(BattleFactoryApp *app, u8 param1, Pokemon *mon, int x, int y, int param5); +static BOOL ov105_02245620(BattleFactoryApp *param0, u16 param1, u16 param2); +static void ov105_02245684(BattleFactoryApp *param0, u16 param1); +static void ov105_022456A8(BattleFactoryApp *param0, u16 param1, u16 param2); +static void ov105_02245884(BattleFactoryApp *param0, u16 param1, u16 param2); +static void ov105_022457C0(BattleFactoryApp *param0); +static BattleFactoryAppPokeballSprite *ov105_02245934(BattleFactoryApp *param0, int param1); +static BattleFactoryAppPanelSprite *ov105_022459B0(BattleFactoryApp *param0, u32 param1); +static BattleFactoryAppPanelSprite *ov105_02245A04(BattleFactoryApp *param0, u32 param1); +static void ov105_02245A30(BattleFactoryApp *param0); +static void ov105_02245A64(BattleFactoryApp *param0); +static void ov105_02245A98(Window *param0); + +static const u16 Unk_ov105_02246364[][2] = { + { 0x18, 0x70 }, + { 0x40, 0x70 }, + { 0x68, 0x70 }, + { 0x90, 0x70 }, + { 0xB8, 0x70 }, + { 0xE0, 0x70 } +}; + +static const u16 Unk_ov105_02246314[][2] = { + { 0x40, 0x70 }, + { 0x78, 0x70 }, + { 0xB0, 0x70 } +}; + +static const u16 Unk_ov105_022462EC[][2] = { + { 0x60, 0x70 }, + { 0x98, 0x70 } +}; + +static const u16 Unk_ov105_02246320[][2] = { + { 0x28, 0x70 }, + { 0x60, 0x70 }, + { 0x98, 0x70 }, + { 0xD0, 0x70 } +}; + +static const CoordinatesS16 Unk_ov105_02246394[] = { + { 0x18, 0x70 }, + { 0x40, 0x70 }, + { 0x68, 0x70 }, + { 0x90, 0x70 }, + { 0xB8, 0x70 }, + { 0xE0, 0x70 } +}; + +static const CoordinatesS16 Unk_ov105_02246340[] = { + { 0x40, 0x70 }, + { 0x78, 0x70 }, + { 0xB0, 0x70 }, + { 0xD4, 0x90 } +}; + +static const u8 Unk_ov105_022462D0[(NELEMS(Unk_ov105_02246340))] = { + 0x8, + 0x8, + 0x8, + 0x9 +}; + +static const CoordinatesS16 Unk_ov105_022462FC[] = { + { 0x60, 0x70 }, + { 0x98, 0x70 }, + { 0xD4, 0x90 } +}; + +static const u8 Unk_ov105_022462CC[(NELEMS(Unk_ov105_022462FC))] = { + 0x8, + 0x8, + 0x9 +}; + +static const CoordinatesS16 Unk_ov105_02246350[] = { + { 0x40, 0x70 }, + { 0x78, 0x70 }, + { 0xB0, 0x70 }, + { 0xD4, 0x90 }, + { 0xD4, 0xA0 } +}; + +static const u8 Unk_ov105_022462D4[(NELEMS(Unk_ov105_02246350))] = { + 0x8, + 0x8, + 0x8, + 0x9, + 0x9 +}; + +static const CoordinatesS16 Unk_ov105_0224637C[] = { + { 0x28, 0x70 }, + { 0x60, 0x70 }, + { 0x98, 0x70 }, + { 0xD0, 0x70 }, + { 0xD4, 0x90 }, + { 0xD4, 0xA0 } +}; + +static const u8 Unk_ov105_022462E4[(NELEMS(Unk_ov105_0224637C))] = { + 0x8, + 0x8, + 0x8, + 0x8, + 0x9, + 0x9 +}; + +static const CoordinatesS16 Unk_ov105_02246308[] = { + { 0xD4, 0x90 }, + { 0xD4, 0xA0 }, + { 0xD4, 0xB0 } +}; + +static const CoordinatesS16 Unk_ov105_022462F4[] = { + { 0xD4, 0x90 }, + { 0xD4, 0xA0 } +}; + +static const CoordinatesS16 bf_v_trade_final_csr_pos[] = { + { 212, 144 }, + { 212, 160 }, +}; + +static const u8 Unk_ov105_022462DC[] = { + 0x0, + 0x1, + 0x2, + 0x3, + 0x7, + 0x8 +}; + +int BattleFactoryApp_Init(ApplicationManager *appMan, int *state) +{ + Overlay_LoadByID(FS_OVERLAY_ID(overlay104), OVERLAY_LOAD_ASYNC); + InitGraphicsPlane(); + Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_BATTLE_FACTORY_APP, HEAP_SIZE_BATTLE_FACTORY_APP); + + BattleFactoryApp *app = ApplicationManager_NewData(appMan, sizeof(BattleFactoryApp), HEAP_ID_BATTLE_FACTORY_APP); + memset(app, 0, sizeof(BattleFactoryApp)); + + app->g3dPipeline = G3DPipeline_Init(HEAP_ID_BATTLE_FACTORY_APP, TEXTURE_VRAM_SIZE_256K, PALETTE_VRAM_SIZE_32K, BattleFactoryApp_Setup3D); + app->bgConfig = BgConfig_New(HEAP_ID_BATTLE_FACTORY_APP); + app->appMan = appMan; + + UnkStruct_ov104_02234130 *v2 = ApplicationManager_Args(appMan); + + app->saveData = v2->saveData; + app->challengeType = v2->unk_04; + app->unk_0A = v2->unk_05; + app->unk_0B = v2->unk_06; + app->unk_31C = v2->unk_08; + app->unk_320 = v2->unk_0C; + app->unk_330 = &v2->unk_10[0]; + app->options = SaveData_GetOptions(app->saveData); + app->unk_14 = (4 * 2); + + if (ov105_022454F8(app, 0) == 1) { + app->unk_12 = (NELEMS(Unk_ov105_02246394)); + } else { + if (BattleFactory_IsMultiplayerChallenge(app->challengeType) == TRUE) { + app->unk_12 = (NELEMS(Unk_ov105_022462EC)); + app->unk_1A = (NELEMS(Unk_ov105_022462FC)); + app->unk_1B = (NELEMS(Unk_ov105_0224637C)); + } else { + app->unk_12 = (NELEMS(Unk_ov105_02246314)); + app->unk_1A = (NELEMS(Unk_ov105_02246340)); + app->unk_1B = (NELEMS(Unk_ov105_02246350)); + } + } + + LoadAssets(app); + + if (BattleFactory_IsMultiplayerChallenge(app->challengeType) == TRUE) { + sub_0209BA80(app); + } + + *state = 0; + return TRUE; +} + +int BattleFactoryApp_Main(ApplicationManager *appMan, int *state) +{ + BattleFactoryApp *app = ApplicationManager_Data(appMan); + + if (app->unk_3B4 == 1) { + switch (*state) { + case 6: + case 7: + case 8: + case 9: + if (app->unk_13_6 == 0) { + ChangeState(app, state, 11); + } + break; + } + } + + switch (*state) { + case 0: + if (ov105_02241FF4(app) == 1) { + ChangeState(app, state, 1); + } + break; + case 2: + if (ov105_02242698(app) == 1) { + ChangeState(app, state, 1); + } else { + return 0; + } + case 1: + if (ov105_022421F0(app) == 1) { + if (ov105_022454F8(app, 0) == 1) { + ChangeState(app, state, 3); + } else { + ChangeState(app, state, 6); + } + } + break; + case 3: + ov105_022457C0(app); + + if (ov105_022426E0(app) == 1) { + if (app->unk_13_1 == 1) { + ChangeState(app, state, 2); + } else { + if (app->unk_11 == ov105_02245508(app->challengeType)) { + ChangeState(app, state, 4); + } else { + if (ov105_02245518(app) == 1) { + ChangeState(app, state, 13); + } else { + ChangeState(app, state, 3); + } + } + } + } + break; + case 4: + ov105_022457C0(app); + + if (ov105_02242D04(app) == 1) { + if (app->unk_11 == ov105_02245508(app->challengeType)) { + ChangeState(app, state, 13); + } else { + ChangeState(app, state, 5); + } + } + break; + case 5: + if (ov105_02243144(app) == 1) { + ChangeState(app, state, 3); + } + break; + case 6: + if (ov105_022434BC(app) == 1) { + if (app->unk_13_1 == 1) { + ChangeState(app, state, 2); + } else { + if (ov105_02245518(app) == 1) { + ov105_02245528(app, 0); + ChangeState(app, state, 7); + } else { + ChangeState(app, state, 10); + } + } + } + break; + case 7: + if (ov105_02243818(app) == 1) { + if (ov105_02245518(app) == 1) { + ov105_02245528(app, 0); + ChangeState(app, state, 6); + } else { + if (BattleFactory_IsMultiplayerChallenge(app->challengeType) == TRUE) { + app->unk_13_3 = 0; + ChangeState(app, state, 11); + } else { + ChangeState(app, state, 13); + } + } + } + break; + case 8: + if (ov105_02243A3C(app) == 1) { + if (ov105_02245518(app) == 1) { + ov105_02245528(app, 0); + ChangeState(app, state, 9); + } else { + if (app->unk_11 == 0) { + ChangeState(app, state, 10); + } else { + if (BattleFactory_IsMultiplayerChallenge(app->challengeType) == TRUE) { + ChangeState(app, state, 11); + } else { + ChangeState(app, state, 13); + } + } + } + } + break; + case 9: + if (ov105_02243E84(app) == 1) { + if (ov105_02245518(app) == 1) { + ov105_02245528(app, 0); + ChangeState(app, state, 8); + } else { + if (BattleFactory_IsMultiplayerChallenge(app->challengeType) == TRUE) { + app->unk_13_3 = 0; + ChangeState(app, state, 11); + } else { + ChangeState(app, state, 13); + } + } + } + break; + case 10: + if (ov105_0224400C(app) == 1) { + if (app->unk_11 == 0) { + ov105_022424CC(app); + ChangeState(app, state, 6); + } else { + ChangeState(app, state, 8); + } + } + break; + case 11: + if (ov105_0224435C(app) == 1) { + if (app->unk_3B4 == 1) { + ChangeState(app, state, 14); + } else { + ChangeState(app, state, 12); + } + } + break; + case 12: + if (ov105_0224439C(app) == 1) { + ChangeState(app, state, 13); + } + break; + case 13: + if (ov105_022443DC(app) == 1) { + return 1; + } + break; + case 14: + if (ov105_02244424(app) == 1) { + ChangeState(app, state, 12); + } + break; + } + + SpriteList_Update(app->spriteMan.spriteList); + BattleFactoryApp_UpdateMonGraphics(app->monSpriteMan); + + return 0; +} + +int BattleFactoryApp_Exit(ApplicationManager *appMan, int *state) +{ + int v0; + BattleFactoryApp *app = ApplicationManager_Data(appMan); + + if (ov105_022454F8(app, 0) == 1) { + for (v0 = 0; v0 < ov105_02245508(app->challengeType); v0++) { + app->unk_330[v0] = app->unk_324[v0]; + } + } else { + for (v0 = 0; v0 < 2; v0++) { + app->unk_330[v0] = app->unk_324[v0]; + } + + if (app->unk_13_3 == 0) { + app->unk_330[0] = 0xff; + app->unk_330[1] = 0xff; + } + } + + FreeAssets(app); + + ApplicationManager_FreeData(appMan); + SetVBlankCallback(NULL, NULL); + Heap_Destroy(HEAP_ID_BATTLE_FACTORY_APP); + Overlay_UnloadByID(FS_OVERLAY_ID(overlay104)); + + return TRUE; +} + +static BOOL ov105_02241FF4(BattleFactoryApp *param0) +{ + int v0; + const VecFx32 *v1; + + switch (param0->subState) { + case 0: + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + CommTool_ClearReceivedTempDataAllPlayers(); + CommTiming_StartSync(237); + } + + param0->subState++; + break; + case 1: + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + if (CommTiming_IsSyncState(237) == 1) { + CommTool_ClearReceivedTempDataAllPlayers(); + param0->subState++; + } + } else { + param0->subState++; + } + break; + case 2: + for (v0 = 0; v0 < param0->unk_12; v0++) { + v1 = BattleFactoryAppPokeballSprite_GetPosition(param0->unk_2F4[v0]); + ov105_02245F5C(param0->unk_2F4[v0]); + } + + Bg_SetOffset(param0->bgConfig, BG_LAYER_MAIN_2, 0, 33 * 8); + PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 1); + StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_IN, FADE_TYPE_BRIGHTNESS_IN, COLOR_BLACK, 6, 1 * 3, HEAP_ID_BATTLE_FACTORY_APP); + param0->subState++; + break; + case 3: + if (IsScreenFadeDone() == FALSE) { + break; + } + + Sound_PlayEffect(SEQ_SE_DP_ELEBETA2); + param0->unk_19 = 0; + param0->subState++; + break; + case 4: + if (ov105_02244780(param0) == 1) { + Sound_StopEffect(1554, 0); + Sound_PlayEffect(SEQ_SE_DP_KASYA); + + for (v0 = 0; v0 < param0->unk_12; v0++) { + BattleFactoryAppPokeballSprite_SetAnim(param0->unk_2F4[v0], 10); + } + + ov105_02244924(param0, 0); + + param0->unk_14 = (4 * 2); + param0->unk_19 = 0; + param0->subState++; + } + break; + case 5: + if (BattleFactoryAppPanelSprite_IsAnimated(param0->unk_314) == 1) { + break; + } + + ov105_02245A30(param0); + param0->unk_19 = 0; + param0->subState++; + break; + case 6: + if (param0->unk_19 == 0) { + ReloadMonSelectionBackground(param0, 3); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, 0); + ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 0), 21, 11); + PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 0); + PokemonSpriteManager_StartFadeAll(param0->monSpriteMan, 16, 0, 1, 0xffff); + } + + if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { + (void)0; + } + + param0->unk_19++; + + if (param0->unk_19 < 2) { + break; + } + + ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 0), 21, 11); + param0->unk_19 = 0; + ov105_02245A64(param0); + + return 1; + } + + return 0; +} + +static BOOL ov105_022421F0(BattleFactoryApp *app) +{ + switch (app->subState) { + case 0: + if (ov105_022454F8(app, 0) == 1) { + ov105_0224227C(app); + } else { + ov105_022424CC(app); + } + + if (BattleFactory_IsMultiplayerChallenge(app->challengeType) == TRUE) { + PrintPartnersName(app, &app->windows[1], 0, 0, 0); + } + + if (app->unk_13_4 == 1) { + StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_IN, FADE_TYPE_BRIGHTNESS_IN, COLOR_BLACK, 6, 1 * 3, HEAP_ID_BATTLE_FACTORY_APP); + } + + app->unk_13_4 = 1; + app->subState++; + break; + case 1: + if (IsScreenFadeDone() == TRUE) { + return TRUE; + } + break; + } + + return FALSE; +} + +static void ov105_0224227C(BattleFactoryApp *param0) +{ + int v0; + u8 v1 = ov104_0223AA50(param0->challengeType); + + ov105_02245528(param0, 0); + param0->unk_30C = BattleFactoryAppCursor_New(¶m0->spriteMan, param0->unk_12, param0->unk_12, 0, param0->unk_334, Unk_ov105_02246394, NULL); + PrintPlayersName(param0, ¶m0->windows[0], 0, 0, 0); + + for (v0 = 0; v0 < param0->unk_11; v0++) { + BattleFactoryAppPokeballSprite_SelectMon(param0->unk_2F4[param0->unk_324[v0]]); + BattleFactoryAppPokeballSprite_UpdatePalette(param0->unk_2F4[param0->unk_324[v0]], 0); + BattleFactoryAppPokeballSprite_SetAnim(param0->unk_2F4[param0->unk_324[v0]], 7); + PrintMonNameAndGender(param0, ¶m0->windows[2 + v0], param0->unk_324[v0], 0, 0, 15, 2, 0, 0, param0->unk_31C); + } + + PrintMonNameAndGender(param0, ¶m0->windows[2 + param0->unk_11], BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); + BattleFactoryApp_DrawMessageBox(¶m0->windows[5], Options_Frame(param0->options)); + SetStringTemplateNumber(param0, 0, param0->unk_11 + 1); + + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_ChoosePokemon); + + if (param0->unk_13_1 == 1) { + ov105_022461A4(param0->unk_30C, 1); + OpenMonOptionsMenu(param0); + + param0->unk_310 = BattleFactoryAppCursor_New(¶m0->spriteMan, NELEMS(Unk_ov105_02246308), NELEMS(Unk_ov105_02246308), 1, 0, Unk_ov105_02246308, NULL); + + if (param0->unk_18 != 0) { + for (v0 = 0; v0 < v1; v0++) { + Window_FillTilemap(¶m0->windows[8 + v0], 0); + + if (v0 < param0->unk_18) { + PrintPartnersMonNameAndGender(param0, ¶m0->windows[8 + v0], 0, 0, 15, 2, 0, 0, param0->unk_3B6[v0], param0->unk_3BA[v0]); + } + + Window_ScheduleCopyToVRAM(¶m0->windows[8 + v0]); + } + } + } + + return; +} + +static void ov105_0224246C(BattleFactoryApp *app) +{ + for (int i = 0; i < app->unk_12; i++) { + app->unk_2F4[i] = ov105_02245934(app, i); + BattleFactoryAppPokeballSprite_SetDrawFlag(app->unk_2F4[i], TRUE); + } +} + +static void ov105_022424A0(BattleFactoryApp *app) +{ + ov105_022455C4(app, 0, Party_GetPokemonBySlotIndex(app->unk_31C, app->unk_334), 120, 43, 0); +} + +static void ov105_022424CC(BattleFactoryApp *param0) +{ + int v0; + + ov105_02245528(param0, 0); + BattleFactoryApp_DrawMessageBox(¶m0->windows[5], Options_Frame(param0->options)); + + if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + param0->unk_30C = BattleFactoryAppCursor_New(¶m0->spriteMan, param0->unk_1A, NELEMS(Unk_ov105_02246340) - 1, 2, param0->unk_334, Unk_ov105_02246340, Unk_ov105_022462D0); + } else { + param0->unk_30C = BattleFactoryAppCursor_New(¶m0->spriteMan, param0->unk_1A, NELEMS(Unk_ov105_022462FC) - 1, 2, param0->unk_334, Unk_ov105_022462FC, Unk_ov105_022462CC); + } + + PrintPlayersName(param0, ¶m0->windows[0], 0, 0, 0); + PrintMonNameAndGender(param0, ¶m0->windows[2], BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); + BattleFactoryApp_DrawWindow(param0->bgConfig, ¶m0->windows[7]); + + param0->unk_10 = PrintMessageWithBg(param0, ¶m0->windows[7], BattleFactoryApp_Text_Cancel2, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); + Window_ScheduleCopyToVRAM(¶m0->windows[7]); + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_ChooseExchange); + + if (param0->unk_13_1 == 1) { + OpenMonOptionsMenu(param0); + param0->unk_310 = BattleFactoryAppCursor_New(¶m0->spriteMan, NELEMS(Unk_ov105_02246308), NELEMS(Unk_ov105_02246308), 1, 0, Unk_ov105_02246308, NULL); + } + + return; +} + +static void ov105_0224260C(BattleFactoryApp *app) +{ + for (int i = 0; i < app->unk_12; i++) { + app->unk_2F4[i] = ov105_02245934(app, i); + BattleFactoryAppPokeballSprite_SetDrawFlag(app->unk_2F4[i], TRUE); + + if (app->unk_13_2 == 0) { + BattleFactoryAppPokeballSprite_SelectMon(app->unk_2F4[i]); + BattleFactoryAppPokeballSprite_UpdatePalette(app->unk_2F4[i], 0); + BattleFactoryAppPokeballSprite_SetAnim(app->unk_2F4[i], ANIM_ID_BALL_STATIC); + } + } +} + +static void ov105_0224266C(BattleFactoryApp *app) +{ + ov105_022455C4(app, 0, Party_GetPokemonBySlotIndex(app->unk_31C, app->unk_334), 120, 43, 1); +} + +static BOOL ov105_02242698(BattleFactoryApp *param0) +{ + switch (param0->subState) { + case 0: + + if (ApplicationManager_Exec(param0->unk_04) == 1) { + param0->unk_334 = param0->unk_140->monIndex; + Heap_Free(param0->unk_140); + Heap_Free(param0->unk_04); + param0->unk_04 = NULL; + ReInitApp(param0); + param0->unk_13_6 = 0; + return 1; + } + break; + } + + return 0; +} + +static BOOL ov105_022426E0(BattleFactoryApp *param0) +{ + int v0; + u32 v1; + + switch (param0->subState) { + case 0: + if (param0->unk_13_1 == 0) { + param0->subState = 1; + } else { + param0->subState = 2; + } + + param0->unk_13_1 = 0; + break; + case 1: + ov105_02246080(param0->unk_30C); + + if (gSystem.pressedKeys & (PAD_KEY_LEFT | PAD_KEY_RIGHT)) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + ov105_022453F8(param0, param0->unk_11, BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, param0->unk_31C); + } + + if (gSystem.pressedKeys & PAD_BUTTON_A) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + ov105_022461A4(param0->unk_30C, 1); + OpenMonOptionsMenu(param0); + + param0->unk_310 = BattleFactoryAppCursor_New(¶m0->spriteMan, NELEMS(Unk_ov105_02246308), NELEMS(Unk_ov105_02246308), 1, 0, Unk_ov105_02246308, NULL); + param0->subState++; + } else if (gSystem.pressedKeys & PAD_BUTTON_B) { + if (param0->unk_11 > 0) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + ov105_0224296C(param0); + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + ov105_02245620(param0, 8, 0); + } + + return 1; + } + } + break; + case 2: + v1 = Menu_ProcessInput(param0->menu); + ov105_02246080(param0->unk_310); + + switch (v1) { + case 0xffffffff: + break; + case 0: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + param0->unk_13_6 = 1; + StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, HEAP_ID_BATTLE_FACTORY_APP); + param0->subState++; + break; + case 1: + Menu_Free(param0->menu, NULL); + + ov105_02245A98(param0->menuTemplate.window); + ov105_02242A58(param0); + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + ov105_02245620(param0, 8, 0); + } + + return 1; + case 3: + Menu_Free(param0->menu, NULL); + + ov105_02245A98(param0->menuTemplate.window); + ov105_02242B54(param0); + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + ov105_02245620(param0, 8, 0); + } + + return 1; + case 0xfffffffe: + case 2: + default: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + ov105_022461A4(param0->unk_30C, 0); + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + return 1; + } + break; + case 3: + if (IsScreenFadeDone() == TRUE) { + ov105_02245464(param0); + FreeAssets(param0); + param0->unk_04 = ApplicationManager_New(&gPokemonSummaryScreenApp, param0->unk_140, HEAP_ID_BATTLE_FACTORY_APP); + param0->unk_13_1 = 1; + return 1; + } + break; + case 4: + if (param0->unk_04 == NULL) { + return 1; + } + break; + case 5: + if (IsScreenFadeDone() == TRUE) { + param0->subState = 2; + } + break; + } + + return 0; +} + +static void ov105_0224296C(BattleFactoryApp *param0) +{ + Window_FillTilemap(¶m0->windows[2 + param0->unk_11], 0); + Window_ScheduleCopyToVRAM(¶m0->windows[2 + param0->unk_11]); + + param0->unk_11--; + Window_FillTilemap(¶m0->windows[2 + param0->unk_11], 0); + + PrintMonNameAndGender(param0, ¶m0->windows[2 + param0->unk_11], BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); + SetStringTemplateNumber(param0, 0, param0->unk_11 + 1); + + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_ChoosePokemon); + + BattleFactoryAppPokeballSprite_UnselectMon(param0->unk_2F4[param0->unk_324[param0->unk_11]]); + BattleFactoryAppPokeballSprite_UpdatePalette(param0->unk_2F4[param0->unk_324[param0->unk_11]], 1); + BattleFactoryAppPokeballSprite_SetAnim(param0->unk_2F4[param0->unk_324[param0->unk_11]], 6); + + param0->unk_324[param0->unk_11] = 0; + return; +} + +static void ov105_02242A58(BattleFactoryApp *param0) +{ + BattleFactoryAppPokeballSprite_SelectMon(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)]); + BattleFactoryAppPokeballSprite_UpdatePalette(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)], 0); + BattleFactoryAppPokeballSprite_SetAnim(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)], 7); + + param0->unk_324[param0->unk_11] = BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C); + param0->unk_11++; + + if (param0->unk_11 == ov105_02245508(param0->challengeType)) { + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + } else { + ov105_022461A4(param0->unk_30C, 0); + BattleFactoryAppCursor_Free(param0->unk_310); + + param0->unk_310 = NULL; + + PrintMonNameAndGender(param0, ¶m0->windows[2 + param0->unk_11], BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); + SetStringTemplateNumber(param0, 0, param0->unk_11 + 1); + + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_ChoosePokemon); + } + + return; +} + +static void ov105_02242B54(BattleFactoryApp *param0) +{ + u8 v0; + int v1; + + BattleFactoryAppPokeballSprite_UnselectMon(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)]); + BattleFactoryAppPokeballSprite_UpdatePalette(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)], 1); + BattleFactoryAppPokeballSprite_SetAnim(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)], 6); + + if (param0->unk_11 >= 2) { + if (param0->unk_324[0] == BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)) { + param0->unk_324[0] = param0->unk_324[1]; + PokemonSprite_Delete(param0->unk_12C[0]); + ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_31C, BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)), 120, 43, 0); + } + } + + param0->unk_11--; + param0->unk_324[param0->unk_11] = 0; + + ov105_022461A4(param0->unk_30C, 0); + BattleFactoryAppCursor_Free(param0->unk_310); + + param0->unk_310 = NULL; + v0 = ov105_02245508(param0->challengeType); + + for (v1 = 0; v1 < v0; v1++) { + Window_FillTilemap(¶m0->windows[2 + v1], 0); + } + + for (v1 = 0; v1 < param0->unk_11; v1++) { + PrintMonNameAndGender(param0, ¶m0->windows[2 + v1], param0->unk_324[v1], 0, 0, 15, 2, 0, 0, param0->unk_31C); + } + + PrintMonNameAndGender(param0, ¶m0->windows[2 + param0->unk_11], BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); + + for (v1 = 0; v1 < v0; v1++) { + Window_ScheduleCopyToVRAM(¶m0->windows[2 + v1]); + } + + SetStringTemplateNumber(param0, 0, param0->unk_11 + 1); + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_ChoosePokemon); + + return; +} + +static BOOL ov105_02242D04(BattleFactoryApp *param0) +{ + u8 v0; + u32 v1; + int v2; + int v3[3]; + + v0 = ov104_0223AA50(param0->challengeType); + + switch (param0->subState) { + case 0: + BattleFactoryAppCursor_SetDrawFlag(param0->unk_30C, 0); + param0->unk_13_5 = 1; + Window_ClearAndCopyToVRAM(¶m0->windows[1]); + Window_ClearAndCopyToVRAM(¶m0->windows[8]); + Window_ClearAndCopyToVRAM(¶m0->windows[9]); + + for (v2 = 0; v2 < param0->unk_11; v2++) { + Window_FillTilemap(¶m0->windows[2 + v2], 0); + Window_ScheduleCopyToVRAM(¶m0->windows[2 + v2]); + } + + Window_FillTilemap(¶m0->windows[0], 0); + Window_ScheduleCopyToVRAM(¶m0->windows[0]); + + ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 0), 21, 11); + PokemonSpriteManager_StartFadeAll(param0->monSpriteMan, 0, 16, 0, 0xffff); + + param0->unk_19 = 0; + param0->subState++; + break; + case 1: + param0->unk_19++; + + if (param0->unk_19 < 2) { + break; + } + + PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 1); + + ov105_02244924(param0, 1); + ov105_022448F4(param0, 3, ov105_02245538(param0, 0, 0), 21, 11); + ReloadNoScreensBackground(param0, 3); + param0->unk_19 = 0; + param0->subState++; + break; + case 2: + if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { + (void)0; + } + + if (BattleFactoryAppPanelSprite_IsAnimated(param0->unk_314) == 1) { + break; + } + + ov105_02245A30(param0); + PokemonSprite_Delete(param0->unk_12C[0]); + + v3[0] = 44; + v3[1] = 128; + v3[2] = 212; + + for (v2 = 0; v2 < v0; v2++) { + ov105_022455C4(param0, v2, Party_GetPokemonBySlotIndex(param0->unk_31C, param0->unk_324[v2]), v3[v2], 43, 0); + PokemonSprite_SetAttribute(param0->unk_12C[v2], MON_SPRITE_HIDE, 1); + } + + ov105_02244924(param0, 4); + param0->subState++; + break; + case 3: + if (BattleFactoryAppPanelSprite_IsAnimated(param0->unk_314) == 1) { + break; + } + + ov105_02245A30(param0); + + param0->unk_19 = 0; + param0->subState++; + break; + case 4: + if (param0->unk_19 == 0) { + LoadSelectionConfirmBackground(param0, 3); + + for (v2 = 0; v2 < v0; v2++) { + PokemonSprite_SetAttribute(param0->unk_12C[v2], MON_SPRITE_HIDE, 0); + } + + if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 32, 11); + } else { + ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 21, 11); + } + + PokemonSpriteManager_StartFadeAll(param0->monSpriteMan, 16, 0, 1, 0xffff); + } + + if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { + (void)0; + } + + param0->unk_19++; + + if (param0->unk_19 < 21) { + break; + } + + if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 1), 32, 11); + } else { + ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 1), 21, 11); + } + + param0->unk_13_5 = 0; + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + param0->unk_3BF = 1; + ov105_022457C0(param0); + } + + SetStringTemplateNumber(param0, 0, v0); + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_OkWithSelection); + OpenYesNoMenu(param0); + + param0->unk_310 = BattleFactoryAppCursor_New(¶m0->spriteMan, NELEMS(Unk_ov105_022462F4), NELEMS(Unk_ov105_022462F4), 1, 0, Unk_ov105_022462F4, NULL); + param0->unk_19 = 0; + param0->subState++; + break; + case 5: + v1 = Menu_ProcessInput(param0->menu); + ov105_02246080(param0->unk_310); + + switch (v1) { + case 0xffffffff: + break; + case 0: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + param0->subState++; + break; + case 0xfffffffe: + case 1: + default: + BattleFactoryAppCursor_SetDrawFlag(param0->unk_30C, 1); + Menu_Free(param0->menu, NULL); + + ov105_02245A98(param0->menuTemplate.window); + BattleFactoryAppCursor_Free(param0->unk_310); + + param0->unk_310 = NULL; + param0->unk_11--; + param0->unk_324[param0->unk_11] = 0; + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + ov105_02245620(param0, 8, 0); + } + + return 1; + } + break; + case 6: + if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + return 1; + } + + if (ov105_02245620(param0, 8, 0) == 1) { + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_PleaseWait); + + CommTool_ClearReceivedTempDataAllPlayers(); + CommTiming_StartSync(164); + param0->subState++; + } + break; + case 7: + if (CommTiming_IsSyncState(164) == 1) { + CommTool_ClearReceivedTempDataAllPlayers(); + return 1; + } + break; + } + + return 0; +} + +static BOOL ov105_02243144(BattleFactoryApp *param0) +{ + u8 v0; + int v1; + + v0 = ov104_0223AA50(param0->challengeType); + + switch (param0->subState) { + case 0: + param0->unk_13_5 = 1; + + Window_ClearAndCopyToVRAM(¶m0->windows[1]); + Window_ClearAndCopyToVRAM(¶m0->windows[8]); + Window_ClearAndCopyToVRAM(¶m0->windows[9]); + + if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 32, 11); + } else { + ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 21, 11); + } + + PokemonSpriteManager_StartFadeAll(param0->monSpriteMan, 0, 16, 0, 0xffff); + + param0->unk_19 = 0; + param0->subState++; + break; + case 1: + param0->unk_19++; + + if (param0->unk_19 < 2) { + break; + } + + for (v1 = 0; v1 < v0; v1++) { + PokemonSprite_Delete(param0->unk_12C[v1]); + } + + ov105_02244924(param0, 5); + + if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + ov105_022448F4(param0, 3, ov105_02245538(param0, 0, 0), 32, 11); + } else { + ov105_022448F4(param0, 3, ov105_02245538(param0, 0, 0), 21, 11); + } + + ReloadNoScreensBackground(param0, 3); + + param0->unk_19 = 0; + param0->subState++; + + break; + case 2: + if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { + (void)0; + } + + if (BattleFactoryAppPanelSprite_IsAnimated(param0->unk_314) == 1) { + break; + } + + ov105_02245A30(param0); + ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_31C, BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)), 120, 43, 0); + + PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 1); + ov105_02244924(param0, 0); + + param0->subState++; + break; + case 3: + if (BattleFactoryAppPanelSprite_IsAnimated(param0->unk_314) == 1) { + break; + } + + ov105_02245A30(param0); + param0->unk_19 = 0; + param0->subState++; + break; + case 4: + if (param0->unk_19 == 0) { + ReloadMonSelectionBackground(param0, 3); + PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 0); + ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 0), 21, 11); + PokemonSpriteManager_StartFadeAll(param0->monSpriteMan, 16, 0, 1, 0xffff); + } + + if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { + (void)0; + } + + param0->unk_19++; + + if (param0->unk_19 < 21) { + break; + } + + ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 0), 21, 11); + param0->unk_13_5 = 0; + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + param0->unk_3BF = 1; + ov105_022457C0(param0); + } + + ov105_022433AC(param0); + return 1; + } + + return 0; +} + +static void ov105_022433AC(BattleFactoryApp *param0) +{ + int v0; + u8 v1 = ov104_0223AA50(param0->challengeType); + + for (v0 = 0; v0 < param0->unk_11; v0++) { + PrintMonNameAndGender(param0, ¶m0->windows[2 + v0], param0->unk_324[v0], 0, 0, 15, 2, 0, 0, param0->unk_31C); + } + + PrintMonNameAndGender(param0, ¶m0->windows[2 + param0->unk_11], BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); + PrintPlayersName(param0, ¶m0->windows[0], 0, 0, 0); + ov105_022461A4(param0->unk_30C, 0); + BattleFactoryAppPokeballSprite_UnselectMon(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)]); + BattleFactoryAppPokeballSprite_UpdatePalette(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)], 1); + BattleFactoryAppPokeballSprite_SetAnim(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)], 6); + SetStringTemplateNumber(param0, 0, param0->unk_11 + 1); + + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_ChoosePokemon); + return; +} + +static BOOL ov105_022434BC(BattleFactoryApp *param0) +{ + int v0; + u32 v1; + + switch (param0->subState) { + case 0: + ov105_02245528(param0, 0); + + if (param0->unk_13_1 == 0) { + param0->subState = 1; + } else { + param0->subState = 2; + } + + param0->unk_13_1 = 0; + break; + case 1: + ov105_02246080(param0->unk_30C); + + if (gSystem.pressedKeys & (PAD_KEY_LEFT | PAD_KEY_RIGHT | PAD_KEY_UP | PAD_KEY_DOWN)) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + ov105_022453F8(param0, param0->unk_11, BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 1, param0->unk_31C); + } + + if (gSystem.pressedKeys & PAD_BUTTON_A) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + + if (BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C) == (param0->unk_1A - 1)) { + ov105_02245528(param0, 1); + return 1; + } else { + ov105_022461A4(param0->unk_30C, 1); + OpenMonOptionsMenu(param0); + + param0->unk_310 = BattleFactoryAppCursor_New(¶m0->spriteMan, NELEMS(Unk_ov105_02246308), NELEMS(Unk_ov105_02246308), 1, 0, Unk_ov105_02246308, NULL); + param0->subState++; + } + } else if (gSystem.pressedKeys & PAD_BUTTON_B) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + ov105_02245528(param0, 1); + return 1; + } + break; + case 2: + v1 = Menu_ProcessInput(param0->menu); + ov105_02246080(param0->unk_310); + + switch (v1) { + case 0xffffffff: + break; + case 0: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + param0->unk_13_6 = 1; + StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, HEAP_ID_BATTLE_FACTORY_APP); + param0->subState++; + break; + case 4: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + ov105_02243738(param0); + return 1; + case 0xfffffffe: + case 2: + default: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + ov105_022461A4(param0->unk_30C, 0); + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + BattleFactoryApp_DrawWindow(param0->bgConfig, ¶m0->windows[7]); + param0->unk_10 = PrintMessageWithBg(param0, ¶m0->windows[7], BattleFactoryApp_Text_Cancel2, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); + Window_ScheduleCopyToVRAM(¶m0->windows[7]); + param0->subState = 1; + break; + } + break; + case 3: + if (IsScreenFadeDone() == TRUE) { + ov105_02245464(param0); + FreeAssets(param0); + param0->unk_04 = ApplicationManager_New(&gPokemonSummaryScreenApp, param0->unk_140, HEAP_ID_BATTLE_FACTORY_APP); + param0->unk_13_1 = 1; + return 1; + } + break; + case 4: + if (param0->unk_04 == NULL) { + return 1; + } + break; + case 5: + if (IsScreenFadeDone() == TRUE) { + param0->subState = 2; + } + break; + } + + return 0; +} + +static void ov105_02243738(BattleFactoryApp *param0) +{ + BattleFactoryAppPokeballSprite_SelectMon(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)]); + BattleFactoryAppPokeballSprite_UpdatePalette(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)], 0); + BattleFactoryAppPokeballSprite_SetAnim(param0->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)], 6); + PrintMonNameAndGender(param0, ¶m0->windows[2 + param0->unk_11], BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); + + param0->unk_324[param0->unk_11] = BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C); + param0->unk_11++; + + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + + BattleFactoryAppCursor_Free(param0->unk_30C); + param0->unk_30C = NULL; + param0->unk_13_2 = 1; + + Window_FillTilemap(¶m0->windows[2], 0); + Window_ScheduleCopyToVRAM(¶m0->windows[2]); + + return; +} + +static BOOL ov105_02243818(BattleFactoryApp *param0) +{ + int v0, v1; + u32 v2; + + switch (param0->subState) { + case 0: + + Window_FillTilemap(¶m0->windows[2], 0); + Window_ScheduleCopyToVRAM(¶m0->windows[2 + param0->unk_11]); + PokemonSprite_Delete(param0->unk_12C[0]); + + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_CancelTrade); + + BattleFactoryAppCursor_SetDrawFlag(param0->unk_30C, 0); + ov105_022461A4(param0->unk_30C, 1); + OpenYesNoMenu(param0); + param0->unk_310 = BattleFactoryAppCursor_New(¶m0->spriteMan, NELEMS(Unk_ov105_022462F4), NELEMS(Unk_ov105_022462F4), 1, 0, Unk_ov105_022462F4, NULL); + param0->subState++; + break; + case 1: + v2 = Menu_ProcessInput(param0->menu); + ov105_02246080(param0->unk_310); + + switch (v2) { + case 0xffffffff: + break; + case 0: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + param0->unk_13_3 = 0; + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_PleaseWait); + } + + param0->subState++; + break; + case 0xfffffffe: + case 1: + default: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + ov105_0224396C(param0); + param0->subState++; + break; + } + break; + case 2: + return 1; + } + + return 0; +} + +static void ov105_0224396C(BattleFactoryApp *param0) +{ + BattleFactoryAppCursor_UpdatePosition(param0->unk_30C, 0); + PrintMonNameAndGender(param0, ¶m0->windows[2], BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); + ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_31C, BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C)), 120, 43, 1); + BattleFactoryAppCursor_SetDrawFlag(param0->unk_30C, 1); + ov105_022461A4(param0->unk_30C, 0); + ov105_02245528(param0, 1); + BattleFactoryApp_DrawWindow(param0->bgConfig, ¶m0->windows[7]); + + param0->unk_10 = PrintMessageWithBg(param0, ¶m0->windows[7], BattleFactoryApp_Text_Cancel2, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); + Window_ScheduleCopyToVRAM(¶m0->windows[7]); + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_ChooseExchange); + + return; +} + +static BOOL ov105_02243A3C(BattleFactoryApp *param0) +{ + int v0, v1; + u32 v2; + u8 v3; + + switch (param0->subState) { + case 0: + BattleFactoryApp_DrawWindow(param0->bgConfig, ¶m0->windows[7]); + + param0->unk_10 = PrintMessageWithBg(param0, ¶m0->windows[7], BattleFactoryApp_Text_Back, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); + param0->unk_10 = PrintMessage(param0, ¶m0->windows[7], BattleFactoryApp_Text_Cancel3, 1, 1 + 16, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); + + Window_ScheduleCopyToVRAM(¶m0->windows[7]); + + if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + param0->unk_30C = BattleFactoryAppCursor_New(¶m0->spriteMan, param0->unk_1B, NELEMS(Unk_ov105_02246350) - 2, 2, 0, Unk_ov105_02246350, Unk_ov105_022462D4); + } else { + param0->unk_30C = BattleFactoryAppCursor_New(¶m0->spriteMan, param0->unk_1B, NELEMS(Unk_ov105_0224637C) - 2, 2, 0, Unk_ov105_0224637C, Unk_ov105_022462E4); + } + + v3 = BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C); + + PrintMonNameAndGender(param0, ¶m0->windows[2], v3, 0, 0, 15, 2, 0, 0, param0->unk_320); + BattleFactoryApp_DrawMessageBox(¶m0->windows[5], Options_Frame(param0->options)); + + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_ChooseReceive); + param0->subState++; + + break; + case 1: + ov105_02246080(param0->unk_30C); + + if (gSystem.pressedKeys & (PAD_KEY_UP | PAD_KEY_DOWN)) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + ov105_022453F8(param0, 0, BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, param0->unk_320); + } + + if (gSystem.pressedKeys & (PAD_KEY_LEFT | PAD_KEY_RIGHT)) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + ov105_022453F8(param0, 0, BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C), 0, param0->unk_320); + } + + if (gSystem.pressedKeys & PAD_BUTTON_A) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + + if (BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C) == (param0->unk_1B - 1)) { + ov105_02245528(param0, 1); + return 1; + } else if (BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C) == (param0->unk_1B - 2)) { + ov105_02243D20(param0); + return 1; + } else { + ov105_022461A4(param0->unk_30C, 1); + OpenYesNoMenu(param0); + + param0->unk_310 = BattleFactoryAppCursor_New(¶m0->spriteMan, NELEMS(Unk_ov105_022462F4), NELEMS(Unk_ov105_022462F4), 1, 0, Unk_ov105_022462F4, NULL); + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_AcceptPokemon); + param0->subState++; + } + } else if (gSystem.pressedKeys & PAD_BUTTON_B) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + ov105_02245528(param0, 1); + return 1; + } + break; + case 2: + v2 = Menu_ProcessInput(param0->menu); + ov105_02246080(param0->unk_310); + + switch (v2) { + case 0xffffffff: + break; + + case 0: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + ov105_02243D84(param0); + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_PleaseWait); + } + + param0->subState++; + break; + case 0xfffffffe: + case 1: + default: + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + ov105_02243DE4(param0); + param0->subState = 1; + break; + } + break; + case 3: + return 1; + } + + return 0; +} + +static void ov105_02243D20(BattleFactoryApp *param0) +{ + BattleFactoryAppCursor_Free(param0->unk_30C); + + param0->unk_30C = NULL; + param0->unk_13_2 = 0; + + Window_FillTilemap(¶m0->windows[2], 0); + Window_ScheduleCopyToVRAM(¶m0->windows[2]); + PokemonSprite_Delete(param0->unk_12C[0]); + + Window_FillTilemap(¶m0->windows[7], 15); + Window_EraseMessageBox(¶m0->windows[7], 1); + Window_ClearAndScheduleCopyToVRAM(¶m0->windows[7]); + + param0->unk_11--; + param0->unk_324[0] = 0; + + return; +} + +static void ov105_02243D84(BattleFactoryApp *param0) +{ + param0->unk_13_3 = 1; + param0->unk_324[param0->unk_11] = BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C); + param0->unk_11++; + + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + BattleFactoryAppCursor_SetDrawFlag(param0->unk_30C, 0); + + Window_FillTilemap(¶m0->windows[2], 0); + Window_ScheduleCopyToVRAM(¶m0->windows[2]); + PokemonSprite_Delete(param0->unk_12C[0]); + + return; +} + +static void ov105_02243DE4(BattleFactoryApp *param0) +{ + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + ov105_022461A4(param0->unk_30C, 0); + BattleFactoryApp_DrawWindow(param0->bgConfig, ¶m0->windows[7]); + param0->unk_10 = PrintMessageWithBg(param0, ¶m0->windows[7], BattleFactoryApp_Text_Back, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); + param0->unk_10 = PrintMessage(param0, ¶m0->windows[7], BattleFactoryApp_Text_Cancel3, 1, 1 + 16, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); + BattleFactoryApp_DrawMessageBox(¶m0->windows[5], Options_Frame(param0->options)); + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_ChooseReceive); + Window_ScheduleCopyToVRAM(¶m0->windows[7]); +} + +static BOOL ov105_02243E84(BattleFactoryApp *param0) +{ + int v0, v1; + u32 v2; + + switch (param0->subState) { + case 0: + Window_FillTilemap(¶m0->windows[2], 0); + Window_ScheduleCopyToVRAM(¶m0->windows[2]); + PokemonSprite_Delete(param0->unk_12C[0]); + + BattleFactoryApp_DrawMessageBox(¶m0->windows[5], Options_Frame(param0->options)); + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_CancelTrade); + BattleFactoryAppCursor_SetDrawFlag(param0->unk_30C, 0); + + OpenYesNoMenu(param0); + param0->unk_310 = BattleFactoryAppCursor_New(¶m0->spriteMan, NELEMS(Unk_ov105_022462F4), NELEMS(Unk_ov105_022462F4), 1, 0, Unk_ov105_022462F4, NULL); + param0->subState++; + break; + + case 1: + v2 = Menu_ProcessInput(param0->menu); + ov105_02246080(param0->unk_310); + + switch (v2) { + case 0xffffffff: + break; + case 0: + Menu_Free(param0->menu, NULL); + + ov105_02245A98(param0->menuTemplate.window); + BattleFactoryAppCursor_Free(param0->unk_310); + + param0->unk_310 = NULL; + param0->unk_13_3 = 0; + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_PleaseWait); + } + + param0->subState++; + break; + case 0xfffffffe: + case 1: + default: + Menu_Free(param0->menu, NULL); + + BattleFactoryAppCursor_Free(param0->unk_30C); + param0->unk_30C = NULL; + + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + + ov105_02243FDC(param0); + param0->subState++; + break; + } + break; + case 2: + return 1; + } + + return 0; +} + +static void ov105_02243FDC(BattleFactoryApp *param0) +{ + ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_320, 0), 120, 43, 0); + ov105_02245528(param0, 1); + + return; +} + +static BOOL ov105_0224400C(BattleFactoryApp *param0) +{ + u8 v0; + int v1, v2, v3, v4; + VecFx32 v5; + const VecFx32 *v6; + + v0 = ov104_0223AA50(param0->challengeType); + + switch (param0->subState) { + case 0: + param0->unk_13_5 = 1; + + Window_ClearAndCopyToVRAM(¶m0->windows[1]); + Window_ClearAndCopyToVRAM(¶m0->windows[8]); + Window_ClearAndCopyToVRAM(¶m0->windows[9]); + + Window_FillTilemap(¶m0->windows[0], 0); + Window_ScheduleCopyToVRAM(¶m0->windows[0]); + + Window_EraseMessageBox(¶m0->windows[5], 1); + Window_ClearAndScheduleCopyToVRAM(¶m0->windows[5]); + + BattleFactoryApp_FreeWindows(param0->windows); + ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 0), 21, 11); + + PokemonSpriteManager_StartFadeAll(param0->monSpriteMan, 0, 16, 0, 0xffff); + + param0->unk_19 = 0; + param0->subState++; + break; + case 1: + param0->unk_19++; + + if (param0->unk_19 < 2) { + break; + } + + PokemonSprite_Delete(param0->unk_12C[0]); + + ov105_02244924(param0, 1); + ov105_022448F4(param0, 3, ov105_02245538(param0, 0, 0), 21, 11); + ReloadNoScreensBackground(param0, 3); + + param0->unk_19 = 0; + param0->subState++; + break; + case 2: + if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { + (void)0; + } + + if (BattleFactoryAppPanelSprite_IsAnimated(param0->unk_314) == 1) { + break; + } + + ov105_02245A30(param0); + LoadWheelBackground(param0, 1); + LoadConveyorBackground(param0, 2); + LoadAppStartupBackground(param0, 3); + + Bg_SetOffset(param0->bgConfig, BG_LAYER_MAIN_2, 0, param0->unk_0C); + Sound_PlayEffect(SEQ_SE_DP_ELEBETA2); + + param0->unk_19 = 0; + param0->subState++; + break; + case 3: + if (ov105_02244830(param0) == 1) { + Sound_StopEffect(1554, 0); + Sound_PlayEffect(SEQ_SE_DP_KASYA); + + param0->unk_14 = (4 * 2); + + for (v1 = 0; v1 < param0->unk_12; v1++) { + param0->unk_2F4[v1] = BattleFactoryAppPokeballSprite_Free(param0->unk_2F4[v1]); + param0->unk_2F4[v1] = NULL; + } + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + if (param0->unk_12 == (NELEMS(Unk_ov105_022462EC))) { + param0->unk_12 = (NELEMS(Unk_ov105_02246320)); + } else { + param0->unk_12 = (NELEMS(Unk_ov105_022462EC)); + } + } + + ov105_0224260C(param0); + + for (v1 = 0; v1 < param0->unk_12; v1++) { + ov105_02245F5C(param0->unk_2F4[v1]); + } + + Sound_PlayEffect(SEQ_SE_DP_ELEBETA2); + + param0->unk_19 = 0; + param0->subState++; + } + break; + case 4: + if (ov105_02244780(param0) == 1) { + Sound_StopEffect(1554, 0); + Sound_PlayEffect(SEQ_SE_DP_KASYA); + + for (v1 = 0; v1 < param0->unk_12; v1++) { + BattleFactoryAppPokeballSprite_SetAnim(param0->unk_2F4[v1], 10); + } + + param0->unk_14 = (4 * 2); + + ov105_02244924(param0, 0); + + param0->unk_19 = 0; + param0->subState++; + } + break; + case 5: + if (BattleFactoryAppPanelSprite_IsAnimated(param0->unk_314) == 1) { + break; + } + + ov105_02245A30(param0); + + param0->unk_19 = 0; + param0->subState++; + break; + case 6: + if (param0->unk_19 == 0) { + ReloadMonSelectionBackground(param0, 3); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, 0); + + if (param0->unk_13_2 == 0) { + ov105_0224266C(param0); + } else { + ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_320, 0), 120, 43, 0); + } + + PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 0); + PokemonSpriteManager_StartFadeAll(param0->monSpriteMan, 16, 0, 1, 0xffff); + + ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 21, 11); + } + + if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { + (void)0; + } + + param0->unk_19++; + + if (param0->unk_19 < 21) { + break; + } + + ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 1), 21, 11); + ov105_02245A64(param0); + + param0->unk_13_5 = 0; + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + param0->unk_3BF = 1; + ov105_022457C0(param0); + } + + param0->unk_19 = 0; + return 1; + } + + return 0; +} + +static BOOL ov105_0224435C(BattleFactoryApp *param0) +{ + switch (param0->subState) { + case 0: + if (ov105_02245620(param0, 10, param0->unk_13_3) == 1) { + param0->subState++; + } + break; + case 1: + if (param0->unk_3BE < 2) { + break; + } + + param0->unk_3BE = 0; + return 1; + } + + return 0; +} + +static BOOL ov105_0224439C(BattleFactoryApp *param0) +{ + int v0; + + switch (param0->subState) { + case 0: + param0->unk_10 = PrintMessageAndCopyToVRAM(param0, BattleFactoryApp_Text_PleaseWait2); + + CommTool_ClearReceivedTempDataAllPlayers(); + CommTiming_StartSync(165); + + param0->subState++; + + break; + case 1: + if (CommTiming_IsSyncState(165) == 1) { + CommTool_ClearReceivedTempDataAllPlayers(); + return 1; + } + break; + } + + return 0; +} + +static BOOL ov105_022443DC(BattleFactoryApp *param0) +{ + int v0; + + switch (param0->subState) { + case 0: + StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, HEAP_ID_BATTLE_FACTORY_APP); + param0->subState++; + break; + case 1: + if (IsScreenFadeDone() == TRUE) { + return 1; + } + break; + } + + return 0; +} + +static BOOL ov105_02244424(BattleFactoryApp *param0) +{ + int v0; + Pokemon *v1; + BoxPokemon *v2; + + switch (param0->subState) { + case 0: + + if (param0->unk_310 != NULL) { + Menu_Free(param0->menu, NULL); + ov105_02245A98(param0->menuTemplate.window); + BattleFactoryAppCursor_Free(param0->unk_310); + param0->unk_310 = NULL; + } + + BattleFrontier_SetPartnerInStrTemplate(param0->strTemplate, 0); + + v1 = Party_GetPokemonBySlotIndex(param0->unk_31C, 2 + param0->unk_324[0]); + v2 = Pokemon_GetBoxPokemon(v1); + + SetStringTemplateSpecies(param0, 1, v2); + + v1 = Party_GetPokemonBySlotIndex(param0->unk_320, param0->unk_324[1]); + v2 = Pokemon_GetBoxPokemon(v1); + + SetStringTemplateSpecies(param0, 2, v2); + BattleFactoryApp_DrawMessageBox(¶m0->windows[5], Options_Frame(param0->options)); + + param0->unk_10 = PrintMessageWithBg(param0, ¶m0->windows[5], BattleFactoryApp_Text_TradeOccurred, 1, 1, Options_TextFrameDelay(SaveData_GetOptions(param0->saveData)), 1, 2, 15, FONT_MESSAGE); + + Window_ScheduleCopyToVRAM(¶m0->windows[5]); + + param0->unk_19 = 80; + param0->subState++; + + break; + case 1: + if (Text_IsPrinterActive(param0->unk_10) == 0) { + param0->unk_19 = 0; + return 1; + } + + break; + } + + return 0; +} + +static void VBlankCallback(void *data) +{ + BattleFactoryApp *app = data; + + if (app->unk_04 != NULL) { + return; + } + + PokemonSpriteManager_UpdateCharAndPltt(app->monSpriteMan); + + if (app->plttData != NULL) { + PaletteData_CommitFadedBuffers(app->plttData); + } + + Bg_RunScheduledUpdates(app->bgConfig); + VramTransfer_Process(); + RenderOam_Transfer(); + + OS_SetIrqCheckFlag(OS_IE_V_BLANK); +} + +static void SetGXBanks(void) +{ + GXBanks banks = { + GX_VRAM_BG_128_C, + GX_VRAM_BGEXTPLTT_NONE, + GX_VRAM_SUB_BG_32_H, + GX_VRAM_SUB_BGEXTPLTT_NONE, + GX_VRAM_OBJ_64_E, + GX_VRAM_OBJEXTPLTT_NONE, + GX_VRAM_SUB_OBJ_16_I, + GX_VRAM_SUB_OBJEXTPLTT_NONE, + GX_VRAM_TEX_01_AB, + GX_VRAM_TEXPLTT_01_FG + }; + + GXLayers_SetBanks(&banks); +} + +static void InitBackgrounds(BgConfig *app) +{ + GraphicsModes graphicsModes = { + GX_DISPMODE_GRAPHICS, + GX_BGMODE_0, + GX_BGMODE_0, + GX_BG0_AS_3D + }; + + SetAllGraphicsModes(&graphicsModes); + + BgTemplate mainBgTemplate = { + .x = 0, + .y = 0, + .bufferSize = 0x800, + .baseTile = 0, + .screenSize = BG_SCREEN_SIZE_256x256, + .colorMode = GX_BG_COLORMODE_16, + .screenBase = GX_BG_SCRBASE_0x0000, + .charBase = GX_BG_CHARBASE_0x04000, + .bgExtPltt = GX_BG_EXTPLTT_01, + .priority = 1, + .areaOver = 0, + .mosaic = FALSE, + }; + + Bg_InitFromTemplate(app, BG_LAYER_MAIN_1, &mainBgTemplate, BG_TYPE_STATIC); + Bg_ClearTilesRange(BG_LAYER_MAIN_1, 32, 0, HEAP_ID_BATTLE_FACTORY_APP); + Bg_ClearTilemap(app, BG_LAYER_MAIN_1); + + BgTemplate mainBgTemplate2 = { + .x = 0, + .y = 0, + .bufferSize = 0x800, + .baseTile = 0, + .screenSize = BG_SCREEN_SIZE_256x256, + .colorMode = GX_BG_COLORMODE_16, + .screenBase = GX_BG_SCRBASE_0x1800, + .charBase = GX_BG_CHARBASE_0x0c000, + .bgExtPltt = GX_BG_EXTPLTT_01, + .priority = 2, + .areaOver = 0, + .mosaic = FALSE, + }; + + Bg_InitFromTemplate(app, BG_LAYER_MAIN_2, &mainBgTemplate2, BG_TYPE_STATIC); + Bg_ClearTilemap(app, BG_LAYER_MAIN_2); + + BgTemplate mainBgTemplate3 = { + .x = 0, + .y = 0, + .bufferSize = 0x800, + .baseTile = 0, + .screenSize = BG_SCREEN_SIZE_256x256, + .colorMode = GX_BG_COLORMODE_16, + .screenBase = GX_BG_SCRBASE_0x2800, + .charBase = GX_BG_CHARBASE_0x0c000, + .bgExtPltt = GX_BG_EXTPLTT_01, + .priority = 3, + .areaOver = 0, + .mosaic = FALSE, + }; + + Bg_InitFromTemplate(app, BG_LAYER_MAIN_3, &mainBgTemplate3, BG_TYPE_STATIC); + Bg_ClearTilemap(app, BG_LAYER_MAIN_3); + + BgTemplate subBgTemplate = { + .x = 0, + .y = 0, + .bufferSize = 0x800, + .baseTile = 0, + .screenSize = BG_SCREEN_SIZE_256x256, + .colorMode = GX_BG_COLORMODE_16, + .screenBase = GX_BG_SCRBASE_0x3800, + .charBase = GX_BG_CHARBASE_0x10000, + .bgExtPltt = GX_BG_EXTPLTT_01, + .priority = 0, + .areaOver = 0, + .mosaic = FALSE, + }; + + Bg_InitFromTemplate(app, BG_LAYER_SUB_0, &subBgTemplate, BG_TYPE_STATIC); + Bg_ClearTilemap(app, BG_LAYER_SUB_0); + + G2_SetBG0Priority(0); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0, TRUE); +} + +static void LoadBackgrounds(BattleFactoryApp *app) +{ + SetGXBanks(); + InitBackgrounds(app->bgConfig); + + app->plttData = PaletteData_New(HEAP_ID_BATTLE_FACTORY_APP); + + PaletteData_AllocBuffer(app->plttData, PLTTBUF_MAIN_OBJ, PALETTE_SIZE_BYTES * SLOTS_PER_PALETTE, HEAP_ID_BATTLE_FACTORY_APP); + PaletteData_AllocBuffer(app->plttData, PLTTBUF_MAIN_BG, PALETTE_SIZE_BYTES * SLOTS_PER_PALETTE, HEAP_ID_BATTLE_FACTORY_APP); + + LoadPalette(); + + if (app->unk_13_4 == 0) { + LoadWheelBackground(app, BG_LAYER_MAIN_1); + LoadConveyorBackground(app, BG_LAYER_MAIN_2); + LoadAppStartupBackground(app, BG_LAYER_MAIN_3); + + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, TRUE); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG2, TRUE); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG3, TRUE); + } else { + LoadMonSelectionBackground(app, BG_LAYER_MAIN_3); + LoadConveyorBackground(app, BG_LAYER_MAIN_2); + + Bg_SetOffset(app->bgConfig, BG_LAYER_MAIN_2, 0, app->unk_0C); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG3, TRUE); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG2, TRUE); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, TRUE); + } + + LoadSubScreenBackground(app, BG_LAYER_SUB_0); +} + +static void InitSpriteManager(BattleFactoryApp *app) +{ + BattleFactoryApp_InitSpriteManager(&app->spriteMan); +} + +static void FreeBackgrounds(BgConfig *bgConfig) +{ + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_BG2 | GX_PLANEMASK_BG3 | GX_PLANEMASK_OBJ, FALSE); + GXLayers_EngineBToggleLayers(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_BG2 | GX_PLANEMASK_BG3 | GX_PLANEMASK_OBJ, FALSE); + + Bg_FreeTilemapBuffer(bgConfig, BG_LAYER_MAIN_3); + Bg_FreeTilemapBuffer(bgConfig, BG_LAYER_MAIN_2); + Bg_FreeTilemapBuffer(bgConfig, BG_LAYER_MAIN_1); + Bg_FreeTilemapBuffer(bgConfig, BG_LAYER_SUB_0); + Heap_Free(bgConfig); +} + +static void ChangeState(BattleFactoryApp *app, int *state, int newState) +{ + app->subState = 0; + *state = newState; +} + +static BOOL ov105_02244780(BattleFactoryApp *param0) +{ + int v0, v1, v2, v3; + const VecFx32 *v4; + + v3 = 0; + + Bg_SetOffset(param0->bgConfig, BG_LAYER_MAIN_2, 1, 8); + param0->unk_0C = Bg_GetXOffset(param0->bgConfig, 2); + + for (v0 = 0; v0 < param0->unk_12; v0++) { + v4 = BattleFactoryAppPokeballSprite_GetPosition(param0->unk_2F4[v0]); + + if (((v4->x / FX32_ONE) - 8) <= BattleFactoryAppPokeballSprite_GetX(param0->unk_2F4[v0])) { + v1 = BattleFactoryAppPokeballSprite_GetX(param0->unk_2F4[v0]); + v2 = BattleFactoryAppPokeballSprite_GetY(param0->unk_2F4[v0]); + BattleFactoryAppPokeballSprite_SetPosition(param0->unk_2F4[v0], v1, v2); + v3 = 1; + } else { + BattleFactoryAppPokeballSprite_SetAndGetPosition(param0->unk_2F4[v0], -8, 0); + } + } + + ov105_022448BC(param0); + + if (v3 == 1) { + return 1; + } + + return 0; +} + +static BOOL ov105_02244830(BattleFactoryApp *param0) +{ + int v0, v1, v2, v3; + const VecFx32 *v4; + + v3 = 0; + + Bg_SetOffset(param0->bgConfig, BG_LAYER_MAIN_2, 1, 8); + param0->unk_0C = Bg_GetXOffset(param0->bgConfig, 2); + + for (v0 = 0; v0 < param0->unk_12; v0++) { + v4 = BattleFactoryAppPokeballSprite_GetPosition(param0->unk_2F4[v0]); + + if (((v4->x / FX32_ONE) - 8) < -24) { + BattleFactoryAppPokeballSprite_SetDrawFlag(param0->unk_2F4[v0], 0); + v3++; + } else { + BattleFactoryAppPokeballSprite_SetAndGetPosition(param0->unk_2F4[v0], -8, 0); + } + } + + ov105_022448BC(param0); + + if (v3 == param0->unk_12) { + return 1; + } + + return 0; +} + +static void ov105_022448BC(BattleFactoryApp *param0) +{ + if ((param0->unk_14 % 4) == 0) { + if ((param0->unk_14 / 4) >= 4) { + param0->unk_14 = 0; + } + + ov105_022448F4(param0, 1, (param0->unk_14 / 4) + 6, 32, 32); + } + + param0->unk_14++; + return; +} + +static void ov105_022448F4(BattleFactoryApp *param0, u32 param1, u8 param2, u8 param3, u8 param4) +{ + Bg_ChangeTilemapRectPalette(param0->bgConfig, param1, 0, 0, param3, param4, param2); + Bg_ScheduleTilemapTransfer(param0->bgConfig, param1); + + return; +} + +static void ov105_02244924(BattleFactoryApp *param0, u32 param1) +{ + u32 v0; + + switch (param1) { + case 0: + Sound_PlayEffect(SEQ_SE_DP_OPEN2); + v0 = 2; + break; + case 1: + Sound_PlayEffect(SEQ_SE_DP_CLOSE2); + v0 = 3; + break; + case 4: + Sound_PlayEffect(SEQ_SE_DP_OPEN2); + v0 = 2; + break; + case 5: + Sound_PlayEffect(SEQ_SE_DP_CLOSE2); + v0 = 3; + break; + } + + param0->unk_314 = ov105_022459B0(param0, ov105_02245584(param0, param1)); + + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + param0->unk_318 = ov105_02245A04(param0, v0); + } + + return; +} + +static void LoadMonSelectionBackground(BattleFactoryApp *app, enum BgLayer bgLayer) +{ + Graphics_LoadTilesToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_TILES, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + + if (!BattleFactory_IsMultiplayerChallenge(app->challengeType)) { + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_MON_SELECTION_TILEMAP, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + } else { + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_MULTI_MON_SELECTION_TILEMAP, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + } +} + +static void LoadAppStartupBackground(BattleFactoryApp *app, enum BgLayer bgLayer) +{ + Graphics_LoadTilesToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_TILES, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_NO_SCREENS_TILEMAP, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); +} + +static void LoadConveyorBackground(BattleFactoryApp *app, enum BgLayer bgLayer) +{ + Graphics_LoadTilesToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_TILES, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_CONVEYOR_TILEMAP, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); +} + +static void LoadWheelBackground(BattleFactoryApp *app, enum BgLayer bgLayer) +{ + Graphics_LoadTilesToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_TILES, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_WHEEL_TILEMAP, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + Bg_SetPriority(BG_LAYER_MAIN_1, 2); +} + +static void LoadPalette(void) +{ + NNSG2dPaletteData *plttData; + void *pltt = Graphics_GetPlttData(NARC_INDEX_RESOURCE__ENG__FRONTIER_GRAPHIC__FRONTIER_BG, BATTLE_FACTORY_APP_PLTT, &plttData, HEAP_ID_BATTLE_FACTORY_APP); + + DC_FlushRange(plttData->pRawData, PALETTE_SIZE_BYTES * 11); + GX_LoadBGPltt(plttData->pRawData, 0, PALETTE_SIZE_BYTES * 11); + Heap_Free(pltt); +} + +static void LoadSubScreenBackground(BattleFactoryApp *app, enum BgLayer bgLayer) +{ + Graphics_LoadTilesToBgLayerFromOpenNARC(app->narc, BATTLE_FRONTIER_APP_SUB_SCREEN_TILES, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FRONTIER_APP_SUB_SCREEN_TILEMAP, app->bgConfig, bgLayer, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + Graphics_LoadPaletteFromOpenNARC(app->narc, BATTLE_FRONTIER_APP_SUB_SCREEN_PLTT, PAL_LOAD_SUB_BG, 0, PALETTE_SIZE_BYTES, HEAP_ID_BATTLE_FACTORY_APP); +} + +static void ReloadMonSelectionBackground(BattleFactoryApp *app, enum BgLayer bgLayer) +{ + if (!BattleFactory_IsMultiplayerChallenge(app->challengeType)) { + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_MON_SELECTION_TILEMAP, app->bgConfig, BG_LAYER_MAIN_3, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + } else { + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_MULTI_MON_SELECTION_TILEMAP, app->bgConfig, BG_LAYER_MAIN_3, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + } +} + +static void ReloadNoScreensBackground(BattleFactoryApp *app, enum BgLayer bgLayer) +{ + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_NO_SCREENS_TILEMAP, app->bgConfig, BG_LAYER_MAIN_3, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); +} + +static void LoadSelectionConfirmBackground(BattleFactoryApp *app, enum BgLayer bgLayer) +{ + if (!BattleFactory_IsMultiplayerChallenge(app->challengeType)) { + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_SUMMARY_TILEMAP, app->bgConfig, BG_LAYER_MAIN_3, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + } else { + Graphics_LoadTilemapToBgLayerFromOpenNARC(app->narc, BATTLE_FACTORY_APP_MULTI_SUMMARY_TILEMAP, app->bgConfig, BG_LAYER_MAIN_3, 0, 0, TRUE, HEAP_ID_BATTLE_FACTORY_APP); + } +} + +static u8 PrintMessageWithBg(BattleFactoryApp *app, Window *window, int entryID, u32 xOffset, u32 yOffset, u32 renderDelay, u8 fgColor, u8 shadowColor, u8 bgColor, u8 font) +{ + Window_FillTilemap(window, bgColor); + MessageLoader_GetString(app->msgLoader, entryID, app->fmtStr); + StringTemplate_Format(app->strTemplate, app->displayStr, app->fmtStr); + + return Text_AddPrinterWithParamsAndColor(window, font, app->displayStr, xOffset, yOffset, renderDelay, TEXT_COLOR(fgColor, shadowColor, bgColor), NULL); +} + +static u8 PrintMessage(BattleFactoryApp *app, Window *window, int entryID, u32 xOffset, u32 yOffset, u32 renderDelay, u8 fgColor, u8 shadowColor, u8 bgColor, u8 font) +{ + MessageLoader_GetString(app->msgLoader, entryID, app->fmtStr); + StringTemplate_Format(app->strTemplate, app->displayStr, app->fmtStr); + + return Text_AddPrinterWithParamsAndColor(window, font, app->displayStr, xOffset, yOffset, renderDelay, TEXT_COLOR(fgColor, shadowColor, bgColor), NULL); +} + +static u8 PrintMessageAndCopyToVRAM(BattleFactoryApp *app, int entryID) +{ + u8 printerID = PrintMessageWithBg(app, &app->windows[5], entryID, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_MESSAGE); + Window_ScheduleCopyToVRAM(&app->windows[5]); + + return printerID; +} + +static void InitMenu(BattleFactoryApp *app, Window *window, u8 numOptions) +{ + for (int i = 0; i < 4; i++) { + app->strList[i].entry = NULL; + app->strList[i].index = 0; + } + + app->menuTemplate.choices = app->strList; + app->menuTemplate.window = window; + app->menuTemplate.fontID = FONT_SYSTEM; + app->menuTemplate.xSize = 1; + app->menuTemplate.ySize = numOptions; + app->menuTemplate.lineSpacing = 0; + app->menuTemplate.suppressCursor = TRUE; + app->menuTemplate.loopAround = TRUE; +} + +static void AddStringToMenu(BattleFactoryApp *app, u8 strIndex, u8 listIndex, int entryID) +{ + MessageLoader_GetString(app->msgLoader, entryID, app->menuStr[strIndex]); + + app->strList[strIndex].entry = app->menuStr[strIndex]; + app->strList[strIndex].index = listIndex; +} + +static void OpenMonOptionsMenu(BattleFactoryApp *app) +{ + BattleFactoryApp_DrawWindow(app->bgConfig, &app->windows[7]); + InitMenu(app, &app->windows[7], NELEMS(Unk_ov105_02246308)); + AddStringToMenu(app, 0, 0, BattleFactoryApp_Text_Summary); + + if (ov105_022454F8(app, 0) == 1) { + if (BattleFactoryAppPokeballSprite_IsSelected(app->unk_2F4[BattleFactoryAppCursor_GetCurrentSlot(app->unk_30C)]) == 0) { + AddStringToMenu(app, 1, 1, BattleFactoryApp_Text_Rent); + } else { + AddStringToMenu(app, 1, 3, BattleFactoryApp_Text_Remove); + } + } else { + AddStringToMenu(app, 1, 4, BattleFactoryApp_Text_Exchange); + } + + AddStringToMenu(app, 2, 2, BattleFactoryApp_Text_Cancel); + app->menu = Menu_NewAndCopyToVRAM(&app->menuTemplate, 0, 0, 0, HEAP_ID_BATTLE_FACTORY_APP, PAD_BUTTON_B); +} + +static void OpenYesNoMenu(BattleFactoryApp *app) +{ + BattleFactoryApp_DrawWindow(app->bgConfig, &app->windows[7]); + InitMenu(app, &app->windows[7], NELEMS(Unk_ov105_022462F4)); + AddStringToMenu(app, 0, 0, BattleFactoryApp_Text_Yes); + AddStringToMenu(app, 1, 1, BattleFactoryApp_Text_No); + + app->menu = Menu_NewAndCopyToVRAM(&app->menuTemplate, 0, 0, 0, HEAP_ID_BATTLE_FACTORY_APP, PAD_BUTTON_B); +} + +static void SetStringTemplateNumber(BattleFactoryApp *app, u32 idx, s32 num) +{ + StringTemplate_SetNumber(app->strTemplate, idx, num, 1, PADDING_MODE_NONE, CHARSET_MODE_EN); +} + +static void SetStringTemplateSpecies(BattleFactoryApp *app, u32 idx, BoxPokemon *boxMon) +{ + StringTemplate_SetSpeciesName(app->strTemplate, idx, boxMon); +} + +static void PrintPlayersName(BattleFactoryApp *app, Window *window, u32 xOffset, u32 yOffset, u8 font) +{ + const TrainerInfo *trainerInfo = SaveData_GetTrainerInfo(app->saveData); + String *name = String_Init(TRAINER_NAME_LEN + 1, HEAP_ID_BATTLE_FACTORY_APP); + + Window_FillTilemap(window, 0); + String_CopyChars(name, TrainerInfo_Name(trainerInfo)); + + TextColor color; + if (TrainerInfo_Gender(trainerInfo) == GENDER_MALE) { + color = TEXT_COLOR(7, 8, 0); + } else { + color = TEXT_COLOR(3, 4, 0); + } + + Text_AddPrinterWithParamsAndColor(window, font, name, xOffset, yOffset, TEXT_SPEED_NO_TRANSFER, color, NULL); + String_Free(name); + Window_ScheduleCopyToVRAM(window); +} + +static void PrintPartnersName(BattleFactoryApp *app, Window *window, u32 xOffset, u32 yOffset, u8 font) +{ + TrainerInfo *trainerInfo = CommInfo_TrainerInfo(1 - CommSys_CurNetId()); + String *name = String_Init(TRAINER_NAME_LEN + 1, HEAP_ID_BATTLE_FACTORY_APP); + + Window_FillTilemap(window, 0); + TrainerInfo_NameString(trainerInfo, name); + + TextColor color; + if (TrainerInfo_Gender(trainerInfo) == 0) { + color = TEXT_COLOR(7, 8, 0); + } else { + color = TEXT_COLOR(3, 4, 0); + } + + Text_AddPrinterWithParamsAndColor(window, font, name, xOffset, yOffset, TEXT_SPEED_NO_TRANSFER, color, NULL); + String_Free(name); + Window_ScheduleCopyToVRAM(window); +} + +static void PrintMonNameAndGender(BattleFactoryApp *app, Window *window, u8 slot, u32 xOffset, u32 yOffset, u8 fgColor, u8 shadowColor, u8 bgColor, u8 font, const Party *party) +{ + u16 monNameBuf[MON_NAME_LEN + 1]; + + Pokemon *mon = Party_GetPokemonBySlotIndex(party, slot); + Pokemon_GetValue(mon, MON_DATA_SPECIES_NAME, monNameBuf); + Window_FillTilemap(window, bgColor); + + String *displayStr = String_Init(MON_NAME_LEN + 1, HEAP_ID_BATTLE_FACTORY_APP); + String_CopyChars(displayStr, monNameBuf); + Text_AddPrinterWithParamsAndColor(window, font, displayStr, xOffset, yOffset, TEXT_SPEED_NO_TRANSFER, TEXT_COLOR(fgColor, shadowColor, bgColor), NULL); + + u8 width = Window_GetWidth(window) - 1; + u32 gender = Pokemon_GetValue(mon, MON_DATA_GENDER, NULL); + u32 symbol = gender == GENDER_MALE ? BattleFactoryApp_Text_MaleSymbol : BattleFactoryApp_Text_FemaleSymbol; + TextColor color = gender == GENDER_MALE ? TEXT_COLOR(7, 8, 0) : TEXT_COLOR(3, 4, 0); + + String_Clear(displayStr); + + if (gender != GENDER_NONE) { + MessageLoader_GetString(app->msgLoader, symbol, displayStr); + Text_AddPrinterWithParamsAndColor(window, font, displayStr, width * 8, yOffset, TEXT_SPEED_NO_TRANSFER, color, NULL); + } + + String_Free(displayStr); + Window_ScheduleCopyToVRAM(window); +} + +static void PrintPartnersMonNameAndGender(BattleFactoryApp *app, Window *window, u32 xOffset, u32 yOffset, u8 fgColor, u8 shadowColor, u8 bgColor, u8 font, u16 species, u8 gender) +{ + Window_FillTilemap(window, bgColor); + + MessageLoader *loader = MessageLoader_Init(MSG_LOADER_LOAD_ON_DEMAND, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_SPECIES_NAME, HEAP_ID_BATTLE_FACTORY_APP); + String *string = MessageLoader_GetNewString(loader, species); + + MessageLoader_Free(loader); + Text_AddPrinterWithParamsAndColor(window, font, string, xOffset, yOffset, TEXT_SPEED_NO_TRANSFER, TEXT_COLOR(fgColor, shadowColor, bgColor), NULL); + + u8 width = Window_GetWidth(window) - 1; + u32 symbol = gender == GENDER_MALE ? BattleFactoryApp_Text_MaleSymbol : BattleFactoryApp_Text_FemaleSymbol; + TextColor color = gender == GENDER_MALE ? TEXT_COLOR(7, 8, 0) : TEXT_COLOR(3, 4, 0); + + String_Clear(string); + + if (gender != GENDER_NONE) { + MessageLoader_GetString(app->msgLoader, symbol, string); + Text_AddPrinterWithParamsAndColor(window, font, string, width * 8, yOffset, TEXT_SPEED_NO_TRANSFER, color, NULL); + } + + String_Free(string); +} + +static void FreeAssets(BattleFactoryApp *app) +{ + for (int i = 0; i < app->unk_12; i++) { + if (app->unk_2F4[i] != NULL) { + app->unk_2F4[i] = BattleFactoryAppPokeballSprite_Free(app->unk_2F4[i]); + } + } + + if (app->unk_30C != NULL) { + BattleFactoryAppCursor_Free(app->unk_30C); + app->unk_30C = NULL; + } + + NetworkIcon_Destroy(); + + PaletteData_FreeBuffer(app->plttData, PLTTBUF_MAIN_OBJ); + PaletteData_FreeBuffer(app->plttData, PLTTBUF_MAIN_BG); + PaletteData_Free(app->plttData); + + app->plttData = NULL; + + BattleFactoryApp_FreeSprites(&app->spriteMan); + + for (int i = 0; i < 3; i++) { + if (app->unk_12C[i] != NULL) { + PokemonSprite_Delete(app->unk_12C[i]); + } + } + + PokemonSpriteManager_Free(app->monSpriteMan); + MessageLoader_Free(app->msgLoader); + StringTemplate_Free(app->strTemplate); + String_Free(app->displayStr); + String_Free(app->fmtStr); + + for (int i = 0; i < 4; i++) { + String_Free(app->menuStr[i]); + } + + BattleFactoryApp_FreeWindows(app->windows); + FreeBackgrounds(app->bgConfig); + + NARC_dtor(app->narc); + G3DPipelineBuffers_Free(app->g3dPipeline); +} + +static void ReInitApp(BattleFactoryApp *app) +{ + InitGraphicsPlane(); + + app->g3dPipeline = G3DPipeline_Init(HEAP_ID_BATTLE_FACTORY_APP, TEXTURE_VRAM_SIZE_256K, PALETTE_VRAM_SIZE_32K, BattleFactoryApp_Setup3D); + app->bgConfig = BgConfig_New(HEAP_ID_BATTLE_FACTORY_APP); + + LoadAssets(app); + BattleFactoryApp_InitWindows(app->bgConfig, app->windows); +} + +static void InitGraphicsPlane(void) +{ + SetVBlankCallback(NULL, NULL); + SetHBlankCallback(NULL, NULL); + + GXLayers_DisableEngineALayers(); + GXLayers_DisableEngineBLayers(); + + GX_SetVisiblePlane(0); + GXS_SetVisiblePlane(0); +} + +static void LoadAssets(BattleFactoryApp *app) +{ + app->narc = NARC_ctor(NARC_INDEX_RESOURCE__ENG__FRONTIER_GRAPHIC__FRONTIER_BG, HEAP_ID_BATTLE_FACTORY_APP); + + LoadBackgrounds(app); + InitSpriteManager(app); + + app->msgLoader = MessageLoader_Init(MSG_LOADER_LOAD_ON_DEMAND, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_BATTLE_FACTORY_APP, HEAP_ID_BATTLE_FACTORY_APP); + app->strTemplate = StringTemplate_Default(HEAP_ID_BATTLE_FACTORY_APP); + app->displayStr = String_Init(800, HEAP_ID_BATTLE_FACTORY_APP); + app->fmtStr = String_Init(800, HEAP_ID_BATTLE_FACTORY_APP); + + for (int i = 0; i < 4; i++) { + app->menuStr[i] = String_Init(64, HEAP_ID_BATTLE_FACTORY_APP); + } + + Font_LoadTextPalette(PAL_LOAD_MAIN_BG, PLTT_OFFSET(13), HEAP_ID_BATTLE_FACTORY_APP); + Font_LoadScreenIndicatorsPalette(PAL_LOAD_MAIN_BG, PLTT_OFFSET(12), HEAP_ID_BATTLE_FACTORY_APP); + + app->monSpriteMan = PokemonSpriteManager_New(HEAP_ID_BATTLE_FACTORY_APP); + + if (CommSys_IsInitialized()) { + ReserveVramForWirelessIconChars(NNS_G2D_VRAM_TYPE_2DMAIN, GX_OBJVRAMMODE_CHAR_1D_32K); + ReserveSlotsForWirelessIconPalette(NNS_G2D_VRAM_TYPE_2DMAIN); + sub_02039734(); + } + + if (ov105_022454F8(app, 0) == 1) { + ov105_0224246C(app); + ov105_022424A0(app); + } else { + ov105_0224260C(app); + ov105_0224266C(app); + } + + GXLayers_TurnBothDispOn(); + SetVBlankCallback(VBlankCallback, app); +} + +static void ov105_022453F8(BattleFactoryApp *param0, u8 param1, u8 param2, int param3, const Party *param4) +{ + int v0 = param2; + + if (BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C) < param0->unk_12) { + PokemonSprite_Delete(param0->unk_12C[0]); + ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param4, v0), 120, 43, param3); + PrintMonNameAndGender(param0, ¶m0->windows[2 + param1], v0, 0, 0, 15, 2, 0, 0, param4); + } + + return; +} + +static void ov105_02245464(BattleFactoryApp *param0) +{ + param0->unk_140 = Heap_Alloc(HEAP_ID_BATTLE_FACTORY_APP, sizeof(PokemonSummary)); + memset(param0->unk_140, 0, sizeof(PokemonSummary)); + + param0->unk_140->monData = param0->unk_31C; + param0->unk_140->options = param0->options; + param0->unk_140->dataType = SUMMARY_DATA_PARTY_MON; + param0->unk_140->mode = SUMMARY_MODE_LOCK_MOVES; + param0->unk_140->monMax = param0->unk_12; + param0->unk_140->monIndex = BattleFactoryAppCursor_GetCurrentSlot(param0->unk_30C); + param0->unk_140->move = 0; + param0->unk_140->dexMode = SaveData_GetDexMode(param0->saveData); + param0->unk_140->showContest = FALSE; + + PokemonSummaryScreen_FlagVisiblePages(param0->unk_140, Unk_ov105_022462DC); + PokemonSummaryScreen_SetPlayerProfile(param0->unk_140, SaveData_GetTrainerInfo(param0->saveData)); + + return; +} + +static BOOL ov105_022454F8(BattleFactoryApp *param0, u8 param1) +{ + if (param0->unk_0B == param1) { + return 1; + } + + return 0; +} + +static u8 ov105_02245508(u8 param0) +{ + switch (param0) { + case 0: + case 1: + return 3; + } + + return 2; +} + +static BOOL ov105_02245518(BattleFactoryApp *param0) +{ + if (param0->unk_13_0 == 0) { + return 0; + } + + return 1; +} + +static void ov105_02245528(BattleFactoryApp *param0, u8 param1) +{ + param0->unk_13_0 = param1; + return; +} + +static u8 ov105_02245538(BattleFactoryApp *param0, u8 param1, u8 param2) +{ + u8 v0 = 0; + + switch (param1) { + case 0: + if (param2 == 1) { + v0 = 2; + } else if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + v0 = 2; + } else { + v0 = 2; + } + break; + case 1: + if (param2 == 1) { + v0 = 1; + } else if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + v0 = 1; + } else { + v0 = 1; + } + break; + case 2: + if (param2 == 1) { + v0 = 2; + } else if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + v0 = 2; + } else { + v0 = 2; + } + break; + } + + return v0; +} + +static u32 ov105_02245584(BattleFactoryApp *param0, u32 param1) +{ + switch (param1) { + case 0: + break; + case 1: + break; + case 4: + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + return 11; + } + break; + case 5: + if (BattleFactory_IsMultiplayerChallenge(param0->challengeType) == TRUE) { + return 12; + } + break; + } + + return param1; +} + +static void ov105_022455C4(BattleFactoryApp *app, u8 param1, Pokemon *mon, int x, int y, int param5) +{ + app->unk_12C[param1] = BattleFactoryApp_CreateMonSprite(app->monSpriteMan, 0, mon, x, y, 0); + + PokemonSprite_SetAttribute(app->unk_12C[param1], MON_SPRITE_HIDE, FALSE); + + u32 species = Pokemon_GetValue(mon, MON_DATA_SPECIES, NULL); + u32 form = Pokemon_GetValue(mon, MON_DATA_FORM, NULL); + + if (!SpeciesData_GetFormValue(species, form, SPECIES_DATA_FLIP_SPRITE)) { + BattleFactoryApp_FlipMonSprite(app->unk_12C[param1], param5); + } +} + +BOOL ov105_02245620(BattleFactoryApp *param0, u16 param1, u16 param2) +{ + int v0, v1; + + if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + return 0; + } + + switch (param1) { + case 7: + v1 = 29; + ov105_02245684(param0, param1); + break; + case 8: + v1 = 30; + ov105_022456A8(param0, param1, param2); + break; + case 10: + v1 = 32; + ov105_02245884(param0, param1, param2); + break; + } + + if (CommSys_SendData(v1, param0->unk_33C, 60) == 1) { + v0 = 1; + } else { + v0 = 0; + } + + return v0; +} + +void ov105_02245684(BattleFactoryApp *param0, u16 param1) +{ + TrainerInfo *v0 = SaveData_GetTrainerInfo(param0->saveData); + param0->unk_33C[0] = param1; + + return; +} + +void ov105_0224569C(int param0, int param1, void *param2, void *param3) +{ + int v0, v1; + BattleFactoryApp *v2 = param3; + const u16 *v3 = param2; + + v1 = 0; + + if (CommSys_CurNetId() == param0) { + return; + } + + return; +} + +void ov105_022456A8(BattleFactoryApp *param0, u16 param1, u16 param2) +{ + int v0, v1; + Pokemon *v2; + + v1 = 0; + + for (v0 = 0; v0 < 60; v0++) { + param0->unk_33C[v0] = 0; + } + + param0->unk_33C[0] = param0->unk_11; + v1 += 1; + + for (v0 = 0; v0 < param0->unk_11; v0++) { + v2 = Party_GetPokemonBySlotIndex(param0->unk_31C, param0->unk_324[v0]); + param0->unk_33C[v0 + v1] = Pokemon_GetValue(v2, MON_DATA_SPECIES, NULL); + } + + v1 += param0->unk_11; + + for (v0 = 0; v0 < param0->unk_11; v0++) { + v2 = Party_GetPokemonBySlotIndex(param0->unk_31C, param0->unk_324[v0]); + param0->unk_33C[v0 + v1] = Pokemon_GetValue(v2, MON_DATA_GENDER, NULL); + } + + v1 += param0->unk_11; + + return; +} + +void ov105_02245744(int param0, int param1, void *param2, void *param3) +{ + int v0, v1; + u8 v2; + BattleFactoryApp *v3 = param3; + const u16 *v4 = param2; + + v1 = 0; + v2 = ov104_0223AA50(v3->challengeType); + + if (CommSys_CurNetId() == param0) { + return; + } + + v3->unk_18 = v4[0]; + v1 += 1; + + for (v0 = 0; v0 < v3->unk_18; v0++) { + v3->unk_3B6[v0] = v4[v0 + v1]; + } + + v1 += v3->unk_18; + + for (v0 = 0; v0 < v3->unk_18; v0++) { + v3->unk_3BA[v0] = v4[v0 + v1]; + } + + v1 += v3->unk_18; + v3->unk_3BF = 1; + + return; +} + +void ov105_022457B8(int param0, int param1, void *param2, void *param3) +{ + GF_ASSERT(0); + return; +} + +static void ov105_022457C0(BattleFactoryApp *param0) +{ + int v0; + u8 v1 = ov104_0223AA50(param0->challengeType); + + if (param0->unk_13_5 == 1) { + Window_ClearAndCopyToVRAM(¶m0->windows[1]); + Window_ClearAndCopyToVRAM(¶m0->windows[8]); + Window_ClearAndCopyToVRAM(¶m0->windows[9]); + return; + } + + if (param0->unk_3BF == 1) { + for (v0 = 0; v0 < v1; v0++) { + Window_FillTilemap(¶m0->windows[8 + v0], 0); + + if (v0 < param0->unk_18) { + PrintPartnersMonNameAndGender(param0, ¶m0->windows[8 + v0], 0, 0, 15, 2, 0, 0, param0->unk_3B6[v0], param0->unk_3BA[v0]); + } + + Window_ScheduleCopyToVRAM(¶m0->windows[8 + v0]); + } + + PrintPartnersName(param0, ¶m0->windows[1], 0, 0, 0); + } + + param0->unk_3BF = 0; + return; +} + +void ov105_02245884(BattleFactoryApp *param0, u16 param1, u16 param2) +{ + param0->unk_33C[0] = param1; + param0->unk_33C[1] = param2; + param0->unk_33C[2] = param0->unk_324[0]; + param0->unk_33C[3] = param0->unk_324[1]; + + return; +} + +void ov105_022458A4(int param0, int param1, void *param2, void *param3) +{ + int v0, v1; + BattleFactoryApp *v2 = param3; + const u16 *v3 = param2; + + v1 = 0; + v2->unk_3BE++; + + if (CommSys_CurNetId() == param0) { + return; + } + + v2->unk_3B4 = (u8)v3[1]; + + if (CommSys_CurNetId() == 0) { + if (v2->unk_13_3 == 1) { + v2->unk_3B4 = 0; + } else { + if (v2->unk_3B4 == 1) { + v2->unk_324[0] = (u8)v3[2]; + + v2->unk_324[1] = (u8)v3[3]; + } + } + } else { + if (v2->unk_3B4 == 1) { + v2->unk_13_3 = 0; + v2->unk_324[0] = (u8)v3[2]; + v2->unk_324[1] = (u8)v3[3]; + } + } + + return; +} + +static BattleFactoryAppPokeballSprite *ov105_02245934(BattleFactoryApp *param0, int param1) +{ + int v0, v1; + + if (ov105_022454F8(param0, 0) == 1) { + v0 = Unk_ov105_02246364[param1][0]; + v1 = Unk_ov105_02246364[param1][1]; + } else { + if (!BattleFactory_IsMultiplayerChallenge(param0->challengeType)) { + v0 = Unk_ov105_02246314[param1][0]; + v1 = Unk_ov105_02246314[param1][1]; + } else { + if (param0->unk_12 == (NELEMS(Unk_ov105_022462EC))) { + v0 = Unk_ov105_022462EC[param1][0]; + v1 = Unk_ov105_022462EC[param1][1]; + } else { + v0 = Unk_ov105_02246320[param1][0]; + v1 = Unk_ov105_02246320[param1][1]; + } + } + } + + return BattleFactoryAppPokeballSprite_New(¶m0->spriteMan, v0, v1, HEAP_ID_BATTLE_FACTORY_APP); +} + +static BattleFactoryAppPanelSprite *ov105_022459B0(BattleFactoryApp *param0, u32 param1) +{ + int v0, v1; + + switch (param1) { + case 0: + case 1: + v0 = 80; + v1 = 40; + break; + case 4: + case 5: + v0 = 128; + v1 = 40; + break; + case 11: + v0 = 80; + v1 = 40; + break; + case 12: + v0 = 80; + v1 = 40; + break; + } + + return BattleFactoryAppPanelSprite_New(¶m0->spriteMan, param1, v0, v1, HEAP_ID_BATTLE_FACTORY_APP); +} + +static BattleFactoryAppPanelSprite *ov105_02245A04(BattleFactoryApp *param0, u32 param1) +{ + int v0, v1; + + switch (param1) { + case 2: + case 3: + v0 = 216; + v1 = 40; + break; + default: + GF_ASSERT(0); + v0 = 0; + v1 = 0; + break; + } + + return BattleFactoryAppPanelSprite_New(¶m0->spriteMan, param1, v0, v1, HEAP_ID_BATTLE_FACTORY_APP); +} + +static void ov105_02245A30(BattleFactoryApp *param0) +{ + if (param0->unk_314 != NULL) { + BattleFactoryAppPanelSprite_Free(param0->unk_314); + param0->unk_314 = NULL; + } + + if (param0->unk_318 != NULL) { + BattleFactoryAppPanelSprite_Free(param0->unk_318); + param0->unk_318 = NULL; + } + + return; +} + +static void ov105_02245A64(BattleFactoryApp *param0) +{ + Bg_SetPriority(BG_LAYER_MAIN_1, 1); + Bg_ClearTilesRange(BG_LAYER_MAIN_1, 32, 0, HEAP_ID_BATTLE_FACTORY_APP); + Bg_ClearTilemap(param0->bgConfig, BG_LAYER_MAIN_1); + BattleFactoryApp_InitWindows(param0->bgConfig, param0->windows); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, 1); + + return; +} + +static void ov105_02245A98(Window *param0) +{ + Window_EraseStandardFrame(param0, 1); + Window_ClearAndScheduleCopyToVRAM(param0); + + return; +} diff --git a/src/applications/frontier/battle_factory/panel_sprite.c b/src/applications/frontier/battle_factory/panel_sprite.c new file mode 100644 index 0000000000..9a925d8e60 --- /dev/null +++ b/src/applications/frontier/battle_factory/panel_sprite.c @@ -0,0 +1,48 @@ +#include "applications/frontier/battle_factory/panel_sprite.h" + +#include +#include + +#include "applications/frontier/battle_factory/sprite_manager.h" + +#include "heap.h" +#include "sprite.h" + +static void SetSpritePosition(BattleFactoryAppPanelSprite *sprite, int x, int y); + +BattleFactoryAppPanelSprite *BattleFactoryAppPanelSprite_New(BattleFactoryAppSpriteManager *spriteMan, u32 animID, int x, int y, enum HeapID heapID) +{ + BattleFactoryAppPanelSprite *panelSprite = Heap_Alloc(heapID, sizeof(BattleFactoryAppPanelSprite)); + memset(panelSprite, 0, sizeof(BattleFactoryAppPanelSprite)); + + panelSprite->x = x; + panelSprite->y = y; + panelSprite->sprite = BattleFactoryApp_InitSprite(spriteMan, 0, animID, 0, 1, FALSE); + + SetSpritePosition(panelSprite, x, y); + + return panelSprite; +} + +void *BattleFactoryAppPanelSprite_Free(BattleFactoryAppPanelSprite *panelSprite) +{ + Sprite_Delete(panelSprite->sprite); + Heap_Free(panelSprite); + + return NULL; +} + +static void SetSpritePosition(BattleFactoryAppPanelSprite *panelSprite, int x, int y) +{ + VecFx32 position; + + position.x = x * FX32_ONE; + position.y = y * FX32_ONE; + + Sprite_SetPosition(panelSprite->sprite, &position); +} + +BOOL BattleFactoryAppPanelSprite_IsAnimated(BattleFactoryAppPanelSprite *panelSprite) +{ + return Sprite_IsAnimated(panelSprite->sprite); +} diff --git a/src/applications/frontier/battle_factory/pokeball_sprite.c b/src/applications/frontier/battle_factory/pokeball_sprite.c new file mode 100644 index 0000000000..f25f291efa --- /dev/null +++ b/src/applications/frontier/battle_factory/pokeball_sprite.c @@ -0,0 +1,117 @@ +#include "applications/frontier/battle_factory/pokeball_sprite.h" + +#include +#include + +#include "applications/frontier/battle_factory/sprite_manager.h" + +#include "heap.h" +#include "sprite.h" + +static void BattleFactoryAppPokeballSprite_SetSelected(BattleFactoryAppPokeballSprite *ballSprite, u8 isSelected); + +BattleFactoryAppPokeballSprite *BattleFactoryAppPokeballSprite_New(BattleFactoryAppSpriteManager *spriteMan, int x, int y, u32 heapID) +{ + BattleFactoryAppPokeballSprite *ballSprite = Heap_Alloc(heapID, sizeof(BattleFactoryAppPokeballSprite)); + memset(ballSprite, 0, sizeof(BattleFactoryAppPokeballSprite)); + + ballSprite->isSelected = 0; + ballSprite->x = x; + ballSprite->y = y; + ballSprite->sprite = BattleFactoryApp_InitSprite(spriteMan, 0, ANIM_ID_BALL_STATIC, 0, 0, FALSE); + + BattleFactoryAppPokeballSprite_SetPosition(ballSprite, x, y); + Sprite_SetExplicitPalette(ballSprite->sprite, 1); + + return ballSprite; +} + +void *BattleFactoryAppPokeballSprite_Free(BattleFactoryAppPokeballSprite *ballSprite) +{ + Sprite_Delete(ballSprite->sprite); + Heap_Free(ballSprite); + + return NULL; +} + +void BattleFactoryAppPokeballSprite_SetDrawFlag(BattleFactoryAppPokeballSprite *ballSprite, BOOL draw) +{ + Sprite_SetDrawFlag(ballSprite->sprite, draw); +} + +VecFx32 BattleFactoryAppPokeballSprite_SetAndGetPosition(BattleFactoryAppPokeballSprite *ballSprite, int x, int y) +{ + VecFx32 position = *Sprite_GetPosition(ballSprite->sprite); + position.x += x * FX32_ONE; + position.y += y * FX32_ONE; + + Sprite_SetPosition(ballSprite->sprite, &position); + return *Sprite_GetPosition(ballSprite->sprite); +} + +void BattleFactoryAppPokeballSprite_SetPosition(BattleFactoryAppPokeballSprite *ballSprite, int x, int y) +{ + VecFx32 position; + + position.x = x * FX32_ONE; + position.y = y * FX32_ONE; + + Sprite_SetPosition(ballSprite->sprite, &position); +} + +const VecFx32 *BattleFactoryAppPokeballSprite_GetPosition(BattleFactoryAppPokeballSprite *ballSprite) +{ + return Sprite_GetPosition(ballSprite->sprite); +} + +static void BattleFactoryAppPokeballSprite_SetSelected(BattleFactoryAppPokeballSprite *ballSprite, u8 isSelected) +{ + ballSprite->isSelected = isSelected; +} + +u8 BattleFactoryAppPokeballSprite_IsSelected(BattleFactoryAppPokeballSprite *ballSprite) +{ + return ballSprite->isSelected; +} + +void BattleFactoryAppPokeballSprite_SelectMon(BattleFactoryAppPokeballSprite *ballSprite) +{ + BattleFactoryAppPokeballSprite_SetSelected(ballSprite, TRUE); +} + +void BattleFactoryAppPokeballSprite_UnselectMon(BattleFactoryAppPokeballSprite *ballSprite) +{ + BattleFactoryAppPokeballSprite_SetSelected(ballSprite, FALSE); +} + +void ov105_02245F5C(BattleFactoryAppPokeballSprite *ballSprite) +{ + const VecFx32 *oldPos = BattleFactoryAppPokeballSprite_GetPosition(ballSprite); + + VecFx32 newPos; + newPos.x = ((oldPos->x / FX32_ONE) + 248) * FX32_ONE; + newPos.y = oldPos->y; + + Sprite_SetPosition(ballSprite->sprite, &newPos); +} + +int BattleFactoryAppPokeballSprite_GetX(BattleFactoryAppPokeballSprite *ballSprite) +{ + return ballSprite->x; +} + +int BattleFactoryAppPokeballSprite_GetY(BattleFactoryAppPokeballSprite *ballSprite) +{ + return ballSprite->y; +} + +void BattleFactoryAppPokeballSprite_SetAnim(BattleFactoryAppPokeballSprite *ballSprite, u32 animID) +{ + Sprite_SetAnimSpeed(ballSprite->sprite, FX32_ONE); + Sprite_SetAnim(ballSprite->sprite, animID); +} + +void BattleFactoryAppPokeballSprite_UpdatePalette(BattleFactoryAppPokeballSprite *ballSprite, u32 palette) +{ + Sprite_SetExplicitPalette(ballSprite->sprite, palette); +} diff --git a/src/applications/frontier/battle_factory/sprite_manager.c b/src/applications/frontier/battle_factory/sprite_manager.c new file mode 100644 index 0000000000..e531707dfb --- /dev/null +++ b/src/applications/frontier/battle_factory/sprite_manager.c @@ -0,0 +1,107 @@ +#include "applications/frontier/battle_factory/sprite_manager.h" + +#include + +#include "char_transfer.h" +#include "gx_layers.h" +#include "narc_frontier_obj.h" +#include "pltt_transfer.h" +#include "render_oam.h" +#include "sprite.h" +#include "sprite_resource.h" +#include "sprite_transfer.h" +#include "sprite_util.h" + +static void InitCharPlttTransferBuffers(void); + +static const u8 sCapacities[4] = { 1, 1, 1, 1 }; + +void BattleFactoryApp_InitSpriteManager(BattleFactoryAppSpriteManager *sprites) +{ + InitCharPlttTransferBuffers(); + NNS_G2dInitOamManagerModule(); + RenderOam_Init(0, 128, 0, 32, 0, 128, 0, 32, HEAP_ID_BATTLE_FACTORY_APP); + + sprites->spriteList = SpriteList_InitRendering(9, &sprites->unk_04, HEAP_ID_BATTLE_FACTORY_APP); + + for (int i = 0; i < MAX_SPRITE_RESOURCE_GEN4; i++) { + sprites->resourceCollection[i] = SpriteResourceCollection_New(sCapacities[i], i, HEAP_ID_BATTLE_FACTORY_APP); + } + + sprites->resources[0][0] = SpriteResourceCollection_AddTiles(sprites->resourceCollection[0], NARC_INDEX_RESOURCE__ENG__FRONTIER_GRAPHIC__FRONTIER_OBJ, BATTLE_FACTORY_APP_SPRITES_NCGR, TRUE, 0, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_BATTLE_FACTORY_APP); + sprites->resources[0][1] = SpriteResourceCollection_AddPalette(sprites->resourceCollection[1], NARC_INDEX_RESOURCE__ENG__FRONTIER_GRAPHIC__FRONTIER_OBJ, BATTLE_FACTORY_APP_SPRITES_PLTT, FALSE, 0, NNS_G2D_VRAM_TYPE_2DMAIN, 8, HEAP_ID_BATTLE_FACTORY_APP); + sprites->resources[0][2] = SpriteResourceCollection_Add(sprites->resourceCollection[2], NARC_INDEX_RESOURCE__ENG__FRONTIER_GRAPHIC__FRONTIER_OBJ, BATTLE_FACTORY_APP_SPRITES_NCER, TRUE, 0, SPRITE_RESOURCE_CELL, HEAP_ID_BATTLE_FACTORY_APP); + sprites->resources[0][3] = SpriteResourceCollection_Add(sprites->resourceCollection[3], NARC_INDEX_RESOURCE__ENG__FRONTIER_GRAPHIC__FRONTIER_OBJ, BATTLE_FACTORY_APP_SPRITES_NANR, TRUE, 0, SPRITE_RESOURCE_ANIM, HEAP_ID_BATTLE_FACTORY_APP); + + SpriteTransfer_RequestChar(sprites->resources[0][SPRITE_RESOURCE_CHAR]); + SpriteTransfer_RequestPlttWholeRange(sprites->resources[0][SPRITE_RESOURCE_PLTT]); + + GXLayers_EngineBToggleLayers(GX_PLANEMASK_OBJ, TRUE); + GXLayers_EngineAToggleLayers(GX_PLANEMASK_OBJ, TRUE); +} + +Sprite *BattleFactoryApp_InitSprite(BattleFactoryAppSpriteManager *spriteMan, u32 resourceID, u32 animID, u32 priority, int resourcePriority, u8 onSubScreen) +{ + SpriteResourcesHeader resourceHeader; + SpriteResourcesHeader_Init(&resourceHeader, resourceID, resourceID, resourceID, resourceID, -1, -1, FALSE, resourcePriority, spriteMan->resourceCollection[SPRITE_RESOURCE_CHAR], spriteMan->resourceCollection[SPRITE_RESOURCE_PLTT], spriteMan->resourceCollection[SPRITE_RESOURCE_CELL], spriteMan->resourceCollection[SPRITE_RESOURCE_ANIM], NULL, NULL); + + AffineSpriteListTemplate spriteTemplate; + + spriteTemplate.list = spriteMan->spriteList; + spriteTemplate.resourceData = &resourceHeader; + spriteTemplate.position.x = 0; + spriteTemplate.position.y = 0; + spriteTemplate.position.z = 0; + spriteTemplate.affineScale.x = FX32_ONE; + spriteTemplate.affineScale.y = FX32_ONE; + spriteTemplate.affineScale.z = FX32_ONE; + spriteTemplate.affineZRotation = 0; + spriteTemplate.priority = priority; + + if (!onSubScreen) { + spriteTemplate.vramType = NNS_G2D_VRAM_TYPE_2DMAIN; + } else { + spriteTemplate.vramType = NNS_G2D_VRAM_TYPE_2DSUB; + } + + spriteTemplate.heapID = HEAP_ID_BATTLE_FACTORY_APP; + + if (onSubScreen == TRUE) { + spriteTemplate.position.y += FX32_CONST(HW_LCD_HEIGHT); + } + + Sprite *sprite = SpriteList_AddAffine(&spriteTemplate); + + Sprite_SetAnimateFlag(sprite, TRUE); + Sprite_SetAnim(sprite, animID); + + return sprite; +} + +void BattleFactoryApp_FreeSprites(BattleFactoryAppSpriteManager *spriteMan) +{ + SpriteTransfer_ResetCharTransfer(spriteMan->resources[0][SPRITE_RESOURCE_CHAR]); + SpriteTransfer_ResetPlttTransfer(spriteMan->resources[0][SPRITE_RESOURCE_PLTT]); + + for (u8 i = 0; i < MAX_SPRITE_RESOURCE_GEN4; i++) { + SpriteResourceCollection_Delete(spriteMan->resourceCollection[i]); + } + + SpriteList_Delete(spriteMan->spriteList); + RenderOam_Free(); + CharTransfer_Free(); + PlttTransfer_Free(); +} + +static void InitCharPlttTransferBuffers(void) +{ + CharTransferTemplate transferTemplate = { + 32, 2048, 2048, HEAP_ID_BATTLE_FACTORY_APP + }; + + CharTransfer_InitWithVramModes(&transferTemplate, GX_OBJVRAMMODE_CHAR_1D_64K, GX_OBJVRAMMODE_CHAR_1D_64K); + + PlttTransfer_Init(8, HEAP_ID_BATTLE_FACTORY_APP); + CharTransfer_ClearBuffers(); + PlttTransfer_Clear(); +} diff --git a/src/applications/frontier/battle_factory/windows.c b/src/applications/frontier/battle_factory/windows.c new file mode 100644 index 0000000000..55d948c3b5 --- /dev/null +++ b/src/applications/frontier/battle_factory/windows.c @@ -0,0 +1,51 @@ +#include "applications/frontier/battle_factory/windows.h" + +#include + +#include "constants/field_base_tiles.h" + +#include "bg_window.h" +#include "render_window.h" + +#define BASE_TILE_WINDOW_FRAME (1024 - STANDARD_WINDOW_TILE_COUNT) + +void BattleFactoryApp_InitWindows(BgConfig *bgConfig, Window *windows) +{ + static const WindowTemplate sWinTemplates[] = { + { BG_LAYER_MAIN_1, 1, 1, 10, 2, 13, 1 }, + { BG_LAYER_MAIN_1, 22, 1, 10, 2, 13, 21 }, + { BG_LAYER_MAIN_1, 1, 4, 9, 2, 13, 41 }, + { BG_LAYER_MAIN_1, 1, 6, 9, 2, 13, 59 }, + { BG_LAYER_MAIN_1, 1, 8, 9, 2, 13, 77 }, + { BG_LAYER_MAIN_1, 2, 19, 17, 4, 12, 95 }, + { BG_LAYER_MAIN_1, 23, 19, 8, 4, 13, 163 }, + { BG_LAYER_MAIN_1, 23, 17, 8, 6, 13, 195 }, + { BG_LAYER_MAIN_1, 22, 4, 9, 2, 13, 243 }, + { BG_LAYER_MAIN_1, 22, 6, 9, 2, 13, 261 } + }; + + for (u8 i = 0; i < 10; i++) { + Window_AddFromTemplate(bgConfig, &windows[i], &sWinTemplates[i]); + Window_FillTilemap(&windows[i], 0); + } +} + +void BattleFactoryApp_FreeWindows(Window *windows) +{ + for (u16 i = 0; i < 10; i++) { + Window_Remove(&windows[i]); + } +} + +void BattleFactoryApp_DrawWindow(BgConfig *bgConfig, Window *window) +{ + LoadStandardWindowGraphics(bgConfig, BG_LAYER_MAIN_1, BASE_TILE_WINDOW_FRAME, PLTT_11, STANDARD_WINDOW_SYSTEM, HEAP_ID_BATTLE_FACTORY_APP); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_WINDOW_FRAME, PLTT_11); +} + +void BattleFactoryApp_DrawMessageBox(Window *window, int frame) +{ + LoadMessageBoxGraphics(window->bgConfig, Window_GetBgLayer(window), BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_10, frame, HEAP_ID_BATTLE_FACTORY_APP); + Window_FillTilemap(window, 15); + Window_DrawMessageBoxWithScrollCursor(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_10); +} diff --git a/src/meson.build b/src/meson.build index 2aaa8734ca..30c2b7edda 100644 --- a/src/meson.build +++ b/src/meson.build @@ -952,13 +952,13 @@ pokeplatinum_c = files( 'overlay104/ov104_0223D9E4.c', 'overlay104/ov104_0223DC7C.c', 'overlay104/ov104_0223E894.c', - 'overlay105/ov105_02241AE0.c', - 'overlay105/ov105_02245AAC.c', - 'overlay105/ov105_02245CD0.c', - 'overlay105/ov105_02245DC4.c', - 'overlay105/ov105_02245E54.c', - 'overlay105/ov105_02245FB8.c', - 'overlay105/ov105_02246214.c', + 'applications/frontier/battle_factory/main.c', + 'applications/frontier/battle_factory/sprite_manager.c', + 'applications/frontier/battle_factory/helpers.c', + 'applications/frontier/battle_factory/panel_sprite.c', + 'applications/frontier/battle_factory/pokeball_sprite.c', + 'applications/frontier/battle_factory/cursor.c', + 'applications/frontier/battle_factory/windows.c', 'applications/frontier/battle_hall/main.c', 'applications/frontier/battle_hall/sprite_manager.c', 'applications/frontier/battle_hall/sprites.c', diff --git a/src/overlay104/ov104_022332B4.c b/src/overlay104/ov104_022332B4.c index fe23576070..1f896a69c6 100644 --- a/src/overlay104/ov104_022332B4.c +++ b/src/overlay104/ov104_022332B4.c @@ -3,6 +3,7 @@ #include "constants/heap.h" +#include "applications/frontier/battle_factory/main.h" #include "overlay104/frontier_script_context.h" #include "overlay104/frscrcmd.h" #include "overlay104/ov104_0222DCE0.h" @@ -15,7 +16,6 @@ #include "overlay104/struct_ov104_02234130.h" #include "overlay104/struct_ov104_0223ADA0.h" #include "overlay104/struct_ov104_0223C4CC.h" -#include "overlay105/ov105_02241AE0.h" #include "bg_window.h" #include "field_battle_data_transfer.h" @@ -85,9 +85,9 @@ BOOL FrontierScrCmd_5F(FrontierScriptContext *param0) FS_EXTERN_OVERLAY(overlay105); static const ApplicationManagerTemplate v4 = { - ov105_02241AE0, - ov105_02241BD8, - ov105_02241F54, + BattleFactoryApp_Init, + BattleFactoryApp_Main, + BattleFactoryApp_Exit, FS_OVERLAY_ID(overlay105) }; @@ -144,9 +144,9 @@ BOOL FrontierScrCmd_62(FrontierScriptContext *param0) FS_EXTERN_OVERLAY(overlay105); static const ApplicationManagerTemplate v4 = { - ov105_02241AE0, - ov105_02241BD8, - ov105_02241F54, + BattleFactoryApp_Init, + BattleFactoryApp_Main, + BattleFactoryApp_Exit, FS_OVERLAY_ID(overlay105) }; diff --git a/src/overlay105/ov105_02241AE0.c b/src/overlay105/ov105_02241AE0.c deleted file mode 100644 index 81b0b2c2cd..0000000000 --- a/src/overlay105/ov105_02241AE0.c +++ /dev/null @@ -1,3307 +0,0 @@ -#include "overlay105/ov105_02241AE0.h" - -#include -#include - -#include "applications/pokemon_summary_screen/main.h" -#include "overlay104/ov104_0222DCE0.h" -#include "overlay104/ov104_0223A7F4.h" -#include "overlay104/struct_ov104_02234130.h" -#include "overlay105/ov105_02245AAC.h" -#include "overlay105/ov105_02245CD0.h" -#include "overlay105/ov105_02245DC4.h" -#include "overlay105/ov105_02245E54.h" -#include "overlay105/ov105_02245FB8.h" -#include "overlay105/ov105_02246214.h" -#include "overlay105/struct_ov105_02241FF4_decl.h" -#include "overlay105/struct_ov105_02245AAC.h" -#include "overlay105/struct_ov105_02245E1C_decl.h" -#include "overlay105/struct_ov105_02245EA8_decl.h" -#include "overlay105/struct_ov105_02246060_decl.h" - -#include "bg_window.h" -#include "communication_information.h" -#include "communication_system.h" -#include "dexmode_checker.h" -#include "font.h" -#include "g3d_pipeline.h" -#include "game_options.h" -#include "game_overlay.h" -#include "graphics.h" -#include "gx_layers.h" -#include "heap.h" -#include "menu.h" -#include "message.h" -#include "narc.h" -#include "overlay_manager.h" -#include "palette.h" -#include "party.h" -#include "pokemon.h" -#include "pokemon_sprite.h" -#include "render_oam.h" -#include "render_window.h" -#include "save_player.h" -#include "savedata.h" -#include "screen_fade.h" -#include "sound_playback.h" -#include "sprite.h" -#include "sprite_util.h" -#include "string_gf.h" -#include "string_list.h" -#include "string_template.h" -#include "system.h" -#include "text.h" -#include "trainer_info.h" -#include "unk_020363E8.h" -#include "unk_020393C8.h" -#include "unk_0209BA80.h" -#include "vram_transfer.h" - -#include "constdata/const_020F410C.h" - -FS_EXTERN_OVERLAY(overlay104); - -struct UnkStruct_ov105_02241FF4_t { - ApplicationManager *unk_00; - ApplicationManager *unk_04; - u8 unk_08; - u8 unk_09; - u8 unk_0A; - u8 unk_0B; - int unk_0C; - u8 unk_10; - u8 unk_11; - u8 unk_12; - u8 unk_13_0 : 1; - u8 unk_13_1 : 1; - u8 unk_13_2 : 1; - u8 unk_13_3 : 1; - u8 unk_13_4 : 1; - u8 unk_13_5 : 1; - u8 unk_13_6 : 1; - u8 unk_13_7 : 1; - u32 unk_14; - u8 unk_18; - u8 unk_19; - u8 unk_1A; - u8 unk_1B; - MessageLoader *unk_1C; - StringTemplate *unk_20; - String *unk_24; - String *unk_28; - String *unk_2C[4]; - u16 unk_3C[8]; - BgConfig *unk_4C; - Window unk_50[10]; - MenuTemplate unk_F0; - Menu *unk_FC; - StringList unk_100[4]; - PaletteData *unk_120; - G3DPipelineBuffers *unk_124; - PokemonSpriteManager *unk_128; - PokemonSprite *unk_12C[3]; - Options *options; - SaveData *saveData; - PokemonSummary *unk_140; - UnkStruct_ov105_02245AAC unk_144; - UnkStruct_ov105_02245EA8 *unk_2F4[6]; - UnkStruct_ov105_02246060 *unk_30C; - UnkStruct_ov105_02246060 *unk_310; - UnkStruct_ov105_02245E1C *unk_314; - UnkStruct_ov105_02245E1C *unk_318; - Party *unk_31C; - Party *unk_320; - u16 unk_324[6]; - u16 *unk_330; - int unk_334; - NARC *unk_338; - u16 unk_33C[60]; - u16 unk_3B4; - u16 unk_3B6[2]; - u16 unk_3BA[2]; - u8 unk_3BE; - u8 unk_3BF; - u32 unk_3C0; -}; - -int ov105_02241AE0(ApplicationManager *appMan, int *param1); -int ov105_02241BD8(ApplicationManager *appMan, int *param1); -int ov105_02241F54(ApplicationManager *appMan, int *param1); -static BOOL ov105_02241FF4(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_022421F0(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_02242698(UnkStruct_ov105_02241FF4 *param0); -static void ov105_0224227C(UnkStruct_ov105_02241FF4 *param0); -static void ov105_0224246C(UnkStruct_ov105_02241FF4 *param0); -static void ov105_022424A0(UnkStruct_ov105_02241FF4 *param0); -static void ov105_022424CC(UnkStruct_ov105_02241FF4 *param0); -static void ov105_0224260C(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_022426E0(UnkStruct_ov105_02241FF4 *param0); -static void ov105_0224296C(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02242A58(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02242B54(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_02242D04(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_02243144(UnkStruct_ov105_02241FF4 *param0); -static void ov105_022433AC(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_022434BC(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02243738(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_02243818(UnkStruct_ov105_02241FF4 *param0); -static void ov105_0224396C(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_02243A3C(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02243D20(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02243D84(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02243DE4(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_02243E84(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02243FDC(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_0224400C(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_0224435C(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_0224439C(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_022443DC(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_02244424(UnkStruct_ov105_02241FF4 *param0); -static void ov105_022451B4(UnkStruct_ov105_02241FF4 *param0); -static void ov105_022452A0(UnkStruct_ov105_02241FF4 *param0); -static void ov105_022452E4(void); -static void ov105_0224531C(UnkStruct_ov105_02241FF4 *param0); -static void ov105_022453F8(UnkStruct_ov105_02241FF4 *param0, u8 param1, u8 param2, int param3, const Party *param4); -static void ov105_0224472C(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02244678(UnkStruct_ov105_02241FF4 *param0); -static void ov105_0224473C(BgConfig *param0); -static void ov105_0224451C(void *param0); -static void ov105_02244564(void); -static void ov105_02244584(BgConfig *param0); -static void ov105_02244778(UnkStruct_ov105_02241FF4 *param0, int *param1, int param2); -static BOOL ov105_02244780(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_02244830(UnkStruct_ov105_02241FF4 *param0); -static void ov105_022448BC(UnkStruct_ov105_02241FF4 *param0); -static void ov105_022448F4(UnkStruct_ov105_02241FF4 *param0, u32 param1, u8 param2, u8 param3, u8 param4); -static void ov105_02244924(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_022449A4(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_02244A60(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_02244A18(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_02244AA8(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_02244AF8(void); -static void ov105_02244B30(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_02244B90(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_02244BE4(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_02244C0C(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static u8 ov105_02244C60(UnkStruct_ov105_02241FF4 *param0, Window *param1, int param2, u32 param3, u32 param4, u32 param5, u8 param6, u8 param7, u8 param8, u8 param9); -static u8 ov105_02244CC0(UnkStruct_ov105_02241FF4 *param0, Window *param1, int param2, u32 param3, u32 param4, u32 param5, u8 param6, u8 param7, u8 param8, u8 param9); -static u8 ov105_02244D14(UnkStruct_ov105_02241FF4 *param0, int param1); -static void ov105_02244D48(UnkStruct_ov105_02241FF4 *param0, Window *param1, u8 param2); -static void ov105_02244DC4(UnkStruct_ov105_02241FF4 *param0, u8 param1, u8 param2, int param3); -static void ov105_02244DF0(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02244E94(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02244EE8(UnkStruct_ov105_02241FF4 *param0, u32 param1, s32 param2); -static void ov105_02244F00(UnkStruct_ov105_02241FF4 *param0, u32 param1, BoxPokemon *boxMon); -static void ov105_02244F0C(UnkStruct_ov105_02241FF4 *param0, Window *param1, u32 param2, u32 param3, u8 param4); -static void ov105_02244F84(UnkStruct_ov105_02241FF4 *param0, Window *param1, u32 param2, u32 param3, u8 param4); -static void ov105_02244FF8(UnkStruct_ov105_02241FF4 *param0, Window *param1, u8 param2, u32 param3, u32 param4, u8 param5, u8 param6, u8 param7, u8 param8, const Party *param9); -static void ov105_022450DC(UnkStruct_ov105_02241FF4 *param0, Window *param1, u32 param2, u32 param3, u8 param4, u8 param5, u8 param6, u8 param7, u16 param8, u8 param9); -static void ov105_02245464(UnkStruct_ov105_02241FF4 *param0); -static BOOL ov105_022454F8(UnkStruct_ov105_02241FF4 *param0, u8 param1); -static u8 ov105_02245508(u8 param0); -static BOOL ov105_02245518(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02245528(UnkStruct_ov105_02241FF4 *param0, u8 param1); -static u8 ov105_02245538(UnkStruct_ov105_02241FF4 *param0, u8 param1, u8 param2); -static u32 ov105_02245584(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_022455C4(UnkStruct_ov105_02241FF4 *param0, u8 param1, Pokemon *param2, int param3, int param4, int param5); -BOOL ov105_02245620(UnkStruct_ov105_02241FF4 *param0, u16 param1, u16 param2); -void ov105_02245684(UnkStruct_ov105_02241FF4 *param0, u16 param1); -void ov105_0224569C(int param0, int param1, void *param2, void *param3); -void ov105_022456A8(UnkStruct_ov105_02241FF4 *param0, u16 param1, u16 param2); -void ov105_02245744(int param0, int param1, void *param2, void *param3); -void ov105_022457B8(int param0, int param1, void *param2, void *param3); -void ov105_02245884(UnkStruct_ov105_02241FF4 *param0, u16 param1, u16 param2); -void ov105_022458A4(int param0, int param1, void *param2, void *param3); -static void ov105_022457C0(UnkStruct_ov105_02241FF4 *param0); -static UnkStruct_ov105_02245EA8 *ov105_02245934(UnkStruct_ov105_02241FF4 *param0, int param1); -static UnkStruct_ov105_02245E1C *ov105_022459B0(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static UnkStruct_ov105_02245E1C *ov105_02245A04(UnkStruct_ov105_02241FF4 *param0, u32 param1); -static void ov105_02245A30(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02245A64(UnkStruct_ov105_02241FF4 *param0); -static void ov105_02245A98(Window *param0); - -static const u16 Unk_ov105_02246364[][2] = { - { 0x18, 0x70 }, - { 0x40, 0x70 }, - { 0x68, 0x70 }, - { 0x90, 0x70 }, - { 0xB8, 0x70 }, - { 0xE0, 0x70 } -}; - -static const u16 Unk_ov105_02246314[][2] = { - { 0x40, 0x70 }, - { 0x78, 0x70 }, - { 0xB0, 0x70 } -}; - -static const u16 Unk_ov105_022462EC[][2] = { - { 0x60, 0x70 }, - { 0x98, 0x70 } -}; - -static const u16 Unk_ov105_02246320[][2] = { - { 0x28, 0x70 }, - { 0x60, 0x70 }, - { 0x98, 0x70 }, - { 0xD0, 0x70 } -}; - -static const UnkStruct_ov105_02246394 Unk_ov105_02246394[] = { - { 0x18, 0x70 }, - { 0x40, 0x70 }, - { 0x68, 0x70 }, - { 0x90, 0x70 }, - { 0xB8, 0x70 }, - { 0xE0, 0x70 } -}; - -static const UnkStruct_ov105_02246394 Unk_ov105_02246340[] = { - { 0x40, 0x70 }, - { 0x78, 0x70 }, - { 0xB0, 0x70 }, - { 0xD4, 0x90 } -}; - -static const u8 Unk_ov105_022462D0[(NELEMS(Unk_ov105_02246340))] = { - 0x8, - 0x8, - 0x8, - 0x9 -}; - -static const UnkStruct_ov105_02246394 Unk_ov105_022462FC[] = { - { 0x60, 0x70 }, - { 0x98, 0x70 }, - { 0xD4, 0x90 } -}; - -static const u8 Unk_ov105_022462CC[(NELEMS(Unk_ov105_022462FC))] = { - 0x8, - 0x8, - 0x9 -}; - -static const UnkStruct_ov105_02246394 Unk_ov105_02246350[] = { - { 0x40, 0x70 }, - { 0x78, 0x70 }, - { 0xB0, 0x70 }, - { 0xD4, 0x90 }, - { 0xD4, 0xA0 } -}; - -static const u8 Unk_ov105_022462D4[(NELEMS(Unk_ov105_02246350))] = { - 0x8, - 0x8, - 0x8, - 0x9, - 0x9 -}; - -static const UnkStruct_ov105_02246394 Unk_ov105_0224637C[] = { - { 0x28, 0x70 }, - { 0x60, 0x70 }, - { 0x98, 0x70 }, - { 0xD0, 0x70 }, - { 0xD4, 0x90 }, - { 0xD4, 0xA0 } -}; - -static const u8 Unk_ov105_022462E4[(NELEMS(Unk_ov105_0224637C))] = { - 0x8, - 0x8, - 0x8, - 0x8, - 0x9, - 0x9 -}; - -static const UnkStruct_ov105_02246394 Unk_ov105_02246308[] = { - { 0xD4, 0x90 }, - { 0xD4, 0xA0 }, - { 0xD4, 0xB0 } -}; - -static const UnkStruct_ov105_02246394 Unk_ov105_022462F4[] = { - { 0xD4, 0x90 }, - { 0xD4, 0xA0 } -}; - -static const UnkStruct_ov105_02246394 bf_v_trade_final_csr_pos[] = { - { 212, 144 }, - { 212, 160 }, -}; - -static const u8 Unk_ov105_022462DC[] = { - 0x0, - 0x1, - 0x2, - 0x3, - 0x7, - 0x8 -}; - -int ov105_02241AE0(ApplicationManager *appMan, int *param1) -{ - int v0; - UnkStruct_ov105_02241FF4 *v1; - UnkStruct_ov104_02234130 *v2; - - Overlay_LoadByID(FS_OVERLAY_ID(overlay104), 2); - ov105_022452E4(); - Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_93, 0x20000); - - v1 = ApplicationManager_NewData(appMan, sizeof(UnkStruct_ov105_02241FF4), HEAP_ID_93); - memset(v1, 0, sizeof(UnkStruct_ov105_02241FF4)); - - v1->unk_124 = G3DPipeline_Init(HEAP_ID_93, TEXTURE_VRAM_SIZE_256K, PALETTE_VRAM_SIZE_32K, ov105_02245CD0); - v1->unk_4C = BgConfig_New(HEAP_ID_93); - v1->unk_00 = appMan; - - v2 = (UnkStruct_ov104_02234130 *)ApplicationManager_Args(appMan); - - v1->saveData = v2->saveData; - v1->unk_09 = v2->unk_04; - v1->unk_0A = v2->unk_05; - v1->unk_0B = v2->unk_06; - v1->unk_31C = v2->unk_08; - v1->unk_320 = v2->unk_0C; - v1->unk_330 = &v2->unk_10[0]; - v1->options = SaveData_GetOptions(v1->saveData); - v1->unk_14 = (4 * 2); - - if (ov105_022454F8(v1, 0) == 1) { - v1->unk_12 = (NELEMS(Unk_ov105_02246394)); - } else { - if (BattleFactory_IsMultiplayerChallenge(v1->unk_09) == 1) { - v1->unk_12 = (NELEMS(Unk_ov105_022462EC)); - v1->unk_1A = (NELEMS(Unk_ov105_022462FC)); - v1->unk_1B = (NELEMS(Unk_ov105_0224637C)); - } else { - v1->unk_12 = (NELEMS(Unk_ov105_02246314)); - v1->unk_1A = (NELEMS(Unk_ov105_02246340)); - v1->unk_1B = (NELEMS(Unk_ov105_02246350)); - } - } - - ov105_0224531C(v1); - - if (BattleFactory_IsMultiplayerChallenge(v1->unk_09) == 1) { - sub_0209BA80(v1); - } - - (*param1) = 0; - - return 1; -} - -int ov105_02241BD8(ApplicationManager *appMan, int *param1) -{ - UnkStruct_ov105_02241FF4 *v0 = ApplicationManager_Data(appMan); - - if (v0->unk_3B4 == 1) { - switch (*param1) { - case 6: - case 7: - case 8: - case 9: - if (v0->unk_13_6 == 0) { - ov105_02244778(v0, param1, 11); - } - break; - } - } - - switch (*param1) { - case 0: - if (ov105_02241FF4(v0) == 1) { - ov105_02244778(v0, param1, 1); - } - break; - case 2: - if (ov105_02242698(v0) == 1) { - ov105_02244778(v0, param1, 1); - } else { - return 0; - } - case 1: - if (ov105_022421F0(v0) == 1) { - if (ov105_022454F8(v0, 0) == 1) { - ov105_02244778(v0, param1, 3); - } else { - ov105_02244778(v0, param1, 6); - } - } - break; - case 3: - ov105_022457C0(v0); - - if (ov105_022426E0(v0) == 1) { - if (v0->unk_13_1 == 1) { - ov105_02244778(v0, param1, 2); - } else { - if (v0->unk_11 == ov105_02245508(v0->unk_09)) { - ov105_02244778(v0, param1, 4); - } else { - if (ov105_02245518(v0) == 1) { - ov105_02244778(v0, param1, 13); - } else { - ov105_02244778(v0, param1, 3); - } - } - } - } - break; - case 4: - ov105_022457C0(v0); - - if (ov105_02242D04(v0) == 1) { - if (v0->unk_11 == ov105_02245508(v0->unk_09)) { - ov105_02244778(v0, param1, 13); - } else { - ov105_02244778(v0, param1, 5); - } - } - break; - case 5: - if (ov105_02243144(v0) == 1) { - ov105_02244778(v0, param1, 3); - } - break; - case 6: - if (ov105_022434BC(v0) == 1) { - if (v0->unk_13_1 == 1) { - ov105_02244778(v0, param1, 2); - } else { - if (ov105_02245518(v0) == 1) { - ov105_02245528(v0, 0); - ov105_02244778(v0, param1, 7); - } else { - ov105_02244778(v0, param1, 10); - } - } - } - break; - case 7: - if (ov105_02243818(v0) == 1) { - if (ov105_02245518(v0) == 1) { - ov105_02245528(v0, 0); - ov105_02244778(v0, param1, 6); - } else { - if (BattleFactory_IsMultiplayerChallenge(v0->unk_09) == 1) { - v0->unk_13_3 = 0; - ov105_02244778(v0, param1, 11); - } else { - ov105_02244778(v0, param1, 13); - } - } - } - break; - case 8: - if (ov105_02243A3C(v0) == 1) { - if (ov105_02245518(v0) == 1) { - ov105_02245528(v0, 0); - ov105_02244778(v0, param1, 9); - } else { - if (v0->unk_11 == 0) { - ov105_02244778(v0, param1, 10); - } else { - if (BattleFactory_IsMultiplayerChallenge(v0->unk_09) == 1) { - ov105_02244778(v0, param1, 11); - } else { - ov105_02244778(v0, param1, 13); - } - } - } - } - break; - case 9: - if (ov105_02243E84(v0) == 1) { - if (ov105_02245518(v0) == 1) { - ov105_02245528(v0, 0); - ov105_02244778(v0, param1, 8); - } else { - if (BattleFactory_IsMultiplayerChallenge(v0->unk_09) == 1) { - v0->unk_13_3 = 0; - ov105_02244778(v0, param1, 11); - } else { - ov105_02244778(v0, param1, 13); - } - } - } - break; - case 10: - if (ov105_0224400C(v0) == 1) { - if (v0->unk_11 == 0) { - ov105_022424CC(v0); - ov105_02244778(v0, param1, 6); - } else { - ov105_02244778(v0, param1, 8); - } - } - break; - case 11: - if (ov105_0224435C(v0) == 1) { - if (v0->unk_3B4 == 1) { - ov105_02244778(v0, param1, 14); - } else { - ov105_02244778(v0, param1, 12); - } - } - break; - case 12: - if (ov105_0224439C(v0) == 1) { - ov105_02244778(v0, param1, 13); - } - break; - case 13: - if (ov105_022443DC(v0) == 1) { - return 1; - } - break; - case 14: - if (ov105_02244424(v0) == 1) { - ov105_02244778(v0, param1, 12); - } - break; - } - - SpriteList_Update(v0->unk_144.unk_00); - ov105_02245D50(v0->unk_128); - - return 0; -} - -int ov105_02241F54(ApplicationManager *appMan, int *param1) -{ - int v0; - UnkStruct_ov105_02241FF4 *v1 = ApplicationManager_Data(appMan); - - if (ov105_022454F8(v1, 0) == 1) { - for (v0 = 0; v0 < ov105_02245508(v1->unk_09); v0++) { - v1->unk_330[v0] = v1->unk_324[v0]; - } - } else { - for (v0 = 0; v0 < 2; v0++) { - v1->unk_330[v0] = v1->unk_324[v0]; - } - - if (v1->unk_13_3 == 0) { - v1->unk_330[0] = 0xff; - v1->unk_330[1] = 0xff; - } - } - - ov105_022451B4(v1); - - ApplicationManager_FreeData(appMan); - SetVBlankCallback(NULL, NULL); - Heap_Destroy(HEAP_ID_93); - Overlay_UnloadByID(FS_OVERLAY_ID(overlay104)); - - return 1; -} - -static BOOL ov105_02241FF4(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - const VecFx32 *v1; - - switch (param0->unk_08) { - case 0: - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - CommTool_ClearReceivedTempDataAllPlayers(); - CommTiming_StartSync(237); - } - - param0->unk_08++; - break; - case 1: - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - if (CommTiming_IsSyncState(237) == 1) { - CommTool_ClearReceivedTempDataAllPlayers(); - param0->unk_08++; - } - } else { - param0->unk_08++; - } - break; - case 2: - for (v0 = 0; v0 < param0->unk_12; v0++) { - v1 = ov105_02245F2C(param0->unk_2F4[v0]); - ov105_02245F5C(param0->unk_2F4[v0]); - } - - Bg_SetOffset(param0->unk_4C, BG_LAYER_MAIN_2, 0, 33 * 8); - PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 1); - StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_IN, FADE_TYPE_BRIGHTNESS_IN, COLOR_BLACK, 6, 1 * 3, HEAP_ID_93); - param0->unk_08++; - break; - case 3: - if (IsScreenFadeDone() == FALSE) { - break; - } - - Sound_PlayEffect(SEQ_SE_DP_ELEBETA2); - param0->unk_19 = 0; - param0->unk_08++; - break; - case 4: - if (ov105_02244780(param0) == 1) { - Sound_StopEffect(1554, 0); - Sound_PlayEffect(SEQ_SE_DP_KASYA); - - for (v0 = 0; v0 < param0->unk_12; v0++) { - ov105_02245F90(param0->unk_2F4[v0], 10); - } - - ov105_02244924(param0, 0); - - param0->unk_14 = (4 * 2); - param0->unk_19 = 0; - param0->unk_08++; - } - break; - case 5: - if (ov105_02245E48(param0->unk_314) == 1) { - break; - } - - ov105_02245A30(param0); - param0->unk_19 = 0; - param0->unk_08++; - break; - case 6: - if (param0->unk_19 == 0) { - ov105_02244B90(param0, 3); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, 0); - ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 0), 21, 11); - PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 0); - PokemonSpriteManager_StartFadeAll(param0->unk_128, 16, 0, 1, 0xffff); - } - - if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { - (void)0; - } - - param0->unk_19++; - - if (param0->unk_19 < 2) { - break; - } - - ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 0), 21, 11); - param0->unk_19 = 0; - ov105_02245A64(param0); - - return 1; - } - - return 0; -} - -static BOOL ov105_022421F0(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - - switch (param0->unk_08) { - case 0: - if (ov105_022454F8(param0, 0) == 1) { - ov105_0224227C(param0); - } else { - ov105_022424CC(param0); - } - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - ov105_02244F84(param0, ¶m0->unk_50[1], 0, 0, 0); - } - - if (param0->unk_13_4 == 1) { - StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_IN, FADE_TYPE_BRIGHTNESS_IN, COLOR_BLACK, 6, 1 * 3, HEAP_ID_93); - } - - param0->unk_13_4 = 1; - param0->unk_08++; - break; - case 1: - if (IsScreenFadeDone() == TRUE) { - return 1; - } - break; - } - - return 0; -} - -static void ov105_0224227C(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - u8 v1 = ov104_0223AA50(param0->unk_09); - - ov105_02245528(param0, 0); - param0->unk_30C = ov105_02245FB8(¶m0->unk_144, param0->unk_12, param0->unk_12, 0, param0->unk_334, Unk_ov105_02246394, NULL); - ov105_02244F0C(param0, ¶m0->unk_50[0], 0, 0, 0); - - for (v0 = 0; v0 < param0->unk_11; v0++) { - ov105_02245F44(param0->unk_2F4[param0->unk_324[v0]]); - ov105_02245FAC(param0->unk_2F4[param0->unk_324[v0]], 0); - ov105_02245F90(param0->unk_2F4[param0->unk_324[v0]], 7); - ov105_02244FF8(param0, ¶m0->unk_50[2 + v0], param0->unk_324[v0], 0, 0, 15, 2, 0, 0, param0->unk_31C); - } - - ov105_02244FF8(param0, ¶m0->unk_50[2 + param0->unk_11], ov105_022461A0(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); - ov105_0224628C(¶m0->unk_50[5], Options_Frame(param0->options)); - ov105_02244EE8(param0, 0, param0->unk_11 + 1); - - param0->unk_10 = ov105_02244D14(param0, 0); - - if (param0->unk_13_1 == 1) { - ov105_022461A4(param0->unk_30C, 1); - ov105_02244DF0(param0); - - param0->unk_310 = ov105_02245FB8(¶m0->unk_144, NELEMS(Unk_ov105_02246308), NELEMS(Unk_ov105_02246308), 1, 0, Unk_ov105_02246308, NULL); - - if (param0->unk_18 != 0) { - for (v0 = 0; v0 < v1; v0++) { - Window_FillTilemap(¶m0->unk_50[8 + v0], 0); - - if (v0 < param0->unk_18) { - ov105_022450DC(param0, ¶m0->unk_50[8 + v0], 0, 0, 15, 2, 0, 0, param0->unk_3B6[v0], param0->unk_3BA[v0]); - } - - Window_ScheduleCopyToVRAM(¶m0->unk_50[8 + v0]); - } - } - } - - return; -} - -static void ov105_0224246C(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - - for (v0 = 0; v0 < param0->unk_12; v0++) { - param0->unk_2F4[v0] = ov105_02245934(param0, v0); - ov105_02245EBC(param0->unk_2F4[v0], 1); - } - - return; -} - -static void ov105_022424A0(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_31C, param0->unk_334), 120, 43, 0); - return; -} - -static void ov105_022424CC(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - - ov105_02245528(param0, 0); - ov105_0224628C(¶m0->unk_50[5], Options_Frame(param0->options)); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - param0->unk_30C = ov105_02245FB8(¶m0->unk_144, param0->unk_1A, NELEMS(Unk_ov105_02246340) - 1, 2, param0->unk_334, Unk_ov105_02246340, Unk_ov105_022462D0); - } else { - param0->unk_30C = ov105_02245FB8(¶m0->unk_144, param0->unk_1A, NELEMS(Unk_ov105_022462FC) - 1, 2, param0->unk_334, Unk_ov105_022462FC, Unk_ov105_022462CC); - } - - ov105_02244F0C(param0, ¶m0->unk_50[0], 0, 0, 0); - ov105_02244FF8(param0, ¶m0->unk_50[2], ov105_022461A0(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); - ov105_02246260(param0->unk_4C, ¶m0->unk_50[7]); - - param0->unk_10 = ov105_02244C60(param0, ¶m0->unk_50[7], 19, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); - Window_ScheduleCopyToVRAM(¶m0->unk_50[7]); - param0->unk_10 = ov105_02244D14(param0, 9); - - if (param0->unk_13_1 == 1) { - ov105_02244DF0(param0); - param0->unk_310 = ov105_02245FB8(¶m0->unk_144, NELEMS(Unk_ov105_02246308), NELEMS(Unk_ov105_02246308), 1, 0, Unk_ov105_02246308, NULL); - } - - return; -} - -static void ov105_0224260C(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - - for (v0 = 0; v0 < param0->unk_12; v0++) { - param0->unk_2F4[v0] = ov105_02245934(param0, v0); - ov105_02245EBC(param0->unk_2F4[v0], 1); - - if (param0->unk_13_2 == 0) { - ov105_02245F44(param0->unk_2F4[v0]); - ov105_02245FAC(param0->unk_2F4[v0], 0); - ov105_02245F90(param0->unk_2F4[v0], 6); - } - } - - return; -} - -static void ov105_0224266C(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_31C, param0->unk_334), 120, 43, 1); - return; -} - -static BOOL ov105_02242698(UnkStruct_ov105_02241FF4 *param0) -{ - switch (param0->unk_08) { - case 0: - - if (ApplicationManager_Exec(param0->unk_04) == 1) { - param0->unk_334 = param0->unk_140->monIndex; - Heap_Free(param0->unk_140); - Heap_Free(param0->unk_04); - param0->unk_04 = NULL; - ov105_022452A0(param0); - param0->unk_13_6 = 0; - return 1; - } - break; - } - - return 0; -} - -static BOOL ov105_022426E0(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - u32 v1; - - switch (param0->unk_08) { - case 0: - if (param0->unk_13_1 == 0) { - param0->unk_08 = 1; - } else { - param0->unk_08 = 2; - } - - param0->unk_13_1 = 0; - break; - case 1: - ov105_02246080(param0->unk_30C); - - if (gSystem.pressedKeys & (PAD_KEY_LEFT | PAD_KEY_RIGHT)) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov105_022453F8(param0, param0->unk_11, ov105_022461A0(param0->unk_30C), 0, param0->unk_31C); - } - - if (gSystem.pressedKeys & PAD_BUTTON_A) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov105_022461A4(param0->unk_30C, 1); - ov105_02244DF0(param0); - - param0->unk_310 = ov105_02245FB8(¶m0->unk_144, NELEMS(Unk_ov105_02246308), NELEMS(Unk_ov105_02246308), 1, 0, Unk_ov105_02246308, NULL); - param0->unk_08++; - } else if (gSystem.pressedKeys & PAD_BUTTON_B) { - if (param0->unk_11 > 0) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov105_0224296C(param0); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - ov105_02245620(param0, 8, 0); - } - - return 1; - } - } - break; - case 2: - v1 = Menu_ProcessInput(param0->unk_FC); - ov105_02246080(param0->unk_310); - - switch (v1) { - case 0xffffffff: - break; - case 0: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - param0->unk_13_6 = 1; - StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, HEAP_ID_93); - param0->unk_08++; - break; - case 1: - Menu_Free(param0->unk_FC, NULL); - - ov105_02245A98(param0->unk_F0.window); - ov105_02242A58(param0); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - ov105_02245620(param0, 8, 0); - } - - return 1; - case 3: - Menu_Free(param0->unk_FC, NULL); - - ov105_02245A98(param0->unk_F0.window); - ov105_02242B54(param0); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - ov105_02245620(param0, 8, 0); - } - - return 1; - case 0xfffffffe: - case 2: - default: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_022461A4(param0->unk_30C, 0); - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - return 1; - } - break; - case 3: - if (IsScreenFadeDone() == TRUE) { - ov105_02245464(param0); - ov105_022451B4(param0); - param0->unk_04 = ApplicationManager_New(&gPokemonSummaryScreenApp, param0->unk_140, HEAP_ID_93); - param0->unk_13_1 = 1; - return 1; - } - break; - case 4: - if (param0->unk_04 == NULL) { - return 1; - } - break; - case 5: - if (IsScreenFadeDone() == TRUE) { - param0->unk_08 = 2; - } - break; - } - - return 0; -} - -static void ov105_0224296C(UnkStruct_ov105_02241FF4 *param0) -{ - Window_FillTilemap(¶m0->unk_50[2 + param0->unk_11], 0); - Window_ScheduleCopyToVRAM(¶m0->unk_50[2 + param0->unk_11]); - - param0->unk_11--; - Window_FillTilemap(¶m0->unk_50[2 + param0->unk_11], 0); - - ov105_02244FF8(param0, ¶m0->unk_50[2 + param0->unk_11], ov105_022461A0(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); - ov105_02244EE8(param0, 0, param0->unk_11 + 1); - - param0->unk_10 = ov105_02244D14(param0, 0); - - ov105_02245F50(param0->unk_2F4[param0->unk_324[param0->unk_11]]); - ov105_02245FAC(param0->unk_2F4[param0->unk_324[param0->unk_11]], 1); - ov105_02245F90(param0->unk_2F4[param0->unk_324[param0->unk_11]], 6); - - param0->unk_324[param0->unk_11] = 0; - return; -} - -static void ov105_02242A58(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_02245F44(param0->unk_2F4[ov105_022461A0(param0->unk_30C)]); - ov105_02245FAC(param0->unk_2F4[ov105_022461A0(param0->unk_30C)], 0); - ov105_02245F90(param0->unk_2F4[ov105_022461A0(param0->unk_30C)], 7); - - param0->unk_324[param0->unk_11] = ov105_022461A0(param0->unk_30C); - param0->unk_11++; - - if (param0->unk_11 == ov105_02245508(param0->unk_09)) { - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - } else { - ov105_022461A4(param0->unk_30C, 0); - ov105_02246060(param0->unk_310); - - param0->unk_310 = NULL; - - ov105_02244FF8(param0, ¶m0->unk_50[2 + param0->unk_11], ov105_022461A0(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); - ov105_02244EE8(param0, 0, param0->unk_11 + 1); - - param0->unk_10 = ov105_02244D14(param0, 0); - } - - return; -} - -static void ov105_02242B54(UnkStruct_ov105_02241FF4 *param0) -{ - u8 v0; - int v1; - - ov105_02245F50(param0->unk_2F4[ov105_022461A0(param0->unk_30C)]); - ov105_02245FAC(param0->unk_2F4[ov105_022461A0(param0->unk_30C)], 1); - ov105_02245F90(param0->unk_2F4[ov105_022461A0(param0->unk_30C)], 6); - - if (param0->unk_11 >= 2) { - if (param0->unk_324[0] == ov105_022461A0(param0->unk_30C)) { - param0->unk_324[0] = param0->unk_324[1]; - PokemonSprite_Delete(param0->unk_12C[0]); - ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_31C, ov105_022461A0(param0->unk_30C)), 120, 43, 0); - } - } - - param0->unk_11--; - param0->unk_324[param0->unk_11] = 0; - - ov105_022461A4(param0->unk_30C, 0); - ov105_02246060(param0->unk_310); - - param0->unk_310 = NULL; - v0 = ov105_02245508(param0->unk_09); - - for (v1 = 0; v1 < v0; v1++) { - Window_FillTilemap(¶m0->unk_50[2 + v1], 0); - } - - for (v1 = 0; v1 < param0->unk_11; v1++) { - ov105_02244FF8(param0, ¶m0->unk_50[2 + v1], param0->unk_324[v1], 0, 0, 15, 2, 0, 0, param0->unk_31C); - } - - ov105_02244FF8(param0, ¶m0->unk_50[2 + param0->unk_11], ov105_022461A0(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); - - for (v1 = 0; v1 < v0; v1++) { - Window_ScheduleCopyToVRAM(¶m0->unk_50[2 + v1]); - } - - ov105_02244EE8(param0, 0, param0->unk_11 + 1); - param0->unk_10 = ov105_02244D14(param0, 0); - - return; -} - -static BOOL ov105_02242D04(UnkStruct_ov105_02241FF4 *param0) -{ - u8 v0; - u32 v1; - int v2; - int v3[3]; - - v0 = ov104_0223AA50(param0->unk_09); - - switch (param0->unk_08) { - case 0: - ov105_02246074(param0->unk_30C, 0); - param0->unk_13_5 = 1; - Window_ClearAndCopyToVRAM(¶m0->unk_50[1]); - Window_ClearAndCopyToVRAM(¶m0->unk_50[8]); - Window_ClearAndCopyToVRAM(¶m0->unk_50[9]); - - for (v2 = 0; v2 < param0->unk_11; v2++) { - Window_FillTilemap(¶m0->unk_50[2 + v2], 0); - Window_ScheduleCopyToVRAM(¶m0->unk_50[2 + v2]); - } - - Window_FillTilemap(¶m0->unk_50[0], 0); - Window_ScheduleCopyToVRAM(¶m0->unk_50[0]); - - ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 0), 21, 11); - PokemonSpriteManager_StartFadeAll(param0->unk_128, 0, 16, 0, 0xffff); - - param0->unk_19 = 0; - param0->unk_08++; - break; - case 1: - param0->unk_19++; - - if (param0->unk_19 < 2) { - break; - } - - PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 1); - - ov105_02244924(param0, 1); - ov105_022448F4(param0, 3, ov105_02245538(param0, 0, 0), 21, 11); - ov105_02244BE4(param0, 3); - param0->unk_19 = 0; - param0->unk_08++; - break; - case 2: - if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { - (void)0; - } - - if (ov105_02245E48(param0->unk_314) == 1) { - break; - } - - ov105_02245A30(param0); - PokemonSprite_Delete(param0->unk_12C[0]); - - v3[0] = 44; - v3[1] = 128; - v3[2] = 212; - - for (v2 = 0; v2 < v0; v2++) { - ov105_022455C4(param0, v2, Party_GetPokemonBySlotIndex(param0->unk_31C, param0->unk_324[v2]), v3[v2], 43, 0); - PokemonSprite_SetAttribute(param0->unk_12C[v2], MON_SPRITE_HIDE, 1); - } - - ov105_02244924(param0, 4); - param0->unk_08++; - break; - case 3: - if (ov105_02245E48(param0->unk_314) == 1) { - break; - } - - ov105_02245A30(param0); - - param0->unk_19 = 0; - param0->unk_08++; - break; - case 4: - if (param0->unk_19 == 0) { - ov105_02244C0C(param0, 3); - - for (v2 = 0; v2 < v0; v2++) { - PokemonSprite_SetAttribute(param0->unk_12C[v2], MON_SPRITE_HIDE, 0); - } - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 32, 11); - } else { - ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 21, 11); - } - - PokemonSpriteManager_StartFadeAll(param0->unk_128, 16, 0, 1, 0xffff); - } - - if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { - (void)0; - } - - param0->unk_19++; - - if (param0->unk_19 < 21) { - break; - } - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 1), 32, 11); - } else { - ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 1), 21, 11); - } - - param0->unk_13_5 = 0; - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - param0->unk_3BF = 1; - ov105_022457C0(param0); - } - - ov105_02244EE8(param0, 0, v0); - param0->unk_10 = ov105_02244D14(param0, 1); - ov105_02244E94(param0); - - param0->unk_310 = ov105_02245FB8(¶m0->unk_144, NELEMS(Unk_ov105_022462F4), NELEMS(Unk_ov105_022462F4), 1, 0, Unk_ov105_022462F4, NULL); - param0->unk_19 = 0; - param0->unk_08++; - break; - case 5: - v1 = Menu_ProcessInput(param0->unk_FC); - ov105_02246080(param0->unk_310); - - switch (v1) { - case 0xffffffff: - break; - case 0: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - param0->unk_08++; - break; - case 0xfffffffe: - case 1: - default: - ov105_02246074(param0->unk_30C, 1); - Menu_Free(param0->unk_FC, NULL); - - ov105_02245A98(param0->unk_F0.window); - ov105_02246060(param0->unk_310); - - param0->unk_310 = NULL; - param0->unk_11--; - param0->unk_324[param0->unk_11] = 0; - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - ov105_02245620(param0, 8, 0); - } - - return 1; - } - break; - case 6: - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - return 1; - } - - if (ov105_02245620(param0, 8, 0) == 1) { - param0->unk_10 = ov105_02244D14(param0, 2); - - CommTool_ClearReceivedTempDataAllPlayers(); - CommTiming_StartSync(164); - param0->unk_08++; - } - break; - case 7: - if (CommTiming_IsSyncState(164) == 1) { - CommTool_ClearReceivedTempDataAllPlayers(); - return 1; - } - break; - } - - return 0; -} - -static BOOL ov105_02243144(UnkStruct_ov105_02241FF4 *param0) -{ - u8 v0; - int v1; - - v0 = ov104_0223AA50(param0->unk_09); - - switch (param0->unk_08) { - case 0: - param0->unk_13_5 = 1; - - Window_ClearAndCopyToVRAM(¶m0->unk_50[1]); - Window_ClearAndCopyToVRAM(¶m0->unk_50[8]); - Window_ClearAndCopyToVRAM(¶m0->unk_50[9]); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 32, 11); - } else { - ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 21, 11); - } - - PokemonSpriteManager_StartFadeAll(param0->unk_128, 0, 16, 0, 0xffff); - - param0->unk_19 = 0; - param0->unk_08++; - break; - case 1: - param0->unk_19++; - - if (param0->unk_19 < 2) { - break; - } - - for (v1 = 0; v1 < v0; v1++) { - PokemonSprite_Delete(param0->unk_12C[v1]); - } - - ov105_02244924(param0, 5); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - ov105_022448F4(param0, 3, ov105_02245538(param0, 0, 0), 32, 11); - } else { - ov105_022448F4(param0, 3, ov105_02245538(param0, 0, 0), 21, 11); - } - - ov105_02244BE4(param0, 3); - - param0->unk_19 = 0; - param0->unk_08++; - - break; - case 2: - if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { - (void)0; - } - - if (ov105_02245E48(param0->unk_314) == 1) { - break; - } - - ov105_02245A30(param0); - ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_31C, ov105_022461A0(param0->unk_30C)), 120, 43, 0); - - PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 1); - ov105_02244924(param0, 0); - - param0->unk_08++; - break; - case 3: - if (ov105_02245E48(param0->unk_314) == 1) { - break; - } - - ov105_02245A30(param0); - param0->unk_19 = 0; - param0->unk_08++; - break; - case 4: - if (param0->unk_19 == 0) { - ov105_02244B90(param0, 3); - PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 0); - ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 0), 21, 11); - PokemonSpriteManager_StartFadeAll(param0->unk_128, 16, 0, 1, 0xffff); - } - - if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { - (void)0; - } - - param0->unk_19++; - - if (param0->unk_19 < 21) { - break; - } - - ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 0), 21, 11); - param0->unk_13_5 = 0; - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - param0->unk_3BF = 1; - ov105_022457C0(param0); - } - - ov105_022433AC(param0); - return 1; - } - - return 0; -} - -static void ov105_022433AC(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - u8 v1 = ov104_0223AA50(param0->unk_09); - - for (v0 = 0; v0 < param0->unk_11; v0++) { - ov105_02244FF8(param0, ¶m0->unk_50[2 + v0], param0->unk_324[v0], 0, 0, 15, 2, 0, 0, param0->unk_31C); - } - - ov105_02244FF8(param0, ¶m0->unk_50[2 + param0->unk_11], ov105_022461A0(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); - ov105_02244F0C(param0, ¶m0->unk_50[0], 0, 0, 0); - ov105_022461A4(param0->unk_30C, 0); - ov105_02245F50(param0->unk_2F4[ov105_022461A0(param0->unk_30C)]); - ov105_02245FAC(param0->unk_2F4[ov105_022461A0(param0->unk_30C)], 1); - ov105_02245F90(param0->unk_2F4[ov105_022461A0(param0->unk_30C)], 6); - ov105_02244EE8(param0, 0, param0->unk_11 + 1); - - param0->unk_10 = ov105_02244D14(param0, 0); - return; -} - -static BOOL ov105_022434BC(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - u32 v1; - - switch (param0->unk_08) { - case 0: - ov105_02245528(param0, 0); - - if (param0->unk_13_1 == 0) { - param0->unk_08 = 1; - } else { - param0->unk_08 = 2; - } - - param0->unk_13_1 = 0; - break; - case 1: - ov105_02246080(param0->unk_30C); - - if (gSystem.pressedKeys & (PAD_KEY_LEFT | PAD_KEY_RIGHT | PAD_KEY_UP | PAD_KEY_DOWN)) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov105_022453F8(param0, param0->unk_11, ov105_022461A0(param0->unk_30C), 1, param0->unk_31C); - } - - if (gSystem.pressedKeys & PAD_BUTTON_A) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - - if (ov105_022461A0(param0->unk_30C) == (param0->unk_1A - 1)) { - ov105_02245528(param0, 1); - return 1; - } else { - ov105_022461A4(param0->unk_30C, 1); - ov105_02244DF0(param0); - - param0->unk_310 = ov105_02245FB8(¶m0->unk_144, NELEMS(Unk_ov105_02246308), NELEMS(Unk_ov105_02246308), 1, 0, Unk_ov105_02246308, NULL); - param0->unk_08++; - } - } else if (gSystem.pressedKeys & PAD_BUTTON_B) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov105_02245528(param0, 1); - return 1; - } - break; - case 2: - v1 = Menu_ProcessInput(param0->unk_FC); - ov105_02246080(param0->unk_310); - - switch (v1) { - case 0xffffffff: - break; - case 0: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - param0->unk_13_6 = 1; - StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, HEAP_ID_93); - param0->unk_08++; - break; - case 4: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_02243738(param0); - return 1; - case 0xfffffffe: - case 2: - default: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_022461A4(param0->unk_30C, 0); - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - ov105_02246260(param0->unk_4C, ¶m0->unk_50[7]); - param0->unk_10 = ov105_02244C60(param0, ¶m0->unk_50[7], 19, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); - Window_ScheduleCopyToVRAM(¶m0->unk_50[7]); - param0->unk_08 = 1; - break; - } - break; - case 3: - if (IsScreenFadeDone() == TRUE) { - ov105_02245464(param0); - ov105_022451B4(param0); - param0->unk_04 = ApplicationManager_New(&gPokemonSummaryScreenApp, param0->unk_140, HEAP_ID_93); - param0->unk_13_1 = 1; - return 1; - } - break; - case 4: - if (param0->unk_04 == NULL) { - return 1; - } - break; - case 5: - if (IsScreenFadeDone() == TRUE) { - param0->unk_08 = 2; - } - break; - } - - return 0; -} - -static void ov105_02243738(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_02245F44(param0->unk_2F4[ov105_022461A0(param0->unk_30C)]); - ov105_02245FAC(param0->unk_2F4[ov105_022461A0(param0->unk_30C)], 0); - ov105_02245F90(param0->unk_2F4[ov105_022461A0(param0->unk_30C)], 6); - ov105_02244FF8(param0, ¶m0->unk_50[2 + param0->unk_11], ov105_022461A0(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); - - param0->unk_324[param0->unk_11] = ov105_022461A0(param0->unk_30C); - param0->unk_11++; - - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - - ov105_02246060(param0->unk_30C); - param0->unk_30C = NULL; - param0->unk_13_2 = 1; - - Window_FillTilemap(¶m0->unk_50[2], 0); - Window_ScheduleCopyToVRAM(¶m0->unk_50[2]); - - return; -} - -static BOOL ov105_02243818(UnkStruct_ov105_02241FF4 *param0) -{ - int v0, v1; - u32 v2; - - switch (param0->unk_08) { - case 0: - - Window_FillTilemap(¶m0->unk_50[2], 0); - Window_ScheduleCopyToVRAM(¶m0->unk_50[2 + param0->unk_11]); - PokemonSprite_Delete(param0->unk_12C[0]); - - param0->unk_10 = ov105_02244D14(param0, 10); - - ov105_02246074(param0->unk_30C, 0); - ov105_022461A4(param0->unk_30C, 1); - ov105_02244E94(param0); - param0->unk_310 = ov105_02245FB8(¶m0->unk_144, NELEMS(Unk_ov105_022462F4), NELEMS(Unk_ov105_022462F4), 1, 0, Unk_ov105_022462F4, NULL); - param0->unk_08++; - break; - case 1: - v2 = Menu_ProcessInput(param0->unk_FC); - ov105_02246080(param0->unk_310); - - switch (v2) { - case 0xffffffff: - break; - case 0: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - param0->unk_13_3 = 0; - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - param0->unk_10 = ov105_02244D14(param0, 2); - } - - param0->unk_08++; - break; - case 0xfffffffe: - case 1: - default: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - ov105_0224396C(param0); - param0->unk_08++; - break; - } - break; - case 2: - return 1; - } - - return 0; -} - -static void ov105_0224396C(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_022461C0(param0->unk_30C, 0); - ov105_02244FF8(param0, ¶m0->unk_50[2], ov105_022461A0(param0->unk_30C), 0, 0, 15, 2, 0, 0, param0->unk_31C); - ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_31C, ov105_022461A0(param0->unk_30C)), 120, 43, 1); - ov105_02246074(param0->unk_30C, 1); - ov105_022461A4(param0->unk_30C, 0); - ov105_02245528(param0, 1); - ov105_02246260(param0->unk_4C, ¶m0->unk_50[7]); - - param0->unk_10 = ov105_02244C60(param0, ¶m0->unk_50[7], 19, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); - Window_ScheduleCopyToVRAM(¶m0->unk_50[7]); - param0->unk_10 = ov105_02244D14(param0, 9); - - return; -} - -static BOOL ov105_02243A3C(UnkStruct_ov105_02241FF4 *param0) -{ - int v0, v1; - u32 v2; - u8 v3; - - switch (param0->unk_08) { - case 0: - ov105_02246260(param0->unk_4C, ¶m0->unk_50[7]); - - param0->unk_10 = ov105_02244C60(param0, ¶m0->unk_50[7], 23, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); - param0->unk_10 = ov105_02244CC0(param0, ¶m0->unk_50[7], 24, 1, 1 + 16, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); - - Window_ScheduleCopyToVRAM(¶m0->unk_50[7]); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - param0->unk_30C = ov105_02245FB8(¶m0->unk_144, param0->unk_1B, NELEMS(Unk_ov105_02246350) - 2, 2, 0, Unk_ov105_02246350, Unk_ov105_022462D4); - } else { - param0->unk_30C = ov105_02245FB8(¶m0->unk_144, param0->unk_1B, NELEMS(Unk_ov105_0224637C) - 2, 2, 0, Unk_ov105_0224637C, Unk_ov105_022462E4); - } - - v3 = ov105_022461A0(param0->unk_30C); - - ov105_02244FF8(param0, ¶m0->unk_50[2], v3, 0, 0, 15, 2, 0, 0, param0->unk_320); - ov105_0224628C(¶m0->unk_50[5], Options_Frame(param0->options)); - - param0->unk_10 = ov105_02244D14(param0, 13); - param0->unk_08++; - - break; - case 1: - ov105_02246080(param0->unk_30C); - - if (gSystem.pressedKeys & (PAD_KEY_UP | PAD_KEY_DOWN)) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov105_022453F8(param0, 0, ov105_022461A0(param0->unk_30C), 0, param0->unk_320); - } - - if (gSystem.pressedKeys & (PAD_KEY_LEFT | PAD_KEY_RIGHT)) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov105_022453F8(param0, 0, ov105_022461A0(param0->unk_30C), 0, param0->unk_320); - } - - if (gSystem.pressedKeys & PAD_BUTTON_A) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - - if (ov105_022461A0(param0->unk_30C) == (param0->unk_1B - 1)) { - ov105_02245528(param0, 1); - return 1; - } else if (ov105_022461A0(param0->unk_30C) == (param0->unk_1B - 2)) { - ov105_02243D20(param0); - return 1; - } else { - ov105_022461A4(param0->unk_30C, 1); - ov105_02244E94(param0); - - param0->unk_310 = ov105_02245FB8(¶m0->unk_144, NELEMS(Unk_ov105_022462F4), NELEMS(Unk_ov105_022462F4), 1, 0, Unk_ov105_022462F4, NULL); - param0->unk_10 = ov105_02244D14(param0, 14); - param0->unk_08++; - } - } else if (gSystem.pressedKeys & PAD_BUTTON_B) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov105_02245528(param0, 1); - return 1; - } - break; - case 2: - v2 = Menu_ProcessInput(param0->unk_FC); - ov105_02246080(param0->unk_310); - - switch (v2) { - case 0xffffffff: - break; - - case 0: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_02243D84(param0); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - param0->unk_10 = ov105_02244D14(param0, 2); - } - - param0->unk_08++; - break; - case 0xfffffffe: - case 1: - default: - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_02243DE4(param0); - param0->unk_08 = 1; - break; - } - break; - case 3: - return 1; - } - - return 0; -} - -static void ov105_02243D20(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_02246060(param0->unk_30C); - - param0->unk_30C = NULL; - param0->unk_13_2 = 0; - - Window_FillTilemap(¶m0->unk_50[2], 0); - Window_ScheduleCopyToVRAM(¶m0->unk_50[2]); - PokemonSprite_Delete(param0->unk_12C[0]); - - Window_FillTilemap(¶m0->unk_50[7], 15); - Window_EraseMessageBox(¶m0->unk_50[7], 1); - Window_ClearAndScheduleCopyToVRAM(¶m0->unk_50[7]); - - param0->unk_11--; - param0->unk_324[0] = 0; - - return; -} - -static void ov105_02243D84(UnkStruct_ov105_02241FF4 *param0) -{ - param0->unk_13_3 = 1; - param0->unk_324[param0->unk_11] = ov105_022461A0(param0->unk_30C); - param0->unk_11++; - - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - ov105_02246074(param0->unk_30C, 0); - - Window_FillTilemap(¶m0->unk_50[2], 0); - Window_ScheduleCopyToVRAM(¶m0->unk_50[2]); - PokemonSprite_Delete(param0->unk_12C[0]); - - return; -} - -static void ov105_02243DE4(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - ov105_022461A4(param0->unk_30C, 0); - ov105_02246260(param0->unk_4C, ¶m0->unk_50[7]); - param0->unk_10 = ov105_02244C60(param0, ¶m0->unk_50[7], 23, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); - param0->unk_10 = ov105_02244CC0(param0, ¶m0->unk_50[7], 24, 1, 1 + 16, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_SYSTEM); - ov105_0224628C(¶m0->unk_50[5], Options_Frame(param0->options)); - param0->unk_10 = ov105_02244D14(param0, 13); - Window_ScheduleCopyToVRAM(¶m0->unk_50[7]); -} - -static BOOL ov105_02243E84(UnkStruct_ov105_02241FF4 *param0) -{ - int v0, v1; - u32 v2; - - switch (param0->unk_08) { - case 0: - Window_FillTilemap(¶m0->unk_50[2], 0); - Window_ScheduleCopyToVRAM(¶m0->unk_50[2]); - PokemonSprite_Delete(param0->unk_12C[0]); - - ov105_0224628C(¶m0->unk_50[5], Options_Frame(param0->options)); - param0->unk_10 = ov105_02244D14(param0, 10); - ov105_02246074(param0->unk_30C, 0); - - ov105_02244E94(param0); - param0->unk_310 = ov105_02245FB8(¶m0->unk_144, NELEMS(Unk_ov105_022462F4), NELEMS(Unk_ov105_022462F4), 1, 0, Unk_ov105_022462F4, NULL); - param0->unk_08++; - break; - - case 1: - v2 = Menu_ProcessInput(param0->unk_FC); - ov105_02246080(param0->unk_310); - - switch (v2) { - case 0xffffffff: - break; - case 0: - Menu_Free(param0->unk_FC, NULL); - - ov105_02245A98(param0->unk_F0.window); - ov105_02246060(param0->unk_310); - - param0->unk_310 = NULL; - param0->unk_13_3 = 0; - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - param0->unk_10 = ov105_02244D14(param0, 2); - } - - param0->unk_08++; - break; - case 0xfffffffe: - case 1: - default: - Menu_Free(param0->unk_FC, NULL); - - ov105_02246060(param0->unk_30C); - param0->unk_30C = NULL; - - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - - ov105_02243FDC(param0); - param0->unk_08++; - break; - } - break; - case 2: - return 1; - } - - return 0; -} - -static void ov105_02243FDC(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_320, 0), 120, 43, 0); - ov105_02245528(param0, 1); - - return; -} - -static BOOL ov105_0224400C(UnkStruct_ov105_02241FF4 *param0) -{ - u8 v0; - int v1, v2, v3, v4; - VecFx32 v5; - const VecFx32 *v6; - - v0 = ov104_0223AA50(param0->unk_09); - - switch (param0->unk_08) { - case 0: - param0->unk_13_5 = 1; - - Window_ClearAndCopyToVRAM(¶m0->unk_50[1]); - Window_ClearAndCopyToVRAM(¶m0->unk_50[8]); - Window_ClearAndCopyToVRAM(¶m0->unk_50[9]); - - Window_FillTilemap(¶m0->unk_50[0], 0); - Window_ScheduleCopyToVRAM(¶m0->unk_50[0]); - - Window_EraseMessageBox(¶m0->unk_50[5], 1); - Window_ClearAndScheduleCopyToVRAM(¶m0->unk_50[5]); - - ov105_02246244(param0->unk_50); - ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 0), 21, 11); - - PokemonSpriteManager_StartFadeAll(param0->unk_128, 0, 16, 0, 0xffff); - - param0->unk_19 = 0; - param0->unk_08++; - break; - case 1: - param0->unk_19++; - - if (param0->unk_19 < 2) { - break; - } - - PokemonSprite_Delete(param0->unk_12C[0]); - - ov105_02244924(param0, 1); - ov105_022448F4(param0, 3, ov105_02245538(param0, 0, 0), 21, 11); - ov105_02244BE4(param0, 3); - - param0->unk_19 = 0; - param0->unk_08++; - break; - case 2: - if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { - (void)0; - } - - if (ov105_02245E48(param0->unk_314) == 1) { - break; - } - - ov105_02245A30(param0); - ov105_02244AA8(param0, 1); - ov105_02244A60(param0, 2); - ov105_02244A18(param0, 3); - - Bg_SetOffset(param0->unk_4C, BG_LAYER_MAIN_2, 0, param0->unk_0C); - Sound_PlayEffect(SEQ_SE_DP_ELEBETA2); - - param0->unk_19 = 0; - param0->unk_08++; - break; - case 3: - if (ov105_02244830(param0) == 1) { - Sound_StopEffect(1554, 0); - Sound_PlayEffect(SEQ_SE_DP_KASYA); - - param0->unk_14 = (4 * 2); - - for (v1 = 0; v1 < param0->unk_12; v1++) { - param0->unk_2F4[v1] = ov105_02245EA8(param0->unk_2F4[v1]); - param0->unk_2F4[v1] = NULL; - } - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - if (param0->unk_12 == (NELEMS(Unk_ov105_022462EC))) { - param0->unk_12 = (NELEMS(Unk_ov105_02246320)); - } else { - param0->unk_12 = (NELEMS(Unk_ov105_022462EC)); - } - } - - ov105_0224260C(param0); - - for (v1 = 0; v1 < param0->unk_12; v1++) { - ov105_02245F5C(param0->unk_2F4[v1]); - } - - Sound_PlayEffect(SEQ_SE_DP_ELEBETA2); - - param0->unk_19 = 0; - param0->unk_08++; - } - break; - case 4: - if (ov105_02244780(param0) == 1) { - Sound_StopEffect(1554, 0); - Sound_PlayEffect(SEQ_SE_DP_KASYA); - - for (v1 = 0; v1 < param0->unk_12; v1++) { - ov105_02245F90(param0->unk_2F4[v1], 10); - } - - param0->unk_14 = (4 * 2); - - ov105_02244924(param0, 0); - - param0->unk_19 = 0; - param0->unk_08++; - } - break; - case 5: - if (ov105_02245E48(param0->unk_314) == 1) { - break; - } - - ov105_02245A30(param0); - - param0->unk_19 = 0; - param0->unk_08++; - break; - case 6: - if (param0->unk_19 == 0) { - ov105_02244B90(param0, 3); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, 0); - - if (param0->unk_13_2 == 0) { - ov105_0224266C(param0); - } else { - ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param0->unk_320, 0), 120, 43, 0); - } - - PokemonSprite_SetAttribute(param0->unk_12C[0], MON_SPRITE_HIDE, 0); - PokemonSpriteManager_StartFadeAll(param0->unk_128, 16, 0, 1, 0xffff); - - ov105_022448F4(param0, 3, ov105_02245538(param0, 1, 1), 21, 11); - } - - if (PokemonSprite_IsFadeActive(param0->unk_12C[0])) { - (void)0; - } - - param0->unk_19++; - - if (param0->unk_19 < 21) { - break; - } - - ov105_022448F4(param0, 3, ov105_02245538(param0, 2, 1), 21, 11); - ov105_02245A64(param0); - - param0->unk_13_5 = 0; - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - param0->unk_3BF = 1; - ov105_022457C0(param0); - } - - param0->unk_19 = 0; - return 1; - } - - return 0; -} - -static BOOL ov105_0224435C(UnkStruct_ov105_02241FF4 *param0) -{ - switch (param0->unk_08) { - case 0: - if (ov105_02245620(param0, 10, param0->unk_13_3) == 1) { - param0->unk_08++; - } - break; - case 1: - if (param0->unk_3BE < 2) { - break; - } - - param0->unk_3BE = 0; - return 1; - } - - return 0; -} - -static BOOL ov105_0224439C(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - - switch (param0->unk_08) { - case 0: - param0->unk_10 = ov105_02244D14(param0, 15); - - CommTool_ClearReceivedTempDataAllPlayers(); - CommTiming_StartSync(165); - - param0->unk_08++; - - break; - case 1: - if (CommTiming_IsSyncState(165) == 1) { - CommTool_ClearReceivedTempDataAllPlayers(); - return 1; - } - break; - } - - return 0; -} - -static BOOL ov105_022443DC(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - - switch (param0->unk_08) { - case 0: - StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, HEAP_ID_93); - param0->unk_08++; - break; - case 1: - if (IsScreenFadeDone() == TRUE) { - return 1; - } - break; - } - - return 0; -} - -static BOOL ov105_02244424(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - Pokemon *v1; - BoxPokemon *v2; - - switch (param0->unk_08) { - case 0: - - if (param0->unk_310 != NULL) { - Menu_Free(param0->unk_FC, NULL); - ov105_02245A98(param0->unk_F0.window); - ov105_02246060(param0->unk_310); - param0->unk_310 = NULL; - } - - BattleFrontier_SetPartnerInStrTemplate(param0->unk_20, 0); - - v1 = Party_GetPokemonBySlotIndex(param0->unk_31C, 2 + param0->unk_324[0]); - v2 = Pokemon_GetBoxPokemon(v1); - - ov105_02244F00(param0, 1, v2); - - v1 = Party_GetPokemonBySlotIndex(param0->unk_320, param0->unk_324[1]); - v2 = Pokemon_GetBoxPokemon(v1); - - ov105_02244F00(param0, 2, v2); - ov105_0224628C(¶m0->unk_50[5], Options_Frame(param0->options)); - - param0->unk_10 = ov105_02244C60(param0, ¶m0->unk_50[5], 16, 1, 1, Options_TextFrameDelay(SaveData_GetOptions(param0->saveData)), 1, 2, 15, FONT_MESSAGE); - - Window_ScheduleCopyToVRAM(¶m0->unk_50[5]); - - param0->unk_19 = 80; - param0->unk_08++; - - break; - case 1: - if (Text_IsPrinterActive(param0->unk_10) == 0) { - param0->unk_19 = 0; - return 1; - } - - break; - } - - return 0; -} - -static void ov105_0224451C(void *param0) -{ - UnkStruct_ov105_02241FF4 *v0 = param0; - - if (v0->unk_04 != NULL) { - return; - } - - PokemonSpriteManager_UpdateCharAndPltt(v0->unk_128); - - if (v0->unk_120 != NULL) { - PaletteData_CommitFadedBuffers(v0->unk_120); - } - - Bg_RunScheduledUpdates(v0->unk_4C); - VramTransfer_Process(); - RenderOam_Transfer(); - - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -static void ov105_02244564(void) -{ - GXBanks v0 = { - GX_VRAM_BG_128_C, - GX_VRAM_BGEXTPLTT_NONE, - GX_VRAM_SUB_BG_32_H, - GX_VRAM_SUB_BGEXTPLTT_NONE, - GX_VRAM_OBJ_64_E, - GX_VRAM_OBJEXTPLTT_NONE, - GX_VRAM_SUB_OBJ_16_I, - GX_VRAM_SUB_OBJEXTPLTT_NONE, - GX_VRAM_TEX_01_AB, - GX_VRAM_TEXPLTT_01_FG - }; - - GXLayers_SetBanks(&v0); - return; -} - -static void ov105_02244584(BgConfig *param0) -{ - { - GraphicsModes v0 = { - GX_DISPMODE_GRAPHICS, - GX_BGMODE_0, - GX_BGMODE_0, - GX_BG0_AS_3D - }; - - SetAllGraphicsModes(&v0); - } - - { - BgTemplate v1 = { - .x = 0, - .y = 0, - .bufferSize = 0x800, - .baseTile = 0, - .screenSize = BG_SCREEN_SIZE_256x256, - .colorMode = GX_BG_COLORMODE_16, - .screenBase = GX_BG_SCRBASE_0x0000, - .charBase = GX_BG_CHARBASE_0x04000, - .bgExtPltt = GX_BG_EXTPLTT_01, - .priority = 1, - .areaOver = 0, - .mosaic = FALSE, - }; - - Bg_InitFromTemplate(param0, BG_LAYER_MAIN_1, &v1, 0); - Bg_ClearTilesRange(BG_LAYER_MAIN_1, 32, 0, HEAP_ID_93); - Bg_ClearTilemap(param0, BG_LAYER_MAIN_1); - } - - { - BgTemplate v2 = { - .x = 0, - .y = 0, - .bufferSize = 0x800, - .baseTile = 0, - .screenSize = BG_SCREEN_SIZE_256x256, - .colorMode = GX_BG_COLORMODE_16, - .screenBase = GX_BG_SCRBASE_0x1800, - .charBase = GX_BG_CHARBASE_0x0c000, - .bgExtPltt = GX_BG_EXTPLTT_01, - .priority = 2, - .areaOver = 0, - .mosaic = FALSE, - }; - - Bg_InitFromTemplate(param0, BG_LAYER_MAIN_2, &v2, 0); - Bg_ClearTilemap(param0, BG_LAYER_MAIN_2); - } - - { - BgTemplate v3 = { - .x = 0, - .y = 0, - .bufferSize = 0x800, - .baseTile = 0, - .screenSize = BG_SCREEN_SIZE_256x256, - .colorMode = GX_BG_COLORMODE_16, - .screenBase = GX_BG_SCRBASE_0x2800, - .charBase = GX_BG_CHARBASE_0x0c000, - .bgExtPltt = GX_BG_EXTPLTT_01, - .priority = 3, - .areaOver = 0, - .mosaic = FALSE, - }; - - Bg_InitFromTemplate(param0, BG_LAYER_MAIN_3, &v3, 0); - Bg_ClearTilemap(param0, BG_LAYER_MAIN_3); - } - - { - BgTemplate v4 = { - .x = 0, - .y = 0, - .bufferSize = 0x800, - .baseTile = 0, - .screenSize = BG_SCREEN_SIZE_256x256, - .colorMode = GX_BG_COLORMODE_16, - .screenBase = GX_BG_SCRBASE_0x3800, - .charBase = GX_BG_CHARBASE_0x10000, - .bgExtPltt = GX_BG_EXTPLTT_01, - .priority = 0, - .areaOver = 0, - .mosaic = FALSE, - }; - - Bg_InitFromTemplate(param0, BG_LAYER_SUB_0, &v4, 0); - Bg_ClearTilemap(param0, BG_LAYER_SUB_0); - } - - G2_SetBG0Priority(0); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0, 1); - - return; -} - -static void ov105_02244678(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_02244564(); - ov105_02244584(param0->unk_4C); - - param0->unk_120 = PaletteData_New(HEAP_ID_93); - - PaletteData_AllocBuffer(param0->unk_120, 2, 32 * 16, HEAP_ID_93); - PaletteData_AllocBuffer(param0->unk_120, 0, 32 * 16, HEAP_ID_93); - - ov105_02244AF8(); - - if (param0->unk_13_4 == 0) { - ov105_02244AA8(param0, 1); - ov105_02244A60(param0, 2); - ov105_02244A18(param0, 3); - - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, 1); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG2, 1); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG3, 1); - } else { - ov105_022449A4(param0, 3); - ov105_02244A60(param0, 2); - - Bg_SetOffset(param0->unk_4C, BG_LAYER_MAIN_2, 0, param0->unk_0C); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG3, 1); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG2, 1); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, 1); - } - - ov105_02244B30(param0, 4); - return; -} - -static void ov105_0224472C(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_02245AAC(¶m0->unk_144); - return; -} - -static void ov105_0224473C(BgConfig *param0) -{ - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_BG2 | GX_PLANEMASK_BG3 | GX_PLANEMASK_OBJ, 0); - GXLayers_EngineBToggleLayers(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_BG2 | GX_PLANEMASK_BG3 | GX_PLANEMASK_OBJ, 0); - - Bg_FreeTilemapBuffer(param0, BG_LAYER_MAIN_3); - Bg_FreeTilemapBuffer(param0, BG_LAYER_MAIN_2); - Bg_FreeTilemapBuffer(param0, BG_LAYER_MAIN_1); - Bg_FreeTilemapBuffer(param0, BG_LAYER_SUB_0); - Heap_Free(param0); - - return; -} - -static void ov105_02244778(UnkStruct_ov105_02241FF4 *param0, int *param1, int param2) -{ - param0->unk_08 = 0; - *param1 = param2; - return; -} - -static BOOL ov105_02244780(UnkStruct_ov105_02241FF4 *param0) -{ - int v0, v1, v2, v3; - const VecFx32 *v4; - - v3 = 0; - - Bg_SetOffset(param0->unk_4C, BG_LAYER_MAIN_2, 1, 8); - param0->unk_0C = Bg_GetXOffset(param0->unk_4C, 2); - - for (v0 = 0; v0 < param0->unk_12; v0++) { - v4 = ov105_02245F2C(param0->unk_2F4[v0]); - - if (((v4->x / FX32_ONE) - 8) <= ov105_02245F88(param0->unk_2F4[v0])) { - v1 = ov105_02245F88(param0->unk_2F4[v0]); - v2 = ov105_02245F8C(param0->unk_2F4[v0]); - ov105_02245F14(param0->unk_2F4[v0], v1, v2); - v3 = 1; - } else { - ov105_02245EC8(param0->unk_2F4[v0], -8, 0); - } - } - - ov105_022448BC(param0); - - if (v3 == 1) { - return 1; - } - - return 0; -} - -static BOOL ov105_02244830(UnkStruct_ov105_02241FF4 *param0) -{ - int v0, v1, v2, v3; - const VecFx32 *v4; - - v3 = 0; - - Bg_SetOffset(param0->unk_4C, BG_LAYER_MAIN_2, 1, 8); - param0->unk_0C = Bg_GetXOffset(param0->unk_4C, 2); - - for (v0 = 0; v0 < param0->unk_12; v0++) { - v4 = ov105_02245F2C(param0->unk_2F4[v0]); - - if (((v4->x / FX32_ONE) - 8) < -24) { - ov105_02245EBC(param0->unk_2F4[v0], 0); - v3++; - } else { - ov105_02245EC8(param0->unk_2F4[v0], -8, 0); - } - } - - ov105_022448BC(param0); - - if (v3 == param0->unk_12) { - return 1; - } - - return 0; -} - -static void ov105_022448BC(UnkStruct_ov105_02241FF4 *param0) -{ - if ((param0->unk_14 % 4) == 0) { - if ((param0->unk_14 / 4) >= 4) { - param0->unk_14 = 0; - } - - ov105_022448F4(param0, 1, (param0->unk_14 / 4) + 6, 32, 32); - } - - param0->unk_14++; - return; -} - -static void ov105_022448F4(UnkStruct_ov105_02241FF4 *param0, u32 param1, u8 param2, u8 param3, u8 param4) -{ - Bg_ChangeTilemapRectPalette(param0->unk_4C, param1, 0, 0, param3, param4, param2); - Bg_ScheduleTilemapTransfer(param0->unk_4C, param1); - - return; -} - -static void ov105_02244924(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - u32 v0; - - switch (param1) { - case 0: - Sound_PlayEffect(SEQ_SE_DP_OPEN2); - v0 = 2; - break; - case 1: - Sound_PlayEffect(SEQ_SE_DP_CLOSE2); - v0 = 3; - break; - case 4: - Sound_PlayEffect(SEQ_SE_DP_OPEN2); - v0 = 2; - break; - case 5: - Sound_PlayEffect(SEQ_SE_DP_CLOSE2); - v0 = 3; - break; - } - - param0->unk_314 = ov105_022459B0(param0, ov105_02245584(param0, param1)); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - param0->unk_318 = ov105_02245A04(param0, v0); - } - - return; -} - -static void ov105_022449A4(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - Graphics_LoadTilesToBgLayerFromOpenNARC(param0->unk_338, 4, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 5, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - } else { - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 11, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - } - - return; -} - -static void ov105_02244A18(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - Graphics_LoadTilesToBgLayerFromOpenNARC(param0->unk_338, 4, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 7, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - - return; -} - -static void ov105_02244A60(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - Graphics_LoadTilesToBgLayerFromOpenNARC(param0->unk_338, 4, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 8, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - - return; -} - -static void ov105_02244AA8(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - Graphics_LoadTilesToBgLayerFromOpenNARC(param0->unk_338, 4, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 9, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - Bg_SetPriority(BG_LAYER_MAIN_1, 2); - - return; -} - -static void ov105_02244AF8(void) -{ - void *v0; - NNSG2dPaletteData *v1; - - v0 = Graphics_GetPlttData(NARC_INDEX_RESOURCE__ENG__FRONTIER_GRAPHIC__FRONTIER_BG, 130, &v1, HEAP_ID_93); - - DC_FlushRange(v1->pRawData, sizeof(u16) * 16 * 11); - GX_LoadBGPltt(v1->pRawData, 0, sizeof(u16) * 16 * 11); - Heap_Free(v0); - - return; -} - -static void ov105_02244B30(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - Graphics_LoadTilesToBgLayerFromOpenNARC(param0->unk_338, 125, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 126, param0->unk_4C, param1, 0, 0, 1, HEAP_ID_93); - Graphics_LoadPaletteFromOpenNARC(param0->unk_338, 171, 4, 0, 0x20, HEAP_ID_93); - - return; -} - -static void ov105_02244B90(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 5, param0->unk_4C, 3, 0, 0, 1, HEAP_ID_93); - } else { - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 11, param0->unk_4C, 3, 0, 0, 1, HEAP_ID_93); - } - - return; -} - -static void ov105_02244BE4(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 7, param0->unk_4C, 3, 0, 0, 1, HEAP_ID_93); - return; -} - -static void ov105_02244C0C(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 10, param0->unk_4C, 3, 0, 0, 1, HEAP_ID_93); - } else { - Graphics_LoadTilemapToBgLayerFromOpenNARC(param0->unk_338, 12, param0->unk_4C, 3, 0, 0, 1, HEAP_ID_93); - } - - return; -} - -static u8 ov105_02244C60(UnkStruct_ov105_02241FF4 *param0, Window *param1, int param2, u32 param3, u32 param4, u32 param5, u8 param6, u8 param7, u8 param8, u8 param9) -{ - Window_FillTilemap(param1, param8); - MessageLoader_GetString(param0->unk_1C, param2, param0->unk_28); - StringTemplate_Format(param0->unk_20, param0->unk_24, param0->unk_28); - - return Text_AddPrinterWithParamsAndColor(param1, param9, param0->unk_24, param3, param4, param5, TEXT_COLOR(param6, param7, param8), NULL); -} - -static u8 ov105_02244CC0(UnkStruct_ov105_02241FF4 *param0, Window *param1, int param2, u32 param3, u32 param4, u32 param5, u8 param6, u8 param7, u8 param8, u8 param9) -{ - MessageLoader_GetString(param0->unk_1C, param2, param0->unk_28); - StringTemplate_Format(param0->unk_20, param0->unk_24, param0->unk_28); - - return Text_AddPrinterWithParamsAndColor(param1, param9, param0->unk_24, param3, param4, param5, TEXT_COLOR(param6, param7, param8), NULL); -} - -static u8 ov105_02244D14(UnkStruct_ov105_02241FF4 *param0, int param1) -{ - u8 v0 = ov105_02244C60(param0, ¶m0->unk_50[5], param1, 1, 1, TEXT_SPEED_NO_TRANSFER, 1, 2, 15, FONT_MESSAGE); - Window_ScheduleCopyToVRAM(¶m0->unk_50[5]); - - return v0; -} - -static void ov105_02244D48(UnkStruct_ov105_02241FF4 *param0, Window *param1, u8 param2) -{ - int v0; - - for (v0 = 0; v0 < 4; v0++) { - param0->unk_100[v0].entry = NULL; - param0->unk_100[v0].index = 0; - } - - param0->unk_F0.choices = param0->unk_100; - param0->unk_F0.window = param1; - param0->unk_F0.fontID = FONT_SYSTEM; - param0->unk_F0.xSize = 1; - param0->unk_F0.ySize = param2; - param0->unk_F0.lineSpacing = 0; - param0->unk_F0.suppressCursor = TRUE; - param0->unk_F0.loopAround = TRUE; - - return; -} - -static void ov105_02244DC4(UnkStruct_ov105_02241FF4 *param0, u8 param1, u8 param2, int param3) -{ - int v0; - void *v1; - - MessageLoader_GetString(param0->unk_1C, param3, param0->unk_2C[param1]); - - param0->unk_100[param1].entry = (const void *)param0->unk_2C[param1]; - param0->unk_100[param1].index = param2; - - return; -} - -static void ov105_02244DF0(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_02246260(param0->unk_4C, ¶m0->unk_50[7]); - ov105_02244D48(param0, ¶m0->unk_50[7], NELEMS(Unk_ov105_02246308)); - ov105_02244DC4(param0, 0, 0, 5); - - if (ov105_022454F8(param0, 0) == 1) { - if (ov105_02245F3C(param0->unk_2F4[ov105_022461A0(param0->unk_30C)]) == 0) { - ov105_02244DC4(param0, 1, 1, 6); - } else { - ov105_02244DC4(param0, 1, 3, 8); - } - } else { - ov105_02244DC4(param0, 1, 4, 21); - } - - ov105_02244DC4(param0, 2, 2, 7); - param0->unk_FC = Menu_NewAndCopyToVRAM(¶m0->unk_F0, 0, 0, 0, 93, PAD_BUTTON_B); - - return; -} - -static void ov105_02244E94(UnkStruct_ov105_02241FF4 *param0) -{ - ov105_02246260(param0->unk_4C, ¶m0->unk_50[7]); - ov105_02244D48(param0, ¶m0->unk_50[7], NELEMS(Unk_ov105_022462F4)); - ov105_02244DC4(param0, 0, 0, 3); - ov105_02244DC4(param0, 1, 1, 4); - - param0->unk_FC = Menu_NewAndCopyToVRAM(¶m0->unk_F0, 0, 0, 0, 93, PAD_BUTTON_B); - return; -} - -static void ov105_02244EE8(UnkStruct_ov105_02241FF4 *param0, u32 param1, s32 param2) -{ - StringTemplate_SetNumber(param0->unk_20, param1, param2, 1, 0, 1); - return; -} - -static void ov105_02244F00(UnkStruct_ov105_02241FF4 *param0, u32 param1, BoxPokemon *boxMon) -{ - StringTemplate_SetSpeciesName(param0->unk_20, param1, boxMon); - return; -} - -static void ov105_02244F0C(UnkStruct_ov105_02241FF4 *param0, Window *param1, u32 param2, u32 param3, u8 param4) -{ - TextColor v0; - const TrainerInfo *v1 = SaveData_GetTrainerInfo(param0->saveData); - String *v2 = String_Init(7 + 1, HEAP_ID_93); - - Window_FillTilemap(param1, 0); - String_CopyChars(v2, TrainerInfo_Name(v1)); - - if (TrainerInfo_Gender(v1) == 0) { - v0 = TEXT_COLOR(7, 8, 0); - } else { - v0 = TEXT_COLOR(3, 4, 0); - } - - Text_AddPrinterWithParamsAndColor(param1, param4, v2, param2, param3, TEXT_SPEED_NO_TRANSFER, v0, NULL); - String_Free(v2); - Window_ScheduleCopyToVRAM(param1); - - return; -} - -static void ov105_02244F84(UnkStruct_ov105_02241FF4 *param0, Window *param1, u32 param2, u32 param3, u8 param4) -{ - TextColor v0; - TrainerInfo *v2 = CommInfo_TrainerInfo(1 - CommSys_CurNetId()); - String *v1 = String_Init(7 + 1, HEAP_ID_93); - - Window_FillTilemap(param1, 0); - TrainerInfo_NameString(v2, v1); - - if (TrainerInfo_Gender(v2) == 0) { - v0 = TEXT_COLOR(7, 8, 0); - } else { - v0 = TEXT_COLOR(3, 4, 0); - } - - Text_AddPrinterWithParamsAndColor(param1, param4, v1, param2, param3, TEXT_SPEED_NO_TRANSFER, v0, NULL); - String_Free(v1); - Window_ScheduleCopyToVRAM(param1); - - return; -} - -static void ov105_02244FF8(UnkStruct_ov105_02241FF4 *param0, Window *param1, u8 param2, u32 param3, u32 param4, u8 param5, u8 param6, u8 param7, u8 param8, const Party *param9) -{ - u8 v0; - u32 v1, v2; - TextColor v3; - String *v4; - Pokemon *v5; - u16 v6[(10 + 1)]; - - v5 = Party_GetPokemonBySlotIndex(param9, param2); - Pokemon_GetValue(v5, MON_DATA_SPECIES_NAME, v6); - Window_FillTilemap(param1, param7); - - v4 = String_Init(10 + 1, HEAP_ID_93); - String_CopyChars(v4, v6); - Text_AddPrinterWithParamsAndColor(param1, param8, v4, param3, param4, TEXT_SPEED_NO_TRANSFER, TEXT_COLOR(param5, param6, param7), NULL); - - v0 = Window_GetWidth(param1) - 1; - v1 = Pokemon_GetValue(v5, MON_DATA_GENDER, NULL); - v2 = (v1 == 0) ? 25 : 26; - v3 = (v1 == 0) ? TEXT_COLOR(7, 8, 0) : TEXT_COLOR(3, 4, 0); - - String_Clear(v4); - - if (v1 != 2) { - MessageLoader_GetString(param0->unk_1C, v2, v4); - Text_AddPrinterWithParamsAndColor(param1, param8, v4, v0 * 8, param4, TEXT_SPEED_NO_TRANSFER, v3, NULL); - } - - String_Free(v4); - Window_ScheduleCopyToVRAM(param1); - - return; -} - -static void ov105_022450DC(UnkStruct_ov105_02241FF4 *param0, Window *param1, u32 param2, u32 param3, u8 param4, u8 param5, u8 param6, u8 param7, u16 param8, u8 param9) -{ - u8 v0; - u32 v1; - TextColor v2; - MessageLoader *v3; - String *v4; - Pokemon *v5; - u16 v6[(10 + 1)]; - - Window_FillTilemap(param1, param6); - - v3 = MessageLoader_Init(MSG_LOADER_LOAD_ON_DEMAND, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_SPECIES_NAME, HEAP_ID_93); - v4 = MessageLoader_GetNewString(v3, param8); - - MessageLoader_Free(v3); - Text_AddPrinterWithParamsAndColor(param1, param7, v4, param2, param3, TEXT_SPEED_NO_TRANSFER, TEXT_COLOR(param4, param5, param6), NULL); - - v0 = Window_GetWidth(param1) - 1; - v1 = (param9 == 0) ? 25 : 26; - v2 = (param9 == 0) ? TEXT_COLOR(7, 8, 0) : TEXT_COLOR(3, 4, 0); - - String_Clear(v4); - - if (param9 != 2) { - MessageLoader_GetString(param0->unk_1C, v1, v4); - Text_AddPrinterWithParamsAndColor(param1, param7, v4, v0 * 8, param3, TEXT_SPEED_NO_TRANSFER, v2, NULL); - } - - String_Free(v4); - - return; -} - -static void ov105_022451B4(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - - for (v0 = 0; v0 < param0->unk_12; v0++) { - if (param0->unk_2F4[v0] != NULL) { - param0->unk_2F4[v0] = ov105_02245EA8(param0->unk_2F4[v0]); - } - } - - if (param0->unk_30C != NULL) { - ov105_02246060(param0->unk_30C); - param0->unk_30C = NULL; - } - - NetworkIcon_Destroy(); - - PaletteData_FreeBuffer(param0->unk_120, 2); - PaletteData_FreeBuffer(param0->unk_120, 0); - PaletteData_Free(param0->unk_120); - - param0->unk_120 = NULL; - - ov105_02245C50(¶m0->unk_144); - - for (v0 = 0; v0 < 3; v0++) { - if (param0->unk_12C[v0] != NULL) { - PokemonSprite_Delete(param0->unk_12C[v0]); - } - } - - PokemonSpriteManager_Free(param0->unk_128); - MessageLoader_Free(param0->unk_1C); - StringTemplate_Free(param0->unk_20); - String_Free(param0->unk_24); - String_Free(param0->unk_28); - - for (v0 = 0; v0 < 4; v0++) { - String_Free(param0->unk_2C[v0]); - } - - ov105_02246244(param0->unk_50); - ov105_0224473C(param0->unk_4C); - - NARC_dtor(param0->unk_338); - G3DPipelineBuffers_Free(param0->unk_124); - - return; -} - -static void ov105_022452A0(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - - ov105_022452E4(); - - param0->unk_124 = G3DPipeline_Init(HEAP_ID_93, TEXTURE_VRAM_SIZE_256K, PALETTE_VRAM_SIZE_32K, ov105_02245CD0); - param0->unk_4C = BgConfig_New(HEAP_ID_93); - - ov105_0224531C(param0); - ov105_02246214(param0->unk_4C, param0->unk_50); - - return; -} - -static void ov105_022452E4(void) -{ - SetVBlankCallback(NULL, NULL); - SetHBlankCallback(NULL, NULL); - - GXLayers_DisableEngineALayers(); - GXLayers_DisableEngineBLayers(); - - GX_SetVisiblePlane(0); - GXS_SetVisiblePlane(0); - - return; -} - -static void ov105_0224531C(UnkStruct_ov105_02241FF4 *param0) -{ - int v0, v1; - - param0->unk_338 = NARC_ctor(NARC_INDEX_RESOURCE__ENG__FRONTIER_GRAPHIC__FRONTIER_BG, HEAP_ID_93); - - ov105_02244678(param0); - ov105_0224472C(param0); - - param0->unk_1C = MessageLoader_Init(MSG_LOADER_LOAD_ON_DEMAND, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNK_0364, HEAP_ID_93); - param0->unk_20 = StringTemplate_Default(HEAP_ID_93); - param0->unk_24 = String_Init(800, HEAP_ID_93); - param0->unk_28 = String_Init(800, HEAP_ID_93); - - for (v0 = 0; v0 < 4; v0++) { - param0->unk_2C[v0] = String_Init(64, HEAP_ID_93); - } - - Font_LoadTextPalette(0, 13 * 32, HEAP_ID_93); - Font_LoadScreenIndicatorsPalette(0, 12 * 32, HEAP_ID_93); - - param0->unk_128 = PokemonSpriteManager_New(HEAP_ID_93); - - if (CommSys_IsInitialized()) { - ReserveVramForWirelessIconChars(NNS_G2D_VRAM_TYPE_2DMAIN, GX_OBJVRAMMODE_CHAR_1D_32K); - ReserveSlotsForWirelessIconPalette(NNS_G2D_VRAM_TYPE_2DMAIN); - sub_02039734(); - } - - if (ov105_022454F8(param0, 0) == 1) { - ov105_0224246C(param0); - ov105_022424A0(param0); - } else { - ov105_0224260C(param0); - ov105_0224266C(param0); - } - - GXLayers_TurnBothDispOn(); - SetVBlankCallback(ov105_0224451C, (void *)param0); - - return; -} - -static void ov105_022453F8(UnkStruct_ov105_02241FF4 *param0, u8 param1, u8 param2, int param3, const Party *param4) -{ - int v0 = param2; - - if (ov105_022461A0(param0->unk_30C) < param0->unk_12) { - PokemonSprite_Delete(param0->unk_12C[0]); - ov105_022455C4(param0, 0, Party_GetPokemonBySlotIndex(param4, v0), 120, 43, param3); - ov105_02244FF8(param0, ¶m0->unk_50[2 + param1], v0, 0, 0, 15, 2, 0, 0, param4); - } - - return; -} - -static void ov105_02245464(UnkStruct_ov105_02241FF4 *param0) -{ - param0->unk_140 = Heap_Alloc(HEAP_ID_93, sizeof(PokemonSummary)); - memset(param0->unk_140, 0, sizeof(PokemonSummary)); - - param0->unk_140->monData = param0->unk_31C; - param0->unk_140->options = param0->options; - param0->unk_140->dataType = SUMMARY_DATA_PARTY_MON; - param0->unk_140->mode = SUMMARY_MODE_LOCK_MOVES; - param0->unk_140->monMax = param0->unk_12; - param0->unk_140->monIndex = ov105_022461A0(param0->unk_30C); - param0->unk_140->move = 0; - param0->unk_140->dexMode = SaveData_GetDexMode(param0->saveData); - param0->unk_140->showContest = FALSE; - - PokemonSummaryScreen_FlagVisiblePages(param0->unk_140, Unk_ov105_022462DC); - PokemonSummaryScreen_SetPlayerProfile(param0->unk_140, SaveData_GetTrainerInfo(param0->saveData)); - - return; -} - -static BOOL ov105_022454F8(UnkStruct_ov105_02241FF4 *param0, u8 param1) -{ - if (param0->unk_0B == param1) { - return 1; - } - - return 0; -} - -static u8 ov105_02245508(u8 param0) -{ - switch (param0) { - case 0: - case 1: - return 3; - } - - return 2; -} - -static BOOL ov105_02245518(UnkStruct_ov105_02241FF4 *param0) -{ - if (param0->unk_13_0 == 0) { - return 0; - } - - return 1; -} - -static void ov105_02245528(UnkStruct_ov105_02241FF4 *param0, u8 param1) -{ - param0->unk_13_0 = param1; - return; -} - -static u8 ov105_02245538(UnkStruct_ov105_02241FF4 *param0, u8 param1, u8 param2) -{ - u8 v0 = 0; - - switch (param1) { - case 0: - if (param2 == 1) { - v0 = 2; - } else if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - v0 = 2; - } else { - v0 = 2; - } - break; - case 1: - if (param2 == 1) { - v0 = 1; - } else if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - v0 = 1; - } else { - v0 = 1; - } - break; - case 2: - if (param2 == 1) { - v0 = 2; - } else if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - v0 = 2; - } else { - v0 = 2; - } - break; - } - - return v0; -} - -static u32 ov105_02245584(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - switch (param1) { - case 0: - break; - case 1: - break; - case 4: - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - return 11; - } - break; - case 5: - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 1) { - return 12; - } - break; - } - - return param1; -} - -static void ov105_022455C4(UnkStruct_ov105_02241FF4 *param0, u8 param1, Pokemon *param2, int param3, int param4, int param5) -{ - u32 v0, v1; - - param0->unk_12C[param1] = ov105_02245D88(param0->unk_128, 0, param2, param3, param4, 0); - - PokemonSprite_SetAttribute(param0->unk_12C[param1], MON_SPRITE_HIDE, 0); - - v0 = Pokemon_GetValue(param2, MON_DATA_SPECIES, NULL); - v1 = Pokemon_GetValue(param2, MON_DATA_FORM, NULL); - - if (SpeciesData_GetFormValue(v0, v1, 28) == 0) { - ov105_02245DB8(param0->unk_12C[param1], param5); - } - - return; -} - -BOOL ov105_02245620(UnkStruct_ov105_02241FF4 *param0, u16 param1, u16 param2) -{ - int v0, v1; - - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - return 0; - } - - switch (param1) { - case 7: - v1 = 29; - ov105_02245684(param0, param1); - break; - case 8: - v1 = 30; - ov105_022456A8(param0, param1, param2); - break; - case 10: - v1 = 32; - ov105_02245884(param0, param1, param2); - break; - } - - if (CommSys_SendData(v1, param0->unk_33C, 60) == 1) { - v0 = 1; - } else { - v0 = 0; - } - - return v0; -} - -void ov105_02245684(UnkStruct_ov105_02241FF4 *param0, u16 param1) -{ - TrainerInfo *v0 = SaveData_GetTrainerInfo(param0->saveData); - param0->unk_33C[0] = param1; - - return; -} - -void ov105_0224569C(int param0, int param1, void *param2, void *param3) -{ - int v0, v1; - UnkStruct_ov105_02241FF4 *v2 = param3; - const u16 *v3 = param2; - - v1 = 0; - - if (CommSys_CurNetId() == param0) { - return; - } - - return; -} - -void ov105_022456A8(UnkStruct_ov105_02241FF4 *param0, u16 param1, u16 param2) -{ - int v0, v1; - Pokemon *v2; - - v1 = 0; - - for (v0 = 0; v0 < 60; v0++) { - param0->unk_33C[v0] = 0; - } - - param0->unk_33C[0] = param0->unk_11; - v1 += 1; - - for (v0 = 0; v0 < param0->unk_11; v0++) { - v2 = Party_GetPokemonBySlotIndex(param0->unk_31C, param0->unk_324[v0]); - param0->unk_33C[v0 + v1] = Pokemon_GetValue(v2, MON_DATA_SPECIES, NULL); - } - - v1 += param0->unk_11; - - for (v0 = 0; v0 < param0->unk_11; v0++) { - v2 = Party_GetPokemonBySlotIndex(param0->unk_31C, param0->unk_324[v0]); - param0->unk_33C[v0 + v1] = Pokemon_GetValue(v2, MON_DATA_GENDER, NULL); - } - - v1 += param0->unk_11; - - return; -} - -void ov105_02245744(int param0, int param1, void *param2, void *param3) -{ - int v0, v1; - u8 v2; - UnkStruct_ov105_02241FF4 *v3 = param3; - const u16 *v4 = param2; - - v1 = 0; - v2 = ov104_0223AA50(v3->unk_09); - - if (CommSys_CurNetId() == param0) { - return; - } - - v3->unk_18 = v4[0]; - v1 += 1; - - for (v0 = 0; v0 < v3->unk_18; v0++) { - v3->unk_3B6[v0] = v4[v0 + v1]; - } - - v1 += v3->unk_18; - - for (v0 = 0; v0 < v3->unk_18; v0++) { - v3->unk_3BA[v0] = v4[v0 + v1]; - } - - v1 += v3->unk_18; - v3->unk_3BF = 1; - - return; -} - -void ov105_022457B8(int param0, int param1, void *param2, void *param3) -{ - GF_ASSERT(0); - return; -} - -static void ov105_022457C0(UnkStruct_ov105_02241FF4 *param0) -{ - int v0; - u8 v1 = ov104_0223AA50(param0->unk_09); - - if (param0->unk_13_5 == 1) { - Window_ClearAndCopyToVRAM(¶m0->unk_50[1]); - Window_ClearAndCopyToVRAM(¶m0->unk_50[8]); - Window_ClearAndCopyToVRAM(¶m0->unk_50[9]); - return; - } - - if (param0->unk_3BF == 1) { - for (v0 = 0; v0 < v1; v0++) { - Window_FillTilemap(¶m0->unk_50[8 + v0], 0); - - if (v0 < param0->unk_18) { - ov105_022450DC(param0, ¶m0->unk_50[8 + v0], 0, 0, 15, 2, 0, 0, param0->unk_3B6[v0], param0->unk_3BA[v0]); - } - - Window_ScheduleCopyToVRAM(¶m0->unk_50[8 + v0]); - } - - ov105_02244F84(param0, ¶m0->unk_50[1], 0, 0, 0); - } - - param0->unk_3BF = 0; - return; -} - -void ov105_02245884(UnkStruct_ov105_02241FF4 *param0, u16 param1, u16 param2) -{ - param0->unk_33C[0] = param1; - param0->unk_33C[1] = param2; - param0->unk_33C[2] = param0->unk_324[0]; - param0->unk_33C[3] = param0->unk_324[1]; - - return; -} - -void ov105_022458A4(int param0, int param1, void *param2, void *param3) -{ - int v0, v1; - UnkStruct_ov105_02241FF4 *v2 = param3; - const u16 *v3 = param2; - - v1 = 0; - v2->unk_3BE++; - - if (CommSys_CurNetId() == param0) { - return; - } - - v2->unk_3B4 = (u8)v3[1]; - - if (CommSys_CurNetId() == 0) { - if (v2->unk_13_3 == 1) { - v2->unk_3B4 = 0; - } else { - if (v2->unk_3B4 == 1) { - v2->unk_324[0] = (u8)v3[2]; - - v2->unk_324[1] = (u8)v3[3]; - } - } - } else { - if (v2->unk_3B4 == 1) { - v2->unk_13_3 = 0; - v2->unk_324[0] = (u8)v3[2]; - v2->unk_324[1] = (u8)v3[3]; - } - } - - return; -} - -static UnkStruct_ov105_02245EA8 *ov105_02245934(UnkStruct_ov105_02241FF4 *param0, int param1) -{ - int v0, v1; - - if (ov105_022454F8(param0, 0) == 1) { - v0 = Unk_ov105_02246364[param1][0]; - v1 = Unk_ov105_02246364[param1][1]; - } else { - if (BattleFactory_IsMultiplayerChallenge(param0->unk_09) == 0) { - v0 = Unk_ov105_02246314[param1][0]; - v1 = Unk_ov105_02246314[param1][1]; - } else { - if (param0->unk_12 == (NELEMS(Unk_ov105_022462EC))) { - v0 = Unk_ov105_022462EC[param1][0]; - v1 = Unk_ov105_022462EC[param1][1]; - } else { - v0 = Unk_ov105_02246320[param1][0]; - v1 = Unk_ov105_02246320[param1][1]; - } - } - } - - return ov105_02245E54(¶m0->unk_144, v0, v1, HEAP_ID_93); -} - -static UnkStruct_ov105_02245E1C *ov105_022459B0(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - int v0, v1; - - switch (param1) { - case 0: - case 1: - v0 = 80; - v1 = 40; - break; - case 4: - case 5: - v0 = 128; - v1 = 40; - break; - case 11: - v0 = 80; - v1 = 40; - break; - case 12: - v0 = 80; - v1 = 40; - break; - } - - return ov105_02245DC4(¶m0->unk_144, param1, v0, v1, HEAP_ID_93); -} - -static UnkStruct_ov105_02245E1C *ov105_02245A04(UnkStruct_ov105_02241FF4 *param0, u32 param1) -{ - int v0, v1; - - switch (param1) { - case 2: - case 3: - v0 = 216; - v1 = 40; - break; - default: - GF_ASSERT(0); - v0 = 0; - v1 = 0; - break; - } - - return ov105_02245DC4(¶m0->unk_144, param1, v0, v1, HEAP_ID_93); -} - -static void ov105_02245A30(UnkStruct_ov105_02241FF4 *param0) -{ - if (param0->unk_314 != NULL) { - ov105_02245E1C(param0->unk_314); - param0->unk_314 = NULL; - } - - if (param0->unk_318 != NULL) { - ov105_02245E1C(param0->unk_318); - param0->unk_318 = NULL; - } - - return; -} - -static void ov105_02245A64(UnkStruct_ov105_02241FF4 *param0) -{ - Bg_SetPriority(BG_LAYER_MAIN_1, 1); - Bg_ClearTilesRange(BG_LAYER_MAIN_1, 32, 0, HEAP_ID_93); - Bg_ClearTilemap(param0->unk_4C, BG_LAYER_MAIN_1); - ov105_02246214(param0->unk_4C, param0->unk_50); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, 1); - - return; -} - -static void ov105_02245A98(Window *param0) -{ - Window_EraseStandardFrame(param0, 1); - Window_ClearAndScheduleCopyToVRAM(param0); - - return; -} diff --git a/src/overlay105/ov105_02245AAC.c b/src/overlay105/ov105_02245AAC.c deleted file mode 100644 index 78890ca855..0000000000 --- a/src/overlay105/ov105_02245AAC.c +++ /dev/null @@ -1,138 +0,0 @@ -#include "overlay105/ov105_02245AAC.h" - -#include -#include - -#include "overlay105/struct_ov105_02245AAC.h" - -#include "char_transfer.h" -#include "gx_layers.h" -#include "pltt_transfer.h" -#include "render_oam.h" -#include "sprite.h" -#include "sprite_resource.h" -#include "sprite_transfer.h" -#include "sprite_util.h" - -void ov105_02245AAC(UnkStruct_ov105_02245AAC *param0); -Sprite *ov105_02245BA4(UnkStruct_ov105_02245AAC *param0, u32 param1, u32 param2, u32 param3, int param4, u8 param5); -void ov105_02245C50(UnkStruct_ov105_02245AAC *param0); -static void ov105_02245C98(void); - -static const u8 Unk_ov105_02246444[4] = { - 0x1, - 0x1, - 0x1, - 0x1 -}; - -void ov105_02245AAC(UnkStruct_ov105_02245AAC *param0) -{ - int v0; - - ov105_02245C98(); - NNS_G2dInitOamManagerModule(); - RenderOam_Init(0, 128, 0, 32, 0, 128, 0, 32, 93); - - param0->unk_00 = SpriteList_InitRendering((6 + 2 + 1), ¶m0->unk_04, HEAP_ID_93); - - for (v0 = 0; v0 < 4; v0++) { - param0->unk_190[v0] = SpriteResourceCollection_New(Unk_ov105_02246444[v0], v0, HEAP_ID_93); - } - - param0->unk_1A0[0][0] = SpriteResourceCollection_AddTiles(param0->unk_190[0], 151, 0, 1, 0, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_93); - param0->unk_1A0[0][1] = SpriteResourceCollection_AddPalette(param0->unk_190[1], 151, 36, 0, 0, NNS_G2D_VRAM_TYPE_2DMAIN, 8, HEAP_ID_93); - param0->unk_1A0[0][2] = SpriteResourceCollection_Add(param0->unk_190[2], 151, 2, 1, 0, 2, HEAP_ID_93); - param0->unk_1A0[0][3] = SpriteResourceCollection_Add(param0->unk_190[3], 151, 1, 1, 0, 3, HEAP_ID_93); - - for (v0 = 0; v0 < 1; v0++) { - SpriteTransfer_RequestChar(param0->unk_1A0[v0][0]); - SpriteTransfer_RequestPlttWholeRange(param0->unk_1A0[v0][1]); - } - - GXLayers_EngineBToggleLayers(GX_PLANEMASK_OBJ, 1); - GXLayers_EngineAToggleLayers(GX_PLANEMASK_OBJ, 1); - - return; -} - -Sprite *ov105_02245BA4(UnkStruct_ov105_02245AAC *param0, u32 param1, u32 param2, u32 param3, int param4, u8 param5) -{ - int v0; - SpriteResourcesHeader v1; - Sprite *v2; - - SpriteResourcesHeader_Init(&v1, param1, param1, param1, param1, 0xffffffff, 0xffffffff, 0, param4, param0->unk_190[0], param0->unk_190[1], param0->unk_190[2], param0->unk_190[3], NULL, NULL); - - { - AffineSpriteListTemplate v3; - - v3.list = param0->unk_00; - v3.resourceData = &v1; - v3.position.x = 0; - v3.position.y = 0; - v3.position.z = 0; - v3.affineScale.x = FX32_ONE; - v3.affineScale.y = FX32_ONE; - v3.affineScale.z = FX32_ONE; - v3.affineZRotation = 0; - v3.priority = param3; - - if (param5 == 0) { - v3.vramType = NNS_G2D_VRAM_TYPE_2DMAIN; - } else { - v3.vramType = NNS_G2D_VRAM_TYPE_2DSUB; - } - - v3.heapID = HEAP_ID_93; - - if (param5 == 1) { - v3.position.y += (192 << FX32_SHIFT); - } - - v2 = SpriteList_AddAffine(&v3); - - Sprite_SetAnimateFlag(v2, 1); - Sprite_SetAnim(v2, param2); - } - - return v2; -} - -void ov105_02245C50(UnkStruct_ov105_02245AAC *param0) -{ - u8 v0; - - for (v0 = 0; v0 < 1; v0++) { - SpriteTransfer_ResetCharTransfer(param0->unk_1A0[v0][0]); - SpriteTransfer_ResetPlttTransfer(param0->unk_1A0[v0][1]); - } - - for (v0 = 0; v0 < 4; v0++) { - SpriteResourceCollection_Delete(param0->unk_190[v0]); - } - - SpriteList_Delete(param0->unk_00); - RenderOam_Free(); - CharTransfer_Free(); - PlttTransfer_Free(); - - return; -} - -static void ov105_02245C98(void) -{ - { - CharTransferTemplate v0 = { - 32, 2048, 2048, 93 - }; - - CharTransfer_InitWithVramModes(&v0, GX_OBJVRAMMODE_CHAR_1D_64K, GX_OBJVRAMMODE_CHAR_1D_64K); - } - - PlttTransfer_Init(8, HEAP_ID_93); - CharTransfer_ClearBuffers(); - PlttTransfer_Clear(); - - return; -} diff --git a/src/overlay105/ov105_02245CD0.c b/src/overlay105/ov105_02245CD0.c deleted file mode 100644 index a2705daf4a..0000000000 --- a/src/overlay105/ov105_02245CD0.c +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include - -#include "gx_layers.h" -#include "pokemon.h" -#include "pokemon_sprite.h" -#include "unk_0202419C.h" - -void ov105_02245CD0(void); -void ov105_02245D50(PokemonSpriteManager *param0); -PokemonSprite *ov105_02245D88(PokemonSpriteManager *param0, int param1, Pokemon *param2, int param3, int param4, int param5); -void ov105_02245DB8(PokemonSprite *param0, int param1); - -void ov105_02245CD0(void) -{ - GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0, 1); - G2_SetBG0Priority(0); - - G3X_SetShading(GX_SHADING_TOON); - G3X_AntiAlias(1); - G3X_AlphaTest(0, 0); - G3X_AlphaBlend(1); - G3X_EdgeMarking(0); - G3X_SetFog(0, GX_FOGBLEND_COLOR_ALPHA, GX_FOGSLOPE_0x8000, 0); - G3X_SetClearColor(GX_RGB(0, 0, 0), 0, 0x7fff, 63, 0); - - G3_ViewPort(0, 0, 255, 191); - return; -} - -void ov105_02245D50(PokemonSpriteManager *param0) -{ - G3_ResetG3X(); - - G3_MtxMode(GX_MTXMODE_PROJECTION); - G3_Identity(); - G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); - G3_Identity(); - - NNS_G3dGlbFlush(); - NNS_G2dSetupSoftwareSpriteCamera(); - - PokemonSpriteManager_DrawSprites(param0); - G3_SwapBuffers(GX_SORTMODE_MANUAL, GX_BUFFERMODE_Z); - - return; -} - -PokemonSprite *ov105_02245D88(PokemonSpriteManager *param0, int param1, Pokemon *param2, int param3, int param4, int param5) -{ - PokemonSpriteTemplate v0; - PokemonSprite *v1; - int v2; - u32 v3; - - Pokemon_BuildSpriteTemplate(&v0, param2, 2); - - v2 = 0; - v1 = PokemonSpriteManager_CreateSprite(param0, &v0, param3, param4 + v2, param5, param1, NULL, NULL); - - return v1; -} - -void ov105_02245DB8(PokemonSprite *param0, int param1) -{ - PokemonSprite_SetAttribute(param0, MON_SPRITE_FLIP_H, param1); - return; -} diff --git a/src/overlay105/ov105_02245DC4.c b/src/overlay105/ov105_02245DC4.c deleted file mode 100644 index 22560fabcf..0000000000 --- a/src/overlay105/ov105_02245DC4.c +++ /dev/null @@ -1,59 +0,0 @@ -#include "overlay105/ov105_02245DC4.h" - -#include -#include - -#include "overlay105/ov105_02245AAC.h" -#include "overlay105/struct_ov105_02245AAC.h" -#include "overlay105/struct_ov105_02245E1C_decl.h" - -#include "heap.h" -#include "sprite.h" - -struct UnkStruct_ov105_02245E1C_t { - int unk_00; - int unk_04; - Sprite *unk_08; -}; - -void *ov105_02245E1C(UnkStruct_ov105_02245E1C *param0); -void ov105_02245E30(UnkStruct_ov105_02245E1C *param0, int param1, int param2); -BOOL ov105_02245E48(UnkStruct_ov105_02245E1C *param0); - -UnkStruct_ov105_02245E1C *ov105_02245DC4(UnkStruct_ov105_02245AAC *param0, u32 param1, int param2, int param3, enum HeapID heapID) -{ - UnkStruct_ov105_02245E1C *v0 = Heap_Alloc(heapID, sizeof(UnkStruct_ov105_02245E1C)); - memset(v0, 0, sizeof(UnkStruct_ov105_02245E1C)); - - v0->unk_00 = param2; - v0->unk_04 = param3; - v0->unk_08 = ov105_02245BA4(param0, 0, param1, 0, 1, 0); - - ov105_02245E30(v0, param2, param3); - - return v0; -} - -void *ov105_02245E1C(UnkStruct_ov105_02245E1C *param0) -{ - Sprite_Delete(param0->unk_08); - Heap_Free(param0); - - return NULL; -} - -void ov105_02245E30(UnkStruct_ov105_02245E1C *param0, int param1, int param2) -{ - VecFx32 v0; - - v0.x = (param1 * FX32_ONE); - v0.y = (param2 * FX32_ONE); - - Sprite_SetPosition(param0->unk_08, &v0); - return; -} - -BOOL ov105_02245E48(UnkStruct_ov105_02245E1C *param0) -{ - return Sprite_IsAnimated(param0->unk_08); -} diff --git a/src/overlay105/ov105_02245E54.c b/src/overlay105/ov105_02245E54.c deleted file mode 100644 index 7cc7207ca0..0000000000 --- a/src/overlay105/ov105_02245E54.c +++ /dev/null @@ -1,151 +0,0 @@ -#include "overlay105/ov105_02245E54.h" - -#include -#include - -#include "overlay105/ov105_02245AAC.h" -#include "overlay105/struct_ov105_02245AAC.h" -#include "overlay105/struct_ov105_02245EA8_decl.h" - -#include "heap.h" -#include "sprite.h" - -struct UnkStruct_ov105_02245EA8_t { - u16 unk_00; - u16 unk_02; - int unk_04; - int unk_08; - Sprite *unk_0C; -}; - -void *ov105_02245EA8(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245EBC(UnkStruct_ov105_02245EA8 *param0, int param1); -VecFx32 ov105_02245EC8(UnkStruct_ov105_02245EA8 *param0, int param1, int param2); -void ov105_02245F14(UnkStruct_ov105_02245EA8 *param0, int param1, int param2); -const VecFx32 *ov105_02245F2C(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F38(UnkStruct_ov105_02245EA8 *param0, u8 param1); -u8 ov105_02245F3C(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F44(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F50(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F5C(UnkStruct_ov105_02245EA8 *param0); -int ov105_02245F88(UnkStruct_ov105_02245EA8 *param0); -int ov105_02245F8C(UnkStruct_ov105_02245EA8 *param0); -void ov105_02245F90(UnkStruct_ov105_02245EA8 *param0, u32 param1); -void ov105_02245FAC(UnkStruct_ov105_02245EA8 *param0, u32 param1); - -UnkStruct_ov105_02245EA8 *ov105_02245E54(UnkStruct_ov105_02245AAC *param0, int param1, int param2, u32 heapID) -{ - UnkStruct_ov105_02245EA8 *v0 = Heap_Alloc(heapID, sizeof(UnkStruct_ov105_02245EA8)); - memset(v0, 0, sizeof(UnkStruct_ov105_02245EA8)); - - v0->unk_00 = 0; - v0->unk_04 = param1; - v0->unk_08 = param2; - v0->unk_0C = ov105_02245BA4(param0, 0, 6, 0, 0, 0); - - ov105_02245F14(v0, param1, param2); - Sprite_SetExplicitPalette(v0->unk_0C, 1); - - return v0; -} - -void *ov105_02245EA8(UnkStruct_ov105_02245EA8 *param0) -{ - Sprite_Delete(param0->unk_0C); - Heap_Free(param0); - - return NULL; -} - -void ov105_02245EBC(UnkStruct_ov105_02245EA8 *param0, int param1) -{ - Sprite_SetDrawFlag(param0->unk_0C, param1); - return; -} - -VecFx32 ov105_02245EC8(UnkStruct_ov105_02245EA8 *param0, int param1, int param2) -{ - VecFx32 v0; - - v0 = *(Sprite_GetPosition(param0->unk_0C)); - v0.x += (param1 * FX32_ONE); - v0.y += (param2 * FX32_ONE); - - Sprite_SetPosition(param0->unk_0C, &v0); - return *(Sprite_GetPosition(param0->unk_0C)); -} - -void ov105_02245F14(UnkStruct_ov105_02245EA8 *param0, int param1, int param2) -{ - VecFx32 v0; - - v0.x = (param1 * FX32_ONE); - v0.y = (param2 * FX32_ONE); - - Sprite_SetPosition(param0->unk_0C, &v0); - return; -} - -const VecFx32 *ov105_02245F2C(UnkStruct_ov105_02245EA8 *param0) -{ - return Sprite_GetPosition(param0->unk_0C); -} - -void ov105_02245F38(UnkStruct_ov105_02245EA8 *param0, u8 param1) -{ - param0->unk_00 = param1; - return; -} - -u8 ov105_02245F3C(UnkStruct_ov105_02245EA8 *param0) -{ - return param0->unk_00; -} - -void ov105_02245F44(UnkStruct_ov105_02245EA8 *param0) -{ - ov105_02245F38(param0, 1); - return; -} - -void ov105_02245F50(UnkStruct_ov105_02245EA8 *param0) -{ - ov105_02245F38(param0, 0); - return; -} - -void ov105_02245F5C(UnkStruct_ov105_02245EA8 *param0) -{ - VecFx32 v0; - const VecFx32 *v1 = ov105_02245F2C(param0); - - v0.x = ((v1->x / FX32_ONE) + 248) * FX32_ONE; - v0.y = v1->y; - - Sprite_SetPosition(param0->unk_0C, &v0); - return; -} - -int ov105_02245F88(UnkStruct_ov105_02245EA8 *param0) -{ - return param0->unk_04; -} - -int ov105_02245F8C(UnkStruct_ov105_02245EA8 *param0) -{ - return param0->unk_08; -} - -void ov105_02245F90(UnkStruct_ov105_02245EA8 *param0, u32 param1) -{ - Sprite_SetAnimSpeed(param0->unk_0C, FX32_ONE); - Sprite_SetAnim(param0->unk_0C, param1); - - return; -} - -void ov105_02245FAC(UnkStruct_ov105_02245EA8 *param0, u32 param1) -{ - Sprite_SetExplicitPalette(param0->unk_0C, param1); - return; -} diff --git a/src/overlay105/ov105_02245FB8.c b/src/overlay105/ov105_02245FB8.c deleted file mode 100644 index 185da51ceb..0000000000 --- a/src/overlay105/ov105_02245FB8.c +++ /dev/null @@ -1,192 +0,0 @@ -#include "overlay105/ov105_02245FB8.h" - -#include -#include - -#include "overlay105/ov105_02245AAC.h" -#include "overlay105/struct_ov105_02245AAC.h" -#include "overlay105/struct_ov105_02246060_decl.h" -#include "overlay105/struct_ov105_02246394.h" - -#include "heap.h" -#include "sprite.h" -#include "system.h" - -struct UnkStruct_ov105_02246060_t { - u8 unk_00; - u8 unk_01; - u8 unk_02; - u8 unk_03; - const UnkStruct_ov105_02246394 *unk_04; - const u8 *unk_08; - Sprite *unk_0C; - u8 unk_10; -}; - -UnkStruct_ov105_02246060 *ov105_02245FB8(UnkStruct_ov105_02245AAC *param0, u8 param1, u8 param2, u8 param3, u8 param4, const UnkStruct_ov105_02246394 *param5, const u8 *param6); -void *ov105_02246060(UnkStruct_ov105_02246060 *param0); -void ov105_02246074(UnkStruct_ov105_02246060 *param0, int param1); -void ov105_02246080(UnkStruct_ov105_02246060 *param0); -u8 ov105_022461A0(UnkStruct_ov105_02246060 *param0); -void ov105_022461A4(UnkStruct_ov105_02246060 *param0, int param1); -void ov105_022461C0(UnkStruct_ov105_02246060 *param0, u8 param1); - -UnkStruct_ov105_02246060 *ov105_02245FB8(UnkStruct_ov105_02245AAC *param0, u8 param1, u8 param2, u8 param3, u8 param4, const UnkStruct_ov105_02246394 *param5, const u8 *param6) -{ - UnkStruct_ov105_02246060 *v0; - VecFx32 v1; - - v0 = Heap_Alloc(HEAP_ID_93, sizeof(UnkStruct_ov105_02246060)); - memset(v0, 0, sizeof(UnkStruct_ov105_02246060)); - - v0->unk_00 = param1; - v0->unk_10 = param2; - v0->unk_01 = param3; - v0->unk_02 = param4; - v0->unk_04 = param5; - v0->unk_08 = param6; - - if (param6 != NULL) { - v0->unk_0C = ov105_02245BA4(param0, 0, v0->unk_08[param4], 0, 0, 0); - } else { - if (param3 == 0) { - v0->unk_0C = ov105_02245BA4(param0, 0, 8, 0, 0, 0); - } else { - v0->unk_0C = ov105_02245BA4(param0, 0, 9, 0, 0, 0); - } - } - - v1.x = (v0->unk_04[v0->unk_02].unk_00 * FX32_ONE); - v1.y = (v0->unk_04[v0->unk_02].unk_02 * FX32_ONE); - - Sprite_SetPosition(v0->unk_0C, &v1); - return v0; -} - -void *ov105_02246060(UnkStruct_ov105_02246060 *param0) -{ - Sprite_Delete(param0->unk_0C); - Heap_Free(param0); - - return NULL; -} - -void ov105_02246074(UnkStruct_ov105_02246060 *param0, int param1) -{ - Sprite_SetDrawFlag(param0->unk_0C, param1); - return; -} - -void ov105_02246080(UnkStruct_ov105_02246060 *param0) -{ - VecFx32 v0; - u32 v1, v2; - - if (param0->unk_03 == 1) { - return; - } - - if (gSystem.pressedKeys == 0) { - return; - } - - if (param0->unk_01 == 2) { - if (gSystem.pressedKeys & PAD_KEY_LEFT) { - if (param0->unk_02 == 0) { - param0->unk_02 = (param0->unk_00 - 1); - } else { - param0->unk_02--; - } - } else if (gSystem.pressedKeys & PAD_KEY_RIGHT) { - if (param0->unk_02 == (param0->unk_00 - 1)) { - param0->unk_02 = 0; - } else { - param0->unk_02++; - } - } else if (gSystem.pressedKeys & PAD_KEY_DOWN) { - if (param0->unk_02 < (param0->unk_10)) { - param0->unk_02 = param0->unk_10; - } else if (param0->unk_02 == (param0->unk_00 - 1)) { - param0->unk_02 = 0; - } else { - param0->unk_02++; - } - } else if (gSystem.pressedKeys & PAD_KEY_UP) { - if (param0->unk_02 < (param0->unk_10)) { - param0->unk_02 = (param0->unk_00 - 1); - } else { - param0->unk_02--; - } - } - } else { - if (param0->unk_01 == 0) { - v1 = PAD_KEY_RIGHT; - v2 = PAD_KEY_LEFT; - } else { - v1 = PAD_KEY_DOWN; - v2 = PAD_KEY_UP; - } - - if (gSystem.pressedKeys & v1) { - param0->unk_02++; - - if (param0->unk_02 >= param0->unk_00) { - param0->unk_02 = 0; - } - } else if (gSystem.pressedKeys & v2) { - if (param0->unk_02 == 0) { - param0->unk_02 = param0->unk_00; - } - - param0->unk_02--; - } - } - - if (param0->unk_08 != NULL) { - Sprite_SetAnimNoRestart(param0->unk_0C, param0->unk_08[param0->unk_02]); - } - - v0 = *(Sprite_GetPosition(param0->unk_0C)); - v0.x = (param0->unk_04[param0->unk_02].unk_00 * FX32_ONE); - v0.y = (param0->unk_04[param0->unk_02].unk_02 * FX32_ONE); - - Sprite_SetPosition(param0->unk_0C, &v0); - return; -} - -u8 ov105_022461A0(UnkStruct_ov105_02246060 *param0) -{ - return param0->unk_02; -} - -void ov105_022461A4(UnkStruct_ov105_02246060 *param0, int param1) -{ - param0->unk_03 = param1; - - if (param1 == 0) { - Sprite_SetAnimNoRestart(param0->unk_0C, 8); - } else { - Sprite_SetAnimNoRestart(param0->unk_0C, 13); - } - - return; -} - -void ov105_022461C0(UnkStruct_ov105_02246060 *param0, u8 param1) -{ - VecFx32 v0; - - param0->unk_02 = param1; - - if (param0->unk_08 != NULL) { - Sprite_SetAnimNoRestart(param0->unk_0C, param0->unk_08[param0->unk_02]); - } - - v0 = *(Sprite_GetPosition(param0->unk_0C)); - - v0.x = (param0->unk_04[param0->unk_02].unk_00 * FX32_ONE); - v0.y = (param0->unk_04[param0->unk_02].unk_02 * FX32_ONE); - - Sprite_SetPosition(param0->unk_0C, &v0); - return; -} diff --git a/src/overlay105/ov105_02246214.c b/src/overlay105/ov105_02246214.c deleted file mode 100644 index 9516ccb18e..0000000000 --- a/src/overlay105/ov105_02246214.c +++ /dev/null @@ -1,66 +0,0 @@ -#include "overlay105/ov105_02246214.h" - -#include -#include - -#include "bg_window.h" -#include "render_window.h" - -void ov105_02246214(BgConfig *param0, Window *param1); -void ov105_02246244(Window *param0); -void ov105_02246260(BgConfig *param0, Window *param1); -void ov105_0224628C(Window *param0, int param1); - -static const WindowTemplate Unk_ov105_02246458[] = { - { 0x1, 0x1, 0x1, 0xA, 0x2, 0xD, 0x1 }, - { 0x1, 0x16, 0x1, 0xA, 0x2, 0xD, 0x15 }, - { 0x1, 0x1, 0x4, 0x9, 0x2, 0xD, 0x29 }, - { 0x1, 0x1, 0x6, 0x9, 0x2, 0xD, 0x3B }, - { 0x1, 0x1, 0x8, 0x9, 0x2, 0xD, 0x4D }, - { 0x1, 0x2, 0x13, 0x11, 0x4, 0xC, 0x5F }, - { 0x1, 0x17, 0x13, 0x8, 0x4, 0xD, 0xA3 }, - { 0x1, 0x17, 0x11, 0x8, 0x6, 0xD, 0xC3 }, - { 0x1, 0x16, 0x4, 0x9, 0x2, 0xD, 0xF3 }, - { 0x1, 0x16, 0x6, 0x9, 0x2, 0xD, 0x105 } -}; - -void ov105_02246214(BgConfig *param0, Window *param1) -{ - u8 v0; - const WindowTemplate *v1 = Unk_ov105_02246458; - - for (v0 = 0; v0 < 10; v0++) { - Window_AddFromTemplate(param0, ¶m1[v0], &v1[v0]); - Window_FillTilemap(¶m1[v0], 0); - } - - return; -} - -void ov105_02246244(Window *param0) -{ - u16 v0; - - for (v0 = 0; v0 < 10; v0++) { - Window_Remove(¶m0[v0]); - } - - return; -} - -void ov105_02246260(BgConfig *param0, Window *param1) -{ - LoadStandardWindowGraphics(param0, BG_LAYER_MAIN_1, (1024 - 9), 11, 0, HEAP_ID_93); - Window_DrawStandardFrame(param1, 1, (1024 - 9), 11); - - return; -} - -void ov105_0224628C(Window *param0, int param1) -{ - LoadMessageBoxGraphics(param0->bgConfig, Window_GetBgLayer(param0), ((1024 - 9) - (18 + 12)), 10, param1, HEAP_ID_93); - Window_FillTilemap(param0, 15); - Window_DrawMessageBoxWithScrollCursor(param0, 1, ((1024 - 9) - (18 + 12)), 10); - - return; -} diff --git a/src/unk_0209BA80.c b/src/unk_0209BA80.c index 36b86a1c47..4e70e65538 100644 --- a/src/unk_0209BA80.c +++ b/src/unk_0209BA80.c @@ -11,10 +11,10 @@ #include "applications/frontier/battle_castle/opponent_app.h" #include "applications/frontier/battle_castle/self_app.h" +#include "applications/frontier/battle_factory/main.h" #include "applications/frontier/battle_hall/main.h" #include "overlay104/ov104_0222ECE8.h" #include "overlay104/ov104_0223C164.h" -#include "overlay105/ov105_02241AE0.h" #include "overlay108/ov108_02241AE0.h" #include "communication_system.h"