diff --git a/.github/workflows/build-rom/action.yml b/.github/workflows/build-rom/action.yml index 01fd50c189..cef277b20a 100644 --- a/.github/workflows/build-rom/action.yml +++ b/.github/workflows/build-rom/action.yml @@ -8,10 +8,11 @@ runs: - name: Update and Install Software shell: bash run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y sudo apt update sudo ACCEPT_EULA=Y apt -y --fix-missing --allow-downgrades upgrade sudo apt -y --allow-downgrades install g++-10-multilib linux-libc-dev binutils-arm-none-eabi p7zip-full pkg-config libpugixml-dev ppa-purge - sudo ppa-purge -y ppa:ubuntu-toolchain-r/test + sudo ppa-purge -y ppa:ubuntu-toolchain-r/test || true sudo dpkg --add-architecture i386 sudo mkdir -pm755 /etc/apt/keyrings sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key diff --git a/CMakeLists.txt b/CMakeLists.txt index ac322445eb..823019c90c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,7 @@ endforeach() add_executable(PokeHeartGold ${SOURCES}) target_include_directories(PokeHeartGold PUBLIC include files ${CMAKE_SOURCE_DIR}/lib/include ${CMAKE_SOURCE_DIR}/lib/include/cw ${CMAKE_SOURCE_DIR}/lib/include/nitro ${CMAKE_SOURCE_DIR}/lib/include/nnsys ${CMAKE_SOURCE_DIR}/lib/include/nitro/os include/library) -target_compile_definitions(PokeHeartGold PUBLIC __CLION_IDE__ SDK_ARM9 SDK_CW SDK_CODE_ARM _NITRO __arm PLATFORM_INTRINSIC_FUNCTION_BIT_CLZ32=__builtin_clz wchar_t=__WCHAR_TYPE__) +target_compile_definitions(PokeHeartGold PUBLIC __CLION_IDE__ SDK_ARM9 SDK_CW SDK_CODE_ARM _NITRO __arm PLATFORM_INTRINSIC_FUNCTION_BIT_CLZ32=__builtin_clz wchar_t=__WCHAR_TYPE__ PM_KEEP_ASSERTS) target_compile_options(PokeHeartGold PRIVATE -Wimplicit -Wno-endif-labels -fms-extensions -nostdinc -Wno-builtin-declaration-mismatch -Wno-implicit-int -Wno-multichar -Wno-address-of-packed-member -mcpu=arm946e-s) target_compile_features(PokeHeartGold PRIVATE c_std_99 cxx_std_98) diff --git a/asm/include/overlay_01_021E5900.inc b/asm/include/overlay_01_021E5900.inc index 8ff7e5e620..76d8eb1baf 100644 --- a/asm/include/overlay_01_021E5900.inc +++ b/asm/include/overlay_01_021E5900.inc @@ -30,9 +30,9 @@ .public GF_CreateVramTransferManager .public GF_DestroyVramTransferManager .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_102.inc b/asm/include/overlay_102.inc index 404a95120d..07ca051c00 100644 --- a/asm/include/overlay_102.inc +++ b/asm/include/overlay_102.inc @@ -111,9 +111,9 @@ .public SysTask_GetData .public MsgArray_SkipControlCode .public AddTextPrinterParameterizedWithColor -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02021AC8 .public sub_02021B5C .public GfGfx_SetBanks diff --git a/asm/include/overlay_112.inc b/asm/include/overlay_112.inc index dcab5ffbd9..471a8ce231 100644 --- a/asm/include/overlay_112.inc +++ b/asm/include/overlay_112.inc @@ -165,9 +165,9 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_121.inc b/asm/include/overlay_121.inc index c1aa9c69a0..e41bf3a8cf 100644 --- a/asm/include/overlay_121.inc +++ b/asm/include/overlay_121.inc @@ -65,9 +65,9 @@ .public ResetAllTextPrinters .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_12_battle_command.inc b/asm/include/overlay_12_battle_command.inc index 148e495c8d..4619faa0b0 100644 --- a/asm/include/overlay_12_battle_command.inc +++ b/asm/include/overlay_12_battle_command.inc @@ -61,8 +61,8 @@ .public AddTextPrinterParameterizedWithColor .public sub_02021AC8 .public sub_02021B5C -.public sub_02021BD0 -.public sub_02021BEC +.public ObjCharTransfer_PopTaskManager +.public ObjCharTransfer_PushTaskManager .public sub_02024AA8 .public System_GetTouchNew .public GF_AssertFail diff --git a/asm/include/overlay_17.inc b/asm/include/overlay_17.inc deleted file mode 100644 index bda622f756..0000000000 --- a/asm/include/overlay_17.inc +++ /dev/null @@ -1,179 +0,0 @@ -#include -#pragma once -.public FontID_Alloc -.public FontID_Release -.public FontID_String_GetWidth -.public LoadFontPal1 -.public sub_02004EC4 -.public PlaySE -.public StopSE -.public PlayFanfare -.public IsFanfarePlaying -.public OverlayManager_CreateAndGetData -.public OverlayManager_GetData -.public OverlayManager_FreeData -.public OverlayManager_GetArgs -.public NARC_New -.public NARC_Delete -.public GfGfxLoader_LoadCharDataFromOpenNarc -.public GfGfxLoader_LoadScrnDataFromOpenNarc -.public GfGfxLoader_GXLoadPalFromOpenNarc -.public sub_0200B2E0 -.public sub_0200B2E8 -.public NewMsgDataFromNarc -.public DestroyMsgData -.public NewString_ReadMsgData -.public MessageFormat_New_Custom -.public MessageFormat_Delete -.public BufferString -.public BufferIntegerAsString -.public BufferItemName -.public StringExpandPlaceholders -.public SpriteRenderer_Create -.public SpriteRenderer_CreateGfxHandler -.public sub_0200CF70 -.public sub_0200CFF4 -.public sub_0200D020 -.public thunk_OamManager_ApplyAndResetBuffers -.public SpriteRenderer_RemoveGfxHandler -.public SpriteRenderer_Delete -.public sub_0200D2A4 -.public SpriteRenderer_CreateSprite -.public SpriteRenderer_Init2DGfxResManagersFromCountsArray -.public SpriteRenderer_LoadCharResObjFromOpenNarc -.public SpriteRenderer_LoadPlttResObjFromOpenNarc -.public SpriteRenderer_LoadCellResObjFromOpenNarc -.public SpriteRenderer_LoadAnimResObjFromOpenNarc -.public SpriteRenderer_LoadResourcesAndCreateSprite -.public SpriteRenderer_UnloadResourcesAndRemoveGfxHandler -.public sub_0200D9DC -.public Sprite_SetPositionXY -.public Sprite_GetPositionXY -.public Sprite_AddPositionXY -.public UnkImageStruct_AddSpritePositionXY -.public sub_0200E2B0 -.public sub_0200E2B4 -.public sub_0200E2B8 -.public sub_0200E2EC -.public SysTask_CreateOnMainQueue -.public SysTask_Destroy -.public LoadUserFrameGfx2 -.public DrawFrameAndWindow2 -.public BeginNormalPaletteFade -.public IsPaletteFadeFinished -.public sub_0200FBDC -.public sub_0200FBF4 -.public GF_RTC_CopyDateTime -.public ListMenuItems_New -.public ListMenuItems_Delete -.public ListMenuItems_AppendFromMsgData -.public YesNoPrompt_Create -.public YesNoPrompt_Destroy -.public sub_020183F0 -.public sub_02018410 -.public sub_02018424 -.public sub_02018474 -.public sub_020185FC -.public sub_02018674 -.public sub_02018680 -.public sub_020186A4 -.public Main_SetVBlankIntrCB -.public HBlankInterruptDisable -.public CreateHeap -.public DestroyHeap -.public AllocFromHeap -.public FreeToHeap -.public BgConfig_Alloc -.public SetBothScreensModesAndDisable -.public InitBgFromTemplate -.public FreeBgTilemapBuffer -.public BG_ClearCharDataRange -.public FillBgTilemapRect -.public BgClearTilemapBufferAndCommit -.public AddWindow -.public RemoveWindow -.public ScheduleWindowCopyToVram -.public ClearWindowTilemapAndCopyToVram -.public FillWindowPixelBuffer -.public DoScheduledBgGpuUpdates -.public AddTextPrinterParameterized -.public AddTextPrinterParameterizedWithColor -.public GF_CreateVramTransferManager -.public GF_DestroyVramTransferManager -.public sub_020210BC -.public sub_02021148 -.public sub_02021238 -.public GfGfx_SetBanks -.public GfGfx_DisableEngineAPlanes -.public GfGfx_EngineATogglePlanes -.public GfGfx_DisableEngineBPlanes -.public Sprite_Delete -.public Set2dSpriteVisibleFlag -.public Set2dSpriteAnimActiveFlag -.public Set2dSpriteAnimSeqNo -.public Sprite_ResetAnimCtrlState -.public Sprite_SetAnimCtrlCurrentFrame -.public TouchscreenHitbox_TouchNewIsIn -.public System_GetTouchNew -.public String_New -.public String_Delete -.public String_Copy -.public Save_PlayerData_GetOptionsAddr -.public Save_BerryPots_Get -.public Save_BerryPotRTC_Get -.public Options_GetTextFrameDelay -.public Options_GetFrame -.public Save_GameStats_Get -.public GameStats_Inc -.public GameStats_AddSpecial -.public GetItemIndexMapping -.public GetItemIconCell -.public GetItemIconAnim -.public ItemIdIsBerry -.public GetNutName -.public Bag_HasSpaceForItem -.public Bag_AddItem -.public Bag_TakeItem -.public Save_Bag_Get -.public NNS_GfdDoVramTransfer -.public MI_CpuFill8 -.public MI_CpuCopy8 -.public RTC_ConvertDateTimeToSecond -.public _ll_sdiv -.public _s32_div_f -.public gSystem -.public ov16_022014A0 -.public BerryPots_GetPotGrowthStage -.public BerryPots_GetPotBerryId -.public BerryPots_GetSoilState -.public BerryPots_GetPotMoisture -.public ov16_022015EC -.public ov16_022015F8 -.public ov16_02201604 -.public ov16_02201610 -.public BerryPots_ResetPotMoisture -.public BerryPots_GetPotMulch -.public BerryPots_SetPotMulch -.public ov16_02201668 -.public ov16_02201674 -.public ov16_02201760 -.public BerryPots_SetBerryDatetime -.public BerryPots_CopyBerryDatetime -.public BerryIdToItemId -.public ItemIdToBerryId -.public MulchIdToItemId -.public ItemIdToMulchId -.public GetTotalBerryQuantity -.public GetTotalMulchQuantity -.public ov17_02201BC0 -.public BerryPotsApp_Initialize -.public BerryPotsApp_Run -.public BerryPotsApp_Exit -.public ov17_022023A0 -.public ov17_022028B8 -.public ov17_02202850 -.public ov17_02202A84 -.public ov17_02202B58 -.public ov17_02202C2C -.public ov17_02203A74 -.public ov17_02203C78 diff --git a/asm/include/overlay_18.inc b/asm/include/overlay_18.inc index 1486a8786e..c463c07d49 100644 --- a/asm/include/overlay_18.inc +++ b/asm/include/overlay_18.inc @@ -194,8 +194,8 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public GfGfx_SetBanks .public GfGfx_EngineATogglePlanes .public GfGfx_EngineASetPlanes diff --git a/asm/include/overlay_37.inc b/asm/include/overlay_37.inc index bd39b91b85..7882de411e 100644 --- a/asm/include/overlay_37.inc +++ b/asm/include/overlay_37.inc @@ -77,9 +77,9 @@ .public sub_02021148 .public sub_02021238 .public sub_02021280 -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_41.inc b/asm/include/overlay_41.inc index 16748ad86d..8d35270705 100644 --- a/asm/include/overlay_41.inc +++ b/asm/include/overlay_41.inc @@ -142,10 +142,10 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 -.public sub_02021884 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers +.public ObjCharTransfer_ResetTransferTasksByResID .public sub_02021AC8 .public sub_02021B5C .public sub_02022588 diff --git a/asm/include/overlay_43.inc b/asm/include/overlay_43.inc index 318f0a9542..bdac562d46 100644 --- a/asm/include/overlay_43.inc +++ b/asm/include/overlay_43.inc @@ -119,9 +119,9 @@ .public GF_DestroyVramTransferManager .public GF_RunVramTransferTasks .public sub_02020B78 -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_44.inc b/asm/include/overlay_44.inc index c7621ce0e9..f8982a035d 100644 --- a/asm/include/overlay_44.inc +++ b/asm/include/overlay_44.inc @@ -152,9 +152,9 @@ .public GF_RunVramTransferTasks .public sub_02021148 .public sub_02021238 -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02021AC8 .public sub_02021B5C .public sub_02022588 diff --git a/asm/include/overlay_47.inc b/asm/include/overlay_47.inc index e23c70e24a..0419002d7d 100644 --- a/asm/include/overlay_47.inc +++ b/asm/include/overlay_47.inc @@ -80,9 +80,9 @@ .public GF_CreateVramTransferManager .public GF_DestroyVramTransferManager .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_48.inc b/asm/include/overlay_48.inc index 34331046ab..cf1bb79641 100644 --- a/asm/include/overlay_48.inc +++ b/asm/include/overlay_48.inc @@ -99,9 +99,9 @@ .public GF_DestroyVramTransferManager .public GF_CreateNewVramTransferTask .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_49.inc b/asm/include/overlay_49.inc index 0a258b1956..c08b24a02a 100644 --- a/asm/include/overlay_49.inc +++ b/asm/include/overlay_49.inc @@ -159,10 +159,10 @@ .public sub_02020654 .public sub_02020674 .public sub_0202067C -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 -.public sub_02021A50 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers +.public ObjCharTransfer_DeleteTaskCopyByProxyPtr .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_65.inc b/asm/include/overlay_65.inc index 830fd44da9..fb6d2a927d 100644 --- a/asm/include/overlay_65.inc +++ b/asm/include/overlay_65.inc @@ -113,9 +113,9 @@ .public LCRandom .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_70.inc b/asm/include/overlay_70.inc index fb9dbd07ca..a8ad864cb1 100644 --- a/asm/include/overlay_70.inc +++ b/asm/include/overlay_70.inc @@ -140,9 +140,9 @@ .public AddTextPrinterParameterized .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_72.inc b/asm/include/overlay_72.inc index f331f33d1a..332cf54027 100644 --- a/asm/include/overlay_72.inc +++ b/asm/include/overlay_72.inc @@ -88,9 +88,9 @@ .public AddTextPrinterParameterized .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_73.inc b/asm/include/overlay_73.inc index 80bb4f274e..aabe1071a6 100644 --- a/asm/include/overlay_73.inc +++ b/asm/include/overlay_73.inc @@ -103,9 +103,9 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_74_thumb.inc b/asm/include/overlay_74_thumb.inc index cb16cd37f1..d787569ae7 100644 --- a/asm/include/overlay_74_thumb.inc +++ b/asm/include/overlay_74_thumb.inc @@ -139,10 +139,10 @@ .public TextPrinterCheckActive .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_81.inc b/asm/include/overlay_81.inc index 9d51571899..b98b5f0f11 100644 --- a/asm/include/overlay_81.inc +++ b/asm/include/overlay_81.inc @@ -126,9 +126,9 @@ .public TextPrinterCheckActive .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_82.inc b/asm/include/overlay_82.inc index db8bb6c8a0..b00104842a 100644 --- a/asm/include/overlay_82.inc +++ b/asm/include/overlay_82.inc @@ -93,9 +93,9 @@ .public TextPrinterCheckActive .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_83.inc b/asm/include/overlay_83.inc index 9fccf2ae51..1d1b3bcdb0 100644 --- a/asm/include/overlay_83.inc +++ b/asm/include/overlay_83.inc @@ -129,9 +129,9 @@ .public GF_CreateVramTransferManager .public GF_DestroyVramTransferManager .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_85.inc b/asm/include/overlay_85.inc index ad74e2209e..50b564a722 100644 --- a/asm/include/overlay_85.inc +++ b/asm/include/overlay_85.inc @@ -138,9 +138,9 @@ .public sub_02021148 .public sub_02021238 .public sub_02021280 -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_87.inc b/asm/include/overlay_87.inc index c22b1fb634..82e1b88c9b 100644 --- a/asm/include/overlay_87.inc +++ b/asm/include/overlay_87.inc @@ -99,9 +99,9 @@ .public sub_02021148 .public sub_02021238 .public sub_02021280 -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_88.inc b/asm/include/overlay_88.inc index 56e85e5135..10646a936a 100644 --- a/asm/include/overlay_88.inc +++ b/asm/include/overlay_88.inc @@ -59,9 +59,9 @@ .public GF_DestroyVramTransferManager .public GF_CreateNewVramTransferTask .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_90.inc b/asm/include/overlay_90.inc index a32ffb56be..4c3059d6b3 100644 --- a/asm/include/overlay_90.inc +++ b/asm/include/overlay_90.inc @@ -105,9 +105,9 @@ .public GF_DestroyVramTransferManager .public GF_CreateNewVramTransferTask .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_91.inc b/asm/include/overlay_91.inc index 2c1bceba48..318ab19eff 100644 --- a/asm/include/overlay_91.inc +++ b/asm/include/overlay_91.inc @@ -113,9 +113,9 @@ .public sub_020210D8 .public sub_02021238 .public sub_02021280 -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02021AC8 .public sub_02021B5C .public sub_02022588 diff --git a/asm/include/overlay_96.inc b/asm/include/overlay_96.inc index b52326d599..df25e5f2cf 100644 --- a/asm/include/overlay_96.inc +++ b/asm/include/overlay_96.inc @@ -218,9 +218,9 @@ .public sub_02020E80 .public sub_02020EB0 .public sub_02020F4C -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02021AC8 .public sub_02021B5C .public sub_02022588 diff --git a/asm/include/overlay_97.inc b/asm/include/overlay_97.inc index 5d8469e85e..6d822914b5 100644 --- a/asm/include/overlay_97.inc +++ b/asm/include/overlay_97.inc @@ -54,9 +54,9 @@ .public FillWindowPixelBuffer .public ResetAllTextPrinters .public AddTextPrinterParameterizedWithColor -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_trainer_card_main.inc b/asm/include/overlay_trainer_card_main.inc index 962713af0b..a7a1e7c151 100644 --- a/asm/include/overlay_trainer_card_main.inc +++ b/asm/include/overlay_trainer_card_main.inc @@ -97,9 +97,9 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_trainer_card_signature.inc b/asm/include/overlay_trainer_card_signature.inc index 780d9be750..ed5c098b55 100644 --- a/asm/include/overlay_trainer_card_signature.inc +++ b/asm/include/overlay_trainer_card_signature.inc @@ -79,9 +79,9 @@ .public sub_02021148 .public sub_02021238 .public sub_02021280 -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/unk_0200ACF0.inc b/asm/include/unk_0200ACF0.inc index 5f02acfdc7..6fef20da36 100644 --- a/asm/include/unk_0200ACF0.inc +++ b/asm/include/unk_0200ACF0.inc @@ -31,14 +31,14 @@ .public sub_0200B0CC .public sub_0200B0F8 .public sub_0200B12C -.public sub_02021758 -.public sub_020217B0 -.public sub_0202183C -.public sub_02021884 -.public sub_02021910 -.public sub_02021934 -.public sub_020219B8 -.public sub_02021A50 +.public ObjCharTransfer_CreateTaskAndDoTransferFromTemplate +.public ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW +.public ObjCharTransfer_ReplaceGraphicsFromChardataByResID +.public ObjCharTransfer_ResetTransferTasksByResID +.public ObjCharTransfer_GetProxyPtrByResID +.public ObjCharTransfer_ResizeTaskByResID_GetProxyPtr +.public ObjCharTransfer_CopyTransferTaskByProxyPtr +.public ObjCharTransfer_DeleteTaskCopyByProxyPtr .public sub_02022660 .public sub_020226A4 .public sub_020226E4 diff --git a/asm/include/unk_02013534.inc b/asm/include/unk_02013534.inc index 7ecfdac411..b37f5940b5 100644 --- a/asm/include/unk_02013534.inc +++ b/asm/include/unk_02013534.inc @@ -27,7 +27,7 @@ .public AllocFromHeap .public AllocFromHeapAtEnd .public FreeToHeap -.public sub_02022448 +.public ObjCharTransfer_GetBlockSizeFromMode .public sub_02024714 .public Sprite_Delete .public Sprite_SetMatrix diff --git a/asm/include/unk_020215A0.inc b/asm/include/unk_020215A0.inc deleted file mode 100644 index 27d0549279..0000000000 --- a/asm/include/unk_020215A0.inc +++ /dev/null @@ -1,34 +0,0 @@ -#include -#pragma once -.public AllocFromHeap -.public FreeToHeap -.public GF_CreateNewVramTransferTask -.public sub_020215A0 -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 -.public sub_020216F4 -.public sub_02021758 -.public sub_020217B0 -.public sub_0202183C -.public sub_02021884 -.public sub_02021910 -.public sub_02021934 -.public sub_020219B8 -.public sub_02021A50 -.public sub_02021AC8 -.public sub_02021B5C -.public sub_02021BD0 -.public sub_02021BEC -.public sub_02022448 -.public GF_AssertFail -.public NNS_G2dInitImageProxy -.public NNS_G2dGetImageLocation -.public NNS_G2dLoadImage1DMapping -.public NNS_G2dLoadImage2DMapping -.public NNS_G2dLoadImageVramTransfer -.public GX_GetBankForOBJ -.public GX_GetBankForSubOBJ -.public MIi_CpuClear32 -.public memset -.public _s32_div_f diff --git a/asm/include/unk_02082908.inc b/asm/include/unk_02082908.inc index 19fb836c43..0007b02c46 100644 --- a/asm/include/unk_02082908.inc +++ b/asm/include/unk_02082908.inc @@ -91,9 +91,9 @@ .public AddTextPrinterParameterized .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C -.public sub_020216C8 +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/overlay_01_021E5900.s b/asm/overlay_01_021E5900.s index bfe402a829..3d17e32ad7 100644 --- a/asm/overlay_01_021E5900.s +++ b/asm/overlay_01_021E5900.s @@ -1046,11 +1046,11 @@ ov01_021E61E0: ; 0x021E61E0 mov r1, #0x10 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x14 mov r1, #4 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} @@ -1061,7 +1061,7 @@ _021E6210: .word ov01_022062DC thumb_func_start ov01_021E6214 ov01_021E6214: ; 0x021E6214 push {r3, lr} - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, pc} thumb_func_end ov01_021E6214 diff --git a/asm/overlay_102.s b/asm/overlay_102.s index a8ebacaf9f..5e0269f6b2 100644 --- a/asm/overlay_102.s +++ b/asm/overlay_102.s @@ -3659,8 +3659,8 @@ ov102_021E9198: ; 0x021E9198 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 - bl sub_020216C8 + bl ObjCharTransfer_Init + bl ObjCharTransfer_ClearBuffers add sp, #0x10 pop {r4, pc} .balign 4, 0 @@ -3669,10 +3669,10 @@ _021E91B8: .word ov102_021EC698 thumb_func_start ov102_021E91BC ov102_021E91BC: ; 0x021E91BC - ldr r3, _021E91C0 ; =sub_0202168C + ldr r3, _021E91C0 ; =ObjCharTransfer_Destroy bx r3 .balign 4, 0 -_021E91C0: .word sub_0202168C +_021E91C0: .word ObjCharTransfer_Destroy thumb_func_end ov102_021E91BC thumb_func_start ov102_021E91C4 diff --git a/asm/overlay_112.s b/asm/overlay_112.s index 3771c03e86..d51a8283af 100644 --- a/asm/overlay_112.s +++ b/asm/overlay_112.s @@ -18844,7 +18844,7 @@ ov112_021EF100: ; 0x021EF100 ldr r0, [r4, r0] bl ov112_021F051C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, [r4, #0x18] bl FreeToHeap @@ -18920,11 +18920,11 @@ ov112_021EF19C: ; 0x021EF19C ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x9a bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_121.s b/asm/overlay_121.s index 491cd51946..8e86b947ff 100644 --- a/asm/overlay_121.s +++ b/asm/overlay_121.s @@ -181,7 +181,7 @@ _021E5A5A: mov r0, #4 bl FontID_Release bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r4, #0 add r0, #0x94 @@ -711,11 +711,11 @@ ov121_021E5EDC: ; 0x021E5EDC ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #1 mov r1, #0x9e bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_12_battle_command.s b/asm/overlay_12_battle_command.s index 9b56743ba1..82d13aafc0 100644 --- a/asm/overlay_12_battle_command.s +++ b/asm/overlay_12_battle_command.s @@ -851,7 +851,7 @@ _02246A72: bl BattleSystem_GetPokedex bl Pokedex_IsNatDexEnabled str r0, [sp, #0xe0] - bl sub_02021BD0 + bl ObjCharTransfer_PopTaskManager str r0, [r4, #0x54] add r0, sp, #0xd0 bl ov18_021F8974 @@ -958,7 +958,7 @@ _02246BC4: ldr r0, [r4, #0x50] bl ov18_021F89D0 ldr r0, [r4, #0x54] - bl sub_02021BEC + bl ObjCharTransfer_PushTaskManager ldr r0, [r4] bl ov12_02237D00 mov r0, #0x10 @@ -1307,7 +1307,7 @@ _02246E84: ldr r0, [r4, #0x50] bl ov18_021F89D0 ldr r0, [r4, #0x54] - bl sub_02021BEC + bl ObjCharTransfer_PushTaskManager ldr r0, [r4] bl ov12_02237D00 _02246EEC: diff --git a/asm/overlay_18.s b/asm/overlay_18.s index 0f39f27332..4ef046d775 100644 --- a/asm/overlay_18.s +++ b/asm/overlay_18.s @@ -38668,7 +38668,7 @@ ov18_021F8F28: ; 0x021F8F28 str r0, [sp, #0xc] add r0, r2, #0 mov r2, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx add sp, #0x10 pop {r3, r4, r5, pc} nop @@ -38678,10 +38678,10 @@ _021F8F54: .word 0x00100010 thumb_func_start ov18_021F8F58 ov18_021F8F58: ; 0x021F8F58 - ldr r3, _021F8F5C ; =sub_0202168C + ldr r3, _021F8F5C ; =ObjCharTransfer_Destroy bx r3 .balign 4, 0 -_021F8F5C: .word sub_0202168C +_021F8F5C: .word ObjCharTransfer_Destroy thumb_func_end ov18_021F8F58 thumb_func_start ov18_021F8F60 diff --git a/asm/overlay_37.s b/asm/overlay_37.s index ef1e6fb381..aa7f0f42f3 100644 --- a/asm/overlay_37.s +++ b/asm/overlay_37.s @@ -355,7 +355,7 @@ _021E5BF8: ldr r0, [r6, #0x34] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r6, #0 bl ov37_021E6540 @@ -895,11 +895,11 @@ ov37_021E6090: ; 0x021E6090 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x27 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_41.s b/asm/overlay_41.s index 9f9e572939..797c142dca 100644 --- a/asm/overlay_41.s +++ b/asm/overlay_41.s @@ -1648,11 +1648,11 @@ ov41_02246A94: ; 0x02246A94 mov r1, #0x10 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #5 mov r1, #0xe bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 bl NNS_G2dInitOamManagerModule mov r0, #0 @@ -1718,7 +1718,7 @@ _02246B40: add r5, r5, #4 cmp r4, #4 blt _02246B40 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r3, r4, r5, pc} @@ -9439,7 +9439,7 @@ _0224A3EC: add r1, r4, #0 bl ov41_0224639C add r0, r4, #0 - bl sub_02021884 + bl ObjCharTransfer_ResetTransferTasksByResID add r4, r4, #1 cmp r4, #5 blt _0224A3EC diff --git a/asm/overlay_43.s b/asm/overlay_43.s index 9803b642d4..0882f7e919 100644 --- a/asm/overlay_43.s +++ b/asm/overlay_43.s @@ -1003,11 +1003,11 @@ ov43_0222A690: ; 0x0222A690 add r0, r2, #0 add r2, r1, #0 str r7, [sp, #0x38] - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x40 add r1, r7, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add r1, r6, #0 mov r0, #0x40 @@ -1193,7 +1193,7 @@ _0222A856: blt _0222A856 ldr r0, [r7, #4] bl SpriteList_Delete - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free bl GF_DestroyVramTransferManager diff --git a/asm/overlay_44.s b/asm/overlay_44.s index 11f3daac11..813a110ea2 100644 --- a/asm/overlay_44.s +++ b/asm/overlay_44.s @@ -1120,7 +1120,7 @@ _0222A6F0: ldr r0, [r5, r0] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r5, #0 bl ov44_0222B164 @@ -2262,11 +2262,11 @@ ov44_0222AFE8: ; 0x0222AFE8 add r0, r2, #0 ldr r1, _0222B02C ; =0x00200010 mov r2, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x14 mov r1, #0x35 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 ldr r1, _0222B02C ; =0x00200010 mov r0, #1 @@ -19327,11 +19327,11 @@ ov44_0223376C: ; 0x0223376C ldr r1, _0223381C ; =0x00200010 mov r2, #0x10 str r6, [sp, #0x20] - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #4 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 ldr r1, _0223381C ; =0x00200010 mov r0, #1 @@ -19404,7 +19404,7 @@ _02233844: add r5, r5, #4 cmp r4, #4 blt _02233844 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_47.s b/asm/overlay_47.s index 434725f799..a442c70b53 100644 --- a/asm/overlay_47.s +++ b/asm/overlay_47.s @@ -480,11 +480,11 @@ ov47_02258BB4: ; 0x02258BB4 mov r1, #0x10 ldr r0, _02258C40 ; =ov47_02259E58 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x20 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #1 mov r1, #0x10 @@ -539,7 +539,7 @@ _02258C54: add r5, r5, #4 cmp r4, #4 blt _02258C54 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_48.s b/asm/overlay_48.s index c39f0186b8..e2294dafac 100644 --- a/asm/overlay_48.s +++ b/asm/overlay_48.s @@ -1882,11 +1882,11 @@ ov48_02259688: ; 0x02259688 mov r1, #0x10 ldr r0, _02259720 ; =ov48_0225B1A0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x20 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #1 mov r1, #0x10 @@ -1947,7 +1947,7 @@ _02259734: add r5, r5, #4 cmp r4, #4 blt _02259734 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_49.s b/asm/overlay_49.s index 691ba07e57..a329cf246c 100644 --- a/asm/overlay_49.s +++ b/asm/overlay_49.s @@ -4323,11 +4323,11 @@ _0225A636: ldr r0, _0225A7B4 ; =ov49_02269744 ldr r2, _0225A7B8 ; =0x00100010 mov r1, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x18 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #1 mov r1, #0x10 @@ -4449,7 +4449,7 @@ _0225A80E: blt _0225A80E ldr r0, [r6, #4] bl SpriteList_Delete - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free mov r0, #0x51 @@ -8027,7 +8027,7 @@ ov49_0225C328: ; 0x0225C328 ldr r0, [r5, #0x68] add r4, r1, #0 bl sub_02024B1C - bl sub_02021A50 + bl ObjCharTransfer_DeleteTaskCopyByProxyPtr ldr r0, [r5, #0x68] bl Sprite_Delete mov r0, #0 diff --git a/asm/overlay_65.s b/asm/overlay_65.s index edf2c9bc6c..cc6ef57137 100644 --- a/asm/overlay_65.s +++ b/asm/overlay_65.s @@ -1755,7 +1755,7 @@ _0221CCE4: ldr r0, [r6, r0] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -2558,11 +2558,11 @@ ov65_0221D3B8: ; 0x0221D3B8 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x1a bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_70.s b/asm/overlay_70.s index 33194ef95a..8ca53746a8 100644 --- a/asm/overlay_70.s +++ b/asm/overlay_70.s @@ -2091,11 +2091,11 @@ ov70_022388D0: ; 0x022388D0 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x3d bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} @@ -2854,7 +2854,7 @@ _02238ECC: mov r1, #0 str r1, [r6, r0] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} nop diff --git a/asm/overlay_72.s b/asm/overlay_72.s index f304501efe..d264b64e23 100644 --- a/asm/overlay_72.s +++ b/asm/overlay_72.s @@ -1121,11 +1121,11 @@ ov72_02238164: ; 0x02238164 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x43 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} @@ -1937,7 +1937,7 @@ _0223882A: mov r1, #0 str r1, [r6, r0] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 diff --git a/asm/overlay_73.s b/asm/overlay_73.s index be3585159b..fcbaf2691f 100644 --- a/asm/overlay_73.s +++ b/asm/overlay_73.s @@ -334,7 +334,7 @@ _021E5BD8: ldr r0, [r6, #0x50] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r6, #0 bl ov73_021E6400 @@ -881,11 +881,11 @@ ov73_021E6060: ; 0x021E6060 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x32 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} @@ -5145,11 +5145,11 @@ ov73_021E8168: ; 0x021E8168 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x96 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} @@ -5554,7 +5554,7 @@ _021E8496: mov r1, #0 str r1, [r6, r0] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 diff --git a/asm/overlay_74_thumb.s b/asm/overlay_74_thumb.s index 17a9ae0c01..65ae482c3e 100644 --- a/asm/overlay_74_thumb.s +++ b/asm/overlay_74_thumb.s @@ -21706,11 +21706,11 @@ ov74_02231BC0: ; 0x02231BC0 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x4c bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} @@ -24131,7 +24131,7 @@ _02232EEE: mov r0, #0 str r0, [r6, #0x28] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, _02232F54 ; =0x0000E88C ldr r0, [r6, r0] @@ -29368,12 +29368,12 @@ ov74_0223563C: ; 0x0223563C str r0, [sp, #0xc] add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx ldr r1, _02235678 ; =ov74_0223D454 mov r0, #0x1e ldr r1, [r1, #8] bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} @@ -29884,7 +29884,7 @@ _02235A24: mov r1, #0 str r1, [r0] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0 add r1, r0, #0 diff --git a/asm/overlay_81.s b/asm/overlay_81.s index b3a3b80bca..1bb217c6d2 100644 --- a/asm/overlay_81.s +++ b/asm/overlay_81.s @@ -9781,7 +9781,7 @@ _02242B66: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -9801,11 +9801,11 @@ ov81_02242B90: ; 0x02242B90 ldr r1, _02242BC4 ; =0x00100010 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #8 mov r1, #0x64 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_82.s b/asm/overlay_82.s index 92055fbf83..6a760efe8b 100644 --- a/asm/overlay_82.s +++ b/asm/overlay_82.s @@ -3914,7 +3914,7 @@ _0223FBEA: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -3934,11 +3934,11 @@ ov82_0223FC14: ; 0x0223FC14 mov r1, #0x10 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #4 mov r1, #0x69 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_83.s b/asm/overlay_83.s index f1e4bb76eb..ede8b8f469 100644 --- a/asm/overlay_83.s +++ b/asm/overlay_83.s @@ -18082,7 +18082,7 @@ _0224723A: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r4, r5, r6, pc} .balign 4, 0 @@ -18162,11 +18162,11 @@ ov83_022472DC: ; 0x022472DC add r0, r2, #0 ldr r2, _02247310 ; =0x00100010 mov r1, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x20 mov r1, #0x6b bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_85.s b/asm/overlay_85.s index 54de43b253..2362328304 100644 --- a/asm/overlay_85.s +++ b/asm/overlay_85.s @@ -6750,7 +6750,7 @@ _021E8B34: ldr r0, [r6, #0x60] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r6, #0 bl ov85_021E9288 @@ -7253,11 +7253,11 @@ ov85_021E8F58: ; 0x021E8F58 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x66 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_87.s b/asm/overlay_87.s index a1760af84d..d48b567980 100644 --- a/asm/overlay_87.s +++ b/asm/overlay_87.s @@ -4873,7 +4873,7 @@ _021E7EC6: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -4893,11 +4893,11 @@ ov87_021E7EF0: ; 0x021E7EF0 ldr r1, _021E7F24 ; =0x00200010 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0xe mov r1, #0x7a bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_88.s b/asm/overlay_88.s index 99b46cf631..f8f90f0822 100644 --- a/asm/overlay_88.s +++ b/asm/overlay_88.s @@ -587,11 +587,11 @@ ov88_02258C98: ; 0x02258C98 ldr r0, _02258D30 ; =ov88_02259914 ldr r1, _02258D34 ; =0x00200010 mov r2, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x20 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 ldr r1, _02258D34 ; =0x00200010 mov r0, #1 @@ -653,7 +653,7 @@ _02258D48: add r5, r5, #4 cmp r4, #4 blt _02258D48 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_90.s b/asm/overlay_90.s index b13de13908..e10ebd0fd3 100644 --- a/asm/overlay_90.s +++ b/asm/overlay_90.s @@ -1275,11 +1275,11 @@ ov90_022590CC: ; 0x022590CC add r2, r1, #0 str r6, [sp, #0x1c] str r4, [sp, #0x28] - bl sub_020215C0 + bl ObjCharTransfer_InitEx ldr r0, [sp, #0x18] add r1, r4, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #1 mov r1, #0x10 @@ -1309,7 +1309,7 @@ ov90_02259158: ; 0x02259158 push {r3, lr} ldr r0, [r0] bl SpriteList_Delete - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r3, pc} diff --git a/asm/overlay_91.s b/asm/overlay_91.s index 5c92423c82..7be9972fda 100644 --- a/asm/overlay_91.s +++ b/asm/overlay_91.s @@ -7009,11 +7009,11 @@ ov91_0225FA9C: ; 0x0225FA9C add r0, r2, #0 add r2, r1, #0 str r6, [sp, #0x20] - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x10 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 ldr r1, _0225FB44 ; =0x00200010 mov r0, #1 @@ -7079,7 +7079,7 @@ _0225FB62: add r5, r5, #4 cmp r4, #4 blt _0225FB62 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_96.s b/asm/overlay_96.s index cd5c74cfbd..3f9b084acc 100644 --- a/asm/overlay_96.s +++ b/asm/overlay_96.s @@ -7801,11 +7801,11 @@ ov96_021E92B0: ; 0x021E92B0 add r5, r1, #0 ldr r2, [sp, #0x10] add r1, r3, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx add r0, r5, #0 add r1, r4, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 pop {r3, r4, r5, pc} thumb_func_end ov96_021E92B0 @@ -7814,7 +7814,7 @@ ov96_021E92B0: ; 0x021E92B0 ov96_021E92D0: ; 0x021E92D0 push {r3, lr} bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, pc} thumb_func_end ov96_021E92D0 @@ -23202,7 +23202,7 @@ ov96_021F095C: ; 0x021F095C ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0x77 lsl r0, r0, #4 @@ -32885,7 +32885,7 @@ _021F5598: mov r0, #4 bl FontID_Release bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0 add r1, r0, #0 @@ -47998,7 +47998,7 @@ ov96_021FCE10: ; 0x021FCE10 ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0xf7 lsl r0, r0, #2 @@ -57764,7 +57764,7 @@ _02201BF0: ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, _02201C80 ; =0x000005DC ldr r0, [r4, r0] @@ -63931,7 +63931,7 @@ ov96_02204E58: ; 0x02204E58 ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0xdb lsl r0, r0, #2 @@ -89539,7 +89539,7 @@ _0221172E: ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, _022117BC ; =0x0000074C ldr r0, [r4, r0] diff --git a/asm/overlay_97.s b/asm/overlay_97.s index dc08c7fd17..321991158d 100644 --- a/asm/overlay_97.s +++ b/asm/overlay_97.s @@ -136,7 +136,7 @@ ov97_0221E69C: ; 0x0221E69C mov r0, #2 bl FontID_Release bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, [r4] bl FreeToHeap @@ -325,11 +325,11 @@ ov97_0221E834: ; 0x0221E834 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x5c bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_trainer_card_main.s b/asm/overlay_trainer_card_main.s index 57727eea9b..ce9e1285cf 100644 --- a/asm/overlay_trainer_card_main.s +++ b/asm/overlay_trainer_card_main.s @@ -4170,7 +4170,7 @@ _021E7CF0: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r2, #1 lsl r2, r2, #0x1a @@ -4216,11 +4216,11 @@ ov51_021E7D68: ; 0x021E7D68 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #2 mov r1, #0x19 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #0x19 bl sub_0200B2E0 diff --git a/asm/overlay_trainer_card_signature.s b/asm/overlay_trainer_card_signature.s index 82d837b818..31d9ddc0b9 100644 --- a/asm/overlay_trainer_card_signature.s +++ b/asm/overlay_trainer_card_signature.s @@ -261,7 +261,7 @@ _021E82FC: ldr r0, [r6, #0x3c] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r6, #0 bl ov52_021E8B94 @@ -715,11 +715,11 @@ ov52_021E86DC: ; 0x021E86DC ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x27 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/unk_02013534.s b/asm/unk_02013534.s index b549cddfa4..3c907cbaa3 100644 --- a/asm/unk_02013534.s +++ b/asm/unk_02013534.s @@ -1038,7 +1038,7 @@ _02013C82: add r7, r1, #0 and r7, r0 add r0, r7, #0 - bl sub_02022448 + bl ObjCharTransfer_GetBlockSizeFromMode str r0, [sp, #0x18] ldr r0, [sp, #0x14] ldr r4, [r0, #0xc] @@ -1183,7 +1183,7 @@ _02013DA4: add r5, r1, #0 and r5, r0 add r0, r5, #0 - bl sub_02022448 + bl ObjCharTransfer_GetBlockSizeFromMode ldr r4, [r6, #0xc] str r0, [sp, #0x14] mov r3, #0 @@ -1263,7 +1263,7 @@ _02013E34: _02013E38: ldr r0, _02013E70 ; =0x00300010 and r0, r1 - bl sub_02022448 + bl ObjCharTransfer_GetBlockSizeFromMode ldr r2, [r4, #0xc] mov r3, #0 cmp r2, r4 diff --git a/asm/unk_020215A0.s b/asm/unk_020215A0.s deleted file mode 100644 index f56965625f..0000000000 --- a/asm/unk_020215A0.s +++ /dev/null @@ -1,2246 +0,0 @@ - .include "asm/macros.inc" - .include "unk_020215A0.inc" - .include "global.inc" - - .bss - -_021D21F4: - .space 0x4 - - .text - - thumb_func_start sub_020215A0 -sub_020215A0: ; 0x020215A0 - ldr r1, _020215B4 ; =0x04001000 - ldr r2, [r1] - ldr r1, _020215B8 ; =0x00300010 - lsl r3, r1, #0x16 - ldr r3, [r3] - and r2, r1 - and r1, r3 - ldr r3, _020215BC ; =sub_020215C0 - bx r3 - nop -_020215B4: .word 0x04001000 -_020215B8: .word 0x00300010 -_020215BC: .word sub_020215C0 - thumb_func_end sub_020215A0 - - thumb_func_start sub_020215C0 -sub_020215C0: ; 0x020215C0 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - ldr r0, _02021680 ; =_021D21F4 - str r1, [sp] - ldr r0, [r0] - str r2, [sp, #4] - cmp r0, #0 - bne _0202167A - ldr r0, [r5, #0xc] - mov r1, #0x3c - bl AllocFromHeap - add r1, r0, #0 - ldr r0, _02021680 ; =_021D21F4 - mov r2, #0x3c - str r1, [r0] - mov r0, #0 - bl MIi_CpuClear32 - ldr r1, _02021680 ; =_021D21F4 - ldr r2, [r5] - ldr r0, [r1] - str r2, [r0, #4] - ldr r1, [r1] - ldr r0, [r5, #0xc] - ldr r2, [r1, #4] - mov r1, #0x54 - mul r1, r2 - bl AllocFromHeap - ldr r7, _02021680 ; =_021D21F4 - mov r6, #0 - ldr r1, [r7] - str r0, [r1] - ldr r0, [r5] - cmp r0, #0 - ble _02021622 - add r4, r6, #0 -_0202160E: - ldr r0, [r7] - ldr r0, [r0] - add r0, r0, r4 - bl sub_02021C08 - ldr r0, [r5] - add r6, r6, #1 - add r4, #0x54 - cmp r6, r0 - blt _0202160E -_02021622: - ldr r0, [sp] - bl sub_02022448 - ldr r1, _02021680 ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0x2c] - ldr r0, [sp, #4] - bl sub_02022448 - ldr r2, _02021680 ; =_021D21F4 - mov r3, #1 - ldr r1, [r2] - lsl r3, r3, #0x1a - str r0, [r1, #0x30] - ldr r0, [r3] - ldr r1, _02021684 ; =0xFFCFFFEF - add r4, r0, #0 - ldr r0, [sp] - and r4, r1 - orr r0, r4 - str r0, [r3] - ldr r3, _02021688 ; =0x04001000 - ldr r0, [r3] - and r1, r0 - ldr r0, [sp, #4] - orr r0, r1 - str r0, [r3] - ldr r1, [r2] - ldr r0, [r5, #4] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r1, _02021680 ; =_021D21F4 - add r4, r0, #0 - ldr r1, [r1] - ldr r0, [r5, #8] - ldr r1, [r1, #0x30] - bl sub_020224A8 - add r1, r0, #0 - ldr r2, [r5, #0xc] - add r0, r4, #0 - bl sub_020221D0 -_0202167A: - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop -_02021680: .word _021D21F4 -_02021684: .word 0xFFCFFFEF -_02021688: .word 0x04001000 - thumb_func_end sub_020215C0 - - thumb_func_start sub_0202168C -sub_0202168C: ; 0x0202168C - push {r3, lr} - ldr r0, _020216C4 ; =_021D21F4 - ldr r0, [r0] - cmp r0, #0 - beq _020216C2 - ldr r0, [r0, #0x34] - bl sub_02022238 - ldr r0, _020216C4 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x38] - bl sub_02022238 - bl sub_020218D4 - ldr r0, _020216C4 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0] - bl FreeToHeap - ldr r0, _020216C4 ; =_021D21F4 - ldr r0, [r0] - bl FreeToHeap - ldr r0, _020216C4 ; =_021D21F4 - mov r1, #0 - str r1, [r0] -_020216C2: - pop {r3, pc} - .balign 4, 0 -_020216C4: .word _021D21F4 - thumb_func_end sub_0202168C - - thumb_func_start sub_020216C8 -sub_020216C8: ; 0x020216C8 - push {r3, lr} - ldr r0, _020216F0 ; =_021D21F4 - mov r2, #0 - ldr r1, [r0] - str r2, [r1, #0xc] - ldr r1, [r0] - str r2, [r1, #0x10] - ldr r0, [r0] - ldr r0, [r0, #0x34] - bl sub_02022278 - ldr r0, _020216F0 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x38] - bl sub_02022278 - bl sub_02022060 - pop {r3, pc} - nop -_020216F0: .word _021D21F4 - thumb_func_end sub_020216C8 - - thumb_func_start sub_020216F4 -sub_020216F4: ; 0x020216F4 - push {r3, r4, lr} - sub sp, #0xc - add r4, r0, #0 - add r3, r1, #0 - cmp r2, #1 - add r0, sp, #4 - bne _0202172A - str r0, [sp] - ldr r0, _02021754 ; =_021D21F4 - add r2, r3, #0 - ldr r0, [r0] - add r1, r4, #0 - ldr r0, [r0, #0x1c] - add r3, sp, #8 - bl sub_0202256C - ldr r3, [sp, #4] - cmp r3, #0 - ble _02021750 - mov r2, #0 - str r2, [sp] - ldr r1, [sp, #8] - mov r0, #1 - bl sub_02021EC0 - add sp, #0xc - pop {r3, r4, pc} -_0202172A: - str r0, [sp] - ldr r0, _02021754 ; =_021D21F4 - add r2, r3, #0 - ldr r0, [r0] - add r1, r4, #0 - ldr r0, [r0, #0x20] - add r3, sp, #8 - bl sub_0202256C - ldr r0, [sp, #4] - cmp r0, #0 - ble _02021750 - str r0, [sp] - mov r1, #0 - ldr r2, [sp, #8] - mov r0, #2 - add r3, r1, #0 - bl sub_02021EC0 -_02021750: - add sp, #0xc - pop {r3, r4, pc} - .balign 4, 0 -_02021754: .word _021D21F4 - thumb_func_end sub_020216F4 - - thumb_func_start sub_02021758 -sub_02021758: ; 0x02021758 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, [r5, #8] - bl sub_0202180C - cmp r0, #1 - bne _0202176A - bl GF_AssertFail -_0202176A: - bl sub_02022024 - add r4, r0, #0 - bne _0202177A - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, pc} -_0202177A: - add r0, r5, #0 - add r1, r4, #0 - bl sub_02021C2C - cmp r0, #0 - bne _0202178A - mov r0, #0 - pop {r3, r4, r5, pc} -_0202178A: - add r0, r4, #0 - bl sub_02021C9C - cmp r0, #0 - bne _0202179E - ldr r0, [r4, #0xc] - bl sub_02021884 - mov r0, #0 - pop {r3, r4, r5, pc} -_0202179E: - ldr r0, _020217AC ; =_021D21F4 - ldr r1, [r0] - ldr r0, [r1, #8] - add r0, r0, #1 - str r0, [r1, #8] - mov r0, #1 - pop {r3, r4, r5, pc} - .balign 4, 0 -_020217AC: .word _021D21F4 - thumb_func_end sub_02021758 - - thumb_func_start sub_020217B0 -sub_020217B0: ; 0x020217B0 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, [r5, #8] - bl sub_0202180C - cmp r0, #1 - bne _020217C2 - bl GF_AssertFail -_020217C2: - bl sub_02022024 - add r4, r0, #0 - bne _020217D2 - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, pc} -_020217D2: - add r0, r5, #0 - add r1, r4, #0 - bl sub_02021C2C - cmp r0, #0 - bne _020217E2 - mov r0, #0 - pop {r3, r4, r5, pc} -_020217E2: - mov r0, #1 - str r0, [r4, #0x40] - add r0, r4, #0 - bl sub_02021C9C - cmp r0, #0 - bne _020217FA - ldr r0, [r4, #0xc] - bl sub_02021884 - mov r0, #0 - pop {r3, r4, r5, pc} -_020217FA: - ldr r0, _02021808 ; =_021D21F4 - ldr r1, [r0] - ldr r0, [r1, #8] - add r0, r0, #1 - str r0, [r1, #8] - mov r0, #1 - pop {r3, r4, r5, pc} - .balign 4, 0 -_02021808: .word _021D21F4 - thumb_func_end sub_020217B0 - - thumb_func_start sub_0202180C -sub_0202180C: ; 0x0202180C - push {r3, r4} - ldr r1, _02021838 ; =_021D21F4 - mov r2, #0 - ldr r4, [r1] - ldr r1, [r4, #4] - cmp r1, #0 - ble _02021832 - ldr r3, [r4] -_0202181C: - ldr r1, [r3, #0xc] - cmp r0, r1 - bne _02021828 - mov r0, #1 - pop {r3, r4} - bx lr -_02021828: - ldr r1, [r4, #4] - add r2, r2, #1 - add r3, #0x54 - cmp r2, r1 - blt _0202181C -_02021832: - mov r0, #0 - pop {r3, r4} - bx lr - .balign 4, 0 -_02021838: .word _021D21F4 - thumb_func_end sub_0202180C - - thumb_func_start sub_0202183C -sub_0202183C: ; 0x0202183C - push {r3, r4, r5, lr} - add r4, r0, #0 - add r5, r1, #0 - bne _02021848 - bl GF_AssertFail -_02021848: - add r0, r4, #0 - bl sub_02021D70 - add r4, r0, #0 - bne _02021856 - bl GF_AssertFail -_02021856: - str r5, [r4] - ldr r1, [r4, #4] - mov r0, #1 - tst r0, r1 - beq _0202186C - ldr r1, [r4, #0x34] - ldr r2, [r5, #0x14] - ldr r3, [r5, #0x10] - mov r0, #0x13 - bl GF_CreateNewVramTransferTask -_0202186C: - ldr r1, [r4, #4] - mov r0, #2 - tst r0, r1 - beq _02021880 - ldr r1, [r4, #0x38] - ldr r2, [r5, #0x14] - ldr r3, [r5, #0x10] - mov r0, #0x23 - bl GF_CreateNewVramTransferTask -_02021880: - pop {r3, r4, r5, pc} - .balign 4, 0 - thumb_func_end sub_0202183C - - thumb_func_start sub_02021884 -sub_02021884: ; 0x02021884 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - mov r5, #1 - mov r7, #0 -_0202188C: - add r0, r6, #0 - bl sub_02021D70 - add r4, r0, #0 - bne _0202189A - bl GF_AssertFail -_0202189A: - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #4 - bne _020218AE - add r0, r4, #0 - add r0, #0x10 - bl sub_02021A50 - b _020218B0 -_020218AE: - add r5, r7, #0 -_020218B0: - cmp r5, #0 - bne _0202188C - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - beq _020218CE - add r0, r4, #0 - bl sub_02021D58 - ldr r0, _020218D0 ; =_021D21F4 - ldr r1, [r0] - ldr r0, [r1, #8] - sub r0, r0, #1 - str r0, [r1, #8] -_020218CE: - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_020218D0: .word _021D21F4 - thumb_func_end sub_02021884 - - thumb_func_start sub_020218D4 -sub_020218D4: ; 0x020218D4 - push {r4, r5, r6, lr} - ldr r6, _0202190C ; =_021D21F4 - mov r4, #0 - ldr r1, [r6] - ldr r0, [r1, #4] - cmp r0, #0 - ble _0202190A - add r5, r4, #0 -_020218E4: - ldr r1, [r1] - add r0, r1, r5 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - beq _020218FE - add r0, r1, r5 - bl sub_02021D58 - ldr r1, [r6] - ldr r0, [r1, #8] - sub r0, r0, #1 - str r0, [r1, #8] -_020218FE: - ldr r1, [r6] - add r4, r4, #1 - ldr r0, [r1, #4] - add r5, #0x54 - cmp r4, r0 - blt _020218E4 -_0202190A: - pop {r4, r5, r6, pc} - .balign 4, 0 -_0202190C: .word _021D21F4 - thumb_func_end sub_020218D4 - - thumb_func_start sub_02021910 -sub_02021910: ; 0x02021910 - push {r4, lr} - bl sub_02021D70 - add r4, r0, #0 - bne _0202191E - bl GF_AssertFail -_0202191E: - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _0202192C - mov r0, #0 - pop {r4, pc} -_0202192C: - add r4, #0x10 - add r0, r4, #0 - pop {r4, pc} - .balign 4, 0 - thumb_func_end sub_02021910 - - thumb_func_start sub_02021934 -sub_02021934: ; 0x02021934 - push {r3, r4, r5, lr} - sub sp, #0x18 - add r5, r1, #0 - bl sub_02021D70 - add r4, r0, #0 - bne _02021946 - bl GF_AssertFail -_02021946: - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _02021956 - add sp, #0x18 - mov r0, #0 - pop {r3, r4, r5, pc} -_02021956: - add r0, sp, #0xc - str r0, [sp] - add r0, sp, #8 - str r0, [sp, #4] - ldr r0, [r4, #4] - add r1, sp, #0x14 - add r2, sp, #0x10 - add r3, r5, #0 - bl sub_02021DE4 - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #3 - bne _0202197A - add sp, #0x18 - mov r0, #0 - pop {r3, r4, r5, pc} -_0202197A: - add r0, r4, #0 - mov r1, #3 - add r0, #0x3c - strb r1, [r0] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - add r0, r4, #0 - bl sub_02021E90 - mov r0, #1 - str r0, [r4, #0x48] - ldr r0, [sp, #0xc] - str r0, [r4, #0x4c] - ldr r0, [sp, #8] - str r0, [r4, #0x50] - add r0, r4, #0 - bl sub_02021FB0 - ldr r0, [sp, #8] - str r0, [sp] - ldr r0, [r4, #4] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0xc] - bl sub_02021EC0 - add r4, #0x10 - add r0, r4, #0 - add sp, #0x18 - pop {r3, r4, r5, pc} - .balign 4, 0 - thumb_func_end sub_02021934 - - thumb_func_start sub_020219B8 -sub_020219B8: ; 0x020219B8 - push {r3, r4, r5, lr} - sub sp, #0x18 - bl sub_02021C50 - add r4, r0, #0 - bne _020219C8 - bl GF_AssertFail -_020219C8: - bl sub_02022024 - add r5, r0, #0 - bne _020219D4 - bl GF_AssertFail -_020219D4: - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #3 - beq _020219E4 - add sp, #0x18 - mov r0, #0 - pop {r3, r4, r5, pc} -_020219E4: - add r3, r5, #0 - mov r2, #0xa -_020219E8: - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _020219E8 - ldr r0, [r4] - mov r1, #4 - str r0, [r3] - add r0, r5, #0 - add r0, #0x3c - strb r1, [r0] - ldr r0, [r5, #4] - mov r1, #1 - tst r1, r0 - beq _02021A08 - ldr r3, [r5, #0x4c] - b _02021A0A -_02021A08: - ldr r3, [r5, #0x50] -_02021A0A: - add r1, sp, #0xc - str r1, [sp] - add r1, sp, #8 - str r1, [sp, #4] - add r1, sp, #0x14 - add r2, sp, #0x10 - bl sub_02021DE4 - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - add r0, r5, #0 - bl sub_02021E90 - mov r0, #1 - str r0, [r5, #0x48] - ldr r0, [sp, #0xc] - str r0, [r5, #0x4c] - ldr r0, [sp, #8] - str r0, [r5, #0x50] - add r0, r5, #0 - bl sub_02021FB0 - ldr r0, [sp, #8] - str r0, [sp] - ldr r0, [r5, #4] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0xc] - bl sub_02021EC0 - add r5, #0x10 - add r0, r5, #0 - add sp, #0x18 - pop {r3, r4, r5, pc} - .balign 4, 0 - thumb_func_end sub_020219B8 - - thumb_func_start sub_02021A50 -sub_02021A50: ; 0x02021A50 - push {r4, r5, r6, lr} - ldr r2, _02021AC4 ; =_021D21F4 - mov r1, #0 - ldr r5, [r2] - ldr r4, [r5, #4] - cmp r4, #0 - ble _02021A8E - ldr r2, [r5] - add r3, r1, #0 -_02021A62: - add r6, r2, #0 - add r6, #0x3c - ldrb r6, [r6] - cmp r6, #3 - beq _02021A78 - ldr r6, [r5] - add r6, r6, r3 - add r6, #0x3c - ldrb r6, [r6] - cmp r6, #4 - bne _02021A82 -_02021A78: - ldr r6, [r5] - add r6, r6, r3 - add r6, #0x10 - cmp r6, r0 - beq _02021A8E -_02021A82: - ldr r6, [r5, #4] - add r1, r1, #1 - add r2, #0x54 - add r3, #0x54 - cmp r1, r6 - blt _02021A62 -_02021A8E: - cmp r1, r4 - bge _02021AC2 - mov r0, #0x54 - add r4, r1, #0 - mul r4, r0 - ldr r0, [r5] - add r0, r0, r4 - bl sub_020223C4 - ldr r0, _02021AC4 ; =_021D21F4 - ldr r1, [r0] - ldr r2, [r1] - add r2, #0x3c - ldrb r1, [r2, r4] - cmp r1, #3 - bne _02021AB4 - mov r0, #2 - strb r0, [r2, r4] - pop {r4, r5, r6, pc} -_02021AB4: - mov r1, #0 - strb r1, [r2, r4] - ldr r0, [r0] - ldr r0, [r0] - add r0, r0, r4 - bl sub_02021C08 -_02021AC2: - pop {r4, r5, r6, pc} - .balign 4, 0 -_02021AC4: .word _021D21F4 - thumb_func_end sub_02021A50 - - thumb_func_start sub_02021AC8 -sub_02021AC8: ; 0x02021AC8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r6, r0, #0 - add r5, r2, #0 - add r4, r3, #0 - cmp r1, #0 - bne _02021B02 - add r1, r5, #0 - add r2, sp, #0x14 - add r3, sp, #0x10 - bl sub_020224C0 - add r7, r0, #0 - beq _02021B52 - add r0, r6, #0 - add r1, r5, #0 - bl sub_02022510 - strh r5, [r4, #8] - str r6, [r4] - cmp r5, #1 - bne _02021AF8 - ldr r0, [sp, #0x14] - b _02021AFA -_02021AF8: - ldr r0, [sp, #0x10] -_02021AFA: - str r0, [r4, #4] - mov r0, #0 - strh r0, [r4, #0xa] - b _02021B52 -_02021B02: - add r0, sp, #0xc - str r0, [sp] - add r0, sp, #8 - str r0, [sp, #4] - add r0, r5, #0 - add r1, sp, #0x14 - add r2, sp, #0x10 - add r3, r6, #0 - bl sub_02021DE4 - add r7, r0, #0 - beq _02021B52 - ldr r0, [sp, #8] - str r0, [sp] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0xc] - add r0, r5, #0 - bl sub_02021EC0 - strh r5, [r4, #8] - cmp r5, #1 - bne _02021B3E - ldr r0, [sp, #0xc] - str r0, [r4] - ldr r0, _02021B58 ; =_021D21F4 - ldr r1, [sp, #0x14] - ldr r0, [r0] - ldr r0, [r0, #0x1c] - b _02021B4A -_02021B3E: - ldr r0, [sp, #8] - str r0, [r4] - ldr r0, _02021B58 ; =_021D21F4 - ldr r1, [sp, #0x10] - ldr r0, [r0] - ldr r0, [r0, #0x20] -_02021B4A: - add r0, r1, r0 - str r0, [r4, #4] - mov r0, #1 - strh r0, [r4, #0xa] -_02021B52: - add r0, r7, #0 - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_02021B58: .word _021D21F4 - thumb_func_end sub_02021AC8 - - thumb_func_start sub_02021B5C -sub_02021B5C: ; 0x02021B5C - push {r3, r4, r5, lr} - add r4, r0, #0 - ldrh r0, [r4, #0xa] - cmp r0, #0 - beq _02021BCA - ldrh r1, [r4, #8] - mov r0, #1 - tst r0, r1 - beq _02021B98 - ldr r1, _02021BCC ; =_021D21F4 - ldr r0, [r4] - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - add r5, r0, #0 - ldr r0, _02021BCC ; =_021D21F4 - ldr r1, [r4, #4] - ldr r2, [r0] - ldr r0, [r2, #0x1c] - sub r0, r1, r0 - ldr r1, [r2, #0x2c] - bl sub_020224A8 - ldr r2, _02021BCC ; =_021D21F4 - add r1, r5, #0 - ldr r2, [r2] - ldr r2, [r2, #0x34] - bl sub_02022374 -_02021B98: - ldrh r1, [r4, #8] - mov r0, #2 - tst r0, r1 - beq _02021BCA - ldr r1, _02021BCC ; =_021D21F4 - ldr r0, [r4] - ldr r1, [r1] - ldr r1, [r1, #0x30] - bl sub_020224A8 - add r5, r0, #0 - ldr r0, _02021BCC ; =_021D21F4 - ldr r1, [r4, #4] - ldr r2, [r0] - ldr r0, [r2, #0x20] - sub r0, r1, r0 - ldr r1, [r2, #0x30] - bl sub_020224A8 - ldr r2, _02021BCC ; =_021D21F4 - add r1, r5, #0 - ldr r2, [r2] - ldr r2, [r2, #0x38] - bl sub_02022374 -_02021BCA: - pop {r3, r4, r5, pc} - .balign 4, 0 -_02021BCC: .word _021D21F4 - thumb_func_end sub_02021B5C - - thumb_func_start sub_02021BD0 -sub_02021BD0: ; 0x02021BD0 - push {r3, lr} - ldr r0, _02021BE8 ; =_021D21F4 - ldr r0, [r0] - cmp r0, #0 - bne _02021BDE - bl GF_AssertFail -_02021BDE: - ldr r1, _02021BE8 ; =_021D21F4 - mov r2, #0 - ldr r0, [r1] - str r2, [r1] - pop {r3, pc} - .balign 4, 0 -_02021BE8: .word _021D21F4 - thumb_func_end sub_02021BD0 - - thumb_func_start sub_02021BEC -sub_02021BEC: ; 0x02021BEC - push {r4, lr} - add r4, r0, #0 - ldr r0, _02021C04 ; =_021D21F4 - ldr r0, [r0] - cmp r0, #0 - beq _02021BFC - bl GF_AssertFail -_02021BFC: - ldr r0, _02021C04 ; =_021D21F4 - str r4, [r0] - pop {r4, pc} - nop -_02021C04: .word _021D21F4 - thumb_func_end sub_02021BEC - - thumb_func_start sub_02021C08 -sub_02021C08: ; 0x02021C08 - mov r2, #0 - str r2, [r0] - str r2, [r0, #4] - strb r2, [r0, #8] - sub r1, r2, #1 - str r1, [r0, #0xc] - str r2, [r0, #0x34] - add r1, r0, #0 - str r2, [r0, #0x38] - add r1, #0x3c - strb r2, [r1] - str r2, [r0, #0x40] - ldr r3, _02021C28 ; =NNS_G2dInitImageProxy - add r0, #0x10 - bx r3 - nop -_02021C28: .word NNS_G2dInitImageProxy - thumb_func_end sub_02021C08 - - thumb_func_start sub_02021C2C -sub_02021C2C: ; 0x02021C2C - ldr r2, [r0] - str r2, [r1] - ldr r2, [r0, #8] - str r2, [r1, #0xc] - ldr r2, [r0, #4] - str r2, [r1, #4] - ldr r2, [r1] - ldr r2, [r2, #0xc] - lsr r2, r2, #8 - strb r2, [r1, #8] - ldr r0, [r0, #0xc] - str r0, [r1, #0x44] - mov r0, #0 - str r0, [r1, #0x48] - str r0, [r1, #0x4c] - str r0, [r1, #0x50] - mov r0, #1 - bx lr - thumb_func_end sub_02021C2C - - thumb_func_start sub_02021C50 -sub_02021C50: ; 0x02021C50 - push {r3, r4, r5, r6} - ldr r2, _02021C98 ; =_021D21F4 - mov r1, #0 - ldr r5, [r2] - ldr r4, [r5, #4] - cmp r4, #0 - ble _02021C82 - ldr r2, [r5] - add r3, r1, #0 -_02021C62: - add r6, r2, #0 - add r6, #0x3c - ldrb r6, [r6] - cmp r6, #0 - beq _02021C76 - ldr r6, [r5] - add r6, r6, r3 - add r6, #0x10 - cmp r6, r0 - beq _02021C82 -_02021C76: - ldr r6, [r5, #4] - add r1, r1, #1 - add r2, #0x54 - add r3, #0x54 - cmp r1, r6 - blt _02021C62 -_02021C82: - cmp r1, r4 - blt _02021C8C - mov r0, #0 - pop {r3, r4, r5, r6} - bx lr -_02021C8C: - mov r0, #0x54 - ldr r2, [r5] - mul r0, r1 - add r0, r2, r0 - pop {r3, r4, r5, r6} - bx lr - .balign 4, 0 -_02021C98: .word _021D21F4 - thumb_func_end sub_02021C50 - - thumb_func_start sub_02021C9C -sub_02021C9C: ; 0x02021C9C - push {r3, lr} - ldrb r1, [r0, #8] - mov r2, #1 - cmp r1, #0 - beq _02021CAE - mov r1, #2 - add r0, #0x3c - strb r1, [r0] - b _02021CC8 -_02021CAE: - add r1, r0, #0 - add r1, #0x3c - strb r2, [r1] - ldr r1, [r0, #0x44] - cmp r1, #0 - bne _02021CC2 - bl sub_02021CCC - add r2, r0, #0 - b _02021CC8 -_02021CC2: - bl sub_02021D00 - add r2, r0, #0 -_02021CC8: - add r0, r2, #0 - pop {r3, pc} - thumb_func_end sub_02021C9C - - thumb_func_start sub_02021CCC -sub_02021CCC: ; 0x02021CCC - push {r3, r4, r5, lr} - sub sp, #8 - add r5, r0, #0 - ldr r0, [r5] - ldr r1, [r5, #4] - ldr r0, [r0, #0x10] - add r2, sp, #4 - add r3, sp, #0 - bl sub_020224C0 - add r4, r0, #0 - beq _02021CF8 - ldr r1, [sp, #4] - ldr r2, [sp] - add r0, r5, #0 - bl sub_02021DD0 - ldr r0, [r5] - ldr r1, [r5, #4] - ldr r0, [r0, #0x10] - bl sub_02022510 -_02021CF8: - add r0, r4, #0 - add sp, #8 - pop {r3, r4, r5, pc} - .balign 4, 0 - thumb_func_end sub_02021CCC - - thumb_func_start sub_02021D00 -sub_02021D00: ; 0x02021D00 - push {r4, lr} - sub sp, #0x18 - add r4, r0, #0 - add r0, sp, #0xc - str r0, [sp] - add r0, sp, #8 - str r0, [sp, #4] - ldr r3, [r4] - ldr r0, [r4, #4] - ldr r3, [r3, #0x10] - add r1, sp, #0x14 - add r2, sp, #0x10 - bl sub_02021DE4 - cmp r0, #0 - bne _02021D26 - add sp, #0x18 - mov r0, #0 - pop {r4, pc} -_02021D26: - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - add r0, r4, #0 - bl sub_02021E90 - mov r0, #1 - str r0, [r4, #0x48] - ldr r0, [sp, #0xc] - str r0, [r4, #0x4c] - ldr r0, [sp, #8] - str r0, [r4, #0x50] - add r0, r4, #0 - bl sub_02021F28 - ldr r0, [sp, #8] - str r0, [sp] - ldr r0, [r4, #4] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0xc] - bl sub_02021EC0 - mov r0, #1 - add sp, #0x18 - pop {r4, pc} - thumb_func_end sub_02021D00 - - thumb_func_start sub_02021D58 -sub_02021D58: ; 0x02021D58 - push {r4, lr} - add r4, r0, #0 - ldr r1, [r4, #0x48] - cmp r1, #0 - beq _02021D66 - bl sub_020223C4 -_02021D66: - add r0, r4, #0 - bl sub_02021C08 - pop {r4, pc} - .balign 4, 0 - thumb_func_end sub_02021D58 - - thumb_func_start sub_02021D70 -sub_02021D70: ; 0x02021D70 - push {r4, r5} - ldr r2, _02021DA4 ; =_021D21F4 - mov r1, #0 - ldr r5, [r2] - ldr r2, [r5, #4] - cmp r2, #0 - ble _02021D9C - ldr r2, [r5] - add r4, r2, #0 -_02021D82: - ldr r3, [r4, #0xc] - cmp r0, r3 - bne _02021D92 - mov r0, #0x54 - mul r0, r1 - add r0, r2, r0 - pop {r4, r5} - bx lr -_02021D92: - ldr r3, [r5, #4] - add r1, r1, #1 - add r4, #0x54 - cmp r1, r3 - blt _02021D82 -_02021D9C: - mov r0, #0 - pop {r4, r5} - bx lr - nop -_02021DA4: .word _021D21F4 - thumb_func_end sub_02021D70 - - thumb_func_start sub_02021DA8 -sub_02021DA8: ; 0x02021DA8 - cmp r1, #1 - bne _02021DB4 - mov r1, #1 - lsl r1, r1, #0x1a - ldr r2, [r1] - b _02021DB8 -_02021DB4: - ldr r1, _02021DC8 ; =0x04001000 - ldr r2, [r1] -_02021DB8: - ldr r1, _02021DCC ; =0x00300010 - and r2, r1 - ldr r1, [r0] - str r2, [r1, #8] - ldr r0, [r0] - ldr r0, [r0, #8] - bx lr - nop -_02021DC8: .word 0x04001000 -_02021DCC: .word 0x00300010 - thumb_func_end sub_02021DA8 - - thumb_func_start sub_02021DD0 -sub_02021DD0: ; 0x02021DD0 - push {r3, lr} - str r1, [r0, #0x34] - str r2, [r0, #0x38] - ldrb r1, [r0, #8] - cmp r1, #0 - bne _02021DE0 - bl sub_02021F28 -_02021DE0: - pop {r3, pc} - .balign 4, 0 - thumb_func_end sub_02021DD0 - - thumb_func_start sub_02021DE4 -sub_02021DE4: ; 0x02021DE4 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - ldr r0, [sp, #0x1c] - add r6, r2, #0 - str r0, [sp, #0x1c] - mov r2, #1 - add r0, r5, #0 - add r4, r1, #0 - str r3, [sp] - ldr r7, [sp, #0x18] - tst r0, r2 - beq _02021E3C - ldr r1, _02021E8C ; =_021D21F4 - add r0, r3, #0 - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_02022488 - ldr r1, _02021E8C ; =_021D21F4 - str r0, [r7] - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x34] - bl sub_020222EC - mov r1, #0 - mvn r1, r1 - str r0, [r4] - cmp r0, r1 - bne _02021E30 - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} -_02021E30: - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_020224B8 - str r0, [r4] -_02021E3C: - mov r0, #2 - tst r0, r5 - beq _02021E86 - ldr r1, _02021E8C ; =_021D21F4 - ldr r0, [sp] - ldr r1, [r1] - mov r2, #1 - ldr r1, [r1, #0x30] - bl sub_02022488 - ldr r1, [sp, #0x1c] - str r0, [r1] - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x30] - bl sub_020224A8 - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x38] - bl sub_020222EC - mov r1, #0 - mvn r1, r1 - str r0, [r6] - cmp r0, r1 - bne _02021E7A - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} -_02021E7A: - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x30] - bl sub_020224B8 - str r0, [r6] -_02021E86: - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} - nop -_02021E8C: .word _021D21F4 - thumb_func_end sub_02021DE4 - - thumb_func_start sub_02021E90 -sub_02021E90: ; 0x02021E90 - push {r3, r4} - ldr r4, [r0, #4] - mov r3, #1 - tst r3, r4 - beq _02021EA4 - ldr r3, _02021EBC ; =_021D21F4 - ldr r3, [r3] - ldr r3, [r3, #0x1c] - add r1, r1, r3 - str r1, [r0, #0x34] -_02021EA4: - ldr r3, [r0, #4] - mov r1, #2 - tst r1, r3 - beq _02021EB6 - ldr r1, _02021EBC ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x20] - add r1, r2, r1 - str r1, [r0, #0x38] -_02021EB6: - pop {r3, r4} - bx lr - nop -_02021EBC: .word _021D21F4 - thumb_func_end sub_02021E90 - - thumb_func_start sub_02021EC0 -sub_02021EC0: ; 0x02021EC0 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - mov r0, #1 - add r4, r1, #0 - add r6, r2, #0 - tst r0, r5 - beq _02021EF4 - ldr r1, _02021F24 ; =_021D21F4 - add r0, r3, #0 - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r1, _02021F24 ; =_021D21F4 - add r7, r0, #0 - ldr r1, [r1] - add r0, r4, #0 - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r2, _02021F24 ; =_021D21F4 - add r1, r7, #0 - ldr r2, [r2] - ldr r2, [r2, #0x34] - bl sub_02022290 -_02021EF4: - mov r0, #2 - tst r0, r5 - beq _02021F20 - ldr r1, _02021F24 ; =_021D21F4 - ldr r0, [sp, #0x18] - ldr r1, [r1] - ldr r1, [r1, #0x30] - bl sub_020224A8 - ldr r1, _02021F24 ; =_021D21F4 - add r4, r0, #0 - ldr r1, [r1] - add r0, r6, #0 - ldr r1, [r1, #0x30] - bl sub_020224A8 - ldr r2, _02021F24 ; =_021D21F4 - add r1, r4, #0 - ldr r2, [r2] - ldr r2, [r2, #0x38] - bl sub_02022290 -_02021F20: - pop {r3, r4, r5, r6, r7, pc} - nop -_02021F24: .word _021D21F4 - thumb_func_end sub_02021EC0 - - thumb_func_start sub_02021F28 -sub_02021F28: ; 0x02021F28 - push {r4, lr} - add r4, r0, #0 - add r0, #0x10 - bl NNS_G2dInitImageProxy - ldr r1, [r4, #4] - cmp r1, #3 - beq _02021F40 - add r0, r4, #0 - bl sub_02021F54 - pop {r4, pc} -_02021F40: - add r0, r4, #0 - mov r1, #1 - bl sub_02021F54 - add r0, r4, #0 - mov r1, #2 - bl sub_02021F54 - pop {r4, pc} - .balign 4, 0 - thumb_func_end sub_02021F28 - - thumb_func_start sub_02021F54 -sub_02021F54: ; 0x02021F54 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r2, [r5, #0x40] - add r4, r1, #0 - cmp r2, #0 - beq _02021F66 - bl sub_02021DA8 - b _02021F68 -_02021F66: - add r0, r4, #0 -_02021F68: - cmp r4, #1 - bne _02021F76 - mov r2, #1 - lsl r2, r2, #0x1a - ldr r1, [r5, #0x34] - ldr r2, [r2] - b _02021F7C -_02021F76: - ldr r2, _02021FAC ; =0x04001000 - ldr r1, [r5, #0x38] - ldr r2, [r2] -_02021F7C: - cmp r0, #0 - ldr r0, [r5] - bne _02021F8E - add r5, #0x10 - add r2, r4, #0 - add r3, r5, #0 - bl NNS_G2dLoadImage2DMapping - b _02021F98 -_02021F8E: - add r5, #0x10 - add r2, r4, #0 - add r3, r5, #0 - bl NNS_G2dLoadImage1DMapping -_02021F98: - cmp r4, #1 - bne _02021FA4 - mov r0, #1 - lsl r0, r0, #0x1a - ldr r0, [r0] - pop {r3, r4, r5, pc} -_02021FA4: - ldr r0, _02021FAC ; =0x04001000 - ldr r0, [r0] - pop {r3, r4, r5, pc} - nop -_02021FAC: .word 0x04001000 - thumb_func_end sub_02021F54 - - thumb_func_start sub_02021FB0 -sub_02021FB0: ; 0x02021FB0 - push {r4, lr} - add r4, r0, #0 - add r0, #0x10 - bl NNS_G2dInitImageProxy - ldr r1, [r4, #4] - cmp r1, #3 - beq _02021FC8 - add r0, r4, #0 - bl sub_02021FDC - pop {r4, pc} -_02021FC8: - add r0, r4, #0 - mov r1, #1 - bl sub_02021FDC - add r0, r4, #0 - mov r1, #2 - bl sub_02021FDC - pop {r4, pc} - .balign 4, 0 - thumb_func_end sub_02021FB0 - - thumb_func_start sub_02021FDC -sub_02021FDC: ; 0x02021FDC - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r2, [r5, #0x40] - add r4, r1, #0 - cmp r2, #0 - beq _02021FEC - bl sub_02021DA8 -_02021FEC: - cmp r4, #1 - bne _02021FFA - mov r0, #1 - lsl r0, r0, #0x1a - ldr r1, [r5, #0x34] - ldr r0, [r0] - b _02022000 -_02021FFA: - ldr r0, _02022020 ; =0x04001000 - ldr r1, [r5, #0x38] - ldr r0, [r0] -_02022000: - ldr r0, [r5] - add r5, #0x10 - add r2, r4, #0 - add r3, r5, #0 - bl NNS_G2dLoadImageVramTransfer - cmp r4, #1 - bne _02022018 - mov r0, #1 - lsl r0, r0, #0x1a - ldr r0, [r0] - pop {r3, r4, r5, pc} -_02022018: - ldr r0, _02022020 ; =0x04001000 - ldr r0, [r0] - pop {r3, r4, r5, pc} - nop -_02022020: .word 0x04001000 - thumb_func_end sub_02021FDC - - thumb_func_start sub_02022024 -sub_02022024: ; 0x02022024 - push {r3, r4} - ldr r1, _0202205C ; =_021D21F4 - mov r0, #0 - ldr r4, [r1] - ldr r1, [r4, #4] - cmp r1, #0 - ble _02022054 - ldr r1, [r4] - add r3, r1, #0 -_02022036: - add r2, r3, #0 - add r2, #0x3c - ldrb r2, [r2] - cmp r2, #0 - bne _0202204A - mov r2, #0x54 - mul r2, r0 - add r0, r1, r2 - pop {r3, r4} - bx lr -_0202204A: - ldr r2, [r4, #4] - add r0, r0, #1 - add r3, #0x54 - cmp r0, r2 - blt _02022036 -_02022054: - mov r0, #0 - pop {r3, r4} - bx lr - nop -_0202205C: .word _021D21F4 - thumb_func_end sub_02022024 - - thumb_func_start sub_02022060 -sub_02022060: ; 0x02022060 - push {r3, lr} - bl GX_GetBankForOBJ - cmp r0, #0x30 - bgt _02022090 - bge _020220D8 - cmp r0, #0x10 - bgt _0202208A - bge _020220CC - cmp r0, #3 - bhi _02022108 - add r1, r0, r0 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_02022082: ; jump table - .short _020220AA - _02022082 - 2 ; case 0 - .short _020220F0 - _02022082 - 2 ; case 1 - .short _020220F0 - _02022082 - 2 ; case 2 - .short _020220FC - _02022082 - 2 ; case 3 -_0202208A: - cmp r0, #0x20 - beq _020220B4 - b _02022108 -_02022090: - cmp r0, #0x50 - bgt _0202209C - bge _020220D8 - cmp r0, #0x40 - beq _020220B4 - b _02022108 -_0202209C: - cmp r0, #0x60 - bgt _020220A4 - beq _020220C0 - b _02022108 -_020220A4: - cmp r0, #0x70 - beq _020220E4 - b _02022108 -_020220AA: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x14] - b _02022110 -_020220B4: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #1 - ldr r0, [r0] - lsl r1, r1, #0xe - str r1, [r0, #0x14] - b _02022110 -_020220C0: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #2 - ldr r0, [r0] - lsl r1, r1, #0xe - str r1, [r0, #0x14] - b _02022110 -_020220CC: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #1 - ldr r0, [r0] - lsl r1, r1, #0x10 - str r1, [r0, #0x14] - b _02022110 -_020220D8: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #5 - ldr r0, [r0] - lsl r1, r1, #0xe - str r1, [r0, #0x14] - b _02022110 -_020220E4: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #6 - ldr r0, [r0] - lsl r1, r1, #0xe - str r1, [r0, #0x14] - b _02022110 -_020220F0: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #2 - ldr r0, [r0] - lsl r1, r1, #0x10 - str r1, [r0, #0x14] - b _02022110 -_020220FC: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #1 - ldr r0, [r0] - lsl r1, r1, #0x12 - str r1, [r0, #0x14] - b _02022110 -_02022108: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x14] -_02022110: - bl GX_GetBankForSubOBJ - cmp r0, #0 - beq _02022126 - cmp r0, #8 - beq _0202213A - mov r1, #1 - lsl r1, r1, #8 - cmp r0, r1 - beq _02022130 - b _02022146 -_02022126: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x18] - b _0202214E -_02022130: - ldr r0, _020221B0 ; =_021D21F4 - lsl r1, r1, #6 - ldr r0, [r0] - str r1, [r0, #0x18] - b _0202214E -_0202213A: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #2 - ldr r0, [r0] - lsl r1, r1, #0x10 - str r1, [r0, #0x18] - b _0202214E -_02022146: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x18] -_0202214E: - ldr r0, _020221B0 ; =_021D21F4 - ldr r1, [r0] - ldr r0, [r1, #0x24] - ldr r1, [r1, #0x2c] - bl sub_020224B8 - ldr r1, _020221B0 ; =_021D21F4 - ldr r3, [r1] - ldr r2, [r3, #0x14] - sub r0, r2, r0 - str r0, [r3, #0x1c] - ldr r1, [r1] - ldr r0, [r1, #0x28] - ldr r1, [r1, #0x30] - bl sub_020224B8 - ldr r1, _020221B0 ; =_021D21F4 - ldr r3, [r1] - ldr r2, [r3, #0x18] - sub r0, r2, r0 - str r0, [r3, #0x20] - ldr r1, [r1] - mov r2, #0 - ldr r0, [r1, #0x1c] - cmp r0, #0 - blt _0202218A - ldr r0, [r1, #0x20] - cmp r0, #0 - blt _0202218A - mov r2, #1 -_0202218A: - cmp r2, #0 - bne _02022192 - bl GF_AssertFail -_02022192: - ldr r0, _020221B0 ; =_021D21F4 - mov r2, #0 - ldr r1, [r0] - ldr r0, [r1, #0x1c] - cmp r0, #0 - blt _020221A6 - ldr r0, [r1, #0x20] - cmp r0, #0 - blt _020221A6 - mov r2, #1 -_020221A6: - cmp r2, #0 - bne _020221AE - bl GF_AssertFail -_020221AE: - pop {r3, pc} - .balign 4, 0 -_020221B0: .word _021D21F4 - thumb_func_end sub_02022060 - - thumb_func_start sub_020221B4 -sub_020221B4: ; 0x020221B4 - push {r3, lr} - ldr r0, _020221CC ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x34] - bl sub_02022278 - ldr r0, _020221CC ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x38] - bl sub_02022278 - pop {r3, pc} - .balign 4, 0 -_020221CC: .word _021D21F4 - thumb_func_end sub_020221B4 - - thumb_func_start sub_020221D0 -sub_020221D0: ; 0x020221D0 - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r0, _02022234 ; =_021D21F4 - add r4, r1, #0 - ldr r1, [r0] - add r6, r2, #0 - str r5, [r1, #0x24] - ldr r1, [r0] - str r4, [r1, #0x28] - ldr r0, [r0] - ldr r0, [r0, #0x34] - cmp r0, #0 - beq _020221EE - bl FreeToHeap -_020221EE: - ldr r0, _02022234 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x38] - cmp r0, #0 - beq _020221FC - bl FreeToHeap -_020221FC: - ldr r0, _02022234 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x24] - cmp r0, #0 - beq _02022214 - add r0, r6, #0 - lsr r1, r5, #3 - bl AllocFromHeap - ldr r1, _02022234 ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0x34] -_02022214: - ldr r0, _02022234 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x28] - cmp r0, #0 - beq _0202222C - add r0, r6, #0 - lsr r1, r4, #3 - bl AllocFromHeap - ldr r1, _02022234 ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0x38] -_0202222C: - bl sub_020221B4 - pop {r4, r5, r6, pc} - nop -_02022234: .word _021D21F4 - thumb_func_end sub_020221D0 - - thumb_func_start sub_02022238 -sub_02022238: ; 0x02022238 - push {r3, lr} - cmp r0, #0 - beq _0202225A - ldr r1, _0202225C ; =_021D21F4 - ldr r2, [r1] - ldr r1, [r2, #0x34] - cmp r0, r1 - bne _02022252 - mov r1, #0 - str r1, [r2, #0x24] - bl FreeToHeap - pop {r3, pc} -_02022252: - mov r1, #0 - str r1, [r2, #0x28] - bl FreeToHeap -_0202225A: - pop {r3, pc} - .balign 4, 0 -_0202225C: .word _021D21F4 - thumb_func_end sub_02022238 - - thumb_func_start sub_02022260 -sub_02022260: ; 0x02022260 - ldr r1, _02022274 ; =_021D21F4 - ldr r2, [r1] - ldr r1, [r2, #0x34] - cmp r0, r1 - bne _0202226E - ldr r0, [r2, #0x24] - bx lr -_0202226E: - ldr r0, [r2, #0x28] - bx lr - nop -_02022274: .word _021D21F4 - thumb_func_end sub_02022260 - - thumb_func_start sub_02022278 -sub_02022278: ; 0x02022278 - push {r4, lr} - add r4, r0, #0 - beq _0202228E - bl sub_02022260 - add r2, r0, #0 - add r0, r4, #0 - mov r1, #0 - lsr r2, r2, #3 - bl memset -_0202228E: - pop {r4, pc} - thumb_func_end sub_02022278 - - thumb_func_start sub_02022290 -sub_02022290: ; 0x02022290 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - add r6, r1, #0 - add r4, r2, #0 - beq _020222E6 - add r0, r4, #0 - bl sub_02022260 - add r6, r5, r6 - add r7, r0, #0 - cmp r5, r6 - bhs _020222E6 -_020222AA: - cmp r5, r7 - bhs _020222E6 - add r0, r5, #0 - add r1, sp, #4 - add r2, sp, #0 - bl sub_02022560 - add r0, sp, #0 - ldrb r1, [r0] - mov r0, #1 - lsl r0, r1 - ldr r1, [sp, #4] - ldrb r1, [r4, r1] - tst r0, r1 - beq _020222CC - bl GF_AssertFail -_020222CC: - add r2, sp, #0 - ldrb r3, [r2] - ldr r1, [sp, #4] - mov r2, #1 - lsl r2, r3 - lsl r2, r2, #0x18 - ldrb r0, [r4, r1] - lsr r2, r2, #0x18 - add r5, r5, #1 - orr r0, r2 - strb r0, [r4, r1] - cmp r5, r6 - blo _020222AA -_020222E6: - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 - thumb_func_end sub_02022290 - - thumb_func_start sub_020222EC -sub_020222EC: ; 0x020222EC - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r7, r0, #0 - str r1, [sp] - cmp r1, #0 - beq _0202236A - add r0, r1, #0 - bl sub_02022260 - mov r6, #0 - str r0, [sp, #4] - cmp r0, #0 - bls _0202236A -_02022306: - add r0, r6, #0 - add r1, sp, #0xc - add r2, sp, #8 - bl sub_02022560 - add r0, sp, #8 - ldrb r1, [r0] - mov r0, #1 - mov r4, #0 - lsl r0, r1 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - b _02022348 -_02022320: - add r5, r6, r4 - add r0, r5, #0 - add r1, sp, #0xc - add r2, sp, #8 - bl sub_02022560 - add r0, sp, #8 - ldrb r1, [r0] - mov r0, #1 - lsl r0, r1 - lsl r0, r0, #0x18 - ldr r1, [sp, #4] - lsr r0, r0, #0x18 - cmp r5, r1 - blo _02022346 - mov r0, #0 - add sp, #0x10 - mvn r0, r0 - pop {r3, r4, r5, r6, r7, pc} -_02022346: - add r4, r4, #1 -_02022348: - ldr r2, [sp, #0xc] - ldr r1, [sp] - ldrb r1, [r1, r2] - tst r0, r1 - bne _02022356 - cmp r4, r7 - bls _02022320 -_02022356: - cmp r4, r7 - bls _02022360 - add sp, #0x10 - add r0, r6, #0 - pop {r3, r4, r5, r6, r7, pc} -_02022360: - add r0, r6, r4 - add r6, r0, #1 - ldr r0, [sp, #4] - cmp r6, r0 - blo _02022306 -_0202236A: - mov r0, #0 - mvn r0, r0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 - thumb_func_end sub_020222EC - - thumb_func_start sub_02022374 -sub_02022374: ; 0x02022374 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - add r4, r2, #0 - beq _020223BE - add r6, r5, r1 - cmp r5, r6 - bhs _020223BE - add r7, sp, #0 -_02022386: - add r0, r5, #0 - add r1, sp, #4 - add r2, sp, #0 - bl sub_02022560 - ldrb r1, [r7] - mov r0, #1 - lsl r0, r1 - ldr r1, [sp, #4] - ldrb r1, [r4, r1] - tst r0, r1 - bne _020223A2 - bl GF_AssertFail -_020223A2: - ldrb r0, [r7] - mov r1, #1 - ldr r3, [sp, #4] - lsl r1, r0 - mov r0, #0xff - eor r0, r1 - lsl r0, r0, #0x18 - ldrb r2, [r4, r3] - lsr r0, r0, #0x18 - add r5, r5, #1 - and r0, r2 - strb r0, [r4, r3] - cmp r5, r6 - blo _02022386 -_020223BE: - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 - thumb_func_end sub_02022374 - - thumb_func_start sub_020223C4 -sub_020223C4: ; 0x020223C4 - push {r3, r4, r5, lr} - add r4, r0, #0 - ldr r0, [r4, #4] - mov r1, #1 - tst r0, r1 - beq _02022402 - add r0, r4, #0 - add r0, #0x10 - bl NNS_G2dGetImageLocation - ldr r1, _02022444 ; =_021D21F4 - ldr r2, [r1] - ldr r1, [r2, #0x1c] - sub r0, r0, r1 - ldr r1, [r2, #0x2c] - bl sub_020224A8 - ldr r1, _02022444 ; =_021D21F4 - add r5, r0, #0 - ldr r1, [r1] - ldr r0, [r4, #0x4c] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r2, _02022444 ; =_021D21F4 - add r1, r0, #0 - ldr r2, [r2] - add r0, r5, #0 - ldr r2, [r2, #0x34] - bl sub_02022374 -_02022402: - ldr r0, [r4, #4] - mov r1, #2 - tst r0, r1 - beq _0202243C - add r0, r4, #0 - add r0, #0x10 - bl NNS_G2dGetImageLocation - ldr r1, _02022444 ; =_021D21F4 - ldr r2, [r1] - ldr r1, [r2, #0x20] - sub r0, r0, r1 - ldr r1, [r2, #0x30] - bl sub_020224A8 - ldr r1, _02022444 ; =_021D21F4 - add r5, r0, #0 - ldr r1, [r1] - ldr r0, [r4, #0x50] - ldr r1, [r1, #0x30] - bl sub_020224A8 - ldr r2, _02022444 ; =_021D21F4 - add r1, r0, #0 - ldr r2, [r2] - add r0, r5, #0 - ldr r2, [r2, #0x38] - bl sub_02022374 -_0202243C: - mov r0, #0 - str r0, [r4, #0x48] - pop {r3, r4, r5, pc} - nop -_02022444: .word _021D21F4 - thumb_func_end sub_020223C4 - - thumb_func_start sub_02022448 -sub_02022448: ; 0x02022448 - ldr r1, _0202247C ; =0x00100010 - cmp r0, r1 - bgt _02022456 - bge _0202246C - cmp r0, #0x10 - beq _02022468 - b _02022478 -_02022456: - ldr r1, _02022480 ; =0x00200010 - cmp r0, r1 - bgt _02022460 - beq _02022470 - b _02022478 -_02022460: - ldr r1, _02022484 ; =0x00300010 - cmp r0, r1 - beq _02022474 - b _02022478 -_02022468: - mov r0, #1 - bx lr -_0202246C: - mov r0, #2 - bx lr -_02022470: - mov r0, #4 - bx lr -_02022474: - mov r0, #8 - bx lr -_02022478: - mov r0, #1 - bx lr - .balign 4, 0 -_0202247C: .word 0x00100010 -_02022480: .word 0x00200010 -_02022484: .word 0x00300010 - thumb_func_end sub_02022448 - - thumb_func_start sub_02022488 -sub_02022488: ; 0x02022488 - push {r4, r5, r6, lr} - add r4, r1, #0 - lsl r4, r4, #5 - add r1, r4, #0 - add r5, r0, #0 - add r6, r2, #0 - bl _s32_div_f - cmp r1, #0 - beq _020224A4 - sub r5, r5, r1 - cmp r6, #1 - bne _020224A4 - add r5, r5, r4 -_020224A4: - add r0, r5, #0 - pop {r4, r5, r6, pc} - thumb_func_end sub_02022488 - - thumb_func_start sub_020224A8 -sub_020224A8: ; 0x020224A8 - asr r2, r0, #4 - lsr r2, r2, #0x1b - add r2, r0, r2 - ldr r3, _020224B4 ; =_s32_div_f - asr r0, r2, #5 - bx r3 - .balign 4, 0 -_020224B4: .word _s32_div_f - thumb_func_end sub_020224A8 - - thumb_func_start sub_020224B8 -sub_020224B8: ; 0x020224B8 - mul r1, r0 - lsl r0, r1, #5 - bx lr - .balign 4, 0 - thumb_func_end sub_020224B8 - - thumb_func_start sub_020224C0 -sub_020224C0: ; 0x020224C0 - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - add r5, r0, #0 - add r1, r2, #0 - mov r0, #1 - add r2, r4, #0 - add r7, r3, #0 - tst r2, r0 - beq _020224EA - ldr r2, _0202250C ; =_021D21F4 - ldr r2, [r2] - ldr r6, [r2, #0xc] - ldr r2, [r2, #0x1c] - add r3, r6, r5 - cmp r3, r2 - bls _020224E8 - bl GF_AssertFail - mov r0, #0 - b _020224EA -_020224E8: - str r6, [r1] -_020224EA: - mov r1, #2 - tst r1, r4 - beq _02022508 - ldr r1, _0202250C ; =_021D21F4 - ldr r1, [r1] - ldr r3, [r1, #0x10] - ldr r1, [r1, #0x20] - add r2, r3, r5 - cmp r2, r1 - bls _02022506 - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} -_02022506: - str r3, [r7] -_02022508: - pop {r3, r4, r5, r6, r7, pc} - nop -_0202250C: .word _021D21F4 - thumb_func_end sub_020224C0 - - thumb_func_start sub_02022510 -sub_02022510: ; 0x02022510 - push {r3, r4, r5, lr} - add r4, r1, #0 - add r5, r0, #0 - mov r2, #1 - add r0, r4, #0 - tst r0, r2 - beq _02022538 - ldr r0, _0202255C ; =_021D21F4 - ldr r3, [r0] - ldr r1, [r3, #0xc] - add r1, r1, r5 - str r1, [r3, #0xc] - ldr r1, [r0] - ldr r0, [r1, #0xc] - ldr r1, [r1, #0x2c] - bl sub_02022488 - ldr r1, _0202255C ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0xc] -_02022538: - mov r0, #2 - tst r0, r4 - beq _0202255A - ldr r0, _0202255C ; =_021D21F4 - ldr r2, [r0] - ldr r1, [r2, #0x10] - add r1, r1, r5 - str r1, [r2, #0x10] - ldr r1, [r0] - mov r2, #1 - ldr r0, [r1, #0x10] - ldr r1, [r1, #0x30] - bl sub_02022488 - ldr r1, _0202255C ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0x10] -_0202255A: - pop {r3, r4, r5, pc} - .balign 4, 0 -_0202255C: .word _021D21F4 - thumb_func_end sub_02022510 - - thumb_func_start sub_02022560 -sub_02022560: ; 0x02022560 - asr r3, r0, #3 - str r3, [r1] - mov r1, #7 - and r0, r1 - strb r0, [r2] - bx lr - thumb_func_end sub_02022560 - - thumb_func_start sub_0202256C -sub_0202256C: ; 0x0202256C - push {r3, r4} - sub r0, r1, r0 - ldr r4, [sp, #8] - str r0, [r3] - bpl _02022582 - add r0, r2, r0 - str r0, [r4] - mov r0, #0 - str r0, [r3] - pop {r3, r4} - bx lr -_02022582: - str r2, [r4] - pop {r3, r4} - bx lr - thumb_func_end sub_0202256C diff --git a/asm/unk_02082908.s b/asm/unk_02082908.s index 0463c6dbab..68425511ce 100644 --- a/asm/unk_02082908.s +++ b/asm/unk_02082908.s @@ -878,7 +878,7 @@ _02083016: ldr r0, [r4, r0] mov r1, #7 bl FreeBgTilemapBuffer - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0x16 lsl r0, r0, #4 @@ -1778,11 +1778,11 @@ sub_0208377C: ; 0x0208377C ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x12 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/include/constants/global.h b/include/constants/global.h index 71f7eb9ab5..13247e8f32 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -4,6 +4,7 @@ #include "constants/gx.h" #include "constants/charcode.h" #include "constants/global.fieldmap.h" +#include "constants/sdk_extras.h" #define PLAYER_NAME_LENGTH 7 #define POKEMON_NAME_LENGTH 10 @@ -13,6 +14,7 @@ #define PARTY_SIZE 6 +// move this to msl header? #define S16_MAX 32767 #define U32_MAX 4294967292 diff --git a/include/constants/sdk_extras.h b/include/constants/sdk_extras.h new file mode 100644 index 0000000000..5aa35de4d3 --- /dev/null +++ b/include/constants/sdk_extras.h @@ -0,0 +1,16 @@ +#ifndef POKEHEARTGOLD_CONSTANTS_SDK_EXTRAS_H +#define POKEHEARTGOLD_CONSTANTS_SDK_EXTRAS_H + +// Header for constants that play the role of SDK defines but are not actually provided by any SDK +// Any define that should be typed, must be gated behind defined(PM_ASM) + +// alias +#ifndef PM_ASM +#include +// NNS_G2D_VRAM_TYPE_3DMAIN +#define NNS_G2D_VRAM_TYPE_NEITHER ((NNS_G2D_VRAM_TYPE)0) +// NNS_G2D_VRAM_TYPE_MAX +#define NNS_G2D_VRAM_TYPE_2DBOTH ((NNS_G2D_VRAM_TYPE)(NNS_G2D_VRAM_TYPE_2DMAIN|NNS_G2D_VRAM_TYPE_2DSUB)) +#endif //PM_ASM + +#endif //POKEHEARTGOLD_CONSTANTS_SDK_EXTRAS_H diff --git a/include/credits/data.h b/include/credits/data.h index b89e08bf33..556b1693ac 100644 --- a/include/credits/data.h +++ b/include/credits/data.h @@ -3,6 +3,7 @@ #include "global.h" #include "gf_gfx_planes.h" +#include "obj_char_transfer.h" #include "bg_window.h" #include "credits/credits.h" @@ -55,7 +56,7 @@ static const WindowTemplate ov76_021E6E98 = { .baseTile = 0x0001, }; -static const UnkStruct_020215A0 ov76_021E6EA0 = { 0x28, 0, 0, HEAP_ID_CREDITS }; +static const ObjCharTransferTemplate sObjCharTransferTemplate = { 0x28, 0, 0, HEAP_ID_CREDITS }; static const GraphicsModes ov76_021E6EB0 = { .dispMode = GX_DISPMODE_GRAPHICS, diff --git a/include/obj_char_transfer.h b/include/obj_char_transfer.h new file mode 100644 index 0000000000..5065735e34 --- /dev/null +++ b/include/obj_char_transfer.h @@ -0,0 +1,49 @@ +#ifndef POKEHEARTGOLD_OBJ_CHAR_TRANSFER_H +#define POKEHEARTGOLD_OBJ_CHAR_TRANSFER_H + +#include "heap.h" +#include + +typedef struct ObjCharTransferTemplate { + int maxTasks; + u32 sizeMain; + u32 sizeSub; + HeapID heapId; +} ObjCharTransferTemplate; + +typedef struct UnkStruct_02021758 { + NNSG2dCharacterData *charData; + NNS_G2D_VRAM_TYPE vram; + int id; + BOOL atEnd; +} ObjCharTransferTaskTemplate; + +typedef struct UnkStruct_02021AC8 { + u32 size; + u32 offset; + u16 vram; + u16 unk_0A; +} UnkStruct_02021AC8; + +typedef struct ObjCharTransferTasksManager ObjCharTransferTasksManager; + +void ObjCharTransfer_Init(ObjCharTransferTemplate *template); +void ObjCharTransfer_InitEx(ObjCharTransferTemplate *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub); +void ObjCharTransfer_Destroy(void); +void ObjCharTransfer_ClearBuffers(void); +void ObjCharTransfer_SetReservedRegion(u32 a0, u32 a1, NNS_G2D_VRAM_TYPE vram); +BOOL ObjCharTransfer_CreateTaskAndDoTransferFromTemplate(const ObjCharTransferTaskTemplate *a0); +BOOL ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW(const ObjCharTransferTaskTemplate *a0); +void ObjCharTransfer_ReplaceGraphicsFromChardataByResID(int id, NNSG2dCharacterData *charData); +void ObjCharTransfer_ResetTransferTasksByResID(int resId); +NNSG2dImageProxy *ObjCharTransfer_GetProxyPtrByResID(int resId); +NNSG2dImageProxy *ObjCharTransfer_ResizeTaskByResID_GetProxyPtr(int resId, u32 size); +NNSG2dImageProxy *ObjCharTransfer_CopyTransferTaskByProxyPtr(NNSG2dImageProxy *proxyIn); +void ObjCharTransfer_DeleteTaskCopyByProxyPtr(const NNSG2dImageProxy *proxy); +BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3); +void sub_02021B5C(UnkStruct_02021AC8 *a0); +ObjCharTransferTasksManager *ObjCharTransfer_PopTaskManager(void); +void ObjCharTransfer_PushTaskManager(ObjCharTransferTasksManager *a0); +int ObjCharTransfer_GetBlockSizeFromMode(GXOBJVRamModeChar mode); + +#endif //POKEHEARTGOLD_OBJ_CHAR_TRANSFER_H diff --git a/include/unk_02009D48.h b/include/unk_02009D48.h index acc9b7c700..e5a9ddfa27 100644 --- a/include/unk_02009D48.h +++ b/include/unk_02009D48.h @@ -50,7 +50,7 @@ void SpriteResourceHeaderList_Destroy(SpriteResourceHeaderList *list); SpriteList *G2dRenderer_Init(int a0, GF_G2dRenderer *renderer, HeapID heapId); void G2dRenderer_SetMainSurfaceCoords(GF_G2dRenderer *renderer, s32 x, s32 y); void G2dRenderer_SetSubSurfaceCoords(GF_G2dRenderer *renderer, s32 x, s32 y); -void sub_02009FE8(u32 a0, GXOBJVRamModeChar mode); +void sub_02009FE8(NNS_G2D_VRAM_TYPE vram, GXOBJVRamModeChar mode); void sub_0200A080(u32 a0); #endif //POKEHEARTGOLD_UNK_02009D48_H diff --git a/include/unk_0200A090.h b/include/unk_0200A090.h index 9a444f5710..502665a7b8 100644 --- a/include/unk_0200A090.h +++ b/include/unk_0200A090.h @@ -6,12 +6,12 @@ struct CharResExtraData { NNSG2dCharacterData *charData; - int vram; + NNS_G2D_VRAM_TYPE vram; }; struct PlttResExtraData { - NNSG2dPaletteData *plttData; - int vram; + NNSG2dPaletteData *plttData; + NNS_G2D_VRAM_TYPE vram; int pltt_num; }; @@ -90,15 +90,15 @@ typedef struct GF_2DGfxResObjList { GF_2DGfxResMan *Create2DGfxResObjMan(int num, GfGfxResType type, HeapID heapId); void Destroy2DGfxResObjMan(GF_2DGfxResMan *mgr); GF_2DGfxResObj *Add2DGfxResObjFromHeader(GF_2DGfxResMan *mgr, const GF_2DGfxResHeader *header, int idx, HeapID heapId); -GF_2DGfxResObj *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, HeapID heapId); -GF_2DGfxResObj *AddPlttResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId); +GF_2DGfxResObj *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId); +GF_2DGfxResObj *AddPlttResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId); GF_2DGfxResObj *AddCellOrAnimResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, GfGfxResType type, HeapID heapId); void ReplaceCharResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, HeapID heapId); void ReplacePlttResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, HeapID heapId); -GF_2DGfxResObj *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, HeapID heapId); -GF_2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, HeapID heapId, BOOL atEnd); -GF_2DGfxResObj *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId); -GF_2DGfxResObj *AddPlttResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId, BOOL atEnd); +GF_2DGfxResObj *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId); +GF_2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId, BOOL atEnd); +GF_2DGfxResObj *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId); +GF_2DGfxResObj *AddPlttResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId, BOOL atEnd); GF_2DGfxResObj *AddCellOrAnimResObjFromOpenNarc(GF_2DGfxResMan *resMan, NARC *narc, int fileId, BOOL compressed, int id, GfGfxResType type, HeapID heapId); void ReplaceCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, HeapID heapId); void ReplacePlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, HeapID heapId); @@ -117,7 +117,7 @@ NNSG2dAnimBankData *GF2DGfxResObj_GetAnimDataPtr(GF_2DGfxResObj *obj); NNSG2dMultiCellDataBank *GF2DGfxResObj_GetMultiCellDataPtr(GF_2DGfxResObj *obj); NNSG2dAnimBankData *GF2DGfxResObj_GetMultiAnimDataPtr(GF_2DGfxResObj *obj); GfGfxResType GF2DGfxResObj_GetResType(GF_2DGfxResObj *obj); -int GF2DGfxResObj_GetLoadAddress(GF_2DGfxResObj *obj); +NNS_G2D_VRAM_TYPE GF2DGfxResObj_GetLoadAddress(GF_2DGfxResObj *obj); int GF2DGfxResObj_GetPlttNum(GF_2DGfxResObj *obj); u32 sub_0200A8FC(void); GF_2DGfxResHeader *sub_0200A900(GF_2DGfxResHeader *headers, int num); @@ -129,6 +129,6 @@ int sub_0200A9B0(GF_2DGfxResHeader *header, int idx); BOOL sub_0200A9DC(GF_2DGfxResHeader *header, int idx); int sub_0200AA08(GF_2DGfxResHeader *header, int idx); int sub_0200AA3C(GF_2DGfxResHeader *header, int idx); -void sub_0200AA9C(GF_2DGfxResObj *obj, GfGfxResType type, int vram, int pltt_num, HeapID heapId); +void sub_0200AA9C(GF_2DGfxResObj *obj, GfGfxResType type, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId); #endif //POKEHEARTGOLD_UNK_0200A090_H diff --git a/include/unk_0200CF18.h b/include/unk_0200CF18.h index 7fec9286c2..c675f1b0de 100644 --- a/include/unk_0200CF18.h +++ b/include/unk_0200CF18.h @@ -65,9 +65,9 @@ typedef struct Unk122_021E92FC { } Unk122_021E92FC; typedef struct Unk122_021E92D0 { - int unk0; - int unk4; - int unk8; + int maxTasks; + int sizeMain; + int sizeSub; GXOBJVRamModeChar charModeMain; GXOBJVRamModeChar charModeSub; } Unk122_021E92D0; diff --git a/include/unk_020215A0.h b/include/unk_020215A0.h deleted file mode 100644 index 17cee5800c..0000000000 --- a/include/unk_020215A0.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef POKEHEARTGOLD_UNK_020215A0_H -#define POKEHEARTGOLD_UNK_020215A0_H - -#include "heap.h" - -typedef struct UnkStruct_020215A0 { - u32 unk_00; - u32 unk_04; - u32 unk_08; - HeapID heapId; -} UnkStruct_020215A0; - -typedef struct UnkStruct_02021758 { - NNSG2dCharacterData *charData; - u32 dest; - int id; - BOOL unk_0C; -} UnkStruct_02021758; - -void sub_020215A0(UnkStruct_020215A0 *template); -void sub_020215C0(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub); -void sub_0202168C(void); -void sub_020216C8(void); -void sub_020216F4(u32, u32, u32); -BOOL sub_02021758(const UnkStruct_02021758 *a0); -BOOL sub_020217B0(const UnkStruct_02021758 *a0); -void sub_0202183C(int id, NNSG2dCharacterData *charData); -void sub_02021884(u32); -NNSG2dImageProxy *sub_02021910(int resID); -NNSG2dImageProxy *sub_02021934(int resID, u32 size); -NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn); -void sub_02021A50(const NNSG2dImageProxy *proxy); - -#endif //POKEHEARTGOLD_UNK_020215A0_H diff --git a/include/unk_02022588.h b/include/unk_02022588.h index 0d6787d2f6..89951de36d 100644 --- a/include/unk_02022588.h +++ b/include/unk_02022588.h @@ -5,7 +5,7 @@ typedef struct UnkStruct_02022660 { NNSG2dPaletteData *plttData; - u32 dest; + NNS_G2D_VRAM_TYPE vram; int plttNum; int id; } UnkStruct_02022660; diff --git a/include/vram_transfer_manager.h b/include/vram_transfer_manager.h index 43e44149bb..ed8412c316 100644 --- a/include/vram_transfer_manager.h +++ b/include/vram_transfer_manager.h @@ -1,6 +1,8 @@ #ifndef POKEHEARTGOLD_VRAM_TRANSFER_MANAGER_H #define POKEHEARTGOLD_VRAM_TRANSFER_MANAGER_H +#include "global.h" + typedef struct { u32 nMax; u32 nCur; diff --git a/lib/include/nitro/gx/gx.h b/lib/include/nitro/gx/gx.h index 59f8bc9b0f..385cf43cbe 100644 --- a/lib/include/nitro/gx/gx.h +++ b/lib/include/nitro/gx/gx.h @@ -178,4 +178,12 @@ static inline void GXS_SetOBJVRamModeChar(GXOBJVRamModeChar mode) { reg_GXS_DB_DISPCNT = (u32)(reg_GXS_DB_DISPCNT & ~(REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK) | mode); } +static inline GXOBJVRamModeChar GX_GetOBJVRamModeChar(void) { + return (GXOBJVRamModeChar)(reg_GX_DISPCNT & (REG_GX_DISPCNT_EXOBJ_CH_MASK | REG_GX_DISPCNT_OBJMAP_CH_MASK)); +} + +static inline GXOBJVRamModeChar GXS_GetOBJVRamModeChar(void) { + return (GXOBJVRamModeChar)(reg_GXS_DB_DISPCNT & (REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK)); +} + #endif //NITRO_GX_GX_H_ diff --git a/lib/include/nitro/gx/gx_vramcnt.h b/lib/include/nitro/gx/gx_vramcnt.h index f148ad8489..74d232d76f 100644 --- a/lib/include/nitro/gx/gx_vramcnt.h +++ b/lib/include/nitro/gx/gx_vramcnt.h @@ -1,6 +1,8 @@ #ifndef NITRO_GX_GX_VRAMCNT_H_ #define NITRO_GX_GX_VRAMCNT_H_ +#include + typedef enum { GX_VRAM_A = OS_VRAM_BANK_ID_A,// VRAM-A GX_VRAM_B = OS_VRAM_BANK_ID_B,// VRAM-B diff --git a/lib/include/nnsys.h b/lib/include/nnsys.h index ee210c14e6..c2e254cc17 100644 --- a/lib/include/nnsys.h +++ b/lib/include/nnsys.h @@ -1,6 +1,8 @@ #ifndef NNSYS_H_ #define NNSYS_H_ +#include + #include #include #include diff --git a/lib/include/nnsys/g2d/fmt/g2d_Character_data.h b/lib/include/nnsys/g2d/fmt/g2d_Character_data.h index 33bc315da2..df822ffae1 100644 --- a/lib/include/nnsys/g2d/fmt/g2d_Character_data.h +++ b/lib/include/nnsys/g2d/fmt/g2d_Character_data.h @@ -1,6 +1,13 @@ #ifndef NNSYS_G2D_FMT_G2D_CHARACTER_DATA_H_ #define NNSYS_G2D_FMT_G2D_CHARACTER_DATA_H_ +#include + +#define NNS_G2D_CHARACTER_FMT_MASK 0xFF // 8 bit +#define NNS_G2D_VRAMTRANSFERDATA_FLAG_MASK 0x1 // 1 bit +#define NNS_G2D_CHARACTER_FMT_SHIFT 0 +#define NNS_G2D_VRAMTRANSFERDATA_FLAG_SHIFT 8 + typedef enum NNSG2dCharacterDataMapingType { NNS_G2D_CHARACTERMAPING_1D_32, NNS_G2D_CHARACTERMAPING_1D_64, diff --git a/lib/include/nnsys/g2d/g2d_Image.h b/lib/include/nnsys/g2d/g2d_Image.h index e729230b04..77aff04909 100644 --- a/lib/include/nnsys/g2d/g2d_Image.h +++ b/lib/include/nnsys/g2d/g2d_Image.h @@ -35,11 +35,14 @@ typedef struct NNSG2dImagePaletteProxy { NNSG2dVRamLocation vramLocation; } NNSG2dImagePaletteProxy; // size: 0x14 +void NNS_G2dInitImageProxy(NNSG2dImageProxy* pImg); void NNS_G2dLoadPaletteEx(const NNSG2dPaletteData* pSrcData, const NNSG2dPaletteCompressInfo* pCmpInfo, u32 addr, NNS_G2D_VRAM_TYPE type, NNSG2dImagePaletteProxy* pPltProxy); void NNS_G2dLoadPalette(const NNSG2dPaletteData* pSrcData, u32 addr, NNS_G2D_VRAM_TYPE type, NNSG2dImagePaletteProxy* pPltProxy); void NNS_G2dLoadImage1DMapping(const NNSG2dCharacterData* pSrcData, u32 baseAddr, NNS_G2D_VRAM_TYPE type, NNSG2dImageProxy* pImgProxy); void NNS_G2dLoadImage2DMapping(const NNSG2dCharacterData* pSrcData, u32 baseAddr, NNS_G2D_VRAM_TYPE type, NNSG2dImageProxy* pImgProxy); u32 NNS_G2dGetImageLocation (const NNSG2dImageProxy* pImg, NNS_G2D_VRAM_TYPE type); u32 NNS_G2dGetImagePaletteLocation(const NNSG2dImagePaletteProxy* pImg, NNS_G2D_VRAM_TYPE type); +void NNS_G2dLoadImageVramTransfer(const NNSG2dCharacterData* pSrcData, u32 baseAddr, NNS_G2D_VRAM_TYPE type, NNSG2dImageProxy* pImgProxy); + #endif //NNSYS_G2D_G2D_IMAGE_H_ diff --git a/main.lsf b/main.lsf index 202228922e..42aacd7095 100644 --- a/main.lsf +++ b/main.lsf @@ -7,335 +7,335 @@ Static main { - Address 0x02000000 - StackSize 0 2048 - Object src/pm_version.o - Object src/main.o - Object src/list_menu.o - Object src/list_menu_2d.o - Object src/string_util.o - Object asm/render_text.o - Object src/font.o - Object src/palette.o - Object src/sound.o - Object src/sound_radio_sys.o - Object asm/unk_02004A44.o - Object asm/unk_02005D10.o - Object src/sound_chatot.o - Object src/poke_overlay.o - Object src/systask_environment.o - Object src/overlay_manager.o - Object src/filesystem.o - Object src/gf_gfx_loader.o - Object asm/unk_02007FD8.o - Object src/unk_02009D48.o - Object src/unk_0200A090.o - Object src/unk_0200ACF0.o - Object asm/unk_0200B150.o - Object src/brightness.o - Object src/msgdata.o - Object src/message_format.o - Object src/message_printer.o - Object asm/unk_0200CE7C.o - Object src/unk_0200CF18.o - Object src/sys_task_api.o - Object asm/render_window.o - Object asm/unk_0200FA24.o - Object asm/unk_0201010C.o - Object asm/unk_02012DD8.o - Object asm/unk_02013534.o - Object asm/unk_02013FDC.o - Object src/gf_rtc.o - Object src/list_menu_items.o - Object asm/unk_02014A08.o - Object asm/unk_02014DA0.o - Object src/mail_message.o - Object src/easy_chat.o - Object asm/unk_02015DD8.o - Object asm/unk_020163E0.o - Object src/yes_no_prompt.o - Object asm/unk_02016EDC.o - Object asm/unk_02017FAC.o - Object asm/unk_02018000.o - Object src/unk_02018380.o - Object asm/unk_020183F0.o - Object src/camera_translation.o - Object asm/unk_020192D0.o - Object src/system.o - Object src/heap.o - Object src/bg_window.o - Object src/gf_3d_render.o - Object src/sys_task.o - Object asm/unk_0201F990.o - Object src/string_control_code.o - Object src/math_util.o - Object src/text.o - Object src/vram_transfer_manager.o - Object asm/unk_02020654.o - Object src/ascii_util.o - Object asm/unk_02020B8C.o - Object asm/unk_020210A0.o - Object asm/unk_020215A0.o - Object asm/unk_02022588.o - Object src/gf_gfx_planes.o - Object src/camera.o - Object asm/unk_02023694.o - Object src/touchscreen.o - Object src/timer3.o - Object src/error_handling.o - Object src/unk_02025534.o - Object asm/unk_02025C44.o - Object src/font_data.o - Object src/pm_string.o - Object src/touch_hitbox_controller.o - Object asm/unk_02026DE0.o - Object src/unk_02026E30.o - Object asm/unk_02026E84.o - Object src/gf_3d_vramman.o - Object asm/unk_02027010.o - Object src/save_arrays.o - Object src/save.o - Object src/sav_system_info.o - Object src/player_data.o - Object asm/unk_020290B4.o - Object src/daycare.o - Object src/pokedex.o - Object src/save_misc.o - Object src/options.o - Object src/apricorn_tree_sys.o - Object src/save_gymmick.o - Object src/save_palpad.o - Object src/mail.o - Object asm/unk_0202B614.o - Object asm/unk_0202C034.o - Object asm/unk_0202C730.o - Object src/coins.o - Object src/save_trainer_card.o - Object asm/unk_0202CA24.o - Object src/seal_case.o - Object src/igt.o - Object src/sav_chatot.o - Object asm/game_stats.o - Object asm/unk_0202D230.o - Object src/save_special_ribbons.o - Object src/roamer.o - Object asm/unk_0202DB34.o - Object src/mystery_gift.o - Object src/hall_of_fame.o - Object asm/unk_0202E41C.o - Object asm/unk_0202E4B0.o - Object asm/unk_0202EB30.o - Object src/update_dex_received.o - Object asm/unk_0202ED18.o - Object src/save_pokegear.o - Object src/safari_zone.o - Object src/photo_album.o - Object asm/unk_0202FBCC.o - Object asm/unk_02030A98.o - Object src/unk_0203170C.o - Object asm/unk_020318C8.o - Object asm/unk_02031904.o - Object src/unk_02031AF0.o - Object asm/unk_02031B0C.o - Object src/pokewalker.o - Object src/save_trainer_house.o - Object asm/unk_02032844.o - Object asm/unk_02033AE0.o - Object asm/unk_02034354.o - Object asm/unk_02034B0C.o - Object asm/unk_02035900.o - Object asm/unk_020379A0.o - Object asm/unk_02037C94.o - Object asm/unk_0203A3B0.o - Object src/communication_error.o - Object asm/unk_0203AC88.o - Object src/wfc_user_info_warning.o - Object src/map_matrix.o - Object src/map_header.o - Object src/map_events.o - Object src/save_local_field_data.o - Object asm/unk_0203BA5C.o - Object src/field_system_rtc_weather.o - Object asm/unk_0203BC10.o - Object asm/unk_0203DB6C.o - Object src/field_system.o + Address 0x02000000 + StackSize 0 2048 + Object src/pm_version.o + Object src/main.o + Object src/list_menu.o + Object src/list_menu_2d.o + Object src/string_util.o + Object asm/render_text.o + Object src/font.o + Object src/palette.o + Object src/sound.o + Object src/sound_radio_sys.o + Object asm/unk_02004A44.o + Object asm/unk_02005D10.o + Object src/sound_chatot.o + Object src/poke_overlay.o + Object src/systask_environment.o + Object src/overlay_manager.o + Object src/filesystem.o + Object src/gf_gfx_loader.o + Object asm/unk_02007FD8.o + Object src/unk_02009D48.o + Object src/unk_0200A090.o + Object src/unk_0200ACF0.o + Object asm/unk_0200B150.o + Object src/brightness.o + Object src/msgdata.o + Object src/message_format.o + Object src/message_printer.o + Object asm/unk_0200CE7C.o + Object src/unk_0200CF18.o + Object src/sys_task_api.o + Object asm/render_window.o + Object asm/unk_0200FA24.o + Object asm/unk_0201010C.o + Object asm/unk_02012DD8.o + Object asm/unk_02013534.o + Object asm/unk_02013FDC.o + Object src/gf_rtc.o + Object src/list_menu_items.o + Object asm/unk_02014A08.o + Object asm/unk_02014DA0.o + Object src/mail_message.o + Object src/easy_chat.o + Object asm/unk_02015DD8.o + Object asm/unk_020163E0.o + Object src/yes_no_prompt.o + Object asm/unk_02016EDC.o + Object asm/unk_02017FAC.o + Object asm/unk_02018000.o + Object src/unk_02018380.o + Object asm/unk_020183F0.o + Object src/camera_translation.o + Object asm/unk_020192D0.o + Object src/system.o + Object src/heap.o + Object src/bg_window.o + Object src/gf_3d_render.o + Object src/sys_task.o + Object asm/unk_0201F990.o + Object src/string_control_code.o + Object src/math_util.o + Object src/text.o + Object src/vram_transfer_manager.o + Object asm/unk_02020654.o + Object src/ascii_util.o + Object asm/unk_02020B8C.o + Object asm/unk_020210A0.o + Object src/obj_char_transfer.o + Object asm/unk_02022588.o + Object src/gf_gfx_planes.o + Object src/camera.o + Object asm/unk_02023694.o + Object src/touchscreen.o + Object src/timer3.o + Object src/error_handling.o + Object src/unk_02025534.o + Object asm/unk_02025C44.o + Object src/font_data.o + Object src/pm_string.o + Object src/touch_hitbox_controller.o + Object asm/unk_02026DE0.o + Object src/unk_02026E30.o + Object asm/unk_02026E84.o + Object src/gf_3d_vramman.o + Object asm/unk_02027010.o + Object src/save_arrays.o + Object src/save.o + Object src/sav_system_info.o + Object src/player_data.o + Object asm/unk_020290B4.o + Object src/daycare.o + Object src/pokedex.o + Object src/save_misc.o + Object src/options.o + Object src/apricorn_tree_sys.o + Object src/save_gymmick.o + Object src/save_palpad.o + Object src/mail.o + Object asm/unk_0202B614.o + Object asm/unk_0202C034.o + Object asm/unk_0202C730.o + Object src/coins.o + Object src/save_trainer_card.o + Object asm/unk_0202CA24.o + Object src/seal_case.o + Object src/igt.o + Object src/sav_chatot.o + Object asm/game_stats.o + Object asm/unk_0202D230.o + Object src/save_special_ribbons.o + Object src/roamer.o + Object asm/unk_0202DB34.o + Object src/mystery_gift.o + Object src/hall_of_fame.o + Object asm/unk_0202E41C.o + Object asm/unk_0202E4B0.o + Object asm/unk_0202EB30.o + Object src/update_dex_received.o + Object asm/unk_0202ED18.o + Object src/save_pokegear.o + Object src/safari_zone.o + Object src/photo_album.o + Object asm/unk_0202FBCC.o + Object asm/unk_02030A98.o + Object src/unk_0203170C.o + Object asm/unk_020318C8.o + Object asm/unk_02031904.o + Object src/unk_02031AF0.o + Object asm/unk_02031B0C.o + Object src/pokewalker.o + Object src/save_trainer_house.o + Object asm/unk_02032844.o + Object asm/unk_02033AE0.o + Object asm/unk_02034354.o + Object asm/unk_02034B0C.o + Object asm/unk_02035900.o + Object asm/unk_020379A0.o + Object asm/unk_02037C94.o + Object asm/unk_0203A3B0.o + Object src/communication_error.o + Object asm/unk_0203AC88.o + Object src/wfc_user_info_warning.o + Object src/map_matrix.o + Object src/map_header.o + Object src/map_events.o + Object src/save_local_field_data.o + Object asm/unk_0203BA5C.o + Object src/field_system_rtc_weather.o + Object asm/unk_0203BC10.o + Object asm/unk_0203DB6C.o + Object src/field_system.o Object src/location_backup.o Object src/launch_application.o Object src/launch_application_data1.o Object src/launch_application_data2.o Object asm/launch_application_data.o - Object src/script.o - Object src/fieldmap.o - Object src/scrcmd_c.o - Object src/scrcmd_mart.o - Object src/scrcmd_strbuf.o - Object src/scrcmd_lottery.o - Object src/scrcmd_sound.o - Object src/scrcmd_battle.o - Object src/scrcmd_8.o - Object src/scrcmd_9.o - Object src/unk_0204A3F4.o - Object src/unk_0204B538.o - Object src/scrcmd_apricorn.o - Object src/scrcmd_mystery_gift.o - Object src/scrcmd_12.o - Object src/scrcmd_money.o - Object src/scrcmd_daycare.o - Object src/scrcmd_party.o - Object src/scrcmd_dppl_prizes.o - Object src/scrcmd_17.o - Object src/scrcmd_items.o - Object src/scrcmd_move_relearner.o - Object src/scrcmd_20.o - Object src/scrcmd_battle_castle.o - Object src/scrcmd_battle_arcade.o - Object src/save_vars_flags.o - Object src/task.o - Object src/encounter.o - Object asm/unk_020517A4.o - Object src/battle/battle_setup.o - Object src/blackout.o - Object src/game_clear.o - Object src/field_warp_tasks.o - Object src/script_pokemon_util.o - Object asm/unk_02054514.o - Object asm/unk_02054648.o - Object asm/unk_02054E00.o - Object asm/unk_020551B8.o - Object asm/unk_02055244.o - Object src/unk_02055418.o - Object src/pal_park.o - Object asm/unk_02055BF0_data.o - Object src/unk_02055BF0.o - Object asm/unk_02056680.o - Object asm/unk_02056D7C.o - Object asm/unk_02058034.o - Object asm/unk_02058AEC.o - Object asm/unk_0205A44C.o - Object asm/unk_0205AC88.o - Object src/unk_0205B3DC.o - Object asm/text_0205B4EC.o - Object src/metatile_behavior.o - Object asm/unk_0205BB1C.o - Object asm/unk_0205BFF0.o - Object src/field_player_avatar.o - Object asm/unk_0205CB48.o - Object src/field_map_object.o - Object asm/unk_data_020FCBD8.o - Object asm/unk_0205FD20.o - Object asm/unk_02061284.o - Object asm/unk_data_020FD978.o - Object asm/unk_02062108.o - Object asm/unk_data_020FDB44.o - Object asm/unk_020632B0.o - Object src/unk_020648EC.o - Object src/field_use_item.o - Object asm/unk_020658D4.o - Object src/sys_flags.o - Object src/sys_vars.o - Object asm/unk_02066EDC.o - Object src/field_roamer.o - Object asm/unk_0206793C.o - Object asm/unk_02067A60.o - Object src/field_move.o - Object asm/unk_020689C8.o - Object src/gymmick_init.o - Object src/unk_02068F84.o - Object asm/unk_02068FC8.o - Object asm/unk_02069528.o - Object asm/unk_02069660.o - Object asm/unk_0206979C.o - Object src/follow_mon.o - Object src/map_preview_graphic.o - Object asm/field_take_photo.o - Object src/unk_0206B910.o - Object src/alph_checks.o - Object src/get_egg.o - Object src/unk_0206D494.o - Object src/pokemon.o - Object src/move.o - Object src/trainer_data.o - Object src/pokemon_storage_system.o - Object src/pokemon_icon_idx.o - Object src/party.o - Object src/pokedex_util.o - Object asm/unk_02074944.o - Object asm/unk_02074E5C.o - Object asm/unk_020755E8.o - Object asm/unk_020773AC.o - Object asm/unk_02077678.o - Object src/bag_view.o - Object src/item.o - Object src/bag.o - Object asm/unk_02078834.o - Object asm/unk_02078DD8.o - Object asm/unk_02078E30.o - Object asm/unk_0207CB7C.o - Object asm/unk_0207EB24.o - Object asm/unk_0207F42C.o - Object asm/unk_02080BB4.o - Object asm/unk_02082908.o - Object asm/unk_020850F4.o - Object asm/unk_02085604.o - Object asm/unk_020863F4.o - Object asm/unk_02087284.o - Object asm/unk_02087A78.o - Object asm/unk_02087E70.o - Object asm/unk_02087FD4.o - Object asm/unk_0208805C.o - Object asm/unk_02088288.o - Object asm/unk_0208B1AC.o - Object asm/unk_0208C3E4.o - Object asm/unk_0208DE40.o - Object src/ribbon.o - Object src/trainer_memo.o - Object asm/unk_0208F658.o - Object asm/unk_0208F814.o - Object asm/unk_0208FB64.o - Object src/use_item_on_mon.o - Object src/mail_misc.o - Object src/unk_02091054.o - Object asm/unk_020910D8.o - Object asm/unk_02091278.o - Object asm/unk_020912AC.o - Object src/dex_mon_measures.o - Object asm/unk_02091564.o - Object asm/unk_020915B0.o - Object asm/unk_02091664.o - Object src/move_relearner.o - Object asm/unk_02091880.o - Object asm/unk_02091CDC.o - Object asm/unk_020921A4.o - Object src/save_data_read_error.o - Object src/save_data_write_error.o - Object asm/unk_02092B04.o - Object asm/unk_02092BB8.o - Object src/unk_02092BE8.o - Object asm/unk_020931C4.o - Object src/unk_020932A4.o - Object asm/unk_020932E0.o - Object asm/unk_020957B0.o - Object asm/unk_02095DF4.o - Object src/phonebook_dat.o - Object src/choose_starter.o - Object asm/unk_020961D8.o - Object src/error_message_reset.o - Object src/sin_vcount.o - Object asm/unk_020965A4.o - Object asm/unk_020968B0.o - Object asm/unk_02096910.o - Object asm/unk_02096C88.o - Object asm/unk_02097024.o - Object asm/unk_020971F8.o - Object asm/unk_02097268.o - Object src/unk_02097720.o - Object asm/unk_020977CC.o - Object asm/unk_020979A8.o - Object asm/unk_02097B78.o - Object asm/unk_02097BE0.o - Object asm/unk_02097D3C.o - Object src/pokemon_mood.o - Object src/unk_02097F6C.o + Object src/script.o + Object src/fieldmap.o + Object src/scrcmd_c.o + Object src/scrcmd_mart.o + Object src/scrcmd_strbuf.o + Object src/scrcmd_lottery.o + Object src/scrcmd_sound.o + Object src/scrcmd_battle.o + Object src/scrcmd_8.o + Object src/scrcmd_9.o + Object src/unk_0204A3F4.o + Object src/unk_0204B538.o + Object src/scrcmd_apricorn.o + Object src/scrcmd_mystery_gift.o + Object src/scrcmd_12.o + Object src/scrcmd_money.o + Object src/scrcmd_daycare.o + Object src/scrcmd_party.o + Object src/scrcmd_dppl_prizes.o + Object src/scrcmd_17.o + Object src/scrcmd_items.o + Object src/scrcmd_move_relearner.o + Object src/scrcmd_20.o + Object src/scrcmd_battle_castle.o + Object src/scrcmd_battle_arcade.o + Object src/save_vars_flags.o + Object src/task.o + Object src/encounter.o + Object asm/unk_020517A4.o + Object src/battle/battle_setup.o + Object src/blackout.o + Object src/game_clear.o + Object src/field_warp_tasks.o + Object src/script_pokemon_util.o + Object asm/unk_02054514.o + Object asm/unk_02054648.o + Object asm/unk_02054E00.o + Object asm/unk_020551B8.o + Object asm/unk_02055244.o + Object src/unk_02055418.o + Object src/pal_park.o + Object asm/unk_02055BF0_data.o + Object src/unk_02055BF0.o + Object asm/unk_02056680.o + Object asm/unk_02056D7C.o + Object asm/unk_02058034.o + Object asm/unk_02058AEC.o + Object asm/unk_0205A44C.o + Object asm/unk_0205AC88.o + Object src/unk_0205B3DC.o + Object asm/text_0205B4EC.o + Object src/metatile_behavior.o + Object asm/unk_0205BB1C.o + Object asm/unk_0205BFF0.o + Object src/field_player_avatar.o + Object asm/unk_0205CB48.o + Object src/field_map_object.o + Object asm/unk_data_020FCBD8.o + Object asm/unk_0205FD20.o + Object asm/unk_02061284.o + Object asm/unk_data_020FD978.o + Object asm/unk_02062108.o + Object asm/unk_data_020FDB44.o + Object asm/unk_020632B0.o + Object src/unk_020648EC.o + Object src/field_use_item.o + Object asm/unk_020658D4.o + Object src/sys_flags.o + Object src/sys_vars.o + Object asm/unk_02066EDC.o + Object src/field_roamer.o + Object asm/unk_0206793C.o + Object asm/unk_02067A60.o + Object src/field_move.o + Object asm/unk_020689C8.o + Object src/gymmick_init.o + Object src/unk_02068F84.o + Object asm/unk_02068FC8.o + Object asm/unk_02069528.o + Object asm/unk_02069660.o + Object asm/unk_0206979C.o + Object src/follow_mon.o + Object src/map_preview_graphic.o + Object asm/field_take_photo.o + Object src/unk_0206B910.o + Object src/alph_checks.o + Object src/get_egg.o + Object src/unk_0206D494.o + Object src/pokemon.o + Object src/move.o + Object src/trainer_data.o + Object src/pokemon_storage_system.o + Object src/pokemon_icon_idx.o + Object src/party.o + Object src/pokedex_util.o + Object asm/unk_02074944.o + Object asm/unk_02074E5C.o + Object asm/unk_020755E8.o + Object asm/unk_020773AC.o + Object asm/unk_02077678.o + Object src/bag_view.o + Object src/item.o + Object src/bag.o + Object asm/unk_02078834.o + Object asm/unk_02078DD8.o + Object asm/unk_02078E30.o + Object asm/unk_0207CB7C.o + Object asm/unk_0207EB24.o + Object asm/unk_0207F42C.o + Object asm/unk_02080BB4.o + Object asm/unk_02082908.o + Object asm/unk_020850F4.o + Object asm/unk_02085604.o + Object asm/unk_020863F4.o + Object asm/unk_02087284.o + Object asm/unk_02087A78.o + Object asm/unk_02087E70.o + Object asm/unk_02087FD4.o + Object asm/unk_0208805C.o + Object asm/unk_02088288.o + Object asm/unk_0208B1AC.o + Object asm/unk_0208C3E4.o + Object asm/unk_0208DE40.o + Object src/ribbon.o + Object src/trainer_memo.o + Object asm/unk_0208F658.o + Object asm/unk_0208F814.o + Object asm/unk_0208FB64.o + Object src/use_item_on_mon.o + Object src/mail_misc.o + Object src/unk_02091054.o + Object asm/unk_020910D8.o + Object asm/unk_02091278.o + Object asm/unk_020912AC.o + Object src/dex_mon_measures.o + Object asm/unk_02091564.o + Object asm/unk_020915B0.o + Object asm/unk_02091664.o + Object src/move_relearner.o + Object asm/unk_02091880.o + Object asm/unk_02091CDC.o + Object asm/unk_020921A4.o + Object src/save_data_read_error.o + Object src/save_data_write_error.o + Object asm/unk_02092B04.o + Object asm/unk_02092BB8.o + Object src/unk_02092BE8.o + Object asm/unk_020931C4.o + Object src/unk_020932A4.o + Object asm/unk_020932E0.o + Object asm/unk_020957B0.o + Object asm/unk_02095DF4.o + Object src/phonebook_dat.o + Object src/choose_starter.o + Object asm/unk_020961D8.o + Object src/error_message_reset.o + Object src/sin_vcount.o + Object asm/unk_020965A4.o + Object asm/unk_020968B0.o + Object asm/unk_02096910.o + Object asm/unk_02096C88.o + Object asm/unk_02097024.o + Object asm/unk_020971F8.o + Object asm/unk_02097268.o + Object src/unk_02097720.o + Object asm/unk_020977CC.o + Object asm/unk_020979A8.o + Object asm/unk_02097B78.o + Object asm/unk_02097BE0.o + Object asm/unk_02097D3C.o + Object src/pokemon_mood.o + Object src/unk_02097F6C.o ### Vendor libraries ### Object asm/middleware.o diff --git a/src/battle_arcade_game_board.c b/src/battle_arcade_game_board.c index 032b2854e3..6dbd6008b5 100644 --- a/src/battle_arcade_game_board.c +++ b/src/battle_arcade_game_board.c @@ -21,7 +21,7 @@ #include "unk_02005D10.h" #include "touchscreen.h" #include "unk_02022588.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_0200A090.h" #include "unk_02078E30.h" #include "vram_transfer_manager.h" @@ -605,7 +605,7 @@ static void BattleArcadeGameBoard_InitObjects(GAME_BOARD_WORK *work) { work->button = BattleArcadeObject_Create(&work->unk3E8, 0, 0, 0, 2, 128, 96, 0, 0, 1); if (sub_02037474()) { - sub_02009FE8(1, GX_OBJVRAMMODE_CHAR_1D_32K); + sub_02009FE8(NNS_G2D_VRAM_TYPE_2DMAIN, GX_OBJVRAMMODE_CHAR_1D_32K); sub_0200A080(1); sub_0203A880(); } @@ -1228,11 +1228,11 @@ static void ov84_0223F2B4(GAME_BOARD_SUB_3E8 *work, Party *playerParty, Party *o ov84_0223F5E4(work, playerParty, opponentParty, type); for (i = 0; i < 11; i++) { - sub_0200ACF0(work->resourceObj[i][0]); + sub_0200ACF0(work->resourceObj[i][GF_GFX_RES_TYPE_CHAR]); } for (i = 0; i < 4; i++) { - sub_0200AF94(work->resourceObj[i][1]); + sub_0200AF94(work->resourceObj[i][GF_GFX_RES_TYPE_PLTT]); } GfGfx_EngineBTogglePlanes(GX_PLANEMASK_OBJ, GF_PLANE_TOGGLE_ON); @@ -1279,11 +1279,11 @@ static void ov84_0223F418(GAME_BOARD_SUB_3E8 *work) { u8 i; for (i = 0; i < 11; i++) { - sub_0200AEB0(work->resourceObj[i][0]); + sub_0200AEB0(work->resourceObj[i][GF_GFX_RES_TYPE_CHAR]); } for (i = 0; i < 4; i++) { - sub_0200B0A8(work->resourceObj[i][1]); + sub_0200B0A8(work->resourceObj[i][GF_GFX_RES_TYPE_PLTT]); } for (i = 0; i < 4; i++) { @@ -1292,34 +1292,34 @@ static void ov84_0223F418(GAME_BOARD_SUB_3E8 *work) { SpriteList_Delete(work->spriteList); OamManager_Free(); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); } -extern UnkStruct_020215A0 ov84_0223F9E8; +extern ObjCharTransferTemplate ov84_0223F9E8; static void ov84_0223F480(void) { - UnkStruct_020215A0 var = ov84_0223F9E8; - sub_020215C0(&var, GX_OBJVRAMMODE_CHAR_1D_32K, GX_OBJVRAMMODE_CHAR_1D_32K); + ObjCharTransferTemplate var = ov84_0223F9E8; + ObjCharTransfer_InitEx(&var, GX_OBJVRAMMODE_CHAR_1D_32K, GX_OBJVRAMMODE_CHAR_1D_32K); sub_02022588(14, HEAP_ID_GAME_BOARD); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); } static void ov84_0223F4B4(GAME_BOARD_SUB_3E8 *work) { - work->resourceObj[1][0] = AddCharResObjFromNarc(work->resourceMan[0], NARC_a_1_8_4, 18, TRUE, 1, 1, HEAP_ID_GAME_BOARD); - work->resourceObj[1][1] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_1_8_4, 56, FALSE, 1, 1, 8, HEAP_ID_GAME_BOARD); - work->resourceObj[1][2] = AddCellOrAnimResObjFromNarc(work->resourceMan[2], NARC_a_1_8_4, 20, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); - work->resourceObj[1][3] = AddCellOrAnimResObjFromNarc(work->resourceMan[3], NARC_a_1_8_4, 19, TRUE, 1, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); + work->resourceObj[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(work->resourceMan[0], NARC_a_1_8_4, 18, TRUE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_GAME_BOARD); + work->resourceObj[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_1_8_4, 56, FALSE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, 8, HEAP_ID_GAME_BOARD); + work->resourceObj[1][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(work->resourceMan[2], NARC_a_1_8_4, 20, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); + work->resourceObj[1][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(work->resourceMan[3], NARC_a_1_8_4, 19, TRUE, 1, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); } static void ov84_0223F538(GAME_BOARD_SUB_3E8 *work) { NARC *narc = NARC_New(NARC_a_0_2_1, HEAP_ID_GAME_BOARD); - work->resourceObj[2][0] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, sub_0207CA9C(), FALSE, 2, 1, HEAP_ID_GAME_BOARD); - work->resourceObj[2][1] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_0_2_1, sub_0207CAA0(), FALSE, 2, 1, 3, HEAP_ID_GAME_BOARD); - work->resourceObj[2][2] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[2], narc, sub_0207CAA4(), FALSE, 2, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); - work->resourceObj[2][3] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[3], narc, sub_0207CAA8(), FALSE, 2, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); + work->resourceObj[2][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, sub_0207CA9C(), FALSE, 2, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_GAME_BOARD); + work->resourceObj[2][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_0_2_1, sub_0207CAA0(), FALSE, 2, NNS_G2D_VRAM_TYPE_2DMAIN, 3, HEAP_ID_GAME_BOARD); + work->resourceObj[2][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[2], narc, sub_0207CAA4(), FALSE, 2, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); + work->resourceObj[2][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[3], narc, sub_0207CAA8(), FALSE, 2, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); NARC_Delete(narc); } @@ -1330,9 +1330,9 @@ static void ov84_0223F5E4(GAME_BOARD_SUB_3E8 *work, Party *playerParty, Party *o Pokemon *opponentMon; NARC *narc = NARC_New(NARC_poketool_icongra_poke_icon, HEAP_ID_GAME_BOARD); - work->resourceObj[3][1] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_poketool_icongra_poke_icon, sub_02074490(), FALSE, 3, 1, 3, HEAP_ID_GAME_BOARD); - work->resourceObj[3][2] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[2], narc, sub_02074498(), FALSE, 3, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); - work->resourceObj[3][3] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[3], narc, sub_020744A4(), FALSE, 3, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); + work->resourceObj[3][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_poketool_icongra_poke_icon, sub_02074490(), FALSE, 3, NNS_G2D_VRAM_TYPE_2DMAIN, 3, HEAP_ID_GAME_BOARD); + work->resourceObj[3][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[2], narc, sub_02074498(), FALSE, 3, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); + work->resourceObj[3][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[3], narc, sub_020744A4(), FALSE, 3, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); for (i = 0; i < 4; i++) { if (i == 3) { @@ -1348,18 +1348,18 @@ static void ov84_0223F5E4(GAME_BOARD_SUB_3E8 *work, Party *playerParty, Party *o opponentMon = Party_GetMonByIndex(opponentParty, i); } - work->resourceObj[3 + i][0] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, Pokemon_GetIconNaix(playerMon), FALSE, 3 + i, 1, HEAP_ID_GAME_BOARD); - work->resourceObj[7 + i][0] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, Pokemon_GetIconNaix(opponentMon), FALSE, 7 + i, 1, HEAP_ID_GAME_BOARD); + work->resourceObj[3 + i][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, Pokemon_GetIconNaix(playerMon), FALSE, 3 + i, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_GAME_BOARD); + work->resourceObj[7 + i][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, Pokemon_GetIconNaix(opponentMon), FALSE, 7 + i, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_GAME_BOARD); } NARC_Delete(narc); } static void ov84_0223F714(GAME_BOARD_SUB_3E8 *work) { - work->resourceObj[0][0] = AddCharResObjFromNarc(work->resourceMan[0], NARC_a_1_8_4, 21, TRUE, 0, 2, HEAP_ID_GAME_BOARD); - work->resourceObj[0][1] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_1_8_4, 57, FALSE, 0, 2, 2, HEAP_ID_GAME_BOARD); - work->resourceObj[0][2] = AddCellOrAnimResObjFromNarc(work->resourceMan[2], NARC_a_1_8_4, 23, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); - work->resourceObj[0][3] = AddCellOrAnimResObjFromNarc(work->resourceMan[3], NARC_a_1_8_4, 22, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); + work->resourceObj[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(work->resourceMan[0], NARC_a_1_8_4, 21, TRUE, 0, NNS_G2D_VRAM_TYPE_2DSUB, HEAP_ID_GAME_BOARD); + work->resourceObj[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_1_8_4, 57, FALSE, 0, NNS_G2D_VRAM_TYPE_2DSUB, 2, HEAP_ID_GAME_BOARD); + work->resourceObj[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(work->resourceMan[2], NARC_a_1_8_4, 23, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); + work->resourceObj[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(work->resourceMan[3], NARC_a_1_8_4, 22, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); } static BATTLE_ARCADE_OBJECT *BattleArcadeObject_Create(GAME_BOARD_SUB_3E8 *work, u32 chara, u32 pal, u32 cell, u32 anim, u16 x, u16 y, u32 priority, int bgPrio, u8 display) { diff --git a/src/certificates_app.c b/src/certificates_app.c index 51d6c76a2c..4d165c5fa0 100644 --- a/src/certificates_app.c +++ b/src/certificates_app.c @@ -57,9 +57,9 @@ static const GraphicsModes ov78_021E67E0 = { }; static const Unk122_021E92D0 ov78_021E67F0 = { - .unk0 = 0, - .unk4 = 0x20000, - .unk8 = 0x4000, + .maxTasks = 0, + .sizeMain = 0x20000, + .sizeSub = 0x4000, .charModeMain = GX_OBJVRAMMODE_CHAR_1D_32K, .charModeSub = GX_OBJVRAMMODE_CHAR_1D_32K, }; @@ -119,7 +119,7 @@ static const UnkTemplate_0200D748 ov78_021E68B4 = { .animation = 0, .spritePriority = 1, .pal = 3, - .vram = NNS_G2D_VRAM_TYPE_MAX, + .vram = NNS_G2D_VRAM_TYPE_2DBOTH, .resIdList = { 2, 2, 2, 2, 0, 0 }, .bgPriority = 0, .vramTransfer = 0, @@ -132,7 +132,7 @@ static const UnkTemplate_0200D748 ov78_021E6880 = { .animation = 0, .spritePriority = 0, .pal = 0xFFFF, - .vram = NNS_G2D_VRAM_TYPE_MAX, + .vram = NNS_G2D_VRAM_TYPE_2DBOTH, .resIdList = {}, .bgPriority = 0, .vramTransfer = 0, @@ -145,7 +145,7 @@ static const UnkTemplate_0200D748 ov78_021E68E8 = { .animation = 0, .spritePriority = 0, .pal = 2, - .vram = NNS_G2D_VRAM_TYPE_MAX, + .vram = NNS_G2D_VRAM_TYPE_2DBOTH, .resIdList = { 1, 1, 1, 1, 0, 0 }, .bgPriority = 0, .vramTransfer = 0, @@ -592,7 +592,7 @@ static void CertificatesApp_SetupSpriteRenderer(CertificatesApp_Data *data) { Unk122_021E92FC unkTemplate1 = ov78_021E6838; Unk122_021E92D0 unkTemplate2 = ov78_021E67F0; - unkTemplate2.unk0 = 0x20; + unkTemplate2.maxTasks = 0x20; sub_0200CF70(data->spriteRenderer, &unkTemplate1, &unkTemplate2, 0x20); sub_0200CFF4(data->spriteRenderer, data->spriteGfxHandler, 0x20); @@ -626,8 +626,8 @@ static void ov78_021E636C(CertificatesApp_Data *data) { { NARC *narc = NARC_New(NARC_a_1_6_2, data->heapId); - SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 65, FALSE, 2, NNS_G2D_VRAM_TYPE_MAX, 0); - SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 66, FALSE, NNS_G2D_VRAM_TYPE_MAX, 0); + SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 65, FALSE, 2, NNS_G2D_VRAM_TYPE_2DBOTH, 0); + SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 66, FALSE, NNS_G2D_VRAM_TYPE_2DBOTH, 0); SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 67, FALSE, 0); SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 68, FALSE, 0); @@ -637,13 +637,13 @@ static void ov78_021E636C(CertificatesApp_Data *data) { { NARC *narc = NARC_New(NARC_a_1_2_6, data->heapId); - SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_MAX, 1); - SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19, FALSE, NNS_G2D_VRAM_TYPE_MAX, 1); + SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_2DBOTH, 1); + SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19, FALSE, NNS_G2D_VRAM_TYPE_2DBOTH, 1); SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 20, FALSE, 1); SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 21, FALSE, 1); - SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_MAX, 2); - SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19 + (data->unk58 * 3), FALSE, NNS_G2D_VRAM_TYPE_MAX, 2); + SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_2DBOTH, 2); + SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19 + (data->unk58 * 3), FALSE, NNS_G2D_VRAM_TYPE_2DBOTH, 2); SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 20 + (data->unk58 * 3), FALSE, 2); SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 21 + (data->unk58 * 3), FALSE, 2); @@ -670,7 +670,7 @@ static void ov78_021E652C(CertificatesApp_Data *data) { } static void ov78_021E656C(Sprite *sprite, void *unkBuffer, u32 unkBufferSize, u32 srcOffset) { - GF_ASSERT(Sprite_GetVramType(sprite) == NNS_G2D_VRAM_TYPE_MAX); + GF_ASSERT(Sprite_GetVramType(sprite) == NNS_G2D_VRAM_TYPE_2DBOTH); DC_FlushRange(unkBuffer, unkBufferSize); diff --git a/src/choose_starter_app.c b/src/choose_starter_app.c index a23eec3df0..feac1d20b5 100644 --- a/src/choose_starter_app.c +++ b/src/choose_starter_app.c @@ -15,7 +15,7 @@ #include "unk_02023694.h" #include "unk_0200ACF0.h" #include "unk_0200B150.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_02026E30.h" #include "gf_3d_render.h" @@ -553,7 +553,7 @@ BOOL ChooseStarter_Exit(OVY_MANAGER *ovy, int *state) { Destroy2DGfxResObjMan(work->monSpriteData.cellResMan); Destroy2DGfxResObjMan(work->monSpriteData.animResMan); OamManager_Free(); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); freeWindow(work->winTop); freeWindow(work->winBottom); @@ -609,17 +609,17 @@ static void createOamManager(HeapID heapId) { NNS_G2dInitOamManagerModule(); OamManager_Create(0, 0x80, 0, 0x20, 0, 0x80, 0, 0x20, heapId); { - struct UnkStruct_020215A0 baseTrans = { + ObjCharTransferTemplate baseTrans = { 3, 0, 0x2800, HEAP_ID_DEFAULT }; baseTrans.heapId = heapId; - sub_020215C0(&baseTrans, GX_OBJVRAMMODE_CHAR_1D_128K, GX_OBJVRAMMODE_CHAR_1D_32K); + ObjCharTransfer_InitEx(&baseTrans, GX_OBJVRAMMODE_CHAR_1D_128K, GX_OBJVRAMMODE_CHAR_1D_32K); } sub_02022588(3, heapId); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); } @@ -1177,8 +1177,8 @@ static void createMonSprites(struct ChooseStarterAppWork *work) { struct StarterChooseMonSpriteData *spriteData = &work->monSpriteData; for (i = 0; i < 3; i++) { - spriteData->objs[i].charResObj = AddCharResObjFromOpenNarc(spriteData->charResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000009_NCGR, FALSE, i, 2, work->heapId); - spriteData->objs[i].plttResObj = AddPlttResObjFromOpenNarc(spriteData->plttResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000006_NCLR, FALSE, i, 2, 1, work->heapId); + spriteData->objs[i].charResObj = AddCharResObjFromOpenNarc(spriteData->charResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000009_NCGR, FALSE, i, NNS_G2D_VRAM_TYPE_2DSUB, work->heapId); + spriteData->objs[i].plttResObj = AddPlttResObjFromOpenNarc(spriteData->plttResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000006_NCLR, FALSE, i, NNS_G2D_VRAM_TYPE_2DSUB, 1, work->heapId); spriteData->objs[i].cellResObj = AddCellOrAnimResObjFromOpenNarc(spriteData->cellResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000010_NCER, FALSE, i, GF_GFX_RES_TYPE_CELL, work->heapId); spriteData->objs[i].animResObj = AddCellOrAnimResObjFromOpenNarc(spriteData->animResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000016_NANR, FALSE, i, GF_GFX_RES_TYPE_ANIM, work->heapId); GetMonSpriteCharAndPlttNarcIdsEx( diff --git a/src/credits/credits.c b/src/credits/credits.c index f87184c9e3..efd50308d7 100644 --- a/src/credits/credits.c +++ b/src/credits/credits.c @@ -13,7 +13,7 @@ #include "unk_0200B150.h" #include "sys_task_api.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_02023694.h" #include "bg_window.h" @@ -463,15 +463,15 @@ static void LoadBgGraphics(CreditsAppWork *work) { } static void CreateOamAndObjResMgrs(CreditsAppWork *work) { - UnkStruct_020215A0 temp; + ObjCharTransferTemplate objCharTransferTemplate; UnkOv021E60F6 temp2; GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_128K); GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_128K); - temp = ov76_021E6EA0; - sub_020215A0(&temp); + objCharTransferTemplate = sObjCharTransferTemplate; + ObjCharTransfer_Init(&objCharTransferTemplate); sub_02022588(0xd, HEAP_ID_CREDITS); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); NNS_G2dInitOamManagerModule(); OamManager_Create(0, 0x80, 0, 0x20, 0, 0x80, 0, 0x20, HEAP_ID_CREDITS); @@ -491,15 +491,15 @@ static void FreeOamAndObjResMgrs(CreditsAppWork *work) { } SpriteList_Delete(work->spriteList); OamManager_Free(); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); } static void ov76_021E6170(CreditsAppWork *work) { work->gf2dGfxResObj[GF_GFX_RES_TYPE_CHAR] = - AddCharResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_CHAR], NARC_a_2_6_3, 1, TRUE, 1, 3, HEAP_ID_CREDITS); + AddCharResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_CHAR], NARC_a_2_6_3, 1, TRUE, 1, NNS_G2D_VRAM_TYPE_2DBOTH, HEAP_ID_CREDITS); work->gf2dGfxResObj[GF_GFX_RES_TYPE_PLTT] = - AddPlttResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_PLTT], NARC_a_2_6_3, 0, FALSE, 1, 3, 7, HEAP_ID_CREDITS); + AddPlttResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_PLTT], NARC_a_2_6_3, 0, FALSE, 1, NNS_G2D_VRAM_TYPE_2DBOTH, 7, HEAP_ID_CREDITS); work->gf2dGfxResObj[GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_CELL], NARC_a_2_6_3, 2, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_CREDITS); work->gf2dGfxResObj[GF_GFX_RES_TYPE_ANIM] = @@ -512,9 +512,9 @@ static void ov76_021E6170(CreditsAppWork *work) { for (u8 i = 0; i < UNIQUE_SPRITES_PER_CUTSCENE; i++) { work->cutsceneRsrs[i].charResObj = - AddCharResObjFromOpenNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_CHAR], *narc, 20, TRUE, i + 2, 1, HEAP_ID_CREDITS); + AddCharResObjFromOpenNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_CHAR], *narc, 20, TRUE, i + 2, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_CREDITS); work->cutsceneRsrs[i].plttResObj = - AddPlttResObjFromOpenNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_PLTT], *narc, 149, FALSE, i + 2, 1, 1, HEAP_ID_CREDITS); + AddPlttResObjFromOpenNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_PLTT], *narc, 149, FALSE, i + 2, NNS_G2D_VRAM_TYPE_2DMAIN, 1, HEAP_ID_CREDITS); } sub_0200ACF0(work->gf2dGfxResObj[GF_GFX_RES_TYPE_CHAR]); @@ -546,7 +546,7 @@ static void InitSprites(CreditsAppWork *work) { u8 yIdx; SceneWork *ptr = &work->sceneWork; - InitDancingSpriteResources(1, work, 1, NNS_G2D_VRAM_TYPE_MAX, &tmpl, &header); + InitDancingSpriteResources(1, work, 1, NNS_G2D_VRAM_TYPE_2DBOTH, &tmpl, &header); // Dancing Pokémon that start on top screen for (u8 i = 0; i < MONS_PER_SCREEN; i++) { diff --git a/src/intro_movie.c b/src/intro_movie.c index 43152d784d..326039a1b8 100644 --- a/src/intro_movie.c +++ b/src/intro_movie.c @@ -13,7 +13,7 @@ #include "title_screen.h" #include "unk_0200B150.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_02023694.h" @@ -185,10 +185,10 @@ static void IntroMovie_InitSpriteGraphicsHW(IntroMovieOverlayData *data) { GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); - UnkStruct_020215A0 sp14 = {10, 0, 0, HEAP_ID_INTRO_MOVIE}; - sub_020215A0(&sp14); + ObjCharTransferTemplate template = {10, 0, 0, HEAP_ID_INTRO_MOVIE}; + ObjCharTransfer_Init(&template); sub_02022588(10, HEAP_ID_INTRO_MOVIE); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); NNS_G2dInitOamManagerModule(); OamManager_Create(0, 0x80, 0, 0x20, 0, 0x80, 0, 0x20, HEAP_ID_INTRO_MOVIE); @@ -198,6 +198,6 @@ static void IntroMovie_InitSpriteGraphicsHW(IntroMovieOverlayData *data) { static void IntroMovie_TeardownSpritesManager(IntroMovieOverlayData *data) { SpriteList_Delete(data->spriteList); OamManager_Free(); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); } diff --git a/src/intro_movie_scene_1.c b/src/intro_movie_scene_1.c index ddc4fc13fb..01082d553d 100644 --- a/src/intro_movie_scene_1.c +++ b/src/intro_movie_scene_1.c @@ -4,7 +4,7 @@ #include "unk_0200ACF0.h" #include "unk_0200B150.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "system.h" #include "demo/opening/gs_opening.naix" @@ -72,7 +72,7 @@ static void IntroMovie_Scene1_VBlankCB(void *pVoid) { static void IntroMovie_Scene1_Init(IntroMovieOverlayData *data, IntroMovieScene1Data *sceneData) { BgConfig *bgConfig = IntroMovie_GetBgConfig(data); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); gSystem.screensFlipped = TRUE; GfGfx_SwapDisplay(); @@ -391,8 +391,8 @@ static void IntroMovie_Scene1_SetBrightnessAndBgMaskColor(IntroMovieOverlayData static void IntroMovie_Scene1_LoadSpriteGfx(IntroMovieOverlayData *data, IntroMovieScene1Data *sceneData) { IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene1SpriteResCounts); GF_2DGfxResMan **ppMgr = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->charResObj = AddCharResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_CHARRES, TRUE, 1, 1, HEAP_ID_INTRO_MOVIE); - sceneData->plttResObj = AddPlttResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_PLTTRES, FALSE, 1, 1, 2, HEAP_ID_INTRO_MOVIE); + sceneData->charResObj = AddCharResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_CHARRES, TRUE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_INTRO_MOVIE); + sceneData->plttResObj = AddPlttResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_PLTTRES, FALSE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, 2, HEAP_ID_INTRO_MOVIE); sceneData->cellResObj = AddCellOrAnimResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_CELLRES, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->animResObj = AddCellOrAnimResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_ANIMRES, TRUE, 1, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); sub_0200ACF0(sceneData->charResObj); diff --git a/src/intro_movie_scene_2.c b/src/intro_movie_scene_2.c index 2f187d3d56..e14bc80541 100644 --- a/src/intro_movie_scene_2.c +++ b/src/intro_movie_scene_2.c @@ -7,7 +7,7 @@ #include "unk_0200ACF0.h" #include "unk_0200B150.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "demo/opening/gs_opening.naix" @@ -86,7 +86,7 @@ static void IntroMovie_Scene2_Init(IntroMovieOverlayData *data, IntroMovieScene2 sub_0200FBF4(PM_LCD_TOP, RGB_WHITE); sub_0200FBF4(PM_LCD_BOTTOM, RGB_WHITE); BgConfig *bgConfig = IntroMovie_GetBgConfig(data); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); gSystem.screensFlipped = FALSE; GfGfx_SwapDisplay(); @@ -307,12 +307,12 @@ static void IntroMovie_Scene2_LoadBgGfx(BgConfig *bgConfig) { static void IntroMovie_Scene2_LoadSpriteGfx(IntroMovieOverlayData *data, IntroMovieScene2Data *sceneData) { IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene2SpriteResCounts); GF_2DGfxResMan **resMen = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000078_NCGR_lz, TRUE, 0, 3, HEAP_ID_INTRO_MOVIE); - sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000077_NCLR, FALSE, 0, 3, 1, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000078_NCGR_lz, TRUE, 0, NNS_G2D_VRAM_TYPE_2DBOTH, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000077_NCLR, FALSE, 0, NNS_G2D_VRAM_TYPE_2DBOTH, 1, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000080_NCER_lz, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000079_NANR_lz, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); - sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000074_NCGR_lz, TRUE, 1, 1, HEAP_ID_INTRO_MOVIE); - sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000073_NCLR, FALSE, 1, 1, 2, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000074_NCGR_lz, TRUE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000073_NCLR, FALSE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, 2, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000076_NCER_lz, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000075_NANR_lz, TRUE, 1, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); for (u8 i = 0; i < 2; ++i) { @@ -347,7 +347,7 @@ static void IntroMovie_Scene2_CreateSprites(IntroMovieOverlayData *data, IntroMo 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, }; - IntroMovie_BuildSpriteResourcesHeaderAndTemplate(0, data, 0, NNS_G2D_VRAM_TYPE_MAX, &spriteTemplate, &spriteHeader); + IntroMovie_BuildSpriteResourcesHeaderAndTemplate(0, data, 0, NNS_G2D_VRAM_TYPE_2DBOTH, &spriteTemplate, &spriteHeader); spriteTemplate.position.x = 128 * FX32_ONE; spriteTemplate.position.y = 192 * FX32_ONE; diff --git a/src/intro_movie_scene_3.c b/src/intro_movie_scene_3.c index b185174958..b98189bb70 100644 --- a/src/intro_movie_scene_3.c +++ b/src/intro_movie_scene_3.c @@ -6,7 +6,7 @@ #include "unk_0200B150.h" #include "unk_0200FA24.h" #include "gf_3d_render.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "demo/opening/gs_opening.naix" #include "unk_02026E30.h" @@ -185,7 +185,7 @@ static void IntroMovie_Scene3_VBlankCB(void *pVoid) { static void IntroMovie_Scene3_Init(IntroMovieOverlayData *data, IntroMovieScene3Data *sceneData) { BgConfig *bgConfig = IntroMovie_GetBgConfig(data); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); gSystem.screensFlipped = FALSE; GfGfx_SwapDisplay(); @@ -627,13 +627,13 @@ static void IntroMovie_Scene3_LoadOBJGraphics(IntroMovieOverlayData *data, Intro IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene3SpriteResCounts); GF_2DGfxResMan **resMen = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000066_NCGR_lz, TRUE, 2, 2, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000065_NCLR, FALSE, 2, 2, 1, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000066_NCGR_lz, TRUE, 2, NNS_G2D_VRAM_TYPE_2DSUB, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000065_NCLR, FALSE, 2, NNS_G2D_VRAM_TYPE_2DSUB, 1, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000068_NCER_lz, TRUE, 2, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000067_NANR_lz, TRUE, 2, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000070_NCGR_lz, TRUE, 3, 2, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000069_NCLR, FALSE, 3, 2, 2, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000070_NCGR_lz, TRUE, 3, NNS_G2D_VRAM_TYPE_2DSUB, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000069_NCLR, FALSE, 3, NNS_G2D_VRAM_TYPE_2DSUB, 2, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000072_NCER_lz, TRUE, 3, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000071_NANR_lz, TRUE, 3, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); diff --git a/src/intro_movie_scene_4.c b/src/intro_movie_scene_4.c index 69156dc7b3..b115d9712d 100644 --- a/src/intro_movie_scene_4.c +++ b/src/intro_movie_scene_4.c @@ -8,7 +8,7 @@ #include "unk_0200ACF0.h" #include "unk_0200B150.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_02026E30.h" @@ -97,7 +97,7 @@ static void IntroMovie_Scene4_VBlankCB(void *pVoid) { static void IntroMovie_Scene4_Init(IntroMovieOverlayData *data, IntroMovieScene4Data *sceneData) { BgConfig *bgConfig = IntroMovie_GetBgConfig(data); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); gSystem.screensFlipped = TRUE; GfGfx_SwapDisplay(); @@ -468,15 +468,15 @@ static void IntroMovie_Scene4_LoadSpriteGfx(IntroMovieOverlayData *data, IntroMo IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene4SpriteResCounts); resMen = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000082_NCGR_lz, TRUE, 0, 3, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000081_NCLR, FALSE, 0, 3, 2, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000082_NCGR_lz, TRUE, 0, NNS_G2D_VRAM_TYPE_2DBOTH, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000081_NCLR, FALSE, 0, NNS_G2D_VRAM_TYPE_2DBOTH, 2, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000084_NCER_lz, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000083_NANR_lz, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); for (i = 0; i < 3; ++i) { s32 id = sp18[i]; - sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, monSpriteChar[i], TRUE, id, 1, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, monSpritePltt[i], FALSE, id, 1, 1, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, monSpriteChar[i], TRUE, id, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, monSpritePltt[i], FALSE, id, NNS_G2D_VRAM_TYPE_2DMAIN, 1, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, monSpriteCell[i], TRUE, id, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, monSpriteAnim[i], TRUE, id, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); } diff --git a/src/obj_char_transfer.c b/src/obj_char_transfer.c new file mode 100644 index 0000000000..6eb8b8ec4d --- /dev/null +++ b/src/obj_char_transfer.c @@ -0,0 +1,874 @@ +#include "global.h" +#include "obj_char_transfer.h" +#include "vram_transfer_manager.h" + +typedef enum ObjCharTransferTaskState { + OBJ_CHAR_TRANSFER_TASK_INIT, + OBJ_CHAR_TRANSFER_TASK_1, + OBJ_CHAR_TRANSFER_TASK_2, + OBJ_CHAR_TRANSFER_TASK_COPYABLE, + OBJ_CHAR_TRANSFER_TASK_COPY, +} ObjCharTransferTaskState; + +typedef struct ObjCharTransferTask { + NNSG2dCharacterData *charData; + NNS_G2D_VRAM_TYPE vram; + u8 isTransferred; + int resId; + NNSG2dImageProxy imageProxy; + u32 baseAddrMain; + u32 baseAddrSub; + u8 state; + BOOL shouldUpdateMappingTypeFromHW; + BOOL transferFromTail; + BOOL needResetBlockTransferFlags; + u32 sizeMain; + u32 sizeSub; +} ObjCharTransferTask; + +struct ObjCharTransferTasksManager { + ObjCharTransferTask *tasks; + int max; + int num; + int offsetMain; + int offsetSub; + u32 vramCapacityMain; + u32 vramCapacitySub; + int freeSizeMain; + int freeSizeSub; + int numBlocksMain; + int numBlocksSub; + u32 blockSizeMain; + u32 blockSizeSub; + u8 *blockBufMain; + u8 *blockBufSub; +}; + +ObjCharTransferTasksManager *sObjCharTransferTasksManager; + +static BOOL ObjCharTransfer_TaskExistsByID(int resId); +static void ObjCharTransferInternal_ResetAllTransferTasks(void); +static void ObjCharTransferTask_Init(ObjCharTransferTask *task); +static BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task); +static BOOL ObjCharTransferTask_ReserveAndTransfer(ObjCharTransferTask *task); +static ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn); +static BOOL ObjCharTransferTask_ReserveFromHead(ObjCharTransferTask *task); +static BOOL ObjCharTransferTask_ReserveFromTail(ObjCharTransferTask *task); +static void ObjCharTransferTask_Reset(ObjCharTransferTask *task); +static ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId); +static GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); +static void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); +static BOOL ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(int vram, u32 *pOffsetMain, u32 *pOffsetSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match +static void ObjCharTransferTask_UpdateBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); +static void ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub); +static void ObjCharTransferTask_G2dLoadImageMapping(ObjCharTransferTask *task); +static void ObjCharTransferTask_G2dLoadImageMappingByScreen(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); +static void ObjCharTransferTask_G2dLoadImageMappingVramTransfer(ObjCharTransferTask *task); +static void ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); +static ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void); +static void ObjCharTransfer_GetVramCapacityByBank(void); +static void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksSub, HeapID heapID); +static void ObjCharTransfer_ClearBothScreensBlockBufs(void); +static void ObjCharTransfer_FreeBlockTransferBuffer(u8 *buffer); +static u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer); +static void ObjCharTransfer_ClearBlockBuf(u8 *buffer); +static void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *buffer); +static u32 ObjCharTransfer_FindAvailableTransferBlock(u32 numBlocksUsed, u8 *buffer); +static void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 *buffer); +static void ObjCharTransferTask_ResetBlockTransferFlags(ObjCharTransferTask *task); +static int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight); +static u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize); +static int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize); +static BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub); +static void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram); +static void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, u32 *byteIndex, u8 *bitIndex); +static void ObjCharTransferInternal_BoundsFixOffsetAndSize(u32 baseOffset, u32 curOffset, u32 size, int *correctedOffset, int *correctedSize); + +void ObjCharTransfer_Init(ObjCharTransferTemplate *template) { + ObjCharTransfer_InitEx(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); +} + +void ObjCharTransfer_InitEx(ObjCharTransferTemplate *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub) { + if (sObjCharTransferTasksManager == NULL) { + sObjCharTransferTasksManager = AllocFromHeap(template->heapId, sizeof(ObjCharTransferTasksManager)); + MI_CpuClear32(sObjCharTransferTasksManager, sizeof(ObjCharTransferTasksManager)); + sObjCharTransferTasksManager->max = template->maxTasks; + sObjCharTransferTasksManager->tasks = (ObjCharTransferTask *)AllocFromHeap(template->heapId, sizeof(ObjCharTransferTask) * sObjCharTransferTasksManager->max); + for (int i = 0; i < template->maxTasks; ++i) { + ObjCharTransferTask_Init(&sObjCharTransferTasksManager->tasks[i]); + } + sObjCharTransferTasksManager->blockSizeMain = ObjCharTransfer_GetBlockSizeFromMode(modeMain); + sObjCharTransferTasksManager->blockSizeSub = ObjCharTransfer_GetBlockSizeFromMode(modeSub); + GX_SetOBJVRamModeChar(modeMain); + GXS_SetOBJVRamModeChar(modeSub); + int numBlocksMain = ObjCharTransfer_CalcBlockNumLimit(template->sizeMain, sObjCharTransferTasksManager->blockSizeMain); + int numBlocksSub = ObjCharTransfer_CalcBlockNumLimit(template->sizeSub, sObjCharTransferTasksManager->blockSizeSub); + ObjCharTransfer_InitBlocksTransferBuffers(numBlocksMain, numBlocksSub, template->heapId); + } +} + +void ObjCharTransfer_Destroy(void) { + if (sObjCharTransferTasksManager != NULL) { + ObjCharTransfer_FreeBlockTransferBuffer(sObjCharTransferTasksManager->blockBufMain); + ObjCharTransfer_FreeBlockTransferBuffer(sObjCharTransferTasksManager->blockBufSub); + ObjCharTransferInternal_ResetAllTransferTasks(); + FreeToHeap(sObjCharTransferTasksManager->tasks); + FreeToHeap(sObjCharTransferTasksManager); + sObjCharTransferTasksManager = NULL; + } +} + +void ObjCharTransfer_ClearBuffers(void) { + sObjCharTransferTasksManager->offsetMain = 0; + sObjCharTransferTasksManager->offsetSub = 0; + ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufMain); + ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufSub); + ObjCharTransfer_GetVramCapacityByBank(); +} + +void ObjCharTransfer_SetReservedRegion(u32 offset, u32 size, NNS_G2D_VRAM_TYPE vram) { + int newOffset; + int newSize; + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + ObjCharTransferInternal_BoundsFixOffsetAndSize(sObjCharTransferTasksManager->freeSizeMain, offset, size, &newOffset, &newSize); + if (newSize > 0) { + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE_2DMAIN, newOffset, 0, newSize, 0); + } + } else { + ObjCharTransferInternal_BoundsFixOffsetAndSize(sObjCharTransferTasksManager->freeSizeSub, offset, size, &newOffset, &newSize); + if (newSize > 0) { + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE_2DSUB, 0, newOffset, 0, newSize); + } + } +} + +BOOL ObjCharTransfer_CreateTaskAndDoTransferFromTemplate(const ObjCharTransferTaskTemplate *template) { + GF_ASSERT(ObjCharTransfer_TaskExistsByID(template->id) != TRUE); + ObjCharTransferTask *sub = ObjCharTransfer_GetFreeTask(); + if (sub == NULL) { + GF_ASSERT(FALSE); + return FALSE; + } + if (!ObjCharTransferTask_InitFromTemplate(template, sub)) { + return FALSE; + } + if (!ObjCharTransferTask_ReserveAndTransfer(sub)) { + ObjCharTransfer_ResetTransferTasksByResID(sub->resId); + return FALSE; + } + ++sObjCharTransferTasksManager->num; + return TRUE; +} + +BOOL ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW(const ObjCharTransferTaskTemplate *template) { + GF_ASSERT(ObjCharTransfer_TaskExistsByID(template->id) != TRUE); + ObjCharTransferTask *sub = ObjCharTransfer_GetFreeTask(); + if (sub == NULL) { + GF_ASSERT(FALSE); + return FALSE; + } + if (!ObjCharTransferTask_InitFromTemplate(template, sub)) { + return FALSE; + } + sub->shouldUpdateMappingTypeFromHW = TRUE; + if (!ObjCharTransferTask_ReserveAndTransfer(sub)) { + ObjCharTransfer_ResetTransferTasksByResID(sub->resId); + return FALSE; + } + ++sObjCharTransferTasksManager->num; + return TRUE; +} + +static BOOL ObjCharTransfer_TaskExistsByID(int resId) { + for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (resId == sObjCharTransferTasksManager->tasks[i].resId) { + return TRUE; + } + } + + return FALSE; +} + +void ObjCharTransfer_ReplaceGraphicsFromChardataByResID(int id, NNSG2dCharacterData *charData) { + GF_ASSERT(charData != NULL); + ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(id); + GF_ASSERT(sub != NULL); + sub->charData = charData; + if (sub->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_MAIN, sub->baseAddrMain, charData->pRawData, charData->szByte); + } + if (sub->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_SUB, sub->baseAddrSub, charData->pRawData, charData->szByte); + } +} + +void ObjCharTransfer_ResetTransferTasksByResID(int resId) { + ObjCharTransferTask *task; + BOOL searchingCopies = TRUE; + do { + task = ObjCharTransfer_GetTaskByID(resId); + GF_ASSERT(task != NULL); + if (task->state == OBJ_CHAR_TRANSFER_TASK_COPY) { + ObjCharTransfer_DeleteTaskCopyByProxyPtr(&task->imageProxy); + } else { + searchingCopies = FALSE; + } + } while (searchingCopies); + if (task->state != OBJ_CHAR_TRANSFER_TASK_INIT) { + ObjCharTransferTask_Reset(task); + --sObjCharTransferTasksManager->num; + } +} + +static void ObjCharTransferInternal_ResetAllTransferTasks(void) { + for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (sObjCharTransferTasksManager->tasks[i].state != OBJ_CHAR_TRANSFER_TASK_INIT) { + ObjCharTransferTask_Reset(&sObjCharTransferTasksManager->tasks[i]); + --sObjCharTransferTasksManager->num; + } + } +} + +NNSG2dImageProxy *ObjCharTransfer_GetProxyPtrByResID(int resId) { + ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(resId); + GF_ASSERT(sub != NULL); + if (sub->state == OBJ_CHAR_TRANSFER_TASK_INIT) { + return NULL; + } + + return &sub->imageProxy; +} + +NNSG2dImageProxy *ObjCharTransfer_ResizeTaskByResID_GetProxyPtr(int resId, u32 size) { + ObjCharTransferTask *task = ObjCharTransfer_GetTaskByID(resId); + GF_ASSERT(task != NULL); + if (task->state == OBJ_CHAR_TRANSFER_TASK_INIT) { + return NULL; + } + u32 offsetMain; + u32 offsetSub; + u32 newSizeMain; + u32 newSizeSub; + ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(task->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); + if (task->state == OBJ_CHAR_TRANSFER_TASK_COPYABLE) { + return NULL; + } + task->state = OBJ_CHAR_TRANSFER_TASK_COPYABLE; + ObjCharTransferTask_UpdateBaseAddrs(task, offsetMain, offsetSub); + task->needResetBlockTransferFlags = TRUE; + task->sizeMain = newSizeMain; + task->sizeSub = newSizeSub; + ObjCharTransferTask_G2dLoadImageMappingVramTransfer(task); + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(task->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); + + return &task->imageProxy; +} + +NNSG2dImageProxy *ObjCharTransfer_CopyTransferTaskByProxyPtr(NNSG2dImageProxy *proxyIn) { + ObjCharTransferTask *task; + ObjCharTransferTask *copiedTask; + u32 offsetMain; + u32 offsetSub; + u32 newSizeMain; + u32 newSizeSub; + u32 size; + + task = ObjCharTransfer_GetTaskByImageProxy(proxyIn); + GF_ASSERT(task != NULL); + copiedTask = ObjCharTransfer_GetFreeTask(); + GF_ASSERT(copiedTask != NULL); + if (task->state != OBJ_CHAR_TRANSFER_TASK_COPYABLE) { + return NULL; + } + *copiedTask = *task; + copiedTask->state = OBJ_CHAR_TRANSFER_TASK_COPY; + if (copiedTask->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + size = copiedTask->sizeMain; + } else { + size = copiedTask->sizeSub; + } + + ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(copiedTask->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); + ObjCharTransferTask_UpdateBaseAddrs(copiedTask, offsetMain, offsetSub); + copiedTask->needResetBlockTransferFlags = TRUE; + copiedTask->sizeMain = newSizeMain; + copiedTask->sizeSub = newSizeSub; + ObjCharTransferTask_G2dLoadImageMappingVramTransfer(copiedTask); + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(copiedTask->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); + + return &copiedTask->imageProxy; +} + +void ObjCharTransfer_DeleteTaskCopyByProxyPtr(const NNSG2dImageProxy *proxy) { + int i; + for (i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if ((sObjCharTransferTasksManager->tasks[i].state == OBJ_CHAR_TRANSFER_TASK_COPYABLE || sObjCharTransferTasksManager->tasks[i].state == OBJ_CHAR_TRANSFER_TASK_COPY) && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxy) { + break; + } + } + if (i < sObjCharTransferTasksManager->max) { + ObjCharTransferTask_ResetBlockTransferFlags(&sObjCharTransferTasksManager->tasks[i]); + if (sObjCharTransferTasksManager->tasks[i].state == OBJ_CHAR_TRANSFER_TASK_COPYABLE) { + sObjCharTransferTasksManager->tasks[i].state = OBJ_CHAR_TRANSFER_TASK_2; + } else { + sObjCharTransferTasksManager->tasks[i].state = OBJ_CHAR_TRANSFER_TASK_INIT; + ObjCharTransferTask_Init(&sObjCharTransferTasksManager->tasks[i]); + } + } +} + +BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3) { + u32 offsetMain; + u32 offsetSub; + u32 sizeMain; + u32 sizeSub; + BOOL ret; + + if (!a1) { + ret = ObjCharTransfer_TryGetDestVramOffsets(size, vram, &offsetMain, &offsetSub); + if (ret) { + ObjCharTransfer_ReserveVramSpace(size, vram); + a3->vram = vram; + a3->size = size; + a3->offset = vram == NNS_G2D_VRAM_TYPE_2DMAIN ? offsetMain : offsetSub; + a3->unk_0A = FALSE; + } + } else { + ret = ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(vram, &offsetMain, &offsetSub, size, &sizeMain, &sizeSub); + if (ret) { + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(vram, offsetMain, offsetSub, sizeMain, sizeSub); + a3->vram = vram; + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + a3->size = sizeMain; + a3->offset = offsetMain + sObjCharTransferTasksManager->freeSizeMain; + } else { + a3->size = sizeSub; + a3->offset = offsetSub + sObjCharTransferTasksManager->freeSizeSub; + } + a3->unk_0A = TRUE; + } + } + return ret; +} + +void sub_02021B5C(UnkStruct_02021AC8 *a0) { + if (a0->unk_0A) { + if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(a0->size, sObjCharTransferTasksManager->blockSizeMain); + u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(a0->offset - sObjCharTransferTasksManager->freeSizeMain, sObjCharTransferTasksManager->blockSizeMain); + ObjCharTransfer_ResetBlockTransferFlagsEx(blockCur, blockMax, sObjCharTransferTasksManager->blockBufMain); + } + if (a0->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(a0->size, sObjCharTransferTasksManager->blockSizeSub); + u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(a0->offset - sObjCharTransferTasksManager->freeSizeSub, sObjCharTransferTasksManager->blockSizeSub); + ObjCharTransfer_ResetBlockTransferFlagsEx(blockCur, blockMax, sObjCharTransferTasksManager->blockBufSub); + } + } +} + +ObjCharTransferTasksManager *ObjCharTransfer_PopTaskManager(void) { + GF_ASSERT(sObjCharTransferTasksManager != NULL); + ObjCharTransferTasksManager *ret = sObjCharTransferTasksManager; + sObjCharTransferTasksManager = NULL; + return ret; +} + +void ObjCharTransfer_PushTaskManager(ObjCharTransferTasksManager *taskManager) { + GF_ASSERT(sObjCharTransferTasksManager == NULL); + sObjCharTransferTasksManager = taskManager; +} + +static void ObjCharTransferTask_Init(ObjCharTransferTask *task) { + task->charData = NULL; + task->vram = NNS_G2D_VRAM_TYPE_NEITHER; + task->isTransferred = FALSE; + task->resId = -1; + task->baseAddrMain = 0; + task->baseAddrSub = 0; + task->state = OBJ_CHAR_TRANSFER_TASK_INIT; + task->shouldUpdateMappingTypeFromHW = FALSE; + NNS_G2dInitImageProxy(&task->imageProxy); +} + +static BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task) { + task->charData = template->charData; + task->resId = template->id; + task->vram = template->vram; + task->isTransferred = task->charData->characterFmt >> NNS_G2D_VRAMTRANSFERDATA_FLAG_SHIFT; + task->transferFromTail = template->atEnd; + task->needResetBlockTransferFlags = FALSE; + task->sizeMain = 0; + task->sizeSub = 0; + return TRUE; +} + +static ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn) { + int i; + + for (i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (sObjCharTransferTasksManager->tasks[i].state != OBJ_CHAR_TRANSFER_TASK_INIT && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxyIn) { + break; + } + } + if (i >= sObjCharTransferTasksManager->max) { + return NULL; + } + + return &sObjCharTransferTasksManager->tasks[i]; +} + +static BOOL ObjCharTransferTask_ReserveAndTransfer(ObjCharTransferTask *task) { + BOOL ret = TRUE; + if (task->isTransferred) { + task->state = OBJ_CHAR_TRANSFER_TASK_2; + } else { + task->state = OBJ_CHAR_TRANSFER_TASK_1; + if (!task->transferFromTail) { + ret = ObjCharTransferTask_ReserveFromHead(task); + } else { + ret = ObjCharTransferTask_ReserveFromTail(task); + } + } + return ret; +} + +static BOOL ObjCharTransferTask_ReserveFromHead(ObjCharTransferTask *task) { + u32 offsetMain; + u32 offsetSub; + BOOL ret = ObjCharTransfer_TryGetDestVramOffsets(task->charData->szByte, task->vram, &offsetMain, &offsetSub); + if (ret) { + ObjCharTransferTask_SetBaseAddrs(task, offsetMain, offsetSub); + ObjCharTransfer_ReserveVramSpace(task->charData->szByte, task->vram); + } + return ret; +} + +static BOOL ObjCharTransferTask_ReserveFromTail(ObjCharTransferTask *task) { + u32 offsetMain; + u32 offsetSub; + u32 sizeMain; + u32 sizeSub; + if (!ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(task->vram, &offsetMain, &offsetSub, task->charData->szByte, &sizeMain, &sizeSub)) { + return FALSE; + } + ObjCharTransferTask_UpdateBaseAddrs(task, offsetMain, offsetSub); + task->needResetBlockTransferFlags = TRUE; + task->sizeMain = sizeMain; + task->sizeSub = sizeSub; + ObjCharTransferTask_G2dLoadImageMapping(task); + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(task->vram, offsetMain, offsetSub, sizeMain, sizeSub); + return TRUE; +} + +static void ObjCharTransferTask_Reset(ObjCharTransferTask *task) { + if (task->needResetBlockTransferFlags) { + ObjCharTransferTask_ResetBlockTransferFlags(task); + } + ObjCharTransferTask_Init(task); +} + +static ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId) { + for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (sObjCharTransferTasksManager->tasks[i].resId == resId) { + return &sObjCharTransferTasksManager->tasks[i]; + } + } + + return NULL; +} + +static GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + task->charData->mapingType = GX_GetOBJVRamModeChar(); + } else { + task->charData->mapingType = GXS_GetOBJVRamModeChar(); + } + return task->charData->mapingType; +} + +static void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub) { + task->baseAddrMain = offsetMain; + task->baseAddrSub = offsetSub; + if (!task->isTransferred) { + ObjCharTransferTask_G2dLoadImageMapping(task); + } +} + +static BOOL ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(int vram, u32 *blockNumMain, u32 *blockNumSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub) { + if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + *freeSpaceMain = ObjCharTransfer_AlignToBlock(size, sObjCharTransferTasksManager->blockSizeMain, TRUE); + u32 numBlocksUsed = ObjCharTransfer_CalcBlockNumLimit(*freeSpaceMain, sObjCharTransferTasksManager->blockSizeMain); + *blockNumMain = ObjCharTransfer_FindAvailableTransferBlock(numBlocksUsed, sObjCharTransferTasksManager->blockBufMain); + if (*blockNumMain == -1) { + GF_ASSERT(FALSE); + return FALSE; + } + *blockNumMain = ObjCharTransfer_GetBlockMemOffset(*blockNumMain, sObjCharTransferTasksManager->blockSizeMain); + } + if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { + *freeSpaceSub = ObjCharTransfer_AlignToBlock(size, sObjCharTransferTasksManager->blockSizeSub, TRUE); + u32 numBlocksUsed = ObjCharTransfer_CalcBlockNumLimit(*freeSpaceSub, sObjCharTransferTasksManager->blockSizeSub); + *blockNumSub = ObjCharTransfer_FindAvailableTransferBlock(numBlocksUsed, sObjCharTransferTasksManager->blockBufSub); + if (*blockNumSub == -1) { + GF_ASSERT(FALSE); + return FALSE; + } + *blockNumSub = ObjCharTransfer_GetBlockMemOffset(*blockNumSub, sObjCharTransferTasksManager->blockSizeSub); + } + return TRUE; +} + +static void ObjCharTransferTask_UpdateBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub) { + if (task->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + task->baseAddrMain = offsetMain + sObjCharTransferTasksManager->freeSizeMain; + } + if (task->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + task->baseAddrSub = offsetSub + sObjCharTransferTasksManager->freeSizeSub; + } +} + +static void ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub) { + if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + u32 numBlocks = ObjCharTransfer_CalcBlockNumLimit(sizeMain, sObjCharTransferTasksManager->blockSizeMain); + u32 blockStart = ObjCharTransfer_CalcBlockNumLimit(offsetMain, sObjCharTransferTasksManager->blockSizeMain); + ObjCharTransfer_ReserveTransferBlocks(blockStart, numBlocks, sObjCharTransferTasksManager->blockBufMain); + } + if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { + u32 numBlocks = ObjCharTransfer_CalcBlockNumLimit(sizeSub, sObjCharTransferTasksManager->blockSizeSub); + u32 blockStart = ObjCharTransfer_CalcBlockNumLimit(offsetSub, sObjCharTransferTasksManager->blockSizeSub); + ObjCharTransfer_ReserveTransferBlocks(blockStart, numBlocks, sObjCharTransferTasksManager->blockBufSub); + } +} + +static void ObjCharTransferTask_G2dLoadImageMapping(ObjCharTransferTask *task) { + NNS_G2dInitImageProxy(&task->imageProxy); + if (task->vram != NNS_G2D_VRAM_TYPE_2DBOTH) { + ObjCharTransferTask_G2dLoadImageMappingByScreen(task, task->vram); + } else { + ObjCharTransferTask_G2dLoadImageMappingByScreen(task, NNS_G2D_VRAM_TYPE_2DMAIN); + ObjCharTransferTask_G2dLoadImageMappingByScreen(task, NNS_G2D_VRAM_TYPE_2DSUB); + } +} + +static void ObjCharTransferTask_G2dLoadImageMappingByScreen(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { + int mappingType = task->shouldUpdateMappingTypeFromHW ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; + u32 baseAddr; + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + baseAddr = task->baseAddrMain; + GX_GetOBJVRamModeChar(); + } else { + baseAddr = task->baseAddrSub; + GXS_GetOBJVRamModeChar(); + } + if (mappingType == GX_OBJVRAMMODE_CHAR_2D) { + NNS_G2dLoadImage2DMapping(task->charData, baseAddr, vram, &task->imageProxy); + } else { + NNS_G2dLoadImage1DMapping(task->charData, baseAddr, vram, &task->imageProxy); + } + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + GX_GetOBJVRamModeChar(); + } else { + GXS_GetOBJVRamModeChar(); + } +} + +static void ObjCharTransferTask_G2dLoadImageMappingVramTransfer(ObjCharTransferTask *task) { + NNS_G2dInitImageProxy(&task->imageProxy); + if (task->vram != NNS_G2D_VRAM_TYPE_2DBOTH) { + ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(task, task->vram); + } else { + ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(task, NNS_G2D_VRAM_TYPE_2DMAIN); + ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(task, NNS_G2D_VRAM_TYPE_2DSUB); + } +} + +static void ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { + int mappingType = task->shouldUpdateMappingTypeFromHW ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; + #pragma unused(mappingType) + u32 baseAddr; + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + baseAddr = task->baseAddrMain; + GX_GetOBJVRamModeChar(); + } else { + baseAddr = task->baseAddrSub; + GXS_GetOBJVRamModeChar(); + } + NNS_G2dLoadImageVramTransfer(task->charData, baseAddr, vram, &task->imageProxy); + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + GX_GetOBJVRamModeChar(); + } else { + GXS_GetOBJVRamModeChar(); + } +} + +static ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void) { + for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (sObjCharTransferTasksManager->tasks[i].state == OBJ_CHAR_TRANSFER_TASK_INIT) { + return &sObjCharTransferTasksManager->tasks[i]; + } + } + + return NULL; +} + +static void ObjCharTransfer_GetVramCapacityByBank(void) { + switch (GX_GetBankForOBJ()) { + case GX_VRAM_OBJ_NONE: + sObjCharTransferTasksManager->vramCapacityMain = 0; + break; + case GX_VRAM_OBJ_16_F: + case GX_VRAM_OBJ_16_G: + sObjCharTransferTasksManager->vramCapacityMain = 16 * 1024; + break; + case GX_VRAM_OBJ_32_FG: + sObjCharTransferTasksManager->vramCapacityMain = 32 * 1024; + break; + case GX_VRAM_OBJ_64_E: + sObjCharTransferTasksManager->vramCapacityMain = 64 * 1024; + break; + case GX_VRAM_OBJ_80_EF: + case GX_VRAM_OBJ_80_EG: + sObjCharTransferTasksManager->vramCapacityMain = 80 * 1024; + break; + case GX_VRAM_OBJ_96_EFG: + sObjCharTransferTasksManager->vramCapacityMain = 96 * 1024; + break; + case GX_VRAM_OBJ_128_A: + case GX_VRAM_OBJ_128_B: + sObjCharTransferTasksManager->vramCapacityMain = 128 * 1024; + break; + case GX_VRAM_OBJ_256_AB: + sObjCharTransferTasksManager->vramCapacityMain = 256 * 1024; + break; + default: + sObjCharTransferTasksManager->vramCapacityMain = 0; + break; + } + + switch (GX_GetBankForSubOBJ()) { + case GX_VRAM_SUB_OBJ_NONE: + sObjCharTransferTasksManager->vramCapacitySub = 0; + break; + case GX_VRAM_SUB_OBJ_16_I: + sObjCharTransferTasksManager->vramCapacitySub = 16 * 1024; + break; + case GX_VRAM_SUB_OBJ_128_D: + sObjCharTransferTasksManager->vramCapacitySub = 128 * 1024; + break; + default: + sObjCharTransferTasksManager->vramCapacitySub = 0; + break; + } + + int sizeToReserve = ObjCharTransfer_GetBlockMemOffset(sObjCharTransferTasksManager->numBlocksMain, sObjCharTransferTasksManager->blockSizeMain); + sObjCharTransferTasksManager->freeSizeMain = sObjCharTransferTasksManager->vramCapacityMain - sizeToReserve; + sizeToReserve = ObjCharTransfer_GetBlockMemOffset(sObjCharTransferTasksManager->numBlocksSub, sObjCharTransferTasksManager->blockSizeSub); + sObjCharTransferTasksManager->freeSizeSub = sObjCharTransferTasksManager->vramCapacitySub - sizeToReserve; + GF_ASSERT(sObjCharTransferTasksManager->freeSizeMain >= 0 && sObjCharTransferTasksManager->freeSizeSub >= 0); + GF_ASSERT(sObjCharTransferTasksManager->freeSizeMain >= 0 && sObjCharTransferTasksManager->freeSizeSub >= 0); // they wanted to be doubly sure +} + +static void ObjCharTransfer_ClearBothScreensBlockBufs(void) { + ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufMain); + ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufSub); +} + +static void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksSub, HeapID heapID) { + sObjCharTransferTasksManager->numBlocksMain = numBlocksMain; + sObjCharTransferTasksManager->numBlocksSub = numBlocksSub; + if (sObjCharTransferTasksManager->blockBufMain != NULL) { + FreeToHeap(sObjCharTransferTasksManager->blockBufMain); + } + if (sObjCharTransferTasksManager->blockBufSub != NULL) { + FreeToHeap(sObjCharTransferTasksManager->blockBufSub); + } + if (sObjCharTransferTasksManager->numBlocksMain != 0) { + sObjCharTransferTasksManager->blockBufMain = AllocFromHeap(heapID, numBlocksMain / 8); + } + if (sObjCharTransferTasksManager->numBlocksSub != 0) { + sObjCharTransferTasksManager->blockBufSub = AllocFromHeap(heapID, numBlocksSub / 8); + } + ObjCharTransfer_ClearBothScreensBlockBufs(); +} + +static void ObjCharTransfer_FreeBlockTransferBuffer(u8 *buffer) { + if (buffer != NULL) { + if (buffer == sObjCharTransferTasksManager->blockBufMain) { + sObjCharTransferTasksManager->numBlocksMain = 0; + FreeToHeap(buffer); + } else { + sObjCharTransferTasksManager->numBlocksSub = 0; + FreeToHeap(buffer); + } + } +} + +static u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer) { + if (buffer == sObjCharTransferTasksManager->blockBufMain) { + return sObjCharTransferTasksManager->numBlocksMain; + } else { + return sObjCharTransferTasksManager->numBlocksSub; + } +} + +static void ObjCharTransfer_ClearBlockBuf(u8 *buff) { + if (buff != NULL) { + memset(buff, 0, ObjCharTransfer_GetBlocksCountFromBufferPtr(buff) / 8); + } +} + +static void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *buffer) { + if (buffer != NULL) { + u32 blocksMax = ObjCharTransfer_GetBlocksCountFromBufferPtr(buffer); + u32 blockEnd = blockStart + numBlocks; + for (int i = blockStart; i < blockEnd; ++i) { + if (i >= blocksMax) { + break; + } + u32 byteIndex; + u8 bitIndex; + ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &byteIndex, &bitIndex); + GF_ASSERT(!(buffer[byteIndex] & (1 << bitIndex))); + u8 mask = 1 << bitIndex; + buffer[byteIndex] |= mask; + } + } +} + +static u32 ObjCharTransfer_FindAvailableTransferBlock(u32 reserveSize, u8 *buffer) { + if (buffer != NULL) { + u32 blocksMax = ObjCharTransfer_GetBlocksCountFromBufferPtr(buffer); + for (int i = 0; i < blocksMax; ++i) { + u32 bitIndex; + u8 byteIndex; + ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &bitIndex, &byteIndex); + u8 mask = 1 << byteIndex; + int j = 0; + while ((buffer[bitIndex] & mask) == 0 && j <= reserveSize) { + int num = i + j; + ObjCharTransfer_BitPositionToByteAndBitIndexPair(num, &bitIndex, &byteIndex); + mask = 1 << byteIndex; + if (num >= blocksMax) { + return -1; + } + ++j; + } + if (j > reserveSize) { + return i; + } + i += j; + } + } + return -1; +} + +static void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 *buffer) { + if (buffer != NULL) { + u32 blockEnd = blockStart + blockMax; + for (int i = blockStart; i < blockEnd; ++i) { + u32 byte; + u8 bitIndex; + ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &byte, &bitIndex); + GF_ASSERT(buffer[byte] & (1 << bitIndex)); + u8 mask = (1 << bitIndex) ^ 0xFF; + buffer[byte] &= mask; + } + } +} + +static void ObjCharTransferTask_ResetBlockTransferFlags(ObjCharTransferTask *task) { + if (task->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + u32 loc = NNS_G2dGetImageLocation(&task->imageProxy, NNS_G2D_VRAM_TYPE_2DMAIN); + u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(loc - sObjCharTransferTasksManager->freeSizeMain, sObjCharTransferTasksManager->blockSizeMain); + u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(task->sizeMain, sObjCharTransferTasksManager->blockSizeMain); + ObjCharTransfer_ResetBlockTransferFlagsEx(blockCur, blockMax, sObjCharTransferTasksManager->blockBufMain); + } + if (task->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + u32 loc = NNS_G2dGetImageLocation(&task->imageProxy, NNS_G2D_VRAM_TYPE_2DSUB); + u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(loc - sObjCharTransferTasksManager->freeSizeSub, sObjCharTransferTasksManager->blockSizeSub); + u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(task->sizeSub, sObjCharTransferTasksManager->blockSizeSub); + ObjCharTransfer_ResetBlockTransferFlagsEx(blockCur, blockMax, sObjCharTransferTasksManager->blockBufSub); + } + task->needResetBlockTransferFlags = FALSE; +} + +int ObjCharTransfer_GetBlockSizeFromMode(GXOBJVRamModeChar mode) { + switch (mode) { + case GX_OBJVRAMMODE_CHAR_1D_32K: + return 1; + case GX_OBJVRAMMODE_CHAR_1D_64K: + return 2; + case GX_OBJVRAMMODE_CHAR_1D_128K: + return 4; + case GX_OBJVRAMMODE_CHAR_1D_256K: + return 8; + default: + return 1; + } +} + +static int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight) { + blockSize *= 32; + if (size % blockSize) { + size -= (size % blockSize); + if (alignRight == TRUE) { + size += blockSize; + } + } + return size; +} + +static u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize) { + return size / 32 / blockSize; +} + +static int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize) { + return blockNum * blockSize * 32; +} + +static BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub) { + BOOL result = TRUE; + if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + if (sObjCharTransferTasksManager->offsetMain + size > sObjCharTransferTasksManager->freeSizeMain) { + GF_ASSERT(FALSE); + result = FALSE; + } else { + *pOffsetMain = sObjCharTransferTasksManager->offsetMain; + } + } + if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { + if (sObjCharTransferTasksManager->offsetSub + size > sObjCharTransferTasksManager->freeSizeSub) { + GF_ASSERT(FALSE); + result = FALSE; + } else { + *pOffsetSub = sObjCharTransferTasksManager->offsetSub; + } + } + return result; +} + +static void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram) { + if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + sObjCharTransferTasksManager->offsetMain += size; + sObjCharTransferTasksManager->offsetMain = ObjCharTransfer_AlignToBlock(sObjCharTransferTasksManager->offsetMain, sObjCharTransferTasksManager->blockSizeMain, 1); + } + if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { + sObjCharTransferTasksManager->offsetSub += size; + sObjCharTransferTasksManager->offsetSub = ObjCharTransfer_AlignToBlock(sObjCharTransferTasksManager->offsetSub, sObjCharTransferTasksManager->blockSizeSub, 1); + } +} + +static void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, u32 *byteIndex, u8 *bitIndex) { + *byteIndex = arrayBitIndex >> 3; + *bitIndex = arrayBitIndex & 7; +} + +static void ObjCharTransferInternal_BoundsFixOffsetAndSize(u32 baseOffset, u32 curOffset, u32 size, int *correctedOffset, int *correctedSize) { + *correctedOffset = curOffset - baseOffset; + if (*correctedOffset < 0) { + *correctedSize = size + *correctedOffset; + *correctedOffset = 0; + } else { + *correctedSize = size; + } +} diff --git a/src/options_app.c b/src/options_app.c index 38ba31aead..7a198b369a 100644 --- a/src/options_app.c +++ b/src/options_app.c @@ -1192,9 +1192,9 @@ static void OptionsApp_SetupSpriteRenderer(OptionsApp_Data *data) { .unk1C = 0x20, }; const Unk122_021E92D0 unk2 = { - .unk0 = 9, - .unk4 = 0x400, - .unk8 = 0x400, + .maxTasks = 9, + .sizeMain = 0x400, + .sizeSub = 0x400, .charModeMain = GX_OBJVRAMMODE_CHAR_1D_32K, .charModeSub = GX_OBJVRAMMODE_CHAR_1D_32K, }; diff --git a/src/unk_02009D48.c b/src/unk_02009D48.c index 8e3434383a..c0f48bcf1a 100644 --- a/src/unk_02009D48.c +++ b/src/unk_02009D48.c @@ -4,7 +4,7 @@ #include "unk_02023694.h" #include "unk_02025C44.h" #include "unk_0200B150.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" void CreateSpriteResourcesHeader(struct SpriteResourcesHeader *hdr, int charId, int plttId, int cellId, int cellAnmId, int multiCellId, int multiCellAnmId, int transfer, int priority, GF_2DGfxResMan *charMan, GF_2DGfxResMan *plttMan, GF_2DGfxResMan *cellMan, GF_2DGfxResMan *cellAnmMan, GF_2DGfxResMan *multiCellMan, GF_2DGfxResMan *multiCellAnmMan) { @@ -139,23 +139,23 @@ void G2dRenderer_SetSubSurfaceCoords(struct GF_G2dRenderer *a0, fx32 x, fx32 y) sub_02025C88(&a0->renderSurface[1], &rect); } -void sub_02009FE8(u32 a0, GXOBJVRamModeChar mode) { +void sub_02009FE8(NNS_G2D_VRAM_TYPE vram, GXOBJVRamModeChar mode) { switch (mode) { case GX_OBJVRAMMODE_CHAR_1D_32K: if (GX_GetBankForOBJ() == GX_VRAM_OBJ_16_G || GX_GetBankForOBJ() == GX_VRAM_OBJ_16_F) { - sub_020216F4(0x3E00, 0x200, a0); + ObjCharTransfer_SetReservedRegion(0x3E00, 0x200, vram); } else { - sub_020216F4(0x7E00, 0x200, a0); + ObjCharTransfer_SetReservedRegion(0x7E00, 0x200, vram); } break; case GX_OBJVRAMMODE_CHAR_1D_64K: - sub_020216F4(0xFE00, 0x200, a0); + ObjCharTransfer_SetReservedRegion(0xFE00, 0x200, vram); break; case GX_OBJVRAMMODE_CHAR_1D_128K: if (GX_GetBankForOBJ() == GX_VRAM_OBJ_80_EF || GX_GetBankForOBJ() == GX_VRAM_OBJ_80_EG) { - sub_020216F4(0x13E00, 0x200, a0); + ObjCharTransfer_SetReservedRegion(0x13E00, 0x200, vram); } else { - sub_020216F4(0x1FE00, 0x200, a0); + ObjCharTransfer_SetReservedRegion(0x1FE00, 0x200, vram); } break; default: diff --git a/src/unk_0200A090.c b/src/unk_0200A090.c index 495513ed5c..942465b19e 100644 --- a/src/unk_0200A090.c +++ b/src/unk_0200A090.c @@ -5,17 +5,17 @@ static void loadAll2DGfxResObjFromHeaderInternal(GF_2DGfxResMan *mgr, const GF_2DGfxResHeader *header, int first, int count, GF_2DGfxResObjList *list, HeapID heapId); static void destroyAllObjects(GF_2DGfxResMan *mgr); static GF_2DGfxResObj *sub_0200AA70(GF_2DGfxResMan *mgr); -static struct CharResExtraData *GetResourceExtraCharData(void *resource, int vram, HeapID heapId); -static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, int vram, int pltt_num, HeapID heapId); +static struct CharResExtraData *GetResourceExtraCharData(void *resource, NNS_G2D_VRAM_TYPE vram, HeapID heapId); +static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId); static struct CellResExtraData *GetResourceExtraCellData(void *resource, HeapID heapId); static struct AnimResExtraData *GetResourceExtraAnimData(void *resource, HeapID heapId); static struct MulticellResExtraData *GetResourceExtraMulticellData(void *resource, HeapID heapId); static struct MultianimResExtraData *GetResourceExtraMultianimData(void *resource, HeapID heapId); static void destroyResObjExtra(GF_2DGfxResObj *obj); static void *getResObjExtra(GF_2DGfxResObj *obj); -static void Add2DGfxResObjFromFile(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, char *name, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId); -static void Add2DGfxResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd); -static void Add2DGfxResObjFromOpenNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd); +static void Add2DGfxResObjFromFile(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, char *name, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId); +static void Add2DGfxResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd); +static void Add2DGfxResObjFromOpenNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd); static int sub_0200AC88(const GF_2DGfxResHeaderNarc *a0); static void *sub_0200ACA4(NARC *narc, int fileId, BOOL compressed, HeapID heapId, BOOL atEnd); @@ -57,17 +57,17 @@ GF_2DGfxResObj *Add2DGfxResObjFromHeader(GF_2DGfxResMan *mgr, const GF_2DGfxResH if (!header->isNarc) { headerFile = &((GF_2DGfxResHeaderFile *)header->table)[idx]; GF_ASSERT(GF2DGfxResObjExistsById(mgr, headerFile->id) == TRUE); - Add2DGfxResObjFromFile(mgr, ret, headerFile->filename, headerFile->id, headerFile->extra[0], headerFile->extra[1], header->type, heapId); + Add2DGfxResObjFromFile(mgr, ret, headerFile->filename, headerFile->id, (NNS_G2D_VRAM_TYPE)headerFile->extra[0], headerFile->extra[1], header->type, heapId); } else { headerNarc = &((GF_2DGfxResHeaderNarc *)header->table)[idx]; GF_ASSERT(GF2DGfxResObjExistsById(mgr, headerNarc->id) == TRUE); - Add2DGfxResObjFromNarc(mgr, ret, (NarcId)headerNarc->narcId, headerNarc->fileId, headerNarc->compressed, headerNarc->id, headerNarc->extra[0], headerNarc->extra[1], header->type, heapId, FALSE); + Add2DGfxResObjFromNarc(mgr, ret, (NarcId)headerNarc->narcId, headerNarc->fileId, headerNarc->compressed, headerNarc->id, (NNS_G2D_VRAM_TYPE)headerNarc->extra[0], headerNarc->extra[1], header->type, heapId, FALSE); } mgr->num++; return ret; } -GF_2DGfxResObj *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, HeapID heapId) { +GF_2DGfxResObj *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId) { GF_2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); @@ -78,7 +78,7 @@ GF_2DGfxResObj *AddCharResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fi return ret; } -GF_2DGfxResObj *AddPlttResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId) { +GF_2DGfxResObj *AddPlttResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId) { GF_2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); @@ -97,14 +97,14 @@ GF_2DGfxResObj *AddCellOrAnimResObjFromNarc(GF_2DGfxResMan *mgr, NarcId narcId, #endif //UBFIX ret = sub_0200AA70(mgr); GF_ASSERT(ret != NULL); - Add2DGfxResObjFromNarc(mgr, ret, narcId, fileId, compressed, id, 0, 0, type, heapId, FALSE); + Add2DGfxResObjFromNarc(mgr, ret, narcId, fileId, compressed, id, NNS_G2D_VRAM_TYPE_NEITHER, 0, type, heapId, FALSE); mgr->num++; return ret; } void ReplaceCharResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, HeapID heapId) { int id; - int vram; + NNS_G2D_VRAM_TYPE vram; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); GF_ASSERT(obj != NULL); @@ -117,7 +117,7 @@ void ReplaceCharResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId void ReplacePlttResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, HeapID heapId) { int id; - int vram; + NNS_G2D_VRAM_TYPE vram; int pltt_num; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); @@ -130,7 +130,7 @@ void ReplacePlttResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId Add2DGfxResObjFromNarc(mgr, obj, narcId, fileId, compressed, id, vram, pltt_num, GF_GFX_RES_TYPE_PLTT, heapId, FALSE); } -GF_2DGfxResObj *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, HeapID heapId) { +GF_2DGfxResObj *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId) { GF_2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); @@ -141,7 +141,7 @@ GF_2DGfxResObj *AddCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int f return ret; } -GF_2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, HeapID heapId, BOOL atEnd) { +GF_2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId, BOOL atEnd) { GF_2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); @@ -152,7 +152,7 @@ GF_2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC return ret; } -GF_2DGfxResObj *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId) { +GF_2DGfxResObj *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId) { GF_2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); @@ -163,7 +163,7 @@ GF_2DGfxResObj *AddPlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, NARC *narc, int f return ret; } -GF_2DGfxResObj *AddPlttResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId, BOOL atEnd) { +GF_2DGfxResObj *AddPlttResObjFromOpenNarcWithAtEndFlag(GF_2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId, BOOL atEnd) { GF_2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); @@ -182,14 +182,14 @@ GF_2DGfxResObj *AddCellOrAnimResObjFromOpenNarc(GF_2DGfxResMan *resMan, NARC *na #endif //UBFIX ret = sub_0200AA70(resMan); GF_ASSERT(ret != NULL); - Add2DGfxResObjFromOpenNarc(resMan, ret, narc, fileId, compressed, id, 0, 0, type, heapId, FALSE); + Add2DGfxResObjFromOpenNarc(resMan, ret, narc, fileId, compressed, id, NNS_G2D_VRAM_TYPE_NEITHER, 0, type, heapId, FALSE); resMan->num++; return ret; } void ReplaceCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, HeapID heapId) { int id; - int vram; + NNS_G2D_VRAM_TYPE vram; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); GF_ASSERT(obj != NULL); @@ -202,7 +202,7 @@ void ReplaceCharResObjFromOpenNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NAR void ReplacePlttResObjFromOpenNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, HeapID heapId) { int id; - int vram; + NNS_G2D_VRAM_TYPE vram; int pltt_num; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); @@ -346,7 +346,7 @@ GfGfxResType GF2DGfxResObj_GetResType(GF_2DGfxResObj *obj) { return obj->type; } -int GF2DGfxResObj_GetLoadAddress(GF_2DGfxResObj *obj) { +NNS_G2D_VRAM_TYPE GF2DGfxResObj_GetLoadAddress(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); if (obj->type == GF_GFX_RES_TYPE_CHAR) { struct CharResExtraData *res = getResObjExtra(obj); @@ -355,7 +355,7 @@ int GF2DGfxResObj_GetLoadAddress(GF_2DGfxResObj *obj) { struct PlttResExtraData *res = getResObjExtra(obj); return res->vram; } else { - return 0; + return NNS_G2D_VRAM_TYPE_NEITHER; } } @@ -475,7 +475,7 @@ static GF_2DGfxResObj *sub_0200AA70(GF_2DGfxResMan *mgr) { return NULL; } -void sub_0200AA9C(GF_2DGfxResObj *obj, GfGfxResType type, int vram, int pltt_num, HeapID heapId) { +void sub_0200AA9C(GF_2DGfxResObj *obj, GfGfxResType type, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId) { void *resource = GF2dGfxRawResObj_GetData(obj->resource); switch (type) { case GF_GFX_RES_TYPE_CHAR: @@ -499,14 +499,14 @@ void sub_0200AA9C(GF_2DGfxResObj *obj, GfGfxResType type, int vram, int pltt_num } } -static struct CharResExtraData *GetResourceExtraCharData(void *resource, int vram, HeapID heapId) { +static struct CharResExtraData *GetResourceExtraCharData(void *resource, NNS_G2D_VRAM_TYPE vram, HeapID heapId) { struct CharResExtraData *ret = AllocFromHeap(heapId, sizeof(struct CharResExtraData)); NNS_G2dGetUnpackedCharacterData(resource, &ret->charData); ret->vram = vram; return ret; } -static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, int vram, int pltt_num, HeapID heapId) { +static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId) { struct PlttResExtraData *ret = AllocFromHeap(heapId, sizeof(struct PlttResExtraData)); NNS_G2dGetUnpackedPaletteData(resource, &ret->plttData); ret->vram = vram; @@ -551,20 +551,20 @@ static void *getResObjExtra(GF_2DGfxResObj *obj) { return obj->extra; } -static void Add2DGfxResObjFromFile(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, char *name, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId) { +static void Add2DGfxResObjFromFile(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, char *name, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId) { obj->resource = GF2dGfxRawResMan_ReadAndAllocObj(mgr->resourceMgr, name, id, heapId); obj->type = type; sub_0200AA9C(obj, type, vram, pltt_num, heapId); } -static void Add2DGfxResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd) { +static void Add2DGfxResObjFromNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd) { void *res = GfGfxLoader_LoadFromNarc(narcId, fileId, compressed, heapId, atEnd); obj->resource = GF2dGfxRawResMan_AllocObj(mgr->resourceMgr, res, id); obj->type = type; sub_0200AA9C(obj, type, vram, pltt_num, heapId); } -static void Add2DGfxResObjFromOpenNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd) { +static void Add2DGfxResObjFromOpenNarc(GF_2DGfxResMan *mgr, GF_2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd) { void *res = sub_0200ACA4(narc, fileId, compressed, heapId, atEnd); obj->resource = GF2dGfxRawResMan_AllocObj(mgr->resourceMgr, res, id); obj->type = type; diff --git a/src/unk_0200ACF0.c b/src/unk_0200ACF0.c index 01a982a0e0..b4d987a7e6 100644 --- a/src/unk_0200ACF0.c +++ b/src/unk_0200ACF0.c @@ -1,18 +1,18 @@ #include "global.h" #include "unk_0200ACF0.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" BOOL sub_0200ACF0(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - UnkStruct_02021758 sp00; - sp00.charData = GF2DGfxResObj_GetCharDataPtr(obj); - sp00.dest = GF2DGfxResObj_GetLoadAddress(obj); - sp00.id = GF2DGfxResObj_GetResID(obj); - sp00.unk_0C = FALSE; - return sub_02021758(&sp00); + ObjCharTransferTaskTemplate template; + template.charData = GF2DGfxResObj_GetCharDataPtr(obj); + template.vram = GF2DGfxResObj_GetLoadAddress(obj); + template.id = GF2DGfxResObj_GetResID(obj); + template.atEnd = FALSE; + return ObjCharTransfer_CreateTaskAndDoTransferFromTemplate(&template); } void sub_0200AD30(GF_2DGfxResObjList *charResObjList) { @@ -28,24 +28,24 @@ BOOL sub_0200AD64(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - UnkStruct_02021758 sp00; - sp00.charData = GF2DGfxResObj_GetCharDataPtr(obj); - sp00.dest = GF2DGfxResObj_GetLoadAddress(obj); - sp00.id = GF2DGfxResObj_GetResID(obj); - sp00.unk_0C = FALSE; - return sub_020217B0(&sp00); + ObjCharTransferTaskTemplate template; + template.charData = GF2DGfxResObj_GetCharDataPtr(obj); + template.vram = GF2DGfxResObj_GetLoadAddress(obj); + template.id = GF2DGfxResObj_GetResID(obj); + template.atEnd = FALSE; + return ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW(&template); } BOOL sub_0200ADA4(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - UnkStruct_02021758 sp00; - sp00.charData = GF2DGfxResObj_GetCharDataPtr(obj); - sp00.dest = GF2DGfxResObj_GetLoadAddress(obj); - sp00.id = GF2DGfxResObj_GetResID(obj); - sp00.unk_0C = TRUE; - return sub_02021758(&sp00); + ObjCharTransferTaskTemplate template; + template.charData = GF2DGfxResObj_GetCharDataPtr(obj); + template.vram = GF2DGfxResObj_GetLoadAddress(obj); + template.id = GF2DGfxResObj_GetResID(obj); + template.atEnd = TRUE; + return ObjCharTransfer_CreateTaskAndDoTransferFromTemplate(&template); } void sub_0200ADE4(GF_2DGfxResObjList *charResObjList) { @@ -61,12 +61,12 @@ BOOL sub_0200AE18(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - UnkStruct_02021758 sp00; - sp00.charData = GF2DGfxResObj_GetCharDataPtr(obj); - sp00.dest = GF2DGfxResObj_GetLoadAddress(obj); - sp00.id = GF2DGfxResObj_GetResID(obj); - sp00.unk_0C = TRUE; - return sub_020217B0(&sp00); + ObjCharTransferTaskTemplate template; + template.charData = GF2DGfxResObj_GetCharDataPtr(obj); + template.vram = GF2DGfxResObj_GetLoadAddress(obj); + template.id = GF2DGfxResObj_GetResID(obj); + template.atEnd = TRUE; + return ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW(&template); } void sub_0200AE58(GF_2DGfxResObjList *charResObjList) { @@ -83,14 +83,14 @@ void sub_0200AE8C(GF_2DGfxResObj *obj) { int id = GF2DGfxResObj_GetResID(obj); NNSG2dCharacterData *charData = GF2DGfxResObj_GetCharDataPtr(obj); - sub_0202183C(id, charData); + ObjCharTransfer_ReplaceGraphicsFromChardataByResID(id, charData); } void sub_0200AEB0(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - sub_02021884(GF2DGfxResObj_GetResID(obj)); + ObjCharTransfer_ResetTransferTasksByResID(GF2DGfxResObj_GetResID(obj)); } void sub_0200AED4(GF_2DGfxResObjList *charResObjList) { @@ -106,7 +106,7 @@ NNSG2dImageProxy *sub_0200AF00(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - return sub_02021910(GF2DGfxResObj_GetResID(obj)); + return ObjCharTransfer_GetProxyPtrByResID(GF2DGfxResObj_GetResID(obj)); } NNSG2dImageProxy *sub_0200AF24(GF_2DGfxResObj *charResObj, GF_2DGfxResObj *cellResObj) { @@ -119,28 +119,28 @@ NNSG2dImageProxy *sub_0200AF24(GF_2DGfxResObj *charResObj, GF_2DGfxResObj *cellR int resID = GF2DGfxResObj_GetResID(charResObj); NNSG2dCellDataBank *cellData = GF2DGfxResObj_GetCellDataPtr(cellResObj); - ret = sub_02021934(resID, cellData->pVramTransferData->szByteMax); + ret = ObjCharTransfer_ResizeTaskByResID_GetProxyPtr(resID, cellData->pVramTransferData->szByteMax); if (ret == NULL) { - ret = sub_020219B8(sub_02021910(resID)); + ret = ObjCharTransfer_CopyTransferTaskByProxyPtr(ObjCharTransfer_GetProxyPtrByResID(resID)); } return ret; } void sub_0200AF80(const NNSG2dImageProxy *imgProxy) { GF_ASSERT(imgProxy != NULL); - sub_02021A50(imgProxy); + ObjCharTransfer_DeleteTaskCopyByProxyPtr(imgProxy); } BOOL sub_0200AF94(GF_2DGfxResObj *plttResObj) { GF_ASSERT(plttResObj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(plttResObj) == GF_GFX_RES_TYPE_PLTT); - UnkStruct_02022660 sp00; - sp00.plttData = GF2DGfxResObj_GetPlttDataPtr(plttResObj); - sp00.dest = GF2DGfxResObj_GetLoadAddress(plttResObj); - sp00.id = GF2DGfxResObj_GetResID(plttResObj); - sp00.plttNum = GF2DGfxResObj_GetPlttNum(plttResObj); - return sub_02022660(&sp00); + UnkStruct_02022660 template; + template.plttData = GF2DGfxResObj_GetPlttDataPtr(plttResObj); + template.vram = GF2DGfxResObj_GetLoadAddress(plttResObj); + template.id = GF2DGfxResObj_GetResID(plttResObj); + template.plttNum = GF2DGfxResObj_GetPlttNum(plttResObj); + return sub_02022660(&template); } void sub_0200AFD8(GF_2DGfxResObjList *plttResObjList) { @@ -156,12 +156,12 @@ BOOL sub_0200B00C(GF_2DGfxResObj *plttResObj) { GF_ASSERT(plttResObj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(plttResObj) == GF_GFX_RES_TYPE_PLTT); - UnkStruct_02022660 sp00; - sp00.plttData = GF2DGfxResObj_GetPlttDataPtr(plttResObj); - sp00.dest = GF2DGfxResObj_GetLoadAddress(plttResObj); - sp00.id = GF2DGfxResObj_GetResID(plttResObj); - sp00.plttNum = GF2DGfxResObj_GetPlttNum(plttResObj); - return sub_020226A4(&sp00); + UnkStruct_02022660 template; + template.plttData = GF2DGfxResObj_GetPlttDataPtr(plttResObj); + template.vram = GF2DGfxResObj_GetLoadAddress(plttResObj); + template.id = GF2DGfxResObj_GetResID(plttResObj); + template.plttNum = GF2DGfxResObj_GetPlttNum(plttResObj); + return sub_020226A4(&template); } void sub_0200B050(GF_2DGfxResObjList *plttResObjList) { diff --git a/src/unk_0200CF18.c b/src/unk_0200CF18.c index faad2d2297..bffb8739bc 100644 --- a/src/unk_0200CF18.c +++ b/src/unk_0200CF18.c @@ -4,7 +4,7 @@ #include "gf_gfx_loader.h" #include "palette.h" #include "unk_02009D48.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_0200B150.h" #include "unk_0200CF18.h" @@ -60,19 +60,19 @@ BOOL sub_0200CF70(SpriteRenderer* renderer, const Unk122_021E92FC* a1, const Unk if (renderer == NULL) { return FALSE; } - struct UnkStruct_020215A0 sp14; - sp14.unk_00 = a2->unk0; - sp14.unk_04 = a2->unk4; - sp14.unk_08 = a2->unk8; - sp14.heapId = renderer->heapId; - sub_020215C0(&sp14, a2->charModeMain, a2->charModeSub); + ObjCharTransferTemplate transferTemplate; + transferTemplate.maxTasks = a2->maxTasks; + transferTemplate.sizeMain = a2->sizeMain; + transferTemplate.sizeSub = a2->sizeSub; + transferTemplate.heapId = renderer->heapId; + ObjCharTransfer_InitEx(&transferTemplate, a2->charModeMain, a2->charModeSub); sub_02022588(a3, renderer->heapId); NNS_G2dInitOamManagerModule(); if (renderer->hasOamManager == TRUE) { OamManager_Create(a1->unk0, a1->unk4, a1->unk8, a1->unkC, a1->unk10, a1->unk14, a1->unk18, a1->unk1C, renderer->heapId); } renderer->cellTransferState = sub_02020654(0x20, renderer->heapId); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); return TRUE; } @@ -127,7 +127,7 @@ static void SpriteGfxHandler_DestroyResObjsAndMans(SpriteGfxHandler* gfxHandler) static void DeinitSpriteRenderer(SpriteRenderer* renderer) { sub_0202067C(renderer->cellTransferState); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); if (renderer->hasOamManager == TRUE) { OamManager_Free(); @@ -593,7 +593,7 @@ static BOOL MyUnloadCharById(GF_2DGfxResMan* manager, GF_2DGfxResObjList* list, if (list->obj[i] != NULL) { u32 test_id = GF2DGfxResObj_GetResID(list->obj[i]); if (test_id == charId) { - sub_02021884(charId); + ObjCharTransfer_ResetTransferTasksByResID(charId); DestroySingle2DGfxResObj(manager, list->obj[i]); list->obj[i] = NULL; --list->num; diff --git a/src/voltorb_flip/voltorb_flip.c b/src/voltorb_flip/voltorb_flip.c index f6582f54f3..2348beae44 100644 --- a/src/voltorb_flip/voltorb_flip.c +++ b/src/voltorb_flip/voltorb_flip.c @@ -1693,7 +1693,7 @@ static void ov122_021E7AEC(VoltorbFlipAppWork *work) { SpriteResourceCountsListUnion temp1 = ov122_021E92E4; Unk122_021E92FC temp2 = ov122_021E92FC; Unk122_021E92D0 temp3 = ov122_021E92D0; - temp3.unk0 = 0x80; + temp3.maxTasks = 0x80; work->unk144 = SpriteRenderer_Create(work->heapId); work->unk148 = SpriteRenderer_CreateGfxHandler(work->unk144);