diff options
204 files changed, 11178 insertions, 16715 deletions
diff --git a/.github/calcrom/.gitattributes b/.github/calcrom/.gitattributes new file mode 100644 index 00000000..70f1c267 --- /dev/null +++ b/.github/calcrom/.gitattributes @@ -0,0 +1 @@ +webhook.sh text eol=lf diff --git a/.github/calcrom/webhook.sh b/.github/calcrom/webhook.sh index 279f795d..c15e9b50 100644 --- a/.github/calcrom/webhook.sh +++ b/.github/calcrom/webhook.sh @@ -16,4 +16,3 @@ fi make -C ${GITHUB_WORKSPACE}/.github/calcrom output=$(${GITHUB_WORKSPACE}/.github/calcrom/calcrom ${GITHUB_WORKSPACE} | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g') curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $url -popd diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 582fad70..4e0f34ea 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,13 +18,13 @@ jobs: - name: Update and Install Software run: | sudo apt update - sudo ACCEPT_EULA=Y apt -y --fix-missing upgrade - sudo apt -y install g++-8-multilib linux-libc-dev binutils-arm-none-eabi + sudo ACCEPT_EULA=Y apt -y --fix-missing --allow-downgrades upgrade + sudo apt -y --allow-downgrades install g++-8-multilib linux-libc-dev binutils-arm-none-eabi sudo dpkg --add-architecture i386 wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add - sudo add-apt-repository ppa:cybermax-dexter/sdl2-backport sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu $(lsb_release -cs) main" - sudo apt install --install-recommends winehq-stable + sudo apt -y --allow-downgrades install --install-recommends winehq-stable - name: Checkout Repo uses: actions/checkout@v2 - name: Setup Repo @@ -1,6 +1,6 @@ ### 1. Install MWCC compiler -The build system requires the use of the Metrowerk C Compiler versions 2.0/sp1 and 1.2/sp2p3 to compile matching files. We cannot distribute the correct compiler here so join the PRET discord and download the pinned mwccarm.zip zip in #pokediamond and extract it to tools/. Run each of the executables so they ask for a license.dat and provide the one in the rar (it may also ask for it when compiling). This only needs to be done once. +The build system requires the use of the Metrowerks C Compiler versions 2.0/sp1 and 1.2/sp2p3 to compile matching files. We cannot distribute the correct compiler here so join the PRET discord and download the pinned mwccarm.zip zip in #pokediamond and extract it to tools/. Run each of the executables so they ask for a license.dat and provide the one in the rar (it may also ask for it when compiling). This only needs to be done once. In the future, a GCC option will be available so MWCC is not required to build, however it is required for a matching ROM. @@ -19,6 +19,7 @@ Building the ROM requires the following packages: * build-essentials (build-essential on Ubuntu) * binutils-arm-none-eabi * wine (to run the mwcc executables) +* python3 (for asm preprocessor) * libpng-devel (libpng-dev on Ubuntu) NOTE: If you are using Arch/Manjaro or Void you will only need base-devel instead of build-essentials or make or git. You will still need wine. @@ -30,12 +31,16 @@ Currently WSL2 has an issue with mwldarm not being able to locate it's executabl Before following the respective guides, please install devkitARM and ensure the DEVKITPRO and DEVKITARM variables are added to bashrc such that: Msys2: -export DEVKITPRO=C:/devkitPro +```console +export DEVKITPRO=C:/devkitPro export DEVKITARM=${DEVKITPRO}/devkitARM +``` Cygwin: +```console export DEVKITPRO=/cygdrive/c/devkitPro export DEVKITARM=${DEVKITPRO}/devkitARM +``` You will still require the following packages: diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index b8accee4..dee43fd0 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -48,7 +48,7 @@ Static arm9 Object unk_02015D14.o Object unk_02015E30.o Object game_init.o - Object unk_020166C8.o + Object heap.o Object unk_02016B94.o Object unk_0201B1A8.o Object unk_0201B4E8.o @@ -65,11 +65,11 @@ Static arm9 Object unk_0201CC08.o Object unk_0201D040.o Object unk_0201E00C.o - Object unk_0201E66C.o + Object GX_layers.o Object unk_0201E7D8.o Object unk_0201F06C.o Object unk_020208B8.o - Object unk_02020AFC.o + Object timer3.o Object error_handling.o Object unk_02020C44.o Object unk_0202134C.o @@ -152,9 +152,10 @@ Static arm9 Object script.o Object unk_02038C78.o Object scrcmd.o + Object scrcmd_asm.o Object scrcmd_2.o Object scrcmd_3.o - Object scrcmd_4.o + Object scrcmd_names.o Object scrcmd_5.o Object scrcmd_6.o Object scrcmd_7.o @@ -164,16 +165,16 @@ Static arm9 Object scrcmd_11.o Object scrcmd_12.o Object scrcmd_13.o - Object scrcmd_14.o - Object scrcmd_15.o - Object scrcmd_16.o + Object scrcmd_coins.o + Object scrcmd_money.o + Object scrcmd_daycare.o Object scrcmd_17.o Object scrcmd_18_c.o Object scrcmd_18.o Object scrcmd_19.o Object scrcmd_20.o Object scrcmd_21.o - Object scrcmd_22.o + Object scrcmd_items.o Object scrcmd_23.o Object scrcmd_24.o Object scrcmd_25.o @@ -316,7 +317,7 @@ Static arm9 Object unk_0208A258.o Object unk_0208A300.o Object unk_0208A338.o - Object unk_0208A998.o + Object error_message_reset.o ### Third-party libraries ### Object unk_0208AC14.o Object custom_allocator.o diff --git a/arm9/asm/nonmatchings/GenerateFontHalfRowLookupTable.s b/arm9/asm/nonmatchings/GenerateFontHalfRowLookupTable.s index 2d51a2ae..a590ef02 100644 --- a/arm9/asm/nonmatchings/GenerateFontHalfRowLookupTable.s +++ b/arm9/asm/nonmatchings/GenerateFontHalfRowLookupTable.s @@ -1,11 +1,10 @@ - .include "asm/macros.inc" - .include "global.inc" +.section .text - .extern UNK_021C570C - .extern UNK_021C5734 +glabel GenerateFontHalfRowLookupTable + +.extern UNK_021C570C +.extern UNK_021C5734 - thumb_func_start GenerateFontHalfRowLookupTable -GenerateFontHalfRowLookupTable: ; 0x0201C05C push {r3-r7, lr} sub sp, #0x30 ldr r3, _0201C0F8 ; =UNK_021C570C diff --git a/arm9/asm/scrcmd_11.s b/arm9/asm/scrcmd_11.s deleted file mode 100644 index 5612284f..00000000 --- a/arm9/asm/scrcmd_11.s +++ /dev/null @@ -1,239 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02042B0C -FUN_02042B0C: ; 0x02042B0C - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - add r1, r0, #0x0 - add r5, #0x80 - ldr r0, [r5, #0x0] - ldr r1, [r1, #0x0] - bl FUN_0204B5FC - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02042B40 -FUN_02042B40: ; 0x02042B40 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, #0x80 - add r6, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r1, [r4, #0x0] - bl FUN_0204B63C - strh r0, [r6, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02042B74 -FUN_02042B74: ; 0x02042B74 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, #0x80 - add r6, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r1, [r4, #0x0] - bl FUN_0204B660 - strh r0, [r6, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02042BA8 -FUN_02042BA8: ; 0x02042BA8 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, #0x80 - add r6, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r1, [r4, #0x0] - bl FUN_0204B684 - strh r0, [r6, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02042BDC -FUN_02042BDC: ; 0x02042BDC - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, #0x80 - add r6, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r1, [r4, #0x0] - bl FUN_0204B6A4 - strh r0, [r6, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02042C10 -FUN_02042C10: ; 0x02042C10 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r5, #0x80 - add r2, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r1, [r4, #0x0] - bl FUN_0204B57C - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02042C44 -FUN_02042C44: ; 0x02042C44 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl FUN_02029FC8 - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r5, #0x80 - add r2, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r1, [r4, #0x0] - bl FUN_0204B5A8 - add r0, r6, #0x0 - mov r1, #0x3 - bl FUN_0202A0E8 - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02042C8C -FUN_02042C8C: ; 0x02042C8C - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - cmp r0, #0x0 - beq _02042C9E - cmp r0, #0x1 - beq _02042CA8 - b _02042CB2 -_02042C9E: - add r4, #0x80 - ldr r0, [r4, #0x0] - bl FUN_0204B9A0 - b _02042CB6 -_02042CA8: - add r4, #0x80 - ldr r0, [r4, #0x0] - bl FUN_0204B9CC - b _02042CB6 -_02042CB2: - bl ErrorHandling -_02042CB6: - mov r0, #0x1 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02042CBC -FUN_02042CBC: ; 0x02042CBC - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl FUN_02029FC8 - add r4, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - add r1, r0, #0x0 - add r5, #0x80 - ldr r0, [r5, #0x0] - ldr r1, [r1, #0x0] - bl FUN_0204B4FC - add r0, r4, #0x0 - mov r1, #0x0 - bl FUN_0202A170 - mov r0, #0x0 - pop {r3-r5, pc} diff --git a/arm9/asm/scrcmd_13.s b/arm9/asm/scrcmd_13.s deleted file mode 100644 index 1b31ce71..00000000 --- a/arm9/asm/scrcmd_13.s +++ /dev/null @@ -1,220 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_0204387C -FUN_0204387C: ; 0x0204387C - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl SavArray_Flags_get - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - cmp r0, #0x0 - bne _020438B2 - add r0, r4, #0x0 - bl FUN_0205F224 - add r5, #0x80 - ldr r0, [r5, #0x0] - bl FUN_0204B9EC - b _020438CA -_020438B2: - cmp r0, #0x1 - bne _020438C6 - add r0, r4, #0x0 - bl FUN_0205F234 - add r5, #0x80 - ldr r0, [r5, #0x0] - bl FUN_0204BA1C - b _020438CA -_020438C6: - bl ErrorHandling -_020438CA: - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_020438D0 -FUN_020438D0: ; 0x020438D0 - push {r4-r6, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl FUN_02022528 - add r6, r0, #0x0 - mov r0, #0x20 - bl AllocMonZeroed - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r6, #0x0 - bl FUN_0202C000 - cmp r0, #0x6 - bne _02043908 - mov r0, #0x1 - b _0204390A -_02043908: - mov r0, #0x0 -_0204390A: - strh r0, [r4, #0x0] - add r0, r5, #0x0 - bl FreeToHeap - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02043918 -FUN_02043918: ; 0x02043918 - push {r4-r7, lr} - sub sp, #0xc - add r6, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl FUN_02022528 - add r7, r0, #0x0 - add r0, r6, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl GetStoragePCPointer - str r0, [sp, #0x8] - mov r0, #0x20 - bl AllocMonZeroed - add r4, r0, #0x0 - add r0, r6, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetProfileAddr - str r0, [sp, #0x4] - add r0, r6, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_Pokedex_get - mov r5, #0x0 -_0204395C: - add r0, r7, #0x0 - add r1, r5, #0x0 - add r2, r4, #0x0 - bl FUN_0202BFD8 - mov r0, #0x20 - str r0, [sp, #0x0] - ldr r1, [sp, #0x4] - add r0, r4, #0x0 - mov r2, #0x2 - mov r3, #0x0 - bl FUN_0208089C - add r0, r4, #0x0 - bl FUN_020690E4 - add r1, r0, #0x0 - ldr r0, [sp, #0x8] - bl PCStorage_PlaceMonInFirstEmptySlotInAnyBox - cmp r0, #0x0 - bne _0204398C - bl ErrorHandling -_0204398C: - add r0, r6, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - add r1, r4, #0x0 - ldr r0, [r0, #0xc] - bl FUN_0202C144 - add r5, r5, #0x1 - cmp r5, #0x6 - blt _0204395C - add r0, r4, #0x0 - bl FreeToHeap - add r0, r7, #0x0 - bl FUN_0202BEDC - mov r0, #0x0 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_020439B4 -FUN_020439B4: ; 0x020439B4 - push {r3-r7, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - cmp r6, #0x3 - bhi _02043A40 - add r0, r6, r6 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_020439EE: ; jump table (using 16-bit offset) - .short _020439F6 - _020439EE - 2; case 0 - .short _02043A02 - _020439EE - 2; case 1 - .short _02043A0E - _020439EE - 2; case 2 - .short _02043A1A - _020439EE - 2; case 3 -_020439F6: - add r4, #0x80 - ldr r0, [r4, #0x0] - bl FUN_0204BAC4 - strh r0, [r5, #0x0] - b _02043A40 -_02043A02: - add r4, #0x80 - ldr r0, [r4, #0x0] - bl FUN_0204BAD4 - strh r0, [r5, #0x0] - b _02043A40 -_02043A0E: - add r4, #0x80 - ldr r0, [r4, #0x0] - bl FUN_0204BAE4 - strh r0, [r5, #0x0] - b _02043A40 -_02043A1A: - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl FUN_0204BAD4 - add r6, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl FUN_0204BAC4 - add r4, #0x80 - add r7, r0, #0x0 - ldr r0, [r4, #0x0] - bl FUN_0204BAE4 - add r0, r7, r0 - add r0, r6, r0 - strh r0, [r5, #0x0] -_02043A40: - mov r0, #0x0 - pop {r3-r7, pc} diff --git a/arm9/asm/scrcmd_14.s b/arm9/asm/scrcmd_14.s deleted file mode 100644 index 1fd34357..00000000 --- a/arm9/asm/scrcmd_14.s +++ /dev/null @@ -1,267 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02043A44 -FUN_02043A44: ; 0x02043A44 - push {r3-r7, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x26 - bl FUN_02039438 - lsl r1, r6, #0x18 - lsl r2, r7, #0x18 - add r4, #0x80 - add r5, r0, #0x0 - ldr r0, [r4, #0x0] - lsr r1, r1, #0x18 - lsr r2, r2, #0x18 - bl MOD05_021E2950 - str r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02043A94 -FUN_02043A94: ; 0x02043A94 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x26 - bl FUN_02039438 - ldr r0, [r0, #0x0] - bl MOD05_021E29B4 - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02043AAC -FUN_02043AAC: ; 0x02043AAC - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x26 - bl FUN_02039438 - add r1, r0, #0x0 - add r4, #0x80 - ldr r0, [r4, #0x0] - ldr r1, [r1, #0x0] - bl MOD05_021E29C8 - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02043ACC -FUN_02043ACC: ; 0x02043ACC - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl CheckCoins - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02043AFC -FUN_02043AFC: ; 0x02043AFC - push {r3-r5, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r5, #0x0 - bl GiveCoins - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02043B28 -FUN_02043B28: ; 0x02043B28 - push {r3-r5, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r5, #0x0 - bl TakeCoins - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02043B54 -FUN_02043B54: ; 0x02043B54 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r1, r0, #0x0 - ldrh r1, [r1, #0x0] - add r0, r4, #0x0 - bl TakeCoins - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02043B84 -FUN_02043B84: ; 0x02043B84 - push {r4-r6, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - add r0, r5, #0x0 - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - ldr r0, [r5, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadWord - add r4, r0, #0x0 - add r0, r6, #0x0 - bl CheckCoins - cmp r0, r4 - bhs _02043BC8 - mov r0, #0x0 - b _02043BCA -_02043BC8: - mov r0, #0x1 -_02043BCA: - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02043BD0 -FUN_02043BD0: ; 0x02043BD0 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - add r0, r4, #0x0 - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - ldr r0, [r4, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - ldrh r5, [r0, #0x0] - add r0, r6, #0x0 - bl CheckCoins - cmp r0, r5 - bhs _02043C1E - mov r0, #0x0 - b _02043C20 -_02043C1E: - mov r0, #0x1 -_02043C20: - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02043C28 -FUN_02043C28: ; 0x02043C28 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r6, #0x0 - bl CanGiveCoins - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 diff --git a/arm9/asm/scrcmd_15.s b/arm9/asm/scrcmd_15.s deleted file mode 100644 index e5630b08..00000000 --- a/arm9/asm/scrcmd_15.s +++ /dev/null @@ -1,198 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02043C6C -FUN_02043C6C: ; 0x02043C6C - push {r3-r5, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadWord - add r1, r0, #0x0 - add r0, r5, #0x0 - bl PlayerProfile_AddMoney - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02043C90 -FUN_02043C90: ; 0x02043C90 - push {r3-r5, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadWord - add r1, r0, #0x0 - add r0, r5, #0x0 - bl PlayerProfile_SubMoney - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02043CB4 -FUN_02043CB4: ; 0x02043CB4 - push {r3-r5, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r5, #0x0 - bl PlayerProfile_SubMoney - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02043CE4 -FUN_02043CE4: ; 0x02043CE4 - push {r4-r6, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadWord - add r4, r0, #0x0 - add r0, r6, #0x0 - bl PlayerProfile_GetMoney - cmp r0, r4 - bhs _02043D20 - mov r0, #0x0 - b _02043D22 -_02043D20: - mov r0, #0x1 -_02043D22: - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02043D28 -FUN_02043D28: ; 0x02043D28 - push {r4-r6, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r4, r0, #0x0 - add r0, r6, #0x0 - bl PlayerProfile_GetMoney - cmp r0, r4 - bhs _02043D6E - mov r0, #0x0 - b _02043D70 -_02043D6E: - mov r0, #0x1 -_02043D70: - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02043D78 -FUN_02043D78: ; 0x02043D78 - push {r3-r7, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x27 - bl FUN_02039438 - lsl r1, r6, #0x18 - lsl r2, r7, #0x18 - add r4, #0x80 - add r5, r0, #0x0 - ldr r0, [r4, #0x0] - lsr r1, r1, #0x18 - lsr r2, r2, #0x18 - bl MOD05_021E27E8 - str r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02043DC8 -FUN_02043DC8: ; 0x02043DC8 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x27 - bl FUN_02039438 - ldr r0, [r0, #0x0] - bl MOD05_021E288C - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02043DE0 -FUN_02043DE0: ; 0x02043DE0 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x27 - bl FUN_02039438 - add r1, r0, #0x0 - add r4, #0x80 - ldr r0, [r4, #0x0] - ldr r1, [r1, #0x0] - bl MOD05_021E28A0 - mov r0, #0x0 - pop {r4, pc} - .balign 4 diff --git a/arm9/asm/scrcmd_16.s b/arm9/asm/scrcmd_16.s deleted file mode 100644 index 8afbf518..00000000 --- a/arm9/asm/scrcmd_16.s +++ /dev/null @@ -1,408 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02043E00 -FUN_02043E00: ; 0x02043E00 - push {r3-r5, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - ldr r5, [r0, #0xc] - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl Sav2_DayCare_get - ldr r1, [r4, #0x0] - bl MOD05_021ED4E0 - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02043E20 -FUN_02043E20: ; 0x02043E20 - push {r3-r5, lr} - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r1, [r1, #0x0] - ldr r4, [r1, #0xc] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x8 - bl SavArray_get - bl MOD05_021ED5EC - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02043E50 -FUN_02043E50: ; 0x02043E50 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x8 - ldr r0, [r0, #0xc] - bl SavArray_get - bl MOD05_021ECD64 - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02043E68 -FUN_02043E68: ; 0x02043E68 - push {r4-r6, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - mov r1, #0x8 - ldr r0, [r5, #0xc] - bl SavArray_get - add r6, r0, #0x0 - ldr r0, [r5, #0xc] - bl SavArray_PlayerParty_get - add r4, #0x80 - add r5, r0, #0x0 - ldr r0, [r4, #0x0] - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - add r2, r0, #0x0 - add r0, r6, #0x0 - add r1, r5, #0x0 - bl MOD05_DayCare_GiveEggToPlayer - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02043E9C -FUN_02043E9C: ; 0x02043E9C - push {r3-r7, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - mov r1, #0xf - add r0, r5, #0x0 - bl FUN_02039438 - add r7, r0, #0x0 - add r0, r4, #0x0 - ldr r6, [r5, #0xc] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - str r0, [sp, #0x0] - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r4, r0, #0x0 - add r0, r6, #0x0 - mov r1, #0x8 - bl SavArray_get - add r6, r0, #0x0 - ldr r0, [r5, #0xc] - bl SavArray_PlayerParty_get - lsl r3, r4, #0x18 - ldr r1, [r7, #0x0] - add r2, r6, #0x0 - lsr r3, r3, #0x18 - bl MOD05_021EC71C - ldr r1, [sp, #0x0] - strh r0, [r1, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02043EFC -FUN_02043EFC: ; 0x02043EFC - push {r3-r7, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - mov r1, #0xf - add r0, r5, #0x0 - bl FUN_02039438 - add r7, r0, #0x0 - add r0, r4, #0x0 - ldr r5, [r5, #0xc] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x8 - bl SavArray_get - lsl r1, r4, #0x18 - ldr r2, [r7, #0x0] - lsr r1, r1, #0x18 - bl MOD05_021EC854 - strh r0, [r6, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02043F50 -FUN_02043F50: ; 0x02043F50 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - ldr r4, [r0, #0xc] - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r7, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x8 - bl SavArray_get - ldr r2, [r6, #0x0] - add r1, r5, #0x0 - bl MOD05_021EC864 - strh r0, [r7, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02043FA0 -FUN_02043FA0: ; 0x02043FA0 - push {r3-r7, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - mov r1, #0xf - add r0, r5, #0x0 - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - ldr r0, [r5, #0xc] - bl SavArray_PlayerParty_get - ldr r2, [r6, #0x0] - add r1, r7, #0x0 - bl MOD05_021ED5C4 - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02043FF4 -FUN_02043FF4: ; 0x02043FF4 - push {r4-r6, lr} - add r6, r0, #0x0 - add r1, r6, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - ldr r5, [r4, #0xc] - bl ScriptReadHalfword - add r6, #0x80 - add r1, r0, #0x0 - ldr r0, [r6, #0x0] - bl VarGet - add r6, r0, #0x0 - ldr r0, [r4, #0xc] - bl SavArray_PlayerParty_get - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x8 - bl SavArray_get - lsl r1, r6, #0x18 - add r2, r0, #0x0 - add r0, r4, #0x0 - lsr r1, r1, #0x18 - add r3, r5, #0x0 - bl MOD05_021EC57C - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02044034 -FUN_02044034: ; 0x02044034 - push {r3-r7, lr} - sub sp, #0x10 - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - ldr r5, [r0, #0xc] - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - str r0, [sp, #0x8] - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - str r0, [sp, #0xc] - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r4, r0, #0x0 - add r0, r5, #0x0 - bl Sav2_DayCare_get - lsl r1, r4, #0x18 - lsr r1, r1, #0x18 - str r1, [sp, #0x0] - ldr r1, [r6, #0x0] - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - str r1, [sp, #0x4] - lsl r1, r7, #0x18 - lsl r2, r2, #0x18 - lsl r3, r3, #0x18 - lsr r1, r1, #0x18 - lsr r2, r2, #0x18 - lsr r3, r3, #0x18 - bl MOD05_021ED52C - mov r0, #0x0 - add sp, #0x10 - pop {r3-r7, pc} - - thumb_func_start FUN_020440C0 -FUN_020440C0: ; 0x020440C0 - push {r3-r5, lr} - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r1, [r1, #0x0] - ldr r4, [r1, #0xc] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x8 - bl SavArray_get - bl MOD05_021ED644 - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_020440F0 -FUN_020440F0: ; 0x020440F0 - push {r3-r5, lr} - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r1, [r1, #0x0] - ldr r4, [r1, #0xc] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x8 - bl SavArray_get - bl Sav2_DayCare_GetEggPID - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02044120 -FUN_02044120: ; 0x02044120 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02044138 -FUN_02044138: ; 0x02044138 - mov r0, #0x0 - bx lr - - thumb_func_start FUN_0204413C -FUN_0204413C: ; 0x0204413C - mov r0, #0x0 - bx lr - - thumb_func_start FUN_02044140 -FUN_02044140: ; 0x02044140 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 diff --git a/arm9/asm/scrcmd_18.s b/arm9/asm/scrcmd_18.s index 4b0acb12..fe0e3aa9 100644 --- a/arm9/asm/scrcmd_18.s +++ b/arm9/asm/scrcmd_18.s @@ -678,7 +678,7 @@ FUN_020448D4: ; 0x020448D4 ldr r0, [r5, #0x0] ldr r0, [r0, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034824 + bl MapHeader_GetMapSec add r7, r0, #0x0 ldr r0, [r6, #0xc] bl SavArray_PlayerParty_get diff --git a/arm9/asm/scrcmd_19.s b/arm9/asm/scrcmd_19.s deleted file mode 100644 index 863006b1..00000000 --- a/arm9/asm/scrcmd_19.s +++ /dev/null @@ -1,175 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .rodata - - .global UNK_020F450C -UNK_020F450C: ; 0x020F450C - .byte 0x67, 0x00 - - .global UNK_020F450E -UNK_020F450E: ; 0x020F450E - .byte 0x8E, 0x00, 0x65, 0x00, 0x8A, 0x00, 0x66, 0x00, 0x8C, 0x00, 0x63, 0x00, 0x59, 0x01, 0x64, 0x00 - .byte 0x5B, 0x01, 0x68, 0x00, 0x9A, 0x01, 0x69, 0x00, 0x98, 0x01 - - .text - - thumb_func_start FUN_02045268 -FUN_02045268: ; 0x02045268 - push {r3-r7, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r6, [r1, #0x0] - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r4, #0x0 - ldr r7, _020452B0 ; =UNK_020F450C - str r0, [sp, #0x0] - add r5, r4, #0x0 -_02045288: - ldr r0, [r6, #0xc] - bl Sav2_Bag_get - lsl r1, r4, #0x2 - ldrh r1, [r7, r1] - mov r2, #0x4 - bl Bag_GetQuantity - add r0, r5, r0 - lsl r0, r0, #0x10 - lsr r5, r0, #0x10 - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - cmp r4, #0x7 - blo _02045288 - ldr r0, [sp, #0x0] - strh r5, [r0, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 -_020452B0: .word UNK_020F450C - - thumb_func_start FUN_020452B4 -FUN_020452B4: ; 0x020452B4 - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - mov r5, #0x0 - ldr r2, _02045300 ; =UNK_020F450C - strh r5, [r4, #0x0] -_020452E0: - lsl r3, r5, #0x2 - ldrh r1, [r2, r3] - cmp r0, r1 - bne _020452F0 - ldr r0, _02045304 ; =UNK_020F450E - ldrh r0, [r0, r3] - strh r0, [r4, #0x0] - b _020452FA -_020452F0: - add r1, r5, #0x1 - lsl r1, r1, #0x10 - lsr r5, r1, #0x10 - cmp r5, #0x7 - blo _020452E0 -_020452FA: - mov r0, #0x0 - pop {r3-r5, pc} - nop -_02045300: .word UNK_020F450C -_02045304: .word UNK_020F450E - - thumb_func_start FUN_02045308 -FUN_02045308: ; 0x02045308 - push {r4-r7, lr} - sub sp, #0xc - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r7, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - str r0, [sp, #0x8] - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - str r0, [sp, #0x4] - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - str r0, [sp, #0x0] - mov r4, #0x0 - ldr r0, [sp, #0x8] - add r6, r4, #0x0 - strh r4, [r0, #0x0] - ldr r0, [sp, #0x4] - strh r4, [r0, #0x0] -_02045358: - ldr r0, [r7, #0xc] - lsl r5, r4, #0x2 - bl Sav2_Bag_get - ldr r1, _02045394 ; =UNK_020F450C - mov r2, #0x4 - ldrh r1, [r1, r5] - bl Bag_GetQuantity - add r0, r6, r0 - lsl r0, r0, #0x10 - lsr r6, r0, #0x10 - ldr r0, [sp, #0x0] - cmp r6, r0 - blo _02045384 - ldr r0, _02045394 ; =UNK_020F450C - ldrh r1, [r0, r5] - ldr r0, [sp, #0x8] - strh r1, [r0, #0x0] - ldr r0, [sp, #0x4] - strh r4, [r0, #0x0] - b _0204538E -_02045384: - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - cmp r4, #0x7 - blo _02045358 -_0204538E: - mov r0, #0x0 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 -_02045394: .word UNK_020F450C - - thumb_func_start FUN_02045398 -FUN_02045398: ; 0x02045398 - mov r0, #0x0 - bx lr - - thumb_func_start FUN_0204539C -FUN_0204539C: ; 0x0204539C - mov r0, #0x0 - bx lr diff --git a/arm9/asm/scrcmd_20.s b/arm9/asm/scrcmd_20.s deleted file mode 100644 index 31de1e77..00000000 --- a/arm9/asm/scrcmd_20.s +++ /dev/null @@ -1,56 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .rodata - - .global UNK_020F4528 -UNK_020F4528: ; 0x020F4528 - .byte 0xFB, 0x00 - - .global UNK_020F452A -UNK_020F452A: ; 0x020F452A - .byte 0xE8, 0x03, 0x09, 0x01, 0xE8, 0x03, 0x14, 0x01, 0xE8, 0x03, 0x15, 0x01, 0xE8, 0x03, 0xA1, 0x01 - .byte 0xD0, 0x07, 0x81, 0x01, 0xD0, 0x07, 0x92, 0x01, 0xA0, 0x0F, 0x67, 0x01, 0xA0, 0x0F, 0x73, 0x01 - .byte 0x70, 0x17, 0xA0, 0x01, 0x70, 0x17, 0x51, 0x01, 0x70, 0x17, 0x62, 0x01, 0x40, 0x1F, 0x5C, 0x01 - .byte 0x40, 0x1F, 0x6A, 0x01, 0x10, 0x27, 0x5F, 0x01, 0x10, 0x27, 0x54, 0x01, 0x10, 0x27, 0x64, 0x01 - .byte 0x10, 0x27, 0x91, 0x01, 0x98, 0x3A, 0x8B, 0x01, 0x20, 0x4E - - .text - - thumb_func_start FUN_020453A0 -FUN_020453A0: ; 0x020453A0 - push {r4-r6, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - ldr r1, _020453EC ; =UNK_020F4528 - lsl r2, r4, #0x2 - ldrh r1, [r1, r2] - strh r1, [r6, #0x0] - ldr r1, _020453F0 ; =UNK_020F452A - ldrh r1, [r1, r2] - strh r1, [r0, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 -_020453EC: .word UNK_020F4528 -_020453F0: .word UNK_020F452A diff --git a/arm9/asm/scrcmd_22.s b/arm9/asm/scrcmd_22.s deleted file mode 100644 index 1f354520..00000000 --- a/arm9/asm/scrcmd_22.s +++ /dev/null @@ -1,220 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02045784 -FUN_02045784: ; 0x02045784 - push {r3-r7, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - ldr r0, [r5, #0xc] - bl Sav2_Bag_get - add r1, r6, #0x0 - add r2, r7, #0x0 - mov r3, #0x4 - bl Bag_AddItem - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_020457DC -FUN_020457DC: ; 0x020457DC - push {r3-r7, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - ldr r0, [r5, #0xc] - bl Sav2_Bag_get - add r1, r6, #0x0 - add r2, r7, #0x0 - mov r3, #0x4 - bl Bag_TakeItem - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02045834 -FUN_02045834: ; 0x02045834 - push {r3-r7, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - ldr r0, [r5, #0xc] - bl Sav2_Bag_get - add r1, r6, #0x0 - add r2, r7, #0x0 - mov r3, #0x4 - bl Bag_HasSpaceForItem - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_0204588C -FUN_0204588C: ; 0x0204588C - push {r3-r7, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - ldr r0, [r5, #0xc] - bl Sav2_Bag_get - add r1, r6, #0x0 - add r2, r7, #0x0 - mov r3, #0xb - bl Bag_HasItem - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_020458E4 -FUN_020458E4: ; 0x020458E4 - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl FUN_02054CB0 - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02045918 -FUN_02045918: ; 0x02045918 - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x5 - mov r2, #0xb - bl GetItemAttr - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02045950 -FUN_02045950: ; 0x02045950 - mov r0, #0x0 - bx lr - - thumb_func_start FUN_02045954 -FUN_02045954: ; 0x02045954 - mov r0, #0x0 - bx lr diff --git a/arm9/asm/scrcmd_23.s b/arm9/asm/scrcmd_23.s deleted file mode 100644 index 3d38b510..00000000 --- a/arm9/asm/scrcmd_23.s +++ /dev/null @@ -1,483 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02045958 -FUN_02045958: ; 0x02045958 - push {r4-r6, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r1, [r1, #0x0] - ldr r5, [r1, #0xc] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl FUN_02026CC4 - add r1, r6, #0x0 - bl FUN_02025D6C - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_020459AC -FUN_020459AC: ; 0x020459AC - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_020459E8 -FUN_020459E8: ; 0x020459E8 - push {r4-r6, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r1, [r1, #0x0] - ldr r5, [r1, #0xc] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl FUN_02026CC4 - add r1, r6, #0x0 - bl FUN_02025D94 - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02045A3C -FUN_02045A3C: ; 0x02045A3C - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02045A78 -FUN_02045A78: ; 0x02045A78 - push {r4-r6, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r1, [r1, #0x0] - ldr r5, [r1, #0xc] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl FUN_02026CC4 - add r1, r6, #0x0 - bl FUN_02026298 - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02045ACC -FUN_02045ACC: ; 0x02045ACC - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02045B08 -FUN_02045B08: ; 0x02045B08 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02045B44 -FUN_02045B44: ; 0x02045B44 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02045B80 -FUN_02045B80: ; 0x02045B80 - push {r3-r5, lr} - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r1, [r1, #0x0] - ldr r4, [r1, #0xc] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r0, r4, #0x0 - bl FUN_02026CC4 - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02045BC8 -FUN_02045BC8: ; 0x02045BC8 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02045C04 -FUN_02045C04: ; 0x02045C04 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02045C40 -FUN_02045C40: ; 0x02045C40 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02045C7C -FUN_02045C7C: ; 0x02045C7C - push {r3-r7, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r1, [r1, #0x0] - ldr r5, [r1, #0xc] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl FUN_02026CC4 - add r1, r6, #0x0 - add r2, r7, #0x0 - bl FUN_020260C4 - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02045CD4 -FUN_02045CD4: ; 0x02045CD4 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02045D10 -FUN_02045D10: ; 0x02045D10 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02045D4C -FUN_02045D4C: ; 0x02045D4C - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - mov r0, #0x0 - pop {r4, pc} - .balign 4 diff --git a/arm9/asm/scrcmd_25.s b/arm9/asm/scrcmd_25.s deleted file mode 100644 index ab6d4787..00000000 --- a/arm9/asm/scrcmd_25.s +++ /dev/null @@ -1,30 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02046010 -FUN_02046010: ; 0x02046010 - push {r3, lr} - bl ErrorHandling - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0204601C -FUN_0204601C: ; 0x0204601C - push {r3, lr} - bl ErrorHandling - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02046028 -FUN_02046028: ; 0x02046028 - mov r0, #0x0 - bx lr - - thumb_func_start FUN_0204602C -FUN_0204602C: ; 0x0204602C - mov r0, #0x0 - bx lr diff --git a/arm9/asm/scrcmd_3.s b/arm9/asm/scrcmd_3.s index 28cbd7ac..28df2444 100644 --- a/arm9/asm/scrcmd_3.s +++ b/arm9/asm/scrcmd_3.s @@ -206,7 +206,7 @@ FUN_02040028: ; 0x02040028 ldr r0, [r0, #0x0] ldr r0, [r0, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034824 + bl MapHeader_GetMapSec add r5, #0x80 ldr r3, [r5, #0x0] add r2, r0, #0x0 diff --git a/arm9/asm/scrcmd_4.s b/arm9/asm/scrcmd_4.s deleted file mode 100644 index 3bad9d50..00000000 --- a/arm9/asm/scrcmd_4.s +++ /dev/null @@ -1,1313 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gGameLanguage - - .text - - thumb_func_start FUN_020406CC -FUN_020406CC: ; 0x020406CC - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r6, [r0, #0x0] - mov r1, #0xf - add r0, r6, #0x0 - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r4, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r5, [r1, #0x0] - add r0, r6, #0x0 - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - add r2, r0, #0x0 - ldr r0, [r4, #0x0] - add r1, r5, #0x0 - bl BufferPlayersName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040700 -FUN_02040700: ; 0x02040700 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0xf - add r0, r4, #0x0 - bl FUN_02039438 - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r1, [r2, #0x0] - ldr r0, [r0, #0x0] - ldr r2, [r4, #0xc] - bl BufferRivalsName - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02040724 -FUN_02040724: ; 0x02040724 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0xf - add r0, r4, #0x0 - bl FUN_02039438 - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r1, [r2, #0x0] - ldr r0, [r0, #0x0] - ldr r2, [r4, #0xc] - bl BufferFriendsName - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02040748 -FUN_02040748: ; 0x02040748 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r6, [r0, #0x0] - mov r1, #0xf - add r0, r6, #0x0 - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r7, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r5, r0, #0x0 - ldr r0, [r6, #0xc] - bl SavArray_PlayerParty_get - add r1, r5, #0x0 - bl GetPartyMonByIndex - add r2, r0, #0x0 - ldr r0, [r7, #0x0] - add r1, r4, #0x0 - bl BufferBoxMonSpeciesName - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02040790 -FUN_02040790: ; 0x02040790 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferItemName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_020407C8 -FUN_020407C8: ; 0x020407C8 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferPocketName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040800 -FUN_02040800: ; 0x02040800 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - bl TMHMGetMove - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferMoveName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_0204083C -FUN_0204083C: ; 0x0204083C - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferMoveName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040874 -FUN_02040874: ; 0x02040874 - push {r4-r6, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r5, r0, #0x0 - bl FUN_02054C14 - add r3, r0, #0x0 - mov r0, #0x1 - str r0, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - add r2, r5, #0x0 - bl BufferIntegerAsString - mov r0, #0x0 - add sp, #0x8 - pop {r4-r6, pc} - - thumb_func_start FUN_020408BC -FUN_020408BC: ; 0x020408BC - push {r4-r7, lr} - sub sp, #0xc - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r7, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r6, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - str r0, [sp, #0x8] - ldr r1, [r5, #0x8] - add r2, r1, #0x1 - str r2, [r5, #0x8] - ldrb r4, [r1, #0x0] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r3, [r2, #0x0] - cmp r4, #0x0 - bne _02040904 - bl FUN_02054C14 - lsl r0, r0, #0x18 - lsr r3, r0, #0x18 -_02040904: - str r4, [sp, #0x0] - mov r0, #0x1 - str r0, [sp, #0x4] - ldr r0, [r7, #0x0] - ldr r2, [sp, #0x8] - add r1, r6, #0x0 - bl BufferIntegerAsString - mov r0, #0x0 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_0204091C -FUN_0204091C: ; 0x0204091C - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r6, [r0, #0x0] - mov r1, #0xf - add r0, r6, #0x0 - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r7, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r5, r0, #0x0 - ldr r0, [r6, #0xc] - bl SavArray_PlayerParty_get - add r1, r5, #0x0 - bl GetPartyMonByIndex - add r2, r0, #0x0 - ldr r0, [r7, #0x0] - add r1, r4, #0x0 - bl BufferBoxMonNickname - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02040964 -FUN_02040964: ; 0x02040964 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - ldr r0, [r4, #0xc] - bl GetStoragePCPointer - str r0, [sp, #0x0] - add r0, r4, #0x0 - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r5, r0, #0x0 - mov r1, #0x1e - bl _s32_div_f - add r7, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x1e - bl _s32_div_f - add r2, r1, #0x0 - ldr r0, [sp, #0x0] - add r1, r7, #0x0 - bl PCStorage_GetMonByIndexPair - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferBoxMonNickname - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_020409C0 -FUN_020409C0: ; 0x020409C0 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferPoketchAppName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_020409F8 -FUN_020409F8: ; 0x020409F8 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferTrainerClassName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040A30 -FUN_02040A30: ; 0x02040A30 - push {r3-r7, lr} - add r7, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - add r0, r5, #0x0 - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r7, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r7, #0x8] - add r0, r4, #0x0 - ldrb r5, [r1, #0x0] - bl PlayerProfile_GetTrainerGender - add r7, r0, #0x0 - add r0, r4, #0x0 - bl PlayerProfile_GetAvatar - add r1, r0, #0x0 - add r0, r7, #0x0 - mov r2, #0x2 - bl FUN_020536D0 - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r5, #0x0 - bl BufferTrainerClassNameWithArticle - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02040A7C -FUN_02040A7C: ; 0x02040A7C - push {r4-r7, lr} - sub sp, #0xc - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r7, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - ldr r1, [r5, #0x8] - str r0, [sp, #0x8] - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r5, [r1, #0x0] - add r0, r6, #0x0 - mov r1, #0x4 - bl FUN_02040AE4 - add r6, r0, #0x0 - str r5, [sp, #0x0] - mov r0, #0x2 - str r0, [sp, #0x4] - ldr r0, [r7, #0x0] - ldr r3, [sp, #0x8] - add r1, r4, #0x0 - add r2, r6, #0x0 - bl BufferString - add r0, r6, #0x0 - bl String_dtor - mov r0, #0x0 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_02040AE4 -FUN_02040AE4: ; 0x02040AE4 - push {r3-r5, lr} - ldr r2, _02040B08 ; =0x0000016A - add r4, r0, #0x0 - add r3, r1, #0x0 - mov r0, #0x1 - mov r1, #0x1a - bl NewMsgDataFromNarc - add r5, r0, #0x0 - add r1, r4, #0x0 - bl NewString_ReadMsgData - add r4, r0, #0x0 - add r0, r5, #0x0 - bl DestroyMsgData - add r0, r4, #0x0 - pop {r3-r5, pc} - .balign 4 -_02040B08: .word 0x0000016A - - thumb_func_start FUN_02040B0C -FUN_02040B0C: ; 0x02040B0C - push {r4-r6, lr} - sub sp, #0x8 - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r4, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r4, #0x8] - add r4, #0x80 - ldr r0, [r4, #0x0] - ldrb r5, [r1, #0x0] - ldr r0, [r0, #0xc] - bl SavArray_Flags_get - bl FUN_0205F388 - mov r1, #0x4 - bl FUN_02040AE4 - add r4, r0, #0x0 - mov r0, #0x1 - str r0, [sp, #0x0] - mov r0, #0x2 - str r0, [sp, #0x4] - ldr r0, [r6, #0x0] - add r1, r5, #0x0 - add r2, r4, #0x0 - mov r3, #0x0 - bl BufferString - add r0, r4, #0x0 - bl String_dtor - mov r0, #0x0 - add sp, #0x8 - pop {r4-r6, pc} - - thumb_func_start FUN_02040B5C -FUN_02040B5C: ; 0x02040B5C - push {r4-r6, lr} - sub sp, #0x8 - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r4, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r4, #0x8] - add r4, #0x80 - ldr r0, [r4, #0x0] - ldrb r5, [r1, #0x0] - ldr r0, [r0, #0xc] - bl SavArray_Flags_get - bl FUN_0205F398 - mov r1, #0x4 - bl FUN_02040AE4 - add r4, r0, #0x0 - mov r0, #0x1 - str r0, [sp, #0x0] - mov r0, #0x2 - str r0, [sp, #0x4] - ldr r0, [r6, #0x0] - add r1, r5, #0x0 - add r2, r4, #0x0 - mov r3, #0x0 - bl BufferString - add r0, r4, #0x0 - bl String_dtor - mov r0, #0x0 - add sp, #0x8 - pop {r4-r6, pc} - - thumb_func_start FUN_02040BAC -FUN_02040BAC: ; 0x02040BAC - push {r4-r6, lr} - sub sp, #0x8 - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r4, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r4, #0x8] - add r4, #0x80 - ldr r0, [r4, #0x0] - ldrb r5, [r1, #0x0] - ldr r0, [r0, #0xc] - bl SavArray_Flags_get - bl FUN_0205F3C0 - mov r1, #0x4 - bl FUN_02040AE4 - add r4, r0, #0x0 - mov r0, #0x1 - str r0, [sp, #0x0] - mov r0, #0x2 - str r0, [sp, #0x4] - ldr r0, [r6, #0x0] - add r1, r5, #0x0 - add r2, r4, #0x0 - mov r3, #0x0 - bl BufferString - add r0, r4, #0x0 - bl String_dtor - mov r0, #0x0 - add sp, #0x8 - pop {r4-r6, pc} - - thumb_func_start FUN_02040BFC -FUN_02040BFC: ; 0x02040BFC - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferDecorationName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040C34 -FUN_02040C34: ; 0x02040C34 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferUndergroundTrapName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040C6C -FUN_02040C6C: ; 0x02040C6C - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferUndergroundItemName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040CA4 -FUN_02040CA4: ; 0x02040CA4 - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - mov r0, #0x16 - mov r1, #0x4 - bl String_ctor - add r4, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r7, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r6, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - mov r1, #0x4 - add r2, r4, #0x0 - bl FUN_02064E60 - mov r0, #0x1 - str r0, [sp, #0x0] - mov r0, #0x2 - str r0, [sp, #0x4] - ldr r0, [r7, #0x0] - add r1, r6, #0x0 - add r2, r4, #0x0 - mov r3, #0x0 - bl BufferString - add r0, r4, #0x0 - bl String_dtor - mov r0, #0x0 - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02040D04 -FUN_02040D04: ; 0x02040D04 - push {r3-r7, lr} - sub sp, #0x8 - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r4, #0x8] - add r7, r0, #0x0 - add r0, r1, #0x1 - str r0, [r4, #0x8] - add r0, r4, #0x0 - ldrb r6, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - sub r5, #0x95 - add r4, r0, #0x0 - lsl r0, r5, #0x10 - lsr r0, r0, #0x10 - mov r1, #0x20 - bl GetNutName - add r5, r0, #0x0 - cmp r4, #0x2 - bhs _02040D5A - mov r0, #0x1 - b _02040D5C -_02040D5A: - mov r0, #0x0 -_02040D5C: - str r0, [sp, #0x0] - mov r0, #0x2 - str r0, [sp, #0x4] - ldr r0, [r7, #0x0] - add r1, r6, #0x0 - add r2, r5, #0x0 - mov r3, #0x0 - bl BufferString - add r0, r5, #0x0 - bl String_dtor - mov r0, #0x0 - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02040D7C -FUN_02040D7C: ; 0x02040D7C - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferNatureName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040DB4 -FUN_02040DB4: ; 0x02040DB4 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferFashionName - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040DEC -FUN_02040DEC: ; 0x02040DEC - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r7, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - mov r0, #0xb - ldrb r6, [r1, #0x0] - add r1, r0, #0x0 - bl String_ctor - add r5, #0x80 - add r4, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r0, [r0, #0xc] - bl FUN_02024EB4 - bl FUN_02024F0C - add r1, r0, #0x0 - add r0, r4, #0x0 - bl CopyU16ArrayToString - ldr r0, _02040E48 ; =gGameLanguage - mov r3, #0x0 - ldrb r0, [r0, #0x0] - str r3, [sp, #0x0] - add r1, r6, #0x0 - str r0, [sp, #0x4] - ldr r0, [r7, #0x0] - add r2, r4, #0x0 - bl BufferString - add r0, r4, #0x0 - bl String_dtor - mov r0, #0x0 - add sp, #0x8 - pop {r3-r7, pc} - nop -_02040E48: .word gGameLanguage - - thumb_func_start FUN_02040E4C -FUN_02040E4C: ; 0x02040E4C - push {r3-r7, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r6, [r0, #0x0] - mov r1, #0xf - add r0, r6, #0x0 - bl FUN_02039438 - ldr r1, [r4, #0x8] - add r7, r0, #0x0 - add r0, r1, #0x1 - str r0, [r4, #0x8] - add r0, r4, #0x0 - ldrb r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - str r0, [sp, #0x0] - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r4, r0, #0x0 - ldr r0, [r6, #0xc] - bl SavArray_PlayerParty_get - ldr r1, [sp, #0x0] - bl GetPartyMonByIndex - add r4, #0x36 - add r1, r4, #0x0 - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x10 - lsr r2, r0, #0x10 - ldr r0, [r7, #0x0] - add r1, r5, #0x0 - bl BufferMoveName - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02040EB4 -FUN_02040EB4: ; 0x02040EB4 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - mov r1, #0x3 - bl FUN_0207FC5C - lsl r0, r0, #0x10 - lsr r2, r0, #0x10 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferRibbonNameOrDesc - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040EF8 -FUN_02040EF8: ; 0x02040EF8 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - sub r2, r2, #0x1 - lsl r2, r2, #0x10 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - lsr r2, r2, #0x10 - bl BufferSealName - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02040F34 -FUN_02040F34: ; 0x02040F34 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferItemNameWithIndefArticle - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040F6C -FUN_02040F6C: ; 0x02040F6C - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferItemNamePlural - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040FA4 -FUN_02040FA4: ; 0x02040FA4 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferDecorationNameWithArticle - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02040FDC -FUN_02040FDC: ; 0x02040FDC - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferUndergroundTrapNameWithArticle - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02041014 -FUN_02041014: ; 0x02041014 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferUndergroundItemNameWithArticle - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_0204104C -FUN_0204104C: ; 0x0204104C - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - ldr r0, [r5, #0x8] - add r1, r4, #0x0 - add r0, r0, #0x1 - str r0, [r5, #0x8] - ldr r0, [r6, #0x0] - add r2, r7, #0x0 - bl BufferSpeciesNameWithArticle - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02041094 -FUN_02041094: ; 0x02041094 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r5, #0x80 - ldr r0, [r5, #0x0] - ldrb r4, [r1, #0x0] - ldr r0, [r0, #0xc] - bl SavArray_Flags_get - bl FUN_0205F3C0 - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferSpeciesNameWithArticle - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_020410C8 -FUN_020410C8: ; 0x020410C8 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferFashionNameWithArticle - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02041100 -FUN_02041100: ; 0x02041100 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - bl BufferTrainerClassNameWithArticle - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02041138 -FUN_02041138: ; 0x02041138 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - sub r2, r2, #0x1 - lsl r2, r2, #0x10 - ldr r0, [r6, #0x0] - add r1, r4, #0x0 - lsr r2, r2, #0x10 - bl BufferSealNamePlural - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02041174 -FUN_02041174: ; 0x02041174 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xf - bl FUN_02039438 - ldr r2, [r4, #0x8] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - ldr r0, [r0, #0x0] - bl ScrStrBufs_UpperFirstChar - mov r0, #0x0 - pop {r4, pc} diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd_asm.s index c5ae760b..3d6645c2 100644 --- a/arm9/asm/scrcmd.s +++ b/arm9/asm/scrcmd_asm.s @@ -1,11 +1,10 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_020F34E0 - .extern sScriptConditionTable .extern UNK_020F34FC .extern UNK_020F3538 .extern gMain + .extern FUN_0203A2F0 .section .bss @@ -15,2852 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_nop -ScrCmd_nop: ; 0x020399A0 - mov r0, #0x0 - bx lr - - thumb_func_start ScrCmd_nop2 -ScrCmd_nop2: ; 0x020399A4 - mov r0, #0x0 - bx lr - - thumb_func_start ScrCmd_end -ScrCmd_end: ; 0x020399A8 - push {r3, lr} - bl StopScript - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start ScrCmd_delay -ScrCmd_delay: ; 0x020399B4 - push {r3-r7, lr} - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r6, [r1, #0x0] - bl ScriptReadHalfword - add r7, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r4, r0, #0x0 - add r0, r6, #0x0 - add r1, r4, #0x0 - bl GetVarPointer - strh r7, [r0, #0x0] - ldr r1, _020399E4 ; =RunPauseTimer - add r0, r5, #0x0 - str r4, [r5, #0x64] - bl SetupNativeScript - mov r0, #0x1 - pop {r3-r7, pc} - .balign 4 -_020399E4: .word RunPauseTimer - - thumb_func_start RunPauseTimer -RunPauseTimer: ; 0x020399E8 - push {r3, lr} - add r1, r0, #0x0 - ldr r1, [r1, #0x64] - add r0, #0x80 - lsl r1, r1, #0x10 - ldr r0, [r0, #0x0] - lsr r1, r1, #0x10 - bl GetVarPointer - ldrh r1, [r0, #0x0] - sub r1, r1, #0x1 - strh r1, [r0, #0x0] - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - bne _02039A0A - mov r0, #0x1 - pop {r3, pc} -_02039A0A: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02039A10 -FUN_02039A10: ; 0x02039A10 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start ScrCmd_loadbyte -ScrCmd_loadbyte: ; 0x02039A28 - ldr r1, [r0, #0x8] - add r2, r1, #0x1 - str r2, [r0, #0x8] - ldrb r3, [r1, #0x0] - add r1, r2, #0x1 - str r1, [r0, #0x8] - ldrb r2, [r2, #0x0] - lsl r1, r3, #0x2 - add r0, r0, r1 - str r2, [r0, #0x64] - mov r0, #0x0 - bx lr - - thumb_func_start ScrCmd_loadword -ScrCmd_loadword: ; 0x02039A40 - push {r3-r5, lr} - add r4, r0, #0x0 - ldr r2, [r4, #0x8] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r5, [r2, #0x0] - bl ScriptReadWord - lsl r1, r5, #0x2 - add r1, r4, r1 - str r0, [r1, #0x64] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_loadbytefromaddr -ScrCmd_loadbytefromaddr: ; 0x02039A5C - push {r3-r5, lr} - add r5, r0, #0x0 - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r4, [r2, #0x0] - bl ScriptReadWord - ldrb r1, [r0, #0x0] - lsl r0, r4, #0x2 - add r0, r5, r0 - str r1, [r0, #0x64] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_writebytetoaddr -ScrCmd_writebytetoaddr: ; 0x02039A78 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadWord - ldr r2, [r4, #0x8] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - strb r1, [r0, #0x0] - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start ScrCmd_setptrbyte -ScrCmd_setptrbyte: ; 0x02039A90 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadWord - ldr r2, [r4, #0x8] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - lsl r1, r1, #0x2 - add r1, r4, r1 - ldr r1, [r1, #0x64] - strb r1, [r0, #0x0] - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start ScrCmd_copylocal -ScrCmd_copylocal: ; 0x02039AAC - ldr r1, [r0, #0x8] - add r2, r1, #0x1 - str r2, [r0, #0x8] - ldrb r3, [r1, #0x0] - add r1, r2, #0x1 - str r1, [r0, #0x8] - ldrb r1, [r2, #0x0] - lsl r1, r1, #0x2 - add r1, r0, r1 - ldr r2, [r1, #0x64] - lsl r1, r3, #0x2 - add r0, r0, r1 - str r2, [r0, #0x64] - mov r0, #0x0 - bx lr - .balign 4 - - thumb_func_start ScrCmd_copybyte -ScrCmd_copybyte: ; 0x02039ACC - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadWord - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadWord - ldrb r0, [r0, #0x0] - strb r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start compare_012 -compare_012: ; 0x02039AE4 - cmp r0, r1 - bhs _02039AEC - mov r0, #0x0 - bx lr -_02039AEC: - cmp r0, r1 - bne _02039AF4 - mov r0, #0x1 - bx lr -_02039AF4: - mov r0, #0x2 - bx lr - - thumb_func_start ScrCmd_compare_local_to_local -ScrCmd_compare_local_to_local: ; 0x02039AF8 - push {r4, lr} - add r4, r0, #0x0 - ldr r0, [r4, #0x8] - add r1, r0, #0x1 - str r1, [r4, #0x8] - ldrb r0, [r0, #0x0] - add r2, r1, #0x1 - lsl r0, r0, #0x2 - add r0, r4, r0 - ldr r0, [r0, #0x64] - str r2, [r4, #0x8] - ldrb r1, [r1, #0x0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - lsl r1, r1, #0x2 - add r1, r4, r1 - ldr r1, [r1, #0x64] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - bl compare_012 - strb r0, [r4, #0x2] - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start ScrCmd_compare_local_to_value -ScrCmd_compare_local_to_value: ; 0x02039B28 - push {r4, lr} - add r4, r0, #0x0 - ldr r0, [r4, #0x8] - add r1, r0, #0x1 - str r1, [r4, #0x8] - ldrb r0, [r0, #0x0] - add r2, r1, #0x1 - lsl r0, r0, #0x2 - add r0, r4, r0 - ldr r0, [r0, #0x64] - str r2, [r4, #0x8] - ldrb r1, [r1, #0x0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl compare_012 - strb r0, [r4, #0x2] - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start ScrCmd_compare_local_to_addr -ScrCmd_compare_local_to_addr: ; 0x02039B50 - push {r3-r5, lr} - add r4, r0, #0x0 - ldr r2, [r4, #0x8] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - lsl r1, r1, #0x2 - add r1, r4, r1 - ldr r1, [r1, #0x64] - lsl r1, r1, #0x18 - lsr r5, r1, #0x18 - bl ScriptReadWord - ldrb r1, [r0, #0x0] - add r0, r5, #0x0 - bl compare_012 - strb r0, [r4, #0x2] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_compare_addr_to_local -ScrCmd_compare_addr_to_local: ; 0x02039B78 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadWord - ldr r2, [r4, #0x8] - ldrb r0, [r0, #0x0] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - lsl r1, r1, #0x2 - add r1, r4, r1 - ldr r1, [r1, #0x64] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - bl compare_012 - strb r0, [r4, #0x2] - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start ScrCmd_compare_addr_to_value -ScrCmd_compare_addr_to_value: ; 0x02039BA0 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadWord - ldr r2, [r4, #0x8] - ldrb r0, [r0, #0x0] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - bl compare_012 - strb r0, [r4, #0x2] - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start ScrCmd_compare_addr_to_addr -ScrCmd_compare_addr_to_addr: ; 0x02039BBC - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadWord - ldrb r4, [r0, #0x0] - add r0, r5, #0x0 - bl ScriptReadWord - ldrb r1, [r0, #0x0] - add r0, r4, #0x0 - bl compare_012 - strb r0, [r5, #0x2] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_compare_var_to_value -ScrCmd_compare_var_to_value: ; 0x02039BDC - push {r3-r5, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - ldrh r5, [r0, #0x0] - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - bl compare_012 - strb r0, [r4, #0x2] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_compare_var_to_var -ScrCmd_compare_var_to_var: ; 0x02039C08 - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r1, r0, #0x0 - ldrh r0, [r4, #0x0] - ldrh r1, [r1, #0x0] - bl compare_012 - strb r0, [r5, #0x2] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02039C40 -FUN_02039C40: ; 0x02039C40 - push {r3-r7, lr} - add r7, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - mov r1, #0x7 - add r0, r5, #0x0 - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0xe - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r7, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - bl CreateScriptContext - str r0, [r6, #0x0] - ldrb r0, [r4, #0x0] - add r0, r0, #0x1 - strb r0, [r4, #0x0] - mov r0, #0x1 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02039C78 -FUN_02039C78: ; 0x02039C78 - push {r3-r7, lr} - str r0, [sp, #0x0] - add r0, #0x80 - ldr r5, [r0, #0x0] - mov r1, #0x5 - add r0, r5, #0x0 - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x7 - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0xe - bl FUN_02039438 - add r7, r0, #0x0 - ldr r0, [sp, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - mov r0, #0x1 - strb r0, [r6, #0x0] - add r0, r5, #0x0 - bl CreateScriptContext - str r0, [r7, #0x0] - ldrb r0, [r4, #0x0] - ldr r1, _02039CC4 ; =FUN_02039CC8 - add r0, r0, #0x1 - strb r0, [r4, #0x0] - ldr r0, [sp, #0x0] - bl SetupNativeScript - mov r0, #0x1 - pop {r3-r7, pc} - .balign 4 -_02039CC4: .word FUN_02039CC8 - - thumb_func_start FUN_02039CC8 -FUN_02039CC8: ; 0x02039CC8 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x5 - bl FUN_02039438 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _02039CDE - mov r0, #0x1 - pop {r3, pc} -_02039CDE: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02039CE4 -FUN_02039CE4: ; 0x02039CE4 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x5 - bl FUN_02039438 - mov r1, #0x0 - strb r1, [r0, #0x0] - add r0, r1, #0x0 - pop {r3, pc} - - thumb_func_start ScrCmd_goto -ScrCmd_goto: ; 0x02039CF8 - ; relative jump - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadWord - add r2, r0, #0x0 - ldr r1, [r4, #0x8] - add r0, r4, #0x0 - add r1, r1, r2 - bl ScriptJump - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start FUN_02039D10 -FUN_02039D10: ; 0x02039D10 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadWord - add r7, r0, #0x0 - ldr r0, [r6, #0x0] - bl FUN_02058448 - cmp r4, r0 - bne _02039D44 - ldr r1, [r5, #0x8] - add r0, r5, #0x0 - add r1, r1, r7 - bl ScriptJump -_02039D44: - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02039D48 -FUN_02039D48: ; 0x02039D48 - push {r4-r6, lr} - add r5, r0, #0x0 - ldr r0, [r5, #0x74] - bl FUN_02046534 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r4, [r1, #0x0] - add r0, r5, #0x0 - bl ScriptReadWord - add r2, r0, #0x0 - cmp r6, r4 - bne _02039D72 - ldr r1, [r5, #0x8] - add r0, r5, #0x0 - add r1, r1, r2 - bl ScriptJump -_02039D72: - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02039D78 -FUN_02039D78: ; 0x02039D78 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x9 - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r4, [r1, #0x0] - add r0, r5, #0x0 - bl ScriptReadWord - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - cmp r0, r4 - bne _02039DA8 - ldr r1, [r5, #0x8] - add r0, r5, #0x0 - add r1, r1, r2 - bl ScriptJump -_02039DA8: - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start ScrCmd_call -ScrCmd_call: ; 0x02039DAC - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadWord - add r2, r0, #0x0 - ldr r1, [r4, #0x8] - add r0, r4, #0x0 - add r1, r1, r2 - bl ScriptCall - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start ScrCmd_return -ScrCmd_return: ; 0x02039DC4 - push {r3, lr} - bl ScriptReturn - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start ScrCmd_goto_if -ScrCmd_goto_if: ; 0x02039DD0 - push {r3-r5, lr} - add r5, r0, #0x0 - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r4, [r2, #0x0] - bl ScriptReadWord - add r1, r0, #0x0 - lsl r0, r4, #0x1 - add r3, r4, r0 - ldr r0, _02039E00 ; =sScriptConditionTable - ldrb r2, [r5, #0x2] - add r0, r0, r3 - ldrb r0, [r2, r0] - cmp r0, #0x1 - bne _02039DFC - ldr r2, [r5, #0x8] - add r0, r5, #0x0 - add r1, r2, r1 - bl ScriptJump -_02039DFC: - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 -_02039E00: .word sScriptConditionTable - - thumb_func_start ScrCmd_call_if -ScrCmd_call_if: ; 0x02039E04 - push {r3-r5, lr} - add r5, r0, #0x0 - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r4, [r2, #0x0] - bl ScriptReadWord - add r1, r0, #0x0 - lsl r0, r4, #0x1 - add r3, r4, r0 - ldr r0, _02039E34 ; =sScriptConditionTable - ldrb r2, [r5, #0x2] - add r0, r0, r3 - ldrb r0, [r2, r0] - cmp r0, #0x1 - bne _02039E30 - ldr r2, [r5, #0x8] - add r0, r5, #0x0 - add r1, r2, r1 - bl ScriptCall -_02039E30: - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 -_02039E34: .word sScriptConditionTable - - thumb_func_start ScrCmd_setflag -ScrCmd_setflag: ; 0x02039E38 - push {r4, lr} - add r1, r0, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - bl FlagSet - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start ScrCmd_clearflag -ScrCmd_clearflag: ; 0x02039E50 - push {r4, lr} - add r1, r0, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - bl FlagClear - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start ScrCmd_checkflag -ScrCmd_checkflag: ; 0x02039E68 - push {r3-r5, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - bl FlagCheck - strb r0, [r4, #0x2] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02039E84 -FUN_02039E84: ; 0x02039E84 - push {r4-r6, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - ldrh r1, [r6, #0x0] - add r0, r5, #0x0 - bl FlagCheck - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02039EC0 -FUN_02039EC0: ; 0x02039EC0 - push {r3-r5, lr} - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r1, r0, #0x0 - ldrh r1, [r1, #0x0] - add r0, r4, #0x0 - bl FlagSet - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_settrainerflag -ScrCmd_settrainerflag: ; 0x02039EE8 - push {r3-r5, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r5, #0x0 - bl TrainerFlagSet - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_cleartrainerflag -ScrCmd_cleartrainerflag: ; 0x02039F0C - push {r3-r5, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r5, #0x0 - bl TrainerFlagClear - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_checktrainerflag -ScrCmd_checktrainerflag: ; 0x02039F30 - push {r3-r5, lr} - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r4, #0x0 - bl TrainerFlagCheck - strb r0, [r5, #0x2] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_addvar -ScrCmd_addvar: ; 0x02039F58 - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - ldrh r1, [r4, #0x0] - add r0, r1, r0 - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_subvar -ScrCmd_subvar: ; 0x02039F88 - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - ldrh r1, [r4, #0x0] - sub r0, r1, r0 - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_setvar -ScrCmd_setvar: ; 0x02039FB8 - push {r3-r5, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_copyvar -ScrCmd_copyvar: ; 0x02039FDC - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - ldrh r0, [r0, #0x0] - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_setorcopyvar -ScrCmd_setorcopyvar: ; 0x0203A00C - push {r3-r5, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_message -ScrCmd_message: ; 0x0203A038 - push {r3, lr} - ldr r2, [r0, #0x8] - add r1, r2, #0x1 - str r1, [r0, #0x8] - ldrb r2, [r2, #0x0] - ldr r1, [r0, #0x78] - bl MOD05_ShowMessageInField - mov r0, #0x0 - pop {r3, pc} - - thumb_func_start ScrCmd_message_from -ScrCmd_message_from: ; 0x0203A04C - ; message_from bank, id - push {r4-r6, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - mov r0, #0x1 - mov r1, #0x1a - add r2, r5, #0x0 - mov r3, #0x20 - bl NewMsgDataFromNarc - add r5, r0, #0x0 - add r0, r4, #0x0 - add r1, r5, #0x0 - add r2, r6, #0x0 - bl MOD05_ShowMessageInField - add r0, r5, #0x0 - bl DestroyMsgData - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_0203A098 -FUN_0203A098: ; 0x0203A098 - push {r3-r6, lr} - sub sp, #0x4 - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - mov r0, #0x1 - mov r1, #0x1a - add r2, r5, #0x0 - mov r3, #0x20 - bl NewMsgDataFromNarc - add r5, r0, #0x0 - mov r0, #0x0 - str r0, [sp, #0x0] - add r0, r4, #0x0 - add r1, r5, #0x0 - add r2, r6, #0x0 - mov r3, #0x1 - bl MOD05_021E2BD0 - add r0, r5, #0x0 - bl DestroyMsgData - ldr r1, _0203A0F8 ; =FUN_0203A2F0 - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x4 - pop {r3-r6, pc} - nop -_0203A0F8: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A0FC -FUN_0203A0FC: ; 0x0203A0FC - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - bl ScriptReadHalfword - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r7, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - str r0, [sp, #0x0] - mov r0, #0xff - str r0, [sp, #0x4] - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - add r3, r7, #0x0 - bl MOD05_021E2C58 - mov r0, #0x0 - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_0203A13C -FUN_0203A13C: ; 0x0203A13C - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - bl ScriptReadHalfword - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r7, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - str r0, [sp, #0x0] - mov r0, #0x1 - str r0, [sp, #0x4] - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - add r3, r7, #0x0 - bl MOD05_021E2C58 - ldr r1, _0203A184 ; =FUN_0203A2F0 - add r0, r5, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x8 - pop {r3-r7, pc} - nop -_0203A184: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A188 -FUN_0203A188: ; 0x0203A188 - push {r4-r6, lr} - sub sp, #0x8 - add r5, r0, #0x0 - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - add r1, r5, #0x0 - add r1, #0x80 - ldr r1, [r1, #0x0] - ldrb r3, [r2, #0x0] - add r1, #0xa8 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - bne _0203A1AA - add sp, #0x8 - mov r0, #0x0 - pop {r4-r6, pc} -_0203A1AA: - lsl r1, r3, #0x4 - add r1, r3, r1 - add r2, #0x90 - lsl r1, r1, #0x4 - add r4, r2, r1 - ldrh r1, [r2, r1] - ldr r2, _0203A204 ; =0x0000FFFF - cmp r1, r2 - bne _0203A1E2 - ldr r2, _0203A208 ; =0x0000022B - mov r0, #0x1 - mov r1, #0x1a - mov r3, #0x20 - bl NewMsgDataFromNarc - add r6, r0, #0x0 - mov r0, #0x0 - str r0, [sp, #0x0] - ldrh r2, [r4, #0x2] - add r0, r5, #0x0 - add r1, r6, #0x0 - mov r3, #0x1 - bl MOD05_021E2BD0 - add r0, r6, #0x0 - bl DestroyMsgData - b _0203A1F4 -_0203A1E2: - mov r2, #0x6 - ldrsh r2, [r4, r2] - str r2, [sp, #0x0] - mov r2, #0x1 - str r2, [sp, #0x4] - ldrh r2, [r4, #0x2] - ldrh r3, [r4, #0x4] - bl MOD05_021E2C58 -_0203A1F4: - ldr r1, _0203A20C ; =FUN_0203A2F0 - add r0, r5, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x8 - pop {r4-r6, pc} - nop -_0203A204: .word 0x0000FFFF -_0203A208: .word 0x0000022B -_0203A20C: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A210 -FUN_0203A210: ; 0x0203A210 - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r2, [r5, #0x8] - ldr r6, [r1, #0x0] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r4, [r2, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - ldr r1, [r5, #0x8] - add r2, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r3, [r1, #0x0] - mov r1, #0x0 - add r0, sp, #0x4 - strb r1, [r0, #0x0] - add r0, sp, #0x4 - str r0, [sp, #0x0] - ldr r0, [r6, #0xc] - add r1, r7, #0x0 - bl MOD06_02244210 - add r6, r0, #0x0 - add r2, sp, #0x4 - ldrb r2, [r2, #0x0] - add r0, r5, #0x0 - add r1, r6, #0x0 - add r2, r4, r2 - lsl r2, r2, #0x18 - lsr r2, r2, #0x18 - mov r3, #0x1 - bl MOD05_021E2CBC - add r0, r6, #0x0 - bl ScrStrBufs_delete - ldr r1, _0203A284 ; =FUN_0203A2F0 - add r0, r5, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x8 - pop {r3-r7, pc} - nop -_0203A284: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A288 -FUN_0203A288: ; 0x0203A288 - push {r3-r5, lr} - sub sp, #0x8 - add r5, r0, #0x0 - bl ScriptReadHalfword - add r4, r0, #0x0 - add r0, sp, #0x4 - add r1, r5, #0x0 - bl MOD05_021E2BB8 - mov r1, #0x3 - add r0, sp, #0x4 - strb r1, [r0, #0x2] - add r0, sp, #0x4 - str r0, [sp, #0x0] - ldr r1, [r5, #0x78] - add r0, r5, #0x0 - add r2, r4, #0x0 - mov r3, #0x0 - bl MOD05_021E2BD0 - ldr r1, _0203A2C0 ; =FUN_0203A2F0 - add r0, r5, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x8 - pop {r3-r5, pc} - .balign 4 -_0203A2C0: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A2C4 -FUN_0203A2C4: ; 0x0203A2C4 - push {r3-r4, lr} - sub sp, #0x4 - add r4, r0, #0x0 - ldr r2, [r4, #0x8] - mov r3, #0x1 - add r1, r2, #0x1 - str r1, [r4, #0x8] - mov r1, #0x0 - str r1, [sp, #0x0] - ldrb r2, [r2, #0x0] - ldr r1, [r4, #0x78] - bl MOD05_021E2BD0 - ldr r1, _0203A2EC ; =FUN_0203A2F0 - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x4 - pop {r3-r4, pc} - .balign 4 -_0203A2EC: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A2F0 -FUN_0203A2F0: ; 0x0203A2F0 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x3 - bl FUN_02039438 - ldrb r0, [r0, #0x0] - bl FUN_020546C8 - pop {r3, pc} - - thumb_func_start FUN_0203A304 -FUN_0203A304: ; 0x0203A304 - push {r3-r4, lr} - sub sp, #0x4 - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r2, r0, #0x0 - mov r0, #0x0 - str r0, [sp, #0x0] - lsl r2, r2, #0x18 - ldr r1, [r4, #0x78] - add r0, r4, #0x0 - lsr r2, r2, #0x18 - mov r3, #0x1 - bl MOD05_021E2BD0 - ldr r1, _0203A33C ; =FUN_0203A2F0 - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x4 - pop {r3-r4, pc} - .balign 4 -_0203A33C: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A340 -FUN_0203A340: ; 0x0203A340 - push {r3-r5, lr} - sub sp, #0x8 - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r4, r0, #0x0 - add r0, sp, #0x4 - add r1, r5, #0x0 - bl MOD05_021E2BB8 - lsl r2, r4, #0x18 - mov r3, #0x1 - add r0, sp, #0x4 - strb r3, [r0, #0x1] - add r0, sp, #0x4 - str r0, [sp, #0x0] - ldr r1, [r5, #0x78] - add r0, r5, #0x0 - lsr r2, r2, #0x18 - bl MOD05_021E2BD0 - ldr r1, _0203A384 ; =FUN_0203A2F0 - add r0, r5, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x8 - pop {r3-r5, pc} - .balign 4 -_0203A384: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A388 -FUN_0203A388: ; 0x0203A388 - push {r3-r4, lr} - sub sp, #0x4 - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r2, r0, #0x0 - mov r3, #0x0 - str r3, [sp, #0x0] - lsl r2, r2, #0x18 - ldr r1, [r4, #0x78] - add r0, r4, #0x0 - lsr r2, r2, #0x18 - bl MOD05_021E2BD0 - ldr r1, _0203A3C0 ; =FUN_0203A2F0 - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x4 - pop {r3-r4, pc} - nop -_0203A3C0: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A3C4 -FUN_0203A3C4: ; 0x0203A3C4 - push {r3-r4, lr} - sub sp, #0x4 - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - ldr r0, [r0, #0x0] - bl FUN_02058488 - lsl r0, r0, #0x18 - lsr r2, r0, #0x18 - mov r0, #0x0 - str r0, [sp, #0x0] - ldr r1, [r4, #0x78] - add r0, r4, #0x0 - mov r3, #0x1 - bl MOD05_021E2BD0 - ldr r1, _0203A3FC ; =FUN_0203A2F0 - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x4 - pop {r3-r4, pc} - nop -_0203A3FC: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A400 -FUN_0203A400: ; 0x0203A400 - push {r3-r5, lr} - sub sp, #0x8 - add r5, r0, #0x0 - ldr r1, [r5, #0x8] - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r4, [r1, #0x0] - bl FUN_02030F40 - cmp r0, #0x0 - bne _0203A428 - mov r0, #0x0 - str r0, [sp, #0x0] - ldr r1, [r5, #0x78] - add r0, r5, #0x0 - add r2, r4, #0x0 - mov r3, #0x1 - bl MOD05_021E2BD0 - b _0203A448 -_0203A428: - add r0, sp, #0x4 - add r1, r5, #0x0 - bl MOD05_021E2BB8 - mov r1, #0x1 - add r0, sp, #0x4 - strb r1, [r0, #0x0] - strb r1, [r0, #0x1] - add r0, sp, #0x4 - str r0, [sp, #0x0] - ldr r1, [r5, #0x78] - add r0, r5, #0x0 - add r2, r4, #0x0 - mov r3, #0x0 - bl MOD05_021E2BD0 -_0203A448: - ldr r1, _0203A458 ; =FUN_0203A2F0 - add r0, r5, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x8 - pop {r3-r5, pc} - nop -_0203A458: .word FUN_0203A2F0 - - thumb_func_start FUN_0203A45C -FUN_0203A45C: ; 0x0203A45C - push {r3, lr} - ldr r1, _0203A468 ; =FUN_0203A46C - bl SetupNativeScript - mov r0, #0x1 - pop {r3, pc} - .balign 4 -_0203A468: .word FUN_0203A46C - - thumb_func_start FUN_0203A46C -FUN_0203A46C: ; 0x0203A46C - ldr r0, _0203A480 ; =gMain - ldr r1, [r0, #0x48] - mov r0, #0x3 - tst r0, r1 - beq _0203A47A - mov r0, #0x1 - bx lr -_0203A47A: - mov r0, #0x0 - bx lr - nop -_0203A480: .word gMain - - thumb_func_start FUN_0203A484 -FUN_0203A484: ; 0x0203A484 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - str r0, [r4, #0x64] - ldr r1, _0203A4A8 ; =FUN_0203A4AC - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - pop {r4, pc} - nop -_0203A4A8: .word FUN_0203A4AC - - thumb_func_start FUN_0203A4AC -FUN_0203A4AC: ; 0x0203A4AC - ldr r1, _0203A4CC ; =gMain - ldr r2, [r1, #0x48] - mov r1, #0x3 - tst r1, r2 - beq _0203A4BA - mov r0, #0x1 - bx lr -_0203A4BA: - ldr r1, [r0, #0x64] - sub r1, r1, #0x1 - str r1, [r0, #0x64] - bne _0203A4C6 - mov r0, #0x1 - bx lr -_0203A4C6: - mov r0, #0x0 - bx lr - nop -_0203A4CC: .word gMain - - thumb_func_start FUN_0203A4D0 -FUN_0203A4D0: ; 0x0203A4D0 - push {r3, lr} - ldr r1, _0203A4DC ; =FUN_0203A4E0 - bl SetupNativeScript - mov r0, #0x1 - pop {r3, pc} - .balign 4 -_0203A4DC: .word FUN_0203A4E0 - - thumb_func_start FUN_0203A4E0 -FUN_0203A4E0: ; 0x0203A4E0 - push {r4, lr} - ldr r1, _0203A55C ; =gMain - ldr r2, [r1, #0x48] - mov r1, #0x3 - add r3, r2, #0x0 - tst r3, r1 - beq _0203A4F2 - mov r0, #0x1 - pop {r4, pc} -_0203A4F2: - mov r3, #0x40 - tst r3, r2 - beq _0203A506 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - ldr r0, [r0, #0x38] - bl FUN_02055304 - b _0203A556 -_0203A506: - mov r3, #0x80 - tst r3, r2 - beq _0203A51A - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x1 - ldr r0, [r0, #0x38] - bl FUN_02055304 - b _0203A556 -_0203A51A: - mov r3, #0x20 - tst r3, r2 - beq _0203A52E - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x2 - ldr r0, [r0, #0x38] - bl FUN_02055304 - b _0203A556 -_0203A52E: - mov r3, #0x10 - add r4, r2, #0x0 - tst r4, r3 - beq _0203A542 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x38] - bl FUN_02055304 - b _0203A556 -_0203A542: - lsl r1, r3, #0x6 - tst r1, r2 - beq _0203A552 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl FUN_02039460 - b _0203A556 -_0203A552: - mov r0, #0x0 - pop {r4, pc} -_0203A556: - mov r0, #0x1 - pop {r4, pc} - nop -_0203A55C: .word gMain - - thumb_func_start FUN_0203A560 -FUN_0203A560: ; 0x0203A560 - push {r3, lr} - ldr r1, _0203A56C ; =FUN_0203A570 - bl SetupNativeScript - mov r0, #0x1 - pop {r3, pc} - .balign 4 -_0203A56C: .word FUN_0203A570 - - thumb_func_start FUN_0203A570 -FUN_0203A570: ; 0x0203A570 - ldr r0, _0203A58C ; =gMain - ldr r1, [r0, #0x48] - mov r0, #0x3 - tst r0, r1 - beq _0203A57E - mov r0, #0x1 - bx lr -_0203A57E: - mov r0, #0xf0 - tst r0, r1 - beq _0203A588 - mov r0, #0x1 - bx lr -_0203A588: - mov r0, #0x0 - bx lr - .balign 4 -_0203A58C: .word gMain - - thumb_func_start FUN_0203A590 -FUN_0203A590: ; 0x0203A590 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0x6 - add r0, r4, #0x0 - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x1 - bl FUN_02039438 - add r1, r0, #0x0 - ldr r0, [r4, #0x8] - mov r2, #0x3 - bl FUN_020545B8 - add r0, r4, #0x0 - mov r1, #0x1 - bl FUN_02039438 - add r5, #0x80 - add r4, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetOptionsAddr - add r1, r0, #0x0 - add r0, r4, #0x0 - bl FUN_02054608 - mov r0, #0x1 - strb r0, [r6, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_0203A5D8 -FUN_0203A5D8: ; 0x0203A5D8 - push {r3-r5, lr} - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0x1 - add r0, r4, #0x0 - bl FUN_02039438 - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x6 - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x0 - bl FUN_0200D0E0 - add r0, r5, #0x0 - bl FUN_02019178 - mov r0, #0x0 - strb r0, [r4, #0x0] - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_0203A608 -FUN_0203A608: ; 0x0203A608 - push {r3-r5, lr} - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0x1 - add r0, r4, #0x0 - bl FUN_02039438 - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x6 - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl FUN_02019178 - mov r0, #0x0 - strb r0, [r4, #0x0] - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_0203A630 -FUN_0203A630: ; 0x0203A630 - push {r4-r7, lr} - sub sp, #0xc - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0x31 - add r0, r4, #0x0 - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x2d - bl FUN_02039438 - add r7, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x32 - bl FUN_02039438 - str r0, [sp, #0x0] - add r0, r4, #0x0 - mov r1, #0x33 - bl FUN_02039438 - str r0, [sp, #0x4] - add r0, r4, #0x0 - mov r1, #0x2e - bl FUN_02039438 - str r0, [sp, #0x8] - add r0, r4, #0x0 - mov r1, #0x34 - bl FUN_02039438 - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r1, [r2, #0x0] - strh r1, [r6, #0x0] - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r1, [r2, #0x0] - strh r1, [r7, #0x0] - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r2, [r2, #0x0] - ldr r1, [sp, #0x0] - strh r2, [r1, #0x0] - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r2, [r2, #0x0] - ldr r1, [sp, #0x4] - strh r2, [r1, #0x0] - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r2, [r2, #0x0] - ldr r1, [sp, #0x8] - strh r2, [r1, #0x0] - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r1, [r2, #0x0] - strh r1, [r0, #0x0] - ldr r1, _0203A6C4 ; =FUN_0203A6C8 - add r0, r5, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 -_0203A6C4: .word FUN_0203A6C8 - - thumb_func_start FUN_0203A6C8 -FUN_0203A6C8: ; 0x0203A6C8 - push {r4-r7, lr} - sub sp, #0xc - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0x31 - add r0, r4, #0x0 - bl FUN_02039438 - add r7, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x32 - bl FUN_02039438 - str r0, [sp, #0x8] - add r0, r4, #0x0 - mov r1, #0x33 - bl FUN_02039438 - str r0, [sp, #0x4] - add r0, r4, #0x0 - mov r1, #0x34 - bl FUN_02039438 - str r0, [sp, #0x0] - add r0, r4, #0x0 - mov r1, #0x2d - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x2e - bl FUN_02039438 - add r5, r0, #0x0 - ldrh r0, [r6, #0x0] - cmp r0, #0x0 - bne _0203A71E - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - bne _0203A71E - add sp, #0xc - mov r0, #0x1 - pop {r4-r7, pc} -_0203A71E: - ldrh r3, [r7, #0x0] - cmp r3, #0x0 - beq _0203A740 - ldr r0, [sp, #0x8] - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - ldr r0, [r4, #0x8] - bne _0203A738 - mov r1, #0x3 - mov r2, #0x1 - bl FUN_020179E0 - b _0203A740 -_0203A738: - mov r1, #0x3 - mov r2, #0x2 - bl FUN_020179E0 -_0203A740: - ldr r0, [sp, #0x4] - ldrh r3, [r0, #0x0] - cmp r3, #0x0 - beq _0203A764 - ldr r0, [sp, #0x0] - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - ldr r0, [r4, #0x8] - bne _0203A75C - mov r1, #0x3 - mov r2, #0x4 - bl FUN_020179E0 - b _0203A764 -_0203A75C: - mov r1, #0x3 - mov r2, #0x5 - bl FUN_020179E0 -_0203A764: - ldrh r0, [r6, #0x0] - cmp r0, #0x0 - beq _0203A76E - sub r0, r0, #0x1 - strh r0, [r6, #0x0] -_0203A76E: - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _0203A778 - sub r0, r0, #0x1 - strh r0, [r5, #0x0] -_0203A778: - mov r0, #0x0 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_0203A780 -FUN_0203A780: ; 0x0203A780 - push {r4-r7, lr} - sub sp, #0x1c - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0x11 - add r0, r4, #0x0 - bl FUN_02039438 - str r0, [sp, #0x18] - add r0, r4, #0x0 - mov r1, #0x10 - bl FUN_02039438 - add r7, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0xf - bl FUN_02039438 - str r0, [sp, #0x14] - ldr r0, [r5, #0x8] - add r1, r0, #0x1 - str r1, [r5, #0x8] - ldrb r0, [r0, #0x0] - str r0, [sp, #0xc] - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r0, [r1, #0x0] - str r0, [sp, #0x10] - add r0, r5, #0x0 - bl ScriptReadHalfword - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - cmp r6, #0x0 - bne _0203A7E0 - add r0, r4, #0x0 - mov r1, #0xa - bl FUN_02039438 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02058510 - lsl r0, r0, #0x10 - lsr r6, r0, #0x10 -_0203A7E0: - ldr r0, [r4, #0x60] - ldr r1, [sp, #0x10] - add r2, r6, #0x0 - bl MOD05_021E8128 - ldr r0, [r4, #0x60] - mov r1, #0x1 - bl MOD05_021E8130 - add r0, r4, #0x0 - bl MOD05_021E8158 - ldr r2, [sp, #0x18] - ldr r0, [r5, #0x78] - ldr r1, [sp, #0xc] - ldr r2, [r2, #0x0] - bl ReadMsgDataIntoString - ldr r0, [sp, #0x14] - ldr r2, [sp, #0x18] - ldr r0, [r0, #0x0] - ldr r1, [r7, #0x0] - ldr r2, [r2, #0x0] - bl StringExpandPlaceholders - ldr r0, [r4, #0x60] - bl MOD05_021E8140 - mov r3, #0x0 - str r3, [sp, #0x0] - str r3, [sp, #0x4] - str r3, [sp, #0x8] - ldr r2, [r7, #0x0] - mov r1, #0x1 - bl AddTextPrinterParameterized - mov r0, #0x1 - add sp, #0x1c - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_0203A830 -FUN_0203A830: ; 0x0203A830 - push {r3-r5, lr} - add r1, r0, #0x0 - add r1, #0x80 - ldr r2, [r0, #0x8] - ldr r4, [r1, #0x0] - add r1, r2, #0x1 - str r1, [r0, #0x8] - ldrb r5, [r2, #0x0] - bl ScriptReadHalfword - add r2, r0, #0x0 - ldr r0, [r4, #0x60] - add r1, r5, #0x0 - bl MOD05_021E8128 - ldr r0, [r4, #0x60] - mov r1, #0x1 - bl MOD05_021E8130 - mov r0, #0x1 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_0203A85C -FUN_0203A85C: ; 0x0203A85C - push {r3, lr} - add r1, r0, #0x0 - add r1, #0x80 - ldr r2, [r0, #0x8] - ldr r3, [r1, #0x0] - add r1, r2, #0x1 - str r1, [r0, #0x8] - ldrb r1, [r2, #0x0] - ldr r0, [r3, #0x60] - bl MOD05_021E8130 - mov r0, #0x1 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0203A878 -FUN_0203A878: ; 0x0203A878 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x60] - bl MOD05_021E8148 - cmp r0, #0x1 - bne _0203A88E - mov r0, #0x0 - pop {r4, pc} -_0203A88E: - ldr r1, _0203A89C ; =FUN_0203A8A0 - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - pop {r4, pc} - nop -_0203A89C: .word FUN_0203A8A0 - - thumb_func_start FUN_0203A8A0 -FUN_0203A8A0: ; 0x0203A8A0 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x60] - bl MOD05_021E8148 - cmp r0, #0x1 - bne _0203A8B4 - mov r0, #0x1 - pop {r3, pc} -_0203A8B4: - mov r0, #0x0 - pop {r3, pc} - - thumb_func_start FUN_0203A8B8 -FUN_0203A8B8: ; 0x0203A8B8 - push {r3-r7, lr} - sub sp, #0x10 - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0x3 - add r0, r4, #0x0 - bl FUN_02039438 - str r0, [sp, #0x4] - add r0, r4, #0x0 - mov r1, #0x11 - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x10 - bl FUN_02039438 - add r7, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0xf - bl FUN_02039438 - ldr r1, [r5, #0x8] - str r0, [sp, #0x8] - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r0, [r1, #0x0] - str r0, [sp, #0x0] - add r0, r5, #0x0 - bl ScriptReadHalfword - str r0, [sp, #0xc] - ldr r0, [r5, #0x78] - ldr r1, [sp, #0x0] - ldr r2, [r6, #0x0] - bl ReadMsgDataIntoString - ldr r0, [sp, #0x8] - ldr r1, [r7, #0x0] - ldr r0, [r0, #0x0] - ldr r2, [r6, #0x0] - bl StringExpandPlaceholders - ldr r0, [r4, #0x60] - bl MOD05_021E8140 - add r4, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetOptionsAddr - add r2, r0, #0x0 - ldr r1, [r7, #0x0] - add r0, r4, #0x0 - mov r3, #0x1 - bl FUN_02054658 - ldr r1, [sp, #0x4] - strb r0, [r1, #0x0] - ldr r0, [sp, #0xc] - ldr r1, _0203A948 ; =FUN_0203A94C - str r0, [r5, #0x64] - add r0, r5, #0x0 - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x10 - pop {r3-r7, pc} - .balign 4 -_0203A948: .word FUN_0203A94C - - thumb_func_start FUN_0203A94C -FUN_0203A94C: ; 0x0203A94C - push {r3-r7, lr} - add r7, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - mov r1, #0x3 - add r0, r5, #0x0 - bl FUN_02039438 - ldr r1, [r7, #0x64] - add r6, r0, #0x0 - lsl r1, r1, #0x10 - add r0, r5, #0x0 - lsr r1, r1, #0x10 - bl GetVarPointer - add r4, r0, #0x0 - ldr r0, [r5, #0x60] - bl MOD05_021E8144 - ldrb r0, [r6, #0x0] - ldr r5, _0203A9E8 ; =0x0000FFFF - bl FUN_020546C8 - cmp r0, #0x1 - bne _0203A986 - mov r0, #0x2 - strh r0, [r4, #0x0] - mov r0, #0x1 - pop {r3-r7, pc} -_0203A986: - ldr r0, _0203A9EC ; =gMain - mov r1, #0x40 - ldr r0, [r0, #0x48] - tst r1, r0 - beq _0203A994 - mov r5, #0x0 - b _0203A9B0 -_0203A994: - mov r1, #0x80 - tst r1, r0 - beq _0203A99E - mov r5, #0x1 - b _0203A9B0 -_0203A99E: - mov r1, #0x20 - tst r1, r0 - beq _0203A9A8 - mov r5, #0x2 - b _0203A9B0 -_0203A9A8: - mov r1, #0x10 - tst r1, r0 - beq _0203A9B0 - mov r5, #0x3 -_0203A9B0: - ldr r1, _0203A9E8 ; =0x0000FFFF - cmp r5, r1 - beq _0203A9D0 - ldrb r0, [r6, #0x0] - bl FUN_0201BD7C - add r7, #0x80 - ldr r0, [r7, #0x0] - add r1, r5, #0x0 - ldr r0, [r0, #0x38] - bl FUN_02055304 - mov r0, #0x0 - strh r0, [r4, #0x0] - mov r0, #0x1 - pop {r3-r7, pc} -_0203A9D0: - mov r1, #0x1 - lsl r1, r1, #0xa - tst r0, r1 - beq _0203A9E4 - ldrb r0, [r6, #0x0] - bl FUN_0201BD7C - mov r0, #0x1 - strh r0, [r4, #0x0] - pop {r3-r7, pc} -_0203A9E4: - mov r0, #0x0 - pop {r3-r7, pc} - .balign 4 -_0203A9E8: .word 0x0000FFFF -_0203A9EC: .word gMain - - thumb_func_start FUN_0203A9F0 -FUN_0203A9F0: ; 0x0203A9F0 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - str r0, [r4, #0x64] - ldr r1, _0203AA08 ; =FUN_0203AA0C - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - pop {r4, pc} - nop -_0203AA08: .word FUN_0203AA0C - - thumb_func_start FUN_0203AA0C -FUN_0203AA0C: ; 0x0203AA0C - push {r3-r5, lr} - add r5, r0, #0x0 - ldr r1, [r5, #0x64] - add r0, #0x80 - lsl r1, r1, #0x10 - ldr r0, [r0, #0x0] - lsr r1, r1, #0x10 - bl GetVarPointer - add r4, r0, #0x0 - ldr r0, _0203AA88 ; =gMain - ldr r1, _0203AA8C ; =0x0000FFFF - ldr r2, [r0, #0x48] - mov r0, #0x3 - add r3, r2, #0x0 - tst r3, r0 - beq _0203AA36 - mov r0, #0x0 - strh r0, [r4, #0x0] - mov r0, #0x1 - pop {r3-r5, pc} -_0203AA36: - mov r3, #0x40 - tst r3, r2 - beq _0203AA40 - mov r1, #0x0 - b _0203AA5C -_0203AA40: - mov r3, #0x80 - tst r3, r2 - beq _0203AA4A - mov r1, #0x1 - b _0203AA5C -_0203AA4A: - mov r3, #0x20 - tst r3, r2 - beq _0203AA54 - mov r1, #0x2 - b _0203AA5C -_0203AA54: - mov r3, #0x10 - tst r3, r2 - beq _0203AA5C - add r1, r0, #0x0 -_0203AA5C: - ldr r0, _0203AA8C ; =0x0000FFFF - cmp r1, r0 - beq _0203AA74 - add r5, #0x80 - ldr r0, [r5, #0x0] - ldr r0, [r0, #0x38] - bl FUN_02055304 - mov r0, #0x0 - strh r0, [r4, #0x0] - mov r0, #0x1 - pop {r3-r5, pc} -_0203AA74: - mov r0, #0x1 - lsl r0, r0, #0xa - tst r0, r2 - beq _0203AA82 - mov r0, #0x1 - strh r0, [r4, #0x0] - pop {r3-r5, pc} -_0203AA82: - mov r0, #0x0 - pop {r3-r5, pc} - nop -_0203AA88: .word gMain -_0203AA8C: .word 0x0000FFFF - - thumb_func_start FUN_0203AA90 -FUN_0203AA90: ; 0x0203AA90 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - bl FUN_02039460 - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0203AAA0 -FUN_0203AAA0: ; 0x0203AAA0 - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - mov r1, #0x2 - add r0, r4, #0x0 - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r7, r0, #0x0 - mov r0, #0x0 - str r0, [sp, #0x0] - mov r0, #0x4 - str r0, [sp, #0x4] - ldr r0, [r4, #0x8] - ldr r2, _0203AAF4 ; =0x000003D9 - mov r1, #0x3 - mov r3, #0xb - bl FUN_0200CB00 - mov r0, #0x4 - str r0, [sp, #0x0] - ldr r0, [r4, #0x8] - ldr r1, _0203AAF8 ; =UNK_020F34E0 - ldr r2, _0203AAF4 ; =0x000003D9 - mov r3, #0xb - bl Std_CreateYesNoMenu - str r0, [r6, #0x0] - ldr r1, _0203AAFC ; =FUN_0203AB00 - add r0, r5, #0x0 - str r7, [r5, #0x64] - bl SetupNativeScript - mov r0, #0x1 - add sp, #0x8 - pop {r3-r7, pc} - nop -_0203AAF4: .word 0x000003D9 -_0203AAF8: .word UNK_020F34E0 -_0203AAFC: .word FUN_0203AB00 - - thumb_func_start FUN_0203AB00 -FUN_0203AB00: ; 0x0203AB00 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r6, [r0, #0x0] - mov r1, #0x2 - add r0, r6, #0x0 - bl FUN_02039438 - ldr r1, [r5, #0x64] - add r4, r0, #0x0 - lsl r1, r1, #0x10 - add r0, r6, #0x0 - lsr r1, r1, #0x10 - bl GetVarPointer - add r5, r0, #0x0 - ldr r0, [r4, #0x0] - mov r1, #0x4 - bl FUN_020021AC - mov r1, #0x0 - mvn r1, r1 - cmp r0, r1 - bne _0203AB34 - mov r0, #0x0 - pop {r4-r6, pc} -_0203AB34: - cmp r0, #0x0 - bne _0203AB3C - mov r0, #0x0 - b _0203AB3E -_0203AB3C: - mov r0, #0x1 -_0203AB3E: - strh r0, [r5, #0x0] - mov r0, #0x1 - pop {r4-r6, pc} - - thumb_func_start FUN_0203AB44 -FUN_0203AB44: ; 0x0203AB44 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x1 - bl FUN_02039438 - add r5, #0x80 - add r4, r0, #0x0 - ldr r0, [r5, #0x0] - mov r1, #0x12 - bl FUN_02039438 - add r5, r0, #0x0 - ldr r1, _0203AB70 ; =0x000003E2 - add r0, r4, #0x0 - bl FUN_0200D858 - str r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - nop -_0203AB70: .word 0x000003E2 - - thumb_func_start FUN_0203AB74 -FUN_0203AB74: ; 0x0203AB74 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x12 - bl FUN_02039438 - ldr r0, [r0, #0x0] - bl FUN_0200DBFC - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0203AB8C -FUN_0203AB8C: ; 0x0203AB8C - push {r4-r7, lr} - sub sp, #0x2c - add r5, r0, #0x0 - add r0, #0x80 - ldr r6, [r0, #0x0] - mov r1, #0x0 - add r0, r6, #0x0 - bl FUN_02039438 - str r0, [sp, #0x1c] - add r0, r6, #0x0 - mov r1, #0xf - bl FUN_02039438 - str r0, [sp, #0x20] - ldr r0, [r5, #0x8] - add r1, r0, #0x1 - str r1, [r5, #0x8] - ldrb r0, [r0, #0x0] - add r2, r1, #0x1 - str r0, [sp, #0x18] - str r2, [r5, #0x8] - ldrb r0, [r1, #0x0] - add r1, r2, #0x1 - str r0, [sp, #0x14] - str r1, [r5, #0x8] - ldrb r7, [r2, #0x0] - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - str r0, [sp, #0x24] - ldr r1, [sp, #0x24] - add r0, r6, #0x0 - bl GetVarPointer - str r0, [sp, #0x28] - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x1 - bl FUN_02039438 - ldr r1, [sp, #0x28] - str r4, [sp, #0x0] - str r1, [sp, #0x4] - ldr r1, [sp, #0x20] - add r3, r7, #0x0 - ldr r1, [r1, #0x0] - str r1, [sp, #0x8] - str r0, [sp, #0xc] - mov r0, #0x0 - str r0, [sp, #0x10] - ldr r1, [sp, #0x18] - ldr r2, [sp, #0x14] - add r0, r6, #0x0 - bl MOD05_021E1BF8 - ldr r1, [sp, #0x1c] - str r0, [r1, #0x0] - ldr r0, [sp, #0x24] - str r0, [r5, #0x64] - mov r0, #0x1 - add sp, #0x2c - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_0203AC14 -FUN_0203AC14: ; 0x0203AC14 - push {r4-r7, lr} - sub sp, #0x2c - add r5, r0, #0x0 - add r0, #0x80 - ldr r6, [r0, #0x0] - mov r1, #0x0 - add r0, r6, #0x0 - bl FUN_02039438 - str r0, [sp, #0x1c] - add r0, r6, #0x0 - mov r1, #0xf - bl FUN_02039438 - str r0, [sp, #0x20] - ldr r0, [r5, #0x8] - add r1, r0, #0x1 - str r1, [r5, #0x8] - ldrb r0, [r0, #0x0] - add r2, r1, #0x1 - str r0, [sp, #0x18] - str r2, [r5, #0x8] - ldrb r0, [r1, #0x0] - add r1, r2, #0x1 - str r0, [sp, #0x14] - str r1, [r5, #0x8] - ldrb r7, [r2, #0x0] - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - str r0, [sp, #0x24] - ldr r1, [sp, #0x24] - add r0, r6, #0x0 - bl GetVarPointer - str r0, [sp, #0x28] - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x1 - bl FUN_02039438 - ldr r1, [sp, #0x28] - str r4, [sp, #0x0] - str r1, [sp, #0x4] - ldr r1, [sp, #0x20] - add r3, r7, #0x0 - ldr r1, [r1, #0x0] - str r1, [sp, #0x8] - str r0, [sp, #0xc] - ldr r0, [r5, #0x78] - str r0, [sp, #0x10] - ldr r1, [sp, #0x18] - ldr r2, [sp, #0x14] - add r0, r6, #0x0 - bl MOD05_021E1BF8 - ldr r1, [sp, #0x1c] - str r0, [r1, #0x0] - ldr r0, [sp, #0x24] - str r0, [r5, #0x64] - mov r0, #0x1 - add sp, #0x2c - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_0203AC9C -FUN_0203AC9C: ; 0x0203AC9C - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02039438 - ldr r1, [r4, #0x8] - add r3, r1, #0x1 - str r3, [r4, #0x8] - ldrb r1, [r1, #0x0] - add r2, r3, #0x1 - str r2, [r4, #0x8] - ldrb r2, [r3, #0x0] - ldr r0, [r0, #0x0] - bl MOD05_021E1C4C - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0203ACC4 -FUN_0203ACC4: ; 0x0203ACC4 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r2, r0, #0x0 - ldr r0, [r4, #0x0] - add r1, r6, #0x0 - bl MOD05_021E1C4C - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_0203AD08 -FUN_0203AD08: ; 0x0203AD08 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02039438 - ldr r0, [r0, #0x0] - bl MOD05_021E1C54 - ldr r1, _0203AD28 ; =FUN_0203AD2C - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - pop {r4, pc} - .balign 4 -_0203AD28: .word FUN_0203AD2C - - thumb_func_start FUN_0203AD2C -FUN_0203AD2C: ; 0x0203AD2C - push {r3, lr} - add r1, r0, #0x0 - ldr r1, [r1, #0x64] - add r0, #0x80 - lsl r1, r1, #0x10 - ldr r0, [r0, #0x0] - lsr r1, r1, #0x10 - bl GetVarPointer - ldrh r1, [r0, #0x0] - ldr r0, _0203AD50 ; =0x0000EEEE - cmp r1, r0 - beq _0203AD4A - mov r0, #0x1 - pop {r3, pc} -_0203AD4A: - mov r0, #0x0 - pop {r3, pc} - nop -_0203AD50: .word 0x0000EEEE - - thumb_func_start FUN_0203AD54 -FUN_0203AD54: ; 0x0203AD54 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02039438 - ldr r0, [r0, #0x0] - bl MOD05_021E1C54 - ldr r1, _0203AD74 ; =FUN_0203AD78 - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - pop {r4, pc} - .balign 4 -_0203AD74: .word FUN_0203AD78 - - thumb_func_start FUN_0203AD78 -FUN_0203AD78: ; 0x0203AD78 - push {r4-r6, lr} - add r1, r0, #0x0 - add r0, #0x80 - ldr r1, [r1, #0x64] - ldr r5, [r0, #0x0] - lsl r1, r1, #0x10 - add r0, r5, #0x0 - lsr r1, r1, #0x10 - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x0 - bl FUN_02039438 - add r6, r0, #0x0 - ldrh r1, [r4, #0x0] - ldr r0, _0203ADC0 ; =0x0000EEEE - cmp r1, r0 - bne _0203ADBC - ldr r0, [r5, #0x78] - bl FUN_02052714 - cmp r0, #0x0 - beq _0203ADB8 - mov r0, #0x8 - strh r0, [r4, #0x0] - ldr r0, [r6, #0x0] - bl MOD05_021E1ECC - mov r0, #0x1 - pop {r4-r6, pc} -_0203ADB8: - mov r0, #0x0 - pop {r4-r6, pc} -_0203ADBC: - mov r0, #0x1 - pop {r4-r6, pc} - .balign 4 -_0203ADC0: .word 0x0000EEEE - - thumb_func_start FUN_0203ADC4 -FUN_0203ADC4: ; 0x0203ADC4 - push {r4-r7, lr} - sub sp, #0x2c - add r5, r0, #0x0 - add r0, #0x80 - ldr r6, [r0, #0x0] - mov r1, #0x0 - add r0, r6, #0x0 - bl FUN_02039438 - str r0, [sp, #0x1c] - add r0, r6, #0x0 - mov r1, #0xf - bl FUN_02039438 - str r0, [sp, #0x20] - ldr r0, [r5, #0x8] - add r1, r0, #0x1 - str r1, [r5, #0x8] - ldrb r0, [r0, #0x0] - add r2, r1, #0x1 - str r0, [sp, #0x18] - str r2, [r5, #0x8] - ldrb r0, [r1, #0x0] - add r1, r2, #0x1 - str r0, [sp, #0x14] - str r1, [r5, #0x8] - ldrb r7, [r2, #0x0] - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - str r0, [sp, #0x24] - ldr r1, [sp, #0x24] - add r0, r6, #0x0 - bl GetVarPointer - str r0, [sp, #0x28] - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x1 - bl FUN_02039438 - ldr r1, [sp, #0x28] - str r4, [sp, #0x0] - str r1, [sp, #0x4] - ldr r1, [sp, #0x20] - add r3, r7, #0x0 - ldr r1, [r1, #0x0] - str r1, [sp, #0x8] - str r0, [sp, #0xc] - mov r0, #0x0 - str r0, [sp, #0x10] - ldr r1, [sp, #0x18] - ldr r2, [sp, #0x14] - add r0, r6, #0x0 - bl MOD05_021E1F34 - ldr r1, [sp, #0x1c] - str r0, [r1, #0x0] - ldr r0, [sp, #0x24] - str r0, [r5, #0x64] - mov r0, #0x1 - add sp, #0x2c - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_0203AE4C -FUN_0203AE4C: ; 0x0203AE4C - push {r4-r7, lr} - sub sp, #0x2c - add r5, r0, #0x0 - add r0, #0x80 - ldr r6, [r0, #0x0] - mov r1, #0x0 - add r0, r6, #0x0 - bl FUN_02039438 - str r0, [sp, #0x1c] - add r0, r6, #0x0 - mov r1, #0xf - bl FUN_02039438 - str r0, [sp, #0x20] - ldr r0, [r5, #0x8] - add r1, r0, #0x1 - str r1, [r5, #0x8] - ldrb r0, [r0, #0x0] - add r2, r1, #0x1 - str r0, [sp, #0x18] - str r2, [r5, #0x8] - ldrb r0, [r1, #0x0] - add r1, r2, #0x1 - str r0, [sp, #0x14] - str r1, [r5, #0x8] - ldrb r7, [r2, #0x0] - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadHalfword - str r0, [sp, #0x24] - ldr r1, [sp, #0x24] - add r0, r6, #0x0 - bl GetVarPointer - str r0, [sp, #0x28] - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x1 - bl FUN_02039438 - ldr r1, [sp, #0x28] - str r4, [sp, #0x0] - str r1, [sp, #0x4] - ldr r1, [sp, #0x20] - add r3, r7, #0x0 - ldr r1, [r1, #0x0] - str r1, [sp, #0x8] - str r0, [sp, #0xc] - ldr r0, [r5, #0x78] - str r0, [sp, #0x10] - ldr r1, [sp, #0x18] - ldr r2, [sp, #0x14] - add r0, r6, #0x0 - bl MOD05_021E1F34 - ldr r1, [sp, #0x1c] - str r0, [r1, #0x0] - ldr r0, [sp, #0x24] - str r0, [r5, #0x64] - mov r0, #0x1 - add sp, #0x2c - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_0203AED4 -FUN_0203AED4: ; 0x0203AED4 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r3, r0, #0x0 - lsl r1, r6, #0x18 - lsl r2, r7, #0x18 - lsl r3, r3, #0x18 - ldr r0, [r4, #0x0] - lsr r1, r1, #0x18 - lsr r2, r2, #0x18 - lsr r3, r3, #0x18 - bl MOD05_021E1F58 - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_0203AF34 -FUN_0203AF34: ; 0x0203AF34 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02039438 - ldr r0, [r0, #0x0] - bl MOD05_021E1F60 - ldr r1, _0203AF54 ; =FUN_0203AD2C - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - pop {r4, pc} - .balign 4 -_0203AF54: .word FUN_0203AD2C - - thumb_func_start FUN_0203AF58 -FUN_0203AF58: ; 0x0203AF58 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02039438 - ldr r2, [r4, #0x8] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - ldr r0, [r0, #0x0] - bl MOD05_021E26CC - ldr r1, _0203AF80 ; =FUN_0203AD2C - add r0, r4, #0x0 - bl SetupNativeScript - mov r0, #0x1 - pop {r4, pc} - .balign 4 -_0203AF80: .word FUN_0203AD2C - - thumb_func_start FUN_0203AF84 -FUN_0203AF84: ; 0x0203AF84 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02039438 - ldr r2, [r4, #0x8] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - ldr r0, [r0, #0x0] - bl MOD05_021E2B80 - mov r0, #0x1 - pop {r4, pc} - - thumb_func_start FUN_0203AFA4 -FUN_0203AFA4: ; 0x0203AFA4 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x0 - bl FUN_02039438 - ldr r2, [r4, #0x8] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - ldr r0, [r0, #0x0] - bl MOD05_021E2B9C - mov r0, #0x1 - pop {r4, pc} - thumb_func_start FUN_0203AFC4 FUN_0203AFC4: ; 0x0203AFC4 push {r4-r6, lr} diff --git a/arm9/asm/unk_0200CABC.s b/arm9/asm/unk_0200CABC.s index 0920c2fb..6d593845 100644 --- a/arm9/asm/unk_0200CABC.s +++ b/arm9/asm/unk_0200CABC.s @@ -2463,7 +2463,7 @@ _0200DE40: bl FUN_0201FDEC mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x34 pop {r4-r7, pc} nop diff --git a/arm9/asm/unk_02015E30.s b/arm9/asm/unk_02015E30.s deleted file mode 100644 index 9ca09399..00000000 --- a/arm9/asm/unk_02015E30.s +++ /dev/null @@ -1,72 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .bss - - .global UNK_021C4898 -UNK_021C4898: ; 0x021C4898 - .space 0x20 - - .text - - thumb_func_start FUN_02015E30 -FUN_02015E30: ; 0x02015E30 - ldr r0, _02015E38 ; =UNK_021C4898 - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - .balign 4 -_02015E38: .word UNK_021C4898 - - thumb_func_start FUN_02015E3C -FUN_02015E3C: ; 0x02015E3C - push {r3, lr} - ldr r1, _02015E5C ; =UNK_021C4898 - mov r2, #0x1 - str r2, [r1, #0x0] - mov r2, #0x0 - str r2, [r1, #0x10] - str r2, [r1, #0x14] - str r2, [r1, #0x8] - str r2, [r1, #0xc] - str r0, [r1, #0x4] - bl FUN_02020BF4 - ldr r2, _02015E5C ; =UNK_021C4898 - str r0, [r2, #0x18] - str r1, [r2, #0x1c] - pop {r3, pc} - .balign 4 -_02015E5C: .word UNK_021C4898 - - thumb_func_start FUN_02015E60 -FUN_02015E60: ; 0x02015E60 - push {r3-r5, lr} - ldr r0, _02015E9C ; =UNK_021C4898 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _02015E9A - bl FUN_02020BF4 - ldr r2, _02015E9C ; =UNK_021C4898 - ldr r3, [r2, #0x18] - ldr r2, [r2, #0x1c] - sub r0, r0, r3 - sbc r1, r2 - bl FUN_02020C14 - add r5, r1, #0x0 - ldr r1, _02015E9C ; =UNK_021C4898 - add r4, r0, #0x0 - ldr r3, [r1, #0x8] - ldr r2, [r1, #0xc] - sub r0, r3, r4 - sbc r2, r5 - bhs _02015E9A - ldr r0, [r1, #0x4] - sub r1, r4, r3 - bl AddIGTSeconds - ldr r0, _02015E9C ; =UNK_021C4898 - str r4, [r0, #0x8] - str r5, [r0, #0xc] -_02015E9A: - pop {r3-r5, pc} - .balign 4 -_02015E9C: .word UNK_021C4898 diff --git a/arm9/asm/unk_020166C8.s b/arm9/asm/unk_020166C8.s deleted file mode 100644 index 3c251114..00000000 --- a/arm9/asm/unk_020166C8.s +++ /dev/null @@ -1,665 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .bss - - .global UNK_021C4D28 -UNK_021C4D28: ; 0x021C4D28 - .space 0x1c - - .text - - thumb_func_start FUN_020166C8 -FUN_020166C8: ; 0x020166C8 - push {r3-r7, lr} - sub sp, #0x8 - add r4, r1, #0x0 - add r5, r0, #0x0 - add r0, r4, #0x0 - str r0, [sp, #0x4] - add r0, #0x18 - add r6, r2, #0x0 - str r0, [sp, #0x4] - cmp r6, r0 - bhs _020166E0 - add r6, r0, #0x0 -_020166E0: - cmp r3, #0x0 - beq _020166FE - mov r0, #0x3 - tst r0, r3 - beq _020166F4 - mov r0, #0x3 -_020166EC: - add r3, r3, #0x1 - add r1, r3, #0x0 - tst r1, r0 - bne _020166EC -_020166F4: - mov r0, #0x0 - add r1, r3, #0x0 - mov r2, #0x4 - bl OS_AllocFromArenaLo -_020166FE: - ldr r1, [sp, #0x4] - lsl r7, r6, #0x1 - lsl r2, r1, #0x1 - add r1, r1, r2 - add r1, r1, #0x1 - lsl r1, r1, #0x2 - add r1, r7, r1 - mov r0, #0x0 - add r1, r6, r1 - mov r2, #0x4 - bl OS_AllocFromArenaLo - ldr r1, _020167F0 ; =UNK_021C4D28 - str r0, [r1, #0x0] - ldr r1, [sp, #0x4] - add r1, r1, #0x1 - lsl r1, r1, #0x2 - add r1, r0, r1 - ldr r0, _020167F0 ; =UNK_021C4D28 - str r1, [r0, #0x4] - ldr r0, [sp, #0x4] - lsl r0, r0, #0x2 - add r2, r1, r0 - ldr r1, _020167F0 ; =UNK_021C4D28 - str r2, [r1, #0x8] - add r1, r2, r0 - ldr r0, _020167F0 ; =UNK_021C4D28 - str r1, [r0, #0xc] - add r1, r1, r7 - str r1, [r0, #0x10] - strh r6, [r0, #0x14] - strh r4, [r0, #0x16] - ldr r0, [sp, #0x4] - mov r7, #0x0 - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 - ldr r0, _020167F0 ; =UNK_021C4D28 - cmp r4, #0x0 - strh r1, [r0, #0x1a] - strh r1, [r0, #0x18] - bls _020167A0 - str r7, [sp, #0x0] -_02016752: - ldr r0, [r5, #0x4] - cmp r0, #0x0 - beq _0201675C - cmp r0, #0x2 - beq _02016768 -_0201675C: - ldr r1, [r5, #0x0] - mov r0, #0x0 - mov r2, #0x4 - bl OS_AllocFromArenaLo - b _02016772 -_02016768: - ldr r1, [r5, #0x0] - mov r0, #0x2 - mov r2, #0x4 - bl OS_AllocFromArenaHi -_02016772: - cmp r0, #0x0 - beq _0201678E - ldr r1, [r5, #0x0] - mov r2, #0x0 - bl tempName_NNS_FndCreateExpHeapEx - ldr r1, _020167F0 ; =UNK_021C4D28 - ldr r2, [r1, #0x0] - ldr r1, [sp, #0x0] - str r0, [r2, r1] - ldr r0, _020167F0 ; =UNK_021C4D28 - ldr r0, [r0, #0x10] - strb r7, [r0, r7] - b _02016792 -_0201678E: - bl ErrorHandling -_02016792: - ldr r0, [sp, #0x0] - add r7, r7, #0x1 - add r0, r0, #0x4 - add r5, #0x8 - str r0, [sp, #0x0] - cmp r7, r4 - blo _02016752 -_020167A0: - ldr r0, [sp, #0x4] - add r1, r0, #0x1 - cmp r4, r1 - bhs _020167C0 - ldr r3, _020167F0 ; =UNK_021C4D28 - lsl r2, r4, #0x2 - mov r0, #0x0 -_020167AE: - ldr r5, [r3, #0x0] - str r0, [r5, r2] - ldrh r7, [r3, #0x1a] - ldr r5, [r3, #0x10] - add r2, r2, #0x4 - strb r7, [r5, r4] - add r4, r4, #0x1 - cmp r4, r1 - blo _020167AE -_020167C0: - cmp r4, r6 - bhs _020167D2 - ldr r0, _020167F0 ; =UNK_021C4D28 -_020167C6: - ldrh r2, [r0, #0x1a] - ldr r1, [r0, #0x10] - strb r2, [r1, r4] - add r4, r4, #0x1 - cmp r4, r6 - blo _020167C6 -_020167D2: - mov r4, #0x0 - cmp r6, #0x0 - bls _020167EA - ldr r0, _020167F0 ; =UNK_021C4D28 - add r3, r4, #0x0 - add r2, r4, #0x0 -_020167DE: - ldr r1, [r0, #0xc] - add r4, r4, #0x1 - strh r2, [r1, r3] - add r3, r3, #0x2 - cmp r4, r6 - blo _020167DE -_020167EA: - add sp, #0x8 - pop {r3-r7, pc} - nop -_020167F0: .word UNK_021C4D28 - - thumb_func_start FUN_020167F4 -FUN_020167F4: ; 0x020167F4 - ldr r1, _02016818 ; =UNK_021C4D28 - ldrh r0, [r1, #0x16] - ldrh r3, [r1, #0x18] - cmp r0, r3 - bge _02016812 - ldr r2, [r1, #0x0] - lsl r1, r0, #0x2 - add r2, r2, r1 -_02016804: - ldr r1, [r2, #0x0] - cmp r1, #0x0 - beq _02016816 - add r0, r0, #0x1 - add r2, r2, #0x4 - cmp r0, r3 - blt _02016804 -_02016812: - mov r0, #0x0 - mvn r0, r0 -_02016816: - bx lr - .balign 4 -_02016818: .word UNK_021C4D28 - - thumb_func_start FUN_0201681C -FUN_0201681C: ; 0x0201681C - push {r3, lr} - mov r3, #0x4 - bl FUN_02016834 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02016828 -FUN_02016828: ; 0x02016828 - push {r3, lr} - mov r3, #0x3 - mvn r3, r3 - bl FUN_02016834 - pop {r3, pc} - - thumb_func_start FUN_02016834 -FUN_02016834: ; 0x02016834 - push {r3-r7, lr} - sub sp, #0x8 - add r4, r0, #0x0 - add r5, r1, #0x0 - str r2, [sp, #0x0] - add r7, r3, #0x0 - bl OS_GetProcMode - cmp r0, #0x12 - bne _0201684C - bl ErrorHandling -_0201684C: - ldr r1, _020168CC ; =UNK_021C4D28 - ldr r0, [r1, #0x10] - ldrh r3, [r1, #0x1a] - ldrb r2, [r0, r5] - cmp r3, r2 - bne _020168C2 - ldrb r0, [r0, r4] - ldr r1, [r1, #0x0] - lsl r0, r0, #0x2 - ldr r6, [r1, r0] - cmp r6, #0x0 - beq _020168BC - ldr r1, [sp, #0x0] - add r0, r6, #0x0 - add r2, r7, #0x0 - bl tempName_NNS_FndAllocFromExpHeapEx - str r0, [sp, #0x4] - cmp r0, #0x0 - beq _020168B6 - bl FUN_020167F4 - add r7, r0, #0x0 - bmi _020168B0 - ldr r0, [sp, #0x4] - ldr r1, [sp, #0x0] - mov r2, #0x0 - lsl r4, r7, #0x2 - bl tempName_NNS_FndCreateExpHeapEx - ldr r1, _020168CC ; =UNK_021C4D28 - ldr r2, [r1, #0x0] - str r0, [r2, r4] - ldr r0, [r1, #0x0] - ldr r0, [r0, r4] - cmp r0, #0x0 - beq _020168AA - ldr r0, [r1, #0x4] - str r6, [r0, r4] - ldr r0, [sp, #0x4] - ldr r2, [r1, #0x8] - add sp, #0x8 - str r0, [r2, r4] - ldr r0, [r1, #0x10] - strb r7, [r0, r5] - mov r0, #0x1 - pop {r3-r7, pc} -_020168AA: - bl ErrorHandling - b _020168C6 -_020168B0: - bl ErrorHandling - b _020168C6 -_020168B6: - bl ErrorHandling - b _020168C6 -_020168BC: - bl ErrorHandling - b _020168C6 -_020168C2: - bl ErrorHandling -_020168C6: - mov r0, #0x0 - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 -_020168CC: .word UNK_021C4D28 - - thumb_func_start FUN_020168D0 -FUN_020168D0: ; 0x020168D0 - push {r4, lr} - add r4, r0, #0x0 - bl OS_GetProcMode - cmp r0, #0x12 - bne _020168E0 - bl ErrorHandling -_020168E0: - ldr r0, _02016940 ; =UNK_021C4D28 - ldr r1, [r0, #0x0] - ldr r0, [r0, #0x10] - ldrb r0, [r0, r4] - lsl r0, r0, #0x2 - ldr r0, [r1, r0] - cmp r0, #0x0 - beq _0201693E - bl thunk_FUN_020adc8c - ldr r1, _02016940 ; =UNK_021C4D28 - ldr r0, [r1, #0x10] - ldrb r0, [r0, r4] - lsl r2, r0, #0x2 - ldr r0, [r1, #0x4] - ldr r1, [r1, #0x8] - ldr r0, [r0, r2] - ldr r1, [r1, r2] - cmp r0, #0x0 - beq _02016912 - cmp r1, #0x0 - beq _02016912 - bl FUN_020ADDF0 - b _02016916 -_02016912: - bl ErrorHandling -_02016916: - ldr r1, _02016940 ; =UNK_021C4D28 - mov r0, #0x0 - ldr r2, [r1, #0x10] - ldr r3, [r1, #0x0] - ldrb r2, [r2, r4] - lsl r2, r2, #0x2 - str r0, [r3, r2] - ldr r2, [r1, #0x10] - ldr r3, [r1, #0x4] - ldrb r2, [r2, r4] - lsl r2, r2, #0x2 - str r0, [r3, r2] - ldr r2, [r1, #0x10] - ldr r3, [r1, #0x8] - ldrb r2, [r2, r4] - lsl r2, r2, #0x2 - str r0, [r3, r2] - ldrh r2, [r1, #0x1a] - ldr r0, [r1, #0x10] - strb r2, [r0, r4] -_0201693E: - pop {r4, pc} - .balign 4 -_02016940: .word UNK_021C4D28 - - thumb_func_start FUN_02016944 -FUN_02016944: ; 0x02016944 - push {r3-r7, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - add r7, r2, #0x0 - add r6, r3, #0x0 - cmp r5, #0x0 - bne _02016956 - bl ErrorHandling -_02016956: - bl OS_DisableInterrupts - add r4, #0x10 - str r0, [sp, #0x0] - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r7, #0x0 - bl tempName_NNS_FndAllocFromExpHeapEx - add r4, r0, #0x0 - ldr r0, [sp, #0x0] - bl OS_RestoreInterrupts - cmp r4, #0x0 - beq _02016984 - ldr r1, [r4, #0xc] - mov r0, #0xff - bic r1, r0 - lsl r0, r6, #0x18 - lsr r0, r0, #0x18 - orr r0, r1 - str r0, [r4, #0xc] - add r4, #0x10 -_02016984: - add r0, r4, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02016988 -FUN_02016988: ; 0x02016988 - push {r3, lr} - bl FUN_02031810 - cmp r0, #0x0 - beq _02016996 - bl PrintErrorMessageAndReset -_02016996: - pop {r3, pc} - - thumb_func_start AllocFromHeap -AllocFromHeap: ; 0x02016998 - push {r3-r5, lr} - add r5, r0, #0x0 - ldr r0, _020169D4 ; =UNK_021C4D28 - mov r4, #0x0 - ldrh r2, [r0, #0x14] - cmp r5, r2 - bhs _020169BA - ldr r2, [r0, #0x0] - ldr r0, [r0, #0x10] - add r3, r5, #0x0 - ldrb r0, [r0, r5] - lsl r0, r0, #0x2 - ldr r0, [r2, r0] - mov r2, #0x4 - bl FUN_02016944 - add r4, r0, #0x0 -_020169BA: - cmp r4, #0x0 - beq _020169CC - ldr r0, _020169D4 ; =UNK_021C4D28 - lsl r1, r5, #0x1 - ldr r2, [r0, #0xc] - ldrh r0, [r2, r1] - add r0, r0, #0x1 - strh r0, [r2, r1] - b _020169D0 -_020169CC: - bl FUN_02016988 -_020169D0: - add r0, r4, #0x0 - pop {r3-r5, pc} - .balign 4 -_020169D4: .word UNK_021C4D28 - - thumb_func_start AllocFromHeapAtEnd -AllocFromHeapAtEnd: ; 0x020169D8 - push {r3-r5, lr} - ldr r2, _02016A14 ; =UNK_021C4D28 - add r5, r0, #0x0 - ldrh r0, [r2, #0x14] - mov r4, #0x0 - cmp r5, r0 - bhs _020169FA - ldr r0, [r2, #0x0] - ldr r2, [r2, #0x10] - add r3, r5, #0x0 - ldrb r2, [r2, r5] - lsl r2, r2, #0x2 - ldr r0, [r0, r2] - sub r2, r4, #0x4 - bl FUN_02016944 - add r4, r0, #0x0 -_020169FA: - cmp r4, #0x0 - beq _02016A0C - ldr r0, _02016A14 ; =UNK_021C4D28 - lsl r1, r5, #0x1 - ldr r2, [r0, #0xc] - ldrh r0, [r2, r1] - add r0, r0, #0x1 - strh r0, [r2, r1] - b _02016A10 -_02016A0C: - bl FUN_02016988 -_02016A10: - add r0, r4, #0x0 - pop {r3-r5, pc} - .balign 4 -_02016A14: .word UNK_021C4D28 - - thumb_func_start FreeToHeap -FreeToHeap: ; 0x02016A18 - push {r3-r7, lr} - add r6, r0, #0x0 - sub r0, r6, #0x4 - ldr r0, [r0, #0x0] - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - ldr r0, _02016A88 ; =UNK_021C4D28 - ldrh r1, [r0, #0x14] - cmp r4, r1 - bhs _02016A80 - ldr r1, [r0, #0x0] - ldr r0, [r0, #0x10] - ldrb r0, [r0, r4] - lsl r0, r0, #0x2 - ldr r7, [r1, r0] - cmp r7, #0x0 - bne _02016A3E - bl ErrorHandling -_02016A3E: - ldr r0, _02016A88 ; =UNK_021C4D28 - lsl r5, r4, #0x1 - ldr r0, [r0, #0xc] - ldrh r0, [r0, r5] - cmp r0, #0x0 - bne _02016A50 - add r0, r4, #0x0 - bl FUN_02016B90 -_02016A50: - ldr r0, _02016A88 ; =UNK_021C4D28 - ldr r0, [r0, #0xc] - ldrh r0, [r0, r5] - cmp r0, #0x0 - bne _02016A5E - bl ErrorHandling -_02016A5E: - ldr r0, _02016A88 ; =UNK_021C4D28 - ldr r1, [r0, #0xc] - ldrh r0, [r1, r5] - sub r0, r0, #0x1 - strh r0, [r1, r5] - bl OS_DisableInterrupts - sub r6, #0x10 - add r4, r0, #0x0 - add r0, r7, #0x0 - add r1, r6, #0x0 - bl FUN_020ADDF0 - add r0, r4, #0x0 - bl OS_RestoreInterrupts - pop {r3-r7, pc} -_02016A80: - bl ErrorHandling - pop {r3-r7, pc} - nop -_02016A88: .word UNK_021C4D28 - - thumb_func_start FUN_02016A8C -FUN_02016A8C: ; 0x02016A8C - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bl OS_GetProcMode - cmp r0, #0x12 - bne _02016A9E - bl ErrorHandling -_02016A9E: - ldr r0, _02016AF4 ; =UNK_021C4D28 - ldrh r1, [r0, #0x14] - cmp r5, r1 - bhs _02016AEE - ldr r1, [r0, #0x0] - ldr r0, [r0, #0x10] - ldrb r0, [r0, r5] - lsl r0, r0, #0x2 - ldr r6, [r1, r0] - cmp r6, #0x0 - bne _02016AB8 - bl ErrorHandling -_02016AB8: - sub r0, r4, #0x4 - ldr r0, [r0, #0x0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - cmp r0, r5 - beq _02016AC8 - bl ErrorHandling -_02016AC8: - sub r4, #0x10 - add r0, r6, #0x0 - add r1, r4, #0x0 - bl FUN_020ADDF0 - ldr r0, _02016AF4 ; =UNK_021C4D28 - lsl r4, r5, #0x1 - ldr r0, [r0, #0xc] - ldrh r0, [r0, r4] - cmp r0, #0x0 - bne _02016AE2 - bl ErrorHandling -_02016AE2: - ldr r0, _02016AF4 ; =UNK_021C4D28 - ldr r1, [r0, #0xc] - ldrh r0, [r1, r4] - sub r0, r0, #0x1 - strh r0, [r1, r4] - pop {r4-r6, pc} -_02016AEE: - bl ErrorHandling - pop {r4-r6, pc} - .balign 4 -_02016AF4: .word UNK_021C4D28 - - thumb_func_start FUN_02016AF8 -FUN_02016AF8: ; 0x02016AF8 - push {r3, lr} - ldr r1, _02016B1C ; =UNK_021C4D28 - ldrh r2, [r1, #0x14] - cmp r0, r2 - bhs _02016B12 - ldr r2, [r1, #0x0] - ldr r1, [r1, #0x10] - ldrb r0, [r1, r0] - lsl r0, r0, #0x2 - ldr r0, [r2, r0] - bl FUN_020ADDC8 - pop {r3, pc} -_02016B12: - bl ErrorHandling - mov r0, #0x0 - pop {r3, pc} - nop -_02016B1C: .word UNK_021C4D28 - - thumb_func_start FUN_02016B20 -FUN_02016B20: ; 0x02016B20 - push {r4, lr} - ldr r4, _02016B40 ; =UNK_021C4D28 - ldrh r3, [r4, #0x14] - cmp r1, r3 - bhs _02016B3A - ldr r3, [r4, #0x0] - ldr r4, [r4, #0x10] - ldrb r1, [r4, r1] - lsl r1, r1, #0x2 - ldr r1, [r3, r1] - bl FUN_020AE82C - pop {r4, pc} -_02016B3A: - bl ErrorHandling - pop {r4, pc} - .balign 4 -_02016B40: .word UNK_021C4D28 - - thumb_func_start FUN_02016B44 -FUN_02016B44: ; 0x02016B44 - push {r3-r5, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bl OS_GetProcMode - cmp r0, #0x12 - bne _02016B56 - bl ErrorHandling -_02016B56: - add r0, r5, #0x0 - sub r0, #0x10 - bl FUN_020ADDC0 - add r4, #0x10 - cmp r0, r4 - blo _02016B84 - sub r2, r5, #0x4 - ldr r0, _02016B8C ; =UNK_021C4D28 - ldr r2, [r2, #0x0] - ldr r1, [r0, #0x0] - lsl r2, r2, #0x18 - ldr r0, [r0, #0x10] - lsr r2, r2, #0x18 - ldrb r0, [r0, r2] - sub r5, #0x10 - add r2, r4, #0x0 - lsl r0, r0, #0x2 - ldr r0, [r1, r0] - add r1, r5, #0x0 - bl FUN_020ADE2C - pop {r3-r5, pc} -_02016B84: - bl ErrorHandling - pop {r3-r5, pc} - nop -_02016B8C: .word UNK_021C4D28 - - thumb_func_start FUN_02016B90 -FUN_02016B90: ; 0x02016B90 - mov r0, #0x1 - bx lr diff --git a/arm9/asm/unk_02016B94.s b/arm9/asm/unk_02016B94.s index 61fc9de5..3c92650d 100644 --- a/arm9/asm/unk_02016B94.s +++ b/arm9/asm/unk_02016B94.s @@ -89,8 +89,8 @@ FUN_02016BBC: ; 0x02016BBC asr r0, r0, #0x3 and r0, r1 str r0, [r2, #0x0] - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers pop {r4, pc} nop _02016BF0: .word 0xC7FFFFFF @@ -105,12 +105,12 @@ FUN_02016BF4: ; 0x02016BF4 ldr r1, [r2, #0x4] ldr r2, [r2, #0xc] bl GX_SetGraphicsMode - bl FUN_0201E6D8 + bl GX_DisableEngineALayers pop {r3, pc} _02016C0C: ldr r0, [r2, #0x8] bl GXS_SetGraphicsMode - bl FUN_0201E740 + bl GX_DisableEngineBLayers pop {r3, pc} thumb_func_start FUN_02016C18 @@ -148,7 +148,7 @@ _02016C42: ; jump table (using 16-bit offset) _02016C52: mov r0, #0x1 add r1, r0, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldrb r3, [r4, #0x14] ldrb r1, [r4, #0x12] ldrb r0, [r4, #0x11] @@ -193,7 +193,7 @@ _02016CA0: _02016CAA: mov r0, #0x2 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldrb r3, [r4, #0x14] ldrb r1, [r4, #0x12] ldrb r0, [r4, #0x11] @@ -238,7 +238,7 @@ _02016CF8: _02016D02: mov r0, #0x4 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [sp, #0x8] cmp r0, #0x0 beq _02016D18 @@ -324,7 +324,7 @@ _02016D9A: _02016DA4: mov r0, #0x8 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [sp, #0x8] cmp r0, #0x0 beq _02016DBA @@ -410,7 +410,7 @@ _02016E3C: _02016E46: mov r0, #0x1 add r1, r0, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldrb r3, [r4, #0x14] ldrb r1, [r4, #0x12] ldrb r0, [r4, #0x11] @@ -455,7 +455,7 @@ _02016E94: _02016E9E: mov r0, #0x2 mov r1, #0x1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldrb r2, [r4, #0x13] ldrb r1, [r4, #0x12] ldrb r0, [r4, #0x11] @@ -500,7 +500,7 @@ _02016EEC: _02016EF6: mov r0, #0x4 mov r1, #0x1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [sp, #0x8] cmp r0, #0x0 beq _02016F0C @@ -586,7 +586,7 @@ _02016F8E: _02016F98: mov r0, #0x8 mov r1, #0x1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [sp, #0x8] cmp r0, #0x0 beq _02016FAE @@ -1958,35 +1958,35 @@ _0201798E: ; jump table (using 16-bit offset) .short _020179D6 - _0201798E - 2; case 7 _0201799E: mov r0, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r3, pc} _020179A6: mov r0, #0x2 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r3, pc} _020179AE: mov r0, #0x4 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r3, pc} _020179B6: mov r0, #0x8 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r3, pc} _020179BE: mov r0, #0x1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r3, pc} _020179C6: mov r0, #0x2 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r3, pc} _020179CE: mov r0, #0x4 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r3, pc} _020179D6: mov r0, #0x8 - bl FUN_0201E74C + bl GX_EngineBToggleLayers _020179DC: pop {r3, pc} .balign 4 diff --git a/arm9/asm/unk_0201B1A8.s b/arm9/asm/unk_0201B1A8.s index baf31fcb..05245bc6 100644 --- a/arm9/asm/unk_0201B1A8.s +++ b/arm9/asm/unk_0201B1A8.s @@ -199,7 +199,7 @@ FUN_0201B314: ; 0x0201B314 push {r3, lr} mov r0, #0x1 add r1, r0, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _0201B380 ; =0x04000008 mov r1, #0x3 ldrh r2, [r0, #0x0] diff --git a/arm9/asm/unk_0201E66C.s b/arm9/asm/unk_0201E66C.s deleted file mode 100644 index 5f5dcb68..00000000 --- a/arm9/asm/unk_0201E66C.s +++ /dev/null @@ -1,197 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - - .section .bss - - .global UNK_021C599C -UNK_021C599C: ; 0x021C599C - .space 0x8 - - .text - - thumb_func_start FUN_0201E66C -FUN_0201E66C: ; 0x0201E66C - push {r4, lr} - add r4, r0, #0x0 - bl GX_ResetBankForBG - bl GX_ResetBankForBGExtPltt - bl GX_ResetBankForSubBG - bl FUN_020C6034 - bl GX_ResetBankForOBJ - bl GX_ResetBankForOBJExtPltt - bl FUN_020C605C - bl GX_ResetBankForSubOBJ - bl GX_ResetBankForTex - bl GX_ResetBankForTexPltt - ldr r0, [r4, #0x0] - bl GX_SetBankForBG - ldr r0, [r4, #0x4] - bl GX_SetBankForBGExtPltt - ldr r0, [r4, #0x8] - bl GX_SetBankForSubBG - ldr r0, [r4, #0xc] - bl GX_SetBankForSubBGExtPltt - ldr r0, [r4, #0x10] - bl GX_SetBankForOBJ - ldr r0, [r4, #0x14] - bl GX_SetBankForOBJExtPltt - ldr r0, [r4, #0x18] - bl GX_SetBankForSubOBJ - ldr r0, [r4, #0x1c] - bl GX_SetBankForSubOBJExtPltt - ldr r0, [r4, #0x20] - bl GX_SetBankForTex - ldr r0, [r4, #0x24] - bl GX_SetBankForTexPltt - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0201E6D8 -FUN_0201E6D8: ; 0x0201E6D8 - ldr r0, _0201E6E0 ; =UNK_021C599C - mov r1, #0x0 - str r1, [r0, #0x4] - bx lr - .balign 4 -_0201E6E0: .word UNK_021C599C - - thumb_func_start FUN_0201E6E4 -FUN_0201E6E4: ; 0x0201E6E4 - cmp r1, #0x1 - bne _0201E6F2 - ldr r1, _0201E718 ; =UNK_021C599C - ldr r1, [r1, #0x4] - tst r1, r0 - beq _0201E6FA - bx lr -_0201E6F2: - ldr r1, _0201E718 ; =UNK_021C599C - ldr r1, [r1, #0x4] - tst r1, r0 - beq _0201E714 -_0201E6FA: - ldr r1, _0201E718 ; =UNK_021C599C - ldr r2, [r1, #0x4] - add r3, r2, #0x0 - eor r3, r0 - mov r2, #0x1 - lsl r2, r2, #0x1a - str r3, [r1, #0x4] - ldr r1, [r2, #0x0] - ldr r0, _0201E71C ; =0xFFFFE0FF - and r1, r0 - lsl r0, r3, #0x8 - orr r0, r1 - str r0, [r2, #0x0] -_0201E714: - bx lr - nop -_0201E718: .word UNK_021C599C -_0201E71C: .word 0xFFFFE0FF - - thumb_func_start FUN_0201E720 -FUN_0201E720: ; 0x0201E720 - ldr r1, _0201E738 ; =UNK_021C599C - mov r3, #0x1 - str r0, [r1, #0x4] - lsl r3, r3, #0x1a - ldr r2, [r3, #0x0] - ldr r1, _0201E73C ; =0xFFFFE0FF - lsl r0, r0, #0x8 - and r1, r2 - orr r0, r1 - str r0, [r3, #0x0] - bx lr - nop -_0201E738: .word UNK_021C599C -_0201E73C: .word 0xFFFFE0FF - - thumb_func_start FUN_0201E740 -FUN_0201E740: ; 0x0201E740 - ldr r0, _0201E748 ; =UNK_021C599C - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - .balign 4 -_0201E748: .word UNK_021C599C - - thumb_func_start FUN_0201E74C -FUN_0201E74C: ; 0x0201E74C - cmp r1, #0x1 - bne _0201E75A - ldr r1, _0201E77C ; =UNK_021C599C - ldr r1, [r1, #0x0] - tst r1, r0 - beq _0201E762 - bx lr -_0201E75A: - ldr r1, _0201E77C ; =UNK_021C599C - ldr r1, [r1, #0x0] - tst r1, r0 - beq _0201E77A -_0201E762: - ldr r1, _0201E77C ; =UNK_021C599C - ldr r2, [r1, #0x0] - add r3, r2, #0x0 - eor r3, r0 - ldr r2, _0201E780 ; =0x04001000 - str r3, [r1, #0x0] - ldr r1, [r2, #0x0] - ldr r0, _0201E784 ; =0xFFFFE0FF - and r1, r0 - lsl r0, r3, #0x8 - orr r0, r1 - str r0, [r2, #0x0] -_0201E77A: - bx lr - .balign 4 -_0201E77C: .word UNK_021C599C -_0201E780: .word 0x04001000 -_0201E784: .word 0xFFFFE0FF - - thumb_func_start FUN_0201E788 -FUN_0201E788: ; 0x0201E788 - push {r3, lr} - bl GX_DispOn - ldr r2, _0201E79C ; =0x04001000 - mov r0, #0x1 - ldr r1, [r2, #0x0] - lsl r0, r0, #0x10 - orr r0, r1 - str r0, [r2, #0x0] - pop {r3, pc} - .balign 4 -_0201E79C: .word 0x04001000 - - thumb_func_start FUN_0201E7A0 -FUN_0201E7A0: ; 0x0201E7A0 - ldr r0, _0201E7C0 ; =gMain + 0x60 - ldr r2, _0201E7C4 ; =0x04000304 - ldrb r0, [r0, #0x5] - cmp r0, #0x0 - bne _0201E7B4 - ldrh r1, [r2, #0x0] - lsr r0, r2, #0xb - orr r0, r1 - strh r0, [r2, #0x0] - bx lr -_0201E7B4: - ldrh r1, [r2, #0x0] - ldr r0, _0201E7C8 ; =0xFFFF7FFF - and r0, r1 - strh r0, [r2, #0x0] - bx lr - nop -_0201E7C0: .word gMain + 0x60 -_0201E7C4: .word 0x04000304 -_0201E7C8: .word 0xFFFF7FFF - - thumb_func_start FUN_0201E7CC -FUN_0201E7CC: ; 0x0201E7CC - ldr r0, _0201E7D4 ; =UNK_021C599C - ldr r0, [r0, #0x4] - bx lr - nop -_0201E7D4: .word UNK_021C599C diff --git a/arm9/asm/unk_02020AFC.s b/arm9/asm/unk_02020AFC.s deleted file mode 100644 index 3d43d259..00000000 --- a/arm9/asm/unk_02020AFC.s +++ /dev/null @@ -1,165 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .bss - - .global UNK_021C59B0 -UNK_021C59B0: ; 0x021C59B0 - .space 0xc - - .text - - thumb_func_start FUN_02020AFC -FUN_02020AFC: ; 0x02020AFC - push {r3, lr} - ldr r0, _02020B24 ; =UNK_021C59B0 - mov r2, #0x0 - str r2, [r0, #0x4] - str r2, [r0, #0x8] - ldr r1, _02020B28 ; =0x0400010E - str r2, [r0, #0x0] - strh r2, [r1, #0x0] - sub r0, r1, #0x2 - strh r2, [r0, #0x0] - mov r0, #0xc1 - strh r0, [r1, #0x0] - ldr r1, _02020B2C ; =FUN_02020B30 - mov r0, #0x40 - bl OS_SetIrqFunction - mov r0, #0x40 - bl OS_EnableIrqMask - pop {r3, pc} - .balign 4 -_02020B24: .word UNK_021C59B0 -_02020B28: .word 0x0400010E -_02020B2C: .word FUN_02020B30 - - thumb_func_start FUN_02020B30 -FUN_02020B30: ; 0x02020B30 - ldr r0, _02020B68 ; =UNK_021C59B0 - mov r3, #0x0 - ldr r1, [r0, #0x4] - ldr r2, [r0, #0x8] - add r1, r1, #0x1 - adc r2, r3 - str r1, [r0, #0x4] - str r2, [r0, #0x8] - ldr r1, [r0, #0x0] - cmp r1, #0x0 - beq _02020B54 - ldr r2, _02020B6C ; =0x0400010E - strh r3, [r2, #0x0] - sub r1, r2, #0x2 - strh r3, [r1, #0x0] - mov r1, #0xc1 - strh r1, [r2, #0x0] - str r3, [r0, #0x0] -_02020B54: - ldr r3, _02020B70 ; =0x027E0000 - ldr r1, _02020B74 ; =0x00003FF8 - mov r0, #0x40 - ldr r2, [r3, r1] - orr r2, r0 - str r2, [r3, r1] - ldr r3, _02020B78 ; =OS_SetIrqFunction - ldr r1, _02020B7C ; =FUN_02020B30 - bx r3 - nop -_02020B68: .word UNK_021C59B0 -_02020B6C: .word 0x0400010E -_02020B70: .word 0x027E0000 -_02020B74: .word 0x00003FF8 -_02020B78: .word OS_SetIrqFunction -_02020B7C: .word FUN_02020B30 - - thumb_func_start FUN_02020B80 -FUN_02020B80: ; 0x02020B80 - push {r4-r5, lr} - sub sp, #0xc - bl OS_DisableInterrupts - ldr r1, _02020BE4 ; =0x0400010C - add r3, sp, #0x0 - ldrh r1, [r1, #0x0] - ldr r2, _02020BE8 ; =0x0000FFFF - strh r1, [r3, #0x0] - ldr r1, _02020BEC ; =UNK_021C59B0 - ldr r5, [r1, #0x4] - ldr r4, [r1, #0x8] - mov r1, #0x0 - mvn r1, r1 - and r1, r5 - str r1, [sp, #0x4] - and r2, r4 - ldr r1, _02020BF0 ; =0x04000214 - str r2, [sp, #0x8] - ldr r2, [r1, #0x0] - mov r1, #0x40 - tst r2, r1 - beq _02020BC4 - ldrh r2, [r3, #0x0] - lsl r1, r1, #0x9 - tst r1, r2 - bne _02020BC4 - ldr r2, [sp, #0x4] - mov r1, #0x0 - ldr r3, [sp, #0x8] - add r2, r2, #0x1 - adc r3, r1 - str r2, [sp, #0x4] - str r3, [sp, #0x8] -_02020BC4: - bl OS_RestoreInterrupts - ldr r2, [sp, #0x4] - ldr r1, [sp, #0x8] - lsr r0, r2, #0x10 - lsl r1, r1, #0x10 - orr r1, r0 - add r0, sp, #0x0 - lsl r3, r2, #0x10 - ldrh r2, [r0, #0x0] - asr r0, r2, #0x1f - orr r1, r0 - add r0, r3, #0x0 - orr r0, r2 - add sp, #0xc - pop {r4-r5, pc} - .balign 4 -_02020BE4: .word 0x0400010C -_02020BE8: .word 0x0000FFFF -_02020BEC: .word UNK_021C59B0 -_02020BF0: .word 0x04000214 - - thumb_func_start FUN_02020BF4 -FUN_02020BF4: ; 0x02020BF4 - ldr r3, _02020BF8 ; =FUN_02020B80 - bx r3 - .balign 4 -_02020BF8: .word FUN_02020B80 - - thumb_func_start FUN_02020BFC -FUN_02020BFC: ; 0x02020BFC - push {r3, lr} - lsr r2, r0, #0x1a - lsl r1, r1, #0x6 - orr r1, r2 - ldr r2, _02020C10 ; =0x000082EA - lsl r0, r0, #0x6 - mov r3, #0x0 - bl _ll_udiv - pop {r3, pc} - .balign 4 -_02020C10: .word 0x000082EA - - thumb_func_start FUN_02020C14 -FUN_02020C14: ; 0x02020C14 - push {r3, lr} - lsr r2, r0, #0x1a - lsl r1, r1, #0x6 - orr r1, r2 - ldr r2, _02020C28 ; =0x01FF6210 - lsl r0, r0, #0x6 - mov r3, #0x0 - bl _ll_udiv - pop {r3, pc} - .balign 4 -_02020C28: .word 0x01FF6210 diff --git a/arm9/asm/unk_02022318.s b/arm9/asm/unk_02022318.s index 7f8590a6..cf87cdb9 100644 --- a/arm9/asm/unk_02022318.s +++ b/arm9/asm/unk_02022318.s @@ -99,7 +99,7 @@ FUN_020223D4: ; 0x020223D4 push {r3, lr} mov r0, #0x1 add r1, r0, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _02022438 ; =0x04000008 mov r1, #0x3 ldrh r2, [r0, #0x0] diff --git a/arm9/asm/unk_02024E64.s b/arm9/asm/unk_02024E64.s deleted file mode 100644 index 0234a504..00000000 --- a/arm9/asm/unk_02024E64.s +++ /dev/null @@ -1,118 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02024E64 -FUN_02024E64: ; 0x02024E64 - ldr r0, _02024E68 ; =0x0000074C - bx lr - .balign 4 -_02024E68: .word 0x0000074C - - thumb_func_start FUN_02024E6C -FUN_02024E6C: ; 0x02024E6C - push {r4, lr} - add r4, r0, #0x0 - ldr r2, _02024EA4 ; =0x0000074C - mov r0, #0x0 - add r1, r4, #0x0 - bl MIi_CpuClearFast - add r0, r4, #0x0 - bl FUN_020250A4 - mov r0, #0x7 - lsl r0, r0, #0x8 - add r0, r4, r0 - bl FUN_02025484 - ldr r1, _02024EA8 ; =0x00000724 - ldr r0, _02024EAC ; =0x0000FFFF - add r1, r4, r1 - mov r2, #0x8 - bl MIi_CpuClear16 - ldr r1, _02024EB0 ; =0x00000734 - ldr r0, _02024EAC ; =0x0000FFFF - add r1, r4, r1 - mov r2, #0xb - bl MIi_CpuClear16 - pop {r4, pc} - .balign 4 -_02024EA4: .word 0x0000074C -_02024EA8: .word 0x00000724 -_02024EAC: .word 0x0000FFFF -_02024EB0: .word 0x00000734 - - thumb_func_start FUN_02024EB4 -FUN_02024EB4: ; 0x02024EB4 - ldr r3, _02024EBC ; =SavArray_get - mov r1, #0xa - bx r3 - nop -_02024EBC: .word SavArray_get - - thumb_func_start FUN_02024EC0 -FUN_02024EC0: ; 0x02024EC0 - ldr r3, _02024EC8 ; =FUN_02022634 - mov r1, #0xa - bx r3 - nop -_02024EC8: .word FUN_02022634 - - thumb_func_start FUN_02024ECC -FUN_02024ECC: ; 0x02024ECC - ldr r3, _02024ED4 ; =SavArray_get - mov r1, #0xa - bx r3 - nop -_02024ED4: .word SavArray_get - - thumb_func_start FUN_02024ED8 -FUN_02024ED8: ; 0x02024ED8 - push {r3, lr} - mov r1, #0xa - bl SavArray_get - mov r1, #0x7 - lsl r1, r1, #0x8 - add r0, r0, r1 - pop {r3, pc} - - thumb_func_start FUN_02024EE8 -FUN_02024EE8: ; 0x02024EE8 - ldr r1, _02024EF0 ; =0x00000724 - add r0, r0, r1 - bx lr - nop -_02024EF0: .word 0x00000724 - - thumb_func_start FUN_02024EF4 -FUN_02024EF4: ; 0x02024EF4 - add r2, r0, #0x0 - add r0, r1, #0x0 - ldr r1, _02024F04 ; =0x00000724 - ldr r3, _02024F08 ; =CopyStringToU16Array - add r1, r2, r1 - mov r2, #0x8 - bx r3 - nop -_02024F04: .word 0x00000724 -_02024F08: .word CopyStringToU16Array - - thumb_func_start FUN_02024F0C -FUN_02024F0C: ; 0x02024F0C - ldr r1, _02024F14 ; =0x00000734 - add r0, r0, r1 - bx lr - nop -_02024F14: .word 0x00000734 - - thumb_func_start FUN_02024F18 -FUN_02024F18: ; 0x02024F18 - add r2, r0, #0x0 - add r0, r1, #0x0 - ldr r1, _02024F28 ; =0x00000734 - ldr r3, _02024F2C ; =CopyStringToU16Array - add r1, r2, r1 - mov r2, #0xb - bx r3 - nop -_02024F28: .word 0x00000734 -_02024F2C: .word CopyStringToU16Array diff --git a/arm9/asm/unk_02025484.s b/arm9/asm/unk_02025484.s deleted file mode 100644 index 5f869289..00000000 --- a/arm9/asm/unk_02025484.s +++ /dev/null @@ -1,41 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02025484 -FUN_02025484: ; 0x02025484 - ldr r3, _0202548C ; =MI_CpuFill8 - mov r1, #0x0 - mov r2, #0x24 - bx r3 - .balign 4 -_0202548C: .word MI_CpuFill8 - - thumb_func_start FUN_02025490 -FUN_02025490: ; 0x02025490 - push {r3-r5, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - bl FUN_02025484 - str r4, [r5, #0x0] - add r0, r5, #0x4 - pop {r3-r5, pc} - - thumb_func_start FUN_020254A0 -FUN_020254A0: ; 0x020254A0 - push {r4, lr} - add r4, r0, #0x0 - ldr r0, [r4, #0x0] - cmp r0, r1 - beq _020254AE - bl ErrorHandling -_020254AE: - add r0, r4, #0x4 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_020254B4 -FUN_020254B4: ; 0x020254B4 - ldr r0, [r0, #0x0] - bx lr diff --git a/arm9/asm/unk_02028980.s b/arm9/asm/unk_02028980.s index ad0b1145..8c9178e7 100644 --- a/arm9/asm/unk_02028980.s +++ b/arm9/asm/unk_02028980.s @@ -2215,7 +2215,7 @@ FUN_02029880: ; 0x02029880 cmp r0, #0x1 bne _02029942 add r0, r4, #0x0 - bl FUN_02034824 + bl MapHeader_GetMapSec lsl r0, r0, #0x10 lsr r0, r0, #0x10 add r1, r6, #0x0 @@ -2248,7 +2248,7 @@ _020298DE: b _02029942 _020298EE: add r0, r4, #0x0 - bl FUN_02034824 + bl MapHeader_GetMapSec add r7, r0, #0x0 lsl r0, r7, #0x10 lsr r0, r0, #0x10 diff --git a/arm9/asm/unk_0202F150.s b/arm9/asm/unk_0202F150.s deleted file mode 100644 index a4efe28d..00000000 --- a/arm9/asm/unk_0202F150.s +++ /dev/null @@ -1,4516 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - - .section .bss - - .global UNK_021C59F4 -UNK_021C59F4: ; 0x021C59F4 - .space 0x8 - - .section .data - - .global UNK_02105D58 -UNK_02105D58: ; 0x02105D58 - .byte 4, 4 - - .text - - thumb_func_start FUN_0202F150 -FUN_0202F150: ; 0x0202F150 - push {r4-r6, lr} - add r6, r1, #0x0 - mov r4, #0x0 - ldr r1, _0202F2BC ; =UNK_021C59F4 - cmp r0, #0x0 - strb r4, [r1, #0x0] - beq _0202F25C - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r5, r0, #0x1 - ldr r0, _0202F2BC ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _0202F178 - mov r0, #0x1 - pop {r4-r6, pc} -_0202F178: - mov r0, #0xf - bl FUN_02031480 - ldr r1, _0202F2C0 ; =0x0000068C - mov r0, #0xf - bl AllocFromHeap - ldr r1, _0202F2BC ; =UNK_021C59F4 - ldr r2, _0202F2C0 ; =0x0000068C - str r0, [r1, #0x4] - add r1, r4, #0x0 - bl MI_CpuFill8 - ldr r2, _0202F2BC ; =UNK_021C59F4 - ldr r1, _0202F2C4 ; =0x00000658 - ldr r0, [r2, #0x4] - add r6, #0x40 - str r6, [r0, r1] - add r0, r1, #0x0 - ldr r3, [r2, #0x4] - add r6, r4, #0x0 - add r0, #0x25 - strb r6, [r3, r0] - add r0, r1, #0x0 - ldr r3, [r2, #0x4] - mov r6, #0x1b - add r0, #0x26 - strb r6, [r3, r0] - ldr r2, [r2, #0x4] - mov r0, #0xf - ldr r1, [r2, r1] - lsl r1, r1, #0x1 - bl AllocFromHeap - ldr r2, _0202F2BC ; =UNK_021C59F4 - ldr r1, _0202F2C8 ; =0x0000045C - ldr r3, [r2, #0x4] - str r0, [r3, r1] - ldr r2, [r2, #0x4] - ldr r1, _0202F2C4 ; =0x00000658 - mov r0, #0xf - ldr r1, [r2, r1] - bl AllocFromHeap - ldr r2, _0202F2BC ; =UNK_021C59F4 - mov r1, #0x46 - ldr r3, [r2, #0x4] - lsl r1, r1, #0x4 - str r0, [r3, r1] - ldr r2, [r2, #0x4] - ldr r1, _0202F2C4 ; =0x00000658 - mov r0, #0xf - ldr r1, [r2, r1] - mul r1, r5 - bl AllocFromHeap - ldr r2, _0202F2BC ; =UNK_021C59F4 - ldr r1, _0202F2CC ; =0x00000458 - ldr r3, [r2, #0x4] - str r0, [r3, r1] - ldr r2, [r2, #0x4] - ldr r1, _0202F2C4 ; =0x00000658 - mov r0, #0xf - ldr r1, [r2, r1] - mul r1, r5 - bl AllocFromHeap - ldr r1, _0202F2BC ; =UNK_021C59F4 - ldr r2, [r1, #0x4] - ldr r1, _0202F2D0 ; =0x00000454 - str r0, [r2, r1] - bl FUN_02033534 - cmp r0, #0xa - ldr r2, _0202F2D4 ; =0x0000054C - bne _0202F236 - ldr r0, _0202F2BC ; =UNK_021C59F4 - mov r1, #0x64 - ldr r3, [r0, #0x4] - add r0, r3, r2 - sub r2, #0xe8 - add r2, r3, r2 - bl FUN_0202D7D8 - ldr r0, _0202F2BC ; =UNK_021C59F4 - mov r1, #0x32 - ldr r3, [r0, #0x4] - ldr r2, _0202F2D8 ; =0x0000056C - lsl r1, r1, #0x4 - add r0, r3, r2 - sub r2, #0x90 - add r2, r3, r2 - bl FUN_0202D7D8 - b _0202F268 -_0202F236: - ldr r0, _0202F2BC ; =UNK_021C59F4 - mov r1, #0x14 - ldr r3, [r0, #0x4] - add r0, r3, r2 - sub r2, #0xe8 - add r2, r3, r2 - bl FUN_0202D7D8 - ldr r0, _0202F2BC ; =UNK_021C59F4 - add r1, r6, #0x0 - ldr r3, [r0, #0x4] - ldr r2, _0202F2D8 ; =0x0000056C - add r1, #0xfd - add r0, r3, r2 - sub r2, #0x90 - add r2, r3, r2 - bl FUN_0202D7D8 - b _0202F268 -_0202F25C: - ldr r0, [r1, #0x4] - mov r4, #0x1 - cmp r0, #0x0 - bne _0202F268 - bl ErrorHandling -_0202F268: - ldr r2, _0202F2BC ; =UNK_021C59F4 - ldr r1, _0202F2DC ; =0x0000065C - ldr r3, [r2, #0x4] - mov r0, #0x0 - strh r0, [r3, r1] - mov r5, #0xff - add r1, #0x1b -_0202F276: - ldr r3, [r2, #0x4] - add r3, r3, r0 - add r0, r0, #0x1 - strb r5, [r3, r1] - cmp r0, #0x4 - blt _0202F276 - cmp r4, #0x0 - bne _0202F28A - bl FUN_0202F2F0 -_0202F28A: - ldr r0, _0202F2BC ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202F2E0 ; =0x000005F8 - add r0, r1, r0 - bl FUN_020312BC - cmp r4, #0x0 - bne _0202F2AC - mov r1, #0x0 - ldr r0, _0202F2E4 ; =FUN_0202FB20 - add r2, r1, #0x0 - bl FUN_0200CA60 - ldr r1, _0202F2BC ; =UNK_021C59F4 - ldr r2, [r1, #0x4] - ldr r1, _0202F2E8 ; =0x00000548 - str r0, [r2, r1] -_0202F2AC: - ldr r0, _0202F2BC ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _0202F2EC ; =0x00000687 - strb r2, [r1, r0] - mov r0, #0x1 - pop {r4-r6, pc} - nop -_0202F2BC: .word UNK_021C59F4 -_0202F2C0: .word 0x0000068C -_0202F2C4: .word 0x00000658 -_0202F2C8: .word 0x0000045C -_0202F2CC: .word 0x00000458 -_0202F2D0: .word 0x00000454 -_0202F2D4: .word 0x0000054C -_0202F2D8: .word 0x0000056C -_0202F2DC: .word 0x0000065C -_0202F2E0: .word 0x000005F8 -_0202F2E4: .word FUN_0202FB20 -_0202F2E8: .word 0x00000548 -_0202F2EC: .word 0x00000687 - - thumb_func_start FUN_0202F2F0 -FUN_0202F2F0: ; 0x0202F2F0 - push {r3-r7, lr} - ldr r3, _0202F54C ; =UNK_021C59F4 - ldr r2, _0202F550 ; =0x0000062C - ldr r1, [r3, #0x4] - mov r0, #0x0 - strb r0, [r1, r2] - ldr r4, [r3, #0x4] - add r1, r2, #0x1 - strb r0, [r4, r1] - add r1, r2, #0x0 - ldr r4, [r3, #0x4] - add r1, #0x53 - strb r0, [r4, r1] - ldr r1, [r3, #0x4] - add r2, #0x54 - strb r0, [r1, r2] - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r6, r0, #0x1 - ldr r0, _0202F54C ; =UNK_021C59F4 - ldr r2, _0202F554 ; =0x00000658 - ldr r3, [r0, #0x4] - ldr r0, _0202F558 ; =0x00000458 - mov r1, #0x0 - ldr r0, [r3, r0] - ldr r3, [r3, r2] - add r2, r3, #0x0 - mul r2, r6 - bl MI_CpuFill8 - mov r4, #0x0 - cmp r6, #0x0 - ble _0202F360 - ldr r7, _0202F54C ; =UNK_021C59F4 - add r5, r4, #0x0 -_0202F33E: - ldr r3, [r7, #0x4] - ldr r0, _0202F554 ; =0x00000658 - ldr r1, _0202F558 ; =0x00000458 - ldr r2, [r3, r0] - ldr r0, _0202F55C ; =0x000004E8 - add r0, r3, r0 - ldr r3, [r3, r1] - add r1, r4, #0x0 - mul r1, r2 - add r0, r0, r5 - add r1, r3, r1 - bl FUN_0202D394 - add r4, r4, #0x1 - add r5, #0xc - cmp r4, r6 - blt _0202F33E -_0202F360: - ldr r0, _0202F54C ; =UNK_021C59F4 - ldr r2, _0202F554 ; =0x00000658 - ldr r3, [r0, #0x4] - ldr r0, _0202F560 ; =0x00000454 - mov r1, #0x0 - ldr r0, [r3, r0] - ldr r3, [r3, r2] - add r2, r3, #0x0 - mul r2, r6 - bl MI_CpuFill8 - mov r5, #0x0 - cmp r6, #0x0 - ble _0202F3A2 - ldr r7, _0202F54C ; =UNK_021C59F4 - add r4, r5, #0x0 -_0202F380: - ldr r3, [r7, #0x4] - ldr r0, _0202F554 ; =0x00000658 - ldr r1, _0202F560 ; =0x00000454 - ldr r2, [r3, r0] - ldr r0, _0202F564 ; =0x0000047C - add r0, r3, r0 - ldr r3, [r3, r1] - add r1, r5, #0x0 - mul r1, r2 - add r0, r0, r4 - add r1, r3, r1 - bl FUN_0202D394 - add r5, r5, #0x1 - add r4, #0xc - cmp r5, r6 - blt _0202F380 -_0202F3A2: - ldr r0, _0202F54C ; =UNK_021C59F4 - mov r2, #0x6 - ldr r1, [r0, #0x4] - mov r0, #0xb5 - lsl r0, r0, #0x2 - add r0, r1, r0 - mov r1, #0x0 - lsl r2, r2, #0x6 - bl MI_CpuFill8 - ldr r0, _0202F54C ; =UNK_021C59F4 - mov r1, #0xb5 - ldr r2, [r0, #0x4] - ldr r0, _0202F568 ; =0x000004DC - lsl r1, r1, #0x2 - add r0, r2, r0 - add r1, r2, r1 - mov r2, #0x6 - lsl r2, r2, #0x6 - bl FUN_0202D394 - mov r0, #0xee - add r2, r0, #0x0 - mov r3, #0x85 - ldr r4, _0202F54C ; =UNK_021C59F4 - mov r1, #0x0 - add r2, #0x66 - lsl r3, r3, #0x2 -_0202F3DA: - ldr r5, [r4, #0x4] - add r5, r5, r1 - strb r0, [r5, r2] - ldr r5, [r4, #0x4] - add r5, r5, r1 - add r1, r1, #0x1 - strb r0, [r5, r3] - cmp r1, #0xc0 - blt _0202F3DA - ldr r0, _0202F54C ; =UNK_021C59F4 - mov r2, #0x42 - ldr r0, [r0, #0x4] - mov r1, #0x0 - add r0, #0x4c - lsl r2, r2, #0x2 - bl MI_CpuFill8 - ldr r0, _0202F54C ; =UNK_021C59F4 - mov r2, #0x42 - ldr r1, [r0, #0x4] - ldr r0, _0202F56C ; =0x00000464 - lsl r2, r2, #0x2 - add r0, r1, r0 - add r1, #0x4c - bl FUN_0202D394 - ldr r1, _0202F54C ; =UNK_021C59F4 - mov r2, #0xff - ldr r0, [r1, #0x4] - mov r3, #0x1 - strb r2, [r0, #0x0] - ldr r0, [r1, #0x4] - add r0, #0x26 - strb r2, [r0, #0x0] - mov r2, #0xee -_0202F420: - ldr r0, [r1, #0x4] - strb r2, [r0, r3] - ldr r0, [r1, #0x4] - add r0, r0, r3 - add r0, #0x26 - add r3, r3, #0x1 - strb r2, [r0, #0x0] - cmp r3, #0x26 - blt _0202F420 - ldr r0, _0202F54C ; =UNK_021C59F4 - ldr r2, _0202F554 ; =0x00000658 - ldr r3, [r0, #0x4] - ldr r0, _0202F570 ; =0x0000045C - ldr r2, [r3, r2] - ldr r0, [r3, r0] - mov r1, #0x0 - lsl r2, r2, #0x1 - bl MI_CpuFill8 - ldr r0, _0202F54C ; =UNK_021C59F4 - mov r1, #0x47 - ldr r3, [r0, #0x4] - ldr r2, _0202F554 ; =0x00000658 - lsl r1, r1, #0x4 - add r0, r3, r1 - sub r1, #0x14 - ldr r2, [r3, r2] - ldr r1, [r3, r1] - lsl r2, r2, #0x1 - bl FUN_0202D394 - mov r2, #0x0 - ldr r0, _0202F54C ; =UNK_021C59F4 - ldr r1, _0202F574 ; =0x00000684 - ldr r3, [r0, #0x4] - mov r12, r2 - strb r2, [r3, r1] - ldr r3, [r0, #0x4] - add r1, r1, #0x1 - strb r2, [r3, r1] - add r1, r2, #0x0 - add r7, r2, #0x0 - add r6, r2, #0x0 -_0202F476: - ldr r3, [r0, #0x4] - add r4, r3, r2 - ldr r3, _0202F578 ; =0x0000065F - strb r6, [r4, r3] - ldr r3, [r0, #0x4] - ldr r4, _0202F57C ; =0x00000667 - add r5, r3, r2 - mov r3, #0x1 - strb r3, [r5, r4] - ldr r3, [r0, #0x4] - add r4, #0x8 - add r5, r3, r2 - mov r3, #0x1 - strb r3, [r5, r4] - ldr r4, [r0, #0x4] - mov r3, r12 - add r4, r4, r3 - mov r3, #0x61 - lsl r3, r3, #0x4 - strh r6, [r4, r3] - ldr r3, [r0, #0x4] - mov r4, #0xee - add r5, r3, r1 - ldr r3, _0202F580 ; =0x00000596 - add r2, r2, #0x1 - strb r4, [r5, r3] - ldr r3, [r0, #0x4] - ldr r4, _0202F584 ; =0x0000FFFF - add r5, r3, r1 - ldr r3, _0202F588 ; =0x00000594 - strh r4, [r5, r3] - ldr r3, [r0, #0x4] - add r4, r3, r1 - mov r3, #0x59 - lsl r3, r3, #0x4 - str r6, [r4, r3] - ldr r3, [r0, #0x4] - add r4, r3, r1 - ldr r3, _0202F58C ; =0x0000058C - add r1, #0xc - str r6, [r4, r3] - ldr r3, [r0, #0x4] - add r4, r3, r7 - ldr r3, _0202F590 ; =0x00000638 - add r7, r7, #0x4 - str r6, [r4, r3] - mov r3, r12 - add r3, r3, #0x2 - mov r12, r3 - cmp r2, #0x8 - blt _0202F476 - ldr r1, _0202F54C ; =UNK_021C59F4 - ldr r0, _0202F594 ; =0x00000634 - ldr r2, [r1, #0x4] - sub r3, r0, #0x4 - str r6, [r2, r0] - ldr r4, [r1, #0x4] - mov r2, #0x1 - str r2, [r4, r3] - add r3, r0, #0x0 - ldr r4, [r1, #0x4] - sub r3, #0x3e - mov r2, #0xee - strb r2, [r4, r3] - add r3, r0, #0x0 - ldr r4, [r1, #0x4] - ldr r2, _0202F584 ; =0x0000FFFF - sub r3, #0x40 - strh r2, [r4, r3] - add r2, r0, #0x0 - ldr r3, [r1, #0x4] - sub r2, #0x44 - str r6, [r3, r2] - add r2, r0, #0x0 - ldr r3, [r1, #0x4] - sub r2, #0x48 - str r6, [r3, r2] - add r3, r0, #0x0 - ldr r4, [r1, #0x4] - add r3, #0x4e - mov r2, #0x1 - strb r2, [r4, r3] - add r3, r0, #0x0 - ldr r4, [r1, #0x4] - add r3, #0x4f - strb r2, [r4, r3] - ldr r2, _0202F598 ; =UNK_02105D58 - mov r3, #0x4 - strb r3, [r2, #0x1] - strb r3, [r2, #0x0] - ldr r1, [r1, #0x4] - sub r0, #0xe8 - add r0, r1, r0 - bl FUN_0202D804 - ldr r0, _0202F54C ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202F59C ; =0x0000056C - add r0, r1, r0 - bl FUN_0202D804 - ldr r0, _0202F54C ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _0202F5A0 ; =0x00000688 - strb r2, [r1, r0] - pop {r3-r7, pc} - .balign 4 -_0202F54C: .word UNK_021C59F4 -_0202F550: .word 0x0000062C -_0202F554: .word 0x00000658 -_0202F558: .word 0x00000458 -_0202F55C: .word 0x000004E8 -_0202F560: .word 0x00000454 -_0202F564: .word 0x0000047C -_0202F568: .word 0x000004DC -_0202F56C: .word 0x00000464 -_0202F570: .word 0x0000045C -_0202F574: .word 0x00000684 -_0202F578: .word 0x0000065F -_0202F57C: .word 0x00000667 -_0202F580: .word 0x00000596 -_0202F584: .word 0x0000FFFF -_0202F588: .word 0x00000594 -_0202F58C: .word 0x0000058C -_0202F590: .word 0x00000638 -_0202F594: .word 0x00000634 -_0202F598: .word UNK_02105D58 -_0202F59C: .word 0x0000056C -_0202F5A0: .word 0x00000688 - - thumb_func_start FUN_0202F5A4 -FUN_0202F5A4: ; 0x0202F5A4 - push {r3-r7, lr} - ldr r1, _0202F7D4 ; =UNK_021C59F4 - ldr r0, _0202F7D8 ; =0x0000062C - ldr r2, [r1, #0x4] - mov r3, #0x0 - strb r3, [r2, r0] - ldr r1, [r1, #0x4] - add r0, r0, #0x1 - strb r3, [r1, r0] - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r6, r0, #0x1 - ldr r0, _0202F7D4 ; =UNK_021C59F4 - ldr r2, _0202F7DC ; =0x00000658 - ldr r3, [r0, #0x4] - ldr r0, _0202F7E0 ; =0x00000458 - mov r1, #0x0 - ldr r0, [r3, r0] - ldr r3, [r3, r2] - add r2, r3, #0x0 - mul r2, r6 - bl MI_CpuFill8 - mov r4, #0x0 - cmp r6, #0x0 - ble _0202F606 - ldr r7, _0202F7D4 ; =UNK_021C59F4 - add r5, r4, #0x0 -_0202F5E4: - ldr r3, [r7, #0x4] - ldr r0, _0202F7DC ; =0x00000658 - ldr r1, _0202F7E0 ; =0x00000458 - ldr r2, [r3, r0] - ldr r0, _0202F7E4 ; =0x000004E8 - add r0, r3, r0 - ldr r3, [r3, r1] - add r1, r4, #0x0 - mul r1, r2 - add r0, r0, r5 - add r1, r3, r1 - bl FUN_0202D394 - add r4, r4, #0x1 - add r5, #0xc - cmp r4, r6 - blt _0202F5E4 -_0202F606: - ldr r0, _0202F7D4 ; =UNK_021C59F4 - ldr r2, _0202F7DC ; =0x00000658 - ldr r3, [r0, #0x4] - ldr r0, _0202F7E8 ; =0x00000454 - mov r1, #0x0 - ldr r0, [r3, r0] - ldr r3, [r3, r2] - add r2, r3, #0x0 - mul r2, r6 - bl MI_CpuFill8 - mov r5, #0x0 - cmp r6, #0x0 - ble _0202F648 - ldr r7, _0202F7D4 ; =UNK_021C59F4 - add r4, r5, #0x0 -_0202F626: - ldr r3, [r7, #0x4] - ldr r0, _0202F7DC ; =0x00000658 - ldr r1, _0202F7E8 ; =0x00000454 - ldr r2, [r3, r0] - ldr r0, _0202F7EC ; =0x0000047C - add r0, r3, r0 - ldr r3, [r3, r1] - add r1, r5, #0x0 - mul r1, r2 - add r0, r0, r4 - add r1, r3, r1 - bl FUN_0202D394 - add r5, r5, #0x1 - add r4, #0xc - cmp r5, r6 - blt _0202F626 -_0202F648: - ldr r0, _0202F7D4 ; =UNK_021C59F4 - mov r2, #0x6 - ldr r1, [r0, #0x4] - mov r0, #0xb5 - lsl r0, r0, #0x2 - add r0, r1, r0 - mov r1, #0x0 - lsl r2, r2, #0x6 - bl MI_CpuFill8 - ldr r0, _0202F7D4 ; =UNK_021C59F4 - mov r1, #0xb5 - ldr r2, [r0, #0x4] - ldr r0, _0202F7F0 ; =0x000004DC - lsl r1, r1, #0x2 - add r0, r2, r0 - add r1, r2, r1 - mov r2, #0x6 - lsl r2, r2, #0x6 - bl FUN_0202D394 - mov r0, #0xee - add r2, r0, #0x0 - mov r3, #0x85 - ldr r4, _0202F7D4 ; =UNK_021C59F4 - mov r1, #0x0 - add r2, #0x66 - lsl r3, r3, #0x2 -_0202F680: - ldr r5, [r4, #0x4] - add r5, r5, r1 - strb r0, [r5, r2] - ldr r5, [r4, #0x4] - add r5, r5, r1 - add r1, r1, #0x1 - strb r0, [r5, r3] - cmp r1, #0xc0 - blt _0202F680 - ldr r0, _0202F7D4 ; =UNK_021C59F4 - mov r2, #0x42 - ldr r0, [r0, #0x4] - mov r1, #0x0 - add r0, #0x4c - lsl r2, r2, #0x2 - bl MI_CpuFill8 - ldr r0, _0202F7D4 ; =UNK_021C59F4 - mov r2, #0x42 - ldr r1, [r0, #0x4] - ldr r0, _0202F7F4 ; =0x00000464 - lsl r2, r2, #0x2 - add r0, r1, r0 - add r1, #0x4c - bl FUN_0202D394 - ldr r1, _0202F7D4 ; =UNK_021C59F4 - mov r2, #0xff - ldr r0, [r1, #0x4] - mov r3, #0x1 - strb r2, [r0, #0x0] - ldr r0, [r1, #0x4] - add r0, #0x26 - strb r2, [r0, #0x0] - mov r2, #0xee -_0202F6C6: - ldr r0, [r1, #0x4] - strb r2, [r0, r3] - ldr r0, [r1, #0x4] - add r0, r0, r3 - add r0, #0x26 - add r3, r3, #0x1 - strb r2, [r0, #0x0] - cmp r3, #0x26 - blt _0202F6C6 - ldr r0, _0202F7D4 ; =UNK_021C59F4 - ldr r2, _0202F7DC ; =0x00000658 - ldr r3, [r0, #0x4] - ldr r0, _0202F7F8 ; =0x0000045C - ldr r2, [r3, r2] - ldr r0, [r3, r0] - mov r1, #0x0 - lsl r2, r2, #0x1 - bl MI_CpuFill8 - ldr r0, _0202F7D4 ; =UNK_021C59F4 - mov r1, #0x47 - ldr r3, [r0, #0x4] - ldr r2, _0202F7DC ; =0x00000658 - lsl r1, r1, #0x4 - add r0, r3, r1 - sub r1, #0x14 - ldr r2, [r3, r2] - ldr r1, [r3, r1] - lsl r2, r2, #0x1 - bl FUN_0202D394 - ldr r0, _0202F7D4 ; =UNK_021C59F4 - mov r3, #0x0 - ldr r2, [r0, #0x4] - ldr r1, _0202F7FC ; =0x00000684 - add r7, r3, #0x0 - strb r3, [r2, r1] - ldr r2, [r0, #0x4] - add r1, r1, #0x1 - strb r3, [r2, r1] - add r1, r3, #0x0 - add r2, r3, #0x0 -_0202F71A: - ldr r4, [r0, #0x4] - add r5, r4, r3 - ldr r4, _0202F800 ; =0x0000065F - strb r7, [r5, r4] - ldr r4, [r0, #0x4] - ldr r5, _0202F804 ; =0x00000667 - add r6, r4, r3 - mov r4, #0x1 - strb r4, [r6, r5] - ldr r4, [r0, #0x4] - add r5, #0x8 - add r6, r4, r3 - mov r4, #0x1 - strb r4, [r6, r5] - ldr r4, [r0, #0x4] - add r3, r3, #0x1 - add r5, r4, r1 - mov r4, #0x61 - lsl r4, r4, #0x4 - strh r7, [r5, r4] - ldr r4, [r0, #0x4] - ldr r5, _0202F808 ; =0x00000596 - add r6, r4, r2 - mov r4, #0xee - strb r4, [r6, r5] - ldr r4, [r0, #0x4] - ldr r5, _0202F80C ; =0x0000FFFF - add r6, r4, r2 - ldr r4, _0202F810 ; =0x00000594 - add r1, r1, #0x2 - strh r5, [r6, r4] - ldr r4, [r0, #0x4] - add r5, r4, r2 - mov r4, #0x59 - lsl r4, r4, #0x4 - str r7, [r5, r4] - ldr r4, [r0, #0x4] - add r5, r4, r2 - ldr r4, _0202F814 ; =0x0000058C - add r2, #0xc - str r7, [r5, r4] - cmp r3, #0x8 - blt _0202F71A - ldr r1, _0202F7D4 ; =UNK_021C59F4 - add r0, r4, #0x0 - ldr r3, [r1, #0x4] - add r0, #0xa4 - mov r2, #0x1 - str r2, [r3, r0] - add r3, r0, #0x0 - ldr r4, [r1, #0x4] - sub r3, #0x3a - mov r2, #0xee - strb r2, [r4, r3] - add r3, r0, #0x0 - ldr r4, [r1, #0x4] - ldr r2, _0202F80C ; =0x0000FFFF - sub r3, #0x3c - strh r2, [r4, r3] - add r2, r0, #0x0 - ldr r3, [r1, #0x4] - sub r2, #0x40 - str r7, [r3, r2] - add r2, r0, #0x0 - ldr r3, [r1, #0x4] - sub r2, #0x44 - str r7, [r3, r2] - add r3, r0, #0x0 - ldr r4, [r1, #0x4] - add r3, #0x52 - mov r2, #0x1 - strb r2, [r4, r3] - add r3, r0, #0x0 - ldr r4, [r1, #0x4] - add r3, #0x53 - strb r2, [r4, r3] - ldr r1, [r1, #0x4] - sub r0, #0xe4 - add r0, r1, r0 - bl FUN_0202D804 - ldr r0, _0202F7D4 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202F818 ; =0x0000056C - add r0, r1, r0 - bl FUN_0202D804 - ldr r0, _0202F7D4 ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _0202F81C ; =0x00000688 - strb r2, [r1, r0] - pop {r3-r7, pc} - .balign 4 -_0202F7D4: .word UNK_021C59F4 -_0202F7D8: .word 0x0000062C -_0202F7DC: .word 0x00000658 -_0202F7E0: .word 0x00000458 -_0202F7E4: .word 0x000004E8 -_0202F7E8: .word 0x00000454 -_0202F7EC: .word 0x0000047C -_0202F7F0: .word 0x000004DC -_0202F7F4: .word 0x00000464 -_0202F7F8: .word 0x0000045C -_0202F7FC: .word 0x00000684 -_0202F800: .word 0x0000065F -_0202F804: .word 0x00000667 -_0202F808: .word 0x00000596 -_0202F80C: .word 0x0000FFFF -_0202F810: .word 0x00000594 -_0202F814: .word 0x0000058C -_0202F818: .word 0x0000056C -_0202F81C: .word 0x00000688 - - thumb_func_start FUN_0202F820 -FUN_0202F820: ; 0x0202F820 - push {r4-r6, lr} - add r5, r0, #0x0 - ldr r0, _0202F8B8 ; =UNK_021C59F4 - ldr r3, _0202F8BC ; =0x0000065F - ldr r1, [r0, #0x4] - mov r2, #0x0 - add r1, r1, r5 - strb r2, [r1, r3] - ldr r4, [r0, #0x4] - mov r1, #0x1 - add r6, r4, r5 - add r4, r3, #0x0 - add r4, #0x8 - strb r1, [r6, r4] - ldr r6, [r0, #0x4] - lsl r4, r5, #0x2 - add r6, r6, r4 - add r4, r3, #0x0 - sub r4, #0x27 - str r2, [r6, r4] - ldr r2, [r0, #0x4] - add r4, r2, r5 - add r2, r3, #0x0 - add r2, #0x10 - strb r1, [r4, r2] - ldr r1, [r0, #0x4] - sub r0, r3, #0x7 - ldr r2, [r1, r0] - ldr r3, _0202F8C0 ; =0x0000047C - mov r0, #0xc - add r4, r5, #0x0 - mul r4, r0 - add r0, r1, r3 - sub r3, #0x28 - ldr r3, [r1, r3] - add r1, r5, #0x0 - mul r1, r2 - add r0, r0, r4 - add r1, r3, r1 - bl FUN_0202D394 - ldr r0, _0202F8B8 ; =UNK_021C59F4 - ldr r3, _0202F8C4 ; =0x000004E8 - ldr r1, [r0, #0x4] - ldr r0, _0202F8C8 ; =0x00000658 - ldr r2, [r1, r0] - add r0, r1, r3 - sub r3, #0x90 - ldr r3, [r1, r3] - add r1, r5, #0x0 - mul r1, r2 - add r0, r0, r4 - add r1, r3, r1 - bl FUN_0202D394 - ldr r3, _0202F8B8 ; =UNK_021C59F4 - ldr r2, _0202F8CC ; =0x00000596 - ldr r0, [r3, #0x4] - mov r1, #0xee - add r0, r0, r4 - strb r1, [r0, r2] - ldr r0, [r3, #0x4] - ldr r5, _0202F8D0 ; =0x0000FFFF - add r1, r0, r4 - sub r0, r2, #0x2 - strh r5, [r1, r0] - ldr r1, [r3, #0x4] - mov r0, #0x0 - add r5, r1, r4 - sub r1, r2, #0x6 - str r0, [r5, r1] - ldr r1, [r3, #0x4] - sub r2, #0xa - add r1, r1, r4 - str r0, [r1, r2] - pop {r4-r6, pc} - .balign 4 -_0202F8B8: .word UNK_021C59F4 -_0202F8BC: .word 0x0000065F -_0202F8C0: .word 0x0000047C -_0202F8C4: .word 0x000004E8 -_0202F8C8: .word 0x00000658 -_0202F8CC: .word 0x00000596 -_0202F8D0: .word 0x0000FFFF - - thumb_func_start FUN_0202F8D4 -FUN_0202F8D4: ; 0x0202F8D4 - push {r4-r6, lr} - ldr r4, _0202F908 ; =UNK_021C59F4 - ldr r6, _0202F90C ; =0x00000667 - mov r5, #0x1 -_0202F8DC: - lsl r0, r5, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0x0 - bne _0202F900 - ldr r0, [r4, #0x4] - add r0, r0, r5 - ldrb r0, [r0, r6] - cmp r0, #0x0 - bne _0202F900 - bl FUN_02031280 - cmp r0, #0x0 - bne _0202F900 - add r0, r5, #0x0 - bl FUN_0202F820 -_0202F900: - add r5, r5, #0x1 - cmp r5, #0x8 - blt _0202F8DC - pop {r4-r6, pc} - .balign 4 -_0202F908: .word UNK_021C59F4 -_0202F90C: .word 0x00000667 - - thumb_func_start FUN_0202F910 -FUN_0202F910: ; 0x0202F910 - ldr r3, _0202F914 ; =FUN_0202F820 - bx r3 - .balign 4 -_0202F914: .word FUN_0202F820 - - thumb_func_start FUN_0202F918 -FUN_0202F918: ; 0x0202F918 - push {r3-r7, lr} - add r5, r0, #0x0 - add r6, r1, #0x0 - add r7, r2, #0x0 - str r3, [sp, #0x0] - mov r4, #0x1 - bl FUN_02033534 - cmp r0, #0x13 - bge _0202F93E - ldr r2, [sp, #0x0] - add r0, r5, #0x0 - add r1, r6, #0x0 - bl FUN_0202E5F8 - add r4, r0, #0x0 - ldr r0, _0202F94C ; =FUN_0202F910 - bl FUN_0202D330 -_0202F93E: - add r0, r5, #0x0 - add r1, r7, #0x0 - bl FUN_0202F150 - add r0, r4, #0x0 - pop {r3-r7, pc} - nop -_0202F94C: .word FUN_0202F910 - - thumb_func_start FUN_0202F950 -FUN_0202F950: ; 0x0202F950 - push {r3-r7, lr} - add r5, r0, #0x0 - add r6, r1, #0x0 - add r7, r2, #0x0 - mov r4, #0x1 - bl FUN_02033534 - cmp r0, #0x13 - bge _0202F96C - add r0, r5, #0x0 - add r1, r6, #0x0 - bl FUN_0202E66C - add r4, r0, #0x0 -_0202F96C: - add r0, r5, #0x0 - add r1, r7, #0x0 - bl FUN_0202F150 - ldr r0, _0202F980 ; =UNK_02105D58 - mov r1, #0x4 - strb r1, [r0, #0x0] - add r0, r4, #0x0 - pop {r3-r7, pc} - nop -_0202F980: .word UNK_02105D58 - - thumb_func_start FUN_0202F984 -FUN_0202F984: ; 0x0202F984 - push {r4, lr} - mov r4, #0x0 - bl FUN_02031190 - cmp r0, #0x0 - bne _0202F99A - ldr r0, _0202F9D4 ; =UNK_02105D58 - ldrb r0, [r0, #0x1] - cmp r0, #0x4 - beq _0202F9A2 - pop {r4, pc} -_0202F99A: - ldr r0, _0202F9D4 ; =UNK_02105D58 - ldrb r0, [r0, #0x0] - cmp r0, #0x4 - bne _0202F9D0 -_0202F9A2: - ldr r0, _0202F9D8 ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - ldr r0, _0202F9DC ; =0x0000067D - ldrb r1, [r2, r0] - cmp r1, #0x2 - bne _0202F9B4 - mov r1, #0x0 - strb r1, [r2, r0] - mov r4, #0x1 -_0202F9B4: - ldr r0, _0202F9D8 ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - ldr r0, _0202F9DC ; =0x0000067D - ldrb r1, [r2, r0] - cmp r1, #0x3 - bne _0202F9C4 - mov r4, #0x1 - strb r4, [r2, r0] -_0202F9C4: - cmp r4, #0x0 - beq _0202F9CC - bl FUN_0202F5A4 -_0202F9CC: - bl FUN_02031088 -_0202F9D0: - pop {r4, pc} - nop -_0202F9D4: .word UNK_02105D58 -_0202F9D8: .word UNK_021C59F4 -_0202F9DC: .word 0x0000067D - - thumb_func_start FUN_0202F9E0 -FUN_0202F9E0: ; 0x0202F9E0 - ldr r1, _0202FA08 ; =UNK_021C59F4 - ldr r3, [r1, #0x4] - ldr r1, _0202FA0C ; =0x0000067D - ldrb r2, [r3, r1] - cmp r2, #0x0 - bne _0202F9F6 - cmp r0, #0x1 - bne _0202F9F6 - mov r0, #0x3 - strb r0, [r3, r1] - bx lr -_0202F9F6: - cmp r2, #0x1 - bne _0202FA04 - cmp r0, #0x0 - bne _0202FA04 - ldr r0, _0202FA0C ; =0x0000067D - mov r1, #0x2 - strb r1, [r3, r0] -_0202FA04: - bx lr - nop -_0202FA08: .word UNK_021C59F4 -_0202FA0C: .word 0x0000067D - - thumb_func_start FUN_0202FA10 -FUN_0202FA10: ; 0x0202FA10 - ldr r3, _0202FA18 ; =FUN_0202F9E0 - mov r0, #0x1 - bx r3 - nop -_0202FA18: .word FUN_0202F9E0 - - thumb_func_start FUN_0202FA1C -FUN_0202FA1C: ; 0x0202FA1C - ldr r3, _0202FA24 ; =FUN_0202F9E0 - mov r0, #0x0 - bx r3 - nop -_0202FA24: .word FUN_0202F9E0 - - thumb_func_start FUN_0202FA28 -FUN_0202FA28: ; 0x0202FA28 - ldr r0, _0202FA40 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202FA44 ; =0x0000067D - ldrb r0, [r1, r0] - cmp r0, #0x2 - bne _0202FA38 - mov r0, #0x1 - bx lr -_0202FA38: - cmp r0, #0x3 - bne _0202FA3E - mov r0, #0x0 -_0202FA3E: - bx lr - .balign 4 -_0202FA40: .word UNK_021C59F4 -_0202FA44: .word 0x0000067D - - thumb_func_start FUN_0202FA48 -FUN_0202FA48: ; 0x0202FA48 - push {r3, lr} - bl FUN_0202FA28 - cmp r0, #0x1 - bne _0202FA56 - mov r0, #0x1 - pop {r3, pc} -_0202FA56: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0202FA5C -FUN_0202FA5C: ; 0x0202FA5C - push {r4, lr} - ldr r0, _0202FB00 ; =UNK_021C59F4 - mov r4, #0x0 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _0202FA82 - bl FUN_02033534 - cmp r0, #0x13 - blt _0202FA78 - bl MOD04_021D83C0 - mov r4, #0x1 - b _0202FA82 -_0202FA78: - bl FUN_0202E784 - cmp r0, #0x0 - beq _0202FA82 - mov r4, #0x1 -_0202FA82: - cmp r4, #0x0 - beq _0202FAFE - bl FUN_020314D0 - bl FUN_0202DBA4 - ldr r0, _0202FB00 ; =UNK_021C59F4 - mov r1, #0x0 - strb r1, [r0, #0x0] - ldr r1, [r0, #0x4] - ldr r0, _0202FB04 ; =0x00000548 - ldr r0, [r1, r0] - bl FUN_0200CAB4 - ldr r1, _0202FB00 ; =UNK_021C59F4 - ldr r0, _0202FB04 ; =0x00000548 - ldr r2, [r1, #0x4] - mov r3, #0x0 - str r3, [r2, r0] - ldr r1, [r1, #0x4] - sub r0, #0xec - ldr r0, [r1, r0] - bl FreeToHeap - ldr r0, _0202FB00 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - mov r0, #0x46 - lsl r0, r0, #0x4 - ldr r0, [r1, r0] - bl FreeToHeap - ldr r0, _0202FB00 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202FB08 ; =0x00000458 - ldr r0, [r1, r0] - bl FreeToHeap - ldr r0, _0202FB00 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202FB0C ; =0x00000454 - ldr r0, [r1, r0] - bl FreeToHeap - ldr r0, _0202FB00 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202FB10 ; =0x0000056C - add r0, r1, r0 - bl FUN_0202D824 - ldr r0, _0202FB00 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202FB14 ; =0x0000054C - add r0, r1, r0 - bl FUN_0202D824 - ldr r0, _0202FB00 ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - bl FreeToHeap - ldr r0, _0202FB00 ; =UNK_021C59F4 - mov r1, #0x0 - str r1, [r0, #0x4] -_0202FAFE: - pop {r4, pc} - .balign 4 -_0202FB00: .word UNK_021C59F4 -_0202FB04: .word 0x00000548 -_0202FB08: .word 0x00000458 -_0202FB0C: .word 0x00000454 -_0202FB10: .word 0x0000056C -_0202FB14: .word 0x0000054C - - thumb_func_start FUN_0202FB18 -FUN_0202FB18: ; 0x0202FB18 - ldr r3, _0202FB1C ; =FUN_0202E9E8 - bx r3 - .balign 4 -_0202FB1C: .word FUN_0202E9E8 - - thumb_func_start FUN_0202FB20 -FUN_0202FB20: ; 0x0202FB20 - push {r3, lr} - ldr r0, _0202FB54 ; =UNK_021C59F4 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - beq _0202FB52 - bl FUN_0203050C - bl FUN_02031190 - cmp r0, #0x0 - bne _0202FB40 - mov r0, #0x0 - bl FUN_02030E7C - cmp r0, #0x0 - bne _0202FB48 -_0202FB40: - bl FUN_02031280 - cmp r0, #0x0 - beq _0202FB4C -_0202FB48: - bl FUN_0202FEEC -_0202FB4C: - ldr r0, _0202FB54 ; =UNK_021C59F4 - mov r1, #0x0 - strb r1, [r0, #0x0] -_0202FB52: - pop {r3, pc} - .balign 4 -_0202FB54: .word UNK_021C59F4 - - thumb_func_start FUN_0202FB58 -FUN_0202FB58: ; 0x0202FB58 - push {r3, lr} - bl FUN_0202F03C - cmp r0, #0x0 - beq _0202FB7C - bl FUN_02031190 - cmp r0, #0x0 - bne _0202FB78 - bl FUN_0202EE24 - cmp r0, #0x0 - bne _0202FB7C - bl FUN_0202FA5C - pop {r3, pc} -_0202FB78: - bl FUN_0202FA5C -_0202FB7C: - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_0202FB80 -FUN_0202FB80: ; 0x0202FB80 - push {r4, lr} - bl FUN_02031CDC - ldr r1, _0202FC48 ; =UNK_021C59F4 - ldr r2, [r1, #0x4] - cmp r2, #0x0 - beq _0202FC34 - ldr r0, _0202FC4C ; =0x0000068A - ldrb r0, [r2, r0] - cmp r0, #0x0 - bne _0202FC16 - mov r0, #0x0 - strb r0, [r1, #0x0] - bl FUN_0202F984 - ldr r0, _0202FC48 ; =UNK_021C59F4 - ldr r1, _0202FC50 ; =gMain - ldr r0, [r0, #0x4] - ldr r2, _0202FC54 ; =0x00000628 - ldr r3, [r1, #0x44] - ldr r1, _0202FC58 ; =0x00007FFF - ldrh r4, [r0, r2] - and r1, r3 - orr r1, r4 - strh r1, [r0, r2] - bl FUN_02030674 - bl FUN_0202FCCC - ldr r0, _0202FC48 ; =UNK_021C59F4 - ldr r1, _0202FC54 ; =0x00000628 - ldr r3, [r0, #0x4] - mov r0, #0x2 - ldrh r2, [r3, r1] - lsl r0, r0, #0xe - and r0, r2 - strh r0, [r3, r1] - bl FUN_0202FA28 - cmp r0, #0x0 - bne _0202FBD6 - bl FUN_02030DA4 -_0202FBD6: - bl FUN_02031190 - cmp r0, #0x0 - bne _0202FBE8 - mov r0, #0x0 - bl FUN_02030E7C - cmp r0, #0x0 - bne _0202FBF0 -_0202FBE8: - bl FUN_02031280 - cmp r0, #0x0 - beq _0202FBF4 -_0202FBF0: - bl FUN_02030074 -_0202FBF4: - bl FUN_02031190 - cmp r0, #0x0 - beq _0202FC0C - bl FUN_0202FA28 - cmp r0, #0x1 - beq _0202FC0C - bl FUN_02031280 - cmp r0, #0x0 - beq _0202FC10 -_0202FC0C: - bl FUN_02030DFC -_0202FC10: - ldr r0, _0202FC48 ; =UNK_021C59F4 - mov r1, #0x1 - strb r1, [r0, #0x0] -_0202FC16: - ldr r0, _0202FC48 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202FC5C ; =0x0000065C - ldrh r0, [r1, r0] - bl FUN_0202ED70 - bl FUN_02031190 - cmp r0, #0x0 - bne _0202FC2E - bl FUN_0202F8D4 -_0202FC2E: - bl FUN_0202FB58 - b _0202FC3A -_0202FC34: - mov r0, #0x0 - bl FUN_0202ED70 -_0202FC3A: - mov r0, #0x0 - bl FUN_020335F4 - bl FUN_020315A4 - mov r0, #0x1 - pop {r4, pc} - .balign 4 -_0202FC48: .word UNK_021C59F4 -_0202FC4C: .word 0x0000068A -_0202FC50: .word gMain -_0202FC54: .word 0x00000628 -_0202FC58: .word 0x00007FFF -_0202FC5C: .word 0x0000065C - - thumb_func_start FUN_0202FC60 -FUN_0202FC60: ; 0x0202FC60 - push {r4, lr} - ldr r0, _0202FC7C ; =UNK_021C59F4 - mov r1, #0x0 - ldrb r4, [r0, #0x0] - strb r1, [r0, #0x0] - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _0202FC74 - bl FUN_0202F2F0 -_0202FC74: - ldr r0, _0202FC7C ; =UNK_021C59F4 - strb r4, [r0, #0x0] - pop {r4, pc} - nop -_0202FC7C: .word UNK_021C59F4 - - thumb_func_start FUN_0202FC80 -FUN_0202FC80: ; 0x0202FC80 - push {r4, lr} - ldr r0, _0202FCA0 ; =UNK_021C59F4 - mov r1, #0x0 - ldrb r4, [r0, #0x0] - strb r1, [r0, #0x0] - ldr r2, [r0, #0x4] - cmp r2, #0x0 - beq _0202FC9A - ldr r0, _0202FCA4 ; =0x0000067D - mov r1, #0x1 - strb r1, [r2, r0] - bl FUN_0202F2F0 -_0202FC9A: - ldr r0, _0202FCA0 ; =UNK_021C59F4 - strb r4, [r0, #0x0] - pop {r4, pc} - .balign 4 -_0202FCA0: .word UNK_021C59F4 -_0202FCA4: .word 0x0000067D - - thumb_func_start FUN_0202FCA8 -FUN_0202FCA8: ; 0x0202FCA8 - push {r4, lr} - ldr r0, _0202FCC8 ; =UNK_021C59F4 - mov r1, #0x0 - ldrb r4, [r0, #0x0] - strb r1, [r0, #0x0] - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _0202FCC0 - bl FUN_0202F2F0 - bl FUN_0202E538 -_0202FCC0: - ldr r0, _0202FCC8 ; =UNK_021C59F4 - strb r4, [r0, #0x0] - pop {r4, pc} - nop -_0202FCC8: .word UNK_021C59F4 - - thumb_func_start FUN_0202FCCC -FUN_0202FCCC: ; 0x0202FCCC - push {r3, lr} - ldr r0, _0202FE14 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202FE18 ; =0x00000683 - ldrb r0, [r1, r0] - cmp r0, #0x0 - beq _0202FD40 - bl FUN_02033534 - cmp r0, #0x13 - blt _0202FD06 - ldr r0, _0202FE14 ; =UNK_021C59F4 - ldr r1, _0202FE1C ; =0x00000687 - ldr r0, [r0, #0x4] - ldrb r1, [r0, r1] - cmp r1, #0x0 - beq _0202FCF8 - mov r1, #0x26 - bl MOD04_021D78FC - cmp r0, #0x0 - bne _0202FCFA -_0202FCF8: - b _0202FE10 -_0202FCFA: - ldr r0, _0202FE14 ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _0202FE18 ; =0x00000683 - strb r2, [r1, r0] - pop {r3, pc} -_0202FD06: - bl FUN_0202CBD4 - cmp r0, #0x4 - bne _0202FD1A - bl FUN_02031190 - bl FUN_02030E7C - cmp r0, #0x0 - bne _0202FD22 -_0202FD1A: - bl FUN_02031280 - cmp r0, #0x0 - beq _0202FE10 -_0202FD22: - ldr r0, _0202FE20 ; =UNK_02105D58 - mov r1, #0x0 - strb r1, [r0, #0x0] - bl FUN_0203050C - ldr r0, _0202FE20 ; =UNK_02105D58 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - beq _0202FE10 - ldr r0, _0202FE14 ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _0202FE18 ; =0x00000683 - strb r2, [r1, r0] - pop {r3, pc} -_0202FD40: - bl FUN_02033534 - cmp r0, #0x13 - blt _0202FDB2 - ldr r0, _0202FE14 ; =UNK_021C59F4 - ldr r2, _0202FE1C ; =0x00000687 - ldr r0, [r0, #0x4] - ldrb r1, [r0, r2] - cmp r1, #0x0 - beq _0202FE10 - add r1, r2, #0x0 - sub r1, #0x57 - ldr r1, [r0, r1] - cmp r1, #0x0 - beq _0202FD7A - sub r2, #0x53 - ldr r1, [r0, r2] - cmp r1, #0x3 - bgt _0202FE10 - ldr r1, _0202FE20 ; =UNK_02105D58 - ldrb r1, [r1, #0x0] - cmp r1, #0x4 - bne _0202FD90 - bl FUN_02030930 - ldr r0, _0202FE20 ; =UNK_02105D58 - mov r1, #0x2 - strb r1, [r0, #0x0] - b _0202FD90 -_0202FD7A: - ldr r1, _0202FE20 ; =UNK_02105D58 - ldrb r1, [r1, #0x0] - cmp r1, #0x4 - bne _0202FD90 - bl FUN_02030930 - cmp r0, #0x0 - beq _0202FE10 - ldr r0, _0202FE20 ; =UNK_02105D58 - mov r1, #0x2 - strb r1, [r0, #0x0] -_0202FD90: - ldr r0, _0202FE14 ; =UNK_021C59F4 - mov r1, #0x26 - ldr r0, [r0, #0x4] - bl MOD04_021D78FC - cmp r0, #0x0 - beq _0202FE10 - ldr r0, _0202FE20 ; =UNK_02105D58 - mov r1, #0x4 - strb r1, [r0, #0x0] - ldr r0, _0202FE14 ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - ldr r0, _0202FE24 ; =0x00000634 - ldr r1, [r2, r0] - add r1, r1, #0x1 - str r1, [r2, r0] - pop {r3, pc} -_0202FDB2: - bl FUN_0202CBD4 - cmp r0, #0x4 - bne _0202FDC6 - bl FUN_02031190 - bl FUN_02030E7C - cmp r0, #0x0 - bne _0202FDCE -_0202FDC6: - bl FUN_02031280 - cmp r0, #0x0 - beq _0202FE10 -_0202FDCE: - ldr r0, _0202FE20 ; =UNK_02105D58 - ldrb r0, [r0, #0x0] - cmp r0, #0x4 - bne _0202FE10 - ldr r0, _0202FE14 ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - ldr r0, _0202FE24 ; =0x00000634 - ldr r1, [r2, r0] - cmp r1, #0x3 - bgt _0202FE10 - add r0, #0x4b - ldrb r1, [r2, r0] - mov r0, #0x26 - mul r0, r1 - add r0, r2, r0 - bl FUN_02030930 - ldr r0, _0202FE14 ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - ldr r0, _0202FE28 ; =0x0000067F - ldrb r1, [r2, r0] - mov r0, #0x1 - sub r1, r0, r1 - mov r0, #0x26 - mul r0, r1 - add r0, r2, r0 - bl FUN_02030930 - ldr r0, _0202FE20 ; =UNK_02105D58 - mov r1, #0x0 - strb r1, [r0, #0x0] - bl FUN_0203050C -_0202FE10: - pop {r3, pc} - nop -_0202FE14: .word UNK_021C59F4 -_0202FE18: .word 0x00000683 -_0202FE1C: .word 0x00000687 -_0202FE20: .word UNK_02105D58 -_0202FE24: .word 0x00000634 -_0202FE28: .word 0x0000067F - - thumb_func_start FUN_0202FE2C -FUN_0202FE2C: ; 0x0202FE2C - push {r3-r7, lr} - sub sp, #0x10 - str r0, [sp, #0x0] - mov r0, #0x0 - str r0, [sp, #0x4] - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02031228 - str r0, [sp, #0xc] - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r0, r0, #0x1 - mov r7, #0x0 - str r0, [sp, #0x8] - cmp r0, #0x0 - ble _0202FED0 - ldr r0, [sp, #0x0] - mov r1, #0xc0 - add r6, r0, #0x0 - add r4, r7, #0x0 - add r5, r7, #0x0 - mul r6, r1 -_0202FE66: - ldr r0, _0202FEE4 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0202FEE8 ; =0x0000047C - add r0, r1, r0 - add r0, r0, r4 - bl FUN_0202D4BC - lsl r0, r7, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0x0 - beq _0202FE90 - ldr r0, _0202FEE4 ; =UNK_021C59F4 - mov r1, #0xe - ldr r0, [r0, #0x4] - add r0, r6, r0 - add r2, r5, r0 - mov r0, #0x55 - lsl r0, r0, #0x2 - strb r1, [r2, r0] -_0202FE90: - ldr r0, _0202FEE4 ; =UNK_021C59F4 - mov r2, #0x55 - ldr r1, [r0, #0x4] - ldr r0, _0202FEE8 ; =0x0000047C - lsl r2, r2, #0x2 - add r0, r1, r0 - add r1, r1, r2 - add r1, r1, r6 - ldr r2, [sp, #0xc] - add r0, r0, r4 - add r1, r1, r5 - bl FUN_0202D400 - ldr r0, _0202FEE4 ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - add r0, r6, r0 - add r1, r5, r0 - mov r0, #0x55 - lsl r0, r0, #0x2 - ldrb r0, [r1, r0] - cmp r0, #0xe - bne _0202FEC2 - ldr r0, [sp, #0x4] - add r0, r0, #0x1 - str r0, [sp, #0x4] -_0202FEC2: - ldr r0, [sp, #0xc] - add r7, r7, #0x1 - add r5, r5, r0 - ldr r0, [sp, #0x8] - add r4, #0xc - cmp r7, r0 - blt _0202FE66 -_0202FED0: - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x8] - cmp r1, r0 - bne _0202FEDE - add sp, #0x10 - mov r0, #0x0 - pop {r3-r7, pc} -_0202FEDE: - mov r0, #0x1 - add sp, #0x10 - pop {r3-r7, pc} - .balign 4 -_0202FEE4: .word UNK_021C59F4 -_0202FEE8: .word 0x0000047C - - thumb_func_start FUN_0202FEEC -FUN_0202FEEC: ; 0x0202FEEC - push {r3-r7, lr} - ldr r0, _02030064 ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _0202FEFE - bl FUN_02033534 - cmp r0, #0x13 - blt _0202FF00 -_0202FEFE: - b _02030062 -_0202FF00: - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02031228 - str r0, [sp, #0x0] - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r6, r0, #0x1 - ldr r0, _02030068 ; =UNK_02105D58 - ldrb r1, [r0, #0x1] - cmp r1, #0x2 - beq _0202FF2C - ldrb r0, [r0, #0x1] - cmp r0, #0x0 - beq _0202FF2C - b _02030062 -_0202FF2C: - ldr r0, _02030068 ; =UNK_02105D58 - ldrb r1, [r0, #0x1] - add r1, r1, #0x1 - strb r1, [r0, #0x1] - bl FUN_0202FA28 - cmp r0, #0x1 - bne _0202FF4A - ldr r0, _02030064 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - mov r0, #0x1a - lsl r0, r0, #0x6 - ldrb r0, [r1, r0] - bl FUN_0202FE2C -_0202FF4A: - bl FUN_0202CBD4 - cmp r0, #0x4 - bne _0202FF86 - bl FUN_02031280 - cmp r0, #0x0 - bne _0202FF86 - ldr r0, _02030064 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - mov r0, #0x55 - lsl r0, r0, #0x2 - add r3, r1, r0 - mov r0, #0x1a - lsl r0, r0, #0x6 - ldrb r0, [r1, r0] - mov r1, #0xc0 - add r2, r0, #0x0 - mul r2, r1 - add r0, r3, r2 - ldr r3, _0203006C ; =FUN_020304F0 - mov r2, #0xe - bl FUN_0202D0D0 - cmp r0, #0x0 - bne _0202FF86 - ldr r0, _02030068 ; =UNK_02105D58 - ldrb r1, [r0, #0x1] - sub r1, r1, #0x1 - strb r1, [r0, #0x1] -_0202FF86: - ldr r0, _02030068 ; =UNK_02105D58 - ldrb r1, [r0, #0x1] - cmp r1, #0x1 - beq _0202FF94 - ldrb r0, [r0, #0x1] - cmp r0, #0x3 - bne _0203000A -_0202FF94: - mov r4, #0x0 - cmp r6, #0x0 - ble _0202FFDC - ldr r7, _02030064 ; =UNK_021C59F4 - add r5, r4, #0x0 -_0202FF9E: - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0x0 - beq _0202FFBA - ldr r0, [r7, #0x4] - ldr r1, _02030070 ; =0x00000638 - add r0, r0, r5 - ldr r1, [r0, r1] - add r2, r1, #0x1 - ldr r1, _02030070 ; =0x00000638 - str r2, [r0, r1] - b _0202FFD4 -_0202FFBA: - bl FUN_02031280 - cmp r0, #0x0 - beq _0202FFD4 - cmp r4, #0x0 - bne _0202FFD4 - ldr r0, [r7, #0x4] - ldr r1, _02030070 ; =0x00000638 - add r0, r0, r5 - ldr r1, [r0, r1] - add r2, r1, #0x1 - ldr r1, _02030070 ; =0x00000638 - str r2, [r0, r1] -_0202FFD4: - add r4, r4, #0x1 - add r5, r5, #0x4 - cmp r4, r6 - blt _0202FF9E -_0202FFDC: - ldr r0, _02030064 ; =UNK_021C59F4 - mov r1, #0x55 - ldr r2, [r0, #0x4] - lsl r1, r1, #0x2 - add r4, r2, r1 - mov r1, #0x1a - lsl r1, r1, #0x6 - ldrb r1, [r2, r1] - mov r2, #0xc0 - mov r0, #0x0 - add r3, r1, #0x0 - mul r3, r2 - add r1, r4, r3 - bl FUN_0203026C - ldr r0, _02030064 ; =UNK_021C59F4 - mov r1, #0x1a - ldr r3, [r0, #0x4] - lsl r1, r1, #0x6 - ldrb r2, [r3, r1] - mov r0, #0x1 - sub r0, r0, r2 - strb r0, [r3, r1] -_0203000A: - mov r5, #0x0 - cmp r6, #0x0 - ble _0203004A - add r4, r5, #0x0 - mov r7, #0xff -_02030014: - lsl r0, r5, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0x0 - bne _02030040 - bl FUN_0202FA28 - cmp r0, #0x1 - bne _02030040 - ldr r0, _02030064 ; =UNK_021C59F4 - mov r1, #0x1a - ldr r0, [r0, #0x4] - lsl r1, r1, #0x6 - ldrb r2, [r0, r1] - mov r1, #0xc0 - mul r1, r2 - add r0, r0, r1 - add r1, r4, r0 - mov r0, #0x55 - lsl r0, r0, #0x2 - strb r7, [r1, r0] -_02030040: - ldr r0, [sp, #0x0] - add r5, r5, #0x1 - add r4, r4, r0 - cmp r5, r6 - blt _02030014 -_0203004A: - bl FUN_0202CBD4 - cmp r0, #0x4 - bne _0203005A - bl FUN_02031280 - cmp r0, #0x0 - beq _02030062 -_0203005A: - ldr r0, _02030068 ; =UNK_02105D58 - ldrb r1, [r0, #0x1] - add r1, r1, #0x1 - strb r1, [r0, #0x1] -_02030062: - pop {r3-r7, pc} - .balign 4 -_02030064: .word UNK_021C59F4 -_02030068: .word UNK_02105D58 -_0203006C: .word FUN_020304F0 -_02030070: .word 0x00000638 - - thumb_func_start FUN_02030074 -FUN_02030074: ; 0x02030074 - push {r3-r7, lr} - ldr r0, _02030228 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0203022C ; =0x00000683 - ldrb r0, [r1, r0] - cmp r0, #0x0 - beq _020300DC - bl FUN_02033534 - cmp r0, #0x13 - blt _020300B4 - mov r0, #0x0 - bl FUN_02030E7C - cmp r0, #0x0 - beq _020300DC - ldr r0, _02030228 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - mov r0, #0x55 - lsl r0, r0, #0x2 - add r0, r1, r0 - mov r1, #0x4c - bl MOD04_021D79B4 - cmp r0, #0x0 - beq _020300DC - ldr r0, _02030228 ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _0203022C ; =0x00000683 - strb r2, [r1, r0] - pop {r3-r7, pc} -_020300B4: - bl FUN_0202CBD4 - cmp r0, #0x4 - beq _020300C4 - bl FUN_02031280 - cmp r0, #0x0 - beq _020300DC -_020300C4: - bl FUN_0202FEEC - ldr r0, _02030230 ; =UNK_02105D58 - ldrb r0, [r0, #0x1] - cmp r0, #0x2 - bne _020300DC - ldr r0, _02030228 ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _0203022C ; =0x00000683 - strb r2, [r1, r0] - pop {r3-r7, pc} -_020300DC: - bl FUN_02033534 - cmp r0, #0x13 - blt _02030184 - mov r0, #0x0 - bl FUN_02030E7C - cmp r0, #0x0 - bne _020300F0 - b _02030224 -_020300F0: - ldr r0, _02030228 ; =UNK_021C59F4 - mov r1, #0x63 - ldr r2, [r0, #0x4] - lsl r1, r1, #0x4 - ldr r0, [r2, r1] - cmp r0, #0x0 - beq _02030130 - add r0, r1, #0x0 - add r0, #0xc - ldr r0, [r2, r0] - cmp r0, #0x3 - bgt _02030110 - add r1, #0x8 - ldr r0, [r2, r1] - cmp r0, #0x3 - ble _02030112 -_02030110: - b _02030224 -_02030112: - ldr r0, _02030230 ; =UNK_02105D58 - ldrb r0, [r0, #0x1] - cmp r0, #0x4 - bne _02030150 - bl FUN_0202FA28 - cmp r0, #0x1 - bne _02030128 - mov r0, #0x0 - bl FUN_0202FE2C -_02030128: - ldr r0, _02030230 ; =UNK_02105D58 - mov r1, #0x2 - strb r1, [r0, #0x1] - b _02030150 -_02030130: - ldr r0, _02030230 ; =UNK_02105D58 - ldrb r0, [r0, #0x1] - cmp r0, #0x4 - bne _0203014A - bl FUN_0202FA28 - cmp r0, #0x1 - bne _0203014A - mov r0, #0x0 - bl FUN_0202FE2C - cmp r0, #0x0 - beq _02030224 -_0203014A: - ldr r0, _02030230 ; =UNK_02105D58 - mov r1, #0x2 - strb r1, [r0, #0x1] -_02030150: - ldr r0, _02030228 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - mov r0, #0x55 - lsl r0, r0, #0x2 - add r0, r1, r0 - mov r1, #0x4c - bl MOD04_021D79B4 - cmp r0, #0x0 - beq _02030224 - ldr r0, _02030230 ; =UNK_02105D58 - mov r1, #0x4 - strb r1, [r0, #0x1] - ldr r1, _02030228 ; =UNK_021C59F4 - ldr r0, _02030234 ; =0x00000638 - ldr r3, [r1, #0x4] - ldr r2, [r3, r0] - add r2, r2, #0x1 - str r2, [r3, r0] - ldr r2, [r1, #0x4] - add r1, r0, #0x4 - ldr r1, [r2, r1] - add r0, r0, #0x4 - add r1, r1, #0x1 - str r1, [r2, r0] - pop {r3-r7, pc} -_02030184: - bl FUN_0202CBD4 - cmp r0, #0x4 - beq _02030194 - bl FUN_02031280 - cmp r0, #0x0 - beq _02030224 -_02030194: - ldr r0, _02030230 ; =UNK_02105D58 - ldrb r0, [r0, #0x1] - cmp r0, #0x4 - bne _02030224 - ldr r6, _02030228 ; =UNK_021C59F4 - ldr r7, _02030234 ; =0x00000638 - mov r4, #0x1 - mov r5, #0x4 -_020301A4: - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0x0 - beq _020301BC - ldr r0, [r6, #0x4] - add r0, r0, r5 - ldr r0, [r0, r7] - cmp r0, #0x3 - ble _020301D2 - pop {r3-r7, pc} -_020301BC: - cmp r4, #0x0 - bne _020301D2 - bl FUN_02031280 - cmp r0, #0x0 - beq _020301D2 - ldr r1, [r6, #0x4] - ldr r0, _02030234 ; =0x00000638 - ldr r0, [r1, r0] - cmp r0, #0x3 - bgt _02030224 -_020301D2: - add r4, r4, #0x1 - add r5, r5, #0x4 - cmp r4, #0x8 - blt _020301A4 - bl FUN_0202FA28 - cmp r0, #0x0 - bne _0203021A - ldr r0, _02030228 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - mov r0, #0x55 - lsl r0, r0, #0x2 - add r2, r1, r0 - mov r0, #0x1a - lsl r0, r0, #0x6 - ldrb r1, [r1, r0] - mov r0, #0xc0 - mul r0, r1 - add r0, r2, r0 - bl FUN_02030A00 - ldr r0, _02030228 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - mov r0, #0x55 - lsl r0, r0, #0x2 - add r2, r1, r0 - mov r0, #0x1a - lsl r0, r0, #0x6 - ldrb r1, [r1, r0] - mov r0, #0x1 - sub r1, r0, r1 - mov r0, #0xc0 - mul r0, r1 - add r0, r2, r0 - bl FUN_02030A00 -_0203021A: - ldr r0, _02030230 ; =UNK_02105D58 - mov r1, #0x0 - strb r1, [r0, #0x1] - bl FUN_0202FEEC -_02030224: - pop {r3-r7, pc} - nop -_02030228: .word UNK_021C59F4 -_0203022C: .word 0x00000683 -_02030230: .word UNK_02105D58 -_02030234: .word 0x00000638 - - thumb_func_start FUN_02030238 -FUN_02030238: ; 0x02030238 - push {r4-r6, lr} - ldr r4, _02030264 ; =UNK_021C59F4 - ldr r3, _02030268 ; =0x0000066F - ldr r5, [r4, #0x4] - ldrb r6, [r5, r3] - cmp r6, #0x0 - beq _0203025C - add r0, r3, #0x0 - sub r0, #0x3b - ldr r0, [r5, r0] - sub r1, r0, #0x1 - add r0, r3, #0x0 - sub r0, #0x3b - str r1, [r5, r0] - ldr r0, [r4, #0x4] - mov r1, #0x0 - strb r1, [r0, r3] - pop {r4-r6, pc} -_0203025C: - bl FUN_0203026C - pop {r4-r6, pc} - nop -_02030264: .word UNK_021C59F4 -_02030268: .word 0x0000066F - - thumb_func_start FUN_0203026C -FUN_0203026C: ; 0x0203026C - push {r3-r7, lr} - sub sp, #0x8 - ldr r0, _020303A0 ; =UNK_021C59F4 - add r5, r1, #0x0 - ldr r2, [r0, #0x4] - ldr r0, _020303A4 ; =0x00000634 - ldr r1, [r2, r0] - sub r1, r1, #0x1 - str r1, [r2, r0] - cmp r5, #0x0 - beq _02030290 - ldrb r0, [r5, #0x0] - cmp r0, #0xb - bne _02030296 - bl FUN_0202FA28 - cmp r0, #0x1 - bne _02030292 -_02030290: - b _0203039C -_02030292: - add r5, r5, #0x1 - b _0203029E -_02030296: - bl FUN_0202FA28 - cmp r0, #0x0 - beq _0203039C -_0203029E: - ldr r0, _020303A0 ; =UNK_021C59F4 - ldr r1, _020303A8 ; =0x00000682 - ldr r0, [r0, #0x4] - ldrb r1, [r0, r1] - cmp r1, #0x0 - beq _020302B2 - ldrb r2, [r5, #0x0] - mov r1, #0x1 - tst r1, r2 - bne _0203039C -_020302B2: - ldr r1, _020303A8 ; =0x00000682 - mov r2, #0x0 - strb r2, [r0, r1] - bl FUN_0202FA28 - cmp r0, #0x1 - bne _0203036E - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02031228 - add r6, r0, #0x0 - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r0, r0, #0x1 - mov r4, #0x0 - str r0, [sp, #0x4] - cmp r0, #0x0 - ble _0203039C - sub r0, r6, #0x1 - add r7, r4, #0x0 - str r0, [sp, #0x0] -_020302EA: - ldrb r0, [r5, #0x0] - cmp r0, #0xff - bne _02030302 - ldr r0, _020303A0 ; =UNK_021C59F4 - mov r2, #0x1 - ldr r1, [r0, #0x4] - ldr r0, _020303AC ; =0x0000065C - lsl r2, r4 - ldrh r0, [r1, r0] - mvn r2, r2 - and r2, r0 - b _02030310 -_02030302: - ldr r0, _020303A0 ; =UNK_021C59F4 - mov r2, #0x1 - ldr r1, [r0, #0x4] - ldr r0, _020303AC ; =0x0000065C - lsl r2, r4 - ldrh r0, [r1, r0] - orr r2, r0 -_02030310: - ldr r0, _020303AC ; =0x0000065C - strh r2, [r1, r0] - ldrb r2, [r5, #0x0] - cmp r2, #0xff - bne _0203031E - add r5, r5, r6 - b _02030360 -_0203031E: - cmp r2, #0xe - bne _02030326 - add r5, r5, r6 - b _02030360 -_02030326: - ldr r0, _020303A0 ; =UNK_021C59F4 - ldr r3, [r0, #0x4] - ldr r0, _020303B0 ; =0x00000667 - add r1, r3, r4 - ldrb r0, [r1, r0] - cmp r0, #0x0 - beq _0203033E - mov r0, #0x1 - tst r0, r2 - beq _0203033E - add r5, r5, r6 - b _02030360 -_0203033E: - ldr r0, _020303B4 ; =0x000004E8 - add r5, r5, #0x1 - add r0, r3, r0 - ldr r2, [sp, #0x0] - ldr r3, _020303B8 ; =0x000005E6 - add r0, r0, r7 - add r1, r5, #0x0 - bl FUN_0202D3A4 - ldr r0, [sp, #0x0] - mov r1, #0x0 - add r5, r5, r0 - ldr r0, _020303A0 ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - add r2, r0, r4 - ldr r0, _020303B0 ; =0x00000667 - strb r1, [r2, r0] -_02030360: - ldr r0, [sp, #0x4] - add r4, r4, #0x1 - add r7, #0xc - cmp r4, r0 - blt _020302EA - add sp, #0x8 - pop {r3-r7, pc} -_0203036E: - ldr r0, _020303A0 ; =UNK_021C59F4 - ldrb r2, [r5, #0x1] - ldr r1, [r0, #0x4] - ldr r3, _020303AC ; =0x0000065C - strh r2, [r1, r3] - ldr r2, [r0, #0x4] - ldrh r1, [r2, r3] - lsl r1, r1, #0x8 - strh r1, [r2, r3] - ldr r4, [r0, #0x4] - ldrb r1, [r5, #0x2] - ldrh r2, [r4, r3] - add r1, r2, r1 - strh r1, [r4, r3] - ldr r1, [r0, #0x4] - mov r0, #0x47 - lsl r0, r0, #0x4 - add r0, r1, r0 - ldrb r2, [r5, #0x3] - add r1, r5, #0x4 - sub r3, #0x5d - bl FUN_0202D3A4 -_0203039C: - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 -_020303A0: .word UNK_021C59F4 -_020303A4: .word 0x00000634 -_020303A8: .word 0x00000682 -_020303AC: .word 0x0000065C -_020303B0: .word 0x00000667 -_020303B4: .word 0x000004E8 -_020303B8: .word 0x000005E6 - - thumb_func_start FUN_020303BC -FUN_020303BC: ; 0x020303BC - push {r4-r6, lr} - ldr r3, _020303EC ; =UNK_021C59F4 - ldr r6, _020303F0 ; =0x0000066F - ldr r5, [r3, #0x4] - add r4, r5, r0 - ldrb r4, [r4, r6] - cmp r4, #0x0 - beq _020303E4 - add r1, r6, #0x0 - sub r1, #0x37 - add r4, r5, r1 - lsl r2, r0, #0x2 - ldr r1, [r4, r2] - sub r1, r1, #0x1 - str r1, [r4, r2] - ldr r1, [r3, #0x4] - mov r2, #0x0 - add r0, r1, r0 - strb r2, [r0, r6] - pop {r4-r6, pc} -_020303E4: - bl FUN_020303F4 - pop {r4-r6, pc} - nop -_020303EC: .word UNK_021C59F4 -_020303F0: .word 0x0000066F - - thumb_func_start FUN_020303F4 -FUN_020303F4: ; 0x020303F4 - push {r4-r6, lr} - ldr r3, _020304B8 ; =UNK_021C59F4 - add r5, r0, #0x0 - ldr r0, [r3, #0x4] - ldr r2, _020304BC ; =0x00000638 - add r4, r1, #0x0 - add r1, r0, r2 - lsl r0, r5, #0x2 - ldr r6, [r1, r0] - sub r6, r6, #0x1 - str r6, [r1, r0] - cmp r4, #0x0 - beq _020304B4 - ldr r0, [r3, #0x4] - add r2, #0x2f - add r0, r0, r2 - ldrb r1, [r0, r5] - cmp r1, #0x0 - beq _02030422 - ldrb r2, [r4, #0x0] - mov r1, #0x1 - tst r1, r2 - bne _020304B4 -_02030422: - mov r1, #0x0 - strb r1, [r0, r5] - bl FUN_0202FA28 - cmp r0, #0x1 - bne _02030478 - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02031228 - add r6, r0, #0x0 - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - ldrb r1, [r4, #0x0] - mov r0, #0x2 - tst r0, r1 - bne _02030468 - ldr r0, _020304B8 ; =UNK_021C59F4 - ldr r3, _020304C0 ; =0x0000065E - ldr r1, [r0, #0x4] - ldr r0, _020304C4 ; =0x0000047C - add r2, r6, #0x0 - add r1, r1, r0 - mov r0, #0xc - mul r0, r5 - add r0, r1, r0 - add r1, r4, #0x0 - bl FUN_0202D3A4 -_02030468: - ldr r0, _020304B8 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _020304C8 ; =0x0000065F - add r1, r1, r0 - ldrb r0, [r1, r5] - add r0, r0, #0x1 - strb r0, [r1, r5] - pop {r4-r6, pc} -_02030478: - add r0, r4, #0x0 - add r1, r5, #0x0 - bl FUN_020307E4 - ldrb r1, [r4, #0x0] - mov r0, #0x2 - tst r0, r1 - bne _020304B4 - mov r0, #0xc - add r6, r5, #0x0 - mul r6, r0 - ldr r0, _020304B8 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _020304CC ; =0x000004E8 - add r0, r1, r0 - add r0, r0, r6 - bl FUN_0202D498 - cmp r0, #0xb - blt _020304B4 - ldr r0, _020304B8 ; =UNK_021C59F4 - ldr r3, _020304D0 ; =0x0000066E - ldr r1, [r0, #0x4] - ldr r0, _020304CC ; =0x000004E8 - mov r2, #0xb - add r0, r1, r0 - add r0, r0, r6 - add r1, r4, #0x1 - bl FUN_0202D3A4 -_020304B4: - pop {r4-r6, pc} - nop -_020304B8: .word UNK_021C59F4 -_020304BC: .word 0x00000638 -_020304C0: .word 0x0000065E -_020304C4: .word 0x0000047C -_020304C8: .word 0x0000065F -_020304CC: .word 0x000004E8 -_020304D0: .word 0x0000066E - - thumb_func_start FUN_020304D4 -FUN_020304D4: ; 0x020304D4 - push {r3, lr} - cmp r0, #0x0 - beq _020304E4 - ldr r0, _020304EC ; =UNK_02105D58 - ldrb r1, [r0, #0x0] - add r1, r1, #0x1 - strb r1, [r0, #0x0] - pop {r3, pc} -_020304E4: - bl ErrorHandling - pop {r3, pc} - nop -_020304EC: .word UNK_02105D58 - - thumb_func_start FUN_020304F0 -FUN_020304F0: ; 0x020304F0 - push {r3, lr} - cmp r0, #0x0 - beq _02030500 - ldr r0, _02030508 ; =UNK_02105D58 - ldrb r1, [r0, #0x1] - add r1, r1, #0x1 - strb r1, [r0, #0x1] - pop {r3, pc} -_02030500: - bl ErrorHandling - pop {r3, pc} - nop -_02030508: .word UNK_02105D58 - - thumb_func_start FUN_0203050C -FUN_0203050C: ; 0x0203050C - push {r4, lr} - ldr r0, _02030660 ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _0203051E - bl FUN_02033534 - cmp r0, #0x13 - blt _02030520 -_0203051E: - b _0203065E -_02030520: - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02031228 - add r4, r0, #0x0 - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - bl FUN_02031280 - cmp r0, #0x0 - beq _02030594 - ldr r0, _02030664 ; =UNK_02105D58 - ldrb r1, [r0, #0x0] - cmp r1, #0x2 - beq _02030550 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _02030594 -_02030550: - ldr r0, _02030664 ; =UNK_02105D58 - ldrb r1, [r0, #0x0] - add r1, r1, #0x1 - strb r1, [r0, #0x0] - mov r0, #0x1 - bl FUN_020304D4 - ldr r0, _02030660 ; =UNK_021C59F4 - ldr r1, _02030668 ; =0x0000067F - ldr r3, [r0, #0x4] - mov r0, #0x0 - ldrb r2, [r3, r1] - mov r1, #0x26 - mul r1, r2 - lsl r2, r4, #0x10 - add r1, r3, r1 - lsr r2, r2, #0x10 - bl FUN_020303F4 - ldr r2, _02030660 ; =UNK_021C59F4 - ldr r1, _02030668 ; =0x0000067F - ldr r4, [r2, #0x4] - mov r0, #0x1 - ldrb r3, [r4, r1] - sub r0, r0, r3 - strb r0, [r4, r1] - add r0, r1, #0x0 - ldr r2, [r2, #0x4] - sub r0, #0x4b - ldr r0, [r2, r0] - sub r1, #0x4b - add r0, r0, #0x1 - str r0, [r2, r1] - pop {r4, pc} -_02030594: - bl FUN_0202CBD4 - cmp r0, #0x4 - bne _0203065E - bl FUN_02031190 - bl FUN_02030E7C - cmp r0, #0x0 - bne _020305AE - bl FUN_02031190 - pop {r4, pc} -_020305AE: - ldr r0, _02030664 ; =UNK_02105D58 - ldrb r1, [r0, #0x0] - cmp r1, #0x2 - beq _020305BC - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _0203065E -_020305BC: - bl FUN_02031190 - cmp r0, #0x0 - beq _02030612 - ldr r0, _02030664 ; =UNK_02105D58 - ldr r3, _0203066C ; =FUN_020304D4 - ldrb r1, [r0, #0x0] - add r1, r1, #0x1 - strb r1, [r0, #0x0] - ldr r0, _02030660 ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - ldr r0, _02030668 ; =0x0000067F - ldrb r1, [r2, r0] - mov r0, #0x26 - mul r0, r1 - lsl r1, r4, #0x10 - add r0, r2, r0 - lsr r1, r1, #0x10 - mov r2, #0xe - bl FUN_0202D0D0 - cmp r0, #0x0 - bne _020305F4 - ldr r0, _02030664 ; =UNK_02105D58 - ldrb r1, [r0, #0x0] - sub r1, r1, #0x1 - strb r1, [r0, #0x0] - pop {r4, pc} -_020305F4: - ldr r2, _02030660 ; =UNK_021C59F4 - ldr r1, _02030668 ; =0x0000067F - ldr r4, [r2, #0x4] - mov r0, #0x1 - ldrb r3, [r4, r1] - sub r0, r0, r3 - strb r0, [r4, r1] - add r0, r1, #0x0 - ldr r2, [r2, #0x4] - sub r0, #0x4b - ldr r0, [r2, r0] - sub r1, #0x4b - add r0, r0, #0x1 - str r0, [r2, r1] - pop {r4, pc} -_02030612: - bl FUN_0202CB8C - ldr r1, _02030670 ; =0x0000FFFE - tst r0, r1 - beq _0203065E - ldr r0, _02030664 ; =UNK_02105D58 - ldrb r1, [r0, #0x0] - add r1, r1, #0x1 - strb r1, [r0, #0x0] - mov r0, #0x1 - bl FUN_020304D4 - ldr r0, _02030660 ; =UNK_021C59F4 - ldr r1, _02030668 ; =0x0000067F - ldr r3, [r0, #0x4] - mov r0, #0x0 - ldrb r2, [r3, r1] - mov r1, #0x26 - mul r1, r2 - lsl r2, r4, #0x10 - add r1, r3, r1 - lsr r2, r2, #0x10 - bl FUN_020303F4 - ldr r2, _02030660 ; =UNK_021C59F4 - ldr r1, _02030668 ; =0x0000067F - ldr r4, [r2, #0x4] - mov r0, #0x1 - ldrb r3, [r4, r1] - sub r0, r0, r3 - strb r0, [r4, r1] - add r0, r1, #0x0 - ldr r2, [r2, #0x4] - sub r0, #0x4b - ldr r0, [r2, r0] - sub r1, #0x4b - add r0, r0, #0x1 - str r0, [r2, r1] -_0203065E: - pop {r4, pc} - .balign 4 -_02030660: .word UNK_021C59F4 -_02030664: .word UNK_02105D58 -_02030668: .word 0x0000067F -_0203066C: .word FUN_020304D4 -_02030670: .word 0x0000FFFE - - thumb_func_start FUN_02030674 -FUN_02030674: ; 0x02030674 - push {r3-r7, lr} - ldr r7, _02030798 ; =UNK_021C59F4 - mov r6, #0x0 - ldr r5, [r7, #0x4] - ldr r2, _0203079C ; =0x0000062C - add r4, r6, #0x0 - ldrb r0, [r5, r2] - cmp r0, #0x0 - beq _02030690 - sub r1, r2, #0x4 - ldrh r1, [r5, r1] - mov r3, #0xf0 - tst r3, r1 - bne _02030692 -_02030690: - b _02030794 -_02030692: - cmp r0, #0x2 - bne _020306D0 - mov r0, #0x20 - tst r0, r1 - beq _020306A4 - mov r0, #0x10 - orr r0, r6 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 -_020306A4: - mov r0, #0x10 - tst r0, r1 - beq _020306B2 - mov r0, #0x20 - orr r0, r4 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 -_020306B2: - mov r0, #0x40 - tst r0, r1 - beq _020306C0 - mov r0, #0x80 - orr r0, r4 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 -_020306C0: - mov r0, #0x80 - tst r0, r1 - beq _0203077E - mov r0, #0x40 - orr r0, r4 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 - b _0203077E -_020306D0: - add r0, r2, #0x2 - ldrh r0, [r5, r0] - cmp r0, #0x0 - beq _020306F2 - add r4, r0, #0x0 - add r0, r2, #0x1 - ldrsb r0, [r5, r0] - sub r1, r0, #0x1 - add r0, r2, #0x1 - strb r1, [r5, r0] - ldr r1, [r7, #0x4] - ldrsb r0, [r1, r0] - cmp r0, #0x0 - bge _0203077E - add r0, r2, #0x2 - strh r6, [r1, r0] - b _0203077E -_020306F2: - add r0, r2, #0x0 - sub r0, #0x34 - add r6, r5, r0 - sub r2, #0x34 - ldr r0, [r6, #0x8] - ldr r1, [r6, #0xc] - ldr r2, [r5, r2] - ldr r3, [r6, #0x4] - bl _ll_mul - add r3, r0, #0x0 - add r2, r1, #0x0 - ldr r0, [r6, #0x10] - ldr r1, [r6, #0x14] - add r0, r0, r3 - adc r1, r2 - ldr r2, _020307A0 ; =0x000005F8 - str r0, [r5, r2] - mov r2, #0x0 - str r1, [r6, #0x4] - lsr r0, r1, #0x1e - lsl r1, r2, #0x2 - orr r1, r0 - cmp r1, #0x3 - bhi _02030746 - add r0, r1, r1 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02030730: ; jump table (using 16-bit offset) - .short _02030738 - _02030730 - 2; case 0 - .short _0203073C - _02030730 - 2; case 1 - .short _02030740 - _02030730 - 2; case 2 - .short _02030744 - _02030730 - 2; case 3 -_02030738: - mov r4, #0x20 - b _02030746 -_0203073C: - mov r4, #0x10 - b _02030746 -_02030740: - mov r4, #0x40 - b _02030746 -_02030744: - mov r4, #0x80 -_02030746: - ldr r0, _02030798 ; =UNK_021C59F4 - ldr r5, [r0, #0x4] - ldr r0, _020307A0 ; =0x000005F8 - add r6, r5, r0 - ldr r0, [r6, #0x8] - ldr r1, [r6, #0xc] - ldr r2, [r6, #0x0] - ldr r3, [r6, #0x4] - bl _ll_mul - ldr r3, [r6, #0x10] - ldr r2, [r6, #0x14] - add r0, r3, r0 - adc r2, r1 - ldr r1, _020307A0 ; =0x000005F8 - mov r3, #0x0 - str r0, [r5, r1] - str r2, [r6, #0x4] - lsr r0, r2, #0x1c - lsl r2, r3, #0x4 - orr r2, r0 - add r0, r1, #0x0 - add r0, #0x35 - strb r2, [r5, r0] - ldr r0, _02030798 ; =UNK_021C59F4 - add r1, #0x36 - ldr r0, [r0, #0x4] - strh r4, [r0, r1] -_0203077E: - ldr r2, _02030798 ; =UNK_021C59F4 - ldr r1, _020307A4 ; =0x00000628 - ldr r5, [r2, #0x4] - mov r0, #0xf0 - ldrh r3, [r5, r1] - bic r3, r0 - strh r3, [r5, r1] - ldr r2, [r2, #0x4] - ldrh r0, [r2, r1] - add r0, r0, r4 - strh r0, [r2, r1] -_02030794: - pop {r3-r7, pc} - nop -_02030798: .word UNK_021C59F4 -_0203079C: .word 0x0000062C -_020307A0: .word 0x000005F8 -_020307A4: .word 0x00000628 - - thumb_func_start FUN_020307A8 -FUN_020307A8: ; 0x020307A8 - ldr r0, _020307B4 ; =UNK_021C59F4 - mov r2, #0x1 - ldr r1, [r0, #0x4] - ldr r0, _020307B8 ; =0x0000062C - strb r2, [r1, r0] - bx lr - .balign 4 -_020307B4: .word UNK_021C59F4 -_020307B8: .word 0x0000062C - - thumb_func_start FUN_020307BC -FUN_020307BC: ; 0x020307BC - ldr r0, _020307C8 ; =UNK_021C59F4 - mov r2, #0x2 - ldr r1, [r0, #0x4] - ldr r0, _020307CC ; =0x0000062C - strb r2, [r1, r0] - bx lr - .balign 4 -_020307C8: .word UNK_021C59F4 -_020307CC: .word 0x0000062C - - thumb_func_start FUN_020307D0 -FUN_020307D0: ; 0x020307D0 - ldr r0, _020307DC ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _020307E0 ; =0x0000062C - strb r2, [r1, r0] - bx lr - .balign 4 -_020307DC: .word UNK_021C59F4 -_020307E0: .word 0x0000062C - - thumb_func_start FUN_020307E4 -FUN_020307E4: ; 0x020307E4 - push {r4-r7} - ldr r4, _02030868 ; =UNK_021C59F4 - lsl r6, r1, #0x1 - ldr r2, [r4, #0x4] - mov r5, #0x0 - add r3, r2, r6 - mov r2, #0x61 - lsl r2, r2, #0x4 - strh r5, [r3, r2] - ldrb r5, [r0, #0x0] - mov r3, #0x10 - add r7, r5, #0x0 - and r7, r3 - cmp r7, #0x10 - bne _02030860 - mov r7, #0xc - and r5, r7 - lsl r5, r5, #0x18 - lsr r5, r5, #0x18 - bne _0203081A - ldr r3, [r4, #0x4] - add r4, r3, r2 - ldrh r3, [r4, r6] - mov r2, #0x40 - orr r2, r3 - strh r2, [r4, r6] - b _0203084C -_0203081A: - cmp r5, #0x4 - bne _0203082C - ldr r3, [r4, #0x4] - add r4, r3, r2 - ldrh r3, [r4, r6] - mov r2, #0x80 - orr r2, r3 - strh r2, [r4, r6] - b _0203084C -_0203082C: - cmp r5, #0x8 - bne _0203083E - ldr r3, [r4, #0x4] - add r4, r3, r2 - ldrh r3, [r4, r6] - mov r2, #0x20 - orr r2, r3 - strh r2, [r4, r6] - b _0203084C -_0203083E: - cmp r5, #0xc - bne _0203084C - ldr r4, [r4, #0x4] - add r4, r4, r2 - ldrh r2, [r4, r6] - orr r2, r3 - strh r2, [r4, r6] -_0203084C: - ldrb r0, [r0, #0x0] - asr r2, r0, #0x5 - mov r0, #0x7 - and r2, r0 - ldr r0, _02030868 ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - add r1, r0, r1 - mov r0, #0x62 - lsl r0, r0, #0x4 - strb r2, [r1, r0] -_02030860: - mov r0, #0x1 - pop {r4-r7} - bx lr - nop -_02030868: .word UNK_021C59F4 - - thumb_func_start FUN_0203086C -FUN_0203086C: ; 0x0203086C - bx lr - .balign 4 - - thumb_func_start FUN_02030870 -FUN_02030870: ; 0x02030870 - push {r4, lr} - add r4, r0, #0x0 - ldr r0, _0203091C ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _02030920 ; =0x0000062A - ldrb r0, [r1, r0] - cmp r0, #0x0 - beq _02030884 - mov r0, #0x0 - pop {r4, pc} -_02030884: - bl FUN_02030FE0 - cmp r0, #0x0 - bne _02030890 - mov r0, #0x0 - pop {r4, pc} -_02030890: - ldr r0, _0203091C ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - ldr r0, _02030924 ; =0x00000681 - ldrb r1, [r2, r0] - cmp r1, #0x0 - beq _020308A0 - sub r1, r1, #0x1 - strb r1, [r2, r0] -_020308A0: - ldr r1, _0203091C ; =UNK_021C59F4 - ldr r0, _02030928 ; =0x00000628 - ldr r2, [r1, #0x4] - mov r3, #0x40 - ldrh r2, [r2, r0] - tst r3, r2 - beq _020308C0 - ldrb r3, [r4, #0x0] - mov r2, #0x10 - add r0, #0x59 - orr r2, r3 - strb r2, [r4, #0x0] - ldr r1, [r1, #0x4] - mov r2, #0x8 - strb r2, [r1, r0] - b _02030906 -_020308C0: - mov r3, #0x80 - tst r3, r2 - beq _020308D8 - ldrb r3, [r4, #0x0] - mov r2, #0x14 - add r0, #0x59 - orr r2, r3 - strb r2, [r4, #0x0] - ldr r1, [r1, #0x4] - mov r2, #0x8 - strb r2, [r1, r0] - b _02030906 -_020308D8: - mov r3, #0x20 - tst r3, r2 - beq _020308F0 - ldrb r3, [r4, #0x0] - mov r2, #0x18 - add r0, #0x59 - orr r2, r3 - strb r2, [r4, #0x0] - ldr r1, [r1, #0x4] - mov r2, #0x8 - strb r2, [r1, r0] - b _02030906 -_020308F0: - mov r3, #0x10 - tst r2, r3 - beq _02030906 - ldrb r3, [r4, #0x0] - mov r2, #0x1c - add r0, #0x59 - orr r2, r3 - strb r2, [r4, #0x0] - ldr r1, [r1, #0x4] - mov r2, #0x8 - strb r2, [r1, r0] -_02030906: - ldr r0, _0203091C ; =UNK_021C59F4 - ldrb r2, [r4, #0x0] - ldr r1, [r0, #0x4] - ldr r0, _0203092C ; =0x0000062B - ldrb r0, [r1, r0] - lsl r0, r0, #0x5 - orr r0, r2 - strb r0, [r4, #0x0] - mov r0, #0x0 - pop {r4, pc} - nop -_0203091C: .word UNK_021C59F4 -_02030920: .word 0x0000062A -_02030924: .word 0x00000681 -_02030928: .word 0x00000628 -_0203092C: .word 0x0000062B - - thumb_func_start FUN_02030930 -FUN_02030930: ; 0x02030930 - push {r3-r5, lr} - sub sp, #0x8 - add r4, r0, #0x0 - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_02031228 - add r5, r0, #0x0 - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - ldr r0, _020309F0 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _020309F4 ; =0x00000684 - ldrb r0, [r1, r0] - cmp r0, #0x0 - bne _02030960 - mov r0, #0x0 - b _02030962 -_02030960: - mov r0, #0x1 -_02030962: - strb r0, [r4, #0x0] - bl FUN_0202FA28 - cmp r0, #0x0 - bne _02030972 - add r0, r4, #0x0 - bl FUN_02030870 -_02030972: - ldr r1, _020309F0 ; =UNK_021C59F4 - ldr r0, _020309F4 ; =0x00000684 - ldr r2, [r1, #0x4] - mov r3, #0x0 - strb r3, [r2, r0] - ldr r1, [r1, #0x4] - ldr r0, _020309F8 ; =0x0000054C - add r0, r1, r0 - bl FUN_0202D4E4 - cmp r0, #0x0 - beq _0203099E - ldrb r1, [r4, #0x0] - mov r0, #0x2 - orr r0, r1 - strb r0, [r4, #0x0] - ldrb r0, [r4, #0x0] - cmp r0, #0x2 - bne _020309E8 - add sp, #0x8 - mov r0, #0x0 - pop {r3-r5, pc} -_0203099E: - sub r0, r5, #0x1 - str r0, [sp, #0x4] - add r0, r4, #0x1 - str r0, [sp, #0x0] - ldr r0, _020309F0 ; =UNK_021C59F4 - mov r2, #0x1 - ldr r1, [r0, #0x4] - ldr r0, _020309F8 ; =0x0000054C - add r0, r1, r0 - add r1, sp, #0x0 - bl FUN_0202D760 - cmp r0, #0x0 - bne _020309C4 - ldr r0, _020309F0 ; =UNK_021C59F4 - mov r2, #0x1 - ldr r1, [r0, #0x4] - ldr r0, _020309F4 ; =0x00000684 - strb r2, [r1, r0] -_020309C4: - bl FUN_0202FA28 - cmp r0, #0x1 - bne _020309E8 - ldr r2, _020309F0 ; =UNK_021C59F4 - ldr r1, _020309FC ; =0x0000065E - ldr r3, [r2, #0x4] - ldrb r0, [r3, r1] - add r0, r0, #0x1 - strb r0, [r3, r1] - ldr r2, [r2, #0x4] - ldrb r0, [r4, #0x0] - ldrb r1, [r2, r1] - lsl r2, r1, #0x4 - mov r1, #0xf0 - and r1, r2 - orr r0, r1 - strb r0, [r4, #0x0] -_020309E8: - mov r0, #0x1 - add sp, #0x8 - pop {r3-r5, pc} - nop -_020309F0: .word UNK_021C59F4 -_020309F4: .word 0x00000684 -_020309F8: .word 0x0000054C -_020309FC: .word 0x0000065E - - thumb_func_start FUN_02030A00 -FUN_02030A00: ; 0x02030A00 - push {r4, lr} - sub sp, #0x8 - add r4, r0, #0x0 - mov r0, #0xb - strb r0, [r4, #0x0] - ldr r0, _02030A6C ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _02030A70 ; =0x00000685 - ldrb r0, [r1, r0] - cmp r0, #0x0 - bne _02030A1A - mov r0, #0x0 - b _02030A1C -_02030A1A: - mov r0, #0x1 -_02030A1C: - strb r0, [r4, #0x1] - bl FUN_0202CB8C - asr r1, r0, #0x8 - strb r1, [r4, #0x2] - strb r0, [r4, #0x3] - mov r0, #0xbb - str r0, [sp, #0x4] - add r0, r4, #0x5 - str r0, [sp, #0x0] - ldr r0, _02030A6C ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02030A74 ; =0x0000056C - add r0, r1, r0 - add r1, sp, #0x0 - bl FUN_0202D760 - cmp r0, #0x0 - beq _02030A5A - ldr r0, _02030A6C ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02030A70 ; =0x00000685 - strb r2, [r1, r0] - ldr r1, [sp, #0x4] - mov r0, #0xbb - sub r0, r0, r1 - add sp, #0x8 - strb r0, [r4, #0x4] - pop {r4, pc} -_02030A5A: - ldr r0, _02030A6C ; =UNK_021C59F4 - mov r2, #0x1 - ldr r1, [r0, #0x4] - ldr r0, _02030A70 ; =0x00000685 - strb r2, [r1, r0] - mov r0, #0xbb - strb r0, [r4, #0x4] - add sp, #0x8 - pop {r4, pc} - .balign 4 -_02030A6C: .word UNK_021C59F4 -_02030A70: .word 0x00000685 -_02030A74: .word 0x0000056C - - thumb_func_start FUN_02030A78 -FUN_02030A78: ; 0x02030A78 - push {r4-r6, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r4, r1, #0x0 - add r6, r2, #0x0 - bl FUN_02031190 - bl FUN_02030E7C - cmp r0, #0x0 - bne _02030A9C - bl FUN_02031280 - cmp r0, #0x0 - bne _02030A9C - add sp, #0x8 - mov r0, #0x0 - pop {r4-r6, pc} -_02030A9C: - mov r0, #0x1 - str r0, [sp, #0x0] - mov r0, #0x0 - str r0, [sp, #0x4] - ldr r0, _02030AD4 ; =UNK_021C59F4 - add r2, r4, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02030AD8 ; =0x0000054C - add r3, r6, #0x0 - add r0, r1, r0 - add r1, r5, #0x0 - bl FUN_0202D684 - cmp r0, #0x0 - beq _02030AC0 - add sp, #0x8 - mov r0, #0x1 - pop {r4-r6, pc} -_02030AC0: - bl FUN_02033534 - cmp r0, #0xa - bne _02030ACC - bl FUN_02031454 -_02030ACC: - mov r0, #0x0 - add sp, #0x8 - pop {r4-r6, pc} - nop -_02030AD4: .word UNK_021C59F4 -_02030AD8: .word 0x0000054C - - thumb_func_start FUN_02030ADC -FUN_02030ADC: ; 0x02030ADC - push {r4-r6, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r4, r1, #0x0 - add r6, r2, #0x0 - bl FUN_02031190 - bl FUN_02030E7C - cmp r0, #0x0 - bne _02030B00 - bl FUN_02031280 - cmp r0, #0x0 - bne _02030B00 - add sp, #0x8 - mov r0, #0x0 - pop {r4-r6, pc} -_02030B00: - mov r0, #0x1 - str r0, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, _02030B34 ; =UNK_021C59F4 - add r2, r4, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02030B38 ; =0x0000054C - add r3, r6, #0x0 - add r0, r1, r0 - add r1, r5, #0x0 - bl FUN_0202D684 - cmp r0, #0x0 - beq _02030B22 - add sp, #0x8 - mov r0, #0x1 - pop {r4-r6, pc} -_02030B22: - bl FUN_02033534 - cmp r0, #0xa - bne _02030B2E - bl FUN_02031454 -_02030B2E: - mov r0, #0x0 - add sp, #0x8 - pop {r4-r6, pc} - .balign 4 -_02030B34: .word UNK_021C59F4 -_02030B38: .word 0x0000054C - - thumb_func_start FUN_02030B3C -FUN_02030B3C: ; 0x02030B3C - push {r4-r6, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r4, r1, #0x0 - add r6, r2, #0x0 - bl FUN_02031190 - cmp r0, #0x0 - beq _02030B58 - bl ErrorHandling - add sp, #0x8 - mov r0, #0x0 - pop {r4-r6, pc} -_02030B58: - mov r0, #0x0 - bl FUN_02030E7C - cmp r0, #0x0 - bne _02030B70 - bl FUN_02031280 - cmp r0, #0x0 - bne _02030B70 - add sp, #0x8 - mov r0, #0x0 - pop {r4-r6, pc} -_02030B70: - bl FUN_0202FA28 - cmp r0, #0x1 - bne _02030B86 - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - bl FUN_02030A78 - add sp, #0x8 - pop {r4-r6, pc} -_02030B86: - mov r0, #0x1 - str r0, [sp, #0x0] - mov r0, #0x0 - str r0, [sp, #0x4] - ldr r0, _02030BBC ; =UNK_021C59F4 - add r2, r4, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02030BC0 ; =0x0000056C - add r3, r6, #0x0 - add r0, r1, r0 - add r1, r5, #0x0 - bl FUN_0202D684 - cmp r0, #0x0 - beq _02030BAA - add sp, #0x8 - mov r0, #0x1 - pop {r4-r6, pc} -_02030BAA: - bl FUN_02033534 - cmp r0, #0xa - bne _02030BB6 - bl FUN_02031454 -_02030BB6: - mov r0, #0x0 - add sp, #0x8 - pop {r4-r6, pc} - .balign 4 -_02030BBC: .word UNK_021C59F4 -_02030BC0: .word 0x0000056C - - thumb_func_start FUN_02030BC4 -FUN_02030BC4: ; 0x02030BC4 - push {r4-r6, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r4, r1, #0x0 - add r6, r2, #0x0 - bl FUN_02031190 - cmp r0, #0x0 - beq _02030BE0 - bl FUN_02031454 - add sp, #0x8 - mov r0, #0x0 - pop {r4-r6, pc} -_02030BE0: - mov r0, #0x0 - bl FUN_02030E7C - cmp r0, #0x0 - bne _02030BF8 - bl FUN_02031280 - cmp r0, #0x0 - bne _02030BF8 - add sp, #0x8 - mov r0, #0x0 - pop {r4-r6, pc} -_02030BF8: - bl FUN_0202FA28 - cmp r0, #0x1 - bne _02030C0E - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - bl FUN_02030ADC - add sp, #0x8 - pop {r4-r6, pc} -_02030C0E: - mov r0, #0x1 - str r0, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, _02030C44 ; =UNK_021C59F4 - add r2, r4, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02030C48 ; =0x0000056C - add r3, r6, #0x0 - add r0, r1, r0 - add r1, r5, #0x0 - bl FUN_0202D684 - cmp r0, #0x0 - beq _02030C30 - add sp, #0x8 - mov r0, #0x1 - pop {r4-r6, pc} -_02030C30: - bl FUN_02033534 - cmp r0, #0xa - bne _02030C3C - bl FUN_02031454 -_02030C3C: - mov r0, #0x0 - add sp, #0x8 - pop {r4-r6, pc} - nop -_02030C44: .word UNK_021C59F4 -_02030C48: .word 0x0000056C - - thumb_func_start FUN_02030C4C -FUN_02030C4C: ; 0x02030C4C - ldr r3, _02030C54 ; =FUN_02030BC4 - mov r2, #0x0 - bx r3 - nop -_02030C54: .word FUN_02030BC4 - - thumb_func_start FUN_02030C58 -FUN_02030C58: ; 0x02030C58 - ldr r0, _02030C64 ; =UNK_021C59F4 - ldr r3, _02030C68 ; =FUN_0202D498 - ldr r1, [r0, #0x4] - ldr r0, _02030C6C ; =0x00000464 - add r0, r1, r0 - bx r3 - .balign 4 -_02030C64: .word UNK_021C59F4 -_02030C68: .word FUN_0202D498 -_02030C6C: .word 0x00000464 - - thumb_func_start FUN_02030C70 -FUN_02030C70: ; 0x02030C70 - push {r4, lr} - ldr r4, [sp, #0x8] - bl FUN_0202D934 - mov r0, #0xee - strb r0, [r4, #0xa] - ldr r0, _02030C88 ; =0x0000FFFF - strh r0, [r4, #0x8] - mov r0, #0x0 - str r0, [r4, #0x4] - str r0, [r4, #0x0] - pop {r4, pc} - .balign 4 -_02030C88: .word 0x0000FFFF - - thumb_func_start FUN_02030C8C -FUN_02030C8C: ; 0x02030C8C - push {r4-r7, lr} - sub sp, #0x14 - add r6, r0, #0x0 - str r1, [sp, #0x4] - str r2, [sp, #0x8] - ldr r5, [sp, #0x28] - bl FUN_0202D478 - cmp r0, #0x0 - beq _02030D94 -_02030CA0: - ldrb r7, [r5, #0xa] - cmp r7, #0xee - bne _02030CB2 - add r0, r6, #0x0 - bl FUN_0202D41C - add r7, r0, #0x0 - cmp r7, #0xee - beq _02030D8A -_02030CB2: - mov r0, #0x4 - ldrsh r0, [r6, r0] - strb r7, [r5, #0xa] - ldrh r4, [r5, #0x8] - str r0, [sp, #0x10] - ldr r0, _02030D98 ; =0x0000FFFF - cmp r4, r0 - bne _02030D06 - add r0, r7, #0x0 - bl FUN_0202D9A0 - add r4, r0, #0x0 - ldr r0, _02030D9C ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _02030DA0 ; =0x00000689 - ldrb r0, [r1, r0] - cmp r0, #0x0 - bne _02030D94 - ldr r0, _02030D98 ; =0x0000FFFF - cmp r4, r0 - bne _02030D04 - add r0, r6, #0x0 - bl FUN_0202D478 - cmp r0, #0x1 - bge _02030CEE - ldr r0, [sp, #0x10] - add sp, #0x14 - strh r0, [r6, #0x4] - pop {r4-r7, pc} -_02030CEE: - add r0, r6, #0x0 - bl FUN_0202D41C - lsl r4, r0, #0x8 - add r0, r6, #0x0 - bl FUN_0202D41C - add r4, r4, r0 - mov r0, #0x4 - ldrsh r0, [r6, r0] - str r0, [sp, #0x10] -_02030D04: - strh r4, [r5, #0x8] -_02030D06: - add r0, r7, #0x0 - bl FUN_0202DA04 - cmp r0, #0x0 - beq _02030D5E - ldr r0, [r5, #0x4] - cmp r0, #0x0 - bne _02030D22 - ldrh r2, [r5, #0x8] - ldr r1, [sp, #0x4] - add r0, r7, #0x0 - bl FUN_0202DA40 - str r0, [r5, #0x4] -_02030D22: - ldr r2, [r5, #0x0] - ldr r1, [sp, #0x8] - add r0, r6, #0x0 - sub r2, r4, r2 - bl FUN_0202D400 - ldr r2, [r5, #0x4] - str r0, [sp, #0xc] - cmp r2, #0x0 - beq _02030D42 - ldr r1, [r5, #0x0] - ldr r0, [sp, #0x8] - add r1, r2, r1 - ldr r2, [sp, #0xc] - bl MI_CpuCopy8 -_02030D42: - ldr r1, [r5, #0x0] - ldr r0, [sp, #0xc] - add r0, r1, r0 - str r0, [r5, #0x0] - cmp r0, r4 - blt _02030D8A - str r5, [sp, #0x0] - ldr r0, [sp, #0x4] - ldr r3, [r5, #0x4] - add r1, r7, #0x0 - add r2, r4, #0x0 - bl FUN_02030C70 - b _02030D8A -_02030D5E: - add r0, r6, #0x0 - bl FUN_0202D478 - cmp r0, r4 - blt _02030D82 - ldr r1, [sp, #0x8] - add r0, r6, #0x0 - add r2, r4, #0x0 - bl FUN_0202D400 - ldr r0, [sp, #0x4] - ldr r3, [sp, #0x8] - add r1, r7, #0x0 - add r2, r4, #0x0 - str r5, [sp, #0x0] - bl FUN_02030C70 - b _02030D8A -_02030D82: - ldr r0, [sp, #0x10] - add sp, #0x14 - strh r0, [r6, #0x4] - pop {r4-r7, pc} -_02030D8A: - add r0, r6, #0x0 - bl FUN_0202D478 - cmp r0, #0x0 - bne _02030CA0 -_02030D94: - add sp, #0x14 - pop {r4-r7, pc} - .balign 4 -_02030D98: .word 0x0000FFFF -_02030D9C: .word UNK_021C59F4 -_02030DA0: .word 0x00000689 - - thumb_func_start FUN_02030DA4 -FUN_02030DA4: ; 0x02030DA4 - push {r3, lr} - ldr r0, _02030DF0 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - cmp r1, #0x0 - beq _02030DEE - ldr r0, _02030DF4 ; =0x0000068B - ldrb r0, [r1, r0] - cmp r0, #0x0 - bne _02030DEE - mov r0, #0x47 - lsl r0, r0, #0x4 - add r0, r1, r0 - bl FUN_0202D4BC - ldr r0, _02030DF0 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - mov r0, #0x47 - lsl r0, r0, #0x4 - add r0, r1, r0 - bl FUN_0202D478 - cmp r0, #0x0 - ble _02030DEE - ldr r0, _02030DF0 ; =UNK_021C59F4 - mov r2, #0x47 - ldr r3, [r0, #0x4] - ldr r0, _02030DF8 ; =0x000005EC - lsl r2, r2, #0x4 - add r0, r3, r0 - str r0, [sp, #0x0] - add r0, r3, r2 - sub r2, #0x10 - ldr r2, [r3, r2] - mov r1, #0x0 - mov r3, #0x1 - bl FUN_02030C8C -_02030DEE: - pop {r3, pc} - .balign 4 -_02030DF0: .word UNK_021C59F4 -_02030DF4: .word 0x0000068B -_02030DF8: .word 0x000005EC - - thumb_func_start FUN_02030DFC -FUN_02030DFC: ; 0x02030DFC - push {r3-r7, lr} - ldr r0, _02030E6C ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - cmp r1, #0x0 - beq _02030E68 - ldr r0, _02030E70 ; =0x0000068B - ldrb r0, [r1, r0] - cmp r0, #0x0 - bne _02030E68 - bl FUN_02033534 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r7, r0, #0x1 - mov r4, #0x0 - cmp r7, #0x0 - ble _02030E68 - ldr r6, _02030E6C ; =UNK_021C59F4 - add r5, r4, #0x0 -_02030E26: - ldr r1, [r6, #0x4] - ldr r0, _02030E74 ; =0x000004E8 - add r0, r1, r0 - add r0, r0, r5 - bl FUN_0202D4BC - ldr r1, [r6, #0x4] - ldr r0, _02030E74 ; =0x000004E8 - add r0, r1, r0 - add r0, r0, r5 - bl FUN_0202D478 - cmp r0, #0x0 - ble _02030E60 - ldr r3, [r6, #0x4] - ldr r0, _02030E78 ; =0x0000058C - mov r2, #0x46 - add r0, r3, r0 - add r0, r0, r5 - str r0, [sp, #0x0] - ldr r0, _02030E74 ; =0x000004E8 - lsl r2, r2, #0x4 - add r0, r3, r0 - ldr r2, [r3, r2] - add r0, r0, r5 - add r1, r4, #0x0 - mov r3, #0x0 - bl FUN_02030C8C -_02030E60: - add r4, r4, #0x1 - add r5, #0xc - cmp r4, r7 - blt _02030E26 -_02030E68: - pop {r3-r7, pc} - nop -_02030E6C: .word UNK_021C59F4 -_02030E70: .word 0x0000068B -_02030E74: .word 0x000004E8 -_02030E78: .word 0x0000058C - - thumb_func_start FUN_02030E7C -FUN_02030E7C: ; 0x02030E7C - push {r4, lr} - add r4, r0, #0x0 - ldr r0, _02030F14 ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - bne _02030E8C - mov r0, #0x0 - pop {r4, pc} -_02030E8C: - bl FUN_02033534 - cmp r0, #0x13 - blt _02030EC0 - ldr r0, _02030F14 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _02030F18 ; =0x00000687 - ldrb r0, [r1, r0] - cmp r0, #0x0 - beq _02030EBC - bl MOD04_021D8018 - mov r1, #0x0 - mvn r1, r1 - cmp r0, r1 - beq _02030EBC - cmp r4, #0x0 - bne _02030EB4 - mov r0, #0x1 - pop {r4, pc} -_02030EB4: - cmp r4, #0x1 - bne _02030EBC - mov r0, #0x1 - pop {r4, pc} -_02030EBC: - mov r0, #0x0 - pop {r4, pc} -_02030EC0: - bl FUN_02030F40 - cmp r0, #0x0 - bne _02030ECC - mov r0, #0x0 - pop {r4, pc} -_02030ECC: - bl FUN_0202CBD4 - cmp r0, #0x4 - beq _02030ED8 - mov r0, #0x0 - pop {r4, pc} -_02030ED8: - bl FUN_02031190 - cmp r4, r0 - bne _02030EE4 - mov r0, #0x1 - pop {r4, pc} -_02030EE4: - bl FUN_02031190 - cmp r0, #0x0 - bne _02030EFE - bl FUN_0202CB8C - mov r1, #0x1 - add r2, r1, #0x0 - lsl r2, r4 - tst r0, r2 - beq _02030F10 - add r0, r1, #0x0 - pop {r4, pc} -_02030EFE: - ldr r0, _02030F14 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _02030F1C ; =0x0000065C - ldrh r2, [r1, r0] - mov r0, #0x1 - add r1, r0, #0x0 - lsl r1, r4 - tst r1, r2 - bne _02030F12 -_02030F10: - mov r0, #0x0 -_02030F12: - pop {r4, pc} - .balign 4 -_02030F14: .word UNK_021C59F4 -_02030F18: .word 0x00000687 -_02030F1C: .word 0x0000065C - - thumb_func_start FUN_02030F20 -FUN_02030F20: ; 0x02030F20 - push {r3-r5, lr} - mov r4, #0x0 - add r5, r4, #0x0 -_02030F26: - lsl r0, r5, #0x10 - lsr r0, r0, #0x10 - bl FUN_02030E7C - cmp r0, #0x0 - beq _02030F34 - add r4, r4, #0x1 -_02030F34: - add r5, r5, #0x1 - cmp r5, #0x8 - blt _02030F26 - add r0, r4, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02030F40 -FUN_02030F40: ; 0x02030F40 - push {r3, lr} - ldr r0, _02030F5C ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _02030F56 - bl FUN_02033534 - cmp r0, #0x13 - blt _02030F56 - mov r0, #0x1 - pop {r3, pc} -_02030F56: - bl FUN_0202EDF8 - pop {r3, pc} - .balign 4 -_02030F5C: .word UNK_021C59F4 - - thumb_func_start FUN_02030F60 -FUN_02030F60: ; 0x02030F60 - ldr r1, _02030F6C ; =UNK_021C59F4 - ldr r2, [r1, #0x4] - ldr r1, _02030F70 ; =0x0000062B - strb r0, [r2, r1] - bx lr - nop -_02030F6C: .word UNK_021C59F4 -_02030F70: .word 0x0000062B - - thumb_func_start FUN_02030F74 -FUN_02030F74: ; 0x02030F74 - ldr r1, _02030F84 ; =UNK_021C59F4 - ldr r1, [r1, #0x4] - add r1, r1, r0 - mov r0, #0x62 - lsl r0, r0, #0x4 - ldrb r0, [r1, r0] - bx lr - nop -_02030F84: .word UNK_021C59F4 - - thumb_func_start FUN_02030F88 -FUN_02030F88: ; 0x02030F88 - ldr r1, _02030FA4 ; =UNK_021C59F4 - ldr r2, [r1, #0x4] - cmp r2, #0x0 - bne _02030F94 - mov r0, #0x0 - bx lr -_02030F94: - mov r1, #0x61 - lsl r1, r1, #0x4 - add r3, r2, r1 - lsl r2, r0, #0x1 - ldrh r0, [r3, r2] - mov r1, #0x0 - strh r1, [r3, r2] - bx lr - .balign 4 -_02030FA4: .word UNK_021C59F4 - - thumb_func_start FUN_02030FA8 -FUN_02030FA8: ; 0x02030FA8 - ldr r0, _02030FC0 ; =UNK_021C59F4 - ldr r3, [r0, #0x4] - cmp r3, #0x0 - beq _02030FBC - ldr r1, _02030FC4 ; =0x00000628 - mov r0, #0x2 - ldrh r2, [r3, r1] - lsl r0, r0, #0xe - orr r0, r2 - strh r0, [r3, r1] -_02030FBC: - bx lr - nop -_02030FC0: .word UNK_021C59F4 -_02030FC4: .word 0x00000628 - - thumb_func_start FUN_02030FC8 -FUN_02030FC8: ; 0x02030FC8 - ldr r0, _02030FD8 ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - cmp r2, #0x0 - beq _02030FD6 - ldr r0, _02030FDC ; =0x00000628 - mov r1, #0x0 - strh r1, [r2, r0] -_02030FD6: - bx lr - .balign 4 -_02030FD8: .word UNK_021C59F4 -_02030FDC: .word 0x00000628 - - thumb_func_start FUN_02030FE0 -FUN_02030FE0: ; 0x02030FE0 - ldr r0, _02030FF8 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - cmp r1, #0x0 - beq _02030FF4 - ldr r0, _02030FFC ; =0x00000628 - ldrh r1, [r1, r0] - mov r0, #0x2 - lsl r0, r0, #0xe - and r0, r1 - bx lr -_02030FF4: - mov r0, #0x1 - bx lr - .balign 4 -_02030FF8: .word UNK_021C59F4 -_02030FFC: .word 0x00000628 - - thumb_func_start FUN_02031000 -FUN_02031000: ; 0x02031000 - push {r4-r6, lr} - sub sp, #0x8 - add r5, r0, #0x0 - add r4, r1, #0x0 - add r6, r2, #0x0 - bl FUN_0202FA28 - cmp r0, #0x1 - bne _02031030 - mov r0, #0x1 - str r0, [sp, #0x0] - mov r0, #0x0 - str r0, [sp, #0x4] - ldr r0, _02031050 ; =UNK_021C59F4 - add r2, r4, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02031054 ; =0x0000054C - add r3, r6, #0x0 - add r0, r1, r0 - add r1, r5, #0x0 - bl FUN_0202D684 - add sp, #0x8 - pop {r4-r6, pc} -_02031030: - mov r0, #0x1 - str r0, [sp, #0x0] - mov r0, #0x0 - str r0, [sp, #0x4] - ldr r0, _02031050 ; =UNK_021C59F4 - add r2, r4, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02031058 ; =0x0000056C - add r3, r6, #0x0 - add r0, r1, r0 - add r1, r5, #0x0 - bl FUN_0202D684 - add sp, #0x8 - pop {r4-r6, pc} - nop -_02031050: .word UNK_021C59F4 -_02031054: .word 0x0000054C -_02031058: .word 0x0000056C - - thumb_func_start FUN_0203105C -FUN_0203105C: ; 0x0203105C - push {r3-r5, lr} - sub sp, #0x8 - add r5, r0, #0x0 - mov r0, #0x0 - str r0, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, _02031080 ; =UNK_021C59F4 - add r4, r1, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02031084 ; =0x0000054C - add r3, r2, #0x0 - add r0, r1, r0 - add r1, r5, #0x0 - add r2, r4, #0x0 - bl FUN_0202D684 - add sp, #0x8 - pop {r3-r5, pc} - .balign 4 -_02031080: .word UNK_021C59F4 -_02031084: .word 0x0000054C - - thumb_func_start FUN_02031088 -FUN_02031088: ; 0x02031088 - push {r3, lr} - ldr r0, _02031100 ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - cmp r2, #0x0 - beq _020310FC - ldr r1, _02031104 ; =0x0000067B - ldrb r0, [r2, r1] - cmp r0, #0x1 - beq _020310A0 - cmp r0, #0x3 - beq _020310D8 - pop {r3, pc} -_020310A0: - bl FUN_0202FA28 - cmp r0, #0x1 - bne _020310B8 - ldr r1, _02031100 ; =UNK_021C59F4 - mov r0, #0xb - ldr r2, [r1, #0x4] - ldr r1, _02031108 ; =0x0000067C - add r1, r2, r1 - bl FUN_020311D0 - b _020310C8 -_020310B8: - ldr r1, _02031100 ; =UNK_021C59F4 - mov r0, #0xb - ldr r2, [r1, #0x4] - ldr r1, _02031108 ; =0x0000067C - add r1, r2, r1 - mov r2, #0x1 - bl FUN_02030BC4 -_020310C8: - cmp r0, #0x0 - beq _020310FC - ldr r0, _02031100 ; =UNK_021C59F4 - mov r2, #0x2 - ldr r1, [r0, #0x4] - ldr r0, _02031104 ; =0x0000067B - strb r2, [r1, r0] - pop {r3, pc} -_020310D8: - add r1, r1, #0x1 - mov r0, #0xc - add r1, r2, r1 - bl FUN_020311D0 - cmp r0, #0x0 - beq _020310FC - ldr r0, _02031100 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _02031108 ; =0x0000067C - ldrb r0, [r1, r0] - bl FUN_0202F9E0 - ldr r0, _02031100 ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _02031104 ; =0x0000067B - strb r2, [r1, r0] -_020310FC: - pop {r3, pc} - nop -_02031100: .word UNK_021C59F4 -_02031104: .word 0x0000067B -_02031108: .word 0x0000067C - - thumb_func_start FUN_0203110C -FUN_0203110C: ; 0x0203110C - push {r4, lr} - add r4, r2, #0x0 - bl FUN_02031190 - cmp r0, #0x0 - bne _0203112A - ldr r1, _0203112C ; =UNK_021C59F4 - ldr r0, _02031130 ; =0x0000067B - ldr r2, [r1, #0x4] - mov r3, #0x1 - strb r3, [r2, r0] - ldrb r2, [r4, #0x0] - ldr r1, [r1, #0x4] - add r0, r0, #0x1 - strb r2, [r1, r0] -_0203112A: - pop {r4, pc} - .balign 4 -_0203112C: .word UNK_021C59F4 -_02031130: .word 0x0000067B - - thumb_func_start FUN_02031134 -FUN_02031134: ; 0x02031134 - push {r4, lr} - add r4, r2, #0x0 - bl FUN_02031190 - cmp r0, #0x0 - beq _02031152 - ldr r1, _02031154 ; =UNK_021C59F4 - ldrb r3, [r4, #0x0] - ldr r2, [r1, #0x4] - ldr r0, _02031158 ; =0x0000067C - strb r3, [r2, r0] - ldr r1, [r1, #0x4] - mov r2, #0x3 - sub r0, r0, #0x1 - strb r2, [r1, r0] -_02031152: - pop {r4, pc} - .balign 4 -_02031154: .word UNK_021C59F4 -_02031158: .word 0x0000067C - - thumb_func_start FUN_0203115C -FUN_0203115C: ; 0x0203115C - push {r4, lr} - add r4, r2, #0x0 - bl FUN_02031190 - cmp r0, #0x0 - bne _02031184 - ldr r0, _02031188 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _0203118C ; =0x0000067B - ldrb r0, [r1, r0] - cmp r0, #0x2 - bne _02031184 - ldrb r0, [r4, #0x0] - bl FUN_0202F9E0 - ldr r0, _02031188 ; =UNK_021C59F4 - mov r2, #0x0 - ldr r1, [r0, #0x4] - ldr r0, _0203118C ; =0x0000067B - strb r2, [r1, r0] -_02031184: - pop {r4, pc} - nop -_02031188: .word UNK_021C59F4 -_0203118C: .word 0x0000067B - - thumb_func_start FUN_02031190 -FUN_02031190: ; 0x02031190 - push {r3, lr} - ldr r0, _020311CC ; =UNK_021C59F4 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _020311C6 - bl FUN_02033534 - cmp r0, #0x13 - blt _020311B4 - bl MOD04_021D8018 - mov r1, #0x0 - mvn r1, r1 - cmp r0, r1 - beq _020311C6 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - pop {r3, pc} -_020311B4: - bl FUN_02031280 - cmp r0, #0x0 - beq _020311C0 - mov r0, #0x0 - pop {r3, pc} -_020311C0: - bl FUN_0202D19C - pop {r3, pc} -_020311C6: - mov r0, #0x0 - pop {r3, pc} - nop -_020311CC: .word UNK_021C59F4 - - thumb_func_start FUN_020311D0 -FUN_020311D0: ; 0x020311D0 - ldr r3, _020311D8 ; =FUN_02030ADC - mov r2, #0x0 - bx r3 - nop -_020311D8: .word FUN_02030ADC - - thumb_func_start FUN_020311DC -FUN_020311DC: ; 0x020311DC - ldr r3, _020311E4 ; =FUN_02030ADC - mov r1, #0x0 - add r2, r1, #0x0 - bx r3 - .balign 4 -_020311E4: .word FUN_02030ADC - - thumb_func_start FUN_020311E8 -FUN_020311E8: ; 0x020311E8 - ldr r3, _020311EC ; =FUN_0202EE24 - bx r3 - .balign 4 -_020311EC: .word FUN_0202EE24 - - thumb_func_start FUN_020311F0 -FUN_020311F0: ; 0x020311F0 - push {r3, lr} - bl FUN_02031280 - cmp r0, #0x0 - beq _020311FE - mov r0, #0x0 - pop {r3, pc} -_020311FE: - ldr r0, _02031220 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - cmp r1, #0x0 - beq _0203121A - ldr r0, _02031224 ; =0x00000689 - ldrb r0, [r1, r0] - cmp r0, #0x0 - beq _0203121A - mov r0, #0x1 - add r1, r0, #0x0 - bl FUN_020334E8 - mov r0, #0x1 - pop {r3, pc} -_0203121A: - bl FUN_0202EE60 - pop {r3, pc} - .balign 4 -_02031220: .word UNK_021C59F4 -_02031224: .word 0x00000689 - - thumb_func_start FUN_02031228 -FUN_02031228: ; 0x02031228 - push {r3, lr} - bl FUN_0202D858 - cmp r0, #0x5 - blo _02031236 - mov r0, #0xc - pop {r3, pc} -_02031236: - bl FUN_0202FA28 - cmp r0, #0x0 - bne _02031242 - mov r0, #0xc - pop {r3, pc} -_02031242: - mov r0, #0x26 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02031248 -FUN_02031248: ; 0x02031248 - push {r3, lr} - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D858 - add r0, r0, #0x1 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02031258 -FUN_02031258: ; 0x02031258 - push {r3, lr} - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bl FUN_0202D884 - add r0, r0, #0x1 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02031268 -FUN_02031268: ; 0x02031268 - ldr r1, _02031278 ; =UNK_021C59F4 - ldr r2, [r1, #0x4] - cmp r2, #0x0 - beq _02031274 - ldr r1, _0203127C ; =0x00000686 - strb r0, [r2, r1] -_02031274: - bx lr - nop -_02031278: .word UNK_021C59F4 -_0203127C: .word 0x00000686 - - thumb_func_start FUN_02031280 -FUN_02031280: ; 0x02031280 - ldr r0, _02031294 ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - cmp r1, #0x0 - beq _0203128E - ldr r0, _02031298 ; =0x00000686 - ldrb r0, [r1, r0] - bx lr -_0203128E: - mov r0, #0x0 - bx lr - nop -_02031294: .word UNK_021C59F4 -_02031298: .word 0x00000686 - - thumb_func_start FUN_0203129C -FUN_0203129C: ; 0x0203129C - push {r3, lr} - bl FUN_0202F03C - cmp r0, #0x0 - bne _020312B6 - bl FUN_02031190 - cmp r0, #0x0 - bne _020312B6 - mov r0, #0x2 - add r1, sp, #0x0 - bl FUN_02030C4C -_020312B6: - bl FUN_0202F05C - pop {r3, pc} - - thumb_func_start FUN_020312BC -FUN_020312BC: ; 0x020312BC - push {r3-r7, lr} - sub sp, #0x20 - add r4, r0, #0x0 - add r0, sp, #0x10 - add r1, sp, #0x4 - bl GF_RTC_CopyDateTime - ldr r0, _02031340 ; =gMain - ldr r6, [sp, #0x10] - mov r5, #0x0 - lsr r7, r6, #0x1c - lsl r5, r5, #0x4 - ldr r1, [sp, #0xc] - ldr r0, [r0, #0x2c] - lsl r6, r6, #0x4 - add r3, r1, r0 - ldr r0, [sp, #0x18] - orr r5, r7 - str r0, [sp, #0x0] - ldr r0, [sp, #0x14] - ldr r1, [sp, #0x4] - add r6, r0, r6 - ldr r0, _02031344 ; =0x00000000 - ldr r2, [sp, #0x8] - adc r0, r5 - lsr r5, r6, #0x1b - lsl r0, r0, #0x5 - orr r0, r5 - ldr r5, [sp, #0x0] - lsl r6, r6, #0x5 - add r6, r5, r6 - ldr r5, _02031344 ; =0x00000000 - adc r5, r0 - lsr r0, r6, #0x1b - lsl r5, r5, #0x5 - orr r5, r0 - lsl r0, r6, #0x5 - add r6, r1, r0 - ldr r1, _02031344 ; =0x00000000 - adc r1, r5 - lsr r0, r6, #0x1a - lsl r1, r1, #0x6 - orr r1, r0 - lsl r0, r6, #0x6 - add r5, r2, r0 - ldr r2, _02031344 ; =0x00000000 - adc r2, r1 - lsr r0, r5, #0x1a - lsl r1, r2, #0x6 - orr r1, r0 - lsl r0, r5, #0x6 - add r2, r3, r0 - ldr r0, _02031344 ; =0x00000000 - str r2, [r4, #0x0] - adc r0, r1 - str r0, [r4, #0x4] - ldr r1, _02031348 ; =0x6C078965 - ldr r0, _0203134C ; =0x5D588B65 - str r1, [r4, #0x8] - str r0, [r4, #0xc] - ldr r0, _02031350 ; =0x00269EC3 - str r0, [r4, #0x10] - mov r0, #0x0 - str r0, [r4, #0x14] - add sp, #0x20 - pop {r3-r7, pc} - .balign 4 -_02031340: .word gMain -_02031344: .word 0x00000000 -_02031348: .word 0x6C078965 -_0203134C: .word 0x5D588B65 -_02031350: .word 0x00269EC3 - - thumb_func_start FUN_02031354 -FUN_02031354: ; 0x02031354 - add r1, r0, #0x0 - ldr r0, _02031364 ; =UNK_021C59F4 - ldr r3, _02031368 ; =FUN_0202D830 - ldr r2, [r0, #0x4] - ldr r0, _0203136C ; =0x0000056C - add r0, r2, r0 - bx r3 - nop -_02031364: .word UNK_021C59F4 -_02031368: .word FUN_0202D830 -_0203136C: .word 0x0000056C - - thumb_func_start FUN_02031370 -FUN_02031370: ; 0x02031370 - ldr r0, _0203137C ; =UNK_021C59F4 - ldr r3, _02031380 ; =FUN_0202D4E4 - ldr r1, [r0, #0x4] - ldr r0, _02031384 ; =0x0000056C - add r0, r1, r0 - bx r3 - .balign 4 -_0203137C: .word UNK_021C59F4 -_02031380: .word FUN_0202D4E4 -_02031384: .word 0x0000056C - - thumb_func_start FUN_02031388 -FUN_02031388: ; 0x02031388 - ldr r0, _02031394 ; =UNK_021C59F4 - ldr r3, _02031398 ; =FUN_0202D4E4 - ldr r1, [r0, #0x4] - ldr r0, _0203139C ; =0x0000054C - add r0, r1, r0 - bx r3 - .balign 4 -_02031394: .word UNK_021C59F4 -_02031398: .word FUN_0202D4E4 -_0203139C: .word 0x0000054C - - thumb_func_start FUN_020313A0 -FUN_020313A0: ; 0x020313A0 - ldr r1, _020313AC ; =UNK_021C59F4 - ldr r2, [r1, #0x4] - ldr r1, _020313B0 ; =0x00000687 - strb r0, [r2, r1] - bx lr - nop -_020313AC: .word UNK_021C59F4 -_020313B0: .word 0x00000687 - - thumb_func_start FUN_020313B4 -FUN_020313B4: ; 0x020313B4 - ldr r2, _020313C4 ; =UNK_021C59F4 - ldr r2, [r2, #0x4] - cmp r2, #0x0 - beq _020313C2 - add r2, r2, r1 - ldr r1, _020313C8 ; =0x00000677 - strb r0, [r2, r1] -_020313C2: - bx lr - .balign 4 -_020313C4: .word UNK_021C59F4 -_020313C8: .word 0x00000677 - - thumb_func_start FUN_020313CC -FUN_020313CC: ; 0x020313CC - ldr r1, _020313E4 ; =UNK_021C59F4 - ldr r1, [r1, #0x4] - cmp r1, #0x0 - beq _020313E0 - add r2, r1, r0 - ldr r1, _020313E8 ; =0x00000677 - ldrb r1, [r2, r1] - cmp r1, #0xff - beq _020313E0 - add r0, r1, #0x0 -_020313E0: - bx lr - nop -_020313E4: .word UNK_021C59F4 -_020313E8: .word 0x00000677 - - thumb_func_start FUN_020313EC -FUN_020313EC: ; 0x020313EC - push {r3, lr} - bl FUN_02033534 - cmp r0, #0x13 - bge _020313FA - mov r0, #0x0 - pop {r3, pc} -_020313FA: - bl MOD04_021D8624 - pop {r3, pc} - - thumb_func_start FUN_02031400 -FUN_02031400: ; 0x02031400 - push {r4, lr} - add r4, r0, #0x0 - bl FUN_02033534 - cmp r0, #0x13 - blt _02031430 - ldr r2, _02031434 ; =UNK_021C59F4 - mov r1, #0x63 - ldr r0, [r2, #0x4] - lsl r1, r1, #0x4 - str r4, [r0, r1] - cmp r4, #0x0 - beq _02031430 - ldr r3, [r2, #0x4] - mov r4, #0x0 - add r0, r1, #0x4 - str r4, [r3, r0] - add r0, r1, #0x0 - ldr r3, [r2, #0x4] - add r0, #0x8 - str r4, [r3, r0] - ldr r0, [r2, #0x4] - add r1, #0xc - str r4, [r0, r1] -_02031430: - pop {r4, pc} - nop -_02031434: .word UNK_021C59F4 - - thumb_func_start FUN_02031438 -FUN_02031438: ; 0x02031438 - ldr r0, _0203144C ; =UNK_021C59F4 - ldr r1, [r0, #0x4] - ldr r0, _02031450 ; =0x00000681 - ldrb r0, [r1, r0] - cmp r0, #0x0 - beq _02031448 - mov r0, #0x1 - bx lr -_02031448: - mov r0, #0x0 - bx lr - .balign 4 -_0203144C: .word UNK_021C59F4 -_02031450: .word 0x00000681 - - thumb_func_start FUN_02031454 -FUN_02031454: ; 0x02031454 - ldr r0, _02031460 ; =UNK_021C59F4 - mov r2, #0x1 - ldr r1, [r0, #0x4] - ldr r0, _02031464 ; =0x00000689 - strb r2, [r1, r0] - bx lr - .balign 4 -_02031460: .word UNK_021C59F4 -_02031464: .word 0x00000689 - - thumb_func_start FUN_02031468 -FUN_02031468: ; 0x02031468 - ldr r0, _02031478 ; =UNK_021C59F4 - ldr r2, [r0, #0x4] - cmp r2, #0x0 - beq _02031476 - ldr r0, _0203147C ; =0x0000068A - mov r1, #0x1 - strb r1, [r2, r0] -_02031476: - bx lr - .balign 4 -_02031478: .word UNK_021C59F4 -_0203147C: .word 0x0000068A diff --git a/arm9/asm/unk_02033F50.s b/arm9/asm/unk_02033F50.s index cf84285f..a5439dfe 100644 --- a/arm9/asm/unk_02033F50.s +++ b/arm9/asm/unk_02033F50.s @@ -96,8 +96,8 @@ _02033FA4: mov r0, #0x0 add r1, r0, #0x0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -114,7 +114,7 @@ _02033FA4: ldr r0, _02034160 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] - bl FUN_0201E7A0 + bl GX_SwapDisplay ldr r3, _02034164 ; =0x04000050 mov r1, #0x0 strh r1, [r3, #0x0] @@ -130,7 +130,7 @@ _02033FA4: and r1, r2 str r1, [r0, #0x0] ldr r0, _02034170 ; =UNK_020EECD0 - bl FUN_0201E66C + bl GX_SetBanks add r0, r4, #0x0 bl FUN_02016B94 add r6, r0, #0x0 @@ -231,7 +231,7 @@ _02033FA4: bl AddTextPrinterParameterized add r0, r7, #0x0 bl String_dtor - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x0 bl FUN_0200E394 mov r0, #0x1 diff --git a/arm9/asm/unk_02034188.s b/arm9/asm/unk_02034188.s index d8b35c57..44144564 100644 --- a/arm9/asm/unk_02034188.s +++ b/arm9/asm/unk_02034188.s @@ -44,8 +44,8 @@ FUN_02034188: ; 0x02034188 mov r0, #0x0 add r1, r0, #0x0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -62,7 +62,7 @@ FUN_02034188: ; 0x02034188 ldr r0, _02034370 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] - bl FUN_0201E7A0 + bl GX_SwapDisplay ldr r3, _02034374 ; =0x04000050 mov r0, #0x0 strh r0, [r3, #0x0] @@ -78,7 +78,7 @@ FUN_02034188: ; 0x02034188 and r0, r1 str r0, [r2, #0x0] ldr r0, _02034380 ; =UNK_020EED2C - bl FUN_0201E66C + bl GX_SetBanks add r0, r4, #0x0 bl FUN_02016B94 str r0, [sp, #0x10] @@ -158,7 +158,7 @@ FUN_02034188: ; 0x02034188 bl AddTextPrinterParameterized add r0, r4, #0x0 bl String_dtor - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x0 bl FUN_0200E394 mov r0, #0x1 diff --git a/arm9/asm/unk_020343A8.s b/arm9/asm/unk_020343A8.s index fc2463b8..88fd2560 100644 --- a/arm9/asm/unk_020343A8.s +++ b/arm9/asm/unk_020343A8.s @@ -139,7 +139,7 @@ FUN_020344AC: ; 0x020344AC push {r4-r6, lr} add r5, r0, #0x0 add r4, r1, #0x0 - bl FUN_0203474C + bl MapHeader_GetMatrixId add r6, r0, #0x0 add r0, r4, #0x4 add r1, r6, #0x0 diff --git a/arm9/asm/unk_02034A28.s b/arm9/asm/unk_02034A28.s index d0cc2c05..e4c8097a 100644 --- a/arm9/asm/unk_02034A28.s +++ b/arm9/asm/unk_02034A28.s @@ -67,7 +67,7 @@ FUN_02034A98: ; 0x02034A98 push {r3-r5, lr} add r5, r0, #0x0 add r0, r1, #0x0 - bl FUN_02034810 + bl MapHeader_GetEventsBank add r4, r0, #0x0 mov r0, #0x20 add r1, r4, #0x0 @@ -406,11 +406,11 @@ FUN_02034CB4: ; 0x02034CB4 add r5, r0, #0x0 bl memset add r0, r4, #0x0 - bl FUN_020347D8 + bl MapHeader_HasWildEncounters cmp r0, #0x0 beq _02034CDE add r0, r4, #0x0 - bl FUN_020347FC + bl MapHeader_GetWildEncounterBank add r2, r0, #0x0 add r0, r5, #0x0 .ifdef DIAMOND @@ -436,7 +436,7 @@ FUN_02034CEC: ; 0x02034CEC push {r3-r5, lr} add r5, r0, #0x0 add r0, r1, #0x0 - bl FUN_0203479C + bl MapHeader_GetLevelScriptsBank mov r1, #0x82 lsl r1, r1, #0x4 mov r2, #0x1 diff --git a/arm9/asm/unk_02034FE4.s b/arm9/asm/unk_02034FE4.s index 2d66b396..8ff7abe0 100644 --- a/arm9/asm/unk_02034FE4.s +++ b/arm9/asm/unk_02034FE4.s @@ -128,7 +128,7 @@ FUN_02034FE4: ; 0x02034FE4 push {r3-r7, lr} add r7, r0, #0x0 add r0, r1, #0x0 - bl FUN_02034838 + bl MapHeader_GetWeatherType add r4, r0, #0x0 cmp r4, #0x18 blt _0203505C diff --git a/arm9/asm/unk_02035068.s b/arm9/asm/unk_02035068.s index 95c1867f..f0cdc150 100644 --- a/arm9/asm/unk_02035068.s +++ b/arm9/asm/unk_02035068.s @@ -67,7 +67,7 @@ FUN_02035068: ; 0x02035068 push {r3, lr} ldr r0, [r0, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034824 + bl MapHeader_GetMapSec cmp r0, #0x0 beq _0203507A mov r0, #0x1 @@ -1406,7 +1406,7 @@ _02035B2C: str r2, [r0, r1] mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0xb4 pop {r4-r7, pc} .balign 4 @@ -1870,7 +1870,7 @@ _02035ECC: bl FUN_0202A918 str r0, [r7, #0x20] ldr r0, [r5, #0xc] - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled str r0, [r7, #0x1c] ldr r0, [r5, #0xc] bl FUN_02079C70 @@ -1918,7 +1918,7 @@ _02035F4A: mov r0, #0x2 strb r0, [r7, #0x12] ldr r0, [r5, #0xc] - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled str r0, [r7, #0x1c] ldr r0, [r5, #0xc] bl FUN_02079C70 @@ -1975,7 +1975,7 @@ _02035FD0: mov r0, #0x2 strb r0, [r7, #0x12] ldr r0, [r5, #0xc] - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled str r0, [r7, #0x1c] ldr r0, [r5, #0xc] bl FUN_02079C70 diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s index 9d5e2f32..7c45ad7a 100644 --- a/arm9/asm/unk_020377F0.s +++ b/arm9/asm/unk_020377F0.s @@ -773,7 +773,7 @@ FUN_02037C00: ; 0x02037C00 bl FUN_0202A918 str r0, [r4, #0x20] ldr r0, [r5, #0xc] - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled str r0, [r4, #0x1c] ldr r0, [r5, #0xc] bl FUN_02079C70 @@ -827,7 +827,7 @@ FUN_02037C7C: ; 0x02037C7C strh r0, [r4, #0x18] strb r6, [r4, #0x12] add r0, r5, #0x0 - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled str r0, [r4, #0x1c] add r0, r5, #0x0 bl FUN_02079C70 @@ -874,7 +874,7 @@ FUN_02037CF0: ; 0x02037CF0 mov r0, #0x2 strb r0, [r4, #0x12] ldr r0, [r5, #0xc] - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled str r0, [r4, #0x1c] ldr r0, [r5, #0xc] bl FUN_02079C70 @@ -1426,7 +1426,7 @@ FUN_02038144: ; 0x02038144 bl Sav2_Pokedex_get str r0, [r5, #0x24] ldr r0, [r4, #0xc] - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled str r0, [r5, #0x30] ldr r0, [r4, #0xc] str r0, [r5, #0x10] @@ -2157,7 +2157,7 @@ FUN_020386E0: ; 0x020386E0 ldr r0, [r5, #0xc] str r0, [r4, #0x20] ldr r0, [r5, #0xc] - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled str r0, [r4, #0x34] ldr r0, [r4, #0x14] bl FUN_02033830 diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index f35fd58e..08416fc7 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -149,79 +149,79 @@ UNK_020F3538: ; 0x020F3538 .global gScriptCmdTable gScriptCmdTable: ; 0x020F355C - .word ScrCmd_nop - .word ScrCmd_nop2 - .word ScrCmd_end - .word ScrCmd_delay - .word ScrCmd_loadbyte - .word ScrCmd_loadword - .word ScrCmd_loadbytefromaddr - .word ScrCmd_writebytetoaddr - .word ScrCmd_setptrbyte - .word ScrCmd_copylocal - .word ScrCmd_copybyte - .word ScrCmd_compare_local_to_local - .word ScrCmd_compare_local_to_value - .word ScrCmd_compare_local_to_addr - .word ScrCmd_compare_addr_to_local - .word ScrCmd_compare_addr_to_value - .word ScrCmd_compare_addr_to_addr - .word ScrCmd_compare_var_to_value - .word ScrCmd_compare_var_to_var - .word FUN_02039C40 - .word FUN_02039C78 - .word FUN_02039CE4 - .word ScrCmd_goto - .word FUN_02039D10 - .word FUN_02039D48 - .word FUN_02039D78 - .word ScrCmd_call - .word ScrCmd_return - .word ScrCmd_goto_if - .word ScrCmd_call_if - .word ScrCmd_setflag - .word ScrCmd_clearflag - .word ScrCmd_checkflag - .word FUN_02039E84 - .word FUN_02039EC0 - .word ScrCmd_settrainerflag - .word ScrCmd_cleartrainerflag - .word ScrCmd_checktrainerflag - .word ScrCmd_addvar - .word ScrCmd_subvar - .word ScrCmd_setvar - .word ScrCmd_copyvar - .word ScrCmd_setorcopyvar - .word ScrCmd_message - .word FUN_0203A2C4 - .word FUN_0203A304 - .word FUN_0203A388 - .word FUN_0203A400 - .word FUN_0203A45C - .word FUN_0203A4D0 - .word FUN_0203A560 - .word FUN_0203A590 - .word FUN_0203A5D8 - .word FUN_0203A608 - .word FUN_0203A780 - .word FUN_0203A830 - .word FUN_0203A85C - .word FUN_0203A878 - .word FUN_0203A8B8 - .word FUN_0203A9F0 - .word FUN_0203AA90 - .word FUN_0203A630 - .word FUN_0203AAA0 + .word ScrCmd_Nop + .word ScrCmd_Dummy + .word ScrCmd_End + .word ScrCmd_Wait + .word ScrCmd_LoadByte + .word ScrCmd_LoadWord + .word ScrCmd_LoadByteFromAddr + .word ScrCmd_WriteByteToAddr + .word ScrCmd_SetPtrByte + .word ScrCmd_CopyLocal + .word ScrCmd_CopyByte + .word ScrCmd_CompareLocalToLocal + .word ScrCmd_CompareLocalToValue + .word ScrCmd_CompareLocalToAddr + .word ScrCmd_CompareAddrToLocal + .word ScrCmd_CompareAddrToValue + .word ScrCmd_CompareAddrToAddr + .word ScrCmd_CompareVarToValue + .word ScrCmd_CompareVarToVar + .word ScrCmd_RunScript + .word ScrCmd_RunScriptWait + .word ScrCmd_RestartCurrentScript + .word ScrCmd_GoTo + .word ScrCmd_ObjectGoTo + .word ScrCmd_BgGoTo + .word ScrCmd_DirectionGoTo + .word ScrCmd_Call + .word ScrCmd_Return + .word ScrCmd_GoToIf + .word ScrCmd_CallIf + .word ScrCmd_SetFlag + .word ScrCmd_ClearFlag + .word ScrCmd_CheckFlag + .word ScrCmd_CheckFlagVar + .word ScrCmd_SetFlagVar + .word ScrCmd_SetTrainerFlag + .word ScrCmd_ClearTrainerFlag + .word ScrCmd_CheckTrainerFlag + .word ScrCmd_AddVar + .word ScrCmd_SubVar + .word ScrCmd_SetVar + .word ScrCmd_CopyVar + .word ScrCmd_SetOrCopyVar + .word ScrCmd_Message + .word ScrCmd_Unk002C + .word ScrCmd_Unk002D + .word ScrCmd_Unk002E + .word ScrCmd_Unk002F + .word ScrCmd_WaitButtonAB + .word ScrCmd_WaitButton + .word ScrCmd_Unk0032 + .word ScrCmd_Unk0033 + .word ScrCmd_Unk0034 + .word ScrCmd_Unk0035 + .word ScrCmd_CreateMessageBox + .word ScrCmd_Unk0037 + .word ScrCmd_Unk0038 + .word ScrCmd_Unk0039 + .word ScrCmd_Unk003A + .word ScrCmd_Unk003B + .word ScrCmd_Menu + .word ScrCmd_ScrollBg + .word ScrCmd_YesNoMenu .word FUN_0203DEA8 - .word FUN_0203AB8C - .word FUN_0203AC14 - .word FUN_0203AC9C - .word FUN_0203AD08 - .word FUN_0203ADC4 - .word FUN_0203AE4C - .word FUN_0203AED4 - .word FUN_0203AF34 - .word FUN_0203AF58 + .word ScrCmd_Unk0040 + .word ScrCmd_Unk0041 + .word ScrCmd_Unk0042 + .word ScrCmd_Unk0043 + .word ScrCmd_Unk0044 + .word ScrCmd_Unk0045 + .word ScrCmd_Unk0046 + .word ScrCmd_Unk0047 + .word ScrCmd_Unk0048 .word FUN_020414E0 .word FUN_020414FC .word FUN_02041518 @@ -260,46 +260,46 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203B724 .word FUN_0203B758 .word FUN_0203B7D8 - .word FUN_02043C6C - .word FUN_02043C90 - .word FUN_02043CE4 - .word FUN_02043D78 - .word FUN_02043DC8 - .word FUN_02043DE0 - .word FUN_02043A44 - .word FUN_02043A94 - .word FUN_02043AAC - .word FUN_02043ACC - .word FUN_02043AFC - .word FUN_02043B28 - .word FUN_02045784 - .word FUN_020457DC - .word FUN_02045834 - .word FUN_0204588C - .word FUN_020458E4 - .word FUN_02045918 - .word FUN_02045950 - .word FUN_02045954 - .word FUN_02045958 - .word FUN_020459AC - .word FUN_020459E8 - .word FUN_02045A3C - .word FUN_02045A78 - .word FUN_02045ACC - .word FUN_02045B08 - .word FUN_02045B44 - .word FUN_02045B80 - .word FUN_02045BC8 - .word FUN_02045C04 - .word FUN_02045C40 - .word FUN_02045C7C - .word FUN_02045CD4 - .word FUN_02045D10 - .word FUN_02045D4C + .word ScrCmd_GiveMoney + .word ScrCmd_TakeMoneyImmediate + .word ScrCmd_HasEnoughMoneyImmediate + .word ScrCmd_Unk0072 + .word ScrCmd_Unk0073 + .word ScrCmd_Unk0074 + .word ScrCmd_Unk0075 + .word ScrCmd_Unk0076 + .word ScrCmd_Unk0077 + .word ScrCmd_GetCoins + .word ScrCmd_GiveCoins + .word ScrCmd_TakeCoinsImmediate + .word ScrCmd_GiveItem + .word ScrCmd_TakeItem + .word ScrCmd_HasSpaceForItem + .word ScrCmd_HasItem + .word ScrCmd_ItemIdIsTMOrHM + .word ScrCmd_GetItemPocketId + .word ScrCmd_Unk0081 + .word ScrCmd_Unk0082 + .word ScrCmd_Unk0083 + .word ScrCmd_Unk0084 + .word ScrCmd_Unk0085 + .word ScrCmd_Unk0086 + .word ScrCmd_Unk0087 + .word ScrCmd_Unk0088 + .word ScrCmd_Unk0089 + .word ScrCmd_Unk008A + .word ScrCmd_Unk008B + .word ScrCmd_Unk008C + .word ScrCmd_Unk008D + .word ScrCmd_Unk008E + .word ScrCmd_Unk008F + .word ScrCmd_Unk0090 + .word ScrCmd_Unk0091 + .word ScrCmd_Unk0092 .word FUN_0203B81C .word FUN_0203B85C .word FUN_0203B8A0 - .word ScrCmd_givemon + .word ScrCmd_GiveMon .word ScrCmd_giveegg .word ScrCmd_setpartymonmove .word ScrCmd_partymonhasmove @@ -354,28 +354,28 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203CB20 .word FUN_0203CB48 .word FUN_0203CB60 - .word FUN_020406CC - .word FUN_02040700 - .word FUN_02040724 - .word FUN_02040748 - .word FUN_02040790 - .word FUN_020407C8 - .word FUN_02040800 - .word FUN_0204083C - .word FUN_02040874 - .word FUN_0204091C - .word FUN_020409C0 - .word FUN_020409F8 - .word FUN_02040A30 - .word FUN_02040A7C - .word FUN_02040B0C - .word FUN_02040B5C - .word FUN_02040BAC + .word ScrCmd_GetPlayerName + .word ScrCmd_GetRivalName + .word ScrCmd_GetFriendName + .word ScrCmd_Unk00D0 + .word ScrCmd_GetItemName + .word ScrCmd_GetPocketName + .word ScrCmd_GetTMHMMoveName + .word ScrCmd_GetMoveName + .word ScrCmd_Unk00D5 + .word ScrCmd_Unk00D6 + .word ScrCmd_GetPoketchAppName + .word ScrCmd_GetTrainerClassName + .word ScrCmd_Unk00D9 + .word ScrCmd_Unk00DA + .word ScrCmd_Unk00DB + .word ScrCmd_Unk00DC + .word ScrCmd_Unk00DD .word FUN_0203CBBC - .word FUN_02040BFC - .word FUN_02040C34 - .word FUN_02040C6C - .word FUN_02040CA4 + .word ScrCmd_GetDecorationName + .word ScrCmd_GetUndergroundTrapName + .word ScrCmd_GetUndergroundItemName + .word ScrCmd_Unk00E2 .word FUN_0203CB70 .word FUN_0204185C .word FUN_0204188C @@ -514,8 +514,8 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203DC70 .word FUN_0203DC88 .word FUN_0203DCA0 - .word FUN_02043E00 - .word FUN_02043E20 + .word ScrCmd_Unk016D + .word ScrCmd_Unk016E .word FUN_0203DCB8 .word FUN_0203DCC8 .word FUN_0203DCD8 @@ -528,17 +528,17 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203C460 .word FUN_0203C4B0 .word FUN_0203D958 - .word FUN_02040D04 - .word FUN_02040D7C - .word FUN_02042B0C - .word FUN_02042B40 - .word FUN_02042B74 - .word FUN_02042BA8 - .word FUN_02042BDC - .word FUN_02042C10 - .word FUN_02042C44 - .word FUN_02042C8C - .word FUN_02042CBC + .word ScrCmd_Unk017B + .word ScrCmd_GetNatureName + .word ScrCmd_Unk017D + .word ScrCmd_Unk017E + .word ScrCmd_Unk017F + .word ScrCmd_Unk0180 + .word ScrCmd_Unk0181 + .word ScrCmd_Unk0182 + .word ScrCmd_Unk0183 + .word ScrCmd_Unk0184 + .word ScrCmd_Unk0185 .word FUN_0203D998 .word FUN_0203D9E8 .word FUN_0203DA78 @@ -546,10 +546,10 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203DAE8 .word FUN_0203DB38 .word FUN_0203DB88 - .word FUN_0203AB44 - .word FUN_0203AB74 + .word ScrCmd_ShowSaveClock + .word ScrCmd_HideSaveClock .word FUN_0203DBD4 - .word FUN_0203A484 + .word ScrCmd_WaitButtonABTime .word FUN_0203B8E4 .word FUN_0203B944 .word FUN_0203B968 @@ -568,20 +568,20 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203DE4C .word FUN_0203DE58 .word FUN_0203DE80 - .word FUN_02043CB4 - .word FUN_02043E9C - .word FUN_02044120 - .word FUN_02044138 - .word FUN_0204413C - .word FUN_02043E50 - .word FUN_02043E68 - .word FUN_02043EFC - .word FUN_02043D28 + .word ScrCmd_TakeMoneyAddress + .word ScrCmd_Unk01A4 + .word ScrCmd_Unk01A5 + .word ScrCmd_Unk01A6 + .word ScrCmd_Unk01A7 + .word ScrCmd_Unk01A8 + .word ScrCmd_Unk01A9 + .word ScrCmd_Unk01AA + .word ScrCmd_HasEnoughMoneyAddress .word FUN_0203DD50 - .word FUN_02044140 - .word FUN_02043F50 - .word FUN_02043FA0 - .word FUN_02043FF4 + .word ScrCmd_Unk01AD + .word ScrCmd_Unk01AE + .word ScrCmd_Unk01AF + .word ScrCmd_Unk01B0 .word FUN_0203DEC4 .word FUN_0203DEF8 .word FUN_0203DF2C @@ -593,10 +593,10 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_getpartymonfriendship .word FUN_020448D4 .word FUN_020449A4 - .word FUN_02044034 + .word ScrCmd_Unk01BC .word FUN_0203B618 - .word FUN_020440C0 - .word FUN_020440F0 + .word ScrCmd_Unk01BE + .word ScrCmd_Unk01BF .word FUN_02044F58 .word FUN_0203E018 .word FUN_0203E054 @@ -608,7 +608,7 @@ gScriptCmdTable: ; 0x020F355C .word FUN_02044D8C .word FUN_02044E34 .word FUN_02044E78 - .word FUN_02040E4C + .word ScrCmd_GetPokemonMoveName .word FUN_0203E138 .word FUN_0203E168 .word FUN_0203E254 @@ -646,21 +646,21 @@ gScriptCmdTable: ; 0x020F355C .word FUN_02044ED8 .word FUN_0203E4D8 .word FUN_02044F20 - .word FUN_02045268 - .word FUN_02045398 - .word FUN_0204539C - .word FUN_020452B4 - .word FUN_02045308 + .word ScrCmd_Unk01F1 + .word ScrCmd_Unk01F2 + .word ScrCmd_Unk01F3 + .word ScrCmd_Unk01F4 + .word ScrCmd_Unk01F5 .word ScrCmd_countpartymonsatorbelowlevel .word ScrCmd_survivepsn .word FUN_0203BC2C - .word FUN_02039A10 - .word ScrCmd_message_from - .word FUN_0203A098 - .word FUN_0203A0FC - .word FUN_0203A13C - .word FUN_0203A188 - .word FUN_0203A210 + .word ScrCmd_DebugWatch + .word ScrCmd_MessageFrom + .word ScrCmd_MessageFrom2 + .word ScrCmd_Unk01FC + .word ScrCmd_Unk01FD + .word ScrCmd_Unk01FE + .word ScrCmd_Unk01FF .word FUN_0203C7F4 .word FUN_0203C820 .word FUN_0203E5DC @@ -673,7 +673,7 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203BE50 .word FUN_0203BECC .word FUN_0203BF00 - .word FUN_0203A3C4 + .word ScrCmd_Unk020C .word FUN_0203E684 .word FUN_0203E6B4 .word FUN_0203E6C4 @@ -711,7 +711,7 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0204505C .word FUN_02045104 .word FUN_02045170 - .word FUN_02040EB4 + .word ScrCmd_Unk0232 .word FUN_0203E9CC .word FUN_0203EA68 .word FUN_02041E40 @@ -724,10 +724,10 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203EB48 .word FUN_0203EB88 .word FUN_02042D1C - .word FUN_02046010 - .word FUN_0204601C - .word FUN_02046028 - .word FUN_0204602C + .word ScrCmd_Unk023F + .word ScrCmd_Unk0240 + .word ScrCmd_Unk0241 + .word ScrCmd_Unk0242 .word FUN_0203C5BC .word FUN_0203C614 .word FUN_0203C680 @@ -742,12 +742,12 @@ gScriptCmdTable: ; 0x020F355C .word FUN_02041194 .word FUN_020411C4 .word FUN_02041340 - .word FUN_02040964 + .word ScrCmd_Unk0251 .word ScrCmd_pcfreespace - .word FUN_0204387C - .word FUN_020438D0 - .word FUN_02043918 - .word FUN_020439B4 + .word ScrCmd_Unk0253 + .word ScrCmd_Unk0254 + .word ScrCmd_Unk0255 + .word ScrCmd_Unk0256 .word FUN_0203FE80 .word FUN_0203EDA4 .word FUN_0203EDC8 @@ -758,7 +758,7 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203EE58 .word FUN_0203EE68 .word FUN_0203EE78 - .word FUN_02040DB4 + .word ScrCmd_GetFashionName .word FUN_0203EE98 .word FUN_0203EED8 .word FUN_0203EF58 @@ -770,16 +770,16 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203F110 .word FUN_0203F174 .word FUN_0203F19C - .word FUN_0203A288 + .word ScrCmd_Unk026D .word FUN_0203F234 .word FUN_0203F254 .word FUN_0203F26C .word FUN_0203C58C - .word FUN_02040DEC + .word ScrCmd_Unk0272 .word FUN_0203F2AC - .word FUN_02043B84 + .word ScrCmd_HasEnoughCoinsImmediate .word FUN_0203F2E4 - .word FUN_02043C28 + .word ScrCmd_CanGiveCoins .word FUN_0203F31C .word ScrCmd_getpartymonlevel .word FUN_0203F348 @@ -789,7 +789,7 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203F3AC .word FUN_0203F44C .word FUN_0203F418 - .word FUN_020408BC + .word ScrCmd_Unk0280 .word FUN_02044A0C .word FUN_0203F484 .word FUN_02041674 @@ -818,7 +818,7 @@ gScriptCmdTable: ; 0x020F355C .word FUN_02042A48 .word FUN_02042A98 .word FUN_0203D7DC - .word FUN_0203ACC4 + .word ScrCmd_Unk029D .word FUN_0203F8C0 .word FUN_0203F954 .word FUN_0204190C @@ -827,10 +827,10 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203F988 .word FUN_0203F9B0 .word FUN_0203B914 - .word FUN_020453A0 + .word ScrCmd_Unk02A6 .word FUN_0203FA14 - .word FUN_02043B54 - .word FUN_02043BD0 + .word ScrCmd_TakeCoinsAddress + .word ScrCmd_HasEnoughCoinsAddress .word FUN_0203FA58 .word FUN_0203B7F0 .word FUN_0203FB4C @@ -840,36 +840,36 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203FB94 .word FUN_0203FBA0 .word FUN_0203FBAC - .word FUN_02040EF8 + .word ScrCmd_GetSealName .word FUN_0203B2E0 .word FUN_0203FBBC .word FUN_0203FC1C .word FUN_020451D0 .word FUN_02042000 - .word FUN_0203AD54 + .word ScrCmd_Unk02B9 .word FUN_0203D4E8 .word FUN_0203D920 .word FUN_02041B40 .word FUN_0203D0A4 .word FUN_0203FC58 .word FUN_0203CAE8 - .word FUN_0203A340 + .word ScrCmd_Unk02C0 .word FUN_0203FC80 .word FUN_0203FCB0 .word FUN_0203FCDC - .word FUN_02040F34 - .word FUN_02040F6C - .word FUN_02040FA4 - .word FUN_02040FDC - .word FUN_02041014 - .word FUN_0204104C - .word FUN_02041094 - .word FUN_020410C8 - .word FUN_02041100 - .word FUN_02041138 - .word FUN_02041174 - .word FUN_0203AF84 - .word FUN_0203AFA4 + .word ScrCmd_GetItemNameWithIndefArticle + .word ScrCmd_GetItemNamePlural + .word ScrCmd_GetDecorationNameWithArticle + .word ScrCmd_GetUndergroundTrapNameWithArticle + .word ScrCmd_GetUndergroundItemNameWithArticle + .word ScrCmd_Unk02C9 + .word ScrCmd_Unk02CA + .word ScrCmd_GetFashionNameWithArticle + .word ScrCmd_Unk02CC + .word ScrCmd_GetSealNamePlural + .word ScrCmd_CapitalizeFirstChar + .word ScrCmd_Unk02CF + .word ScrCmd_Unk02D0 .text @@ -1925,7 +1925,7 @@ ScriptRunByIndex: ; 0x02039484 thumb_func_start LoadScriptsForCurrentMap LoadScriptsForCurrentMap: ; 0x0203949C push {r3, lr} - bl MapHeader_GetScrSeqReleaseNo + bl MapHeader_GetScriptsBank add r1, r0, #0x0 mov r0, #0xa mov r2, #0xb diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s index 8eac1942..7e25689f 100644 --- a/arm9/asm/unk_020476CC.s +++ b/arm9/asm/unk_020476CC.s @@ -525,7 +525,7 @@ FUN_02047A78: ; 0x02047A78 str r0, [r5, r1] ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034824 + bl MapHeader_GetMapSec mov r1, #0x56 lsl r1, r1, #0x2 str r0, [r5, r1] @@ -1161,7 +1161,7 @@ FUN_0204806C: ; 0x0204806C add r6, r0, #0x0 ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034860 + bl MapHeader_GetField17_0 mov r1, #0x15 lsl r1, r1, #0x4 str r0, [r5, r1] diff --git a/arm9/asm/unk_02048120.s b/arm9/asm/unk_02048120.s index 3c92ba05..6f303045 100644 --- a/arm9/asm/unk_02048120.s +++ b/arm9/asm/unk_02048120.s @@ -32,7 +32,7 @@ FUN_02048120: ; 0x02048120 sub sp, #0x8 add r4, r0, #0x0 ldr r0, _02048158 ; =UNK_020F465C - bl FUN_0201E66C + bl GX_SetBanks ldr r0, _0204815C ; =UNK_020F4630 bl FUN_02016BBC ldr r2, _02048160 ; =UNK_020F4640 diff --git a/arm9/asm/unk_020484A8.s b/arm9/asm/unk_020484A8.s index 833d62c0..4750c7ea 100644 --- a/arm9/asm/unk_020484A8.s +++ b/arm9/asm/unk_020484A8.s @@ -345,7 +345,7 @@ FUN_02048764: ; 0x02048764 add r0, r1, #0x0 bl FUN_0201901C ldr r0, _020487D4 ; =UNK_020F46B0 - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _020487D8 ; =0x04000304 ldrh r1, [r2, #0x0] lsr r0, r2, #0xb diff --git a/arm9/asm/unk_02048904.s b/arm9/asm/unk_02048904.s index d9259556..1fcababe 100644 --- a/arm9/asm/unk_02048904.s +++ b/arm9/asm/unk_02048904.s @@ -223,14 +223,14 @@ _02048A82: bl FUN_02034E10 add r6, r0, #0x0 add r0, r7, #0x0 - bl FUN_0203484C + bl MapHeader_GetCameraType cmp r6, r0 beq _02048AB4 bl ErrorHandling b _02048AB4 _02048AA6: add r0, r7, #0x0 - bl FUN_0203484C + bl MapHeader_GetCameraType add r1, r0, #0x0 ldr r0, [sp, #0x4] bl FUN_02034E18 diff --git a/arm9/asm/unk_0204AB0C.s b/arm9/asm/unk_0204AB0C.s index 45702b12..bea4eefa 100644 --- a/arm9/asm/unk_0204AB0C.s +++ b/arm9/asm/unk_0204AB0C.s @@ -121,11 +121,11 @@ FUN_0204ABA8: ; 0x0204ABA8 cmp r0, #0x0 bne _0204ABBE add r0, r4, #0x0 - bl FUN_020347B0 + bl MapHeader_GetDayMusicId b _0204ABC4 _0204ABBE: add r0, r4, #0x0 - bl FUN_020347C4 + bl MapHeader_GetNightMusicId _0204ABC4: add r6, r0, #0x0 ldr r0, [r5, #0xc] @@ -338,11 +338,11 @@ FUN_0204AD44: ; 0x0204AD44 cmp r0, #0x0 bne _0204AD58 add r0, r4, #0x0 - bl FUN_020347B0 + bl MapHeader_GetDayMusicId pop {r4, pc} _0204AD58: add r0, r4, #0x0 - bl FUN_020347C4 + bl MapHeader_GetNightMusicId pop {r4, pc} thumb_func_start FUN_0204AD60 diff --git a/arm9/asm/unk_0204AEA8.s b/arm9/asm/unk_0204AEA8.s deleted file mode 100644 index 018a64e2..00000000 --- a/arm9/asm/unk_0204AEA8.s +++ /dev/null @@ -1,67 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_0204AEA8 -FUN_0204AEA8: ; 0x0204AEA8 - push {r3-r5, lr} - add r4, r0, #0x0 - bl FUN_02046528 - add r5, r0, #0x0 - add r0, r4, #0x0 - bl FUN_0204652C - add r4, r0, #0x0 - ldr r1, [r4, #0x0] - cmp r1, #0x0 - beq _0204AEC6 - cmp r1, #0x1 - beq _0204AEE6 - b _0204AEF4 -_0204AEC6: - ldr r0, [r4, #0x8] - add r1, r5, #0x0 - add r2, r4, #0x4 - bl MOD05_021E3444 - ldr r1, [r4, #0xc] - mov r0, #0x5 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - mov r2, #0x1 - bl FUN_0200433C - ldr r0, [r4, #0x0] - add r0, r0, #0x1 - str r0, [r4, #0x0] - b _0204AEF4 -_0204AEE6: - ldr r1, [r4, #0x4] - cmp r1, #0x1 - bne _0204AEF4 - bl FreeToHeap - mov r0, #0x1 - pop {r3-r5, pc} -_0204AEF4: - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_0204AEF8 -FUN_0204AEF8: ; 0x0204AEF8 - push {r4-r6, lr} - add r6, r0, #0x0 - add r5, r1, #0x0 - mov r0, #0xb - mov r1, #0x10 - add r4, r2, #0x0 - bl AllocFromHeapAtEnd - add r2, r0, #0x0 - mov r0, #0x0 - str r0, [r2, #0x0] - str r0, [r2, #0x4] - str r5, [r2, #0x8] - ldr r1, _0204AF20 ; =FUN_0204AEA8 - add r0, r6, #0x0 - str r4, [r2, #0xc] - bl FUN_0204640C - pop {r4-r6, pc} - nop -_0204AF20: .word FUN_0204AEA8 diff --git a/arm9/asm/unk_02050E48.s b/arm9/asm/unk_02050E48.s index 5746b23f..c8a8a153 100644 --- a/arm9/asm/unk_02050E48.s +++ b/arm9/asm/unk_02050E48.s @@ -35,7 +35,7 @@ FUN_02050E48: ; 0x02050E48 add r0, r4, #0x0 bl FUN_0207C2A4 add r0, r6, #0x0 - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled str r0, [r4, #0x1c] add r0, r6, #0x0 bl FUN_02079C70 diff --git a/arm9/asm/unk_02053750.s b/arm9/asm/unk_02053750.s index 73072399..6ab54142 100644 --- a/arm9/asm/unk_02053750.s +++ b/arm9/asm/unk_02053750.s @@ -308,10 +308,10 @@ _02053912: bl FUN_02017FB4 mov r0, #0x1 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x2 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r1, #0x57 lsl r1, r1, #0x2 add r0, r4, #0x0 @@ -488,7 +488,7 @@ _02053A78: bge _02053B30 mov r0, #0x1 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x6 lsl r0, r0, #0x6 ldr r1, [r4, r0] @@ -559,7 +559,7 @@ _02053B00: _02053B16: mov r0, #0x2 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x62 lsl r0, r0, #0x2 ldr r0, [r4, r0] @@ -878,10 +878,10 @@ FUN_02053D70: ; 0x02053D70 str r0, [r4, #0x0] mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r4, pc} thumb_func_start FUN_02053D94 diff --git a/arm9/asm/unk_0205CE48.s b/arm9/asm/unk_0205CE48.s index 5ad7ca34..6e6f1f85 100644 --- a/arm9/asm/unk_0205CE48.s +++ b/arm9/asm/unk_0205CE48.s @@ -432,7 +432,7 @@ FUN_0205D170: ; 0x0205D170 push {r3-r5, lr} add r5, r0, #0x0 ldr r0, [r5, #0x0] - bl FUN_02034824 + bl MapHeader_GetMapSec cmp r0, #0x0 bne _0205D184 mov r0, #0x0 @@ -440,7 +440,7 @@ FUN_0205D170: ; 0x0205D170 pop {r3-r5, pc} _0205D184: ldr r0, [r5, #0x0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0x0 bne _0205D194 mov r0, #0x0 @@ -697,7 +697,7 @@ _0205D390: pop {r3-r5, pc} _0205D396: ldr r0, [r4, #0x0] - bl FUN_020348B4 + bl MapHeader_IsBikeAllowed cmp r0, #0x0 bne _0205D3A6 mov r0, #0x0 @@ -1178,7 +1178,7 @@ _0205D730: .word 0x000022F6 FUN_0205D734: ; 0x0205D734 push {r3, lr} ldr r0, [r0, #0x0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0x0 beq _0205D744 mov r0, #0x0 @@ -1595,7 +1595,7 @@ _0205DA8E: cmp r0, #0x1 bne _0205DAA6 ldr r0, [r4, #0x0] - bl FUN_0203487C + bl MapHeader_GetField17_6 cmp r0, #0x1 bne _0205DAA6 mov r0, #0x0 diff --git a/arm9/asm/unk_0205F7A0.s b/arm9/asm/unk_0205F7A0.s index 43358f72..b781112b 100644 --- a/arm9/asm/unk_0205F7A0.s +++ b/arm9/asm/unk_0205F7A0.s @@ -55,7 +55,7 @@ FUN_0205F7A0: ; 0x0205F7A0 asr r1, r1, #0x5 asr r2, r2, #0x5 bl FUN_0203451C - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0x0 beq _0205F806 str r4, [r5, #0x0] diff --git a/arm9/asm/unk_0205FA2C.s b/arm9/asm/unk_0205FA2C.s deleted file mode 100644 index ae0d9d3f..00000000 --- a/arm9/asm/unk_0205FA2C.s +++ /dev/null @@ -1,930 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern UNK_020F96DC - .extern UNK_020FA6E8 - - .section .rodata - - .global UNK_020F7454 -UNK_020F7454: ; 0x020F7454 - .byte 0x00, 0x01, 0x02, 0x04, 0x03, 0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00 - - .text - - thumb_func_start FUN_0205FA2C -FUN_0205FA2C: ; 0x0205FA2C - push {r3-r7, lr} - add r5, r0, #0x0 - add r7, r1, #0x0 - add r0, r2, #0x0 - mov r1, #0x40 - bl AllocFromHeapAtEnd - ldr r6, [r7, #0xc] - mov r1, #0x0 - mov r2, #0x40 - add r4, r0, #0x0 - bl MI_CpuFill8 - add r0, r6, #0x0 - bl Sav2_PlayerData_GetOptionsAddr - str r0, [r4, #0xc] - add r0, r6, #0x0 - bl SavArray_PlayerParty_get - str r0, [r4, #0x0] - add r0, r6, #0x0 - bl Sav2_Bag_get - str r0, [r4, #0x4] - add r0, r4, #0x0 - mov r1, #0x0 - add r0, #0x21 - strb r1, [r0, #0x0] - add r0, r4, #0x0 - ldrb r2, [r5, #0x8] - add r0, #0x20 - strb r2, [r0, #0x0] - add r0, r4, #0x0 - add r0, #0x32 - ldrb r0, [r0, #0x0] - mov r2, #0xf - ldrb r3, [r5, #0xa] - bic r0, r2 - mov r2, #0xf - and r2, r3 - orr r2, r0 - add r0, r4, #0x0 - add r0, #0x32 - strb r2, [r0, #0x0] - add r0, r4, #0x0 - add r0, #0x32 - ldrb r0, [r0, #0x0] - mov r2, #0xf0 - bic r0, r2 - ldrb r2, [r5, #0xb] - lsl r2, r2, #0x1c - lsr r2, r2, #0x18 - orr r2, r0 - add r0, r4, #0x0 - add r0, #0x32 - strb r2, [r0, #0x0] - add r0, r4, #0x0 - ldrb r2, [r5, #0xc] - add r0, #0x33 - strb r2, [r0, #0x0] - add r0, r4, #0x0 - ldrb r2, [r5, #0xd] - add r0, #0x22 - strb r2, [r0, #0x0] -_0205FAAE: - add r0, r5, r1 - ldrb r2, [r0, #0xe] - add r0, r4, r1 - add r0, #0x2c - strb r2, [r0, #0x0] - add r0, r1, #0x1 - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - cmp r1, #0x6 - blo _0205FAAE - ldr r1, _0205FAD4 ; =UNK_020F96DC - add r0, r7, #0x0 - add r2, r4, #0x0 - bl FUN_020373D4 - ldr r0, [r5, #0x14] - str r4, [r0, #0x0] - mov r0, #0x1 - pop {r3-r7, pc} - .balign 4 -_0205FAD4: .word UNK_020F96DC - - thumb_func_start FUN_0205FAD8 -FUN_0205FAD8: ; 0x0205FAD8 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, r1, #0x0 - bl FUN_0204647C - cmp r0, #0x0 - beq _0205FAEA - mov r0, #0x1 - pop {r3-r5, pc} -_0205FAEA: - ldr r0, [r5, #0x14] - ldr r4, [r0, #0x0] - add r0, r4, #0x0 - add r0, #0x22 - ldrb r0, [r0, #0x0] - cmp r0, #0x6 - beq _0205FB04 - cmp r0, #0x7 - bne _0205FB0C - mov r0, #0x0 - str r0, [r5, #0x0] - mov r0, #0x4 - pop {r3-r5, pc} -_0205FB04: - mov r0, #0x1 - str r0, [r5, #0x0] - mov r0, #0x4 - pop {r3-r5, pc} -_0205FB0C: - add r0, r4, #0x0 - add r1, r5, #0x0 - add r0, #0x2c - add r1, #0xe - mov r2, #0x6 - bl MI_CpuCopy8 - add r0, r4, #0x0 - add r0, #0x22 - ldrb r0, [r0, #0x0] - strb r0, [r5, #0xd] - add r0, r4, #0x0 - bl FreeToHeap - ldr r0, [r5, #0x14] - mov r1, #0x0 - str r1, [r0, #0x0] - mov r0, #0x2 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_0205FB34 -FUN_0205FB34: ; 0x0205FB34 - push {r3-r7, lr} - add r7, r1, #0x0 - add r6, r0, #0x0 - ldr r5, [r7, #0xc] - add r0, r2, #0x0 - mov r1, #0x30 - bl AllocFromHeapAtEnd - mov r1, #0x0 - mov r2, #0x30 - add r4, r0, #0x0 - bl MI_CpuFill8 - add r0, r5, #0x0 - bl Sav2_PlayerData_GetOptionsAddr - str r0, [r4, #0x4] - add r0, r5, #0x0 - bl SavArray_PlayerParty_get - str r0, [r4, #0x0] - add r0, r5, #0x0 - bl FUN_0206BB28 - str r0, [r4, #0x1c] - add r0, r5, #0x0 - bl FUN_02079C70 - str r0, [r4, #0x2c] - mov r0, #0x1 - strb r0, [r4, #0x11] - ldrb r0, [r6, #0xd] - strb r0, [r4, #0x14] - ldr r0, [r4, #0x0] - bl GetPartyCount - strb r0, [r4, #0x13] - mov r0, #0x0 - strh r0, [r4, #0x18] - ldrb r0, [r6, #0x9] - strb r0, [r4, #0x12] - add r0, r5, #0x0 - bl FUN_0202A918 - str r0, [r4, #0x20] - ldr r1, _0205FBB8 ; =UNK_020F7454 - add r0, r4, #0x0 - bl FUN_0207B000 - add r0, r5, #0x0 - bl Sav2_PlayerData_GetProfileAddr - add r1, r0, #0x0 - add r0, r4, #0x0 - bl FUN_0207C2A4 - ldr r1, _0205FBBC ; =UNK_020FA6E8 - add r0, r7, #0x0 - add r2, r4, #0x0 - bl FUN_020373D4 - ldr r0, [r6, #0x14] - str r4, [r0, #0x0] - mov r0, #0x3 - pop {r3-r7, pc} - nop -_0205FBB8: .word UNK_020F7454 -_0205FBBC: .word UNK_020FA6E8 - - thumb_func_start FUN_0205FBC0 -FUN_0205FBC0: ; 0x0205FBC0 - push {r4, lr} - add r4, r0, #0x0 - add r0, r1, #0x0 - bl FUN_0204647C - cmp r0, #0x0 - beq _0205FBD2 - mov r0, #0x3 - pop {r4, pc} -_0205FBD2: - ldr r0, [r4, #0x14] - ldr r0, [r0, #0x0] - ldrb r1, [r0, #0x14] - strb r1, [r4, #0xd] - bl FreeToHeap - ldr r1, [r4, #0x14] - mov r0, #0x0 - str r0, [r1, #0x0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0205FBE8 -FUN_0205FBE8: ; 0x0205FBE8 - push {r3-r5, lr} - add r4, r0, #0x0 - bl FUN_02046528 - add r5, r0, #0x0 - add r0, r4, #0x0 - bl FUN_0204652C - add r4, r0, #0x0 - ldr r1, [r4, #0x4] - cmp r1, #0x4 - bhi _0205FC4A - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_0205FC0C: ; jump table (using 16-bit offset) - .short _0205FC16 - _0205FC0C - 2; case 0 - .short _0205FC22 - _0205FC0C - 2; case 1 - .short _0205FC2C - _0205FC0C - 2; case 2 - .short _0205FC38 - _0205FC0C - 2; case 3 - .short _0205FC42 - _0205FC0C - 2; case 4 -_0205FC16: - add r1, r5, #0x0 - mov r2, #0xb - bl FUN_0205FA2C - str r0, [r4, #0x4] - b _0205FC4A -_0205FC22: - add r1, r5, #0x0 - bl FUN_0205FAD8 - str r0, [r4, #0x4] - b _0205FC4A -_0205FC2C: - add r1, r5, #0x0 - mov r2, #0xb - bl FUN_0205FB34 - str r0, [r4, #0x4] - b _0205FC4A -_0205FC38: - add r1, r5, #0x0 - bl FUN_0205FBC0 - str r0, [r4, #0x4] - b _0205FC4A -_0205FC42: - bl FreeToHeap - mov r0, #0x1 - pop {r3-r5, pc} -_0205FC4A: - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_0205FC50 -FUN_0205FC50: ; 0x0205FC50 - push {r3-r7, lr} - add r5, r1, #0x0 - add r6, r2, #0x0 - add r7, r3, #0x0 - bl FUN_02046528 - str r0, [sp, #0x0] - mov r0, #0xb - mov r1, #0x18 - bl AllocFromHeap - add r4, r0, #0x0 - mov r1, #0x0 - mov r2, #0x18 - bl MI_CpuFill8 - strb r6, [r4, #0x8] - strb r7, [r4, #0x9] - add r0, sp, #0x8 - ldrb r1, [r0, #0x10] - add r2, r4, #0x0 - strb r1, [r4, #0xa] - ldrb r1, [r0, #0x14] - strb r1, [r4, #0xb] - ldrb r1, [r0, #0x18] - strb r1, [r4, #0xc] - ldrb r0, [r0, #0x1c] - ldr r1, _0205FC98 ; =FUN_0205FBE8 - strb r0, [r4, #0xd] - ldr r0, [sp, #0x0] - str r5, [r4, #0x14] - ldr r0, [r0, #0x10] - bl FUN_0204640C - pop {r3-r7, pc} - nop -_0205FC98: .word FUN_0205FBE8 - - thumb_func_start FUN_0205FC9C -FUN_0205FC9C: ; 0x0205FC9C - push {r3-r5, lr} - add r5, r1, #0x0 - add r4, r0, #0x0 - ldr r0, [r5, #0xc] - bl FUN_0203384C - cmp r0, #0x0 - beq _0205FCBC - ldrh r1, [r4, #0x12] - ldrh r2, [r4, #0x14] - add r0, r5, #0x0 - bl FUN_02038790 - str r0, [r4, #0x8] - mov r0, #0x1 - pop {r3-r5, pc} -_0205FCBC: - mov r0, #0x1 - str r0, [r4, #0x0] - mov r0, #0x2 - pop {r3-r5, pc} - - thumb_func_start FUN_0205FCC4 -FUN_0205FCC4: ; 0x0205FCC4 - push {r4, lr} - add r4, r0, #0x0 - add r0, r1, #0x0 - bl FUN_0204647C - cmp r0, #0x0 - beq _0205FCD6 - mov r0, #0x1 - pop {r4, pc} -_0205FCD6: - ldr r0, [r4, #0x8] - ldr r0, [r0, #0x20] - str r0, [r4, #0x0] - ldr r0, [r4, #0x8] - bl FreeToHeap - mov r0, #0x2 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0205FCE8 -FUN_0205FCE8: ; 0x0205FCE8 - push {r3-r5, lr} - add r4, r0, #0x0 - bl FUN_02046528 - add r5, r0, #0x0 - add r0, r4, #0x0 - bl FUN_0204652C - add r4, r0, #0x0 - ldr r1, [r4, #0x4] - cmp r1, #0x0 - beq _0205FD0A - cmp r1, #0x1 - beq _0205FD14 - cmp r1, #0x2 - beq _0205FD1E - b _0205FD34 -_0205FD0A: - add r1, r5, #0x0 - bl FUN_0205FC9C - str r0, [r4, #0x4] - b _0205FD34 -_0205FD14: - add r1, r5, #0x0 - bl FUN_0205FCC4 - str r0, [r4, #0x4] - b _0205FD34 -_0205FD1E: - ldrh r1, [r4, #0x10] - add r0, r5, #0x0 - bl GetVarPointer - ldr r1, [r4, #0x0] - strh r1, [r0, #0x0] - add r0, r4, #0x0 - bl FreeToHeap - mov r0, #0x1 - pop {r3-r5, pc} -_0205FD34: - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_0205FD38 -FUN_0205FD38: ; 0x0205FD38 - push {r3-r7, lr} - add r5, r1, #0x0 - add r6, r2, #0x0 - add r7, r3, #0x0 - bl FUN_02046528 - str r0, [sp, #0x0] - mov r0, #0xb - mov r1, #0x18 - bl AllocFromHeap - add r4, r0, #0x0 - mov r1, #0x0 - mov r2, #0x18 - bl MI_CpuFill8 - strh r5, [r4, #0x12] - strh r7, [r4, #0x14] - ldr r0, [sp, #0x0] - strh r6, [r4, #0x10] - ldr r0, [r0, #0x10] - ldr r1, _0205FD6C ; =FUN_0205FCE8 - add r2, r4, #0x0 - bl FUN_0204640C - pop {r3-r7, pc} - .balign 4 -_0205FD6C: .word FUN_0205FCE8 - - thumb_func_start FUN_0205FD70 -FUN_0205FD70: ; 0x0205FD70 - push {r3-r7, lr} - add r4, r0, #0x0 - bl FUN_02046528 - add r6, r0, #0x0 - add r0, r4, #0x0 - bl FUN_0204652C - add r5, r0, #0x0 - bl FUN_02031190 - mov r1, #0x1 - sub r0, r1, r0 - bl FUN_020316E0 - add r7, r0, #0x0 - bne _0205FD96 - mov r0, #0x0 - pop {r3-r7, pc} -_0205FD96: - ldrh r1, [r5, #0x2] - add r0, r6, #0x0 - bl GetVarPointer - add r4, r0, #0x0 - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _0205FDB0 - cmp r0, #0x1 - beq _0205FDBC - cmp r0, #0x2 - beq _0205FDC8 - b _0205FDD2 -_0205FDB0: - add r0, r6, #0x0 - add r1, r7, #0x0 - bl MOD06_02244660 - strh r0, [r4, #0x0] - b _0205FDD2 -_0205FDBC: - add r0, r6, #0x0 - add r1, r7, #0x0 - bl MOD06_022446BC - strh r0, [r4, #0x0] - b _0205FDD2 -_0205FDC8: - add r0, r6, #0x0 - add r1, r7, #0x0 - bl MOD06_022446E0 - strh r0, [r4, #0x0] -_0205FDD2: - add r0, r5, #0x0 - bl FreeToHeap - mov r0, #0x1 - pop {r3-r7, pc} - - thumb_func_start FUN_0205FDDC -FUN_0205FDDC: ; 0x0205FDDC - push {r3-r7, lr} - add r5, r1, #0x0 - add r6, r2, #0x0 - bl FUN_02046528 - add r7, r0, #0x0 - mov r0, #0xb - mov r1, #0x4 - bl AllocFromHeap - add r4, r0, #0x0 - mov r1, #0x0 - mov r2, #0x4 - bl MI_CpuFill8 - strh r5, [r4, #0x0] - strh r6, [r4, #0x2] - ldr r0, [r7, #0x10] - ldr r1, _0205FE0C ; =FUN_0205FD70 - add r2, r4, #0x0 - bl FUN_0204640C - pop {r3-r7, pc} - nop -_0205FE0C: .word FUN_0205FD70 - - thumb_func_start FUN_0205FE10 -FUN_0205FE10: ; 0x0205FE10 - push {r4-r7, lr} - sub sp, #0x14 - str r0, [sp, #0x0] - bl FUN_02029FC8 - mov r1, #0x35 - bl FUN_0202A150 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x10] - cmp r0, #0x14 - bhs _0205FE30 - add sp, #0x14 - mov r0, #0x0 - pop {r4-r7, pc} -_0205FE30: - ldr r0, [sp, #0x0] - bl FUN_0202A8D8 - mov r1, #0xd - mov r2, #0x0 - add r4, r0, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - mov r1, #0x0 - lsr r7, r0, #0x18 - add r0, r4, #0x0 - add r2, r1, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r6, r0, #0x18 - add r0, r4, #0x0 - mov r1, #0x1 - mov r2, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r5, r0, #0x18 - add r0, r4, #0x0 - mov r1, #0xe - mov r2, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #0xc] - add r0, r4, #0x0 - mov r1, #0x2 - mov r2, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #0x8] - add r0, r4, #0x0 - mov r1, #0x3 - mov r2, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #0x4] - cmp r7, #0x0 - beq _0205FEA2 - cmp r6, #0x0 - beq _0205FEA2 - cmp r5, #0x0 - beq _0205FEA2 - add sp, #0x14 - mov r0, #0x0 - pop {r4-r7, pc} -_0205FEA2: - ldr r0, [sp, #0x0] - bl FUN_02026CC4 - cmp r7, #0x0 - bne _0205FEDC - mov r1, #0x55 - bl FUN_02025D94 - cmp r0, #0x0 - beq _0205FEC6 - add r0, r4, #0x0 - mov r1, #0xd - mov r2, #0x1 - bl FUN_0202A578 - add sp, #0x14 - mov r0, #0x1 - pop {r4-r7, pc} -_0205FEC6: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - bne _0205FED6 - add r0, r4, #0x0 - mov r1, #0xe - mov r2, #0x1 - bl FUN_0202A578 -_0205FED6: - add sp, #0x14 - mov r0, #0x4 - pop {r4-r7, pc} -_0205FEDC: - ldr r1, [sp, #0x10] - cmp r1, #0x32 - bhs _0205FEE8 - add sp, #0x14 - mov r0, #0x0 - pop {r4-r7, pc} -_0205FEE8: - cmp r6, #0x0 - bne _0205FF1C - mov r1, #0x56 - bl FUN_02025D94 - cmp r0, #0x0 - beq _0205FF06 - add r0, r4, #0x0 - mov r1, #0x0 - mov r2, #0x1 - bl FUN_0202A578 - add sp, #0x14 - mov r0, #0x2 - pop {r4-r7, pc} -_0205FF06: - ldr r0, [sp, #0x8] - cmp r0, #0x0 - bne _0205FF16 - add r0, r4, #0x0 - mov r1, #0x2 - mov r2, #0x1 - bl FUN_0202A578 -_0205FF16: - add sp, #0x14 - mov r0, #0x4 - pop {r4-r7, pc} -_0205FF1C: - cmp r1, #0x64 - blo _0205FF24 - cmp r5, #0x0 - beq _0205FF2A -_0205FF24: - add sp, #0x14 - mov r0, #0x0 - pop {r4-r7, pc} -_0205FF2A: - mov r1, #0x57 - bl FUN_02025D94 - cmp r0, #0x0 - beq _0205FF44 - mov r1, #0x1 - add r0, r4, #0x0 - add r2, r1, #0x0 - bl FUN_0202A578 - add sp, #0x14 - mov r0, #0x3 - pop {r4-r7, pc} -_0205FF44: - ldr r0, [sp, #0x4] - cmp r0, #0x0 - bne _0205FF54 - add r0, r4, #0x0 - mov r1, #0x3 - mov r2, #0x1 - bl FUN_0202A578 -_0205FF54: - mov r0, #0x4 - add sp, #0x14 - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_0205FF5C -FUN_0205FF5C: ; 0x0205FF5C - push {r4-r7, lr} - sub sp, #0xc - add r4, r0, #0x0 - bl FUN_02029FC8 - mov r1, #0x35 - bl FUN_0202A150 - lsl r0, r0, #0x10 - lsr r7, r0, #0x10 - cmp r7, #0x14 - bhs _0205FF7A - add sp, #0xc - mov r0, #0x0 - pop {r4-r7, pc} -_0205FF7A: - add r0, r4, #0x0 - bl FUN_0202A8D8 - mov r1, #0xd - mov r2, #0x0 - str r0, [sp, #0x8] - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r6, r0, #0x18 - mov r1, #0x0 - ldr r0, [sp, #0x8] - add r2, r1, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - ldr r0, [sp, #0x8] - mov r1, #0x1 - mov r2, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r5, r0, #0x18 - ldr r0, [sp, #0x8] - mov r1, #0xe - mov r2, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #0x4] - ldr r0, [sp, #0x8] - mov r1, #0x2 - mov r2, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - str r0, [sp, #0x0] - ldr r0, [sp, #0x8] - mov r1, #0x3 - mov r2, #0x0 - bl FUN_0202A578 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - cmp r6, #0x0 - beq _0205FFEA - cmp r4, #0x0 - beq _0205FFEA - cmp r5, #0x0 - beq _0205FFEA - add sp, #0xc - mov r0, #0x0 - pop {r4-r7, pc} -_0205FFEA: - cmp r6, #0x0 - bne _02060000 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _0205FFFA - add sp, #0xc - mov r0, #0x4 - pop {r4-r7, pc} -_0205FFFA: - add sp, #0xc - mov r0, #0x1 - pop {r4-r7, pc} -_02060000: - cmp r7, #0x32 - bhs _0206000A - add sp, #0xc - mov r0, #0x0 - pop {r4-r7, pc} -_0206000A: - cmp r4, #0x0 - bne _02060020 - ldr r0, [sp, #0x0] - cmp r0, #0x0 - beq _0206001A - add sp, #0xc - mov r0, #0x5 - pop {r4-r7, pc} -_0206001A: - add sp, #0xc - mov r0, #0x2 - pop {r4-r7, pc} -_02060020: - cmp r7, #0x64 - bhs _0206002A - add sp, #0xc - mov r0, #0x0 - pop {r4-r7, pc} -_0206002A: - cmp r5, #0x0 - beq _02060034 - add sp, #0xc - mov r0, #0x0 - pop {r4-r7, pc} -_02060034: - cmp r0, #0x0 - beq _0206003E - add sp, #0xc - mov r0, #0x6 - pop {r4-r7, pc} -_0206003E: - mov r0, #0x3 - add sp, #0xc - pop {r4-r7, pc} - - thumb_func_start FUN_02060044 -FUN_02060044: ; 0x02060044 - add r0, #0xa8 - ldr r0, [r0, #0x0] - ldr r2, [r1, #0x0] - ldrh r3, [r0, #0x24] - add r2, r3, r2 - strh r2, [r0, #0x24] - ldrh r3, [r0, #0x28] - ldr r2, [r1, #0x4] - add r2, r3, r2 - strh r2, [r0, #0x28] - ldrh r2, [r0, #0x26] - ldr r1, [r1, #0x8] - add r1, r2, r1 - strh r1, [r0, #0x26] - bx lr - .balign 4 - - thumb_func_start FUN_02060064 -FUN_02060064: ; 0x02060064 - ldr r1, _0206006C ; =0x02E90EDD - mul r1, r0 - add r0, r1, #0x1 - bx lr - .balign 4 -_0206006C: .word 0x02E90EDD - - thumb_func_start FUN_02060070 -FUN_02060070: ; 0x02060070 - ldr r1, _02060078 ; =0x5D588B65 - mul r1, r0 - add r0, r1, #0x1 - bx lr - .balign 4 -_02060078: .word 0x5D588B65 - - thumb_func_start FUN_0206007C -FUN_0206007C: ; 0x0206007C - push {r3-r5, lr} - add r5, r0, #0x0 - bl FUN_0202881C - bl FUN_020287A4 - bl FUN_02060070 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl FUN_0202A8D8 - add r1, r4, #0x0 - bl FUN_0202A5CC - add r0, r4, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_020600A0 -FUN_020600A0: ; 0x020600A0 - push {r3-r6, lr} - sub sp, #0x4 - add r5, r0, #0x0 - bl FUN_0202A8D8 - add r6, r0, #0x0 - bl FUN_0202A5D0 - bl FUN_02060070 - add r4, r0, #0x0 - add r0, r6, #0x0 - add r1, r4, #0x0 - bl FUN_0202A5CC - add r0, r4, #0x0 - bl FUN_02060064 - str r0, [sp, #0x0] - add r0, r5, #0x0 - bl FUN_0202A8CC - mov r1, #0xa - add r2, sp, #0x0 - bl FUN_0202A2C4 - ldr r0, [sp, #0x0] - add sp, #0x4 - pop {r3-r6, pc} - .balign 4 - - thumb_func_start FUN_020600DC -FUN_020600DC: ; 0x020600DC - push {r3-r6, lr} - sub sp, #0x4 - add r6, r0, #0x0 - bl FUN_0202A8D8 - add r4, r0, #0x0 - add r0, r6, #0x0 - bl FUN_0202A8CC - add r5, r0, #0x0 - add r0, r4, #0x0 - bl FUN_0202A5D0 - bl FUN_02060064 - mov r1, #0x0 - str r0, [sp, #0x0] - add r0, r5, #0x0 - add r2, r1, #0x0 - bl FUN_0202A240 - add r1, r0, #0x0 - lsl r1, r1, #0x10 - add r0, r4, #0x0 - lsr r1, r1, #0x10 - mov r2, #0x0 - bl FUN_0202A538 - mov r1, #0x18 - add r5, r0, #0x0 - mul r5, r1 - mov r4, #0x0 - cmp r5, #0x0 - ble _0206012E - ldr r0, [sp, #0x0] -_02060122: - bl FUN_02060064 - add r4, r4, #0x1 - str r0, [sp, #0x0] - cmp r4, r5 - blt _02060122 -_0206012E: - add r0, r6, #0x0 - bl FUN_0202A8CC - mov r1, #0xa - add r2, sp, #0x0 - bl FUN_0202A2C4 - ldr r0, [sp, #0x0] - add sp, #0x4 - pop {r3-r6, pc} - .balign 4 - - thumb_func_start FUN_02060144 -FUN_02060144: ; 0x02060144 - ldr r0, [r0, #0x1c] - ldr r1, [r0, #0x0] - ldr r0, _02060158 ; =0x000001ED - cmp r1, r0 - bne _02060152 - mov r0, #0x1 - bx lr -_02060152: - mov r0, #0x0 - bx lr - nop -_02060158: .word 0x000001ED diff --git a/arm9/asm/unk_02060CCC.s b/arm9/asm/unk_02060CCC.s index 44e19c06..b6692f24 100644 --- a/arm9/asm/unk_02060CCC.s +++ b/arm9/asm/unk_02060CCC.s @@ -1033,7 +1033,7 @@ FUN_02061374: ; 0x02061374 strh r1, [r0, #0x0] ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034824 + bl MapHeader_GetMapSec add r1, sp, #0x0 strh r0, [r1, #0x2] add r0, r4, #0x0 @@ -1084,7 +1084,7 @@ FUN_020613CC: ; 0x020613CC bl FUN_02060E34 ldr r0, [r4, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034824 + bl MapHeader_GetMapSec add r1, sp, #0x4 strh r0, [r1, #0x6] add r0, r4, #0x0 @@ -2838,7 +2838,7 @@ _0206218C: bl FUN_02034FE4 add r4, r0, #0x0 add r0, r5, #0x0 - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0x0 add r0, r7, #0x0 mov r1, #0x0 @@ -2949,7 +2949,7 @@ FUN_02062240: ; 0x02062240 bl MOD06_02245910 add r0, sp, #0x0 ldrh r0, [r0, #0x2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0x0 add r0, r4, #0x0 mov r1, #0x0 @@ -3176,7 +3176,7 @@ FUN_020623F4: ; 0x020623F4 lsl r1, r0, #0x1 ldr r0, _0206245C ; =UNK_020F79EE ldrh r0, [r0, r1] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0x0 add r0, r5, #0x0 mov r1, #0x0 diff --git a/arm9/asm/unk_0206367C.s b/arm9/asm/unk_0206367C.s index 431828e8..0696b4e4 100644 --- a/arm9/asm/unk_0206367C.s +++ b/arm9/asm/unk_0206367C.s @@ -107,7 +107,7 @@ _02063758: bne _0206377C ldr r0, [r5, #0x1c] ldr r0, [r0, #0x0] - bl FUN_020348B4 + bl MapHeader_IsBikeAllowed cmp r0, #0x0 bne _0206377C mov r0, #0x0 @@ -122,7 +122,7 @@ _0206377C: _02063786: ldr r0, [r5, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0x0 beq _020637A6 ldr r0, [r5, #0xc] diff --git a/arm9/asm/unk_02063948.s b/arm9/asm/unk_02063948.s index 28b6db5b..854eaedd 100644 --- a/arm9/asm/unk_02063948.s +++ b/arm9/asm/unk_02063948.s @@ -303,7 +303,7 @@ _02063B52: pop {r4, pc} _02063B66: ldr r0, [r4, #0x0] - bl FUN_02034898 + bl MapHeader_IsFlyAllowed cmp r0, #0x0 bne _02063B74 mov r0, #0x1 @@ -1129,7 +1129,7 @@ _020641BE: cmp r0, #0x1 bne _020641D2 ldr r0, [r4, #0x0] - bl FUN_0203487C + bl MapHeader_GetField17_6 cmp r0, #0x1 beq _020641D6 _020641D2: diff --git a/arm9/asm/unk_0206C700.s b/arm9/asm/unk_0206C700.s index 8e89581c..879f7f48 100644 --- a/arm9/asm/unk_0206C700.s +++ b/arm9/asm/unk_0206C700.s @@ -2237,7 +2237,7 @@ FUN_0206D9B4: ; 0x0206D9B4 sub sp, #0xb8 add r5, r0, #0x0 add r4, r1, #0x0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers ldr r6, _0206DC28 ; =UNK_020F8354 add r3, sp, #0x3c mov r2, #0x5 @@ -2247,7 +2247,7 @@ _0206D9C6: sub r2, r2, #0x1 bne _0206D9C6 add r0, sp, #0x3c - bl FUN_0201E66C + bl GX_SetBanks mov r1, #0x6 mov r2, #0x2 mov r0, #0x0 @@ -2323,7 +2323,7 @@ _0206DA26: orr r2, r0 strh r2, [r1, #0x0] add r1, r0, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r6, _0206DC38 ; =UNK_020F8338 add r3, sp, #0x10 ldmia r6!, {r0-r1} @@ -2507,10 +2507,10 @@ _0206DA26: mov r1, #0xa0 add r0, #0x75 strb r1, [r0, #0x0] - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _0206DC44 ; =FUN_0206DD08 add r1, r5, #0x0 bl Main_SetVBlankIntrCB @@ -2532,10 +2532,10 @@ FUN_0206DC48: ; 0x0206DC48 add r4, r0, #0x0 mov r0, #0x1 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x2 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0x0 mov r1, #0x1 bl FUN_020178A0 diff --git a/arm9/asm/unk_0206DE24.s b/arm9/asm/unk_0206DE24.s index 41eab63c..0bc45eb2 100644 --- a/arm9/asm/unk_0206DE24.s +++ b/arm9/asm/unk_0206DE24.s @@ -9,8 +9,8 @@ thumb_func_start FUN_0206DE24 FUN_0206DE24: ; 0x0206DE24 push {r3, lr} - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -69,7 +69,7 @@ FUN_0206DE94: ; 0x0206DE94 push {r3, lr} mov r0, #0x1 add r1, r0, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _0206DF00 ; =0x04000008 mov r1, #0x3 ldrh r2, [r0, #0x0] diff --git a/arm9/asm/unk_0206F3FC.s b/arm9/asm/unk_0206F3FC.s index e09b1ec4..b7b79b0e 100644 --- a/arm9/asm/unk_0206F3FC.s +++ b/arm9/asm/unk_0206F3FC.s @@ -124,8 +124,8 @@ FUN_0206F3FC: ; 0x0206F3FC add r1, r0, #0x0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r0, #0x1 lsl r0, r0, #0x1a ldr r2, [r0, #0x0] @@ -289,7 +289,7 @@ _0206F564: bne _0206F582 mov r0, #0x1 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers _0206F582: ldr r0, _0206F5A8 ; =FUN_0206FB58 add r1, r4, #0x0 @@ -1064,7 +1064,7 @@ _0206FB8A: sub r2, r2, #0x1 bne _0206FB8A add r0, sp, #0x0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .balign 4 @@ -1213,10 +1213,10 @@ FUN_0206FCD4: ; 0x0206FCD4 add r4, r0, #0x0 mov r0, #0x1f mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x13 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0x0 mov r1, #0x5 bl FUN_020178A0 diff --git a/arm9/asm/unk_02073710.s b/arm9/asm/unk_02073710.s index 93309503..8aac6df0 100644 --- a/arm9/asm/unk_02073710.s +++ b/arm9/asm/unk_02073710.s @@ -129,10 +129,10 @@ FUN_02073710: ; 0x02073710 add r4, r0, #0x0 mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x20 mov r1, #0xc bl FUN_0201C24C diff --git a/arm9/asm/unk_0207550C.s b/arm9/asm/unk_0207550C.s index d4608a0d..14488621 100644 --- a/arm9/asm/unk_0207550C.s +++ b/arm9/asm/unk_0207550C.s @@ -3503,7 +3503,7 @@ FUN_020772CC: ; 0x020772CC ldr r0, [r0, #0x1c] ldr r0, [r0, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034824 + bl MapHeader_GetMapSec lsl r0, r0, #0x10 lsr r0, r0, #0x10 pop {r3, pc} diff --git a/arm9/asm/unk_020772F0.s b/arm9/asm/unk_020772F0.s index ecca3742..a5d7b26d 100644 --- a/arm9/asm/unk_020772F0.s +++ b/arm9/asm/unk_020772F0.s @@ -714,8 +714,8 @@ _020772FE: add r1, r0, #0x0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -846,7 +846,7 @@ _020772FE: ldr r0, _020774A8 ; =gMain + 0x60 mov r1, #0x1 strb r1, [r0, #0x5] - bl FUN_0201E7A0 + bl GX_SwapDisplay ldr r0, [r5, #0x0] add r0, r0, #0x1 str r0, [r5, #0x0] @@ -1587,7 +1587,7 @@ _02077A0C: ldr r0, _02077A80 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] - bl FUN_0201E7A0 + bl GX_SwapDisplay mov r0, #0x1 add sp, #0x14 pop {r4-r7, pc} @@ -1697,7 +1697,7 @@ _02077B2E: sub r2, r2, #0x1 bne _02077B2E add r0, sp, #0x0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .balign 4 @@ -1855,32 +1855,32 @@ FUN_02077C84: ; 0x02077C84 lsl r1, r4, #0x18 mov r0, #0x1 lsr r1, r1, #0x18 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers lsl r1, r4, #0x18 mov r0, #0x2 lsr r1, r1, #0x18 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers lsl r1, r4, #0x18 mov r0, #0x4 lsr r1, r1, #0x18 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x8 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers lsl r1, r4, #0x18 mov r0, #0x10 lsr r1, r1, #0x18 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers lsl r1, r4, #0x18 mov r0, #0x1 lsr r1, r1, #0x18 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x2 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x10 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r4, pc} thumb_func_start FUN_02077CD4 @@ -2875,10 +2875,10 @@ _020784FA: bl FUN_02078530 mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x5c pop {r4-r7, pc} nop diff --git a/arm9/asm/unk_02079C70.s b/arm9/asm/unk_02079C70.s index 3562d2e7..722c8144 100644 --- a/arm9/asm/unk_02079C70.s +++ b/arm9/asm/unk_02079C70.s @@ -61,8 +61,8 @@ FUN_02079C7C: ; 0x02079C7C add r1, r0, #0x0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r1, #0x1 lsl r1, r1, #0x1a ldr r0, [r1, #0x0] @@ -157,7 +157,7 @@ FUN_02079C7C: ; 0x02079C7C ldr r0, _02079DB0 ; =FUN_02079F24 add r1, r5, #0x0 bl Main_SetVBlankIntrCB - bl FUN_0201E788 + bl GX_BothDispOn mov r1, #0x0 mov r0, #0x3d add r2, r1, #0x0 @@ -381,7 +381,7 @@ _02079F62: sub r2, r2, #0x1 bne _02079F62 add r0, sp, #0x0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .balign 4 @@ -514,8 +514,8 @@ _0207A088: .word UNK_020FA634 FUN_0207A08C: ; 0x0207A08C push {r4, lr} add r4, r0, #0x0 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers add r0, r4, #0x0 mov r1, #0x5 bl FUN_020178A0 diff --git a/arm9/asm/unk_0207C328.s b/arm9/asm/unk_0207C328.s index bf0bb784..ba0e57e6 100644 --- a/arm9/asm/unk_0207C328.s +++ b/arm9/asm/unk_0207C328.s @@ -274,10 +274,10 @@ FUN_0207C328: ; 0x0207C328 add r4, r0, #0x0 mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x20 mov r1, #0x13 bl FUN_0201C24C diff --git a/arm9/asm/unk_0207EF6C.s b/arm9/asm/unk_0207EF6C.s index 0ef763b0..8fcaed0c 100644 --- a/arm9/asm/unk_0207EF6C.s +++ b/arm9/asm/unk_0207EF6C.s @@ -145,7 +145,7 @@ FUN_0207EF6C: ; 0x0207EF6C str r0, [r1, #0x40] mov r0, #0x1 add r1, r0, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _0207F004 ; =0x04000008 mov r0, #0x3 ldrh r2, [r1, #0x0] diff --git a/arm9/asm/unk_020859C0.s b/arm9/asm/unk_020859C0.s index a299f623..2e98e9cf 100644 --- a/arm9/asm/unk_020859C0.s +++ b/arm9/asm/unk_020859C0.s @@ -445,28 +445,28 @@ FUN_02085C08: ; 0x02085C08 add r4, r0, #0x0 mov r0, #0x1 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x2 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x4 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x8 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x1 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x2 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x4 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x8 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0x0 add r0, #0xe4 ldr r0, [r0, #0x0] diff --git a/arm9/asm/unk_02086084.s b/arm9/asm/unk_02086084.s index 4d8fa9a4..3a4017d7 100644 --- a/arm9/asm/unk_02086084.s +++ b/arm9/asm/unk_02086084.s @@ -171,16 +171,16 @@ FUN_020861DC: ; 0x020861DC bl FUN_020223BC mov r0, #0x1 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x2 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x3 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x4 mov r1, #0x0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [r4, #0x8] mov r1, #0x0 bl FUN_02003038 @@ -279,7 +279,7 @@ _020862D6: add r7, r0, #0x0 ldr r0, [r6, #0x1c] ldr r0, [r0, #0x0] - bl FUN_02034824 + bl MapHeader_GetMapSec str r0, [sp, #0x4] mov r0, #0x0 str r0, [sp, #0x8] diff --git a/arm9/asm/unk_02086414.s b/arm9/asm/unk_02086414.s index de7be3b2..7e7745fe 100644 --- a/arm9/asm/unk_02086414.s +++ b/arm9/asm/unk_02086414.s @@ -97,8 +97,8 @@ UNK_020FD078: ; 0x020FD078 thumb_func_start FUN_02086414 FUN_02086414: ; 0x02086414 push {r3, lr} - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -158,7 +158,7 @@ FUN_02086488: ; 0x02086488 push {r3, lr} mov r0, #0x1 add r1, r0, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _020864F4 ; =0x04000008 mov r1, #0x3 ldrh r2, [r0, #0x0] @@ -251,7 +251,7 @@ FUN_0208654C: ; 0x0208654C push {r3-r5, lr} sub sp, #0xa8 add r4, r0, #0x0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers ldr r5, _02086650 ; =UNK_020FCEBC add r3, sp, #0x2c mov r2, #0x5 @@ -261,7 +261,7 @@ _0208655C: sub r2, r2, #0x1 bne _0208655C add r0, sp, #0x2c - bl FUN_0201E66C + bl GX_SetBanks mov r1, #0x6 mov r2, #0x2 mov r0, #0x0 @@ -337,11 +337,11 @@ _020865BC: orr r2, r0 strh r2, [r1, #0x0] add r1, r0, #0x0 - bl FUN_0201E6E4 - bl FUN_0201E788 + bl GX_EngineAToggleLayers + bl GX_BothDispOn mov r0, #0x10 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r5, _02086660 ; =UNK_020FCE60 add r3, sp, #0x0 ldmia r5!, {r0-r1} diff --git a/arm9/asm/unk_02086FA8.s b/arm9/asm/unk_02086FA8.s index 8cc246e9..2ccd040d 100644 --- a/arm9/asm/unk_02086FA8.s +++ b/arm9/asm/unk_02086FA8.s @@ -850,7 +850,7 @@ _02087636: bl FUN_0200C61C mov r0, #0x2 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x64] add r0, r0, #0x1 str r0, [r4, #0x64] @@ -984,7 +984,7 @@ _0208774C: bne _02087810 mov r0, #0x2 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0x0 mov r1, #0x0 bl FUN_02086F98 @@ -1105,7 +1105,7 @@ _02087844: bl FUN_02086B70 mov r0, #0x2 mov r1, #0x0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x64] add r0, r0, #0x1 str r0, [r4, #0x64] @@ -1232,7 +1232,7 @@ _0208794C: bl FUN_02086F98 mov r0, #0x2 mov r1, #0x1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x6c] mov r1, #0x0 bl FUN_0200C644 diff --git a/arm9/asm/unk_02089498.s b/arm9/asm/unk_02089498.s index e4ce48cf..b4c7a133 100644 --- a/arm9/asm/unk_02089498.s +++ b/arm9/asm/unk_02089498.s @@ -105,8 +105,8 @@ _020894FC: add r0, r6, #0x0 add r1, r0, #0x0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -127,7 +127,7 @@ _020894FC: ldr r0, _020895EC ; =FUN_02089610 add r1, r4, #0x0 bl Main_SetVBlankIntrCB - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x6 mov r1, #0x1 str r0, [sp, #0x0] @@ -225,7 +225,7 @@ _02089628: sub r2, r2, #0x1 bne _02089628 add r0, sp, #0x34 - bl FUN_0201E66C + bl GX_SetBanks ldr r0, [r4, #0x0] bl FUN_02016B94 add r3, sp, #0x24 diff --git a/arm9/asm/unk_02089960.s b/arm9/asm/unk_02089960.s index 575eade7..4502d1f9 100644 --- a/arm9/asm/unk_02089960.s +++ b/arm9/asm/unk_02089960.s @@ -87,8 +87,8 @@ _020899B8: add r0, r4, #0x0 add r1, r0, #0x0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -106,7 +106,7 @@ _020899B8: bl FUN_02089A6C add r0, r6, #0x0 bl FUN_02089B80 - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x1 str r0, [r5, #0x0] b _02089A34 @@ -165,7 +165,7 @@ _02089A78: sub r2, r2, #0x1 bne _02089A78 add r0, sp, #0x34 - bl FUN_0201E66C + bl GX_SetBanks ldr r0, [r4, #0x0] bl FUN_02016B94 add r3, sp, #0x24 diff --git a/arm9/asm/unk_02089D90.s b/arm9/asm/unk_02089D90.s index b8c341df..92b9e987 100644 --- a/arm9/asm/unk_02089D90.s +++ b/arm9/asm/unk_02089D90.s @@ -43,8 +43,8 @@ FUN_02089D90: ; 0x02089D90 mov r0, #0x0 add r1, r0, #0x0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -61,7 +61,7 @@ FUN_02089D90: ; 0x02089D90 ldr r0, _02089EFC ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] - bl FUN_0201E7A0 + bl GX_SwapDisplay ldr r3, _02089F00 ; =0x04000050 mov r0, #0x0 strh r0, [r3, #0x0] @@ -77,7 +77,7 @@ FUN_02089D90: ; 0x02089D90 and r0, r1 str r0, [r2, #0x0] ldr r0, _02089F0C ; =UNK_020FF418 - bl FUN_0201E66C + bl GX_SetBanks add r0, r4, #0x0 bl FUN_02016B94 add r5, r0, #0x0 @@ -157,7 +157,7 @@ FUN_02089D90: ; 0x02089D90 bl AddTextPrinterParameterized add r0, r4, #0x0 bl String_dtor - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x0 bl FUN_0200E394 mov r0, #0x1 diff --git a/arm9/asm/unk_02089F24.s b/arm9/asm/unk_02089F24.s index 5c84eabc..b678254c 100644 --- a/arm9/asm/unk_02089F24.s +++ b/arm9/asm/unk_02089F24.s @@ -47,8 +47,8 @@ FUN_02089F24: ; 0x02089F24 mov r0, #0x0 add r1, r0, #0x0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -65,7 +65,7 @@ FUN_02089F24: ; 0x02089F24 ldr r0, _0208A090 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] - bl FUN_0201E7A0 + bl GX_SwapDisplay ldr r3, _0208A094 ; =0x04000050 mov r0, #0x0 strh r0, [r3, #0x0] @@ -81,7 +81,7 @@ FUN_02089F24: ; 0x02089F24 and r0, r1 str r0, [r2, #0x0] ldr r0, _0208A0A0 ; =UNK_020FF418 - bl FUN_0201E66C + bl GX_SetBanks add r0, r4, #0x0 bl FUN_02016B94 add r5, r0, #0x0 @@ -161,7 +161,7 @@ FUN_02089F24: ; 0x02089F24 bl AddTextPrinterParameterized add r0, r4, #0x0 bl String_dtor - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x0 bl FUN_0200E394 mov r0, #0x1 @@ -216,8 +216,8 @@ _0208A0C8: mov r0, #0x0 add r1, r0, #0x0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #0x1 lsl r2, r2, #0x1a ldr r1, [r2, #0x0] @@ -234,7 +234,7 @@ _0208A0C8: ldr r0, _0208A230 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] - bl FUN_0201E7A0 + bl GX_SwapDisplay ldr r3, _0208A234 ; =0x04000050 mov r1, #0x0 strh r1, [r3, #0x0] @@ -250,7 +250,7 @@ _0208A0C8: and r1, r2 str r1, [r0, #0x0] ldr r0, _0208A240 ; =UNK_020FF474 - bl FUN_0201E66C + bl GX_SetBanks add r0, r4, #0x0 bl FUN_02016B94 add r5, r0, #0x0 @@ -330,7 +330,7 @@ _0208A0C8: bl AddTextPrinterParameterized add r0, r4, #0x0 bl String_dtor - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x0 bl FUN_0200E394 mov r0, #0x1 diff --git a/arm9/asm/unk_0208A998.s b/arm9/asm/unk_0208A998.s deleted file mode 100644 index 14a02753..00000000 --- a/arm9/asm/unk_0208A998.s +++ /dev/null @@ -1,294 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - - .section .rodata - - .global UNK_020FF49C -UNK_020FF49C: ; 0x020FF49C - .byte 0x00, 0x03, 0x03, 0x1A, 0x12, 0x01, 0x23, 0x00 - - .global UNK_020FF4A4 -UNK_020FF4A4: ; 0x020FF4A4 - .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF4AC -UNK_020FF4AC: ; 0x020FF4AC - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF4BC -UNK_020FF4BC: ; 0x020FF4BC - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF4D8 -UNK_020FF4D8: ; 0x020FF4D8 - .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .section .bss - - .global sErrorMessagePrinterLock -sErrorMessagePrinterLock: ; 0x021C8C58 - .space 0x4 - - .text - - thumb_func_start FUN_0208A998 -FUN_0208A998: ; 0x0208A998 - ldr r3, _0208A9AC ; =0x027E0000 - ldr r1, _0208A9B0 ; =0x00003FF8 - mov r0, #0x1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - ldr r3, _0208A9B4 ; =MI_WaitDma - mov r0, #0x3 - bx r3 - nop -_0208A9AC: .word 0x027E0000 -_0208A9B0: .word 0x00003FF8 -_0208A9B4: .word MI_WaitDma - - thumb_func_start PrintErrorMessageAndReset -PrintErrorMessageAndReset: ; 0x0208A9B8 - push {r4-r7, lr} - sub sp, #0x24 - ldr r0, _0208ABC8 ; =sErrorMessagePrinterLock - ldr r1, [r0, #0x0] - cmp r1, #0x1 - bne _0208A9C6 - b _0208ABC4 -_0208A9C6: - mov r1, #0x1 - str r1, [r0, #0x0] - mov r0, #0x0 - bl OS_GetInitArenaHi - add r1, r0, #0x0 - mov r0, #0x0 - bl OS_SetArenaHi - mov r0, #0x0 - bl OS_GetInitArenaLo - add r1, r0, #0x0 - mov r0, #0x0 - bl OS_SetArenaLo - mov r1, #0x1 - ldr r0, _0208ABCC ; =UNK_020FF4A4 - add r2, r1, #0x0 - mov r3, #0x0 - bl FUN_020166C8 - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - bl OS_DisableIrqMask - ldr r1, _0208ABD0 ; =FUN_0208A998 - mov r0, #0x1 - bl OS_SetIrqFunction - mov r0, #0x1 - bl OS_EnableIrqMask - mov r0, #0x0 - add r1, r0, #0x0 - bl Main_SetVBlankIntrCB - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 - mov r2, #0x1 - lsl r2, r2, #0x1a - ldr r1, [r2, #0x0] - ldr r0, _0208ABD4 ; =0xFFFFE0FF - and r1, r0 - str r1, [r2, #0x0] - ldr r2, _0208ABD8 ; =0x04001000 - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - mov r0, #0x4 - mov r1, #0x8 - bl FUN_0201669C - ldr r0, _0208ABDC ; =gMain + 0x60 - mov r1, #0x0 - strb r1, [r0, #0x5] - bl FUN_0201E7A0 - ldr r3, _0208ABE0 ; =0x04000050 - mov r0, #0x0 - strh r0, [r3, #0x0] - ldr r2, _0208ABE4 ; =0x04001050 - sub r3, #0x50 - strh r0, [r2, #0x0] - ldr r1, [r3, #0x0] - ldr r0, _0208ABE8 ; =0xFFFF1FFF - sub r2, #0x50 - and r1, r0 - str r1, [r3, #0x0] - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - ldr r0, _0208ABEC ; =UNK_020FF4D8 - bl FUN_0201E66C - mov r0, #0x0 - bl FUN_02016B94 - str r0, [sp, #0x10] - ldr r0, _0208ABF0 ; =UNK_020FF4AC - bl FUN_02016BBC - mov r1, #0x0 - ldr r0, [sp, #0x10] - ldr r2, _0208ABF4 ; =UNK_020FF4BC - add r3, r1, #0x0 - bl FUN_02016C18 - ldr r0, [sp, #0x10] - mov r1, #0x0 - bl FUN_02018744 - mov r1, #0x0 - str r1, [sp, #0x0] - ldr r0, [sp, #0x10] - ldr r2, _0208ABF8 ; =0x000001F7 - mov r3, #0x2 - str r1, [sp, #0x4] - bl FUN_0200CB00 - mov r0, #0x0 - mov r1, #0x20 - add r2, r0, #0x0 - bl FUN_02002ED0 - mov r0, #0x0 - mov r1, #0x20 - add r2, r0, #0x0 - add r3, r0, #0x0 - bl FUN_02017F18 - ldr r1, _0208ABFC ; =0x00006C21 - mov r0, #0x0 - bl FUN_02017FE4 - ldr r1, _0208ABFC ; =0x00006C21 - mov r0, #0x4 - bl FUN_02017FE4 - mov r0, #0x1 - mov r1, #0x1a - mov r2, #0xc8 - mov r3, #0x0 - bl NewMsgDataFromNarc - str r0, [sp, #0xc] - mov r0, #0x6 - lsl r0, r0, #0x6 - mov r1, #0x0 - bl String_ctor - add r4, r0, #0x0 - bl FUN_0201BD5C - ldr r0, [sp, #0x10] - ldr r2, _0208AC00 ; =UNK_020FF49C - add r1, sp, #0x14 - bl FUN_02019150 - mov r0, #0xd0 - str r0, [sp, #0x0] - mov r0, #0x90 - mov r2, #0x0 - str r0, [sp, #0x4] - add r0, sp, #0x14 - mov r1, #0xf - add r3, r2, #0x0 - bl FUN_020196F4 - ldr r2, _0208ABF8 ; =0x000001F7 - add r0, sp, #0x14 - mov r1, #0x0 - mov r3, #0x2 - bl FUN_0200CCA4 - ldr r0, [sp, #0xc] - mov r1, #0x3 - add r2, r4, #0x0 - bl ReadMsgDataIntoString - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - add r0, sp, #0x14 - add r2, r4, #0x0 - add r3, r1, #0x0 - str r1, [sp, #0x8] - bl AddTextPrinterParameterized - add r0, r4, #0x0 - bl String_dtor - bl FUN_0201E788 - mov r0, #0x0 - bl FUN_0200E394 - mov r0, #0x1 - bl FUN_0200E394 - mov r0, #0x0 - mov r1, #0x3f - mov r2, #0x3 - bl FUN_0200A274 - bl FUN_02032DAC - mov r4, #0x1 -_0208AB58: - bl HandleDSLidAction - bl FUN_0202FB80 - bl FUN_02033678 - cmp r0, #0x0 - bne _0208AB72 - add r0, r4, #0x0 - add r1, r4, #0x0 - bl OS_WaitIrq - b _0208AB58 -_0208AB72: - ldr r5, _0208AC04 ; =0x04000130 - ldr r4, _0208AC08 ; =0x027FFFA8 - ldr r7, _0208AC0C ; =0x00002FFF - mov r6, #0x1 -_0208AB7A: - bl HandleDSLidAction - ldrh r1, [r5, #0x0] - ldrh r0, [r4, #0x0] - orr r1, r0 - ldr r0, _0208AC0C ; =0x00002FFF - eor r0, r1 - and r0, r7 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - tst r0, r6 - bne _0208AB9C - mov r0, #0x1 - add r1, r0, #0x0 - bl OS_WaitIrq - b _0208AB7A -_0208AB9C: - ldr r1, _0208AC10 ; =0x00007FFF - mov r0, #0x0 - bl FUN_0200E3A0 - ldr r1, _0208AC10 ; =0x00007FFF - mov r0, #0x1 - bl FUN_0200E3A0 - add r0, sp, #0x14 - bl FUN_02019178 - ldr r0, [sp, #0xc] - bl DestroyMsgData - ldr r0, [sp, #0x10] - bl FreeToHeap - mov r0, #0x0 - bl OS_ResetSystem -_0208ABC4: - add sp, #0x24 - pop {r4-r7, pc} - .balign 4 -_0208ABC8: .word sErrorMessagePrinterLock -_0208ABCC: .word UNK_020FF4A4 -_0208ABD0: .word FUN_0208A998 -_0208ABD4: .word 0xFFFFE0FF -_0208ABD8: .word 0x04001000 -_0208ABDC: .word gMain + 0x60 -_0208ABE0: .word 0x04000050 -_0208ABE4: .word 0x04001050 -_0208ABE8: .word 0xFFFF1FFF -_0208ABEC: .word UNK_020FF4D8 -_0208ABF0: .word UNK_020FF4AC -_0208ABF4: .word UNK_020FF4BC -_0208ABF8: .word 0x000001F7 -_0208ABFC: .word 0x00006C21 -_0208AC00: .word UNK_020FF49C -_0208AC04: .word 0x04000130 -_0208AC08: .word 0x027FFFA8 -_0208AC0C: .word 0x00002FFF -_0208AC10: .word 0x00007FFF diff --git a/arm9/global.inc b/arm9/global.inc index 94c754ec..08432a05 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1230,15 +1230,15 @@ .extern FUN_0201E230 .extern FUN_0201E258 .extern FUN_0201E28C -.extern FUN_0201E66C -.extern FUN_0201E6D8 -.extern FUN_0201E6E4 -.extern FUN_0201E720 -.extern FUN_0201E740 -.extern FUN_0201E74C -.extern FUN_0201E788 -.extern FUN_0201E7A0 -.extern FUN_0201E7CC +.extern GX_SetBanks +.extern GX_DisableEngineALayers +.extern GX_EngineAToggleLayers +.extern GX_SetEngineALayers +.extern GX_DisableEngineBLayers +.extern GX_EngineBToggleLayers +.extern GX_BothDispOn +.extern GX_SwapDisplay +.extern GX_GetEngineALayers .extern FUN_0201EABC .extern FUN_0201EB48 .extern FUN_0201EB64 @@ -1353,10 +1353,9 @@ .extern FUN_02020AB0 .extern FUN_02020ACC .extern FUN_02020AE8 -.extern FUN_02020AFC -.extern FUN_02020BF4 -.extern FUN_02020BFC -.extern FUN_02020C14 +.extern GetTimer3Count +.extern Timer3CountToMilliSeconds +.extern Timer3CountToSeconds .extern FUN_02020C44 .extern FUN_02020C90 .extern FUN_02020CB0 @@ -1582,8 +1581,8 @@ .extern FUN_02024EC0 .extern FUN_02024ECC .extern FUN_02024ED8 -.extern FUN_02024EE8 -.extern FUN_02024EF4 +.extern GetRivalNamePtr +.extern RivalsNameToU16Array .extern FUN_02024F0C .extern FUN_02024F18 .extern Options_new @@ -1619,10 +1618,6 @@ .extern FUN_020252E8 .extern FUN_020252F4 .extern FUN_020253E0 -.extern FUN_02025484 -.extern FUN_02025490 -.extern FUN_020254A0 -.extern FUN_020254B4 .extern FUN_020254B8 .extern FUN_020254C0 .extern FUN_020254CC @@ -2495,26 +2490,26 @@ .extern FUN_02034660 .extern FUN_02034678 .extern FUN_020346CC -.extern FUN_02034724 -.extern FUN_02034738 -.extern FUN_0203474C +.extern MapHeader_GetAreaDataBank +.extern MapHeader_GetField1 +.extern MapHeader_GetMatrixId .extern MapHeader_GetMsgBank -.extern MapHeader_GetScrSeqReleaseNo -.extern FUN_0203479C -.extern FUN_020347B0 -.extern FUN_020347C4 -.extern FUN_020347D8 -.extern FUN_020347FC -.extern FUN_02034810 -.extern FUN_02034824 -.extern FUN_02034838 -.extern FUN_0203484C -.extern FUN_02034860 -.extern FUN_0203487C -.extern FUN_02034898 -.extern FUN_020348B4 +.extern MapHeader_GetScriptsBank +.extern MapHeader_GetLevelScriptsBank +.extern MapHeader_GetDayMusicId +.extern MapHeader_GetNightMusicId +.extern MapHeader_HasWildEncounters +.extern MapHeader_GetWildEncounterBank +.extern MapHeader_GetEventsBank +.extern MapHeader_GetMapSec +.extern MapHeader_GetWeatherType +.extern MapHeader_GetCameraType +.extern MapHeader_GetField17_0 +.extern MapHeader_GetField17_6 +.extern MapHeader_IsFlyAllowed +.extern MapHeader_IsBikeAllowed .extern FUN_020348E4 -.extern FUN_02034908 +.extern MapHeader_MapIsOnOverworldMatrix .extern FUN_02034930 .extern FUN_02034944 .extern FUN_02034964 @@ -2702,95 +2697,95 @@ .extern FUN_02039754 .extern RunPokemonCenterScriptsInNewContext .extern FUN_0203989C -.extern ScrCmd_nop -.extern ScrCmd_nop2 -.extern ScrCmd_end -.extern ScrCmd_delay -.extern FUN_02039A10 -.extern ScrCmd_loadbyte -.extern ScrCmd_loadword -.extern ScrCmd_loadbytefromaddr -.extern ScrCmd_writebytetoaddr -.extern ScrCmd_setptrbyte -.extern ScrCmd_copylocal -.extern ScrCmd_copybyte -.extern ScrCmd_compare_local_to_local -.extern ScrCmd_compare_local_to_value -.extern ScrCmd_compare_local_to_addr -.extern ScrCmd_compare_addr_to_local -.extern ScrCmd_compare_addr_to_value -.extern ScrCmd_compare_addr_to_addr -.extern ScrCmd_compare_var_to_value -.extern ScrCmd_compare_var_to_var -.extern FUN_02039C40 -.extern FUN_02039C78 -.extern FUN_02039CE4 -.extern ScrCmd_goto -.extern FUN_02039D10 -.extern FUN_02039D48 -.extern FUN_02039D78 -.extern ScrCmd_call -.extern ScrCmd_return -.extern ScrCmd_goto_if -.extern ScrCmd_call_if -.extern ScrCmd_setflag -.extern ScrCmd_clearflag -.extern ScrCmd_checkflag -.extern FUN_02039E84 -.extern FUN_02039EC0 -.extern ScrCmd_settrainerflag -.extern ScrCmd_cleartrainerflag -.extern ScrCmd_checktrainerflag -.extern ScrCmd_addvar -.extern ScrCmd_subvar -.extern ScrCmd_setvar -.extern ScrCmd_copyvar -.extern ScrCmd_setorcopyvar -.extern ScrCmd_message -.extern ScrCmd_message_from -.extern FUN_0203A098 -.extern FUN_0203A0FC -.extern FUN_0203A13C -.extern FUN_0203A188 -.extern FUN_0203A210 -.extern FUN_0203A288 -.extern FUN_0203A2C4 -.extern FUN_0203A304 -.extern FUN_0203A340 -.extern FUN_0203A388 -.extern FUN_0203A3C4 -.extern FUN_0203A400 -.extern FUN_0203A45C -.extern FUN_0203A484 -.extern FUN_0203A4D0 -.extern FUN_0203A560 -.extern FUN_0203A590 -.extern FUN_0203A5D8 -.extern FUN_0203A608 -.extern FUN_0203A630 -.extern FUN_0203A780 -.extern FUN_0203A830 -.extern FUN_0203A85C -.extern FUN_0203A878 -.extern FUN_0203A8B8 -.extern FUN_0203A9F0 -.extern FUN_0203AA90 -.extern FUN_0203AAA0 -.extern FUN_0203AB44 -.extern FUN_0203AB74 -.extern FUN_0203AB8C -.extern FUN_0203AC14 -.extern FUN_0203AC9C -.extern FUN_0203ACC4 -.extern FUN_0203AD08 -.extern FUN_0203AD54 -.extern FUN_0203ADC4 -.extern FUN_0203AE4C -.extern FUN_0203AED4 -.extern FUN_0203AF34 -.extern FUN_0203AF58 -.extern FUN_0203AF84 -.extern FUN_0203AFA4 +.extern ScrCmd_Nop +.extern ScrCmd_Dummy +.extern ScrCmd_End +.extern ScrCmd_Wait +.extern ScrCmd_DebugWatch +.extern ScrCmd_LoadByte +.extern ScrCmd_LoadWord +.extern ScrCmd_LoadByteFromAddr +.extern ScrCmd_WriteByteToAddr +.extern ScrCmd_SetPtrByte +.extern ScrCmd_CopyLocal +.extern ScrCmd_CopyByte +.extern ScrCmd_CompareLocalToLocal +.extern ScrCmd_CompareLocalToValue +.extern ScrCmd_CompareLocalToAddr +.extern ScrCmd_CompareAddrToLocal +.extern ScrCmd_CompareAddrToValue +.extern ScrCmd_CompareAddrToAddr +.extern ScrCmd_CompareVarToValue +.extern ScrCmd_CompareVarToVar +.extern ScrCmd_RunScript +.extern ScrCmd_RunScriptWait +.extern ScrCmd_RestartCurrentScript +.extern ScrCmd_GoTo +.extern ScrCmd_ObjectGoTo +.extern ScrCmd_BgGoTo +.extern ScrCmd_DirectionGoTo +.extern ScrCmd_Call +.extern ScrCmd_Return +.extern ScrCmd_GoToIf +.extern ScrCmd_CallIf +.extern ScrCmd_SetFlag +.extern ScrCmd_ClearFlag +.extern ScrCmd_CheckFlag +.extern ScrCmd_CheckFlagVar +.extern ScrCmd_SetFlagVar +.extern ScrCmd_SetTrainerFlag +.extern ScrCmd_ClearTrainerFlag +.extern ScrCmd_CheckTrainerFlag +.extern ScrCmd_AddVar +.extern ScrCmd_SubVar +.extern ScrCmd_SetVar +.extern ScrCmd_CopyVar +.extern ScrCmd_SetOrCopyVar +.extern ScrCmd_Message +.extern ScrCmd_MessageFrom +.extern ScrCmd_MessageFrom2 +.extern ScrCmd_Unk01FC +.extern ScrCmd_Unk01FD +.extern ScrCmd_Unk01FE +.extern ScrCmd_Unk01FF +.extern ScrCmd_Unk026D +.extern ScrCmd_Unk002C +.extern ScrCmd_Unk002D +.extern ScrCmd_Unk02C0 +.extern ScrCmd_Unk002E +.extern ScrCmd_Unk020C +.extern ScrCmd_Unk002F +.extern ScrCmd_WaitButtonAB +.extern ScrCmd_WaitButtonABTime +.extern ScrCmd_WaitButton +.extern ScrCmd_Unk0032 +.extern ScrCmd_Unk0033 +.extern ScrCmd_Unk0034 +.extern ScrCmd_Unk0035 +.extern ScrCmd_ScrollBg +.extern ScrCmd_CreateMessageBox +.extern ScrCmd_Unk0037 +.extern ScrCmd_Unk0038 +.extern ScrCmd_Unk0039 +.extern ScrCmd_Unk003A +.extern ScrCmd_Unk003B +.extern ScrCmd_Menu +.extern ScrCmd_YesNoMenu +.extern ScrCmd_ShowSaveClock +.extern ScrCmd_HideSaveClock +.extern ScrCmd_Unk0040 +.extern ScrCmd_Unk0041 +.extern ScrCmd_Unk0042 +.extern ScrCmd_Unk029D +.extern ScrCmd_Unk0043 +.extern ScrCmd_Unk02B9 +.extern ScrCmd_Unk0044 +.extern ScrCmd_Unk0045 +.extern ScrCmd_Unk0046 +.extern ScrCmd_Unk0047 +.extern ScrCmd_Unk0048 +.extern ScrCmd_Unk02CF +.extern ScrCmd_Unk02D0 .extern FUN_0203AFC4 .extern FUN_0203B024 .extern FUN_0203B148 @@ -3160,47 +3155,47 @@ .extern FUN_0204064C .extern FUN_02040660 .extern FUN_020406C0 -.extern FUN_020406CC -.extern FUN_02040700 -.extern FUN_02040724 -.extern FUN_02040748 -.extern FUN_02040790 -.extern FUN_020407C8 -.extern FUN_02040800 -.extern FUN_0204083C -.extern FUN_02040874 -.extern FUN_020408BC -.extern FUN_0204091C -.extern FUN_02040964 -.extern FUN_020409C0 -.extern FUN_020409F8 -.extern FUN_02040A30 -.extern FUN_02040A7C -.extern FUN_02040B0C -.extern FUN_02040B5C -.extern FUN_02040BAC -.extern FUN_02040BFC -.extern FUN_02040C34 -.extern FUN_02040C6C -.extern FUN_02040CA4 -.extern FUN_02040D04 -.extern FUN_02040D7C -.extern FUN_02040DB4 -.extern FUN_02040DEC -.extern FUN_02040E4C -.extern FUN_02040EB4 -.extern FUN_02040EF8 -.extern FUN_02040F34 -.extern FUN_02040F6C -.extern FUN_02040FA4 -.extern FUN_02040FDC -.extern FUN_02041014 -.extern FUN_0204104C -.extern FUN_02041094 -.extern FUN_020410C8 -.extern FUN_02041100 -.extern FUN_02041138 -.extern FUN_02041174 +.extern ScrCmd_GetPlayerName +.extern ScrCmd_GetRivalName +.extern ScrCmd_GetFriendName +.extern ScrCmd_Unk00D0 +.extern ScrCmd_GetItemName +.extern ScrCmd_GetPocketName +.extern ScrCmd_GetTMHMMoveName +.extern ScrCmd_GetMoveName +.extern ScrCmd_Unk00D5 +.extern ScrCmd_Unk0280 +.extern ScrCmd_Unk00D6 +.extern ScrCmd_Unk0251 +.extern ScrCmd_GetPoketchAppName +.extern ScrCmd_GetTrainerClassName +.extern ScrCmd_Unk00D9 +.extern ScrCmd_Unk00DA +.extern ScrCmd_Unk00DB +.extern ScrCmd_Unk00DC +.extern ScrCmd_Unk00DD +.extern ScrCmd_GetDecorationName +.extern ScrCmd_GetUndergroundTrapName +.extern ScrCmd_GetUndergroundItemName +.extern ScrCmd_Unk00E2 +.extern ScrCmd_Unk017B +.extern ScrCmd_GetNatureName +.extern ScrCmd_GetFashionName +.extern ScrCmd_Unk0272 +.extern ScrCmd_GetPokemonMoveName +.extern ScrCmd_Unk0232 +.extern ScrCmd_GetSealName +.extern ScrCmd_GetItemNameWithIndefArticle +.extern ScrCmd_GetItemNamePlural +.extern ScrCmd_GetDecorationNameWithArticle +.extern ScrCmd_GetUndergroundTrapNameWithArticle +.extern ScrCmd_GetUndergroundItemNameWithArticle +.extern ScrCmd_Unk02C9 +.extern ScrCmd_Unk02CA +.extern ScrCmd_GetFashionNameWithArticle +.extern ScrCmd_Unk02CC +.extern ScrCmd_GetSealNamePlural +.extern ScrCmd_CapitalizeFirstChar .extern FUN_02041194 .extern FUN_020411C4 .extern FUN_02041340 @@ -3272,58 +3267,58 @@ .extern FUN_02042A18 .extern FUN_02042A48 .extern FUN_02042A98 -.extern FUN_02042B0C -.extern FUN_02042B40 -.extern FUN_02042B74 -.extern FUN_02042BA8 -.extern FUN_02042BDC -.extern FUN_02042C10 -.extern FUN_02042C44 -.extern FUN_02042C8C -.extern FUN_02042CBC +.extern ScrCmd_Unk017D +.extern ScrCmd_Unk017E +.extern ScrCmd_Unk017F +.extern ScrCmd_Unk0180 +.extern ScrCmd_Unk0181 +.extern ScrCmd_Unk0182 +.extern ScrCmd_Unk0183 +.extern ScrCmd_Unk0184 +.extern ScrCmd_Unk0185 .extern FUN_02042D1C -.extern FUN_0204387C -.extern FUN_020438D0 -.extern FUN_02043918 -.extern FUN_020439B4 -.extern FUN_02043A44 -.extern FUN_02043A94 -.extern FUN_02043AAC -.extern FUN_02043ACC -.extern FUN_02043AFC -.extern FUN_02043B28 -.extern FUN_02043B54 -.extern FUN_02043B84 -.extern FUN_02043BD0 -.extern FUN_02043C28 -.extern FUN_02043C6C -.extern FUN_02043C90 -.extern FUN_02043CB4 -.extern FUN_02043CE4 -.extern FUN_02043D28 -.extern FUN_02043D78 -.extern FUN_02043DC8 -.extern FUN_02043DE0 -.extern FUN_02043E00 -.extern FUN_02043E20 -.extern FUN_02043E50 -.extern FUN_02043E68 -.extern FUN_02043E9C -.extern FUN_02043EFC -.extern FUN_02043F50 -.extern FUN_02043FA0 -.extern FUN_02043FF4 -.extern FUN_02044034 -.extern FUN_020440C0 -.extern FUN_020440F0 -.extern FUN_02044120 -.extern FUN_02044138 -.extern FUN_0204413C -.extern FUN_02044140 +.extern ScrCmd_Unk0253 +.extern ScrCmd_Unk0254 +.extern ScrCmd_Unk0255 +.extern ScrCmd_Unk0256 +.extern ScrCmd_Unk0075 +.extern ScrCmd_Unk0076 +.extern ScrCmd_Unk0077 +.extern ScrCmd_GetCoins +.extern ScrCmd_GiveCoins +.extern ScrCmd_TakeCoinsImmediate +.extern ScrCmd_TakeCoinsAddress +.extern ScrCmd_HasEnoughCoinsImmediate +.extern ScrCmd_HasEnoughCoinsAddress +.extern ScrCmd_CanGiveCoins +.extern ScrCmd_GiveMoney +.extern ScrCmd_TakeMoneyImmediate +.extern ScrCmd_TakeMoneyAddress +.extern ScrCmd_HasEnoughMoneyImmediate +.extern ScrCmd_HasEnoughMoneyAddress +.extern ScrCmd_Unk0072 +.extern ScrCmd_Unk0073 +.extern ScrCmd_Unk0074 +.extern ScrCmd_Unk016D +.extern ScrCmd_Unk016E +.extern ScrCmd_Unk01A8 +.extern ScrCmd_Unk01A9 +.extern ScrCmd_Unk01A4 +.extern ScrCmd_Unk01AA +.extern ScrCmd_Unk01AE +.extern ScrCmd_Unk01AF +.extern ScrCmd_Unk01B0 +.extern ScrCmd_Unk01BC +.extern ScrCmd_Unk01BE +.extern ScrCmd_Unk01BF +.extern ScrCmd_Unk01A5 +.extern ScrCmd_Unk01A6 +.extern ScrCmd_Unk01A7 +.extern ScrCmd_Unk01AD .extern FUN_02044158 .extern FUN_0204416C .extern FUN_02044198 -.extern ScrCmd_givemon +.extern ScrCmd_GiveMon .extern ScrCmd_getpartyspecies .extern ScrCmd_checkpartymonotid .extern ScrCmd_giveegg @@ -3360,12 +3355,12 @@ .extern FUN_02045170 .extern FUN_020451D0 .extern FUN_02045264 -.extern FUN_02045268 -.extern FUN_020452B4 -.extern FUN_02045308 -.extern FUN_02045398 -.extern FUN_0204539C -.extern FUN_020453A0 +.extern ScrCmd_Unk01F1 +.extern ScrCmd_Unk01F4 +.extern ScrCmd_Unk01F5 +.extern ScrCmd_Unk01F2 +.extern ScrCmd_Unk01F3 +.extern ScrCmd_Unk02A6 .extern FUN_020453F4 .extern FUN_02045424 .extern FUN_02045438 @@ -3386,30 +3381,30 @@ .extern FUN_02045678 .extern FUN_020456D4 .extern FUN_0204572C -.extern FUN_02045784 -.extern FUN_020457DC -.extern FUN_02045834 -.extern FUN_0204588C -.extern FUN_020458E4 -.extern FUN_02045918 -.extern FUN_02045950 -.extern FUN_02045954 -.extern FUN_02045958 -.extern FUN_020459AC -.extern FUN_020459E8 -.extern FUN_02045A3C -.extern FUN_02045A78 -.extern FUN_02045ACC -.extern FUN_02045B08 -.extern FUN_02045B44 -.extern FUN_02045B80 -.extern FUN_02045BC8 -.extern FUN_02045C04 -.extern FUN_02045C40 -.extern FUN_02045C7C -.extern FUN_02045CD4 -.extern FUN_02045D10 -.extern FUN_02045D4C +.extern ScrCmd_GiveItem +.extern ScrCmd_TakeItem +.extern ScrCmd_HasSpaceForItem +.extern ScrCmd_HasItem +.extern ScrCmd_ItemIdIsTMOrHM +.extern ScrCmd_GetItemPocketId +.extern ScrCmd_Unk0081 +.extern ScrCmd_Unk0082 +.extern ScrCmd_Unk0083 +.extern ScrCmd_Unk0084 +.extern ScrCmd_Unk0085 +.extern ScrCmd_Unk0086 +.extern ScrCmd_Unk0087 +.extern ScrCmd_Unk0088 +.extern ScrCmd_Unk0089 +.extern ScrCmd_Unk008A +.extern ScrCmd_Unk008B +.extern ScrCmd_Unk008C +.extern ScrCmd_Unk008D +.extern ScrCmd_Unk008E +.extern ScrCmd_Unk008F +.extern ScrCmd_Unk0090 +.extern ScrCmd_Unk0091 +.extern ScrCmd_Unk0092 .extern FUN_02045D88 .extern FUN_02045DD0 .extern FUN_02045E1C @@ -3420,10 +3415,10 @@ .extern FUN_02045F84 .extern FUN_02045F88 .extern FUN_02045FCC -.extern FUN_02046010 -.extern FUN_0204601C -.extern FUN_02046028 -.extern FUN_0204602C +.extern ScrCmd_Unk023F +.extern ScrCmd_Unk0240 +.extern ScrCmd_Unk0241 +.extern ScrCmd_Unk0242 .extern FUN_02046030 .extern SavArray_Flags_sizeof .extern SavArray_Flags_init @@ -4895,8 +4890,8 @@ .extern CopyPlayerParty .extern PartyHasMon .extern SavArray_PlayerParty_get -.extern FUN_0206BB28 -.extern FUN_0206BB34 +.extern SavArray_IsNatDexEnabled +.extern Pokedex_IsNatDexEnabled .extern FUN_0206BB48 .extern FUN_0206BB5C .extern FUN_0206BB74 @@ -5482,7 +5477,6 @@ .extern FUN_0208A330 .extern FUN_0208A334 .extern FUN_0208A338 -.extern PrintErrorMessageAndReset .extern FUN_0208AC14 .extern FUN_0208AC58 .extern FUN_0208ACEC @@ -8522,3 +8516,7 @@ .extern CARDi_InitCommon .extern MonNotFaintedOrEgg .extern CountAlivePokemon +.extern FUN_02025484 +.extern FUN_02025490 +.extern FUN_020254A0 +.extern FUN_020254B4 diff --git a/arm9/modules/05/asm/mod05_021D74E0.s b/arm9/modules/05/asm/mod05_021D74E0.s index 24743c4b..e66ad6aa 100644 --- a/arm9/modules/05/asm/mod05_021D74E0.s +++ b/arm9/modules/05/asm/mod05_021D74E0.s @@ -99,7 +99,7 @@ _021D757A: bl FUN_0201B2EC bl MOD05_021D7BA0 bl MOD05_021D7B38 - bl FUN_0201E7A0 + bl GX_SwapDisplay mov r0, #4 bl FUN_02016B94 str r0, [r4, #8] @@ -477,10 +477,10 @@ _021D78CE: ldr r0, [r0, #0xc] bl MOD05_021DC174 add r0, r6, #0 - bl FUN_02034824 + bl MapHeader_GetMapSec add r6, r0, #0 add r0, r4, #0 - bl FUN_02034824 + bl MapHeader_GetMapSec add r1, r0, #0 cmp r6, r1 beq _021D7956 @@ -542,7 +542,7 @@ MOD05_021D79B4: ; 0x021D79B4 add r5, r0, #0 ldr r0, [r5, #0x1c] ldr r0, [r0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0 beq _021D79FE ldr r0, [r5, #0xc] @@ -584,7 +584,7 @@ _021D7A0A: sub r2, r2, #1 bne _021D7A0A add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .balign 4, 0 @@ -710,7 +710,7 @@ MOD05_021D7B10: ; 0x021D7B10 add r4, r0, #0 mov r0, #0xf mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 mov r1, #1 bl FUN_020178A0 @@ -942,7 +942,7 @@ MOD05_021D7CF0: ; 0x021D7CF0 add r5, r0, #0 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021D7D44 ; =UNK_02105BB8 ldr r0, [r0] lsl r1, r0, #1 @@ -954,13 +954,13 @@ MOD05_021D7CF0: ; 0x021D7CF0 str r0, [r5, #0x50] ldr r0, [r5, #0x1c] ldr r0, [r0] - bl FUN_02034724 + bl MapHeader_GetAreaDataBank ldr r1, [r5, #0x4c] bl MOD05_021F4978 str r0, [r5, #0x2c] ldr r0, [r5, #0x1c] ldr r0, [r0] - bl FUN_02034738 + bl MapHeader_GetField1 add r4, r0, #0 ldr r0, [r5, #0x30] cmp r0, #0 @@ -1097,8 +1097,8 @@ MOD05_021D7E4C: ; 0x021D7E4C add r4, r0, #0 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 - bl FUN_0201E788 + bl GX_EngineAToggleLayers + bl GX_BothDispOn bl MOD05_021DBABC str r0, [r4, #0x40] bl MOD05_021D7B64 diff --git a/arm9/modules/05/asm/mod05_021D80E8.s b/arm9/modules/05/asm/mod05_021D80E8.s index 946b25da..c00cb45f 100644 --- a/arm9/modules/05/asm/mod05_021D80E8.s +++ b/arm9/modules/05/asm/mod05_021D80E8.s @@ -1075,7 +1075,7 @@ _021D8992: _021D8998: ldr r0, [r4, #0x1c] ldr r0, [r0] - bl FUN_020347D8 + bl MapHeader_HasWildEncounters cmp r0, #0 beq _021D89B4 add r0, r4, #0 @@ -1846,7 +1846,7 @@ MOD05_021D8FD0: ; 0x021D8FD0 add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl FUN_02034824 + bl MapHeader_GetMapSec lsl r0, r0, #0x10 lsr r5, r0, #0x10 add r0, r6, #0 @@ -1894,7 +1894,7 @@ MOD05_021D9010: ; 0x021D9010 _021D903E: ldr r0, [r5, #0x1c] ldr r0, [r0] - bl FUN_02034824 + bl MapHeader_GetMapSec add r1, r0, #0 lsl r1, r1, #0x10 add r0, r4, #0 @@ -2216,11 +2216,11 @@ MOD05_021D9290: ; 0x021D9290 beq _021D92DA ldr r0, [r4, #0x1c] ldr r0, [r0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #1 bne _021D931C ldr r0, [sp, #8] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0 bne _021D931C ldr r0, [r4, #0x38] @@ -2246,11 +2246,11 @@ _021D92DA: beq _021D931C ldr r0, [r4, #0x1c] ldr r0, [r0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #1 bne _021D931C ldr r0, [sp, #8] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0 bne _021D931C ldr r0, [r4, #0x38] diff --git a/arm9/modules/05/asm/mod05_021DC0B8.s b/arm9/modules/05/asm/mod05_021DC0B8.s index 5e07b24d..ab06fed1 100644 --- a/arm9/modules/05/asm/mod05_021DC0B8.s +++ b/arm9/modules/05/asm/mod05_021DC0B8.s @@ -32,7 +32,7 @@ _021DC0CC: str r0, [r4, #0x10] mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 pop {r3, r4, r5, pc} @@ -681,7 +681,7 @@ _021DC5A2: strh r0, [r1] mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4] add r0, #8 bl MOD05_021DC4AC @@ -1252,7 +1252,7 @@ _021DCA04: beq _021DCA30 mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r2, _021DCA40 ; =0x0400000C mov r1, #3 ldrh r3, [r2] @@ -1336,7 +1336,7 @@ MOD05_021DCA94: ; 0x021DCA94 beq _021DCAD2 mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021DCB5C ; =0x0400000C mov r2, #3 ldrh r3, [r0] @@ -1436,7 +1436,7 @@ MOD05_021DCB6C: ; 0x021DCB6C beq _021DCBA2 mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021DCBD4 ; =0x0400000C mov r2, #3 ldrh r3, [r0] @@ -1967,7 +1967,7 @@ MOD05_021DCF68: ; 0x021DCF68 beq _021DD00A mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r1, #0xc mov r0, #0x42 lsl r0, r0, #2 @@ -5337,7 +5337,7 @@ _021DE8EE: strh r0, [r1] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021DEA68 ; =0x00000F62 mov r1, #1 add sp, #0x10 @@ -5395,7 +5395,7 @@ _021DE9A0: strh r0, [r1] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021DEA68 ; =0x00000F62 mov r1, #3 add sp, #0x10 @@ -6061,7 +6061,7 @@ _021DEF00: strh r1, [r5, r0] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021DF08A _021DEF10: mov r2, #8 @@ -6119,7 +6119,7 @@ _021DEF54: strh r1, [r5, r0] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021DF08A _021DEF8A: mov r0, #6 @@ -6192,7 +6192,7 @@ _021DF008: mov r0, #4 strh r0, [r5, r1] mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021DF08A _021DF01E: add r0, r4, #0 @@ -6425,7 +6425,7 @@ _021DF1EC: strh r1, [r5, r0] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021DF366 _021DF1FC: mov r2, #0xa @@ -6480,7 +6480,7 @@ _021DF240: strh r1, [r5, r0] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021DF366 _021DF270: mov r1, #6 @@ -6548,7 +6548,7 @@ _021DF2E2: mov r0, #4 strh r0, [r5, r1] mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021DF366 _021DF2F8: add r0, r4, #0 @@ -7339,7 +7339,7 @@ _021DF934: str r1, [r0] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021DFAA0 ; =0x00000F62 mov r1, #1 strh r1, [r5, r0] @@ -8366,7 +8366,7 @@ _021E0180: strh r1, [r5, r0] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021E02E8 _021E0190: mov r2, #1 @@ -8428,7 +8428,7 @@ _021E01EE: strh r1, [r5, r0] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021E02E8 _021E0212: mov r0, #6 @@ -8479,7 +8479,7 @@ _021E025C: add r1, #0xc8 str r2, [r1] mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021E02E8 _021E027A: add r0, r4, #0 @@ -8918,7 +8918,7 @@ _021E05D4: bl MOD05_021DC6D4 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E06F0 ; =0x00000F62 mov r1, #3 strh r1, [r5, r0] @@ -9452,7 +9452,7 @@ _021E0A02: strh r0, [r1] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E0AC4 ; =0x00000F62 mov r1, #1 strh r1, [r4, r0] @@ -9484,7 +9484,7 @@ _021E0A52: strh r0, [r1] mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E0AC4 ; =0x00000F62 mov r1, #3 strh r1, [r4, r0] @@ -9562,7 +9562,7 @@ _021E0AF2: bl MOD05_021DC6D4 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E0B94 ; =0x00000F62 mov r1, #1 strh r1, [r4, r0] @@ -9587,7 +9587,7 @@ _021E0B34: bl MOD05_021DC6D4 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E0B94 ; =0x00000F62 mov r1, #3 strh r1, [r4, r0] @@ -9687,7 +9687,7 @@ _021E0BC6: bl MOD05_021DC6D4 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E0D1C ; =0x00000F62 mov r1, #1 add sp, #0x10 @@ -9738,7 +9738,7 @@ _021E0C6A: bl MOD05_021DC6D4 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E0D1C ; =0x00000F62 mov r1, #3 add sp, #0x10 @@ -9880,7 +9880,7 @@ _021E0D4E: bl MOD05_021DC6D4 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E0EA8 ; =0x00000F62 mov r1, #1 add sp, #0x10 @@ -9931,7 +9931,7 @@ _021E0DF2: bl MOD05_021DC6D4 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E0EA8 ; =0x00000F62 mov r1, #3 add sp, #0x10 @@ -10072,7 +10072,7 @@ _021E0F0A: bne _021E0F98 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r5, #0 bl MOD05_021E1290 ldr r0, _021E0FA0 ; =0x00000F62 @@ -10083,7 +10083,7 @@ _021E0F0A: _021E0F2C: mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E0FA0 ; =0x00000F62 mov r1, #3 add sp, #8 @@ -10116,7 +10116,7 @@ _021E0F3E: _021E0F70: mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r5, #0 bl MOD05_021E11EC cmp r0, #1 diff --git a/arm9/modules/05/asm/mod05_021E2E88.s b/arm9/modules/05/asm/mod05_021E2E88.s index 6d69341c..0666b52d 100644 --- a/arm9/modules/05/asm/mod05_021E2E88.s +++ b/arm9/modules/05/asm/mod05_021E2E88.s @@ -606,7 +606,7 @@ MOD05_021E331C: ; 0x021E331C bne _021E333E ldr r0, [r4, #0x1c] ldr r0, [r0] - bl FUN_02034824 + bl MapHeader_GetMapSec add r1, r0, #0 ldr r0, [r4, #4] ldr r0, [r0, #8] diff --git a/arm9/modules/05/asm/mod05_021E3444.s b/arm9/modules/05/asm/mod05_021E3444.s index fa3acfc5..27446591 100644 --- a/arm9/modules/05/asm/mod05_021E3444.s +++ b/arm9/modules/05/asm/mod05_021E3444.s @@ -1058,7 +1058,7 @@ MOD05_021E3C14: ; 0x021E3C14 bl FUN_02016BBC mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r3, _021E3D14 ; =UNK05_021F74AC add r2, sp, #0x38 ldmia r3!, {r0, r1} @@ -1087,7 +1087,7 @@ MOD05_021E3C14: ; 0x021E3C14 bl FUN_02018744 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r3, _021E3D18 ; =UNK05_021F7490 add r2, sp, #0x1c ldmia r3!, {r0, r1} @@ -1116,7 +1116,7 @@ MOD05_021E3C14: ; 0x021E3C14 bl FUN_02018744 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r3, _021E3D1C ; =UNK05_021F7474 add r2, sp, #0 ldmia r3!, {r0, r1} @@ -1145,7 +1145,7 @@ MOD05_021E3C14: ; 0x021E3C14 bl FUN_02018744 mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r5, #0 bl FUN_0200CAB4 add sp, #0x64 diff --git a/arm9/modules/05/asm/mod05_021E8310.s b/arm9/modules/05/asm/mod05_021E8310.s index e3a28a97..7a66cdcb 100644 --- a/arm9/modules/05/asm/mod05_021E8310.s +++ b/arm9/modules/05/asm/mod05_021E8310.s @@ -16,7 +16,7 @@ MOD05_021E8310: ; 0x021E8310 bl Sav2_Pokedex_get add r7, r0, #0 ldr r0, [r6] - bl FUN_02034824 + bl MapHeader_GetMapSec str r0, [r5, #4] add r0, r7, #0 bl Pokedex_GetSinnohDexFlag diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index ad35672e..fe346300 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -286,13 +286,13 @@ MOD05_021E8860: ; 0x021E8860 add r4, r1, #0 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers bl GX_ResetBankForBG mov r0, #4 add r1, r0, #0 @@ -336,7 +336,7 @@ MOD05_021E88C0: ; 0x021E88C0 bl GX_SetBankForBG mov r0, #0xe mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, [r4] mov r0, #4 bl FUN_02016A8C @@ -1511,7 +1511,7 @@ _021E91D4: blt _021E91D4 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r7] add r0, r0, #1 str r0, [r7] @@ -1911,7 +1911,7 @@ _021E9536: blt _021E9536 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r6] add r0, r0, #1 str r0, [r6] @@ -2278,7 +2278,7 @@ _021E9844: blt _021E9844 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r7] add r0, r0, #1 str r0, [r7] @@ -2734,7 +2734,7 @@ _021E9C02: blt _021E9C02 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 bl FUN_02018FF4 @@ -3369,7 +3369,7 @@ _021EA110: bl FUN_020200A0 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r5] add r0, r0, #1 str r0, [r5] @@ -3706,7 +3706,7 @@ _021EA430: blt _021EA430 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 bl FUN_02018FF4 @@ -4287,7 +4287,7 @@ _021EA8B2: bl FUN_02020398 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4] add r0, r0, #1 str r0, [r4] @@ -4573,7 +4573,7 @@ _021EAB5A: blt _021EAB5A mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r6] add r0, r0, #1 str r0, [r6] @@ -4880,7 +4880,7 @@ _021EADDC: blt _021EADDC mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [sp, #0x14] ldr r0, [r0] add r1, r0, #1 @@ -5374,7 +5374,7 @@ _021EB18E: bl FUN_02020238 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 bl MOD05_021E4688 str r0, [r4, #4] @@ -5671,13 +5671,13 @@ _021EB484: bne _021EB484 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4] add sp, #0xc add r0, r0, #1 @@ -5849,13 +5849,13 @@ _021EB5E4: bl memset mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4] add sp, #0xc add r0, r0, #1 @@ -6180,7 +6180,7 @@ _021EB86A: bl MOD05_021E35EC mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r5] add r0, r0, #1 str r0, [r5] @@ -6276,7 +6276,7 @@ _021EB8E8: bl FUN_02020238 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r2, #0x11 ldr r1, [r4] add r0, sp, #0x24 @@ -6930,7 +6930,7 @@ _021EBE60: bl FUN_02020064 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r5] add r0, r0, #1 str r0, [r5] @@ -26509,7 +26509,7 @@ MOD05_021F5518: ; 0x021F5518 bl FUN_020178BC mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021F5560 ; =0x00000648 bl FUN_020054C8 add sp, #4 @@ -26721,7 +26721,7 @@ MOD05_021F56B8: ; 0x021F56B8 strh r1, [r0] mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _021F5714 ; =0x0400000C mov r0, #3 ldrh r2, [r1] @@ -26746,7 +26746,7 @@ MOD05_021F56B8: ; 0x021F56B8 bl FUN_02018768 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 bl MOD05_021F569C add sp, #8 @@ -26766,7 +26766,7 @@ MOD05_021F571C: ; 0x021F571C strh r1, [r0] mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _021F5778 ; =0x0400000E mov r0, #3 ldrh r2, [r1] @@ -26790,7 +26790,7 @@ MOD05_021F571C: ; 0x021F571C bl FUN_02018768 mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 bl MOD05_021F569C add sp, #8 @@ -26931,7 +26931,7 @@ _021F5856: bl FUN_020178BC mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _021F5980 _021F5872: ldr r0, [r4] @@ -26953,7 +26953,7 @@ _021F5888: strh r0, [r4, #0xa] ldr r0, [r5, #0x1c] ldr r0, [r0] - bl FUN_020347D8 + bl MapHeader_HasWildEncounters cmp r0, #0 beq _021F58D4 mov r0, #0xa @@ -27001,7 +27001,7 @@ _021F58EE: beq _021F5980 mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021F5984 ; =0x04000050 mov r1, #0 strh r1, [r0] diff --git a/arm9/modules/05/src/mod05_021E72FC.c b/arm9/modules/05/src/mod05_021E72FC.c index 8a31d032..c24a7bd3 100644 --- a/arm9/modules/05/src/mod05_021E72FC.c +++ b/arm9/modules/05/src/mod05_021E72FC.c @@ -2,6 +2,7 @@ #include "mod05_021E72FC.h" #include "heap.h" + extern void FUN_020054C8(u32 param0); extern void FUN_020463CC(u32 param0, void *func, UnkStruct021E7358 *param2); extern u32 FUN_020553A0(u32 param0); @@ -19,7 +20,6 @@ extern void FUN_02055304(u32 param0, u32 param1); extern BOOL FUN_02056B74(u32 param0, u32 param1, u32 param2); extern void FUN_02058418(u32 param0, u32 param1); extern void FUN_020054F0(u32 param0, u32 param1); -extern void FUN_02016A8C(u32 param0, void *param1); THUMB_FUNC BOOL MOD05_021E72FC(u32 param0, u32 param1) { diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index 1dd5e52a..d46e003b 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -126,7 +126,7 @@ _0223977A: sub r2, r2, #1 bne _0223977A add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -148,7 +148,7 @@ MOD06_02239790: ; 0x02239790 bl FUN_02016BBC mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r5, _022397F0 ; =0x0224F1D8 add r3, sp, #0 ldmia r5!, {r0, r1} @@ -225,7 +225,7 @@ MOD06_02239840: ; 0x02239840 add r4, r1, #0 add r5, r0, #0 add r0, r4, #4 - bl FUN_0201E66C + bl GX_SetBanks ldr r0, [r4] ldr r0, [r0, #8] bl MOD06_02239864 @@ -249,7 +249,7 @@ MOD06_0223986C: ; 0x0223986C bl MOD05_021D7A20 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r3, pc} thumb_func_start MOD06_0223987C @@ -8668,7 +8668,7 @@ _0223D804: bne _0223D8F4 ldr r0, [r5, #0x1c] ldr r0, [r0] - bl FUN_02034824 + bl MapHeader_GetMapSec cmp r0, #0x65 beq _0223D8F4 ldr r0, [r5, #0x1c] @@ -8949,7 +8949,7 @@ _0223DA88: .word 0x00000241 MOD06_0223DA8C: ; 0x0223DA8C push {r4, lr} add r4, r0, #0 - bl FUN_0201E7CC + bl GX_GetEngineALayers mov r1, #0x8e lsl r1, r1, #2 str r0, [r4, r1] @@ -8988,16 +8988,16 @@ MOD06_0223DA8C: ; 0x0223DA8C bl FUN_020178BC mov r0, #0 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #3 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r4, pc} nop _0223DB10: .word 0x00000235 @@ -9028,7 +9028,7 @@ MOD06_0223DB1C: ; 0x0223DB1C mov r0, #0x8e lsl r0, r0, #2 ldr r0, [r4, r0] - bl FUN_0201E720 + bl GX_SetEngineALayers pop {r4, pc} nop _0223DB58: .word 0x00000235 @@ -10997,7 +10997,7 @@ _0223EBA8: blo _0223EBA8 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r3, r4, r5, r6, r7, pc} nop _0223EBCC: .word MOD6_0224F370 @@ -27738,7 +27738,7 @@ MOD06_02246F0C: ; 0x02246F0C strh r0, [r2, #4] mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r2, r5, #0 add r0, r4, #0 mov r1, #2 @@ -27771,7 +27771,7 @@ MOD06_02246F0C: ; 0x02246F0C str r0, [r5, r1] mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r3, r4, r5, pc} .align 2, 0 _02246FB4: .word 0x0400000A @@ -27782,7 +27782,7 @@ MOD06_02246FB8: ; 0x02246FB8 add r4, r0, #0 mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x1e lsl r0, r0, #4 ldr r0, [r4, r0] @@ -27809,7 +27809,7 @@ MOD06_02246FB8: ; 0x02246FB8 bl FUN_02054590 mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r4, pc} nop _02247008: .word 0x04000008 @@ -31270,7 +31270,7 @@ CreateInGameTradeMon: ; 0x022489D4 add r2, r4, #0 bl SetMonData ldr r0, [sp, #0x2c] - bl FUN_02034824 + bl MapHeader_GetMapSec add r3, r0, #0 ldr r0, [sp, #0x28] mov r1, #0 diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s index 1a91192a..3cef2d24 100644 --- a/arm9/modules/07/asm/module_07.s +++ b/arm9/modules/07/asm/module_07.s @@ -110,7 +110,7 @@ _02211F1E: sub r2, r2, #1 bne _02211F1E add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -126,8 +126,8 @@ MOD07_02211F34: ; 0x02211F34 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r0, #1 lsl r0, r0, #0x1a ldr r2, [r0] @@ -1358,7 +1358,7 @@ MOD07_02212968: ; 0x02212968 bne _022129AC mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 lsl r0, r0, #0x1a add r3, r0, #0 @@ -1750,7 +1750,7 @@ MOD07_02212C04: ; 0x02212C04 bl FUN_0200BF60 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x38 pop {r3, r4, r5, r6, r7, pc} nop @@ -1966,7 +1966,7 @@ MOD07_02212D98: ; 0x02212D98 bl FUN_02018744 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x64 pop {r4, r5, pc} nop @@ -1981,7 +1981,7 @@ MOD07_02212E64: ; 0x02212E64 add r4, r0, #0 mov r0, #0x1f mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0xc] mov r1, #3 bl FUN_020178A0 @@ -3269,7 +3269,7 @@ MOD07_022138F8: ; 0x022138F8 add r4, r0, #0 mov r0, #0x1e mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0xc] mov r1, #3 bl FUN_020178A0 diff --git a/arm9/modules/09/asm/module_09.s b/arm9/modules/09/asm/module_09.s index e98eadea..55a90a71 100644 --- a/arm9/modules/09/asm/module_09.s +++ b/arm9/modules/09/asm/module_09.s @@ -2143,7 +2143,7 @@ MOD09_02212F5C: ; 0x02212F5C add r4, r0, #0 mov r0, #0x1f mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 mov r1, #4 bl FUN_020178A0 @@ -8759,7 +8759,7 @@ MOD09_02216734: ; 0x02216734 bl MOD09_02217750 mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r4, pc} thumb_func_start MOD09_02216770 @@ -13962,7 +13962,7 @@ MOD09_02219198: ; 0x02219198 add r4, r0, #0 mov r0, #0x17 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 mov r1, #4 bl FUN_020178A0 @@ -15495,7 +15495,7 @@ MOD09_02219DC8: ; 0x02219DC8 bl MOD09_0221A244 mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r4, pc} .align 2, 0 diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s index 30ee9995..32981b60 100644 --- a/arm9/modules/11/asm/module_11_thumb1.s +++ b/arm9/modules/11/asm/module_11_thumb1.s @@ -386,7 +386,7 @@ MOD11_0222D88C: ; 0x0222D88C bl MOD11_02258450 mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x67 lsl r0, r0, #2 ldr r0, [r4, r0] @@ -427,10 +427,10 @@ MOD11_0222D944: ; 0x0222D944 bl FUN_02019178 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #4] mov r1, #1 bl FUN_020178A0 @@ -499,7 +499,7 @@ _0222D99A: orr r2, r0 strh r2, [r1] add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r5, #0 bl MOD11_02230E44 add r4, r0, #0 @@ -602,13 +602,13 @@ _0222D99A: ldrh r2, [r0] bic r2, r1 strh r2, [r0] - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, _0222DB4C ; =MOD11_0222F01C add r1, r5, #0 bl Main_SetVBlankIntrCB @@ -1420,7 +1420,7 @@ MOD11_0222E264: ; 0x0222E264 sub sp, #0x9c add r5, r0, #0 add r4, r1, #0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers mov r0, #0 bl FUN_0200E394 mov r0, #1 @@ -1434,7 +1434,7 @@ _0222E282: sub r2, r2, #1 bne _0222E282 add r0, sp, #0x20 - bl FUN_0201E66C + bl GX_SetBanks mov r1, #6 mov r2, #2 mov r0, #0 @@ -1517,7 +1517,7 @@ _0222E2F0: orr r2, r0 strh r2, [r1] add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 bl MOD11_02258450 add r0, r5, #0 @@ -1622,13 +1622,13 @@ _0222E2F0: ldrh r2, [r0] bic r2, r1 strh r2, [r0] - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, _0222E46C ; =MOD11_0222F01C add r1, r5, #0 bl Main_SetVBlankIntrCB @@ -1706,10 +1706,10 @@ MOD11_0222E4E8: ; 0x0222E4E8 add r4, r0, #0 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 mov r1, #1 bl FUN_020178A0 @@ -2995,7 +2995,7 @@ MOD11_0222EF50: ; 0x0222EF50 push {r3, lr} mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _0222EFBC ; =0x04000008 mov r1, #3 ldrh r2, [r0] @@ -3127,7 +3127,7 @@ _0222F056: sub r2, r2, #1 bne _0222F056 add r0, sp, #0x28 - bl FUN_0201E66C + bl GX_SetBanks _0222F064: ldr r1, _0222F0B8 ; =0x000023FB ldrb r2, [r4, r1] @@ -3146,7 +3146,7 @@ _0222F07A: sub r2, r2, #1 bne _0222F07A add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks _0222F088: add r0, r4, #0 add r0, #0x88 diff --git a/arm9/modules/11/asm/module_11_thumb2.s b/arm9/modules/11/asm/module_11_thumb2.s index f04e67da..62996375 100644 --- a/arm9/modules/11/asm/module_11_thumb2.s +++ b/arm9/modules/11/asm/module_11_thumb2.s @@ -49,7 +49,7 @@ MOD11_0222F29C: ; 0x0222F29C str r0, [r5, #8] add r0, r5, #0 bl FUN_0206BFF0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers ldr r6, _0222F4C8 ; =MOD11_0225DA40 add r3, sp, #0x40 mov r2, #5 @@ -59,7 +59,7 @@ _0222F30E: sub r2, r2, #1 bne _0222F30E add r0, sp, #0x40 - bl FUN_0201E66C + bl GX_SetBanks mov r1, #6 mov r2, #2 mov r0, #0 @@ -165,10 +165,10 @@ _0222F30E: add r2, r1, #0 add r3, r1, #0 bl FUN_02003914 - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x13 str r0, [sp] mov r0, #0x1b @@ -813,7 +813,7 @@ MOD11_0222F93C: ; 0x0222F93C bl FUN_020191A4 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #4] mov r1, #1 bl FUN_020178A0 @@ -25381,7 +25381,7 @@ _0223B916: str r0, [sp, #0xe0] ldr r0, [r4] bl MOD11_022300D0 - bl FUN_0206BB34 + bl Pokedex_IsNatDexEnabled str r0, [sp, #0xe4] bl FUN_0201D658 str r0, [r4, #0x54] diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s index 4f1ef252..f717789a 100644 --- a/arm9/modules/12/asm/module_12.s +++ b/arm9/modules/12/asm/module_12.s @@ -12,8 +12,8 @@ MOD12_0222D5C0: ; 0x0222D5C0 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r1, #1 lsl r1, r1, #0x1a ldr r0, [r1] @@ -255,13 +255,13 @@ _0222D7BC: ldr r0, _0222D88C ; =0x00000824 mov r1, #1 strb r1, [r4, r0] - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r1, _0222D890 ; =0x0000046F mov r0, #6 mov r2, #1 @@ -448,10 +448,10 @@ MOD12_0222D9B0: ; 0x0222D9B0 bl FUN_02019178 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x30] mov r1, #1 bl FUN_020178A0 @@ -589,7 +589,7 @@ MOD12_0222DB50: ; 0x0222DB50 push {r4, r5, lr} sub sp, #0x8c add r4, r0, #0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers ldr r5, _0222DC70 ; =MOD12_022449E8 add r3, sp, #0x10 mov r2, #5 @@ -599,7 +599,7 @@ _0222DB60: sub r2, r2, #1 bne _0222DB60 add r0, sp, #0x10 - bl FUN_0201E66C + bl GX_SetBanks mov r1, #6 mov r2, #2 mov r0, #0 @@ -706,7 +706,7 @@ _0222DBC0: strh r0, [r1] mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 bl MOD12_022319A4 add sp, #0x8c @@ -1079,7 +1079,7 @@ MOD12_0222DF30: ; 0x0222DF30 bne _0222DFBE mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x10 pop {r3, r4, r5, pc} _0222DF9A: @@ -3147,8 +3147,8 @@ MOD12_0222EF04: ; 0x0222EF04 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r1, #1 lsl r1, r1, #0x1a ldr r0, [r1] @@ -3357,13 +3357,13 @@ MOD12_0222EF04: ; 0x0222EF04 ldr r0, _0222F188 ; =0x000004F8 mov r1, #1 strb r1, [r5, r0] - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0 bl FUN_0200415C ldr r1, _0222F18C ; =0x0000046F @@ -3604,10 +3604,10 @@ MOD12_0222F324: ; 0x0222F324 bl FUN_02019178 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x30] mov r1, #1 bl FUN_020178A0 @@ -3818,7 +3818,7 @@ MOD12_0222F548: ; 0x0222F548 push {r3, r4, r5, lr} sub sp, #0xa8 add r4, r0, #0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers ldr r5, _0222F6A0 ; =MOD12_02244B1C add r3, sp, #0x2c mov r2, #5 @@ -3828,7 +3828,7 @@ _0222F558: sub r2, r2, #1 bne _0222F558 add r0, sp, #0x2c - bl FUN_0201E66C + bl GX_SetBanks mov r1, #6 mov r2, #2 mov r0, #0 @@ -3934,7 +3934,7 @@ _0222F5B8: orr r2, r0 strh r2, [r1] add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r5, _0222F6B0 ; =MOD12_02244AE0 add r3, sp, #0 ldmia r5!, {r0, r1} @@ -4987,8 +4987,8 @@ MOD12_0222FE4C: ; 0x0222FE4C add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r1, #1 lsl r1, r1, #0x1a ldr r0, [r1] @@ -5219,13 +5219,13 @@ MOD12_0222FE4C: ; 0x0222FE4C ldr r0, _02230110 ; =0x00001154 mov r1, #1 strb r1, [r5, r0] - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r1, _02230114 ; =0x0000046F mov r0, #6 mov r2, #1 @@ -5442,10 +5442,10 @@ _02230296: blt _02230296 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x74] mov r1, #1 bl FUN_020178A0 @@ -5764,7 +5764,7 @@ MOD12_02230574: ; 0x02230574 push {r4, r5, lr} sub sp, #0x8c add r4, r0, #0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers ldr r5, _02230694 ; =MOD12_02244C38 add r3, sp, #0x10 mov r2, #5 @@ -5774,7 +5774,7 @@ _02230584: sub r2, r2, #1 bne _02230584 add r0, sp, #0x10 - bl FUN_0201E66C + bl GX_SetBanks mov r1, #6 mov r2, #2 mov r0, #0 @@ -5881,7 +5881,7 @@ _022305E4: strh r0, [r1] mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 bl MOD12_0223B41C add sp, #0x8c @@ -7479,7 +7479,7 @@ MOD12_022312F4: ; 0x022312F4 push {r3, lr} mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _02231360 ; =0x04000008 mov r1, #3 ldrh r2, [r0] @@ -41074,8 +41074,8 @@ MOD12_02241210: ; 0x02241210 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r1, #1 lsl r1, r1, #0x1a ldr r0, [r1] @@ -41276,13 +41276,13 @@ MOD12_02241210: ; 0x02241210 mov r1, #1 lsl r0, r0, #4 strb r1, [r5, r0] - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r1, _0224147C ; =0x0000046F mov r0, #6 mov r2, #1 @@ -41479,10 +41479,10 @@ _022415D4: blt _022415D4 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x30] mov r1, #1 bl FUN_020178A0 @@ -41754,7 +41754,7 @@ MOD12_02241864: ; 0x02241864 push {r3, r4, r5, lr} sub sp, #0xa8 add r4, r0, #0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers ldr r5, _022419BC ; =MOD12_0224656C add r3, sp, #0x2c mov r2, #5 @@ -41764,7 +41764,7 @@ _02241874: sub r2, r2, #1 bne _02241874 add r0, sp, #0x2c - bl FUN_0201E66C + bl GX_SetBanks mov r1, #6 mov r2, #2 mov r0, #0 @@ -41870,7 +41870,7 @@ _022418D4: orr r2, r0 strh r2, [r1] add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r5, _022419CC ; =MOD12_02246530 add r3, sp, #0 ldmia r5!, {r0, r1} diff --git a/arm9/modules/14/asm/module_14.s b/arm9/modules/14/asm/module_14.s index 824cb507..37a18d6d 100644 --- a/arm9/modules/14/asm/module_14.s +++ b/arm9/modules/14/asm/module_14.s @@ -1925,7 +1925,7 @@ _021D84AA: str r1, [r4, r0] sub r0, #0x38 ldr r0, [r4, r0] - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled mov r1, #0x52 lsl r1, r1, #2 str r0, [r4, r1] @@ -9205,7 +9205,7 @@ MOD14_021DBEAC: ; 0x021DBEAC mov r0, #0x47 lsl r0, r0, #2 ldr r0, [r6, r0] - bl FUN_0206BB28 + bl SavArray_IsNatDexEnabled ldrh r1, [r4, #4] bl FUN_0206BB48 strh r0, [r4, #8] @@ -10495,8 +10495,8 @@ _021DC79C: mov r5, #1 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r1, #1 lsl r1, r1, #0x1a ldr r0, [r1] @@ -12835,7 +12835,7 @@ MOD14_021DDA38: ; 0x021DDA38 add r5, r0, #0 ldr r0, _021DDB20 ; =MOD14_021E63A4 add r4, r1, #0 - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _021DDB24 ; =0x04000304 ldrh r1, [r2] lsr r0, r2, #0xb @@ -13061,10 +13061,10 @@ _021DDBF2: _021DDC48: mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers bl GX_DispOn add sp, #0x10 pop {r3, r4, r5, pc} @@ -13083,7 +13083,7 @@ MOD14_021DDC78: ; 0x021DDC78 bl G3X_InitMtxStack mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021DDCDC ; =0x04000008 mov r1, #3 ldrh r2, [r0] diff --git a/arm9/modules/15/asm/module_15.s b/arm9/modules/15/asm/module_15.s index f7f9881d..560be120 100644 --- a/arm9/modules/15/asm/module_15.s +++ b/arm9/modules/15/asm/module_15.s @@ -2817,8 +2817,8 @@ MOD15_021D8998: ; 0x021D8998 MOD15_021D89C0: ; 0x021D89C0 push {r3, r4, r5, lr} add r4, r1, #0 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r1, #1 lsl r1, r1, #0x1a ldr r0, [r1] @@ -2903,10 +2903,10 @@ MOD15_021D89C0: ; 0x021D89C0 bl MOD15_021DAEB4 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers bl GX_DispOn add r0, r4, #0 bl MOD15_021D8998 @@ -3110,7 +3110,7 @@ MOD15_021D8C30: ; 0x021D8C30 add r2, r0, #0 bl GX_SetGraphicsMode ldr r0, _021D8C98 ; =0x021DB964 - bl FUN_0201E66C + bl GX_SetBanks ldr r0, _021D8C9C ; =0x021DB8C8 bl FUN_02016BBC mov r1, #0 diff --git a/arm9/modules/16/asm/module_16.s b/arm9/modules/16/asm/module_16.s index cfff4a29..26ae4fbf 100644 --- a/arm9/modules/16/asm/module_16.s +++ b/arm9/modules/16/asm/module_16.s @@ -1984,7 +1984,7 @@ _021D840E: sub r2, r2, #1 bne _021D840E add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -2207,10 +2207,10 @@ MOD16_021D8534: ; 0x021D8534 str r0, [r5, r1] mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x4f lsl r0, r0, #2 ldr r0, [r5, r0] @@ -3372,7 +3372,7 @@ MOD16_021D8DC0: ; 0x021D8DC0 bl FUN_020178BC mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r6, _021D8F1C ; =0x021FF4D8 add r3, sp, #0x54 ldmia r6!, {r0, r1} @@ -25839,7 +25839,7 @@ _021E3288: _021E329E: mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021E32D0 ; =0x00000804 ldr r0, [r5, r0] bl FreeToHeap @@ -27619,7 +27619,7 @@ MOD16_021E4094: ; 0x021E4094 add r0, r0, #4 str r1, [r6, r0] mov r0, #2 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r6, #0 add r0, #0xc4 ldr r0, [r0] @@ -27658,7 +27658,7 @@ MOD16_021E40D4: ; 0x021E40D4 bl G2x_SetBlendAlpha_ mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r6, #0 add r0, #0xc4 ldr r0, [r0] @@ -27725,7 +27725,7 @@ _021E4158: _021E4162: mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x81 add r1, r4, #0 lsl r0, r0, #4 @@ -27773,7 +27773,7 @@ _021E417E: bne _021E41CC mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r3, r4, r5, r6, r7, pc} _021E41CC: add r0, r5, #0 @@ -51397,7 +51397,7 @@ MOD16_021EF218: ; 0x021EF218 bl FUN_020178BC mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r5, #0 mov r1, #0 bl FUN_020178A0 diff --git a/arm9/modules/17/asm/module_17.s b/arm9/modules/17/asm/module_17.s index 3615681b..82398e6b 100644 --- a/arm9/modules/17/asm/module_17.s +++ b/arm9/modules/17/asm/module_17.s @@ -414,7 +414,7 @@ MOD17_021D7794: ; 0x021D7794 ldr r0, _021D77B0 ; =gMain + 0x60 mov r1, #1 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay pop {r3, pc} nop _021D77B0: .word gMain + 0x60 @@ -426,7 +426,7 @@ MOD17_021D77B4: ; 0x021D77B4 ldr r0, _021D77D0 ; =gMain + 0x60 mov r1, #0 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay bl MOD17_021D7E0C bl MOD17_021D7E00 bl GX_ResetBankForTex @@ -1163,7 +1163,7 @@ _021D7D12: sub r2, r2, #1 bne _021D7D12 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -1177,7 +1177,7 @@ MOD17_021D7D28: ; 0x021D7D28 bl G3X_InitMtxStack mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021D7D9C ; =0x04000008 mov r1, #3 ldrh r2, [r0] @@ -1254,14 +1254,14 @@ MOD17_021D7DB0: ; 0x021D7DB0 orr r0, r1 str r0, [r2] bl FUN_020B0FC0 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r0, #0x1f mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x13 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x10 pop {r4, pc} .align 2, 0 @@ -1280,8 +1280,8 @@ MOD17_021D7E00: ; 0x021D7E00 thumb_func_start MOD17_021D7E0C MOD17_021D7E0C: ; 0x021D7E0C push {r3, lr} - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers bl FUN_020B0FC0 pop {r3, pc} thumb_func_end MOD17_021D7E0C @@ -4497,19 +4497,19 @@ MOD17_021D9778: ; 0x021D9778 bic r2, r3 strh r2, [r1, #6] mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0 bl FUN_0200E394 pop {r4, pc} @@ -4535,16 +4535,16 @@ MOD17_021D9800: ; 0x021D9800 bl FUN_0201FD98 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers pop {r4, pc} thumb_func_end MOD17_021D9800 @@ -13824,7 +13824,7 @@ _021DDBBC: ldr r0, _021DDC2C ; =gMain + 0x60 mov r1, #0 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay add r0, r4, #0 add r0, #0x14 mov r1, #0xe diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index 233dbc05..d0f6db33 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -1467,7 +1467,7 @@ _0223A194: sub r2, r2, #1 bne _0223A194 add r0, sp, #0x80 - bl FUN_0201E66C + bl GX_SetBanks ldr r5, _0223A2A8 ; =0x02250000 add r3, sp, #0x70 add r2, r3, #0 @@ -1733,16 +1733,16 @@ MOD18_0223A3D4: ; 0x0223A3D4 bl MOD18_022396A0 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r2, #5 mov r0, #3 mov r1, #0x1d @@ -2128,16 +2128,16 @@ _0223A73A: bl FUN_0200E1D0 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4] add sp, #0xc add r0, r0, #1 @@ -6124,10 +6124,10 @@ _0223C634: blt _0223C57A mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x64 pop {r4, r5, r6, r7, pc} .align 2, 0 @@ -14393,7 +14393,7 @@ _022404A4: bl FUN_020178BC mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 bl FUN_0204F774 ldr r0, _022404EC ; =0x022513A0 @@ -14652,7 +14652,7 @@ _02240672: ; jump table _0224068C: mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers bl MOD18_022400A0 str r0, [r4, #4] ldr r0, [r4] @@ -14793,7 +14793,7 @@ _0224079E: bl FUN_0200A208 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #7 str r0, [r4] bl MOD18_0223D638 @@ -17110,10 +17110,10 @@ _0224195E: _022419BE: mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x5c pop {r4, r5, r6, r7, pc} nop @@ -18293,10 +18293,10 @@ _0224227A: _02242308: mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x60 pop {r3, r4, r5, r6, r7, pc} .align 2, 0 @@ -18857,10 +18857,10 @@ _02242704: blt _02242704 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x5c pop {r4, r5, r6, r7, pc} nop @@ -20398,10 +20398,10 @@ MOD18_022432B4: ; 0x022432B4 bl FUN_02020238 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x5c pop {pc} nop @@ -21585,10 +21585,10 @@ _02243CBE: blt _02243C60 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x5c pop {r4, r5, r6, r7, pc} nop @@ -22580,7 +22580,7 @@ _02244460: blt _02244460 mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [r4] add sp, #0x60 add r0, r0, #1 @@ -22594,16 +22594,16 @@ _022444A4: _022444AC: mov r0, #8 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #1 add r1, r0, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #4 mov r1, #0 bl FUN_02017FE4 @@ -23101,7 +23101,7 @@ MOD18_0224486C: ; 0x0224486C bl FUN_02016C18 mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r6, _02244990 ; =0x02250498 add r3, sp, #0x2c ldmia r6!, {r0, r1} @@ -23119,7 +23119,7 @@ MOD18_0224486C: ; 0x0224486C bl FUN_02016C18 mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r6, _02244994 ; =0x0225047C add r3, sp, #0x10 ldmia r6!, {r0, r1} @@ -23137,7 +23137,7 @@ MOD18_0224486C: ; 0x0224486C bl FUN_02016C18 mov r0, #8 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r5, #0 mov r1, #7 bl FUN_02018744 @@ -32427,7 +32427,7 @@ _02249184: str r2, [r0, r1] mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0xb4 pop {r4, r5, r6, r7, pc} nop diff --git a/arm9/modules/20/asm/module_20.s b/arm9/modules/20/asm/module_20.s index a42eeb6f..67f4c29a 100644 --- a/arm9/modules/20/asm/module_20.s +++ b/arm9/modules/20/asm/module_20.s @@ -1560,10 +1560,10 @@ MOD20_02252ED0: ; 0x02252ED0 mov r0, #0x10 orr r0, r1 str r0, [r2] - bl FUN_0201E740 + bl GX_DisableEngineBLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #6 lsl r0, r0, #6 ldr r0, [r4, r0] diff --git a/arm9/modules/22/asm/module_22.s b/arm9/modules/22/asm/module_22.s index ef079cdb..e58e406b 100644 --- a/arm9/modules/22/asm/module_22.s +++ b/arm9/modules/22/asm/module_22.s @@ -657,7 +657,7 @@ MOD22_02254D00: ; 0x02254D00 eor r0, r3 orr r0, r1 beq _02254D32 - bl FUN_02020BF4 + bl GetTimer3Count add r5, r4, #0 add r5, #0xc ldr r7, [r4, #0x14] @@ -672,7 +672,7 @@ MOD22_02254D00: ; 0x02254D00 str r3, [r5, #4] b _02254D3A _02254D32: - bl FUN_02020BF4 + bl GetTimer3Count str r0, [r4, #0xc] str r1, [r4, #0x10] _02254D3A: @@ -687,7 +687,7 @@ _02254D3A: MOD22_02254D44: ; 0x02254D44 push {r4, lr} add r4, r0, #0 - bl FUN_02020BF4 + bl GetTimer3Count str r0, [r4, #0x14] str r1, [r4, #0x18] mov r0, #0 @@ -706,12 +706,12 @@ MOD22_02254D58: ; 0x02254D58 bne _02254D66 b _02254E7C _02254D66: - bl FUN_02020BF4 + bl GetTimer3Count ldr r3, [r5, #0xc] ldr r2, [r5, #0x10] sub r0, r0, r3 sbc r1, r2 - bl FUN_02020BFC + bl Timer3CountToMilliSeconds ldr r2, _02254E80 ; =0x04000280 mov r3, #1 strh r3, [r2] diff --git a/arm9/modules/41/asm/module_41.s b/arm9/modules/41/asm/module_41.s index a60736df..637c100f 100644 --- a/arm9/modules/41/asm/module_41.s +++ b/arm9/modules/41/asm/module_41.s @@ -1046,7 +1046,7 @@ MOD41_0225504C: ; 0x0225504C add r5, r0, #0 add r4, r5, #0 add r4, #0x48 - bl FUN_02020BF4 + bl GetTimer3Count str r0, [r5, #0x68] str r1, [r5, #0x6c] mov r2, #0 @@ -1105,7 +1105,7 @@ MOD41_022550BC: ; 0x022550BC mov r1, #0 add r0, #0x88 str r1, [r0] - bl FUN_02020BF4 + bl GetTimer3Count str r0, [r4, #0x70] str r1, [r4, #0x74] pop {r4, pc} @@ -1115,7 +1115,7 @@ MOD41_022550BC: ; 0x022550BC MOD41_022550D0: ; 0x022550D0 push {r3, r4, r5, r6, r7, lr} add r4, r0, #0 - bl FUN_02020BF4 + bl GetTimer3Count add r5, r4, #0 add r5, #0x68 ldr r7, [r4, #0x70] @@ -1155,12 +1155,12 @@ MOD41_02255108: ; 0x02255108 ldr r0, [r0] cmp r0, #0 beq _0225516A - bl FUN_02020BF4 + bl GetTimer3Count ldr r3, [r4, #0x68] ldr r2, [r4, #0x6c] sub r0, r0, r3 sbc r1, r2 - bl FUN_02020C14 + bl Timer3CountToSeconds add r5, r0, #0 add r0, r4, #0 add r0, #0x80 diff --git a/arm9/modules/42/asm/module_42.s b/arm9/modules/42/asm/module_42.s index 8e41c6cc..5bbfa2ba 100644 --- a/arm9/modules/42/asm/module_42.s +++ b/arm9/modules/42/asm/module_42.s @@ -139,7 +139,7 @@ _02254932: add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0 beq _02254984 ldr r0, [r4, #0x1c] @@ -527,7 +527,7 @@ MOD42_02254C04: ; 0x02254C04 add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0 beq _02254C3C ldr r1, [r4, #0x1c] diff --git a/arm9/modules/43/asm/module_43.s b/arm9/modules/43/asm/module_43.s index 8efadd9b..89b23259 100644 --- a/arm9/modules/43/asm/module_43.s +++ b/arm9/modules/43/asm/module_43.s @@ -62,7 +62,7 @@ MOD43_0225489C: ; 0x0225489C add r6, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0 beq _022548E0 ldr r0, [r4, #0x1c] @@ -395,7 +395,7 @@ MOD43_02254AF8: ; 0x02254AF8 add r7, r0, #0 ldr r0, [r4, #0x1c] ldr r0, [r0] - bl FUN_02034908 + bl MapHeader_MapIsOnOverworldMatrix cmp r0, #0 beq _02254B36 ldr r1, [r4, #0x1c] diff --git a/arm9/modules/51/asm/module_51.s b/arm9/modules/51/asm/module_51.s index 848caed1..60bdd016 100644 --- a/arm9/modules/51/asm/module_51.s +++ b/arm9/modules/51/asm/module_51.s @@ -49,19 +49,19 @@ _0225487A: bl MOD51_02254944 mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #1 add r1, r0, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 bl MOD51_0225571C ldr r0, [r4] @@ -409,7 +409,7 @@ MOD51_02254B54: ; 0x02254B54 bl FUN_02018744 mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r5, _02254C74 ; =0x0225578C add r3, sp, #0x48 ldmia r5!, {r0, r1} @@ -430,7 +430,7 @@ MOD51_02254B54: ; 0x02254B54 bl FUN_02018744 mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r5, _02254C78 ; =0x022557C4 add r3, sp, #0x2c ldmia r5!, {r0, r1} @@ -451,7 +451,7 @@ MOD51_02254B54: ; 0x02254B54 bl FUN_02018744 mov r0, #4 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r5, _02254C7C ; =0x02255754 add r3, sp, #0x10 ldmia r5!, {r0, r1} @@ -469,7 +469,7 @@ MOD51_02254B54: ; 0x02254B54 bl FUN_02016C18 mov r0, #8 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x60 mov r1, #0 str r0, [sp] diff --git a/arm9/modules/52/asm/module_52.s b/arm9/modules/52/asm/module_52.s deleted file mode 100644 index 22824930..00000000 --- a/arm9/modules/52/asm/module_52.s +++ /dev/null @@ -1,293 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .section .text - .balign 4, 0 - - thumb_func_start MOD52_021D74E0 -MOD52_021D74E0: ; 0x021D74E0 - push {r3, lr} - mov r2, #2 - mov r0, #3 - mov r1, #0x4d - lsl r2, r2, #0x10 - bl FUN_0201681C - bl InitializeMainRNG - mov r0, #1 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD52_021D74E0 - - thumb_func_start MOD52_021D74F8 -MOD52_021D74F8: ; 0x021D74F8 - push {r3, lr} - bl OverlayManager_GetField18 - ldr r1, [r0, #8] - mov r0, #0x4d - bl MOD52_021D769C - mov r0, #1 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD52_021D74F8 - - thumb_func_start MOD52_021D750C -MOD52_021D750C: ; 0x021D750C - push {r3, lr} - mov r0, #0x4d - bl FUN_020168D0 - mov r0, #0 - ldr r1, _021D7524 ; =UNK_020FD144 - mvn r0, r0 - bl RegisterMainOverlay - mov r0, #1 - pop {r3, pc} - nop -_021D7524: .word UNK_020FD144 - thumb_func_end MOD52_021D750C - - thumb_func_start MOD52_021D7528 -MOD52_021D7528: ; 0x021D7528 - push {r3, lr} - mov r2, #2 - mov r0, #3 - mov r1, #0x4d - lsl r2, r2, #0x10 - bl FUN_0201681C - bl InitializeMainRNG - mov r0, #1 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD52_021D7528 - - thumb_func_start MOD52_021D7540 -MOD52_021D7540: ; 0x021D7540 - push {r4, lr} - bl OverlayManager_GetField18 - ldr r4, [r0, #8] - mov r0, #0x4d - add r1, r4, #0 - mov r2, #1 - bl MOD52_021D7604 - add r0, r4, #0 - bl Sav2_PlayerData_GetIGTAddr - bl FUN_02015E3C - mov r0, #1 - pop {r4, pc} - thumb_func_end MOD52_021D7540 - - thumb_func_start MOD52_021D7560 -MOD52_021D7560: ; 0x021D7560 - push {r3, lr} - mov r0, #0x4d - bl FUN_020168D0 - mov r0, #0 - ldr r1, _021D7578 ; =UNK_020F2B7C - mvn r0, r0 - bl RegisterMainOverlay - mov r0, #1 - pop {r3, pc} - nop -_021D7578: .word UNK_020F2B7C - thumb_func_end MOD52_021D7560 - - thumb_func_start MOD52_021D757C -MOD52_021D757C: ; 0x021D757C - push {r3, lr} - mov r2, #2 - mov r0, #3 - mov r1, #0x4d - lsl r2, r2, #0x10 - bl FUN_0201681C - bl InitializeMainRNG - mov r0, #1 - pop {r3, pc} - .align 2, 0 - thumb_func_end MOD52_021D757C - - thumb_func_start MOD52_021D7594 -MOD52_021D7594: ; 0x021D7594 - push {r3, r4, r5, lr} - bl OverlayManager_GetField18 - ldr r4, [r0, #8] - add r0, r4, #0 - bl Sav2_SysInfo_get - add r5, r0, #0 - mov r0, #0x4d - add r1, r4, #0 - bl MOD52_021D7688 - add r0, r4, #0 - mov r1, #0 - bl Options_SetButtonModeOnMain - add r0, r5, #0 - bl Sav2_SysInfo_MacAddressIsMine - cmp r0, #0 - beq _021D75C8 - add r0, r5, #0 - bl Sav2_SysInfo_RTCOffsetIsMine - cmp r0, #0 - bne _021D75D8 -_021D75C8: - add r0, r4, #0 - bl Sav2_SysInfo_RTC_get - bl FUN_020238A4 - add r0, r5, #0 - bl Sav2_SysInfo_InitFromSystem -_021D75D8: - add r0, r4, #0 - bl Sav2_PlayerData_GetIGTAddr - bl FUN_02015E3C - mov r0, #1 - pop {r3, r4, r5, pc} - .align 2, 0 - thumb_func_end MOD52_021D7594 - - thumb_func_start MOD52_021D75E8 -MOD52_021D75E8: ; 0x021D75E8 - push {r3, lr} - mov r0, #0x4d - bl FUN_020168D0 - mov r0, #0 - ldr r1, _021D7600 ; =UNK_020F2B8C - mvn r0, r0 - bl RegisterMainOverlay - mov r0, #1 - pop {r3, pc} - nop -_021D7600: .word UNK_020F2B8C - thumb_func_end MOD52_021D75E8 - - thumb_func_start MOD52_021D7604 -MOD52_021D7604: ; 0x021D7604 - push {r3, r4, r5, r6, r7, lr} - add r5, r1, #0 - str r0, [sp] - add r0, r5, #0 - add r6, r2, #0 - bl Sav2_SysInfo_get - bl Sav2_SysInfo_InitFromSystem - add r0, r5, #0 - bl Sav2_SysInfo_RTC_get - bl Sav2_SysInfo_RTC_init - add r0, r5, #0 - bl FUN_0202881C - add r4, r0, #0 - bl MTRandom - add r2, r0, #0 - add r0, r4, #0 - mov r1, #1 - bl FUN_02028788 - add r0, r5, #0 - bl FUN_0206007C - add r0, r5, #0 - bl Sav2_PlayerData_GetProfileAddr - add r4, r0, #0 - bl MTRandom - add r7, r0, #0 - cmp r6, #0 - beq _021D7656 - add r0, r4, #0 - add r1, r7, #0 - bl PlayerProfile_SetTrainerID -_021D7656: - add r0, r4, #0 - bl PlayerProfile_GetTrainerGender - add r1, r0, #0 - add r0, r7, #0 - mov r2, #0 - bl FUN_02053678 - add r1, r0, #0 - lsl r1, r1, #0x18 - add r0, r4, #0 - lsr r1, r1, #0x18 - bl PlayerProfile_SetAvatar - add r0, r5, #0 - bl FUN_02024ECC - ldr r1, [sp] - ldr r2, _021D7684 ; =0x021D76F8 - mov r3, #0x76 - bl FUN_020250C4 - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_021D7684: .word MOD52_021D76F8 - thumb_func_end MOD52_021D7604 - - thumb_func_start MOD52_021D7688 -MOD52_021D7688: ; 0x021D7688 - push {r3, lr} - add r0, r1, #0 - bl FUN_020226FC - cmp r0, #0 - bne _021D769A - mov r0, #0 - bl OS_ResetSystem -_021D769A: - pop {r3, pc} - thumb_func_end MOD52_021D7688 - - thumb_func_start MOD52_021D769C -MOD52_021D769C: ; 0x021D769C - push {r4, lr} - add r4, r1, #0 - add r0, r4, #0 - bl Sav2_InitDynamicRegion - add r0, r4, #0 - bl FUN_020377E0 - add r0, r4, #0 - bl Sav2_PlayerData_GetProfileAddr - ldr r1, _021D76C4 ; =0x00000BB8 - bl PlayerProfile_SetMoney - add r0, r4, #0 - bl SavArray_Flags_get - bl FUN_0205ECD4 - pop {r4, pc} - .align 2, 0 -_021D76C4: .word 0x00000BB8 - thumb_func_end MOD52_021D769C - - .rodata - .global MOD52_021D76C8 -MOD52_021D76C8: ; 0x021D76C8 - .word MOD52_021D757C, MOD52_021D7594, MOD52_021D75E8, 0xFFFFFFFF - - .global MOD52_021D76D8 -MOD52_021D76D8: ; 0x021D76D8 - .word MOD52_021D7528, MOD52_021D7540, MOD52_021D7560, 0xFFFFFFFF - - .global MOD52_021D76E8 -MOD52_021D76E8: ; 0x021D76E8 - .word MOD52_021D74E0, MOD52_021D74F8, MOD52_021D750C, 0xFFFFFFFF - - .global MOD52_021D76F8 -MOD52_021D76F8: ; 0x021D76F8 - .byte 0x9B, 0x00, 0x01, 0x00, 0x95, 0x00, 0x01, 0x00, 0x96, 0x00, 0x01, 0x00, 0x97, 0x00, 0x01, 0x00 - .byte 0x9B, 0x00, 0x01, 0x00, 0x97, 0x00, 0x01, 0x00, 0xA4, 0x00, 0x02, 0x00, 0xA5, 0x00, 0x02, 0x00 - .byte 0x95, 0x00, 0x01, 0x00, 0x9B, 0x00, 0x02, 0x00, 0x9E, 0x00, 0x01, 0x00, 0xA7, 0x00, 0x02, 0x00 - .byte 0xA7, 0x00, 0x02, 0x00, 0xAA, 0x00, 0x01, 0x00, 0x95, 0x00, 0x01, 0x00, 0x97, 0x00, 0x01, 0x00 - .byte 0x9B, 0x00, 0x01, 0x00, 0x9B, 0x00, 0x01, 0x00, 0x98, 0x00, 0x01, 0x00, 0x98, 0x00, 0x01, 0x00 - .byte 0xA4, 0x00, 0x01, 0x00, 0xA4, 0x00, 0x01, 0x00, 0x95, 0x00, 0x01, 0x00, 0x9B, 0x00, 0x01, 0x00 - .byte 0x9B, 0x00, 0x01, 0x00, 0xA5, 0x00, 0x01, 0x00, 0xA6, 0x00, 0x02, 0x00, 0xA4, 0x00, 0x02, 0x00 - .byte 0xA5, 0x00, 0x02, 0x00, 0xA8, 0x00, 0x02, 0x00, 0x9A, 0x00, 0x01, 0x00, 0x96, 0x00, 0x01, 0x00 - .byte 0xA4, 0x00, 0x01, 0x00, 0xA4, 0x00, 0x01, 0x00, 0x9C, 0x00, 0x01, 0x00, 0xA6, 0x00, 0x01, 0x00 - .byte 0xA6, 0x00, 0x01, 0x00, 0x9F, 0x00, 0x01, 0x00, 0x99, 0x00, 0x01, 0x00, 0x99, 0x00, 0x01, 0x00 - .byte 0xA4, 0x00, 0x01, 0x00, 0xA8, 0x00, 0x01, 0x00, 0x9E, 0x00, 0x01, 0x00, 0x96, 0x00, 0x01, 0x00 - .byte 0xA0, 0x00, 0x01, 0x00, 0xA2, 0x00, 0x01, 0x00, 0x97, 0x00, 0x01, 0x00, 0x99, 0x00, 0x01, 0x00 - .byte 0xA3, 0x00, 0x01, 0x00, 0xAD, 0x00, 0x01, 0x00, 0x9E, 0x00, 0x01, 0x00, 0x99, 0x00, 0x01, 0x00 - .byte 0xAE, 0x00, 0x01, 0x00, 0x9D, 0x00, 0x01, 0x00, 0x97, 0x00, 0x01, 0x00, 0xA8, 0x00, 0x01, 0x00 - .byte 0xA8, 0x00, 0x01, 0x00, 0xA8, 0x00, 0x01, 0x00, 0x9C, 0x00, 0x01, 0x00, 0x9C, 0x00, 0x01, 0x00 - .byte 0xA6, 0x00, 0x01, 0x00, 0xA6, 0x00, 0x01, 0x00, 0xA2, 0x00, 0x01, 0x00, 0xA3, 0x00, 0x01, 0x00 - .byte 0x98, 0x00, 0x01, 0x00, 0x98, 0x00, 0x01, 0x00, 0x95, 0x00, 0x01, 0x00, 0x9E, 0x00, 0x01, 0x00 - .byte 0x96, 0x00, 0x01, 0x00, 0xA9, 0x00, 0x01, 0x00, 0x97, 0x00, 0x02, 0x00, 0xA5, 0x00, 0x02, 0x00 - .byte 0xA0, 0x00, 0x01, 0x00, 0xA1, 0x00, 0x01, 0x00, 0x98, 0x00, 0x01, 0x00, 0x9C, 0x00, 0x01, 0x00 - .byte 0x9F, 0x00, 0x01, 0x00, 0xA8, 0x00, 0x02, 0x00, 0x9A, 0x00, 0x01, 0x00, 0x97, 0x00, 0x01, 0x00 - .byte 0xA1, 0x00, 0x01, 0x00, 0xAC, 0x00, 0x01, 0x00, 0xA0, 0x00, 0x02, 0x00, 0xA1, 0x00, 0x02, 0x00 - .byte 0xA2, 0x00, 0x02, 0x00, 0xAB, 0x00, 0x01, 0x00, 0x9E, 0x00, 0x02, 0x00, 0xA5, 0x00, 0x03, 0x00 - .byte 0xA6, 0x00, 0x03, 0x00, 0xA7, 0x00, 0x03, 0x00, 0xA9, 0x00, 0x01, 0x00, 0xA9, 0x00, 0x01, 0x00 - .byte 0xAC, 0x00, 0x02, 0x00, 0xAC, 0x00, 0x02, 0x00, 0xAA, 0x00, 0x01, 0x00, 0xAA, 0x00, 0x01, 0x00 - .byte 0xAE, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x01, 0x00, 0xAB, 0x00, 0x01, 0x00, 0xAB, 0x00, 0x01, 0x00 - .byte 0xA9, 0x00, 0x01, 0x00, 0xA9, 0x00, 0x01, 0x00, 0xAC, 0x00, 0x01, 0x00, 0xAC, 0x00, 0x01, 0x00 - .byte 0xAE, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x01, 0x00, 0xAD, 0x00, 0x01, 0x00, 0xAD, 0x00, 0x01, 0x00 - .byte 0xAB, 0x00, 0x01, 0x00, 0xAB, 0x00, 0x01, 0x00, 0x9D, 0x00, 0x01, 0x00, 0x9A, 0x00, 0x01, 0x00 - .byte 0xAB, 0x00, 0x02, 0x00, 0xAD, 0x00, 0x02, 0x00, 0xAA, 0x00, 0x02, 0x00, 0xAA, 0x00, 0x02, 0x00 - .byte 0xAD, 0x00, 0x01, 0x00, 0xAD, 0x00, 0x01, 0x00 - - .data - .bss diff --git a/arm9/modules/52/include/module_52.h b/arm9/modules/52/include/module_52.h new file mode 100644 index 00000000..4c47a82d --- /dev/null +++ b/arm9/modules/52/include/module_52.h @@ -0,0 +1,42 @@ +#ifndef POKEDIAMOND_MODULE_52_H +#define POKEDIAMOND_MODULE_52_H + +#include "global.h" +#include "event_data.h" +#include "main.h" +#include "math_util.h" +#include "options.h" +#include "overlay_manager.h" +#include "player_data.h" +#include "sav_system_info.h" +#include "save_block_2.h" +#include "unk_02024E64.h" +#include "unk_020286F8.h" + +const u8 MOD52_021D76F8[]; + +THUMB_FUNC int MOD52_021D74E0(); +THUMB_FUNC int MOD52_021D74F8(struct UnkStruct_02006234 *param0); +THUMB_FUNC int MOD52_021D750C(); + +THUMB_FUNC int MOD52_021D7528(); +THUMB_FUNC int MOD52_021D7540(struct UnkStruct_02006234 *param0); +THUMB_FUNC int MOD52_021D7560(); + +THUMB_FUNC int MOD52_021D757C(); +THUMB_FUNC int MOD52_021D7594(struct UnkStruct_02006234 *param0); +THUMB_FUNC int MOD52_021D75E8(); + +THUMB_FUNC void MOD52_021D7604(u32 heap_id, struct SaveBlock2 *sav2, BOOL set_trainerid); +THUMB_FUNC void MOD52_021D7688(u32 param0, struct SaveBlock2 *sav2); +THUMB_FUNC void MOD52_021D769C(u32 param0, struct SaveBlock2 *sav2); + +struct MOD52_Struct +{ + int (*func1)(void); + int (*func2)(struct UnkStruct_02006234 *param0); + int (*func3)(void); + u32 terminator; +}; + +#endif // POKEDIAMOND_MODULE_52_H
\ No newline at end of file diff --git a/arm9/modules/52/src/module_52.c b/arm9/modules/52/src/module_52.c new file mode 100644 index 00000000..1f74c77f --- /dev/null +++ b/arm9/modules/52/src/module_52.c @@ -0,0 +1,647 @@ +#include "module_52.h" +#include "heap.h" +#include "unk_0205FA2C.h" + + +extern struct Unk21DBE18 UNK_020FD144; +extern struct Unk21DBE18 UNK_020F2B7C; +extern struct Unk21DBE18 UNK_020F2B8C; + +extern void FUN_02015E3C(struct IGT *igt); +extern int FUN_02053678(u32 random, u32 gender, u32 param2); +extern void FUN_020250C4(void *sav_ptr, u32 heap_id, const u8 param2[], u32 param3); +extern void FUN_020377E0(struct SaveBlock2 *sav2); +extern void FUN_0205ECD4(struct ScriptState *script_state); + +THUMB_FUNC int MOD52_021D74E0() +{ + FUN_0201681C(3, 0x4d, 2 << 16); + InitializeMainRNG(); + + return 1; +} + +THUMB_FUNC int MOD52_021D74F8(struct UnkStruct_02006234 *param0) +{ + struct SaveBlock2 *sav2 = (struct SaveBlock2 *)OverlayManager_GetField18(param0)[2]; // weird + + MOD52_021D769C(0x4d, sav2); + + return 1; +} + +THUMB_FUNC int MOD52_021D750C() +{ + FUN_020168D0(0x4d); + RegisterMainOverlay(0XFFFFFFFF, &UNK_020FD144); + + return 1; +} + +THUMB_FUNC int MOD52_021D7528() +{ + FUN_0201681C(3, 0x4d, 2 << 16); + InitializeMainRNG(); + + return 1; +} + +THUMB_FUNC int MOD52_021D7540(struct UnkStruct_02006234 *param0) +{ + struct SaveBlock2 *sav2 = (struct SaveBlock2 *)OverlayManager_GetField18(param0)[2]; // weird + + MOD52_021D7604(0x4d, sav2, 1); + struct IGT *igt = Sav2_PlayerData_GetIGTAddr(sav2); + FUN_02015E3C(igt); + + return 1; +} + +THUMB_FUNC int MOD52_021D7560() +{ + FUN_020168D0(0x4d); + RegisterMainOverlay(0xFFFFFFFF, &UNK_020F2B7C); + + return 1; +} + +THUMB_FUNC int MOD52_021D757C() +{ + FUN_0201681C(3, 0x4d, 2 << 16); + InitializeMainRNG(); + + return 1; +} + +THUMB_FUNC int MOD52_021D7594(struct UnkStruct_02006234 *param0) +{ + struct SaveBlock2 *sav2 = (struct SaveBlock2 *)OverlayManager_GetField18(param0)[2]; // weird + + struct SavSysInfo *sav2_info = Sav2_SysInfo_get(sav2); + + MOD52_021D7688(0x4d, sav2); + Options_SetButtonModeOnMain(sav2, 0); + + if (!Sav2_SysInfo_MacAddressIsMine(sav2_info) || !Sav2_SysInfo_RTCOffsetIsMine(sav2_info)) + { + FUN_020238A4(Sav2_SysInfo_RTC_get(sav2)); + Sav2_SysInfo_InitFromSystem(sav2_info); + } + + FUN_02015E3C(Sav2_PlayerData_GetIGTAddr(sav2)); + + return 1; +} + +THUMB_FUNC int MOD52_021D75E8() +{ + FUN_020168D0(0x4d); + RegisterMainOverlay(0XFFFFFFFF, &UNK_020F2B8C); + + return 1; +} + +THUMB_FUNC void MOD52_021D7604(u32 heap_id, struct SaveBlock2 *sav2, BOOL set_trainerid) +{ + Sav2_SysInfo_InitFromSystem(Sav2_SysInfo_get(sav2)); + Sav2_SysInfo_RTC_init(Sav2_SysInfo_RTC_get(sav2)); + + struct UnkSaveStruct_020286F8 *unk_sav2 = FUN_0202881C(sav2); + + FUN_02028788(unk_sav2, 1, MTRandom()); + FUN_0206007C(sav2); + + struct PlayerData *player_data = Sav2_PlayerData_GetProfileAddr(sav2); + u32 trainerid = MTRandom(); + + if (set_trainerid) + { + PlayerProfile_SetTrainerID(player_data, trainerid); + } + + u32 gender = PlayerProfile_GetTrainerGender(player_data); + int avatar = FUN_02053678(trainerid, gender, 0); + + PlayerProfile_SetAvatar(player_data, (u8)avatar); + + FUN_020250C4(FUN_02024ECC(sav2), heap_id, MOD52_021D76F8, 0x76); +} + +THUMB_FUNC void MOD52_021D7688(u32 unused, struct SaveBlock2 *sav2) +{ +#pragma unused(unused) + + if (FUN_020226FC(sav2)) + { + return; + } + + OS_ResetSystem(0); +} + +THUMB_FUNC void MOD52_021D769C(u32 unused, struct SaveBlock2 *sav2) +{ +#pragma unused(unused) + + Sav2_InitDynamicRegion(sav2); + FUN_020377E0(sav2); + struct PlayerData *player_data = Sav2_PlayerData_GetProfileAddr(sav2); + PlayerProfile_SetMoney(player_data, 3000); + FUN_0205ECD4(SavArray_Flags_get(sav2)); +} + +const struct MOD52_Struct MOD52_021D76C8 = { + MOD52_021D757C, + MOD52_021D7594, + MOD52_021D75E8, + 0xFFFFFFFF, +}; + +const struct MOD52_Struct MOD52_021D76D8 = { + MOD52_021D7528, + MOD52_021D7540, + MOD52_021D7560, + 0xFFFFFFFF, +}; + +const struct MOD52_Struct MOD52_021D76E8 = { + MOD52_021D74E0, + MOD52_021D74F8, + MOD52_021D750C, + 0xFFFFFFFF, +}; + +const u8 MOD52_021D76F8[] = { + 0x9B, + 0x00, + 0x01, + 0x00, + 0x95, + 0x00, + 0x01, + 0x00, + 0x96, + 0x00, + 0x01, + 0x00, + 0x97, + 0x00, + 0x01, + 0x00, + 0x9B, + 0x00, + 0x01, + 0x00, + 0x97, + 0x00, + 0x01, + 0x00, + 0xA4, + 0x00, + 0x02, + 0x00, + 0xA5, + 0x00, + 0x02, + 0x00, + 0x95, + 0x00, + 0x01, + 0x00, + 0x9B, + 0x00, + 0x02, + 0x00, + 0x9E, + 0x00, + 0x01, + 0x00, + 0xA7, + 0x00, + 0x02, + 0x00, + 0xA7, + 0x00, + 0x02, + 0x00, + 0xAA, + 0x00, + 0x01, + 0x00, + 0x95, + 0x00, + 0x01, + 0x00, + 0x97, + 0x00, + 0x01, + 0x00, + 0x9B, + 0x00, + 0x01, + 0x00, + 0x9B, + 0x00, + 0x01, + 0x00, + 0x98, + 0x00, + 0x01, + 0x00, + 0x98, + 0x00, + 0x01, + 0x00, + 0xA4, + 0x00, + 0x01, + 0x00, + 0xA4, + 0x00, + 0x01, + 0x00, + 0x95, + 0x00, + 0x01, + 0x00, + 0x9B, + 0x00, + 0x01, + 0x00, + 0x9B, + 0x00, + 0x01, + 0x00, + 0xA5, + 0x00, + 0x01, + 0x00, + 0xA6, + 0x00, + 0x02, + 0x00, + 0xA4, + 0x00, + 0x02, + 0x00, + 0xA5, + 0x00, + 0x02, + 0x00, + 0xA8, + 0x00, + 0x02, + 0x00, + 0x9A, + 0x00, + 0x01, + 0x00, + 0x96, + 0x00, + 0x01, + 0x00, + 0xA4, + 0x00, + 0x01, + 0x00, + 0xA4, + 0x00, + 0x01, + 0x00, + 0x9C, + 0x00, + 0x01, + 0x00, + 0xA6, + 0x00, + 0x01, + 0x00, + 0xA6, + 0x00, + 0x01, + 0x00, + 0x9F, + 0x00, + 0x01, + 0x00, + 0x99, + 0x00, + 0x01, + 0x00, + 0x99, + 0x00, + 0x01, + 0x00, + 0xA4, + 0x00, + 0x01, + 0x00, + 0xA8, + 0x00, + 0x01, + 0x00, + 0x9E, + 0x00, + 0x01, + 0x00, + 0x96, + 0x00, + 0x01, + 0x00, + 0xA0, + 0x00, + 0x01, + 0x00, + 0xA2, + 0x00, + 0x01, + 0x00, + 0x97, + 0x00, + 0x01, + 0x00, + 0x99, + 0x00, + 0x01, + 0x00, + 0xA3, + 0x00, + 0x01, + 0x00, + 0xAD, + 0x00, + 0x01, + 0x00, + 0x9E, + 0x00, + 0x01, + 0x00, + 0x99, + 0x00, + 0x01, + 0x00, + 0xAE, + 0x00, + 0x01, + 0x00, + 0x9D, + 0x00, + 0x01, + 0x00, + 0x97, + 0x00, + 0x01, + 0x00, + 0xA8, + 0x00, + 0x01, + 0x00, + 0xA8, + 0x00, + 0x01, + 0x00, + 0xA8, + 0x00, + 0x01, + 0x00, + 0x9C, + 0x00, + 0x01, + 0x00, + 0x9C, + 0x00, + 0x01, + 0x00, + 0xA6, + 0x00, + 0x01, + 0x00, + 0xA6, + 0x00, + 0x01, + 0x00, + 0xA2, + 0x00, + 0x01, + 0x00, + 0xA3, + 0x00, + 0x01, + 0x00, + 0x98, + 0x00, + 0x01, + 0x00, + 0x98, + 0x00, + 0x01, + 0x00, + 0x95, + 0x00, + 0x01, + 0x00, + 0x9E, + 0x00, + 0x01, + 0x00, + 0x96, + 0x00, + 0x01, + 0x00, + 0xA9, + 0x00, + 0x01, + 0x00, + 0x97, + 0x00, + 0x02, + 0x00, + 0xA5, + 0x00, + 0x02, + 0x00, + 0xA0, + 0x00, + 0x01, + 0x00, + 0xA1, + 0x00, + 0x01, + 0x00, + 0x98, + 0x00, + 0x01, + 0x00, + 0x9C, + 0x00, + 0x01, + 0x00, + 0x9F, + 0x00, + 0x01, + 0x00, + 0xA8, + 0x00, + 0x02, + 0x00, + 0x9A, + 0x00, + 0x01, + 0x00, + 0x97, + 0x00, + 0x01, + 0x00, + 0xA1, + 0x00, + 0x01, + 0x00, + 0xAC, + 0x00, + 0x01, + 0x00, + 0xA0, + 0x00, + 0x02, + 0x00, + 0xA1, + 0x00, + 0x02, + 0x00, + 0xA2, + 0x00, + 0x02, + 0x00, + 0xAB, + 0x00, + 0x01, + 0x00, + 0x9E, + 0x00, + 0x02, + 0x00, + 0xA5, + 0x00, + 0x03, + 0x00, + 0xA6, + 0x00, + 0x03, + 0x00, + 0xA7, + 0x00, + 0x03, + 0x00, + 0xA9, + 0x00, + 0x01, + 0x00, + 0xA9, + 0x00, + 0x01, + 0x00, + 0xAC, + 0x00, + 0x02, + 0x00, + 0xAC, + 0x00, + 0x02, + 0x00, + 0xAA, + 0x00, + 0x01, + 0x00, + 0xAA, + 0x00, + 0x01, + 0x00, + 0xAE, + 0x00, + 0x01, + 0x00, + 0xAE, + 0x00, + 0x01, + 0x00, + 0xAB, + 0x00, + 0x01, + 0x00, + 0xAB, + 0x00, + 0x01, + 0x00, + 0xA9, + 0x00, + 0x01, + 0x00, + 0xA9, + 0x00, + 0x01, + 0x00, + 0xAC, + 0x00, + 0x01, + 0x00, + 0xAC, + 0x00, + 0x01, + 0x00, + 0xAE, + 0x00, + 0x01, + 0x00, + 0xAE, + 0x00, + 0x01, + 0x00, + 0xAD, + 0x00, + 0x01, + 0x00, + 0xAD, + 0x00, + 0x01, + 0x00, + 0xAB, + 0x00, + 0x01, + 0x00, + 0xAB, + 0x00, + 0x01, + 0x00, + 0x9D, + 0x00, + 0x01, + 0x00, + 0x9A, + 0x00, + 0x01, + 0x00, + 0xAB, + 0x00, + 0x02, + 0x00, + 0xAD, + 0x00, + 0x02, + 0x00, + 0xAA, + 0x00, + 0x02, + 0x00, + 0xAA, + 0x00, + 0x02, + 0x00, + 0xAD, + 0x00, + 0x01, + 0x00, + 0xAD, + 0x00, + 0x01, + 0x00, +};
\ No newline at end of file diff --git a/arm9/modules/53/asm/module_53.s b/arm9/modules/53/asm/module_53.s index f55e7c99..b4fd4d80 100644 --- a/arm9/modules/53/asm/module_53.s +++ b/arm9/modules/53/asm/module_53.s @@ -22,8 +22,8 @@ _021D74F6: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -462,7 +462,7 @@ _021D78DA: sub r2, r2, #1 bne _021D78DA add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -1289,10 +1289,10 @@ _021D7F74: blt _021D7F74 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x64 pop {r4, r5, r6, r7, pc} .align 2, 0 diff --git a/arm9/modules/54/asm/module_54.s b/arm9/modules/54/asm/module_54.s index 2091a0c6..904d1c7f 100644 --- a/arm9/modules/54/asm/module_54.s +++ b/arm9/modules/54/asm/module_54.s @@ -22,8 +22,8 @@ _021D74F6: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -428,7 +428,7 @@ _021D787E: sub r2, r2, #1 bne _021D787E add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -1045,10 +1045,10 @@ _021D7D4C: str r0, [sp, #0x38] mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x5c pop {r4, r5, r6, r7, pc} .align 2, 0 diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s index b6f57d67..0d96ce13 100644 --- a/arm9/modules/55/asm/module_55.s +++ b/arm9/modules/55/asm/module_55.s @@ -29,8 +29,8 @@ MOD55_021D7504: ; 0x021D7504 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -385,11 +385,11 @@ _021D7808: .word 0x00003FF8 thumb_func_start MOD55_021D780C MOD55_021D780C: ; 0x021D780C - ldr r3, _021D7814 ; =FUN_0201E66C + ldr r3, _021D7814 ; =GX_SetBanks ldr r0, _021D7818 ; =0x021DA458 bx r3 nop -_021D7814: .word FUN_0201E66C +_021D7814: .word GX_SetBanks _021D7818: .word MOD55_021DA458 thumb_func_end MOD55_021D780C @@ -1198,7 +1198,7 @@ _021D7EB8: blt _021D7E56 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x5c pop {r4, r5, r6, r7, pc} thumb_func_end MOD55_021D7DA0 @@ -4017,7 +4017,7 @@ MOD55_021D9574: ; 0x021D9574 bl G3X_InitMtxStack mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021D95D8 ; =0x04000008 mov r1, #3 ldrh r2, [r0] @@ -5576,11 +5576,11 @@ MOD55_021DA27C: ; 0x021DA27C lsl r1, r4, #0x18 mov r0, #0xf lsr r1, r1, #0x18 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers lsl r1, r4, #0x18 mov r0, #1 lsr r1, r1, #0x18 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r4, pc} .align 2, 0 thumb_func_end MOD55_021DA27C diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s index 97d746da..d1046c7b 100644 --- a/arm9/modules/56/asm/module_56.s +++ b/arm9/modules/56/asm/module_56.s @@ -253,8 +253,8 @@ MOD56_02211FD4: ; 0x02211FD4 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -385,10 +385,10 @@ _022120BE: str r2, [r4, r1] mov r0, #0xf mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0xf mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 bl MOD56_0221244C add r0, r4, #0 @@ -603,7 +603,7 @@ _022122BE: sub r2, r2, #1 bne _022122BE add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -930,19 +930,19 @@ MOD56_0221257C: ; 0x0221257C ldr r4, [r0] mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 add r1, r0, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r2, #0 str r2, [sp] mov r0, #0x36 @@ -1293,7 +1293,7 @@ _02212848: blt _02212848 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x5c pop {r4, r5, r6, r7, pc} thumb_func_end MOD56_022127D4 diff --git a/arm9/modules/57/asm/module_57.s b/arm9/modules/57/asm/module_57.s index 2e0c7acd..39e977cc 100644 --- a/arm9/modules/57/asm/module_57.s +++ b/arm9/modules/57/asm/module_57.s @@ -14,8 +14,8 @@ MOD57_021D74E0: ; 0x021D74E0 mov r0, #0 add r1, r0, #0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -635,7 +635,7 @@ _021D7A1E: sub r2, r2, #1 bne _021D7A1E add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -1208,10 +1208,10 @@ MOD57_021D7EDC: ; 0x021D7EDC add r4, r0, #0 mov r0, #0x1f mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x13 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 mov r1, #7 bl FUN_020178A0 @@ -3730,7 +3730,7 @@ _021D92CE: bl NARC_dtor mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x3c pop {r4, r5, r6, r7, pc} nop diff --git a/arm9/modules/58/asm/module_58.s b/arm9/modules/58/asm/module_58.s index 3e04165c..93c1c39d 100644 --- a/arm9/modules/58/asm/module_58.s +++ b/arm9/modules/58/asm/module_58.s @@ -28,8 +28,8 @@ _021D9A36: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -315,7 +315,7 @@ _021D9CE6: sub r2, r2, #1 bne _021D9CE6 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -1008,10 +1008,10 @@ MOD58_021DA1C4: ; 0x021DA1C4 bl FUN_02020238 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x5c pop {r3, r4, pc} .align 2, 0 diff --git a/arm9/modules/59/asm/mod59_021D74E0_asm.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s index cd947e57..c86d2c94 100644 --- a/arm9/modules/59/asm/mod59_021D74E0_asm.s +++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s @@ -42,8 +42,8 @@ _021D7592: add r0, r6, #0 add r1, r0, #0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -66,7 +66,7 @@ _021D7592: ldr r0, _021D76BC ; =MOD59_021D7724 add r1, r4, #0 bl Main_SetVBlankIntrCB - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #1 str r0, [r5] b _021D76AC @@ -181,7 +181,7 @@ MOD59_021D76C0: ; 0x021D76C0 bl FUN_02024EB4 ldr r1, [r4, #0x74] ldr r1, [r1, #0x18] - bl FUN_02024EF4 + bl RivalsNameToU16Array ldr r0, [r4, #0x70] bl FUN_02077AC4 ldr r0, [r4, #0x74] @@ -278,7 +278,7 @@ _021D7798: sub r2, r2, #1 bne _021D7798 add r0, sp, #0x50 - bl FUN_0201E66C + bl GX_SetBanks ldr r0, [r4] bl FUN_02016B94 add r3, sp, #0x40 diff --git a/arm9/modules/59/asm/mod59_021D9868.s b/arm9/modules/59/asm/mod59_021D9868.s index 3a2ba4ad..6d2d6e6b 100644 --- a/arm9/modules/59/asm/mod59_021D9868.s +++ b/arm9/modules/59/asm/mod59_021D9868.s @@ -67,8 +67,8 @@ _021D98C6: add r0, r6, #0 add r1, r0, #0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -89,7 +89,7 @@ _021D98C6: ldr r0, _021D99F0 ; =MOD59_021D9A14 add r1, r4, #0 bl Main_SetVBlankIntrCB - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x3c str r0, [r4, #0x24] mov r0, #1 @@ -229,7 +229,7 @@ _021D9A2C: sub r2, r2, #1 bne _021D9A2C add r0, sp, #0x90 - bl FUN_0201E66C + bl GX_SetBanks ldr r0, [r4] bl FUN_02016B94 add r3, sp, #0x80 diff --git a/arm9/modules/59/src/mod59_021D74E0_src.c b/arm9/modules/59/src/mod59_021D74E0_src.c index 9fccfd95..4d7a4a98 100644 --- a/arm9/modules/59/src/mod59_021D74E0_src.c +++ b/arm9/modules/59/src/mod59_021D74E0_src.c @@ -2,8 +2,9 @@ #include "player_data.h" #include "overlay_manager.h" #include "mod59_021D74E0.h" +#include "heap.h" + -extern void FUN_0201681C(u32 param0, u32 heap_id, u32 param2); extern u32 FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struct Options *options); THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0) diff --git a/arm9/modules/60/asm/module_60.s b/arm9/modules/60/asm/module_60.s index d55b37fc..418fa446 100644 --- a/arm9/modules/60/asm/module_60.s +++ b/arm9/modules/60/asm/module_60.s @@ -369,7 +369,7 @@ _021D77BE: sub r2, r2, #1 bne _021D77BE add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -438,8 +438,8 @@ _021D7848: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -478,7 +478,7 @@ _021D78A2: bl FUN_0201C24C mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers bl FUN_02033F20 ldr r0, _021D78E4 ; =MOD60_021D77D4 add r1, r4, #0 @@ -551,8 +551,8 @@ _021D7946: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] diff --git a/arm9/modules/61/asm/module_61.s b/arm9/modules/61/asm/module_61.s index bcb6e9b6..3afc1e03 100644 --- a/arm9/modules/61/asm/module_61.s +++ b/arm9/modules/61/asm/module_61.s @@ -557,8 +557,8 @@ _021D78FA: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -593,7 +593,7 @@ _021D794E: bl Main_SetVBlankIntrCB mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0 bl FUN_0200E394 mov r1, #4 @@ -681,8 +681,8 @@ _021D79FC: mov r0, #0 add r1, r0, #0 bl Main_SetVBlankIntrCB - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -907,7 +907,7 @@ _021D7BBA: sub r2, r2, #1 bne _021D7BBA add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 diff --git a/arm9/modules/62/asm/module_62.s b/arm9/modules/62/asm/module_62.s index 86eebba7..d65fb117 100644 --- a/arm9/modules/62/asm/module_62.s +++ b/arm9/modules/62/asm/module_62.s @@ -1755,7 +1755,7 @@ MOD62_0222E2DC: ; 0x0222E2DC push {r3, lr} mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _0222E348 ; =0x04000008 mov r1, #3 ldrh r2, [r0] @@ -3734,13 +3734,13 @@ _0222F26C: .word 0x0000FFFF thumb_func_start MOD62_0222F270 MOD62_0222F270: ; 0x0222F270 push {r3, lr} - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r3, pc} thumb_func_end MOD62_0222F270 @@ -6022,10 +6022,10 @@ _0223042E: bl FUN_02003210 mov r0, #0x10 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #7 mov r1, #1 bl FUN_020178BC @@ -6111,7 +6111,7 @@ _0223050A: ; jump table _0223051A: mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r3, #0 str r3, [sp] mov r0, #0xa @@ -6296,7 +6296,7 @@ _02230692: bl MOD08_02229A2C mov r0, #0x10 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 bl MOD62_0223021C mov r0, #0x3e @@ -6395,7 +6395,7 @@ _0223072C: bl MOD62_0222F7E0 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0xf7 lsl r0, r0, #2 ldr r1, [r4, r0] @@ -6462,7 +6462,7 @@ _0223081A: _0223081C: mov r0, #0x10 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 mov r1, #1 bl MOD62_022300DC @@ -6582,7 +6582,7 @@ _022308E4: bl MOD62_022300DC mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0xf7 lsl r0, r0, #2 ldr r1, [r4, r0] @@ -6655,7 +6655,7 @@ _0223093E: _022309B4: mov r0, #1 add r1, r0, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0xf7 lsl r0, r0, #2 ldr r1, [r4, r0] @@ -6791,7 +6791,7 @@ _02230AC2: _02230AD4: mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r3, #0 str r3, [sp] mov r0, #0x10 @@ -6850,7 +6850,7 @@ _02230B40: bl FUN_020178BC mov r0, #4 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 mov r1, #0 bl MOD62_0222F738 @@ -7322,8 +7322,8 @@ MOD62_02230F3C: ; 0x02230F3C add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -7355,7 +7355,7 @@ MOD62_02230F80: ; 0x02230F80 push {r4, r5, lr} sub sp, #0xfc add r4, r0, #0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers ldr r5, _022310B8 ; =MOD62_02231238 add r3, sp, #0x10 mov r2, #5 @@ -7365,7 +7365,7 @@ _02230F90: sub r2, r2, #1 bne _02230F90 add r0, sp, #0x10 - bl FUN_0201E66C + bl GX_SetBanks mov r1, #6 mov r2, #2 mov r0, #0 @@ -7441,7 +7441,7 @@ _02230FF0: orr r2, r0 strh r2, [r1] add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r5, _022310C8 ; =MOD62_022312E8 add r3, sp, #0x38 mov r2, #0xe @@ -7484,7 +7484,7 @@ _02231052: bl FUN_02018744 mov r0, #4 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0xfc pop {r4, r5, pc} nop diff --git a/arm9/modules/63/asm/mod63_021D74E0.s b/arm9/modules/63/asm/mod63_021D74E0.s index df0624f9..a323b642 100644 --- a/arm9/modules/63/asm/mod63_021D74E0.s +++ b/arm9/modules/63/asm/mod63_021D74E0.s @@ -23,8 +23,8 @@ MOD63_021D74E0: ; 0x021D74E0 mov r0, #0 add r1, r0, #0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -69,7 +69,7 @@ MOD63_021D74E0: ; 0x021D74E0 ldr r0, _021D7598 ; =MOD63_021D782C add r1, r4, #0 bl Main_SetVBlankIntrCB - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #1 pop {r4, pc} .align 2, 0 @@ -251,7 +251,7 @@ _021D76D4: strh r3, [r4, r1] mov r1, #0 str r0, [r2, #0x6c] - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0 mov r1, #0x3c bl FUN_020053CC @@ -420,7 +420,7 @@ _021D7842: sub r2, r2, #1 bne _021D7842 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -795,28 +795,28 @@ MOD63_021D7A48: ; 0x021D7A48 bl FUN_02016C18 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0 add r1, r0, #0 bl FUN_02017FE4 @@ -841,28 +841,28 @@ MOD63_021D7B9C: ; 0x021D7B9C add r4, r0, #0 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [r4, #4] mov r1, #4 bl FUN_020178A0 @@ -1031,7 +1031,7 @@ _021D7C52: ldr r0, _021D7D70 ; =gMain + 0x60 mov r1, #1 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay mov r0, #2 str r0, [r5, #4] mov r0, #1 @@ -1085,13 +1085,13 @@ _021D7DA4: ; jump table _021D7DB8: mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r1, _021D80F0 ; =0x00000116 add r0, r6, #0 strh r0, [r4, r1] @@ -1663,16 +1663,16 @@ _021D81DC: bne _021D824E mov r0, #4 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 mov r1, #0x5a add r0, #0xa8 @@ -1736,22 +1736,22 @@ _021D8272: bl FUN_0201F05C mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 add r1, r4, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 bl FUN_0200E394 mov r0, #1 @@ -1791,19 +1791,19 @@ _021D82FC: bne _021D831A mov r0, #1 add r1, r0, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers b _021D8330 _021D831A: cmp r0, #0x10 bne _021D8330 mov r0, #1 add r1, r4, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers b _021D8330 _021D8328: mov r0, #1 add r1, r4, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers _021D8330: add r0, r5, #0 add r0, #0xa8 @@ -1855,7 +1855,7 @@ MOD63_021D8360: ; 0x021D8360 strh r0, [r2] ldr r0, _021D83A4 ; =gMain + 0x60 strb r3, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay mov r0, #1 pop {r4, r5, r6, pc} .align 2, 0 diff --git a/arm9/modules/63/asm/mod63_021D8890.s b/arm9/modules/63/asm/mod63_021D8890.s index 9c8b1d22..e501157b 100644 --- a/arm9/modules/63/asm/mod63_021D8890.s +++ b/arm9/modules/63/asm/mod63_021D8890.s @@ -16,7 +16,7 @@ _021D889A: sub r2, r2, #1 bne _021D889A add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -36,7 +36,7 @@ _021D88BA: sub r2, r2, #1 bne _021D88BA add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -56,7 +56,7 @@ _021D88DA: sub r2, r2, #1 bne _021D88DA add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -578,8 +578,8 @@ MOD63_021D8D10: ; 0x021D8D10 mov r0, #0 add r1, r0, #0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r0, #4 mov r1, #8 bl FUN_0201669C @@ -606,7 +606,7 @@ MOD63_021D8D10: ; 0x021D8D10 strb r1, [r4, r0] ldr r0, _021D8D94 ; =gMain + 0x60 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay bl GetLCRNGSeed str r0, [r4, #0x14] mov r0, #0 @@ -985,10 +985,10 @@ MOD63_021D8F38: ; 0x021D8F38 bl FUN_02006930 mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x10 str r0, [sp] ldr r0, _021D90C8 ; =0x04000050 @@ -1010,7 +1010,7 @@ MOD63_021D8F38: ; 0x021D8F38 bl FUN_0200E394 mov r0, #1 bl FUN_0200E394 - bl FUN_0201E788 + bl GX_BothDispOn add sp, #0x10 pop {r4, pc} nop @@ -1089,10 +1089,10 @@ _021D9148: blt _021D9208 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x10 str r0, [sp] ldr r0, _021D9220 ; =0x04000050 @@ -1109,10 +1109,10 @@ _021D9148: bl G2x_SetBlendAlpha_ mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r2, #0 strb r2, [r4, #7] strb r2, [r4, #6] @@ -1546,7 +1546,7 @@ MOD63_021D9498: ; 0x021D9498 str r0, [r5, #0x40] ldr r0, _021D9588 ; =gMain + 0x60 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay ldr r6, _021D958C ; =MOD63_021DBDE8 ldr r7, _021D9590 ; =MOD63_021DBAD0 mov r4, #0 @@ -1886,10 +1886,10 @@ _021D96F8: bl MOD63_021DABCC mov r0, #0xe mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0 bl FUN_0200E394 mov r0, #1 @@ -2171,7 +2171,7 @@ _021D9A42: blt _021D9B0C mov r0, #1 add r1, r0, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 str r0, [sp] mov r0, #8 @@ -2197,14 +2197,14 @@ _021D9A7A: bne _021D9A88 mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers _021D9A88: ldr r0, _021D9DD0 ; =0x000003C5 cmp r5, r0 blt _021D9B0C mov r0, #7 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x12 str r0, [sp] mov r1, #1 @@ -2319,13 +2319,13 @@ _021D9B72: bl G2x_SetBlendAlpha_ mov r0, #6 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r1, #0 ldr r0, [r4, #0x10] add r2, r1, #0 @@ -2526,7 +2526,7 @@ _021D9D48: bl MOD63_021DAD18 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x10] mov r1, #0 mov r2, #1 @@ -2610,7 +2610,7 @@ _021D9DF8: bl MOD63_021D9EA8 mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 str r0, [sp] mov r1, #1 @@ -3172,13 +3172,13 @@ _021DA192: bl FUN_020068C8 mov r0, #0xe mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [r4, #0xc] mov r1, #3 mov r2, #1 @@ -3532,11 +3532,11 @@ MOD63_021DA588: ; 0x021DA588 strb r2, [r0, #3] mov r2, #0 strb r2, [r0, #1] - ldr r3, _021DA59C ; =FUN_0201E6E4 + ldr r3, _021DA59C ; =GX_EngineAToggleLayers add r0, r1, #0 bx r3 nop -_021DA59C: .word FUN_0201E6E4 +_021DA59C: .word GX_EngineAToggleLayers thumb_func_end MOD63_021DA588 thumb_func_start MOD63_021DA5A0 @@ -3610,7 +3610,7 @@ _021DA618: blo _021DA630 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers _021DA630: add sp, #4 pop {r3, r4, r5, r6, pc} diff --git a/arm9/modules/63/asm/mod63_021DA640.s b/arm9/modules/63/asm/mod63_021DA640.s index dbfc4e75..6095d832 100644 --- a/arm9/modules/63/asm/mod63_021DA640.s +++ b/arm9/modules/63/asm/mod63_021DA640.s @@ -460,7 +460,7 @@ _021DA9DC: blt _021DA9DC mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x14 pop {r4, r5, r6, r7, pc} .align 2, 0 diff --git a/arm9/modules/63/asm/mod63_021DAE5C.s b/arm9/modules/63/asm/mod63_021DAE5C.s index 81d1816a..52b453e2 100644 --- a/arm9/modules/63/asm/mod63_021DAE5C.s +++ b/arm9/modules/63/asm/mod63_021DAE5C.s @@ -338,10 +338,10 @@ _021DB040: bl FUN_02009CF0 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x14 pop {r4, r5, r6, r7, pc} nop diff --git a/arm9/modules/64/asm/module_64.s b/arm9/modules/64/asm/module_64.s index 645c9569..0ade6b6c 100644 --- a/arm9/modules/64/asm/module_64.s +++ b/arm9/modules/64/asm/module_64.s @@ -79,10 +79,10 @@ _021D755E: bl MOD64_021D7970 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r5, #0 mov r1, #0x2f bl MOD64_021D7A54 @@ -404,7 +404,7 @@ _021D7846: sub r2, r2, #1 bne _021D7846 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -962,10 +962,10 @@ MOD64_021D7C74: ; 0x021D7C74 str r0, [r5, r1] mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r3, r4, r5, pc} .align 2, 0 thumb_func_end MOD64_021D7C74 @@ -1940,7 +1940,7 @@ _021D8400: bl MOD64_021D8864 mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #4] add sp, #0xc add r0, r0, #1 diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s index 890b3348..229a9214 100644 --- a/arm9/modules/65/asm/module_65.s +++ b/arm9/modules/65/asm/module_65.s @@ -114,8 +114,8 @@ _021D75A4: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -221,8 +221,8 @@ _021D7684: mov r0, #0 add r1, r0, #0 bl Main_SetVBlankIntrCB - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -740,7 +740,7 @@ _021D7A76: sub r2, r2, #1 bne _021D7A76 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -2574,10 +2574,10 @@ MOD65_021D8850: ; 0x021D8850 _021D8908: mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x54 pop {r4, r5, r6, r7, pc} .align 2, 0 @@ -2771,8 +2771,8 @@ _021D8A88: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -2882,8 +2882,8 @@ _021D8B68: mov r0, #0 add r1, r0, #0 bl Main_SetVBlankIntrCB - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -3055,7 +3055,7 @@ _021D8CC2: sub r2, r2, #1 bne _021D8CC2 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -3491,7 +3491,7 @@ MOD65_021D8FB0: ; 0x021D8FB0 _021D9040: mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x44 pop {r3, r4, r5, r6, pc} .align 2, 0 @@ -5354,7 +5354,7 @@ MOD65_021D9E98: ; 0x021D9E98 bl MOD65_021DA000 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _021D9F4C ; =0x04000008 mov r0, #3 ldrh r2, [r1] diff --git a/arm9/modules/66/asm/module_66.s b/arm9/modules/66/asm/module_66.s index 65c5c857..e0b21bf2 100644 --- a/arm9/modules/66/asm/module_66.s +++ b/arm9/modules/66/asm/module_66.s @@ -169,7 +169,7 @@ _021D7612: sub r2, r2, #1 bne _021D7612 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -193,8 +193,8 @@ _021D763C: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -319,10 +319,10 @@ MOD66_021D7750: ; 0x021D7750 bl FUN_0201CD04 mov r0, #0x1f mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x1f mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0 add r1, r0, #0 bl Main_SetVBlankIntrCB @@ -3630,10 +3630,10 @@ MOD66_021D913C: ; 0x021D913C add r4, r0, #0 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r1, [r4, #4] mov r0, #0x20 bl FUN_0201C24C diff --git a/arm9/modules/67/asm/module_67.s b/arm9/modules/67/asm/module_67.s index a72ccebc..4982fa30 100644 --- a/arm9/modules/67/asm/module_67.s +++ b/arm9/modules/67/asm/module_67.s @@ -11,8 +11,8 @@ MOD67_021D74E0: ; 0x021D74E0 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r0, #1 lsl r0, r0, #0x1a ldr r2, [r0] @@ -80,11 +80,11 @@ MOD67_021D74E0: ; 0x021D74E0 ldr r0, _021D75CC ; =MOD67_021D7660 add r1, r4, #0 bl Main_SetVBlankIntrCB - bl FUN_0201E788 + bl GX_BothDispOn bl FUN_02033E74 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r1, #0 mov r0, #0x43 add r2, r1, #0 @@ -201,7 +201,7 @@ _021D768A: sub r2, r2, #1 bne _021D768A add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -312,7 +312,7 @@ _021D7778: .word MOD67_021D9794 MOD67_021D777C: ; 0x021D777C push {r4, lr} add r4, r0, #0 - bl FUN_0201E6D8 + bl GX_DisableEngineALayers add r0, r4, #0 mov r1, #3 bl FUN_020178A0 @@ -1248,7 +1248,7 @@ _021D7E32: add r4, r0, #0 ldr r0, [sp, #0x14] lsr r0, r0, #0x13 - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -1685,7 +1685,7 @@ MOD67_021D8208: ; 0x021D8208 b _021D832E _021D822A: ldrh r0, [r0, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r1, _021D8338 ; =0x0000017E mov r0, #0x1a @@ -1774,7 +1774,7 @@ _021D82EA: _021D82F2: add r0, sp, #0x10 ldrh r0, [r0, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r4, #0x54] mov r1, #0 @@ -2423,7 +2423,7 @@ MOD67_021D87E4: ; 0x021D87E4 bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -2674,7 +2674,7 @@ MOD67_021D89E0: ; 0x021D89E0 bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -2717,7 +2717,7 @@ MOD67_021D8A3C: ; 0x021D8A3C bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -2760,7 +2760,7 @@ MOD67_021D8A98: ; 0x021D8A98 bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -2803,7 +2803,7 @@ MOD67_021D8AF4: ; 0x021D8AF4 bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -2846,7 +2846,7 @@ MOD67_021D8B50: ; 0x021D8B50 bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -2889,7 +2889,7 @@ MOD67_021D8BAC: ; 0x021D8BAC bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -2932,7 +2932,7 @@ MOD67_021D8C08: ; 0x021D8C08 bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -2975,7 +2975,7 @@ MOD67_021D8C64: ; 0x021D8C64 bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -3018,7 +3018,7 @@ MOD67_021D8CC0: ; 0x021D8CC0 bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -3061,7 +3061,7 @@ MOD67_021D8D1C: ; 0x021D8D1C bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 @@ -3104,7 +3104,7 @@ MOD67_021D8D78: ; 0x021D8D78 bl NewString_ReadMsgData add r7, r0, #0 ldrh r0, [r4, #2] - bl FUN_02034824 + bl MapHeader_GetMapSec add r2, r0, #0 ldr r0, [r5, #0x54] mov r1, #0 diff --git a/arm9/modules/68/asm/module_68.s b/arm9/modules/68/asm/module_68.s index dfab7ef8..5c2c1740 100644 --- a/arm9/modules/68/asm/module_68.s +++ b/arm9/modules/68/asm/module_68.s @@ -11,8 +11,8 @@ MOD68_021D74E0: ; 0x021D74E0 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -93,7 +93,7 @@ MOD68_021D74E0: ; 0x021D74E0 bl FUN_02033F20 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 pop {r3, r4, r5, pc} .align 2, 0 @@ -213,7 +213,7 @@ _021D76AA: sub r2, r2, #1 bne _021D76AA add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -308,7 +308,7 @@ MOD68_021D7774: ; 0x021D7774 add r4, r0, #0 mov r0, #0xf mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 mov r1, #3 bl FUN_020178A0 @@ -1447,7 +1447,7 @@ MOD68_021D7FD8: ; 0x021D7FD8 str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _021D8068 ; =0x04000008 mov r0, #3 ldrh r2, [r1] diff --git a/arm9/modules/69/asm/module_69.s b/arm9/modules/69/asm/module_69.s index 0e218fd3..33fafb4f 100644 --- a/arm9/modules/69/asm/module_69.s +++ b/arm9/modules/69/asm/module_69.s @@ -738,7 +738,7 @@ MOD69_0222DBAC: ; 0x0222DBAC bl FUN_02016B94 str r0, [r4, #0x10] ldr r0, _0222DCF4 ; =0x0222F8CC - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _0222DCF8 ; =0x04000304 ldr r0, _0222DCFC ; =0xFFFF7FFF ldrh r1, [r2] @@ -964,7 +964,7 @@ MOD69_0222DD54: ; 0x0222DD54 bl FUN_020AEDF4 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _0222DDF8 ; =0x04000008 mov r1, #3 ldrh r2, [r0] @@ -1115,7 +1115,7 @@ MOD69_0222DE98: ; 0x0222DE98 bl MOD69_0222DF0C mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x1c pop {r3, r4, pc} .align 2, 0 diff --git a/arm9/modules/70/asm/module_70.s b/arm9/modules/70/asm/module_70.s index ef7b18bd..a0966fec 100644 --- a/arm9/modules/70/asm/module_70.s +++ b/arm9/modules/70/asm/module_70.s @@ -803,7 +803,7 @@ MOD70_021D7AF4: ; 0x021D7AF4 sub sp, #0x10 add r5, r0, #0 ldr r0, _021D7BF8 ; =0x021D8284 - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _021D7BFC ; =0x04000304 ldrh r1, [r2] lsr r0, r2, #0xb @@ -909,7 +909,7 @@ MOD70_021D7AF4: ; 0x021D7AF4 bl G2x_SetBlendAlpha_ mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x10 pop {r3, r4, r5, pc} .align 2, 0 diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s index e7f0b24d..ac2559a6 100644 --- a/arm9/modules/71/asm/module_71.s +++ b/arm9/modules/71/asm/module_71.s @@ -12,8 +12,8 @@ MOD71_0222D5C0: ; 0x0222D5C0 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -131,7 +131,7 @@ MOD71_0222D5C0: ; 0x0222D5C0 bl FUN_0201797C mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r1, #0x5d lsl r1, r1, #2 ldr r1, [r4, r1] @@ -323,7 +323,7 @@ MOD71_0222D820: ; 0x0222D820 bl FUN_0201797C mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0 mov r1, #1 bl FUN_0201797C @@ -338,7 +338,7 @@ MOD71_0222D820: ; 0x0222D820 bl FUN_0201797C mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers bl MOD71_0222EA38 add r0, r4, #0 bl MOD71_0222EA68 @@ -1175,7 +1175,7 @@ _0222DF92: str r0, [r4, #0x4c] mov r0, #0x10 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _0222E0F8 ; =0x00002218 mov r1, #0 ldr r0, [r4, r0] @@ -1220,7 +1220,7 @@ _0222DFD6: bl FUN_0201797C mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x4c] add r0, r0, #1 str r0, [r4, #0x4c] @@ -1276,7 +1276,7 @@ _0222E054: bl FUN_0201797C mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [r4, #0x4c] add r0, r0, #1 str r0, [r4, #0x4c] @@ -1856,7 +1856,7 @@ _0222E562: sub r2, r2, #1 bne _0222E562 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 diff --git a/arm9/modules/73/asm/module_73.s b/arm9/modules/73/asm/module_73.s index b4e14758..d5105d7e 100644 --- a/arm9/modules/73/asm/module_73.s +++ b/arm9/modules/73/asm/module_73.s @@ -325,7 +325,7 @@ _021D76D4: bl FUN_02033E74 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _021D7804 ; =0x00001420 ldr r0, [r5, r0] cmp r0, #1 @@ -968,13 +968,13 @@ _021D7CD2: bl MOD73_021DA730 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0xae mov r1, #0 lsl r0, r0, #2 @@ -2233,7 +2233,7 @@ MOD73_021D8630: ; 0x021D8630 ldr r0, _021D8758 ; =gMain + 0x60 mov r1, #1 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay add sp, #8 pop {r4, pc} .align 2, 0 @@ -2302,7 +2302,7 @@ MOD73_021D875C: ; 0x021D875C ldr r0, _021D880C ; =gMain + 0x60 mov r1, #0 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay pop {r4, pc} .align 2, 0 _021D87EC: .word 0x0000063C @@ -2425,7 +2425,7 @@ _021D88CE: sub r2, r2, #1 bne _021D88CE add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -2453,7 +2453,7 @@ MOD73_021D88E4: ; 0x021D88E4 bl FUN_02016BBC mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0 mov r1, #2 bl FUN_020178BC @@ -2537,10 +2537,10 @@ MOD73_021D89AC: ; 0x021D89AC bl MOD73_021D92EC mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers pop {r3, pc} .align 2, 0 thumb_func_end MOD73_021D89AC @@ -5857,10 +5857,10 @@ _021DA266: bl MOD73_021DA374 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 str r0, [r5, #0x28] pop {r4, r5, r6, pc} @@ -6067,10 +6067,10 @@ MOD73_021DA408: ; 0x021DA408 blt _021DA432 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r5, #0 bl FUN_0200CAB4 mov r0, #0 @@ -6117,10 +6117,10 @@ _021DA446: bl CopyWindowToVram mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x10 pop {r4, r5, r6, pc} .align 2, 0 @@ -6150,10 +6150,10 @@ MOD73_021DA4AC: ; 0x021DA4AC beq _021DA4D0 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x2c] bl FUN_0200CAB4 mov r0, #0 diff --git a/arm9/modules/74/asm/module_74.s b/arm9/modules/74/asm/module_74.s index 14dc995b..1fce128e 100644 --- a/arm9/modules/74/asm/module_74.s +++ b/arm9/modules/74/asm/module_74.s @@ -190,8 +190,8 @@ _021D7644: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -289,8 +289,8 @@ _021D7722: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -329,7 +329,7 @@ _021D776E: sub r2, r2, #1 bne _021D776E add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -1746,7 +1746,7 @@ MOD74_021D8200: ; 0x021D8200 bl FUN_0200BD20 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x50 pop {r3, r4, r5, r6, r7, pc} nop diff --git a/arm9/modules/75/asm/module_75.s b/arm9/modules/75/asm/module_75.s index 87c9c55a..1a9861c9 100644 --- a/arm9/modules/75/asm/module_75.s +++ b/arm9/modules/75/asm/module_75.s @@ -12,8 +12,8 @@ MOD75_021E6BA0: ; 0x021E6BA0 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r0, #1 lsl r0, r0, #0x1a ldr r2, [r0] @@ -558,7 +558,7 @@ _021E703E: sub r2, r2, #1 bne _021E703E add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -732,10 +732,10 @@ MOD75_021E71BC: ; 0x021E71BC add r4, r0, #0 mov r0, #0x1f mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x1b mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 mov r1, #7 bl FUN_020178A0 @@ -9844,10 +9844,10 @@ MOD75_021EB9B4: ; 0x021EB9B4 add r4, r0, #0 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x20 mov r1, #6 bl FUN_0201C24C diff --git a/arm9/modules/76/asm/module_76.s b/arm9/modules/76/asm/module_76.s index d81a7697..13ddf00c 100644 --- a/arm9/modules/76/asm/module_76.s +++ b/arm9/modules/76/asm/module_76.s @@ -179,8 +179,8 @@ MOD76_021D7638: ; 0x021D7638 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -275,7 +275,7 @@ _021D771A: sub r2, r2, #1 bne _021D771A add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -370,7 +370,7 @@ MOD76_021D77E4: ; 0x021D77E4 add r4, r0, #0 mov r0, #0x17 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 mov r1, #2 bl FUN_020178A0 @@ -2397,7 +2397,7 @@ MOD76_021D8758: ; 0x021D8758 bl FUN_0200BF60 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x4c pop {r4, r5, r6, r7, pc} nop diff --git a/arm9/modules/77/asm/module_77.s b/arm9/modules/77/asm/module_77.s index 8ed82bcb..a5eaa94b 100644 --- a/arm9/modules/77/asm/module_77.s +++ b/arm9/modules/77/asm/module_77.s @@ -13,8 +13,8 @@ MOD77_021D74E0: ; 0x021D74E0 mov r0, #0 add r1, r0, #0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -79,7 +79,7 @@ _021D7540: bl FUN_02016B94 ldr r1, _021D75F4 ; =0x0000C010 str r0, [r5, r1] - bl FUN_0201E788 + bl GX_BothDispOn bl FUN_0201BD5C ldr r2, [r5] mov r0, #8 @@ -97,7 +97,7 @@ _021D7540: ldr r0, _021D7600 ; =gMain + 0x60 mov r1, #1 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay mov r0, #4 mov r1, #8 bl FUN_0201669C @@ -185,16 +185,16 @@ _021D764C: bl FUN_0200E1D0 mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #1 str r0, [r5] b _021D7B66 @@ -805,16 +805,16 @@ MOD77_021D7BAC: ; 0x021D7BAC mov r0, #4 mov r1, #0 ldr r5, [r4] - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, _021D7C14 ; =0x0000C2CC ldr r0, [r4, r0] bl FUN_0201EB70 @@ -857,7 +857,7 @@ _021D7C2E: sub r2, r2, #1 bne _021D7C2E add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 diff --git a/arm9/modules/78/asm/module_78.s b/arm9/modules/78/asm/module_78.s index 6a0d80b3..5d9f4625 100644 --- a/arm9/modules/78/asm/module_78.s +++ b/arm9/modules/78/asm/module_78.s @@ -271,8 +271,8 @@ MOD78_021D7708: ; 0x021D7708 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -295,7 +295,7 @@ MOD78_021D7708: ; 0x021D7708 strh r0, [r2] ldr r0, _021D7768 ; =0x021D7888 bl G3X_SetEdgeColorTable - bl FUN_0201E7A0 + bl GX_SwapDisplay pop {r3, pc} nop _021D7758: .word 0xFFFFE0FF @@ -318,7 +318,7 @@ _021D7776: sub r2, r2, #1 bne _021D7776 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index 128c6280..f0b34ee0 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -1375,8 +1375,8 @@ _0222DFE4: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -1739,7 +1739,7 @@ _0222E322: sub r2, r2, #1 bne _0222E322 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -2162,10 +2162,10 @@ MOD80_0222E614: ; 0x0222E614 bl FUN_02008AA4 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x2c pop {r3, r4, pc} thumb_func_end MOD80_0222E614 @@ -2725,10 +2725,10 @@ MOD80_0222EA04: ; 0x0222EA04 bl FUN_02017F18 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x9c pop {r4, r5, pc} nop @@ -2767,13 +2767,13 @@ MOD80_0222EB40: ; 0x0222EB40 add r4, r0, #0 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _0222EB68 ; =0x00000D5C mov r1, #0 ldr r0, [r4, r0] @@ -3128,13 +3128,13 @@ MOD80_0222EE24: ; 0x0222EE24 beq _0222EE5A mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 mov r1, #7 mov r2, #0xb @@ -8739,10 +8739,10 @@ MOD80_02231AB0: ; 0x02231AB0 bl FUN_02017F18 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x9c pop {r4, r5, pc} nop @@ -14322,10 +14322,10 @@ MOD80_02234780: ; 0x02234780 bl FUN_02017F18 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x9c pop {r4, r5, pc} nop @@ -14411,7 +14411,7 @@ MOD80_022348CC: ; 0x022348CC bl FUN_0201797C mov r0, #0x10 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers _02234944: ldr r0, [r5, #0x20] cmp r0, #9 @@ -17776,16 +17776,16 @@ MOD80_02236284: ; 0x02236284 bl MOD80_02236580 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 add r1, r0, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [r4] ldr r0, [r0, #0x20] bl FUN_02033288 @@ -17889,7 +17889,7 @@ MOD80_02236378: ; 0x02236378 bl FUN_02016C18 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 mov r1, #0 bl FUN_02018744 @@ -17910,7 +17910,7 @@ MOD80_02236378: ; 0x02236378 bl FUN_02016C18 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r5, _0223645C ; =0x02237654 add r3, sp, #0x1c ldmia r5!, {r0, r1} @@ -17928,7 +17928,7 @@ MOD80_02236378: ; 0x02236378 bl FUN_02016C18 mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 mov r1, #4 bl FUN_02018744 @@ -17949,7 +17949,7 @@ MOD80_02236378: ; 0x02236378 bl FUN_02016C18 mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0 mov r1, #0x20 add r2, r0, #0 @@ -17962,7 +17962,7 @@ MOD80_02236378: ; 0x02236378 bl FUN_02017F18 mov r0, #0x10 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x70 pop {r3, r4, r5, pc} nop diff --git a/arm9/modules/81/asm/module_81.s b/arm9/modules/81/asm/module_81.s index b7492d39..94767f70 100644 --- a/arm9/modules/81/asm/module_81.s +++ b/arm9/modules/81/asm/module_81.s @@ -153,8 +153,8 @@ _02237F22: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -2151,7 +2151,7 @@ MOD81_02238E44: ; 0x02238E44 sub sp, #0x1c add r4, r0, #0 ldr r0, _02239040 ; =0x0223D054 - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _02239044 ; =0x04000304 ldr r0, _02239048 ; =0xFFFF7FFF ldrh r1, [r2] @@ -2176,7 +2176,7 @@ MOD81_02238E44: ; 0x02238E44 bl FUN_02016C18 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r2, _02239058 ; =0x04000008 mov r0, #3 ldrh r3, [r2] @@ -2344,10 +2344,10 @@ MOD81_02238E44: ; 0x02238E44 bl MOD81_02238B40 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 bl MOD81_022393F4 ldr r0, _02239064 ; =0x04000050 @@ -3634,7 +3634,7 @@ MOD81_022399FC: ; 0x022399FC sub sp, #0x10 add r4, r0, #0 ldr r0, _02239C78 ; =0x0223D0EC - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _02239C7C ; =0x04000304 ldr r0, _02239C80 ; =0xFFFF7FFF ldrh r1, [r2] @@ -3872,10 +3872,10 @@ _02239C02: bl FUN_0201797C mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 add r0, #0xc0 mov r1, #3 @@ -4013,7 +4013,7 @@ MOD81_02239CDC: ; 0x02239CDC bl FUN_020AEDF4 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _02239DDC ; =0x04000008 mov r0, #3 ldrh r2, [r1] @@ -5703,7 +5703,7 @@ MOD81_0223AA68: ; 0x0223AA68 sub sp, #0x14 add r4, r0, #0 ldr r0, _0223ABAC ; =0x0223D158 - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _0223ABB0 ; =0x04000304 ldr r0, _0223ABB4 ; =0xFFFF7FFF ldrh r1, [r2] @@ -5846,10 +5846,10 @@ _0223AAE8: bl FUN_020179E0 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x14 pop {r4, r5, r6, r7, pc} .align 2, 0 @@ -5930,7 +5930,7 @@ MOD81_0223ABD8: ; 0x0223ABD8 bl FUN_020AEDF4 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _0223ACCC ; =0x04000008 mov r0, #3 ldrh r2, [r1] @@ -6725,7 +6725,7 @@ MOD81_0223B264: ; 0x0223B264 sub sp, #0x10 add r4, r0, #0 ldr r0, _0223B45C ; =0x0223D1EC - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _0223B460 ; =0x04000304 ldrh r1, [r2] lsr r0, r2, #0xb @@ -6936,10 +6936,10 @@ MOD81_0223B264: ; 0x0223B264 bl MOD81_0223B4B0 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x10 pop {r4, pc} .align 2, 0 @@ -7212,7 +7212,7 @@ MOD81_0223B670: ; 0x0223B670 sub sp, #0x14 add r4, r0, #0 ldr r0, _0223B7C0 ; =0x0223D258 - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _0223B7C4 ; =0x04000304 ldrh r1, [r2] lsr r0, r2, #0xb @@ -7355,10 +7355,10 @@ _0223B6F0: bl FUN_020179E0 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers bl FUN_02033E74 mov r0, #1 mov r1, #0x39 @@ -7442,7 +7442,7 @@ MOD81_0223B7E8: ; 0x0223B7E8 bl FUN_020AEDF4 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _0223B8E8 ; =0x04000008 mov r0, #3 ldrh r2, [r1] @@ -8374,7 +8374,7 @@ MOD81_0223BF74: ; 0x0223BF74 sub sp, #0x10 add r4, r0, #0 ldr r0, _0223C18C ; =0x0223D2EC - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _0223C190 ; =0x04000304 ldrh r1, [r2] lsr r0, r2, #0xb @@ -8596,10 +8596,10 @@ _0223C14A: bl FUN_0201797C mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x10 pop {r3, r4, r5, pc} .align 2, 0 @@ -8694,7 +8694,7 @@ MOD81_0223C1DC: ; 0x0223C1DC bl FUN_020AEDF4 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _0223C2E0 ; =0x04000008 mov r0, #3 ldrh r2, [r1] @@ -9208,7 +9208,7 @@ MOD81_0223C658: ; 0x0223C658 sub sp, #0x1c add r4, r0, #0 ldr r0, _0223C808 ; =0x0223D374 - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _0223C80C ; =0x04000304 ldrh r1, [r2] lsr r0, r2, #0xb @@ -9228,7 +9228,7 @@ MOD81_0223C658: ; 0x0223C658 bl FUN_02016C18 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r2, _0223C81C ; =0x04000008 mov r0, #3 ldrh r3, [r2] @@ -9369,10 +9369,10 @@ MOD81_0223C658: ; 0x0223C658 bl MOD81_0223CBE0 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0 str r0, [sp] ldr r0, _0223C824 ; =0x04000050 diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s index 925315fb..b9d0df31 100644 --- a/arm9/modules/82/asm/module_82.s +++ b/arm9/modules/82/asm/module_82.s @@ -625,8 +625,8 @@ _0222DA48: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -926,7 +926,7 @@ _0222DCEE: sub r2, r2, #1 bne _0222DCEE add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -1194,10 +1194,10 @@ _0222DED4: blt _0222DED4 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers bl FUN_02033E74 add sp, #0x5c pop {r4, r5, r6, r7, pc} @@ -1382,16 +1382,16 @@ MOD82_0222E050: ; 0x0222E050 bl MOD82_0222E35C mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 add r1, r0, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [r4] ldr r0, [r0, #0xc] bl FUN_02033288 @@ -1506,7 +1506,7 @@ MOD82_0222E15C: ; 0x0222E15C bl FUN_02016C18 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 mov r1, #0 bl FUN_02018744 @@ -1527,7 +1527,7 @@ MOD82_0222E15C: ; 0x0222E15C bl FUN_02016C18 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r5, _0222E238 ; =0x0222F8B0 add r3, sp, #0x1c ldmia r5!, {r0, r1} @@ -1545,7 +1545,7 @@ MOD82_0222E15C: ; 0x0222E15C bl FUN_02016C18 mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r0, r4, #0 mov r1, #4 bl FUN_02018744 @@ -1566,7 +1566,7 @@ MOD82_0222E15C: ; 0x0222E15C bl FUN_02016C18 mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0 mov r1, #0x20 add r2, r0, #0 diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index 92b5807e..7e36aa68 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -449,13 +449,13 @@ _0222D8B2: bl FUN_020186B4 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r1, #0x1e add r0, r1, #0 add r0, #0xfe @@ -500,13 +500,13 @@ _0222D94A: _0222D974: mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x45 mov r1, #0xf lsl r0, r0, #2 @@ -624,7 +624,7 @@ _0222DA5C: ldmia r3!, {r0, r1} stmia r2!, {r0, r1} add r0, sp, #0x18 - bl FUN_0201E66C + bl GX_SetBanks add r0, sp, #8 bl FUN_02016BBC mov r1, #0 @@ -2511,7 +2511,7 @@ _0222E960: ldmia r3!, {r0, r1} stmia r2!, {r0, r1} add r0, sp, #0x20 - bl FUN_0201E66C + bl GX_SetBanks add r0, sp, #0x10 bl FUN_02016BBC mov r1, #0 @@ -3250,10 +3250,10 @@ _0222EFC2: bl MOD83_0222EA88 mov r0, #1 add r1, r0, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r1, #0xc6 lsl r1, r1, #6 ldr r0, [r4, #4] @@ -3453,7 +3453,7 @@ MOD83_0222F074: ; 0x0222F074 bl FUN_0202AC98 mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, [r5, #4] add r1, r4, #0 bl MOD83_022391EC @@ -6306,7 +6306,7 @@ MOD83_022307B4: ; 0x022307B4 _022307C8: mov r0, #0x10 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r5] mov r1, #0 bl FUN_02018744 @@ -6517,8 +6517,8 @@ MOD83_02230954: ; 0x02230954 mov r0, #0x56 bl FUN_02016B94 str r0, [r4] - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers bl MOD83_022331C0 ldr r0, [r4] bl MOD83_02230258 @@ -7606,10 +7606,10 @@ _022312EC: bl MOD83_022302B4 mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add r1, r4, #0 ldr r0, [r4] add r1, #0xdc @@ -10478,7 +10478,7 @@ _0223299E: bl FUN_020054C8 mov r0, #0x10 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _02232B7C ; =0x00002B70 mov r1, #0 add r0, r4, r0 @@ -10544,7 +10544,7 @@ _02232A20: bl MOD83_0223243C mov r0, #0x10 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0xa str r0, [r5] b _02232CF4 @@ -10570,7 +10570,7 @@ _02232A56: bl FUN_0200CCA4 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 bl MOD83_022324A0 mov r0, #5 @@ -11433,7 +11433,7 @@ _022331CA: sub r2, r2, #1 bne _022331CA add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 @@ -15840,7 +15840,7 @@ MOD83_022351F8: ; 0x022351F8 bl FUN_02008AA4 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #0x2c pop {pc} thumb_func_end MOD83_022351F8 @@ -17524,13 +17524,13 @@ _02235F48: sub r2, r2, #1 bne _02235F48 add r0, sp, #0x10 - bl FUN_0201E66C + bl GX_SetBanks ldr r0, [r4, #0x20] bl MOD83_02235E68 ldr r0, _02235FB8 ; =gMain + 0x60 mov r1, #1 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay bl FUN_0201BD5C mov r1, #0x1e mov r0, #0 @@ -17865,7 +17865,7 @@ _02236148: bl FUN_02017CD0 mov r0, #2 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r1, #7 mov r0, #0 lsl r1, r1, #6 @@ -17945,7 +17945,7 @@ _022362C2: blt _022362C2 mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, _0223632C ; =0x00000498 add r0, r6, r0 bl MOD83_02236298 @@ -18094,7 +18094,7 @@ _022363E2: ldr r0, _0223644C ; =gMain + 0x60 mov r1, #0 strb r1, [r0, #5] - bl FUN_0201E7A0 + bl GX_SwapDisplay ldr r0, [r6, #0x20] mov r1, #0 bl FUN_020178A0 @@ -18671,7 +18671,7 @@ _022368BA: bl Main_SetVBlankIntrCB mov r0, #0x10 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #4] cmp r0, #1 bne _022368FA @@ -18898,7 +18898,7 @@ _02236A88: bl Main_SetVBlankIntrCB mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add r0, r4, #0 mov r1, #0 bl MOD83_02235C4C @@ -23555,12 +23555,12 @@ _02238CA8: bne _02238D1A mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers b _02238D22 _02238D1A: mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers _02238D22: ldr r0, _02238D34 ; =MOD83_02238F00 mov r1, #0 diff --git a/arm9/modules/84/asm/module_84_thumb1.s b/arm9/modules/84/asm/module_84_thumb1.s index 405c33ef..53dfe036 100644 --- a/arm9/modules/84/asm/module_84_thumb1.s +++ b/arm9/modules/84/asm/module_84_thumb1.s @@ -38,8 +38,8 @@ _021D7516: add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -565,7 +565,7 @@ MOD84_021D7968: ; 0x021D7968 bl FUN_02016B94 str r0, [r4, #4] ldr r0, _021D7A60 ; =0x021DA68C - bl FUN_0201E66C + bl GX_SetBanks ldr r2, _021D7A64 ; =0x04000304 ldr r0, _021D7A68 ; =0xFFFF7FFF ldrh r1, [r2] @@ -768,7 +768,7 @@ MOD84_021D7AC8: ; 0x021D7AC8 bl FUN_020AEDF4 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r1, _021D7B50 ; =0x04000008 mov r0, #3 ldrh r2, [r1] @@ -1348,10 +1348,10 @@ MOD84_021D7F94: ; 0x021D7F94 bl FUN_020200D8 mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers add sp, #0x30 pop {r4, pc} thumb_func_end MOD84_021D7F94 diff --git a/arm9/modules/84/asm/module_84_thumb2.s b/arm9/modules/84/asm/module_84_thumb2.s index 048adbf9..66e7a196 100644 --- a/arm9/modules/84/asm/module_84_thumb2.s +++ b/arm9/modules/84/asm/module_84_thumb2.s @@ -1314,7 +1314,7 @@ _021D8AEC: ; jump table _021D8AF4: mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r1, #0 mov r0, #3 add r2, r1, #0 @@ -1362,7 +1362,7 @@ _021D8B4E: beq _021D8B66 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #4 mov r0, #1 pop {r3, r4, pc} @@ -1611,10 +1611,10 @@ _021D8D24: ; jump table _021D8D2C: mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r1, #0 mov r0, #3 add r2, r1, #0 @@ -1692,10 +1692,10 @@ _021D8DC8: beq _021D8DE6 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #1 pop {r3, r4, r5, pc} _021D8DE6: @@ -2473,7 +2473,7 @@ _021D93F4: ; jump table _021D93FC: mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r1, #0 mov r0, #3 add r2, r1, #0 @@ -2521,7 +2521,7 @@ _021D9456: beq _021D946E mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #4 mov r0, #1 pop {r3, r4, pc} @@ -3346,7 +3346,7 @@ _021D9AB4: ; jump table _021D9ABC: mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r1, #0 mov r0, #3 add r2, r1, #0 @@ -3394,7 +3394,7 @@ _021D9B16: beq _021D9B2E mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers add sp, #4 mov r0, #1 pop {r3, r4, pc} @@ -3989,7 +3989,7 @@ _021D9FBE: beq _021DA068 mov r0, #1 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers ldr r0, [r4, #0x10] mov r1, #0 bl FUN_020200A0 diff --git a/arm9/modules/85/asm/module_85.s b/arm9/modules/85/asm/module_85.s index 2fe33d18..adb49508 100644 --- a/arm9/modules/85/asm/module_85.s +++ b/arm9/modules/85/asm/module_85.s @@ -12,8 +12,8 @@ MOD85_021D74E0: ; 0x021D74E0 add r1, r0, #0 bl Main_SetVBlankIntrCB bl FUN_02015F1C - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #2 mov r0, #3 mov r1, #0x4f @@ -273,34 +273,34 @@ MOD85_021D76FC: ; 0x021D76FC bl MOD85_021D7930 mov r0, #1 add r1, r0, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #2 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #4 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #8 mov r1, #0 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E6E4 + bl GX_EngineAToggleLayers mov r0, #1 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #2 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #4 mov r1, #0 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #8 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers mov r0, #0x10 mov r1, #1 - bl FUN_0201E74C + bl GX_EngineBToggleLayers ldr r0, _021D77D0 ; =0x04000008 mov r2, #3 ldrh r1, [r0] @@ -383,7 +383,7 @@ _021D7802: sub r2, r2, #1 bne _021D7802 add r0, sp, #0 - bl FUN_0201E66C + bl GX_SetBanks add sp, #0x28 pop {r4, pc} .align 2, 0 diff --git a/arm9/modules/86/asm/module_86.s b/arm9/modules/86/asm/module_86.s index e3a93e0f..08651acb 100644 --- a/arm9/modules/86/asm/module_86.s +++ b/arm9/modules/86/asm/module_86.s @@ -43,8 +43,8 @@ MOD86_021D74E0: ; 0x021D74E0 mov r0, #0 add r1, r0, #0 bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 + bl GX_DisableEngineALayers + bl GX_DisableEngineBLayers mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -65,7 +65,7 @@ MOD86_021D74E0: ; 0x021D74E0 ldr r0, _021D7588 ; =MOD86_021D76E0 add r1, r4, #0 bl Main_SetVBlankIntrCB - bl FUN_0201E788 + bl GX_BothDispOn mov r0, #1 pop {r3, r4, r5, pc} nop @@ -262,7 +262,7 @@ _021D76F8: sub r2, r2, #1 bne _021D76F8 add r0, sp, #0x2c - bl FUN_0201E66C + bl GX_SetBanks ldr r0, [r4] bl FUN_02016B94 add r3, sp, #0x1c diff --git a/arm9/src/GX_layers.c b/arm9/src/GX_layers.c new file mode 100644 index 00000000..ce188876 --- /dev/null +++ b/arm9/src/GX_layers.c @@ -0,0 +1,110 @@ +#include "GX_layers.h" + + +struct GX_LayerData layer_data; + +THUMB_FUNC void GX_SetBanks(const struct GraphicsBanks *banks) +{ + GX_ResetBankForBG(); + GX_ResetBankForBGExtPltt(); + GX_ResetBankForSubBG(); + FUN_020C6034(); + GX_ResetBankForOBJ(); + GX_ResetBankForOBJExtPltt(); + FUN_020C605C(); + GX_ResetBankForSubOBJ(); + GX_ResetBankForTex(); + GX_ResetBankForTexPltt(); + + GX_SetBankForBG(banks->bg); + GX_SetBankForBGExtPltt(banks->bgextpltt); + GX_SetBankForSubBG(banks->subbg); + GX_SetBankForSubBGExtPltt(banks->subbgextpltt); + GX_SetBankForOBJ(banks->obj); + GX_SetBankForOBJExtPltt(banks->objextpltt); + GX_SetBankForSubOBJ(banks->subobj); + GX_SetBankForSubOBJExtPltt(banks->subobjextpltt); + GX_SetBankForTex(banks->tex); + GX_SetBankForTexPltt(banks->texpltt); +} + + +THUMB_FUNC void GX_DisableEngineALayers() +{ + layer_data.EngineA_DISPCNT_LayerMask = 0; +} + +THUMB_FUNC void GX_EngineAToggleLayers(u32 layer_mask, GX_LayerToggle layer_toggle) +{ + if (layer_toggle == GX_LAYER_TOGGLE_ON) + { + if ((layer_data.EngineA_DISPCNT_LayerMask & layer_mask) != 0) + { + return; + } + } + else + { + if ((layer_data.EngineA_DISPCNT_LayerMask & layer_mask) == 0) + { + return; + } + } + + reg_GX_DISPCNT = (reg_GX_DISPCNT & 0xFFFFE0FF) | (layer_data.EngineA_DISPCNT_LayerMask ^= layer_mask) << 8; +} + +THUMB_FUNC void GX_SetEngineALayers(u32 layer_mask) +{ + layer_data.EngineA_DISPCNT_LayerMask = layer_mask; + reg_GX_DISPCNT = (reg_GX_DISPCNT & 0xFFFFE0FF) | layer_mask << 8; +} + +THUMB_FUNC void GX_DisableEngineBLayers() +{ + layer_data.EngineB_DISPCNT_LayerMask = 0; +} + +THUMB_FUNC void GX_EngineBToggleLayers(u32 layer_mask, GX_LayerToggle layer_toggle) +{ + if (layer_toggle == GX_LAYER_TOGGLE_ON) + { + if ((layer_data.EngineB_DISPCNT_LayerMask & layer_mask) != 0) + { + return; + } + } + else + { + if ((layer_data.EngineB_DISPCNT_LayerMask & layer_mask) == 0) + { + return; + } + } + + reg_GXS_DB_DISPCNT = (reg_GXS_DB_DISPCNT & 0xFFFFE0FF) | (layer_data.EngineB_DISPCNT_LayerMask ^= layer_mask) << 8; +} + +THUMB_FUNC void GX_BothDispOn() +{ + GX_DispOn(); + + reg_GXS_DB_DISPCNT |= 0x10000; +} + +THUMB_FUNC void GX_SwapDisplay() +{ + if (gMain.unk65 == 0) + { + reg_GX_POWCNT |= 0x8000; //send display A to lower screen + } + else + { + reg_GX_POWCNT &= 0xFFFF7FFF; // sned display A to upper screen + } +} + +THUMB_FUNC u32 GX_GetEngineALayers() +{ + return layer_data.EngineA_DISPCNT_LayerMask; +} diff --git a/arm9/src/error_handling.c b/arm9/src/error_handling.c index 9052773f..a01894f6 100644 --- a/arm9/src/error_handling.c +++ b/arm9/src/error_handling.c @@ -1,8 +1,8 @@ #include "global.h" #include "error_handling.h" +#include "error_message_reset.h" extern u32 FUN_02031810(void); -extern void PrintErrorMessageAndReset(void); THUMB_FUNC void ErrorHandling(void) { diff --git a/arm9/src/error_message_reset.c b/arm9/src/error_message_reset.c new file mode 100644 index 00000000..3a727924 --- /dev/null +++ b/arm9/src/error_message_reset.c @@ -0,0 +1,142 @@ +#include "error_message_reset.h" +#include "GX_layers.h" + +const u32 UNK_020FF49C[2] = { 0x1a030300, 0x00230112 }; + +const u32 UNK_020FF4A4[2] = { 0x00020000, 0x00000000 }; + +const struct GraphicsModes UNK_020FF4AC = { mode1 : 1 }; + +const u32 UNK_020FF4BC[7] = { 0x00, 0x00, 0x0800, 0x00, 0x06000001, 0x0100, 0x00 }; + +const struct GraphicsBanks UNK_020FF4D8 = { bg : 3 }; + +u32 sErrorMessagePrinterLock; + +extern void FUN_0200E3A0(PMLCDTarget, int); +extern u32 *FUN_02016B94(u32 param0); +extern void FUN_02016BBC(const struct GraphicsModes *modes); +extern void FUN_02016C18(u32 *param0, u32 param1, void *param2, u32 param3); +extern void FUN_02018744(u32 *param0, u32 param1); +extern void FUN_0200CB00(u32 *param0, u32 param1, u32 param2, u32 param3, u8 param4, u32 param5); +extern void FUN_02002ED0(u32 param0, u32 param1, u32 param2); +extern void FUN_02017F18(u32 param0, u32 param1, u32 param2, u32 param3); +extern void FUN_02017FE4(u32 param0, u32 param1); +extern void FUN_02019150(u32 *param0, u32 *param1, const u32 *param2); +extern void FUN_020196F4(u32 *, u8, u16, u16, u16, u16); +extern void FUN_0200CCA4(u32 *param0, u32 param1, u32 param2, u32 param3); +extern void FUN_0200E394(u32 param0); +extern void FUN_0200A274(u32 param0, u32 param1, u32 param2); +extern BOOL FUN_02032DAC(void); +extern BOOL FUN_0202FB80(void); +extern BOOL FUN_02033678(void); +extern void FUN_02019178(u32 *param0); + +THUMB_FUNC void VBlankHandler() +{ + *(vu32 *)HW_INTR_CHECK_BUF |= 1; + + MI_WaitDma(3); +} + +THUMB_FUNC void PrintErrorMessageAndReset() +{ + + u32 *ptr; + u32 buf[4]; + + if (sErrorMessagePrinterLock != 1) + { + sErrorMessagePrinterLock = 1; + OS_SetArenaHi(OS_ARENA_MAIN, OS_GetInitArenaHi(OS_ARENA_MAIN)); + OS_SetArenaLo(OS_ARENA_MAIN, OS_GetInitArenaLo(OS_ARENA_MAIN)); + + FUN_020166C8((u32 *)UNK_020FF4A4, 1, 1, 0); + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + OS_DisableIrqMask(1); + OS_SetIrqFunction(1, &VBlankHandler); + OS_EnableIrqMask(1); + + Main_SetVBlankIntrCB(NULL, NULL); + + FUN_02015F34(NULL, NULL); + GX_DisableEngineALayers(); + GX_DisableEngineBLayers(); + + reg_GX_DISPCNT &= 0xFFFFE0FF; + reg_GXS_DB_DISPCNT &= 0xFFFFE0FF; + + FUN_0201669C(4, 8); + + gMain.unk65 = 0; + GX_SwapDisplay(); + + reg_G2_BLDCNT = 0; + reg_G2S_DB_BLDCNT = 0; + reg_GX_DISPCNT &= 0xFFFF1FFF; + reg_GXS_DB_DISPCNT &= 0xFFFF1FFF; + + GX_SetBanks(&UNK_020FF4D8); + ptr = FUN_02016B94(0); + FUN_02016BBC(&UNK_020FF4AC); + + FUN_02016C18(ptr, 0, UNK_020FF4BC, 0); + FUN_02018744(ptr, 0); + + FUN_0200CB00(ptr, 0, 503, 2, 0, 0); + + FUN_02002ED0(0, 0x20, 0); + FUN_02017F18(0, 0x20, 0, 0); + FUN_02017FE4(0, 0x6C21); + FUN_02017FE4(4, 0x6C21); + + struct MsgData *msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 0xc8, 0); + struct String *str = String_ctor(6 << 6, 0); + + FUN_0201BD5C(); + FUN_02019150(ptr, buf, UNK_020FF49C); + FUN_020196F4(buf, 15, 0, 0, 0xd0, 0x90); + FUN_0200CCA4(buf, 0, 0x1f7, 2); + + ReadMsgDataIntoString(msg_data, 3, str); + + AddTextPrinterParameterized((u32)buf, 0, (const u16 *)str, 0, 0, 0, NULL); // wtf + + String_dtor(str); + GX_BothDispOn(); + FUN_0200E394(0); + FUN_0200E394(1); + FUN_0200A274(0, 0x3f, 3); + FUN_02032DAC(); + + lid: + HandleDSLidAction(); + FUN_0202FB80(); + if (!FUN_02033678()) + { + OS_WaitIrq(1, 1); + goto lid; + } + + + lid2: + HandleDSLidAction(); + if (!((u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ 0x2FFF) & 0x2FFF) & 1)) + { + OS_WaitIrq(1, 1); + goto lid2; + } + + FUN_0200E3A0(PM_LCD_TOP, 0x7FFF); + FUN_0200E3A0(PM_LCD_BOTTOM, 0x7FFF); + + FUN_02019178(buf); + + DestroyMsgData(msg_data); + FreeToHeap(ptr); + + OS_ResetSystem(0); + } +} diff --git a/arm9/src/game_init.c b/arm9/src/game_init.c index 327c66c6..a7508fab 100644 --- a/arm9/src/game_init.c +++ b/arm9/src/game_init.c @@ -4,16 +4,15 @@ #include "main.h" #include "FS_rom.h" #include "PAD_pad.h" -#include "heap.h" #include "MWC_string.h" #include "tp.h" #include "unk_0201B4E8.h" #include "game_init.h" #include "registers.h" +#include "heap.h" #pragma thumb on -extern void FUN_020166C8(const u32 (*)[2], int, int, int); extern void FUN_02022450(void); typedef volatile struct @@ -142,7 +141,7 @@ void FUN_02015FC8(void) { csum++; } - FUN_020166C8(UNK_020EDB10, 4, 92, (int)csum); + FUN_020166C8((u32 *)UNK_020EDB10, 4, 92, (int)csum); } void InitSystemForTheGame(void) diff --git a/arm9/src/heap.c b/arm9/src/heap.c new file mode 100644 index 00000000..84abc834 --- /dev/null +++ b/arm9/src/heap.c @@ -0,0 +1,380 @@ +#include "heap.h" +#include "error_message_reset.h" + +extern void *tempName_NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2); +extern void *tempName_NNS_FndAllocFromExpHeapEx(void *param0, u32 param1, s32 param2); +extern void thunk_FUN_020adc8c(); +extern void FUN_020ADDF0(void *ptr1, void *ptr2); +extern u32 FUN_02031810(void); +extern u32 FUN_020ADDC8(void *param0); +extern void FUN_020AE82C(u32 param0, void *param1, u32 param2); +extern u32 FUN_020ADDC0(void *param0); +extern void FUN_020ADE2C(void *ptr1, void *ptr2, u32 param2); + + +struct UnkStruct_020166C8 UNK_021C4D28; + + +THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size) +{ + u32 unk_size = param1 + 24; + + if (param2 < unk_size) + { + param2 = unk_size; + } + if (pre_size != 0) + { + while (pre_size % 4 != 0) + { + pre_size++; + } + + OS_AllocFromArenaLo(OS_ARENA_MAIN, pre_size, 4); + } + + u32 r7 = param2 * 2; + + void *ptr = OS_AllocFromArenaLo(OS_ARENA_MAIN, (unk_size * 3 + 1) * sizeof(u32) + r7 + param2, 4); + UNK_021C4D28.unk00 = ptr; + ptr += (unk_size + 1) * 4; + UNK_021C4D28.unk04 = ptr; + ptr += unk_size * 4; + UNK_021C4D28.unk08 = ptr; + ptr += unk_size * 4; + UNK_021C4D28.unk0c = ptr; + ptr += r7; + UNK_021C4D28.unk10 = ptr; + UNK_021C4D28.unk14 = (u16)param2; + UNK_021C4D28.unk16 = (u16)param1; + + r7 = 0; + UNK_021C4D28.unk1a = (u16)unk_size; + UNK_021C4D28.unk18 = (u16)unk_size; + + while (r7 < param1) + { + void *ptr; + if (param0[1] == 0 || param0[1] != 2) + { + ptr = OS_AllocFromArenaLo(OS_ARENA_MAIN, param0[0], 4); + } + else + { + ptr = OS_AllocFromArenaHi(OS_ARENA_MAINEX, param0[0], 4); + } + + if (ptr != 0) + { + + UNK_021C4D28.unk00[r7] = tempName_NNS_FndCreateExpHeapEx(ptr, param0[0], 0); + UNK_021C4D28.unk10[r7] = (u8)r7; + } + else + { + ErrorHandling(); + } + + param0 += 2; + r7++; + } + + while (param1 < unk_size + 1) + { + UNK_021C4D28.unk00[param1] = 0; + UNK_021C4D28.unk10[param1] = (u8)UNK_021C4D28.unk1a; + + param1++; + } + + while (param1 < param2) + { + UNK_021C4D28.unk10[param1] = (u8)UNK_021C4D28.unk1a; + + param1++; + } + + for (param1 = 0; param1 < param2; param1++) + { + UNK_021C4D28.unk0c[param1] = 0; + } +} + +THUMB_FUNC s32 FUN_020167F4() +{ + s32 i = UNK_021C4D28.unk16; + s32 j = UNK_021C4D28.unk18; + + if (i < j) + { + void **ptr = UNK_021C4D28.unk00 + i; + do + { + if (*ptr == 0) + { + return i; + } + i++; + ptr++; + } while (i < j); + } + + return -1; +} + +THUMB_FUNC u32 FUN_0201681C(u32 param0, u32 param1, u32 param2) +{ + return FUN_02016834(param0, param1, param2, 4); +} + +THUMB_FUNC u32 FUN_02016828(u32 param0, u32 param1, u32 param2) +{ + return FUN_02016834(param0, param1, param2, -4); +} + +THUMB_FUNC u32 FUN_02016834(u32 param0, u32 param1, u32 param2, s32 param3) +{ + GF_ASSERT(OS_GetProcMode() != OS_PROCMODE_IRQ); + + u8 *ptr = UNK_021C4D28.unk10; + if (UNK_021C4D28.unk1a == ptr[param1]) + { + void *ptr2 = UNK_021C4D28.unk00[ptr[param0]]; + if (ptr2 != 0) + { + void *ptr3 = tempName_NNS_FndAllocFromExpHeapEx(ptr2, param2, param3); + if (ptr3 != 0) + { + param3 = FUN_020167F4(); + if (param3 >= 0) + { + UNK_021C4D28.unk00[param3] = tempName_NNS_FndCreateExpHeapEx(ptr3, param2, 0); + + + if (UNK_021C4D28.unk00[param3] != 0) + { + UNK_021C4D28.unk04[param3] = ptr2; + UNK_021C4D28.unk08[param3] = ptr3; + UNK_021C4D28.unk10[param1] = (u8)param3; + + return 1; + } + else + { + ErrorHandling(); + } + } + else + { + ErrorHandling(); + } + } + else + { + ErrorHandling(); + } + } + else + { + ErrorHandling(); + } + } + else + { + ErrorHandling(); + } + return 0; +} + +THUMB_FUNC void FUN_020168D0(u32 heap_id) +{ + GF_ASSERT (OS_GetProcMode() != OS_PROCMODE_IRQ); + + if (UNK_021C4D28.unk00[UNK_021C4D28.unk10[heap_id]] != 0) + { + thunk_FUN_020adc8c(); + + u8 index = UNK_021C4D28.unk10[heap_id]; + void *ptr1 = UNK_021C4D28.unk04[index]; + void *ptr2 = UNK_021C4D28.unk08[index]; + if (ptr1 != 0 && ptr2 != 0) + { + FUN_020ADDF0(ptr1, ptr2); + } + else + { + ErrorHandling(); + } + + UNK_021C4D28.unk00[UNK_021C4D28.unk10[heap_id]] = 0; + UNK_021C4D28.unk04[UNK_021C4D28.unk10[heap_id]] = 0; + UNK_021C4D28.unk08[UNK_021C4D28.unk10[heap_id]] = 0; + + UNK_021C4D28.unk10[heap_id] = (u8)UNK_021C4D28.unk1a; + } +} + +THUMB_FUNC u32 *FUN_02016944(void *param0, u32 param1, s32 param2, u32 param3) +{ + GF_ASSERT(param0); + + OSIntrMode intr_mode = OS_DisableInterrupts(); + param1 += 16; + u32 *ptr = (u32 *)tempName_NNS_FndAllocFromExpHeapEx(param0, param1, param2); + + OS_RestoreInterrupts(intr_mode); + if (ptr != 0) + { + ptr[3] = (ptr[3] & ~0xff) | (param3 & 0xff); + + ptr += 4; + } + + return ptr; +} + +THUMB_FUNC void FUN_02016988() +{ + if (FUN_02031810() != 0) + { + PrintErrorMessageAndReset(); + } +} + +void *AllocFromHeap(u32 heap_id, u32 size) +{ + void *ptr = 0; + if (heap_id < UNK_021C4D28.unk14) + { + u8 index = UNK_021C4D28.unk10[heap_id]; + ptr = FUN_02016944(UNK_021C4D28.unk00[index], size, 4, heap_id); + } + if (ptr != 0) + { + UNK_021C4D28.unk0c[heap_id]++; + } + else + { + FUN_02016988(); + } + + return ptr; +} + +void *AllocFromHeapAtEnd(u32 heap_id, u32 size) +{ + void *ptr = 0; + if (heap_id < UNK_021C4D28.unk14) + { + u8 index = UNK_021C4D28.unk10[heap_id]; + ptr = FUN_02016944(UNK_021C4D28.unk00[index], size, -4, heap_id); + } + + if (ptr != 0) + { + UNK_021C4D28.unk0c[heap_id]++; + } + else + { + FUN_02016988(); + } + + return ptr; +} + +void FreeToHeap(void *ptr) +{ + u8 heap_id = (u8)((u32 *)ptr)[-1]; + + if ((u16)heap_id < UNK_021C4D28.unk14) + { + u8 index = UNK_021C4D28.unk10[heap_id]; + void *ptr2 = UNK_021C4D28.unk00[index]; + GF_ASSERT(ptr2); + + if (UNK_021C4D28.unk0c[heap_id] == 0) + { + FUN_02016B90(heap_id); + } + GF_ASSERT(UNK_021C4D28.unk0c[heap_id]); + + UNK_021C4D28.unk0c[heap_id]--; + OSIntrMode intr_mode = OS_DisableInterrupts(); + FUN_020ADDF0(ptr2, ptr - 16); + OS_RestoreInterrupts(intr_mode); + return; + } + + ErrorHandling(); +} + +void FUN_02016A8C(u32 param0, void *param1) +{ + GF_ASSERT (OS_GetProcMode() != OS_PROCMODE_IRQ); + + if (param0 < UNK_021C4D28.unk14) + { + u8 index = UNK_021C4D28.unk10[param0]; + void *ptr = UNK_021C4D28.unk00[index]; + GF_ASSERT (ptr ); + + u8 heap_id = (u8)((u32 *)param1)[-1]; + GF_ASSERT (heap_id == param0); + + FUN_020ADDF0(ptr, param1 - 16); + GF_ASSERT (UNK_021C4D28.unk0c[param0]); + + UNK_021C4D28.unk0c[param0]--; + return; + } + + ErrorHandling(); +} + +THUMB_FUNC u32 FUN_02016AF8(u32 param0) +{ + if (param0 < UNK_021C4D28.unk14) + { + u8 index = UNK_021C4D28.unk10[param0]; + return FUN_020ADDC8(UNK_021C4D28.unk00[index]); + } + + ErrorHandling(); + return 0; +} + +THUMB_FUNC void FUN_02016B20(u32 param0, u32 param1, u32 param2) +{ + if (param1 < UNK_021C4D28.unk14) + { + + u8 index = UNK_021C4D28.unk10[param1]; + FUN_020AE82C(param0, UNK_021C4D28.unk00[index], param2); + return; + } + + ErrorHandling(); +} + +THUMB_FUNC void FUN_02016B44(void *ptr, u32 param1) +{ + GF_ASSERT (OS_GetProcMode() != OS_PROCMODE_IRQ); + + param1 += 16; + if (FUN_020ADDC0(ptr - 16) >= param1) + { + u8 heap_id = (u8)((u32 *)ptr)[-1]; + + u8 index = UNK_021C4D28.unk10[heap_id]; + + FUN_020ADE2C(UNK_021C4D28.unk00[index], ptr - 16, param1); + return; + } + ErrorHandling(); +} + +THUMB_FUNC u32 FUN_02016B90(u32 param0) +{ +#pragma unused(param0) + return 1; +} diff --git a/arm9/src/main.c b/arm9/src/main.c index 86f0f6af..c50fbaff 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -11,6 +11,7 @@ #include "poke_overlay.h" #include "player_data.h" #include "sound.h" +#include "timer3.h" FS_EXTERN_OVERLAY(MODULE_52); FS_EXTERN_OVERLAY(MODULE_63); @@ -34,7 +35,6 @@ extern void FUN_02002C14(void); extern void FUN_02002C50(int, int); extern struct SaveBlock2 * SaveBlock2_new(void); extern void * FUN_02029EF8(struct SaveBlock2 *); -extern void FUN_02020AFC(void); extern int FUN_020337E8(int); extern void FUN_02034188(int, int); extern int FUN_020227FC(struct SaveBlock2 *); @@ -75,7 +75,7 @@ THUMB_FUNC void NitroMain(void) gBacklightTop.unk18 = -1; gBacklightTop.unk20 = SaveBlock2_new(); InitSoundData(FUN_02029EF8(gBacklightTop.unk20), Sav2_PlayerData_GetOptionsAddr(gBacklightTop.unk20)); - FUN_02020AFC(); + Init_Timer3(); if (FUN_020337E8(3) == 3) FUN_02034188(3, 0); if (FUN_020227FC(gBacklightTop.unk20) == 0) diff --git a/arm9/src/map_header.c b/arm9/src/map_header.c index 0a5b8987..644a590b 100644 --- a/arm9/src/map_header.c +++ b/arm9/src/map_header.c @@ -605,23 +605,23 @@ u32 MapNumberBoundsCheck(u32 mapno) return mapno; } -u8 FUN_02034724(u32 mapno) +u8 MapHeader_GetAreaDataBank(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk0; + return sMapHeaders[mapno].area_data_bank; } -u8 FUN_02034738(u32 mapno) +u8 MapHeader_GetField1(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); return sMapHeaders[mapno].unk1; } -u16 FUN_0203474C(u32 mapno) +u16 MapHeader_GetMatrixId(u32 mapno) { u16 ret; mapno = MapNumberBoundsCheck(mapno); - ret = sMapHeaders[mapno].unk2; + ret = sMapHeaders[mapno].matrix_id; // Spear Pillar if (ret == 22 && gGameVersion == VERSION_PEARL) ret = 23; @@ -631,94 +631,94 @@ u16 FUN_0203474C(u32 mapno) u16 MapHeader_GetMsgBank(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk8; + return sMapHeaders[mapno].msg_bank; } -u16 MapHeader_GetScrSeqReleaseNo(u32 mapno) +u16 MapHeader_GetScriptsBank(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk4; + return sMapHeaders[mapno].scripts_bank; } -u16 FUN_0203479C(u32 mapno) +u16 MapHeader_GetLevelScriptsBank(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk6; + return sMapHeaders[mapno].level_scripts_bank; } -u16 FUN_020347B0(u32 mapno) +u16 MapHeader_GetDayMusicId(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unkA; + return sMapHeaders[mapno].day_music_id; } -u16 FUN_020347C4(u32 mapno) +u16 MapHeader_GetNightMusicId(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unkC; + return sMapHeaders[mapno].night_music_id; } -BOOL FUN_020347D8(u32 mapno) +BOOL MapHeader_HasWildEncounters(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unkE != 0xFFFF; + return sMapHeaders[mapno].wild_encounter_bank != 0xFFFF; } -u16 FUN_020347FC(u32 mapno) +u16 MapHeader_GetWildEncounterBank(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unkE; + return sMapHeaders[mapno].wild_encounter_bank; } -u16 FUN_02034810(u32 mapno) +u16 MapHeader_GetEventsBank(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk10; + return sMapHeaders[mapno].events_bank; } -u16 FUN_02034824(u32 mapno) +u16 MapHeader_GetMapSec(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); return sMapHeaders[mapno].mapsec; } -u8 FUN_02034838(u32 mapno) +u8 MapHeader_GetWeatherType(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk14; + return sMapHeaders[mapno].weather_type; } -u8 FUN_0203484C(u32 mapno) +u8 MapHeader_GetCameraType(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk15; + return sMapHeaders[mapno].camera_type; } -u8 FUN_02034860(u32 mapno) +u8 MapHeader_GetField17_0(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); return sMapHeaders[mapno].unk17_0; } -u8 FUN_0203487C(u32 mapno) +u8 MapHeader_GetField17_6(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); return sMapHeaders[mapno].unk17_6; } -u8 FUN_02034898(u32 mapno) +u8 MapHeader_IsFlyAllowed(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk17_7; + return sMapHeaders[mapno].is_fly_allowed; } -u8 FUN_020348B4(u32 mapno) +u8 MapHeader_IsBikeAllowed(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); - return sMapHeaders[mapno].unk17_4; + return sMapHeaders[mapno].is_bike_allowed; } -u8 FUN_020348D0(u32 mapno) +u8 MapHeader_GetField16(u32 mapno) { mapno = MapNumberBoundsCheck(mapno); return sMapHeaders[mapno].unk16; @@ -726,36 +726,36 @@ u8 FUN_020348D0(u32 mapno) BOOL FUN_020348E4(u32 mapno) { - if (!FUN_02034898(mapno)) + if (!MapHeader_IsFlyAllowed(mapno)) return FALSE; - if (FUN_020348D0(mapno) != 1) + if (MapHeader_GetField16(mapno) != 1) return TRUE; return FALSE; } -BOOL FUN_02034908(u32 mapno) +BOOL MapHeader_MapIsOnOverworldMatrix(u32 mapno) { - return !FUN_0203474C(mapno); + return MapHeader_GetMatrixId(mapno) == 0; } BOOL FUN_0203491C(u32 mapno) { - return FUN_020348D0(mapno) == 5; + return MapHeader_GetField16(mapno) == 5; } BOOL FUN_02034930(u32 mapno) { - return FUN_020348D0(mapno) == 3; + return MapHeader_GetField16(mapno) == 3; } BOOL FUN_02034944(u32 mapno) { - return FUN_020348D0(mapno) == 4 || FUN_020348D0(mapno) == 5; + return MapHeader_GetField16(mapno) == 4 || MapHeader_GetField16(mapno) == 5; } BOOL FUN_02034964(u32 mapno) { - return FUN_020348D0(mapno) == 1 || FUN_020348D0(mapno) == 2; + return MapHeader_GetField16(mapno) == 1 || MapHeader_GetField16(mapno) == 2; } BOOL FUN_02034984(u32 mapno) diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c index 397f1f69..8520f2c1 100644 --- a/arm9/src/save_arrays.c +++ b/arm9/src/save_arrays.c @@ -14,10 +14,10 @@ #include "pokedex.h" #include "seal.h" #include "unk_020139D8.h" +#include "unk_02024E64.h" extern u32 FUN_0202AC20(void); extern u32 FUN_02034D7C(void); -extern u32 FUN_02024E64(void); extern u32 FUN_02034D80(void); extern u32 FUN_02025954(void); extern u32 FUN_02023AC8(void); @@ -39,7 +39,6 @@ extern u32 FUN_0202BE98(void); extern u32 FUN_0202C0E0(void); extern void FUN_0202AC28(void *); extern void FUN_02034D98(void *); -extern void FUN_02024E6C(void *); extern void FUN_02034D88(void *); extern void FUN_0202597C(void *); extern void FUN_02023AD8(void *); diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c new file mode 100644 index 00000000..4ad17e51 --- /dev/null +++ b/arm9/src/scrcmd.c @@ -0,0 +1,1300 @@ +#include "scrcmd.h" +#include "unk_0204639C.h" +#include "main.h" +#include "options.h" +#include "player_data.h" +#include "text.h" + +extern void *FUN_02039438(struct UnkSavStruct80* arg, u32 id); +extern void *CreateScriptContext(struct UnkSavStruct80* arg, u16 id); +extern u8 FUN_02058448(u32 param0); +extern void FlagSet(struct UnkSavStruct80 *arg, u16 flag); +extern void FlagClear(struct UnkSavStruct80 *arg, u16 flag); +extern u8 FlagCheck(struct UnkSavStruct80 *arg, u16 flag); +extern void TrainerFlagSet(struct UnkSavStruct80 *arg, u16 flag); +extern void TrainerFlagClear(struct UnkSavStruct80 *arg, u16 flag); +extern u8 TrainerFlagCheck(struct UnkSavStruct80 *arg, u16 flag); +extern void MOD05_ShowMessageInField(struct ScriptContext *ctx, struct MsgData *msgData, u16 id); +extern void MOD05_021E2BD0(struct ScriptContext *ctx, struct MsgData *msgData, u16 msgId, u32 param4, void *param5); +extern void MOD05_021E2C58(struct ScriptContext *ctx, u16 typ, u16 id, u16 word1, s16 word2, u8 param5); +extern struct ScrStrBufs *MOD06_02244210(struct SaveBlock2 *sav, u16 poke, u16 sex, u8 flag, u8 *unk); +extern void MOD05_021E2CBC(struct ScriptContext *ctx, struct ScrStrBufs *str, u8 param2, u32 param3); +extern void MOD05_021E2BB8(void *param0, struct ScriptContext *ctx); +extern BOOL FUN_020546C8(u8 param0); +extern u32 FUN_02058488(u32 param0); +extern BOOL FUN_02030F40(void); +extern void FUN_02055304(u32 param0, u32 param1); +extern void FUN_02039460(struct UnkSavStruct80 *arg); +extern void FUN_020545B8(u32 param0, u8 *param1, u32 param2); +extern void FUN_02054608(u8 *param0, struct Options *options); +extern void FUN_0200D0E0(u32 *param0, u32 param1); +extern void FUN_02019178(u32 *param0); +extern void FUN_020179E0(u32 param0, u32 param1, u32 param2, u16 val); +extern u32 FUN_02058510(u32 param0, u32 param1); +extern void MOD05_021E8128(u32 param0, u8 type, u16 map); +extern void MOD05_021E8130(u32 param0, u32 param1); +extern void MOD05_021E8158(struct UnkSavStruct80 *unk80); +extern u32 MOD05_021E8140(u32 param0); +extern BOOL MOD05_021E8148(u32 param0); +extern u8 FUN_02054658(u32 param0, struct String *str, struct Options *opt, u32 param3); +extern void MOD05_021E8144(u32 param0); +extern void FUN_0200CB00(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5); +extern u32 Std_CreateYesNoMenu(u32 param0, u8 **param1, u32 param2, u32 param3, u32 param4); +extern u32 FUN_020021AC(u32 param0, u32 param1); +extern u32 FUN_0200D858(u32 *param0, u32 param1); +extern void FUN_0200DBFC(u32 param0); +extern u32 MOD05_021E1BF8(struct UnkSavStruct80 *arg, u8 param1, u8 param2, u8 param3, u8 param4, u16 *param5, u32 param6, u32 *param7, struct MsgData *msgData); +extern void MOD05_021E1C4C(u32 param0, u32 param1, u32 param2); +extern void MOD05_021E1C54(u32 param0); +extern u32 FUN_02052714(u32 param0); +extern void MOD05_021E1ECC(u32 param0); +extern u32 MOD05_021E1F34(struct UnkSavStruct80 *arg, u8 param1, u8 param2, u8 param3, u8 param4, u16 *param5, u32 param6, u32 *param7, struct MsgData *msgData); +extern void MOD05_021E1F58(u32 param0, u8 param1, u8 param2, u8 param3); +extern void MOD05_021E1F60(u32 param0); +extern void MOD05_021E26CC(u32 param0, u8 param1); +extern void MOD05_021E2B80(u32 param0, u8 param1); +extern void MOD05_021E2B9C(u32 param0, u8 param1); + +extern u8 *UNK_020F34E0; + +static BOOL RunPauseTimer(struct ScriptContext *ctx); +static u32 Compare(u16 a, u16 b); +static BOOL FUN_02039CC8(struct ScriptContext *ctx); +/*static*/ BOOL FUN_0203A2F0(struct ScriptContext *ctx); +static BOOL FUN_0203A46C(struct ScriptContext *ctx); +static BOOL FUN_0203A4AC(struct ScriptContext *ctx); +static BOOL FUN_0203A4E0(struct ScriptContext *ctx); +static BOOL FUN_0203A570(struct ScriptContext *ctx); +static BOOL FUN_0203A6C8(struct ScriptContext *ctx); +static BOOL FUN_0203A8A0(struct ScriptContext *ctx); +static BOOL FUN_0203A94C(struct ScriptContext *ctx); +static BOOL FUN_0203AA0C(struct ScriptContext *ctx); +static BOOL FUN_0203AB00(struct ScriptContext *ctx); +static BOOL FUN_0203AD2C(struct ScriptContext *ctx); +static BOOL FUN_0203AD78(struct ScriptContext *ctx); + +extern u8 sScriptConditionTable[6][3]; + +THUMB_FUNC BOOL ScrCmd_Nop(struct ScriptContext *ctx) +{ +#pragma unused(ctx) + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Dummy(struct ScriptContext *ctx) +{ +#pragma unused(ctx) + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_End(struct ScriptContext *ctx) +{ + StopScript(ctx); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Wait(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *arg = ctx->unk80; + u16 num = ScriptReadHalfword(ctx); + u16 wk = ScriptReadHalfword(ctx); + u16* VarPointer = GetVarPointer(arg, wk); + *VarPointer = num; + ctx->data[0] = wk; + SetupNativeScript(ctx, RunPauseTimer); + return TRUE; +} + +THUMB_FUNC static BOOL RunPauseTimer(struct ScriptContext *ctx) +{ + u16* VarPointer = GetVarPointer(ctx->unk80, (u16)ctx->data[0]); + *VarPointer = (u16)(*VarPointer - 1); + return !(*VarPointer); +} + +THUMB_FUNC BOOL ScrCmd_DebugWatch(struct ScriptContext *ctx) +{ + u16 wk = ScriptReadHalfword(ctx); + VarGet(ctx->unk80, wk); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_LoadByte(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + ctx->data[index] = ScriptReadByte(ctx); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_LoadWord(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + ctx->data[index] = ScriptReadWord(ctx); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_LoadByteFromAddr(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + ctx->data[index] = *(u8 *)ScriptReadWord(ctx); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_WriteByteToAddr(struct ScriptContext *ctx) +{ + u8* ptr = (u8*)ScriptReadWord(ctx); + *ptr = ScriptReadByte(ctx); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetPtrByte(struct ScriptContext *ctx) +{ + u8* ptr = (u8*)ScriptReadWord(ctx); + *ptr = (u8)ctx->data[ScriptReadByte(ctx)]; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CopyLocal(struct ScriptContext *ctx) +{ + u8 index_store = ScriptReadByte(ctx); + u8 index_load = ScriptReadByte(ctx); + ctx->data[index_store] = ctx->data[index_load]; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CopyByte(struct ScriptContext *ctx) +{ + u8 *target = (u8 *)ScriptReadWord(ctx); + u8 *source = (u8 *)ScriptReadWord(ctx); + *target = *source; + return FALSE; +} + +THUMB_FUNC static u32 Compare(u16 a, u16 b) +{ + if (a < b) + { + return 0; + } + else if (a == b) + { + return 1; + } + else + { + return 2; + } +} + +THUMB_FUNC BOOL ScrCmd_CompareLocalToLocal(struct ScriptContext *ctx) +{ + u8 a = (u8)ctx->data[ScriptReadByte(ctx)]; + u8 b = (u8)ctx->data[ScriptReadByte(ctx)]; + ctx->comparisonResult = (u8)Compare(a, b); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CompareLocalToValue(struct ScriptContext *ctx) +{ + u8 a = (u8)ctx->data[ScriptReadByte(ctx)]; + u8 b = ScriptReadByte(ctx); + ctx->comparisonResult = (u8)Compare(a, b); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CompareLocalToAddr(struct ScriptContext *ctx) +{ + u8 a = (u8)ctx->data[ScriptReadByte(ctx)]; + u8 b = *(u8*)ScriptReadWord(ctx); + ctx->comparisonResult = (u8)Compare(a, b); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CompareAddrToLocal(struct ScriptContext *ctx) +{ + u8 a = *(u8*)ScriptReadWord(ctx); + u8 b = (u8)ctx->data[ScriptReadByte(ctx)]; + ctx->comparisonResult = (u8)Compare(a, b); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CompareAddrToValue(struct ScriptContext *ctx) +{ + u8 a = *(u8*)ScriptReadWord(ctx); + u8 b = (u8)ScriptReadByte(ctx); + ctx->comparisonResult = (u8)Compare(a, b); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CompareAddrToAddr(struct ScriptContext *ctx) +{ + u8 a = *(u8*)ScriptReadWord(ctx); + u8 b = *(u8*)ScriptReadWord(ctx); + ctx->comparisonResult = (u8)Compare(a, b); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CompareVarToValue(struct ScriptContext *ctx) +{ + u16 a = *GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 b = ScriptReadHalfword(ctx); + ctx->comparisonResult = (u8)Compare(a, b); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CompareVarToVar(struct ScriptContext *ctx) +{ + u16 *a = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 *b = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + ctx->comparisonResult = (u8)Compare(*a, *b); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_RunScript(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u8 *unk1 = (u8 *)FUN_02039438(unk80, 0x7); + u32 **unk2 = (u32 **)FUN_02039438(unk80, 0xe); + u16 id = ScriptReadHalfword(ctx); + + *unk2 = CreateScriptContext(unk80, id); + *unk1 = (u8)(*unk1 + 1); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_RunScriptWait(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u8 *unk1 = (u8 *)FUN_02039438(unk80, 0x5); + u8 *unk2 = (u8 *)FUN_02039438(unk80, 0x7); + u32 **unk3 = (u32 **)FUN_02039438(unk80, 0xe); + + u16 id = ScriptReadHalfword(ctx); + *unk1 = 1; + *unk3 = CreateScriptContext(unk80, id); + *unk2 = (u8)(*unk2 + 1); + + SetupNativeScript(ctx, FUN_02039CC8); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_02039CC8(struct ScriptContext *ctx) +{ + u8* unk = FUN_02039438(ctx->unk80, 0x5); + + if (*unk == 0) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_RestartCurrentScript(struct ScriptContext *ctx) +{ + u8* unk = (u8 *)FUN_02039438(ctx->unk80, 0x5); + + *unk = 0; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GoTo(struct ScriptContext *ctx) +{ + s32 offset = (s32)ScriptReadWord(ctx); + ScriptJump(ctx, ctx->scriptPtr + offset); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ObjectGoTo(struct ScriptContext *ctx) +{ + u32* unk = FUN_02039438(ctx->unk80, 0xa); + u8 id = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + if (FUN_02058448(*unk) == id) + { + ScriptJump(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_BgGoTo(struct ScriptContext *ctx) +{ + u32 bgId = FUN_02046534(ctx->unk74); + u8 id = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + + if (bgId == id) + { + ScriptJump(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_DirectionGoTo(struct ScriptContext *ctx) +{ + u32 *playerDirection = FUN_02039438(ctx->unk80, 0x9); + u8 dir = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + + if (*playerDirection == dir) + { + ScriptJump(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Call(struct ScriptContext *ctx) +{ + s32 offset = (s32)ScriptReadWord(ctx); + ScriptCall(ctx, ctx->scriptPtr + offset); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Return(struct ScriptContext *ctx) +{ + ScriptReturn(ctx); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GoToIf(struct ScriptContext *ctx) +{ + u8 compareType = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + + if (sScriptConditionTable[compareType][ctx->comparisonResult] == TRUE) + { + ScriptJump(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CallIf(struct ScriptContext *ctx) +{ + u8 compareType = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + + if (sScriptConditionTable[compareType][ctx->comparisonResult] == TRUE) + { + ScriptCall(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetFlag(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 flag = ScriptReadHalfword(ctx); + FlagSet(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ClearFlag(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 flag = ScriptReadHalfword(ctx); + FlagClear(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckFlag(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 flag = ScriptReadHalfword(ctx); + ctx->comparisonResult = FlagCheck(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckFlagVar(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 *wk2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + *wk2 = FlagCheck(unk80, *wk1); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetFlagVar(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 *wk = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + FlagSet(unk80, *wk); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetTrainerFlag(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 flag = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + TrainerFlagSet(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ClearTrainerFlag(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 flag = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + TrainerFlagClear(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckTrainerFlag(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 flag = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + ctx->comparisonResult = TrainerFlagCheck(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_AddVar(struct ScriptContext *ctx) +{ + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 wk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + *wk1 = (u16)(*wk1 + wk2); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SubVar(struct ScriptContext *ctx) +{ + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 wk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + *wk1 = (u16)(*wk1 - wk2); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetVar(struct ScriptContext *ctx) +{ + u16 *wk = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + *wk = ScriptReadHalfword(ctx); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CopyVar(struct ScriptContext *ctx) +{ + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 *wk2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + *wk1 = *wk2; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetOrCopyVar(struct ScriptContext *ctx) +{ + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 wk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + *wk1 = wk2; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Message(struct ScriptContext *ctx) +{ + u8 id = ScriptReadByte(ctx); + MOD05_ShowMessageInField(ctx, ctx->msgData, id); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_MessageFrom(struct ScriptContext *ctx) +{ + u16 arc = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 msg = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct MsgData *msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, arc, 32); + MOD05_ShowMessageInField(ctx, msgData, msg); + DestroyMsgData(msgData); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_MessageFrom2(struct ScriptContext *ctx) +{ + u16 arc = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 msg = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct MsgData *msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, arc, 32); + MOD05_021E2BD0(ctx, msgData, msg, 1, NULL); + DestroyMsgData(msgData); + SetupNativeScript(ctx, FUN_0203A2F0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01FC(struct ScriptContext *ctx) +{ + u16 typ = ScriptReadHalfword(ctx); + u16 id = ScriptReadHalfword(ctx); + u16 word1 = ScriptReadHalfword(ctx); + s16 word2 = (s16)ScriptReadHalfword(ctx); + + MOD05_021E2C58(ctx, typ, id, word1, word2, 0xff); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01FD(struct ScriptContext *ctx) +{ + u16 typ = ScriptReadHalfword(ctx); + u16 id = ScriptReadHalfword(ctx); + u16 word1 = ScriptReadHalfword(ctx); + s16 word2 = (s16)ScriptReadHalfword(ctx); + + MOD05_021E2C58(ctx, typ, id, word1, word2, 1); + SetupNativeScript(ctx, FUN_0203A2F0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01FE(struct ScriptContext *ctx) +{ + u8 id = ScriptReadByte(ctx); + + if (ctx->unk80->unkA8 == NULL) + { + return FALSE; + } + + u16 *unkArr = ctx->unk80->unkA8->unk90[id].unk0; + if (unkArr[0] == 0xFFFF) + { + struct MsgData *msgdata = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 0x22b, 32); + MOD05_021E2BD0(ctx, msgdata, unkArr[1], 1, NULL); + DestroyMsgData(msgdata); + } + else + { + MOD05_021E2C58(ctx, unkArr[0], unkArr[1], unkArr[2], (s16)unkArr[3], 1); + } + SetupNativeScript(ctx, FUN_0203A2F0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01FF(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u8 msg = ScriptReadByte(ctx); + u16 poke = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 sex = ScriptReadHalfword(ctx); + u8 flag = ScriptReadByte(ctx); + u8 unk = 0; + + struct ScrStrBufs *str = MOD06_02244210(unk80->saveBlock2, poke, sex, flag, &unk); + MOD05_021E2CBC(ctx, str, (u8)(msg + unk), 1); + ScrStrBufs_delete(str); + + SetupNativeScript(ctx, FUN_0203A2F0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk026D(struct ScriptContext *ctx) //message unown font? +{ + struct UnkStruct_0203A288 myLocalStruct; + u16 msg = ScriptReadHalfword(ctx); + + MOD05_021E2BB8(&myLocalStruct, ctx); + myLocalStruct.unk2 = 3; + + MOD05_021E2BD0(ctx, ctx->msgData, msg, 0, &myLocalStruct); + SetupNativeScript(ctx, FUN_0203A2F0); + + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk002C(struct ScriptContext *ctx) +{ + u8 msg = ScriptReadByte(ctx); + MOD05_021E2BD0(ctx, ctx->msgData, msg, 1, NULL); + SetupNativeScript(ctx, FUN_0203A2F0); + return TRUE; +} + +THUMB_FUNC /*static*/ BOOL FUN_0203A2F0(struct ScriptContext *ctx) +{ + u8 *unk = (u8 *)FUN_02039438(ctx->unk80, 3); + return FUN_020546C8(*unk); +} + +THUMB_FUNC BOOL ScrCmd_Unk002D(struct ScriptContext *ctx) +{ + u16 msg = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + MOD05_021E2BD0(ctx, ctx->msgData, (u8)msg, 1, NULL); + SetupNativeScript(ctx, FUN_0203A2F0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk02C0(struct ScriptContext *ctx) +{ + struct UnkStruct_0203A288 myLocalStruct; + u16 msg = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + MOD05_021E2BB8(&myLocalStruct, ctx); + myLocalStruct.unk1 = 1; + + MOD05_021E2BD0(ctx, ctx->msgData, (u8)msg, 1, &myLocalStruct); + SetupNativeScript(ctx, FUN_0203A2F0); + + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk002E(struct ScriptContext *ctx) +{ + u16 msg = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + MOD05_021E2BD0(ctx, ctx->msgData, (u8)msg, 0, NULL); + SetupNativeScript(ctx, FUN_0203A2F0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk020C(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 0xa); + u8 msg = (u8)FUN_02058488(*unk); + MOD05_021E2BD0(ctx, ctx->msgData, msg, 1, NULL); + SetupNativeScript(ctx, FUN_0203A2F0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk002F(struct ScriptContext *ctx) +{ + u8 msg = ScriptReadByte(ctx); + + if (!FUN_02030F40()) + { + MOD05_021E2BD0(ctx, ctx->msgData, msg, 1, NULL); + } + else + { + struct UnkStruct_0203A288 myLocalStruct; + MOD05_021E2BB8(&myLocalStruct, ctx); + myLocalStruct.unk0 = 1; + myLocalStruct.unk1 = 1; + MOD05_021E2BD0(ctx, ctx->msgData, msg, 0, &myLocalStruct); + } + + SetupNativeScript(ctx, FUN_0203A2F0); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_WaitButtonAB(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, FUN_0203A46C); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203A46C(struct ScriptContext *ctx) +{ +#pragma unused(ctx) + if (gMain.unk48 & 0x3) // Mask (A | B) ? + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_WaitButtonABTime(struct ScriptContext *ctx) +{ + ctx->data[0] = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + SetupNativeScript(ctx, FUN_0203A4AC); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203A4AC(struct ScriptContext *ctx) +{ + if (gMain.unk48 & 0x3) // Mask (A | B) ? + { + return TRUE; + } + ctx->data[0] = ctx->data[0] - 1; + + if (ctx->data[0] == 0) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_WaitButton(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, FUN_0203A4E0); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203A4E0(struct ScriptContext *ctx) +{ + if (gMain.unk48 & 3) + { + return TRUE; + } + else if (gMain.unk48 & 0x40) + { + FUN_02055304(ctx->unk80->unk38, 0); + } + else if (gMain.unk48 & 0x80) + { + FUN_02055304(ctx->unk80->unk38, 1); + } + else if (gMain.unk48 & 0x20) + { + FUN_02055304(ctx->unk80->unk38, 2); + } + else if (gMain.unk48 & 0x10) + { + FUN_02055304(ctx->unk80->unk38, 3); + } + else if (gMain.unk48 & 0x400) + { + FUN_02039460(ctx->unk80); + } + else + { + return FALSE; + } + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0032(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, FUN_0203A570); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203A570(struct ScriptContext *ctx) +{ +#pragma unused(ctx) + if (gMain.unk48 & 0x3) + { + return TRUE; + } + else if (gMain.unk48 & 0xf0) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0033(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u8 *unk = (u8 *)FUN_02039438(unk80, 6); + FUN_020545B8(unk80->unk08, FUN_02039438(unk80, 1), 3); + FUN_02054608(FUN_02039438(unk80, 1), Sav2_PlayerData_GetOptionsAddr(ctx->unk80->saveBlock2)); + *unk = 1; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0034(struct ScriptContext* ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u32 *unk = FUN_02039438(unk80, 0x1); //windowID? + u8 *unk2 = FUN_02039438(unk80, 0x6); + FUN_0200D0E0(unk, 0); //clear window? + FUN_02019178(unk); + *unk2 = 0; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0035(struct ScriptContext* ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u32 *unk = FUN_02039438(unk80, 0x1); //windowID? + u8 *unk2 = FUN_02039438(unk80, 0x6); + FUN_02019178(unk); + *unk2 = 0; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ScrollBg(struct ScriptContext* ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 *xval = FUN_02039438(unk80, 0x31); + u16 *xcnt = FUN_02039438(unk80, 0x2d); + u16 *xdir = FUN_02039438(unk80, 0x32); + u16 *yval = FUN_02039438(unk80, 0x33); + u16 *ycnt = FUN_02039438(unk80, 0x2e); + u16 *ydir = FUN_02039438(unk80, 0x34); + + *xval = ScriptReadByte(ctx); + *xcnt = ScriptReadByte(ctx); + *xdir = ScriptReadByte(ctx); + *yval = ScriptReadByte(ctx); + *ycnt = ScriptReadByte(ctx); + *ydir = ScriptReadByte(ctx); + + SetupNativeScript(ctx, FUN_0203A6C8); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203A6C8(struct ScriptContext* ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 *xval = FUN_02039438(unk80, 0x31); + u16 *xdir = FUN_02039438(unk80, 0x32); + u16 *yval = FUN_02039438(unk80, 0x33); + u16 *ydir = FUN_02039438(unk80, 0x34); + u16 *xcnt = FUN_02039438(unk80, 0x2d); + u16 *ycnt = FUN_02039438(unk80, 0x2e); + + if (*xcnt == 0 && *ycnt == 0) + { + return TRUE; + } + + if (*xval != 0) + { + if (*xdir == 0) + { + FUN_020179E0(unk80->unk08, 3, 1, *xval); + } + else + { + FUN_020179E0(unk80->unk08, 3, 2, *xval); + } + } + + if (*yval != 0) + { + if (*ydir == 0) + { + FUN_020179E0(unk80->unk08, 3, 4, *yval); + } + else + { + FUN_020179E0(unk80->unk08, 3, 5, *yval); + } + } + + if (*xcnt != 0) + { + *xcnt = (u16)(*xcnt - 1); + } + + if (*ycnt != 0) + { + *ycnt = (u16)(*ycnt - 1); + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CreateMessageBox(struct ScriptContext* ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + struct String **unk1 = FUN_02039438(unk80, 0x11); + struct String **unk2 = FUN_02039438(unk80, 0x10); + struct ScrStrBufs **unk3 = FUN_02039438(unk80, 0x0f); + u8 typ, msg; + u16 wk, map; + + msg = ScriptReadByte(ctx); + typ = ScriptReadByte(ctx); + map = ScriptReadHalfword(ctx); + wk = ScriptReadHalfword(ctx); + + if (map == 0) + { + u32 *unk4 = FUN_02039438(unk80, 10); + map = (u16)FUN_02058510(*unk4, 0); + } + + MOD05_021E8128(unk80->unk60, typ, map); + MOD05_021E8130(unk80->unk60, 1); + MOD05_021E8158(unk80); + ReadMsgDataIntoString(ctx->msgData, msg, *unk1); + StringExpandPlaceholders(*unk3, *unk2, *unk1); + AddTextPrinterParameterized(MOD05_021E8140(unk80->unk60), 1, (u16 *)*unk2, 0, 0, 0, NULL); + + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0037(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u8 typ = ScriptReadByte(ctx); + u16 map = ScriptReadHalfword(ctx); + + MOD05_021E8128(unk80->unk60, typ, map); + MOD05_021E8130(unk80->unk60, 1); + + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0038(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u8 req = ScriptReadByte(ctx); + MOD05_021E8130(unk80->unk60, req); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0039(struct ScriptContext *ctx) +{ + if (MOD05_021E8148(ctx->unk80->unk60) == TRUE) + { + return FALSE; + } + + SetupNativeScript(ctx, FUN_0203A8A0); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203A8A0(struct ScriptContext *ctx) +{ + if (MOD05_021E8148(ctx->unk80->unk60) == TRUE) + { + return TRUE; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk003A(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u8 *unk1 = FUN_02039438(unk80, 3); + struct String **unk2 = FUN_02039438(unk80, 17); + struct String **unk3 = FUN_02039438(unk80, 16); + struct ScrStrBufs **unk4 = FUN_02039438(unk80, 15); + + u8 msg = ScriptReadByte(ctx); + u16 wk = ScriptReadHalfword(ctx); + + ReadMsgDataIntoString(ctx->msgData, msg, *unk2); + StringExpandPlaceholders(*unk4, *unk3, *unk2); + + *unk1 = FUN_02054658(MOD05_021E8140(unk80->unk60), *unk3, Sav2_PlayerData_GetOptionsAddr(ctx->unk80->saveBlock2), 1); + ctx->data[0] = wk; + SetupNativeScript(ctx, FUN_0203A94C); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203A94C(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u8 *unk1 = FUN_02039438(unk80, 3); + u16 *varPtr = GetVarPointer(unk80, (u16)ctx->data[0]); + MOD05_021E8144(unk80->unk60); + + u32 tmp = 0xFFFF; + if (FUN_020546C8(*unk1) == TRUE) + { + *varPtr = 2; + return TRUE; + } + + if (gMain.unk48 & 0x40) + { + tmp = 0; + } + else if (gMain.unk48 & 0x80) + { + tmp = 1; + } + else if (gMain.unk48 & 0x20) + { + tmp = 2; + } + else if (gMain.unk48 & 0x10) + { + tmp = 3; + } + + if (tmp != 0xFFFF) + { + FUN_0201BD7C(*unk1); + FUN_02055304(ctx->unk80->unk38, tmp); + *varPtr = 0; + return TRUE; + } + else + { + if (gMain.unk48 & 0x400) + { + FUN_0201BD7C(*unk1); + *varPtr = 1; + return TRUE; + } + return FALSE; + } +} + +THUMB_FUNC BOOL ScrCmd_Unk003B(struct ScriptContext *ctx) +{ + ctx->data[0] = ScriptReadHalfword(ctx); + + SetupNativeScript(ctx, FUN_0203AA0C); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203AA0C(struct ScriptContext *ctx) +{ + u16 *unk = GetVarPointer(ctx->unk80, (u16)ctx->data[0]); + + u32 tmp = 0xFFFF; + if (gMain.unk48 & 0x3) + { + *unk = 0; + return TRUE; + } + else if (gMain.unk48 & 0x40) + { + tmp = 0; + } + else if (gMain.unk48 & 0x80) + { + tmp = 1; + } + else if (gMain.unk48 & 0x20) + { + tmp = 2; + } + else if (gMain.unk48 & 0x10) + { + tmp = 3; + } + + if (tmp != 0xFFFF) + { + FUN_02055304(ctx->unk80->unk38, tmp); + *unk = 0; + return TRUE; + } + else + { + if (gMain.unk48 & 0x400) + { + *unk = 1; + return TRUE; + } + else + { + return FALSE; + } + } +} + +THUMB_FUNC BOOL ScrCmd_Menu(struct ScriptContext *ctx) +{ + FUN_02039460(ctx->unk80); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_YesNoMenu(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u32 *unk = FUN_02039438(unk80, 2); + u16 wk = ScriptReadHalfword(ctx); + FUN_0200CB00(unk80->unk08, 3, 985, 11, 0, 4); + *unk = Std_CreateYesNoMenu(unk80->unk08, &UNK_020F34E0, 985, 11, 4); + ctx->data[0] = wk; + SetupNativeScript(ctx, FUN_0203AB00); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203AB00(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u32 *unk = FUN_02039438(unk80, 2); + u16 *ptr = GetVarPointer(unk80, (u16)ctx->data[0]); + u32 unk2 = FUN_020021AC(*unk, 4); + + if (unk2 == -1) + { + return FALSE; + } + + if (unk2 == 0) + { + *ptr = 0; + } + else + { + *ptr = 1; + } + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_ShowSaveClock(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 1); + u32 *unk2 = FUN_02039438(ctx->unk80, 18); + *unk2 = FUN_0200D858(unk, 994); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HideSaveClock(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 18); + FUN_0200DBFC(*unk); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0040(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u32 *unk = FUN_02039438(unk80, 0); + u32 *unk2 = FUN_02039438(unk80, 15); + u8 unk3 = ScriptReadByte(ctx); + u8 unk4 = ScriptReadByte(ctx); + u8 unk5 = ScriptReadByte(ctx); + u8 unk6 = ScriptReadByte(ctx); + u16 unk7 = ScriptReadHalfword(ctx); + u16 *ptr = GetVarPointer(unk80, unk7); + u32 *unk8 = FUN_02039438(ctx->unk80, 1); + *unk = MOD05_021E1BF8(unk80, unk3, unk4, unk5, unk6, ptr, *unk2, unk8, NULL); + ctx->data[0] = unk7; + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0041(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u32 *unk = FUN_02039438(unk80, 0); + u32 *unk2 = FUN_02039438(unk80, 15); + u8 unk3 = ScriptReadByte(ctx); + u8 unk4 = ScriptReadByte(ctx); + u8 unk5 = ScriptReadByte(ctx); + u8 unk6 = ScriptReadByte(ctx); + u16 unk7 = ScriptReadHalfword(ctx); + u16 *ptr = GetVarPointer(unk80, unk7); + u32 *unk8 = FUN_02039438(ctx->unk80, 1); + *unk = MOD05_021E1BF8(unk80, unk3, unk4, unk5, unk6, ptr, *unk2, unk8, ctx->msgData); + ctx->data[0] = unk7; + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0042(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 0); + u8 unk2 = ScriptReadByte(ctx); + u8 unk3 = ScriptReadByte(ctx); + MOD05_021E1C4C(*unk, unk2, unk3); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk029D(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u32 *unk = FUN_02039438(unk80, 0); + u16 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk3 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + MOD05_021E1C4C(*unk, unk2, unk3); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0043(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 0); + MOD05_021E1C54(*unk); + SetupNativeScript(ctx, FUN_0203AD2C); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203AD2C(struct ScriptContext *ctx) +{ + u16 *varPtr = GetVarPointer(ctx->unk80, (u16)ctx->data[0]); + if (*varPtr == 0xEEEE) + { + return FALSE; + } + else + { + return TRUE; + } +} + +THUMB_FUNC BOOL ScrCmd_Unk02B9(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 0); + MOD05_021E1C54(*unk); + SetupNativeScript(ctx, FUN_0203AD78); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_0203AD78(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u16 *varPtr = GetVarPointer(unk80, (u16)ctx->data[0]); + u32 *unk = FUN_02039438(unk80, 0); + + if (*varPtr == 0xEEEE) + { + if (FUN_02052714(unk80->unk78)) + { + *varPtr = 8; + MOD05_021E1ECC(*unk); + return TRUE; + } + else + { + return FALSE; + } + } + else + { + return TRUE; + } +} + +THUMB_FUNC BOOL ScrCmd_Unk0044(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u32 *unk = FUN_02039438(unk80, 0); + u32 *unk2 = FUN_02039438(unk80, 15); + u8 unk3 = ScriptReadByte(ctx); + u8 unk4 = ScriptReadByte(ctx); + u8 unk5 = ScriptReadByte(ctx); + u8 unk6 = ScriptReadByte(ctx); + + u16 halfWord = ScriptReadHalfword(ctx); + u16 *varPtr = GetVarPointer(unk80, halfWord); + u32 *unk7 = FUN_02039438(ctx->unk80, 1); + *unk = MOD05_021E1F34(unk80, unk3, unk4, unk5, unk6, varPtr, *unk2, unk7, NULL); + ctx->data[0] = halfWord; + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0045(struct ScriptContext *ctx) +{ + struct UnkSavStruct80 *unk80 = ctx->unk80; + u32 *unk = FUN_02039438(unk80, 0); + u32 *unk2 = FUN_02039438(unk80, 15); + u8 unk3 = ScriptReadByte(ctx); + u8 unk4 = ScriptReadByte(ctx); + u8 unk5 = ScriptReadByte(ctx); + u8 unk6 = ScriptReadByte(ctx); + + u16 halfWord = ScriptReadHalfword(ctx); + u16 *varPtr = GetVarPointer(unk80, halfWord); + u32 *unk7 = FUN_02039438(ctx->unk80, 1); + *unk = MOD05_021E1F34(unk80, unk3, unk4, unk5, unk6, varPtr, *unk2, unk7, ctx->msgData); + ctx->data[0] = halfWord; + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0046(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 0); + u16 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk3 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk4 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + MOD05_021E1F58(*unk, (u8)unk2, (u8)unk3, (u8)unk4); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0047(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 0); + MOD05_021E1F60(*unk); + SetupNativeScript(ctx, FUN_0203AD2C); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0048(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 0); + MOD05_021E26CC(*unk, ScriptReadByte(ctx)); + SetupNativeScript(ctx, FUN_0203AD2C); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk02CF(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 0); + MOD05_021E2B80(*unk, ScriptReadByte(ctx)); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk02D0(struct ScriptContext *ctx) +{ + u32 *unk = FUN_02039438(ctx->unk80, 0); + MOD05_021E2B9C(*unk, ScriptReadByte(ctx)); + return TRUE; +} diff --git a/arm9/src/scrcmd_11.c b/arm9/src/scrcmd_11.c new file mode 100644 index 00000000..8553adfa --- /dev/null +++ b/arm9/src/scrcmd_11.c @@ -0,0 +1,120 @@ +#include "scrcmd.h" +#include "unk_02029FB0.h" + +extern void* FUN_02039438(struct UnkSavStruct80*, int idx); + +extern void FUN_0202A0E8(struct UnkStruct_02029FB0*, int); +extern void FUN_0202A170(struct UnkStruct_02029FB0*, int); +extern u8 FUN_0204B5FC(struct UnkSavStruct80*, void*); +extern void FUN_0204B57C(struct UnkSavStruct80*, void*, int); +extern u16 FUN_0204B63C(struct UnkSavStruct80*, void*); +extern u16 FUN_0204B660(struct UnkSavStruct80*, void*); +extern u16 FUN_0204B684(struct UnkSavStruct80*, void*); +extern u16 FUN_0204B6A4(struct UnkSavStruct80*, void*); +extern void FUN_0204B9CC(struct UnkSavStruct80*); +extern void FUN_0204B5A8(struct UnkSavStruct80*, void*, u16); +extern void FUN_0204B9A0(struct UnkSavStruct80*); +extern void FUN_0204B4FC(struct UnkSavStruct80*, void*); + +THUMB_FUNC BOOL ScrCmd_Unk017D(struct ScriptContext* ctx) +{ + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + void** unk = FUN_02039438(ctx->unk80, 10); + + *ret_ptr = FUN_0204B5FC(ctx->unk80, *unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk017E(struct ScriptContext* ctx) +{ + void** unk = FUN_02039438(ctx->unk80, 10); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = FUN_0204B63C(ctx->unk80, *unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk017F(struct ScriptContext* ctx) +{ + void** unk = FUN_02039438(ctx->unk80, 10); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = FUN_0204B660(ctx->unk80, *unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0180(struct ScriptContext* ctx) +{ + void** unk = FUN_02039438(ctx->unk80, 10); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = FUN_0204B684(ctx->unk80, *unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0181(struct ScriptContext* ctx) +{ + void** unk = FUN_02039438(ctx->unk80, 10); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = FUN_0204B6A4(ctx->unk80, *unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0182(struct ScriptContext* ctx) +{ + void** unk = FUN_02039438(ctx->unk80, 10); + u16 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + FUN_0204B57C(ctx->unk80, *unk, unk2); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0183(struct ScriptContext* ctx) +{ + void** unk = FUN_02039438(ctx->unk80, 10); + struct UnkStruct_02029FB0* unk2 = FUN_02029FC8(ctx->unk80->saveBlock2); + u16 unk3 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + FUN_0204B5A8(ctx->unk80, *unk, unk3); + FUN_0202A0E8(unk2, 3); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0184(struct ScriptContext* ctx) +{ + u16 unk = ScriptReadHalfword(ctx); + + switch (unk) + { + case 0: + FUN_0204B9A0(ctx->unk80); + break; + case 1: + FUN_0204B9CC(ctx->unk80); + break; + default: + GF_ASSERT(FALSE); + break; + } + + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0185(struct ScriptContext* ctx) +{ + struct UnkStruct_02029FB0* unk = FUN_02029FC8(ctx->unk80->saveBlock2); + void** unk2 = FUN_02039438(ctx->unk80, 10); + + FUN_0204B4FC(ctx->unk80, *unk2); + FUN_0202A170(unk, 0); + + return FALSE; +} diff --git a/arm9/src/scrcmd_13.c b/arm9/src/scrcmd_13.c new file mode 100644 index 00000000..3b21facc --- /dev/null +++ b/arm9/src/scrcmd_13.c @@ -0,0 +1,111 @@ +#include "scrcmd.h" +#include "event_data.h" +#include "heap.h" +#include "pokedex.h" +#include "pokemon_storage_system.h" +#include "unk_0202C144.h" + +extern struct PCStorage* GetStoragePCPointer(struct SaveBlock2* sav2); +extern void* FUN_02022528(struct SaveBlock2* sav2); +extern void FUN_0202BEDC(struct Pokemon* pokemon); +extern void FUN_0202BFD8(void* a0, s32 a1, struct Pokemon* pokemon); +extern u16 FUN_0202C000(struct Pokemon* pokemon); +extern void FUN_0204B9EC(struct UnkSavStruct80*); +extern u32 FUN_0204BA1C(struct UnkSavStruct80*); +extern u16 FUN_0204BAC4(struct UnkSavStruct80*); +extern u16 FUN_0204BAD4(struct UnkSavStruct80*); +extern u16 FUN_0204BAE4(struct UnkSavStruct80*); +extern void FUN_0205F224(struct ScriptState* state); +extern void FUN_0205F234(struct ScriptState* state); +extern void FUN_0208089C(struct Pokemon* pokemon, struct PlayerData* player, u32 a2, u32 a3, u32 heap_id); + +THUMB_FUNC BOOL ScrCmd_Unk0253(struct ScriptContext* ctx) +{ + struct ScriptState* state = SavArray_Flags_get(ctx->unk80->saveBlock2); + u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + if (unk == 0) + { + FUN_0205F224(state); + FUN_0204B9EC(ctx->unk80); + } + else if (unk == 1) + { + FUN_0205F234(state); + FUN_0204BA1C(ctx->unk80); + } + else + { + GF_ASSERT(FALSE); + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0254(struct ScriptContext* ctx) +{ + void* unk = FUN_02022528(ctx->unk80->saveBlock2); + struct Pokemon* pokemon = AllocMonZeroed(32); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u16 eggs = FUN_0202C000(unk); + if (eggs == 6) { + *ret_ptr = 1; + } else { + *ret_ptr = 0; + } + + FreeToHeap(pokemon); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0255(struct ScriptContext* ctx) +{ + void* unk = FUN_02022528(ctx->unk80->saveBlock2); + struct PCStorage* pc = GetStoragePCPointer(ctx->unk80->saveBlock2); + struct Pokemon* pokemon = AllocMonZeroed(32); + struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(ctx->unk80->saveBlock2); + struct Pokedex* pokedex = Sav2_Pokedex_get(ctx->unk80->saveBlock2); // unused + + for (s32 i = 0; i < PARTY_SIZE; i++) + { + FUN_0202BFD8(unk, i, pokemon); + FUN_0208089C(pokemon, player, 2, 0, 32); + + struct BoxPokemon* box_mon = FUN_020690E4(pokemon); + GF_ASSERT(PCStorage_PlaceMonInFirstEmptySlotInAnyBox(pc, box_mon)); + + FUN_0202C144(ctx->unk80->saveBlock2, pokemon); + } + + FreeToHeap(pokemon); + FUN_0202BEDC(unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0256(struct ScriptContext* ctx) +{ + u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + switch (unk) + { + case 0: + *ret_ptr = FUN_0204BAC4(ctx->unk80); + break; + case 1: + *ret_ptr = FUN_0204BAD4(ctx->unk80); + break; + case 2: + *ret_ptr = FUN_0204BAE4(ctx->unk80); + break; + case 3: + // For some reason, mwcc puts the FUN_0204BAD4 call before the FUN_0204BAC4 and FUN_0204BAE4 calls. + *ret_ptr = (u16)(FUN_0204BAC4(ctx->unk80) + FUN_0204BAE4(ctx->unk80) + FUN_0204BAD4(ctx->unk80)); + break; + } + + return FALSE; +} diff --git a/arm9/src/scrcmd_18_c.c b/arm9/src/scrcmd_18_c.c index b8bbbcdd..d4437c5f 100644 --- a/arm9/src/scrcmd_18_c.c +++ b/arm9/src/scrcmd_18_c.c @@ -6,19 +6,17 @@ #include "map_header.h"
#include "scrcmd.h"
-extern u16 VarGet(struct UnkStruct_0204639C* arg, u16 wk);
-extern u16 *GetVarPointer(struct UnkStruct_0204639C* arg, u16);
extern BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u8 encounterType);
-THUMB_FUNC BOOL ScrCmd_givemon(struct ScriptContext* ctx)
+THUMB_FUNC BOOL ScrCmd_GiveMon(struct ScriptContext* ctx)
{
- u32 mapSec = FUN_02034824(*(ctx->unk80->unk1C));
- struct UnkStruct_0204639C *savePtr = ctx->unk80;
+ u32 mapSec = MapHeader_GetMapSec(*(ctx->unk80->mapId));
+ struct UnkSavStruct80 *savePtr = ctx->unk80;
u16 species = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 level = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 item = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 * varPtr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
- struct PlayerParty * party = SavArray_PlayerParty_get((struct SaveBlock2 *) savePtr->unkC);
- *varPtr = (u16)GiveMon(11, (struct SaveBlock2 *) savePtr->unkC, species, (u8)level, item, mapSec, 12);
+ struct PlayerParty * party = SavArray_PlayerParty_get(savePtr->saveBlock2);
+ *varPtr = (u16)GiveMon(11, savePtr->saveBlock2, species, (u8)level, item, mapSec, 12);
return FALSE;
}
diff --git a/arm9/src/scrcmd_19.c b/arm9/src/scrcmd_19.c new file mode 100644 index 00000000..b0a201b7 --- /dev/null +++ b/arm9/src/scrcmd_19.c @@ -0,0 +1,86 @@ +#include "scrcmd.h" +#include "bag.h" + +const u16 UNK_020F450C[7][2] = { + { 0x0067, 0x008E }, + { 0x0065, 0x008A }, + { 0x0066, 0x008C }, + { 0x0063, 0x0159 }, + { 0x0064, 0x015B }, + { 0x0068, 0x019A }, + { 0x0069, 0x0198 }, +}; + +THUMB_FUNC BOOL ScrCmd_Unk01F1(struct ScriptContext * ctx) +{ + struct UnkSavStruct80 * sav_ptr = ctx->unk80; + + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u8 i; + u16 total; + for (i = 0, total = 0; i < 7; i++) + { + total += Bag_GetQuantity(Sav2_Bag_get(sav_ptr->saveBlock2), UNK_020F450C[i][0], 4); + } + + *ret_ptr = total; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01F4(struct ScriptContext * ctx) +{ + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = 0; + + for (u16 i = 0; i < 7; i++) + { + if (UNK_020F450C[i][0] == unk) + { + *ret_ptr = UNK_020F450C[i][1]; + break; + } + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01F5(struct ScriptContext * ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + u16 * ret_ptr1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 * ret_ptr2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 needed_amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr1 = 0; + *ret_ptr2 = 0; + + u8 i = 0; + u16 total = 0; + for (; i < 7; i++) + { + total += Bag_GetQuantity(Sav2_Bag_get(sav_ptr->saveBlock2), UNK_020F450C[i][0], 4); + if (total >= needed_amount) + { + *ret_ptr1 = UNK_020F450C[i][0]; + *ret_ptr2 = i; + break; + } + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01F2(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01F3(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + return FALSE; +} diff --git a/arm9/src/scrcmd_20.c b/arm9/src/scrcmd_20.c new file mode 100644 index 00000000..882126a0 --- /dev/null +++ b/arm9/src/scrcmd_20.c @@ -0,0 +1,35 @@ +#include "scrcmd.h" + +const u16 UNK_020F452A[19][2] = { + { 0x00FB, 0x03E8 }, + { 0x0109, 0x03E8 }, + { 0x0114, 0x03E8 }, + { 0x0115, 0x03E8 }, + { 0x01A1, 0x07D0 }, + { 0x0181, 0x07D0 }, + { 0x0192, 0x0FA0 }, + { 0x0167, 0x0FA0 }, + { 0x0173, 0x1770 }, + { 0x01A0, 0x1770 }, + { 0x0151, 0x1770 }, + { 0x0162, 0x1F40 }, + { 0x015C, 0x1F40 }, + { 0x016A, 0x2710 }, + { 0x015F, 0x2710 }, + { 0x0154, 0x2710 }, + { 0x0164, 0x2710 }, + { 0x0191, 0x3A98 }, + { 0x018B, 0x4E20 }, +}; + +THUMB_FUNC BOOL ScrCmd_Unk02A6(struct ScriptContext * ctx) +{ + u16 idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 * ret_ptr1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 * ret_ptr2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr1 = UNK_020F452A[idx][0]; + *ret_ptr2 = UNK_020F452A[idx][1]; + + return FALSE; +} diff --git a/arm9/src/scrcmd_23.c b/arm9/src/scrcmd_23.c new file mode 100644 index 00000000..0c9907a5 --- /dev/null +++ b/arm9/src/scrcmd_23.c @@ -0,0 +1,169 @@ +#include "scrcmd.h" + +extern BOOL FUN_02025D6C(void*, u16); +extern BOOL FUN_02025D94(void*, u16); +extern BOOL FUN_02026298(void*, u16); +extern void* FUN_02026CC4(struct SaveBlock2* sav2); +extern BOOL FUN_020260C4(void*, u16, u16); + +THUMB_FUNC BOOL ScrCmd_Unk0083(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + u16 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + void* unk2 = FUN_02026CC4(sav2); + + *ret_ptr = (u16)FUN_02025D6C(unk2, unk1); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0084(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0085(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + u16 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + void* unk2 = FUN_02026CC4(sav2); + + *ret_ptr = (u16)FUN_02025D94(unk2, unk1); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0086(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0087(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + u16 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + void* unk2 = FUN_02026CC4(sav2); + + *ret_ptr = (u16)FUN_02026298(unk2, unk1); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0088(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0089(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk008A(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk008B(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + void* unused3 = FUN_02026CC4(sav2); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk008C(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk008D(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk008E(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk008F(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + u16 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + void* unk3 = FUN_02026CC4(sav2); + + *ret_ptr = (u16)FUN_020260C4(unk3, unk1, unk2); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0090(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0091(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0092(struct ScriptContext* ctx) +{ + u16 unused1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + return FALSE; +} diff --git a/arm9/src/scrcmd_25.c b/arm9/src/scrcmd_25.c new file mode 100644 index 00000000..5124ad9a --- /dev/null +++ b/arm9/src/scrcmd_25.c @@ -0,0 +1,27 @@ +#include "scrcmd.h" + +THUMB_FUNC BOOL ScrCmd_Unk023F(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + GF_ASSERT(FALSE); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0240(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + GF_ASSERT(FALSE); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0241(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0242(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + return FALSE; +} diff --git a/arm9/src/scrcmd_coins.c b/arm9/src/scrcmd_coins.c new file mode 100644 index 00000000..59638c83 --- /dev/null +++ b/arm9/src/scrcmd_coins.c @@ -0,0 +1,136 @@ +#include "scrcmd.h" +#include "coins.h" + +extern void * FUN_02039438(struct UnkSavStruct80* arg, u8 idx); + +extern u32 MOD05_021E2950(struct UnkSavStruct80* arg, u8, u8); +extern MOD05_021E29B4(); +extern MOD05_021E29C8(); + +THUMB_FUNC BOOL ScrCmd_Unk0075(struct ScriptContext * ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + u32 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u32 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 ** unk_ret_ptr = FUN_02039438(sav_ptr, 0x26); + + u32 unk3 = MOD05_021E2950(ctx->unk80, (u8)unk1, (u8)unk2); + *unk_ret_ptr = (u16 *)unk3; + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0076(struct ScriptContext * ctx) +{ + u16 ** unk = FUN_02039438(ctx->unk80, 0x26); + MOD05_021E29B4(*unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0077(struct ScriptContext * ctx) +{ + u16 ** unk = FUN_02039438(ctx->unk80, 0x26); + MOD05_021E29C8(ctx->unk80, *unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetCoins(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = CheckCoins(coins_ptr); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GiveCoins(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + GiveCoins(coins_ptr, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_TakeCoinsImmediate(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + TakeCoins(coins_ptr, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_TakeCoinsAddress(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 * amount = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + TakeCoins(coins_ptr, *amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasEnoughCoinsImmediate(struct ScriptContext * ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(sav_ptr); + // Created, but discarded. + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(sav_ptr->saveBlock2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u32 amount = ScriptReadWord(ctx); + u16 coins = CheckCoins(coins_ptr); + + if (coins < amount) + { + *ret_ptr = 0; + } + else + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasEnoughCoinsAddress(struct ScriptContext * ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(sav_ptr); + // Created, but discarded + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(sav_ptr->saveBlock2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u16 amount = *(u16*)GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 coins = CheckCoins(coins_ptr); + + if (coins < amount) + { + *ret_ptr = 0; + } + else + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CanGiveCoins(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = (u16)CanGiveCoins(coins_ptr, amount); + + return FALSE; +} diff --git a/arm9/src/scrcmd_daycare.c b/arm9/src/scrcmd_daycare.c new file mode 100644 index 00000000..4e2f925e --- /dev/null +++ b/arm9/src/scrcmd_daycare.c @@ -0,0 +1,192 @@ +#include "scrcmd.h" +#include "daycare.h" +#include "party.h" +#include "script_buffers.h" + +extern void* FUN_02039438(struct UnkSavStruct80*, int idx); + +extern void MOD05_021EC57C(struct PlayerParty* party, u8 idx, struct DayCare* daycare, struct SaveBlock2* sav2); +extern u16 MOD05_021EC71C(struct PlayerParty* party, struct ScrStrBufs* mgr, struct DayCare* daycare, u8 idx); +extern u16 MOD05_021EC854(struct DayCare* daycare, u8 idx, struct ScrStrBufs* mgr); +extern u8 MOD05_021EC864(struct DayCare* daycare, int idx, struct ScrStrBufs* mgr); +extern void MOD05_021ECD64(struct DayCare* daycare); +extern void MOD05_DayCare_GiveEggToPlayer(struct DayCare* daycare, struct PlayerParty* party, struct PlayerData* player); +extern void MOD05_021ED4E0(struct DayCare* daycare, struct ScrStrBufs* mgr); +extern void MOD05_021ED52C(struct DayCare* daycare, u8 idx1, u8 idx2, u8 idx3, u8 idx4, struct ScrStrBufs* mgr); +extern u16 MOD05_021ED5C4(struct PlayerParty* party, int idx, struct ScrStrBufs* mgr); +extern u16 MOD05_021ED5EC(struct DayCare* daycare); +extern u32 MOD05_021ED644(struct DayCare* daycare); + +THUMB_FUNC BOOL ScrCmd_Unk016D(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + struct DayCare* daycare = Sav2_DayCare_get(sav2); + + MOD05_021ED4E0(daycare, *mgr); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk016E(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct SaveBlock2* sav2 = sav_ptr->saveBlock2; + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + struct DayCare* daycare = SavArray_get(sav2, 8); + + *ret_ptr = MOD05_021ED5EC(daycare); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01A8(struct ScriptContext* ctx) +{ + struct DayCare* daycare = SavArray_get(ctx->unk80->saveBlock2, 8); + MOD05_021ECD64(daycare); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01A9(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct DayCare* daycare = SavArray_get(sav_ptr->saveBlock2, 8); + struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2); + struct SaveBlock2* sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(sav2); + + MOD05_DayCare_GiveEggToPlayer(daycare, party, player); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01A4(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + struct SaveBlock2* sav2 = sav_ptr->saveBlock2; + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct DayCare* daycare = SavArray_get(sav2, 8); + struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2); + + *ret_ptr = MOD05_021EC71C(party, *mgr, daycare, (u8)idx); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01AA(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + struct SaveBlock2* sav2 = sav_ptr->saveBlock2; + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct DayCare* daycare = SavArray_get(sav2, 8); + + *ret_ptr = MOD05_021EC854(daycare, (u8)idx, *mgr); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01AE(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct DayCare* daycare = SavArray_get(sav2, 8); + + *ret_ptr = MOD05_021EC864(daycare, idx, *mgr); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01AF(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u16 unused = ScriptReadHalfword(ctx); + u16 idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2); + + *ret_ptr = MOD05_021ED5C4(party, idx, *mgr); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01B0(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct SaveBlock2* sav2 = sav_ptr->saveBlock2; + u16 idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2); + struct DayCare* daycare = SavArray_get(sav2, 8); + + MOD05_021EC57C(party, (u8)idx, daycare, sav2); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01BC(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u16 idx1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 idx2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 idx3 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 idx4 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct DayCare* daycare = Sav2_DayCare_get(sav2); + + MOD05_021ED52C(daycare, (u8)idx1, (u8)idx2, (u8)idx3, (u8)idx4, *mgr); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01BE(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + struct DayCare* daycare = SavArray_get(sav2, 8); + + *ret_ptr = (u16)MOD05_021ED644(daycare); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01BF(struct ScriptContext* ctx) +{ + struct SaveBlock2* sav2 = ctx->unk80->saveBlock2; + u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + struct DayCare* daycare = SavArray_get(sav2, 8); + + *ret_ptr = (u16)Sav2_DayCare_GetEggPID(daycare); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01A5(struct ScriptContext* ctx) +{ + u16* unused = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01A6(struct ScriptContext* ctx) +{ +#pragma unused(ctx) + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01A7(struct ScriptContext* ctx) +{ +#pragma unused(ctx) + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01AD(struct ScriptContext* ctx) +{ + u16* unused = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + return FALSE; +} diff --git a/arm9/src/scrcmd_items.c b/arm9/src/scrcmd_items.c new file mode 100644 index 00000000..0184d02e --- /dev/null +++ b/arm9/src/scrcmd_items.c @@ -0,0 +1,96 @@ +#include "scrcmd.h" +#include "bag.h" + +extern BOOL FUN_02054CB0(u16 item_id); + +THUMB_FUNC BOOL ScrCmd_GiveItem(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + + u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* item_was_added = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + struct Bag* bag = Sav2_Bag_get(sav_ptr->saveBlock2); + + *item_was_added = (u16)Bag_AddItem(bag, item_id, quantity, 4); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_TakeItem(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + + u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* item_was_taken = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + struct Bag* bag = Sav2_Bag_get(sav_ptr->saveBlock2); + + *item_was_taken = (u16)Bag_TakeItem(bag, item_id, quantity, 4); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasSpaceForItem(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + + u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* has_space = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + struct Bag* bag = Sav2_Bag_get(sav_ptr->saveBlock2); + + *has_space = (u16)Bag_HasSpaceForItem(bag, item_id, quantity, 4); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasItem(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + + u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* has_item = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + struct Bag* bag = Sav2_Bag_get(sav_ptr->saveBlock2); + + *has_item = (u16)Bag_HasItem(bag, item_id, quantity, 11); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ItemIdIsTMOrHM(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + + u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* is_tm_or_hm = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *is_tm_or_hm = (u16)FUN_02054CB0(item_id); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetItemPocketId(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + + u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16* pocket = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *pocket = (u16)GetItemAttr(item_id, ITEMATTR_POCKET, 11); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0081(struct ScriptContext* ctx) +{ +#pragma unused(ctx) + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0082(struct ScriptContext* ctx) +{ +#pragma unused(ctx) + return FALSE; +} diff --git a/arm9/src/scrcmd_money.c b/arm9/src/scrcmd_money.c new file mode 100644 index 00000000..d2254844 --- /dev/null +++ b/arm9/src/scrcmd_money.c @@ -0,0 +1,111 @@ +#include "scrcmd.h" +#include "player_data.h" + +extern void * FUN_02039438(struct UnkSavStruct80* arg, u8 idx); + +extern u32 MOD05_021E27E8(struct UnkSavStruct80* arg, u8, u8); +extern void MOD05_021E288C(u32 *); +extern void MOD05_021E28A0(struct UnkSavStruct80* arg, u32 *); + +THUMB_FUNC BOOL ScrCmd_GiveMoney(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + + u32 amount = ScriptReadWord(ctx); + PlayerProfile_AddMoney(player, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_TakeMoneyImmediate(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + + u32 amount = ScriptReadWord(ctx); + PlayerProfile_SubMoney(player, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_TakeMoneyAddress(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + + u32 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + PlayerProfile_SubMoney(player, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasEnoughMoneyImmediate(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u32 amount = ScriptReadWord(ctx); + u32 money = PlayerProfile_GetMoney(player); + + if (money < amount) + { + *ret_ptr = 0; + } + else + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasEnoughMoneyAddress(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u32 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u32 money = PlayerProfile_GetMoney(player); + + if (money < amount) + { + *ret_ptr = 0; + } + else + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0072(struct ScriptContext * ctx) +{ + struct UnkSavStruct80 * sav_ptr = ctx->unk80; + u32 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u32 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u32 *unk_ret_ptr = FUN_02039438(sav_ptr, 0x27); + + *unk_ret_ptr = MOD05_021E27E8(ctx->unk80, (u8)unk1, (u8)unk2); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0073(struct ScriptContext * ctx) +{ + u32 ** unk = FUN_02039438(ctx->unk80, 0x27); + MOD05_021E288C(*unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0074(struct ScriptContext * ctx) +{ + u32 ** unk = FUN_02039438(ctx->unk80, 0x27); + MOD05_021E28A0(ctx->unk80, *unk); + + return FALSE; +} diff --git a/arm9/src/scrcmd_names.c b/arm9/src/scrcmd_names.c new file mode 100644 index 00000000..cf721328 --- /dev/null +++ b/arm9/src/scrcmd_names.c @@ -0,0 +1,540 @@ +#include "scrcmd.h" +#include "event_data.h" +#include "itemtool.h" +#include "nutdata.h" +#include "party.h" +#include "player_data.h" +#include "script_buffers.h" +#include "unk_02024E64.h" +#include "unk_02064E4C.h" +#include "unk_0207FC5C.h" + +extern void* FUN_02039438(struct UnkSavStruct80* sav_ptr, int idx); + +extern u32 FUN_020536D0(u32 gender, u32 avatar, u32 a2); +extern u32 FUN_0205F388(struct ScriptState* state); +extern u32 FUN_0205F398(struct ScriptState* state); +extern struct PCStorage* GetStoragePCPointer(struct SaveBlock2* sav2); +extern u32 FUN_0205F3C0(struct ScriptState* state); +extern u32 FUN_02054C14(u32 number); + +THUMB_FUNC BOOL ScrCmd_GetPlayerName(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + struct SaveBlock2* sav2 = ScriptEnvironment_GetSav2Ptr(sav_ptr); + struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(sav2); + + BufferPlayersName(*mgr, idx, player); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetRivalName(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + + BufferRivalsName(*mgr, idx, sav_ptr->saveBlock2); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetFriendName(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + + BufferFriendsName(*mgr, idx, sav_ptr->saveBlock2); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk00D0(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + u16 mon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2); + struct Pokemon* mon = GetPartyMonByIndex(party, mon_idx); + + BufferBoxMonSpeciesName(*mgr, idx, &mon->box); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetItemName(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + u16 item = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferItemName(*mgr, idx, item); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPocketName(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + u16 pocket = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferPocketName(*mgr, idx, pocket); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetTMHMMoveName(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + u16 tmhm = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 move = TMHMGetMove(tmhm); + + BufferMoveName(*mgr, idx, move); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetMoveName(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + u16 move = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferMoveName(*mgr, idx, move); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk00D5(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u32 digits = FUN_02054C14(unk); + + BufferIntegerAsString(*mgr, idx, unk, digits, 1, TRUE); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0280(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u8 unk2 = ScriptReadByte(ctx); + u8 digits = ScriptReadByte(ctx); + if (unk2 == 0) + { + digits = (u8)FUN_02054C14(unk); + } + + BufferIntegerAsString(*mgr, idx, unk, digits, unk2, TRUE); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk00D6(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + u16 mon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2); + struct Pokemon* pokemon = GetPartyMonByIndex(party, mon_idx); + + BufferBoxMonNickname(*mgr, idx, &pokemon->box); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0251(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct PCStorage* pc = GetStoragePCPointer(sav_ptr->saveBlock2); + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + u16 box_mon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + s32 box_no = box_mon_idx / 30; + s32 slot_no = box_mon_idx % 30; + struct BoxPokemon* box_mon = PCStorage_GetMonByIndexPair(pc, box_no, slot_no); + + BufferBoxMonNickname(*mgr, idx, box_mon); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPoketchAppName(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 app = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferPoketchAppName(*mgr, idx, app); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetTrainerClassName(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 trainer_class = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferTrainerClassName(*mgr, idx, trainer_class); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk00D9(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct SaveBlock2* sav2 = ScriptEnvironment_GetSav2Ptr(sav_ptr); + struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(sav2); + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + u32 gender = PlayerProfile_GetTrainerGender(player); + u32 avatar = PlayerProfile_GetAvatar(player); + u32 trainer_class = FUN_020536D0(gender, avatar, 2); + + BufferTrainerClassNameWithArticle(*mgr, idx, trainer_class); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk00DA(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 msg_no = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk1 = ScriptReadHalfword(ctx); + u8 unk2 = ScriptReadByte(ctx); + struct String* str = FUN_02040AE4(msg_no, 4); + + BufferString(*mgr, idx, str, unk1, unk2, 2); + String_dtor(str); + + return FALSE; +} + +THUMB_FUNC struct String* FUN_02040AE4(u32 msg_no, u32 heap_id) +{ + struct MsgData* msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 362, heap_id); + struct String* ret = NewString_ReadMsgData(msg_data, msg_no); + DestroyMsgData(msg_data); + + return ret; +} + +THUMB_FUNC BOOL ScrCmd_Unk00DB(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + struct ScriptState* state = SavArray_Flags_get(ctx->unk80->saveBlock2); + u32 msg_no = FUN_0205F388(state); + struct String* str = FUN_02040AE4(msg_no, 4); + + BufferString(*mgr, idx, str, 0, 1, 2); + String_dtor(str); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk00DC(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + struct ScriptState* state = SavArray_Flags_get(ctx->unk80->saveBlock2); + u32 msg_no = FUN_0205F398(state); + struct String* str = FUN_02040AE4(msg_no, 4); + + BufferString(*mgr, idx, str, 0, 1, 2); + String_dtor(str); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk00DD(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + struct ScriptState* state = SavArray_Flags_get(ctx->unk80->saveBlock2); + u32 msg_no = FUN_0205F3C0(state); + struct String* str = FUN_02040AE4(msg_no, 4); + + BufferString(*mgr, idx, str, 0, 1, 2); + String_dtor(str); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetDecorationName(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 decoration = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferDecorationName(*mgr, idx, decoration); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetUndergroundTrapName(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 underground_trap = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferUndergroundTrapName(*mgr, idx, underground_trap); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetUndergroundItemName(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 underground_item = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferUndergroundItemName(*mgr, idx, underground_item); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk00E2(struct ScriptContext* ctx) +{ + struct String* str = String_ctor(22, 4); + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 map_no = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + FUN_02064E60(map_no, 4, str); + BufferString(*mgr, idx, str, 0, 1, 2); + String_dtor(str); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk017B(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 berry = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct String* nut_name = GetNutName((u16)(berry - FIRST_BERRY_IDX), 32); + + BufferString(*mgr, idx, nut_name, 0, unk < 2, 2); + String_dtor(nut_name); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetNatureName(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 nature = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferNatureName(*mgr, idx, nature); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetFashionName(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 fashion = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferFashionName(*mgr, idx, fashion); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0272(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + struct String* str = String_ctor(11, 11); + struct UnkStruct_02024E64* unk = FUN_02024EB4(ctx->unk80->saveBlock2); + u16* unk_buffer = FUN_02024F0C(unk); + + CopyU16ArrayToString(str, unk_buffer); + BufferString(*mgr, idx, str, 0, 0, gGameLanguage); + String_dtor(str); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetPokemonMoveName(struct ScriptContext* ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct ScrStrBufs** mgr = FUN_02039438(sav_ptr, 15); + u8 idx = ScriptReadByte(ctx); + u16 mon_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 mon_move_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + struct PlayerParty* party = SavArray_PlayerParty_get(sav_ptr->saveBlock2); + struct Pokemon* pokemon = GetPartyMonByIndex(party, mon_idx); + u16 move = (u16)GetMonData(pokemon, MON_DATA_MOVE1 + mon_move_idx, NULL); + + BufferMoveName(*mgr, idx, move); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0232(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u8 unk = (u8)VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 ribbon = (u16)FUN_0207FC5C(unk, 3); + + BufferRibbonNameOrDesc(*mgr, idx, ribbon); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetSealName(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 seal = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferSealName(*mgr, idx, (u16)(seal - 1)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetItemNameWithIndefArticle(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 item = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferItemNameWithIndefArticle(*mgr, idx, item); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetItemNamePlural(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 item = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferItemNamePlural(*mgr, idx, item); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetDecorationNameWithArticle(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 decoration = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferDecorationNameWithArticle(*mgr, idx, decoration); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetUndergroundTrapNameWithArticle(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 underground_trap = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferUndergroundTrapNameWithArticle(*mgr, idx, underground_trap); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetUndergroundItemNameWithArticle(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 underground_item = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferUndergroundItemNameWithArticle(*mgr, idx, underground_item); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk02C9(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 species = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unused1 = ScriptReadHalfword(ctx); + u8 unused2 = ScriptReadByte(ctx); + + BufferSpeciesNameWithArticle(*mgr, idx, species); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk02CA(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + struct ScriptState* state = SavArray_Flags_get(ctx->unk80->saveBlock2); + u32 species = FUN_0205F3C0(state); + + BufferSpeciesNameWithArticle(*mgr, idx, species); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetFashionNameWithArticle(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 fashion = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferFashionNameWithArticle(*mgr, idx, fashion); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk02CC(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 trainer_class = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferTrainerClassNameWithArticle(*mgr, idx, trainer_class); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetSealNamePlural(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + u16 seal = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + BufferSealNamePlural(*mgr, idx, (u16)(seal - 1)); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CapitalizeFirstChar(struct ScriptContext* ctx) +{ + struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15); + u8 idx = ScriptReadByte(ctx); + + ScrStrBufs_UpperFirstChar(*mgr, idx); + + return FALSE; +} diff --git a/arm9/src/script.c b/arm9/src/script.c index a5a5a6e4..2fa80058 100644 --- a/arm9/src/script.c +++ b/arm9/src/script.c @@ -17,7 +17,7 @@ THUMB_FUNC void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 for (i = 0; i < NELEMS(ctx->stack); i++)
ctx->stack[i] = NULL;
- ctx->unk74 = 0;
+ ctx->unk74 = NULL;
}
THUMB_FUNC u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr)
@@ -27,7 +27,7 @@ THUMB_FUNC u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr) return 1;
}
-THUMB_FUNC void SetupNativeScript(struct ScriptContext *ctx, u8 (*ptr)(struct ScriptContext *))
+THUMB_FUNC void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *))
{
ctx->mode = 2;
ctx->nativePtr = ptr;
@@ -39,9 +39,9 @@ THUMB_FUNC void StopScript(struct ScriptContext *ctx) ctx->scriptPtr = 0;
}
-THUMB_FUNC void FUN_02038B6C(struct ScriptContext *ctx, s32 r1)
+THUMB_FUNC void FUN_02038B6C(struct ScriptContext *ctx, struct UnkStruct_0204639C *r1)
{
- ctx->unk74 = (u32)r1;
+ ctx->unk74 = r1;
}
THUMB_FUNC u8 RunScriptCommand(struct ScriptContext *ctx)
diff --git a/arm9/src/script_buffers.c b/arm9/src/script_buffers.c index 431f63b4..e9a55051 100644 --- a/arm9/src/script_buffers.c +++ b/arm9/src/script_buffers.c @@ -11,11 +11,10 @@ #include "unk_0201B8B8.h" #include "trainer_data.h" #include "script_buffers.h" +#include "unk_02024E64.h" #pragma thumb on -extern void * FUN_02024EC0(struct SaveBlock2 * sav2); -extern u16 * FUN_02024EE8(void *); extern u32 GetCityNamesMsgdataIdByCountry(u32); extern void GetECWordIntoStringByIndex(u32 a0, struct String * a1); extern void StringCat_HandleTrainerName(struct String * dest, const struct String * src); @@ -131,7 +130,7 @@ void BufferPlayersName(struct ScrStrBufs * mgr, u32 idx, struct PlayerData * dat void BufferRivalsName(struct ScrStrBufs * mgr, u32 idx, struct SaveBlock2 * sav2) { - u16 * name = FUN_02024EE8(FUN_02024EC0(sav2)); + u16 * name = GetRivalNamePtr(FUN_02024EC0(sav2)); CopyU16ArrayToString(mgr->tmpbuf, name); SetStringAsPlaceholder(mgr, idx, mgr->tmpbuf, NULL); } diff --git a/arm9/src/text.c b/arm9/src/text.c index 6207d913..aadb84c0 100644 --- a/arm9/src/text.c +++ b/arm9/src/text.c @@ -416,93 +416,7 @@ THUMB_FUNC void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadow *(current++) = (shadow12) | temp; } #else -THUMB_FUNC void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor) //TODO use asm preprocessor -{ - asm { - // push {r3-r7, lr} - sub sp, #0x30 - ldr r3, =UNK_021C570C - mov r5, #0x0 - str r5, [sp, #0x20] - str r0, [sp, #0x24] - str r2, [sp, #0x28] - str r1, [sp, #0x2c] - strh r1, [r3, #0x6] - strh r0, [r3, #0x2] - add r0, sp, #0x20 - strh r2, [r3, #0x4] - str r5, [sp, #0x14] - str r0, [sp, #0x8] - mov r12, r0 - mov lr, r0 - str r0, [sp, #0x18] - _0201C07E: - mov r0, #0x0 - str r0, [sp, #0x10] - ldr r0, [sp, #0x18] - str r0, [sp, #0x4] - ldr r0, [sp, #0x8] - ldr r0, [r0, #0x0] - str r0, [sp, #0x1c] - _0201C08C: - mov r0, #0x0 - str r0, [sp, #0xc] - mov r0, lr - str r0, [sp, #0x0] - ldr r0, [sp, #0x4] - ldr r0, [r0, #0x0] - lsl r7, r0, #0x4 - _0201C09A: - ldr r0, [sp, #0x0] - mov r3, #0x0 - ldr r0, [r0, #0x0] - mov r4, r12 - lsl r6, r0, #0x8 - _0201C0A4: - ldr r0, [r4, #0x0] - add r1, r7, #0x0 - lsl r0, r0, #0xc - orr r0, r6 - orr r1, r0 - ldr r0, [sp, #0x1c] - add r3, r3, #0x1 - add r2, r0, #0x0 - orr r2, r1 - lsl r1, r5, #0x1 - ldr r0, =UNK_021C5734 - add r5, r5, #0x1 - add r4, r4, #0x4 - strh r2, [r0, r1] - cmp r3, #0x4 - blt _0201C0A4 - ldr r0, [sp, #0x0] - add r0, r0, #0x4 - str r0, [sp, #0x0] - ldr r0, [sp, #0xc] - add r0, r0, #0x1 - str r0, [sp, #0xc] - cmp r0, #0x4 - blt _0201C09A - ldr r0, [sp, #0x4] - add r0, r0, #0x4 - str r0, [sp, #0x4] - ldr r0, [sp, #0x10] - add r0, r0, #0x1 - str r0, [sp, #0x10] - cmp r0, #0x4 - blt _0201C08C - ldr r0, [sp, #0x8] - add r0, r0, #0x4 - str r0, [sp, #0x8] - ldr r0, [sp, #0x14] - add r0, r0, #0x1 - str r0, [sp, #0x14] - cmp r0, #0x4 - blt _0201C07E - add sp, #0x30 - // pop {r3-r7, pc} - } -} +GLOBAL_ASM("asm/nonmatchings/GenerateFontHalfRowLookupTable.s") #endif THUMB_FUNC void DecompressGlyphTile(const u16 *src, u16 *dst) diff --git a/arm9/src/timer3.c b/arm9/src/timer3.c new file mode 100644 index 00000000..1799fd24 --- /dev/null +++ b/arm9/src/timer3.c @@ -0,0 +1,66 @@ +#include "timer3.h" + +struct Timer3Data timer3_data; + + +THUMB_FUNC void Init_Timer3() +{ + timer3_data.Timer3Counter = 0; + timer3_data.NeedReset = FALSE; + + reg_OS_TM3CNT_H = 0; + reg_OS_TM3CNT_L = 0; + reg_OS_TM3CNT_H = 0xc1; // start timer3 with f/64 and irq enable + + OS_SetIrqFunction(0x40, &CountUpTimer3); + OS_EnableIrqMask(0x40); // irq on timer3 overflow +} + + +THUMB_FUNC void CountUpTimer3() +{ + timer3_data.Timer3Counter++; + + if (timer3_data.NeedReset) + { + reg_OS_TM3CNT_H = 0; + reg_OS_TM3CNT_L = 0; + reg_OS_TM3CNT_H = 0xc1; + timer3_data.NeedReset = FALSE; + } + + *(vu32 *)HW_INTR_CHECK_BUF |= 0x40; + + OS_SetIrqFunction(0x40, &CountUpTimer3); +} + +THUMB_FUNC u64 internal_GetTimer3Count() +{ + OSIntrMode intr_mode = OS_DisableInterrupts(); + + vu16 timer3 = reg_OS_TM3CNT_L; + vu64 timer3_counter = timer3_data.Timer3Counter & 0x0000ffffffffffff; + + if (reg_OS_IF & 0x40 && !(timer3 & 0x8000)) + { + timer3_counter++; + } + + OS_RestoreInterrupts(intr_mode); + return (timer3_counter << 16) | timer3; +} + +THUMB_FUNC u64 GetTimer3Count() +{ + return internal_GetTimer3Count(); +} + +THUMB_FUNC u64 Timer3CountToMilliSeconds(u64 count) +{ + return (count *64) / 33514; +} + +THUMB_FUNC u64 Timer3CountToSeconds(u64 count) +{ + return (count *64) / HW_SYSTEM_CLOCK; +} diff --git a/arm9/src/trainer_data.c b/arm9/src/trainer_data.c index 7af4b2ce..f161b302 100644 --- a/arm9/src/trainer_data.c +++ b/arm9/src/trainer_data.c @@ -6,11 +6,10 @@ #include "proto.h" #include "msgdata.h" #include "constants/trainer_classes.h" +#include "unk_02024E64.h" #pragma thumb on -extern void * FUN_02024EC0(struct SaveBlock2 *); -extern u16 * FUN_02024EE8(void *); // Loads all battle opponents, including multi-battle partner if exists. void EnemyTrainerSet_Init(struct BattleSetupStruct * enemies, struct SaveBlock2 * sav2, u32 heap_id) @@ -23,7 +22,7 @@ void EnemyTrainerSet_Init(struct BattleSetupStruct * enemies, struct SaveBlock2 // FIXME: String formatting in files/msgdata/msg/narc_0559.txt is abnormal. msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 559, heap_id); - rivalName = FUN_02024EE8(FUN_02024EC0(sav2)); + rivalName = GetRivalNamePtr(FUN_02024EC0(sav2)); for (i = 0; i < 4; i++) { if (enemies->trainer_idxs[i] != 0) diff --git a/arm9/src/unk_02015E30.c b/arm9/src/unk_02015E30.c new file mode 100644 index 00000000..8be466fb --- /dev/null +++ b/arm9/src/unk_02015E30.c @@ -0,0 +1,35 @@ + +#include "unk_02015E30.h" + +struct UnkStruct_02015E30 UNK_021C4898; + +THUMB_FUNC void FUN_02015E30() +{ + UNK_021C4898.unk00 = 0; +} + +THUMB_FUNC void FUN_02015E3C(struct IGT *igt) +{ + struct UnkStruct_02015E30 *unk1 = &UNK_021C4898; + UNK_021C4898.unk00 = 1; + UNK_021C4898.unk10 = 0; + UNK_021C4898.unk14 = 0; + UNK_021C4898.unk08 = 0; + UNK_021C4898.unk04 = igt; + + UNK_021C4898.unk18 = GetTimer3Count(); +} + +THUMB_FUNC void FUN_02015E60() +{ + if (UNK_021C4898.unk00 != 0) + { + u64 res = Timer3CountToSeconds(GetTimer3Count() - UNK_021C4898.unk18); + + if (UNK_021C4898.unk08 < res) + { + AddIGTSeconds(UNK_021C4898.unk04, (u32)(res - UNK_021C4898.unk08)); + UNK_021C4898.unk08 = res; + } + } +} diff --git a/arm9/src/unk_02024E64.c b/arm9/src/unk_02024E64.c new file mode 100644 index 00000000..d8682531 --- /dev/null +++ b/arm9/src/unk_02024E64.c @@ -0,0 +1,62 @@ +#include "unk_02024E64.h" + +extern void FUN_020250A4(void *param0); +extern void FUN_02025484(void *param0); + +THUMB_FUNC u32 FUN_02024E64() +{ + return sizeof(struct UnkStruct_02024E64); +} + +THUMB_FUNC void FUN_02024E6C(struct UnkStruct_02024E64 *param0) +{ + MIi_CpuClearFast(0, param0, sizeof(struct UnkStruct_02024E64)); + + FUN_020250A4(param0->unk0); + + FUN_02025484(param0->unk700); + + MIi_CpuClear16(0xFFFF, param0->rival_name_buf, sizeof(param0->rival_name_buf) / sizeof(u16)); + MIi_CpuClear16(0xFFFF, param0->unk734, sizeof(param0->unk734) / sizeof(u16)); +} + +THUMB_FUNC struct UnkStruct_02024E64 *FUN_02024EB4(struct SaveBlock2 *sav2) +{ + return SavArray_get(sav2, 0xa); +} + +THUMB_FUNC void *FUN_02024EC0(struct SaveBlock2 *sav2) +{ + return FUN_02022634(sav2, 0xa); +} + +THUMB_FUNC struct UnkStruct_02024E64 *FUN_02024ECC(struct SaveBlock2 *sav2) +{ + return SavArray_get(sav2, 0xa); +} + +THUMB_FUNC void *FUN_02024ED8(struct SaveBlock2 *sav2) +{ + struct UnkStruct_02024E64 *res = SavArray_get(sav2, 0xa); + return res->unk700; +} + +THUMB_FUNC u16 *GetRivalNamePtr(struct UnkStruct_02024E64 *unk) +{ + return unk->rival_name_buf; +} + +THUMB_FUNC void RivalsNameToU16Array(struct UnkStruct_02024E64 *unk, struct String *str) +{ + CopyStringToU16Array(str, unk->rival_name_buf, sizeof(unk->rival_name_buf) / sizeof(u16)); +} + +THUMB_FUNC u16 *FUN_02024F0C(struct UnkStruct_02024E64 *unk) +{ + return unk->unk734; +} + +THUMB_FUNC void FUN_02024F18(struct UnkStruct_02024E64 *unk, struct String *str) +{ + CopyStringToU16Array(str, unk->unk734, sizeof(unk->unk734) / sizeof(u16)); +} diff --git a/arm9/src/unk_02025484.c b/arm9/src/unk_02025484.c new file mode 100644 index 00000000..733ac23a --- /dev/null +++ b/arm9/src/unk_02025484.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "MI_memory.h" +#include "error_handling.h" +#include "unk_02025484.h" + +THUMB_FUNC void FUN_02025484(struct unk_2025484 *r0, u32 r1) +{ + MI_CpuFill8(r0, 0, sizeof(struct unk_2025484)); +} + +THUMB_FUNC u32 *FUN_02025490(struct unk_2025484 *r0, u32 r1) +{ + FUN_02025484(r0, r1); + r0->unk0 = r1; + return &r0->unk4; +} + +THUMB_FUNC u32 *FUN_020254A0(struct unk_2025484 *r0, u32 r1) +{ + GF_ASSERT(r0->unk0 == r1); + return &r0->unk4; +} + +THUMB_FUNC u32 FUN_020254B4(struct unk_2025484 *r0) +{ + return r0->unk0; +} diff --git a/arm9/src/unk_0202F150.c b/arm9/src/unk_0202F150.c new file mode 100644 index 00000000..23a7de85 --- /dev/null +++ b/arm9/src/unk_0202F150.c @@ -0,0 +1,2478 @@ +#include "unk_0202F150.h" +struct +{ + u8 unk00; + struct UnkStruct0202F150 *unk04; +} UNK_021C59F4; + +vu8 UNK_02105D58 = 4; +vu8 UNK_02105D59 = 4; + +extern int FUN_02033534(); +extern u32 FUN_0202D858(u16 param0); +extern void FUN_02031480(u32 param0); +extern void FUN_0202D7D8(u8 *param0, u32 param1, struct UnkStruct0202F150_sub1 *param2); +extern u32 FUN_0200CA60(void (*param0)(), u32 param1, u32 param2); +extern void FUN_0202D394(struct UnkStruct0202F150_sub1 *param0, u8 *param1, u32 param2); +extern void FUN_0202D804(u8 *param0); +extern u32 FUN_0202E5F8(u32 param0, u32 param1, u32 param2); +extern void FUN_0202D330(void (*param0)(int)); +extern u32 FUN_0202E66C(u32 param0, u32 param1); +extern void MOD04_021D83C0(); +extern u32 FUN_0202E784(); +extern void FUN_020314D0(); +extern void FUN_0202DBA4(); +extern void FUN_0200CAB4(u32 param0); +extern void FUN_0202D824(u8 *param0); +extern u32 FUN_0202E9E8(u32 param0); +extern u32 FUN_0202F03C(); +extern u32 FUN_0202EE24(); +extern void FUN_02031CDC(); +extern void FUN_0202EBD0(u16 param0); +extern void FUN_0202ED70(u32 param0); +extern void FUN_020335F4(u32 param0); +extern void FUN_020315A4(); +extern void FUN_0202E538(); +extern u32 MOD04_021D78FC(void *param0, u32 param1); +extern u32 FUN_0202CBD4(); +extern void FUN_0202D4BC(void *param0); +extern int FUN_0202D400(struct UnkStruct0202F150_sub1 *param0, void *param1, u32 param2); +extern u32 FUN_0202D0D0(u8 *param0, u16 param1, u32 param2, void (*param3)(u32)); +extern u32 MOD04_021D79B4(void *param0, u32 param1); +extern void FUN_0202D3A4(struct UnkStruct0202F150_sub1 *param0, u8 *param1, u32 param2, u32 param3); +extern int FUN_0202D498(void *param0); +extern u16 FUN_0202CB8C(); +extern s64 _ll_mul(s64, s64); +extern u32 FUN_0202D4E4(u8 *param0); +extern u32 FUN_0202D760(u8 *param0, int *param1, u32 param2); +extern u32 FUN_0202D684(u8 *param0, u32 param1, u8 *param2, u32 param3, u32 param4, u32 param5); +extern void FUN_0202D934(u32 param0, u32 param1, u32 param2, void *param3); +extern int FUN_0202D478(struct UnkStruct0202F150_sub1 *param0); +extern u32 FUN_0202D41C(struct UnkStruct0202F150_sub1 *param0); +extern s16 FUN_0202D9A0(u32 param0); +extern u32 FUN_0202DA04(u32 param0); +extern void *FUN_0202DA40(u32 param0, u32 param1, u16 param2); +extern u32 MOD04_021D8018(); +extern u32 FUN_0202EDF8(); +extern u16 FUN_0202D19C(); +extern void FUN_020334E8(u32 param0, u32 param1); +extern u32 FUN_0202EE60(); +extern u32 FUN_0202D884(u16 param0); +extern void FUN_0202F05C(); +extern void GF_RTC_CopyDateTime(RTCDate *, RTCTime *); +extern void FUN_0202D830(u8 *param0, u32 param1); +extern u32 MOD04_021D8624(); + +THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1) +{ + u32 r4 = 0; + UNK_021C59F4.unk00 = 0; + if (param0 != 0) + { + u32 res = FUN_0202D858((u16)FUN_02033534()) + 1; + + if (UNK_021C59F4.unk04 != 0) + { + return 1; + } + + FUN_02031480(0xf); + struct UnkStruct0202F150 *ptr = + (struct UnkStruct0202F150 *)AllocFromHeap(0xf, sizeof(struct UnkStruct0202F150)); + UNK_021C59F4.unk04 = ptr; + MI_CpuFill8(ptr, 0, 0x68C); + + UNK_021C59F4.unk04->unk658 = param1 + 0x40; + UNK_021C59F4.unk04->unk67D = 0; + UNK_021C59F4.unk04->unk67E = 0x1b; + + UNK_021C59F4.unk04->unk45C = AllocFromHeap(0xf, UNK_021C59F4.unk04->unk658 << 1); + + UNK_021C59F4.unk04->unk460 = AllocFromHeap(0xf, UNK_021C59F4.unk04->unk658); + + UNK_021C59F4.unk04->unk458 = AllocFromHeap(0xf, res * UNK_021C59F4.unk04->unk658); + + UNK_021C59F4.unk04->unk454 = AllocFromHeap(0xf, res * UNK_021C59F4.unk04->unk658); + + if (FUN_02033534() == 0xa) + { + FUN_0202D7D8(UNK_021C59F4.unk04->unk54C, 0x64, &UNK_021C59F4.unk04->unk464); + FUN_0202D7D8(UNK_021C59F4.unk04->unk56C, 0x32 << 4, &UNK_021C59F4.unk04->unk4DC); + } + else + { + FUN_0202D7D8(UNK_021C59F4.unk04->unk54C, 0x14, &UNK_021C59F4.unk04->unk464); + FUN_0202D7D8(UNK_021C59F4.unk04->unk56C, 0x1b + 0xfd, &UNK_021C59F4.unk04->unk4DC); + } + } + else + { + + r4 = 1; + if (UNK_021C59F4.unk04 == 0) + { + ErrorHandling(); + } + } + + UNK_021C59F4.unk04->unk65C = 0; + + for (int i = 0; i < 4; i++) + { + UNK_021C59F4.unk04->unk677[i] = 0xff; + } + + if (r4 == 0) + { + FUN_0202F2F0(); + } + + FUN_020312BC(UNK_021C59F4.unk04->unk5F8); + + if (r4 == 0) + { + u32 res2 = FUN_0200CA60(FUN_0202FB20, 0, 0); + + UNK_021C59F4.unk04->unk548 = res2; + } + + UNK_021C59F4.unk04->unk687 = 0; + + return 1; +} + +THUMB_FUNC void FUN_0202F2F0() +{ + UNK_021C59F4.unk04->unk62C = 0; + UNK_021C59F4.unk04->unk62D = 0; + UNK_021C59F4.unk04->unk67F = 0; + UNK_021C59F4.unk04->unk680 = 0; + + int res = (int)FUN_0202D858((u16)FUN_02033534()) + 1; + + MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); + + int i; + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[i], + UNK_021C59F4.unk04->unk458 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk454, 0, UNK_021C59F4.unk04->unk658 * res); + + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk47C[i], + UNK_021C59F4.unk04->unk454 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); + FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, UNK_021C59F4.unk04->unk2D4, 6 << 6); + + for (i = 0; i < 0xc0; i++) + { + UNK_021C59F4.unk04->unk154[0][i] = 0xee; + UNK_021C59F4.unk04->unk154[1][i] = 0xee; + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); + FUN_0202D394(&UNK_021C59F4.unk04->unk464, UNK_021C59F4.unk04->unk04c, 0x42 << 2); + + UNK_021C59F4.unk04->unk000[0][0] = 0xff; + UNK_021C59F4.unk04->unk000[1][0] = 0xff; + + for (i = 1; i < 0x26; i++) + { + UNK_021C59F4.unk04->unk000[0][i] = 0xee; + UNK_021C59F4.unk04->unk000[1][i] = 0xee; + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); + + FUN_0202D394( + &UNK_021C59F4.unk04->unk470, UNK_021C59F4.unk04->unk45C, UNK_021C59F4.unk04->unk658 * 2); + + UNK_021C59F4.unk04->unk684 = 0; + UNK_021C59F4.unk04->unk685 = 0; + + for (i = 0; i < 8; i++) + { + UNK_021C59F4.unk04->unk65F[i] = 0; + UNK_021C59F4.unk04->unk667[i] = 1; + UNK_021C59F4.unk04->unk66F[i] = 1; + UNK_021C59F4.unk04->unk610[i] = 0; + + UNK_021C59F4.unk04->unk58C[i].unk0a = 0xee; + UNK_021C59F4.unk04->unk58C[i].unk08 = 0xffff; + UNK_021C59F4.unk04->unk58C[i].unk04 = 0; + UNK_021C59F4.unk04->unk58C[i].unk00 = 0; + + UNK_021C59F4.unk04->unk638[i] = 0; + } + + UNK_021C59F4.unk04->unk634 = 0; + UNK_021C59F4.unk04->unk630 = 1; + UNK_021C59F4.unk04->unk5F6 = 0xee; + UNK_021C59F4.unk04->unk5F4 = 0xffff; + UNK_021C59F4.unk04->unk5F0 = 0; + UNK_021C59F4.unk04->unk5EC = 0; + UNK_021C59F4.unk04->unk682 = 1; + UNK_021C59F4.unk04->unk683 = 1; + + UNK_02105D59 = 4; + UNK_02105D58 = 4; + + FUN_0202D804(UNK_021C59F4.unk04->unk54C); + FUN_0202D804(UNK_021C59F4.unk04->unk56C); + + UNK_021C59F4.unk04->unk688 = 0; +} + +THUMB_FUNC void FUN_0202F5A4() +{ + UNK_021C59F4.unk04->unk62C = 0; + UNK_021C59F4.unk04->unk62D = 0; + + int res = (int)FUN_0202D858((u16)FUN_02033534()) + 1; + + MI_CpuFill8(UNK_021C59F4.unk04->unk458, 0, UNK_021C59F4.unk04->unk658 * res); + + int i; + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[i], + UNK_021C59F4.unk04->unk458 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk454, 0, UNK_021C59F4.unk04->unk658 * res); + + for (i = 0; i < res; i++) + { + FUN_0202D394(&UNK_021C59F4.unk04->unk47C[i], + UNK_021C59F4.unk04->unk454 + i * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk2D4, 0, 6 << 6); + FUN_0202D394(&UNK_021C59F4.unk04->unk4DC, UNK_021C59F4.unk04->unk2D4, 6 << 6); + + for (i = 0; i < 0xc0; i++) + { + UNK_021C59F4.unk04->unk154[0][i] = 0xee; + UNK_021C59F4.unk04->unk154[1][i] = 0xee; + } + + MI_CpuFill8(&UNK_021C59F4.unk04->unk04c, 0, 0x42 << 2); + FUN_0202D394(&UNK_021C59F4.unk04->unk464, UNK_021C59F4.unk04->unk04c, 0x42 << 2); + + UNK_021C59F4.unk04->unk000[0][0] = 0xff; + UNK_021C59F4.unk04->unk000[1][0] = 0xff; + + for (i = 1; i < 0x26; i++) + { + UNK_021C59F4.unk04->unk000[0][i] = 0xee; + UNK_021C59F4.unk04->unk000[1][i] = 0xee; + } + + MI_CpuFill8(UNK_021C59F4.unk04->unk45C, 0, UNK_021C59F4.unk04->unk658 << 1); + FUN_0202D394( + &UNK_021C59F4.unk04->unk470, UNK_021C59F4.unk04->unk45C, UNK_021C59F4.unk04->unk658 * 2); + + UNK_021C59F4.unk04->unk684 = 0; + UNK_021C59F4.unk04->unk685 = 0; + + for (i = 0; i < 8; i++) + { + UNK_021C59F4.unk04->unk65F[i] = 0; + UNK_021C59F4.unk04->unk667[i] = 1; + UNK_021C59F4.unk04->unk66F[i] = 1; + UNK_021C59F4.unk04->unk610[i] = 0; + + UNK_021C59F4.unk04->unk58C[i].unk0a = 0xee; + UNK_021C59F4.unk04->unk58C[i].unk08 = 0xffff; + UNK_021C59F4.unk04->unk58C[i].unk04 = 0; + UNK_021C59F4.unk04->unk58C[i].unk00 = 0; + } + + UNK_021C59F4.unk04->unk630 = 1; + UNK_021C59F4.unk04->unk5F6 = 0xee; + UNK_021C59F4.unk04->unk5F4 = 0xffff; + UNK_021C59F4.unk04->unk5F0 = 0; + UNK_021C59F4.unk04->unk5EC = 0; + UNK_021C59F4.unk04->unk682 = 1; + UNK_021C59F4.unk04->unk683 = 1; + + FUN_0202D804(UNK_021C59F4.unk04->unk54C); + FUN_0202D804(UNK_021C59F4.unk04->unk56C); + + UNK_021C59F4.unk04->unk688 = 0; +} + +THUMB_FUNC void FUN_0202F820(int param0) +{ + UNK_021C59F4.unk04->unk65F[param0] = 0; + + UNK_021C59F4.unk04->unk667[param0] = 1; + + UNK_021C59F4.unk04->unk638[param0] = 0; + + UNK_021C59F4.unk04->unk66F[param0] = 1; + + FUN_0202D394(&UNK_021C59F4.unk04->unk47C[param0], + UNK_021C59F4.unk04->unk454 + param0 * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + + FUN_0202D394(&UNK_021C59F4.unk04->unk4E8[param0], + UNK_021C59F4.unk04->unk458 + param0 * UNK_021C59F4.unk04->unk658, + UNK_021C59F4.unk04->unk658); + + UNK_021C59F4.unk04->unk58C[param0].unk0a = 0xee; + UNK_021C59F4.unk04->unk58C[param0].unk08 = 0xffff; + UNK_021C59F4.unk04->unk58C[param0].unk04 = 0; + UNK_021C59F4.unk04->unk58C[param0].unk00 = 0; +} + +THUMB_FUNC void FUN_0202F8D4() +{ + for (int i = 1; i < 8; i++) + { + if (FUN_02030E7C((u16)i) == 0 && UNK_021C59F4.unk04->unk667[i] == 0 && FUN_02031280() == 0) + { + FUN_0202F820(i); + } + } +} + +THUMB_FUNC void FUN_0202F910(int param0) +{ + FUN_0202F820(param0); +} + +THUMB_FUNC u32 FUN_0202F918(u32 param0, u32 param1, u32 param2, u32 param3) +{ + u32 ret = 1; + if (FUN_02033534() < 0x13) + { + ret = FUN_0202E5F8(param0, param1, param3); + FUN_0202D330(FUN_0202F910); + } + + FUN_0202F150(param0, param2); + + return ret; +} + +THUMB_FUNC u32 FUN_0202F950(u32 param0, u32 param1, u32 param2) +{ + u32 ret = 1; + if (FUN_02033534() < 0x13) + { + ret = FUN_0202E66C(param0, param1); + } + + FUN_0202F150(param0, param2); + + UNK_02105D58 = 4; + + return ret; +} + +THUMB_FUNC void FUN_0202F984() +{ + u32 r4 = 0; + if (FUN_02031190() == 0) + { + if (UNK_02105D59 != 4) + { + return; + } + } + else + { + if (UNK_02105D58 != 4) + { + return; + } + } + + if (UNK_021C59F4.unk04->unk67D == 2) + { + UNK_021C59F4.unk04->unk67D = 0; + r4 = 1; + } + + if (UNK_021C59F4.unk04->unk67D == 3) + { + UNK_021C59F4.unk04->unk67D = 1; + r4 = 1; + } + + if (r4 != 0) + { + FUN_0202F5A4(); + } + FUN_02031088(); +} + +THUMB_FUNC void FUN_0202F9E0(u32 param0) +{ + u8 r2 = UNK_021C59F4.unk04->unk67D; + if (r2 == 0 && param0 == 1) + { + UNK_021C59F4.unk04->unk67D = 3; + } + else if (r2 == 1 && param0 == 0) + { + UNK_021C59F4.unk04->unk67D = 2; + } +} + +THUMB_FUNC void FUN_0202FA10() +{ + FUN_0202F9E0(1); +} + +THUMB_FUNC void FUN_0202FA1C() +{ + FUN_0202F9E0(0); +} + +THUMB_FUNC u8 FUN_0202FA28() +{ + u8 ret = UNK_021C59F4.unk04->unk67D; + if (ret == 2) + { + return 1; + } + else if (ret == 3) + { + return 0; + } + + return ret; +} + +THUMB_FUNC u32 FUN_0202FA48() +{ + if (FUN_0202FA28() == 1) + { + return 1; + } + + return 0; +} + +THUMB_FUNC void FUN_0202FA5C() +{ + u32 r4 = 0; + if (UNK_021C59F4.unk04 != 0) + { + if (FUN_02033534() >= 0x13) + { + MOD04_021D83C0(); + r4 = 1; + } + else + { + if (FUN_0202E784() != 0) + { + r4 = 1; + } + } + } + + if (r4 != 0) + { + FUN_020314D0(); + FUN_0202DBA4(); + UNK_021C59F4.unk00 = 0; + + FUN_0200CAB4(UNK_021C59F4.unk04->unk548); + UNK_021C59F4.unk04->unk548 = 0; + FreeToHeap(UNK_021C59F4.unk04->unk45C); + FreeToHeap(UNK_021C59F4.unk04->unk460); + FreeToHeap(UNK_021C59F4.unk04->unk458); + FreeToHeap(UNK_021C59F4.unk04->unk454); + FUN_0202D824(UNK_021C59F4.unk04->unk56C); + FUN_0202D824(UNK_021C59F4.unk04->unk54C); + FreeToHeap(UNK_021C59F4.unk04); + UNK_021C59F4.unk04 = NULL; + } +} + +THUMB_FUNC u32 FUN_0202FB18(u32 param0) +{ + return FUN_0202E9E8(param0); +} + +THUMB_FUNC void FUN_0202FB20() +{ + if (UNK_021C59F4.unk00 != 0) + { + FUN_0203050C(); + if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0) + { + FUN_0202FEEC(); + } + + UNK_021C59F4.unk00 = 0; + } +} + +THUMB_FUNC void FUN_0202FB58() +{ + if (FUN_0202F03C() != 0) + { + if (FUN_02031190() == 0) + { + if (FUN_0202EE24() == 0) + { + FUN_0202FA5C(); + } + } + else + { + FUN_0202FA5C(); + } + } +} + +THUMB_FUNC u32 FUN_0202FB80() +{ + FUN_02031CDC(); + + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk68A == 0) + { + UNK_021C59F4.unk00 = 0; + FUN_0202F984(); + UNK_021C59F4.unk04->unk628 |= gMain.unk44 & 0x7FFF; + FUN_02030674(); + FUN_0202FCCC(); + + UNK_021C59F4.unk04->unk628 &= 2 << 0xe; + if (FUN_0202FA28() == 0) + { + FUN_02030DA4(); + } + + if ((FUN_02031190() == 0 && FUN_02030E7C(0) != 0) || FUN_02031280() != 0) + { + FUN_02030074(); + } + + if (FUN_02031190() == 0 || FUN_0202FA28() == 1 || FUN_02031280() != 0) + { + FUN_02030DFC(); + } + + UNK_021C59F4.unk00 = 1; + } + + FUN_0202ED70(UNK_021C59F4.unk04->unk65C); + + if (FUN_02031190() == 0) + { + FUN_0202F8D4(); + } + + FUN_0202FB58(); + } + else + { + FUN_0202ED70(0); + } + + FUN_020335F4(0); + FUN_020315A4(); + + return 1; +} + +THUMB_FUNC void FUN_0202FC60() +{ + u8 r4 = UNK_021C59F4.unk00; + + UNK_021C59F4.unk00 = 0; + + if (UNK_021C59F4.unk04 != NULL) + { + FUN_0202F2F0(); + } + + UNK_021C59F4.unk00 = r4; +} + +THUMB_FUNC void FUN_0202FC80() +{ + u8 r4 = UNK_021C59F4.unk00; + + UNK_021C59F4.unk00 = 0; + + if (UNK_021C59F4.unk04 != NULL) + { + UNK_021C59F4.unk04->unk67D = 1; + FUN_0202F2F0(); + } + + UNK_021C59F4.unk00 = r4; +} + +THUMB_FUNC void FUN_0202FCA8() +{ + u8 r4 = UNK_021C59F4.unk00; + + UNK_021C59F4.unk00 = 0; + + if (UNK_021C59F4.unk04 != NULL) + { + FUN_0202F2F0(); + FUN_0202E538(); + } + + UNK_021C59F4.unk00 = r4; +} + +THUMB_FUNC void FUN_0202FCCC() +{ + if (UNK_021C59F4.unk04->unk683 != 0) + { + if (FUN_02033534() >= 0x13) + { + if (UNK_021C59F4.unk04->unk687 == 0 || MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) + { + return; + } + + UNK_021C59F4.unk04->unk683 = 0; + return; + } + + if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) + { + if (FUN_02031280() == 0) + { + return; + } + } + + UNK_02105D58 = 0; + FUN_0203050C(); + if (UNK_02105D58 == 0) + { + return; + } + + UNK_021C59F4.unk04->unk683 = 0; + return; + } + + if (FUN_02033534() >= 0x13) + { + if (UNK_021C59F4.unk04->unk687 == 0) + { + return; + } + + if (UNK_021C59F4.unk04->unk630 != 0) + { + if ((int)UNK_021C59F4.unk04->unk634 > 3) + { + return; + } + + if (UNK_02105D58 == 4) + { + FUN_02030930(UNK_021C59F4.unk04->unk000[0]); + UNK_02105D58 = 2; + } + } + else + { + if (UNK_02105D58 == 4) + { + if (FUN_02030930(UNK_021C59F4.unk04->unk000[0]) == 0) + { + return; + } + + UNK_02105D58 = 2; + } + } + + if (MOD04_021D78FC(UNK_021C59F4.unk04, 0x26) == 0) + { + return; + } + + UNK_02105D58 = 4; + UNK_021C59F4.unk04->unk634++; + return; + } + + if (FUN_0202CBD4() != 4 || FUN_02030E7C(FUN_02031190()) == 0) + { + if (FUN_02031280() == 0) + { + return; + } + } + + if (UNK_02105D58 != 4) + { + return; + } + + // nonmatching + if ((int)UNK_021C59F4.unk04->unk634 > 3) + { + return; + } + + FUN_02030930(UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F]); + + FUN_02030930(UNK_021C59F4.unk04->unk000[1 - UNK_021C59F4.unk04->unk67F]); + + UNK_02105D58 = 0; + FUN_0203050C(); +} + +#ifdef NONMATCHING +THUMB_FUNC u32 FUN_0202FE2C(int param0) +{ + + // these 3 variables are shuffled on the stack, everything else matches + int st4 = 0; + int stc = FUN_02031228(FUN_02033534()); + int st8 = FUN_0202D858(FUN_02033534()) + 1; + + for (int r7 = 0; r7 < st8; r7++) + { + + FUN_0202D4BC(&UNK_021C59F4.unk04->unk47C[r7]); + + if (FUN_02030E7C(r7) != 0) + { + UNK_021C59F4.unk04->unk154[param0][r7 * stc] = 0xe; + } + + FUN_0202D400( + &UNK_021C59F4.unk04->unk47C[r7], &UNK_021C59F4.unk04->unk154[param0][r7 * stc], stc); + + if (UNK_021C59F4.unk04->unk154[param0][r7 * stc] == 0xe) + { + st4++; + } + } + + if (st4 == st8) + { + return 0; + } + + return 1; +} +#else +THUMB_FUNC asm u32 FUN_0202FE2C(int param0) +{ + // clang-format off + push {r3-r7, lr} + sub sp, #0x10 + str r0, [sp, #0x0] + mov r0, #0x0 + str r0, [sp, #0x4] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_02031228 + str r0, [sp, #0xc] + bl FUN_02033534 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + bl FUN_0202D858 + add r0, r0, #0x1 + mov r7, #0x0 + str r0, [sp, #0x8] + cmp r0, #0x0 + ble _0202FED0 + ldr r0, [sp, #0x0] + mov r1, #0xc0 + add r6, r0, #0x0 + add r4, r7, #0x0 + add r5, r7, #0x0 + mul r6, r1 +_0202FE66: + ldr r0, =UNK_021C59F4 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + add r0, r1, r0 + add r0, r0, r4 + bl FUN_0202D4BC + lsl r0, r7, #0x10 + lsr r0, r0, #0x10 + bl FUN_02030E7C + cmp r0, #0x0 + beq _0202FE90 + ldr r0, =UNK_021C59F4 + mov r1, #0xe + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r2, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + strb r1, [r2, r0] +_0202FE90: + ldr r0, =UNK_021C59F4 + mov r2, #0x55 + ldr r1, [r0, #0x4] + ldr r0, =0x0000047C + lsl r2, r2, #0x2 + add r0, r1, r0 + add r1, r1, r2 + add r1, r1, r6 + ldr r2, [sp, #0xc] + add r0, r0, r4 + add r1, r1, r5 + bl FUN_0202D400 + ldr r0, =UNK_021C59F4 + ldr r0, [r0, #0x4] + add r0, r6, r0 + add r1, r5, r0 + mov r0, #0x55 + lsl r0, r0, #0x2 + ldrb r0, [r1, r0] + cmp r0, #0xe + bne _0202FEC2 + ldr r0, [sp, #0x4] + add r0, r0, #0x1 + str r0, [sp, #0x4] +_0202FEC2: + ldr r0, [sp, #0xc] + add r7, r7, #0x1 + add r5, r5, r0 + ldr r0, [sp, #0x8] + add r4, #0xc + cmp r7, r0 + blt _0202FE66 +_0202FED0: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x8] + cmp r1, r0 + bne _0202FEDE + add sp, #0x10 + mov r0, #0x0 + pop {r3-r7, pc} +_0202FEDE: + mov r0, #0x1 + add sp, #0x10 + pop {r3-r7, pc} + // clang-format on +} +#endif + +THUMB_FUNC void FUN_0202FEEC() +{ + if (UNK_021C59F4.unk04 == NULL || FUN_02033534() >= 0x13) + { + return; + } + + int st0 = FUN_02031228((u16)FUN_02033534()); + int r6 = (int)FUN_0202D858((u16)FUN_02033534()) + 1; + + if (UNK_02105D59 == 2 || UNK_02105D59 == 0) + { + + UNK_02105D59++; + + if (FUN_0202FA28() == 1) + { + FUN_0202FE2C(UNK_021C59F4.unk04->unk680); + } + + if (FUN_0202CBD4() == 4 && FUN_02031280() == 0) + { + + if (FUN_0202D0D0(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], + 0xc0, + 0xe, + FUN_020304F0) == 0) + { + UNK_02105D59--; + } + } + + int i; + if (UNK_02105D59 == 1 || UNK_02105D59 == 3) + { + for (i = 0; i < r6; i++) + { + if (FUN_02030E7C((u16)i) != 0) + { + UNK_021C59F4.unk04->unk638[i]++; + } + else if (FUN_02031280() != 0 && i == 0) + { + UNK_021C59F4.unk04->unk638[i]++; + } + } + + FUN_0203026C(0, UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680], 0xc0); + + UNK_021C59F4.unk04->unk680 = (u8)(1 - UNK_021C59F4.unk04->unk680); + } + + for (i = 0; i < r6; i++) + { + if (FUN_02030E7C((u16)i) == 0 && FUN_0202FA28() == 1) + { + UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680][i * st0] = 0xff; + } + } + + if (FUN_0202CBD4() != 4 || FUN_02031280() != 0) + { + UNK_02105D59++; + } + } +} + +THUMB_FUNC void FUN_02030074() +{ + if (UNK_021C59F4.unk04->unk683 != 0) + { + if (FUN_02033534() >= 0x13) + { + if (FUN_02030E7C(0) != 0 && MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) != 0) + { + UNK_021C59F4.unk04->unk683 = 0; + return; + } + } + else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) + { + FUN_0202FEEC(); + if (UNK_02105D59 == 2) + { + UNK_021C59F4.unk04->unk683 = 0; + return; + } + } + } + + if (FUN_02033534() >= 0x13) + { + if (FUN_02030E7C(0) != 0) + { + if (UNK_021C59F4.unk04->unk630 != 0) + { + if ((int)UNK_021C59F4.unk04->unk638[1] > 3 || + (int)UNK_021C59F4.unk04->unk638[0] > 3) + { + return; + } + + if (UNK_02105D59 == 4) + { + if (FUN_0202FA28() == 1) + { + FUN_0202FE2C(0); + } + + UNK_02105D59 = 2; + } + } + else + { + if (UNK_02105D59 == 4) + { + if (FUN_0202FA28() == 1) + { + if (FUN_0202FE2C(0) == 0) + { + return; + } + } + } + + UNK_02105D59 = 2; + } + + if (MOD04_021D79B4(UNK_021C59F4.unk04->unk154, 0x4c) == 0) + { + return; + } + + UNK_02105D59 = 4; + UNK_021C59F4.unk04->unk638[0]++; + UNK_021C59F4.unk04->unk638[1]++; + } + } + else if (FUN_0202CBD4() == 4 || FUN_02031280() != 0) + { + if (UNK_02105D59 == 4) + { + for (int r4 = 1; r4 < 8; r4++) + { + if (FUN_02030E7C((u16)r4) != 0) + { + if ((int)UNK_021C59F4.unk04->unk638[r4] > 3) + { + return; + } + } + else if (r4 == 0) + { + if (FUN_02031280() != 0) + { + if ((int)UNK_021C59F4.unk04->unk638[0] > 3) + { + return; + } + } + } + } + + if (FUN_0202FA28() == 0) + { + FUN_02030A00(UNK_021C59F4.unk04->unk154[UNK_021C59F4.unk04->unk680]); + FUN_02030A00(UNK_021C59F4.unk04->unk154[1 - UNK_021C59F4.unk04->unk680]); + } + + UNK_02105D59 = 0; + FUN_0202FEEC(); + } + } +} + +THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2) +{ + if (UNK_021C59F4.unk04->unk66F[0] != 0) + { + UNK_021C59F4.unk04->unk634--; + UNK_021C59F4.unk04->unk66F[0] = 0; + return; + } + + FUN_0203026C(param0, param1, param2); +} + +THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2) +{ +#pragma unused(param0) +#pragma unused(param2) + UNK_021C59F4.unk04->unk634--; + if (param1 == 0) + { + return; + } + + if (param1[0] == 0xb) + { + if (FUN_0202FA28() == 1) + { + return; + } + param1++; + } + else + { + if (FUN_0202FA28() == 0) + { + return; + } + } + + if (UNK_021C59F4.unk04->unk682 != 0) + { + if ((param1[0] & 1) != 0) + { + return; + } + } + + UNK_021C59F4.unk04->unk682 = 0; + if (FUN_0202FA28() == 1) + { + int r6 = FUN_02031228((u16)FUN_02033534()); + int st4 = (int)FUN_0202D858((u16)FUN_02033534()) + 1; + + int r4 = 0; + while (r4 < st4) + { + + if (param1[0] == 0xff) + { + UNK_021C59F4.unk04->unk65C &= ~(1 << r4); + } + else + { + UNK_021C59F4.unk04->unk65C |= (1 << r4); + } + + if (param1[0] == 0xff) + { + param1 += r6; + } + else if (param1[0] == 0xe) + { + param1 += r6; + } + else if (UNK_021C59F4.unk04->unk667[r4] != 0 && (param1[0] & 1) != 0) + { + param1 += r6; + } + else + { + param1++; + FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[r4], param1, (u32)(r6 - 1), 0x5E6); + + param1 += r6 - 1; + UNK_021C59F4.unk04->unk667[r4] = 0; + } + + r4++; + } + + return; + } + + UNK_021C59F4.unk04->unk65C = param1[1]; + UNK_021C59F4.unk04->unk65C <<= 8; + + UNK_021C59F4.unk04->unk65C += param1[2]; + FUN_0202D3A4(&UNK_021C59F4.unk04->unk470, param1 + 4, param1[3], 0x5FF); +} + +THUMB_FUNC void FUN_020303BC(u32 param0, u8 *param1, u16 param2) +{ + if (UNK_021C59F4.unk04->unk66F[param0] != 0) + { + + UNK_021C59F4.unk04->unk638[param0]--; + UNK_021C59F4.unk04->unk66F[param0] = 0; + return; + } + + FUN_020303F4(param0, param1, param2); +} + +THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2) +{ +#pragma unused(param2) + UNK_021C59F4.unk04->unk638[param0]--; + if (param1 == 0) + { + return; + } + + if (UNK_021C59F4.unk04->unk667[param0] != 0 && (param1[0] & 1) != 0) + { + return; + } + + UNK_021C59F4.unk04->unk667[param0] = 0; + if (FUN_0202FA28() == 1) + { + int r6 = FUN_02031228((u16)FUN_02033534()); + FUN_0202D858((u16)FUN_02033534()); + + if ((param1[0] & 2) == 0) + { + FUN_0202D3A4(&UNK_021C59F4.unk04->unk47C[param0], param1, (u32)r6, 0x65E); + } + + UNK_021C59F4.unk04->unk65F[param0]++; + return; + } + + FUN_020307E4(param1, param0); + + if ((param1[0] & 2) == 0 && FUN_0202D498(&UNK_021C59F4.unk04->unk4E8[param0]) >= 0xb) + { + FUN_0202D3A4(&UNK_021C59F4.unk04->unk4E8[param0], param1 + 1, 0xb, 0x66E); + } +} + +THUMB_FUNC void FUN_020304D4(u32 param0) +{ + if (param0 != 0) + { + UNK_02105D58++; + return; + } + + ErrorHandling(); +} + +THUMB_FUNC void FUN_020304F0(u32 param0) +{ + if (param0 != 0) + { + UNK_02105D59++; + return; + } + + ErrorHandling(); +} + +THUMB_FUNC void FUN_0203050C() +{ + if (UNK_021C59F4.unk04 == 0 || FUN_02033534() >= 0x13) + { + return; + } + + int r4 = FUN_02031228((u16)FUN_02033534()); + FUN_0202D858((u16)FUN_02033534()); + + if (FUN_02031280() != 0 && (UNK_02105D58 == 2 || UNK_02105D58 == 0)) + { + UNK_02105D58++; + FUN_020304D4(1); + + FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], (u16)r4); + + UNK_021C59F4.unk04->unk67F = (u8)(1 - UNK_021C59F4.unk04->unk67F); + UNK_021C59F4.unk04->unk634++; + return; + } + + if (FUN_0202CBD4() != 4) + { + return; + } + + if (FUN_02030E7C(FUN_02031190()) == 0) + { + FUN_02031190(); + return; + } + + if (UNK_02105D58 != 2 && UNK_02105D58 != 0) + { + return; + } + + if (FUN_02031190() != 0) + { + UNK_02105D58++; + + if (FUN_0202D0D0(UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], + (u16)r4, + 0xe, + FUN_020304D4) == 0) + { + UNK_02105D58--; + return; + } + + UNK_021C59F4.unk04->unk67F = (u8)(1 - UNK_021C59F4.unk04->unk67F); + UNK_021C59F4.unk04->unk634++; + return; + } + + if ((FUN_0202CB8C() & 0xFFFE) != 0) + { + UNK_02105D58++; + FUN_020304D4(1); + + FUN_020303F4(0, UNK_021C59F4.unk04->unk000[UNK_021C59F4.unk04->unk67F], (u16)r4); + + UNK_021C59F4.unk04->unk67F = (u8)(1 - UNK_021C59F4.unk04->unk67F); + UNK_021C59F4.unk04->unk634++; + } +} + +#ifdef NONMATCHING +THUMB_FUNC void FUN_02030674() +{ + u16 r4 = 0; + if (UNK_021C59F4.unk04->unk62C == 0 || (UNK_021C59F4.unk04->unk628 & 0xf0) == 0) + { + return; + } + + if (UNK_021C59F4.unk04->unk62C == 2) + { + if ((UNK_021C59F4.unk04->unk628 & 0x20) != 0) + { + r4 = r4 | 0x10; + } + + if ((UNK_021C59F4.unk04->unk628 & 0x10) != 0) + { + r4 = r4 | 0x20; + } + + if ((UNK_021C59F4.unk04->unk628 & 0x40) != 0) + { + r4 = r4 | 0x80; + } + + if ((UNK_021C59F4.unk04->unk628 & 0x80) != 0) + { + r4 = r4 | 0x40; + } + } + else + { + if (UNK_021C59F4.unk04->unk62E != 0) + { + r4 = UNK_021C59F4.unk04->unk62E; + UNK_021C59F4.unk04->unk62D--; + + if (UNK_021C59F4.unk04->unk62D < 0) + { + UNK_021C59F4.unk04->unk62E = 0; + } + } + else + { + UNK_021C59F4.unk04->unk5F8[0] = + UNK_021C59F4.unk04->unk5F8[1] * UNK_021C59F4.unk04->unk5F8[0] + + UNK_021C59F4.unk04->unk5F8[2]; + + switch ((u32)(UNK_021C59F4.unk04->unk5F8[0] >> 0x3E) | (0 << 2)) + { + case 0: + r4 = 0x20; + break; + case 1: + r4 = 0x10; + break; + case 2: + r4 = 0x40; + break; + case 3: + r4 = 0x80; + break; + } + + UNK_021C59F4.unk04->unk5F8[0] = + UNK_021C59F4.unk04->unk5F8[2] + + UNK_021C59F4.unk04->unk5F8[1] * UNK_021C59F4.unk04->unk5F8[0]; + UNK_021C59F4.unk04->unk62D = UNK_021C59F4.unk04->unk5F8[0] >> 0x3c | (0 << 4); + UNK_021C59F4.unk04->unk62E = r4; + } + } + + UNK_021C59F4.unk04->unk628 &= ~0xf0; + UNK_021C59F4.unk04->unk628 += r4; +} +#else +THUMB_FUNC asm void FUN_02030674() +{ + // clang-format off + push {r3-r7, lr} + ldr r7, =UNK_021C59F4 + mov r6, #0x0 + ldr r5, [r7, #0x4] + ldr r2, =0x0000062C + add r4, r6, #0x0 + ldrb r0, [r5, r2] + cmp r0, #0x0 + beq _02030690 + sub r1, r2, #0x4 + ldrh r1, [r5, r1] + mov r3, #0xf0 + tst r3, r1 + bne _02030692 +_02030690: + b _02030794 +_02030692: + cmp r0, #0x2 + bne _020306D0 + mov r0, #0x20 + tst r0, r1 + beq _020306A4 + mov r0, #0x10 + orr r0, r6 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306A4: + mov r0, #0x10 + tst r0, r1 + beq _020306B2 + mov r0, #0x20 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306B2: + mov r0, #0x40 + tst r0, r1 + beq _020306C0 + mov r0, #0x80 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 +_020306C0: + mov r0, #0x80 + tst r0, r1 + beq _0203077E + mov r0, #0x40 + orr r0, r4 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 + b _0203077E +_020306D0: + add r0, r2, #0x2 + ldrh r0, [r5, r0] + cmp r0, #0x0 + beq _020306F2 + add r4, r0, #0x0 + add r0, r2, #0x1 + ldrsb r0, [r5, r0] + sub r1, r0, #0x1 + add r0, r2, #0x1 + strb r1, [r5, r0] + ldr r1, [r7, #0x4] + ldrsb r0, [r1, r0] + cmp r0, #0x0 + bge _0203077E + add r0, r2, #0x2 + strh r6, [r1, r0] + b _0203077E +_020306F2: + add r0, r2, #0x0 + sub r0, #0x34 + add r6, r5, r0 + sub r2, #0x34 + ldr r0, [r6, #0x8] + ldr r1, [r6, #0xc] + ldr r2, [r5, r2] + ldr r3, [r6, #0x4] + bl _ll_mul + add r3, r0, #0x0 + add r2, r1, #0x0 + ldr r0, [r6, #0x10] + ldr r1, [r6, #0x14] + add r0, r0, r3 + adc r1, r2 + ldr r2, =0x000005F8 + str r0, [r5, r2] + mov r2, #0x0 + str r1, [r6, #0x4] + lsr r0, r1, #0x1e + lsl r1, r2, #0x2 + orr r1, r0 + cmp r1, #0x3 + bhi _02030746 + add r0, r1, r1 + add r0, pc + ldrh r0, [r0, #0x6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02030730: // jump table (using 16-bit offset) + // huge hack to get the correct jump offset. Is there a way to write constants? + lsl r6, r0, #0x0 // case 0 + lsl r2, r1, #0x0 // case 1 + lsl r6, r1, #0x0 // case 2 + lsl r2, r2, #0x0 // case 3 + + // intended jump offset + // .short _02030738 - _02030730 - 2; case 0 + // .short _0203073C - _02030730 - 2; case 1 + // .short _02030740 - _02030730 - 2; case 2 + // .short _02030744 - _02030730 - 2; case 3 +_02030738: + mov r4, #0x20 + b _02030746 +_0203073C: + mov r4, #0x10 + b _02030746 +_02030740: + mov r4, #0x40 + b _02030746 +_02030744: + mov r4, #0x80 +_02030746: + ldr r0, =UNK_021C59F4 + ldr r5, [r0, #0x4] + ldr r0, =0x000005F8 + add r6, r5, r0 + ldr r0, [r6, #0x8] + ldr r1, [r6, #0xc] + ldr r2, [r6, #0x0] + ldr r3, [r6, #0x4] + bl _ll_mul + ldr r3, [r6, #0x10] + ldr r2, [r6, #0x14] + add r0, r3, r0 + adc r2, r1 + ldr r1, =0x000005F8 + mov r3, #0x0 + str r0, [r5, r1] + str r2, [r6, #0x4] + lsr r0, r2, #0x1c + lsl r2, r3, #0x4 + orr r2, r0 + add r0, r1, #0x0 + add r0, #0x35 + strb r2, [r5, r0] + ldr r0, =UNK_021C59F4 + add r1, #0x36 + ldr r0, [r0, #0x4] + strh r4, [r0, r1] +_0203077E: + ldr r2, =UNK_021C59F4 + ldr r1, =0x00000628 + ldr r5, [r2, #0x4] + mov r0, #0xf0 + ldrh r3, [r5, r1] + bic r3, r0 + strh r3, [r5, r1] + ldr r2, [r2, #0x4] + ldrh r0, [r2, r1] + add r0, r0, r4 + strh r0, [r2, r1] +_02030794: + pop {r3-r7, pc} + // clang-format on +} +#endif + +THUMB_FUNC void FUN_020307A8() +{ + UNK_021C59F4.unk04->unk62C = 1; +} + +THUMB_FUNC void FUN_020307BC() +{ + UNK_021C59F4.unk04->unk62C = 2; +} + +THUMB_FUNC void FUN_020307D0() +{ + UNK_021C59F4.unk04->unk62C = 0; +} + +THUMB_FUNC u32 FUN_020307E4(u8 *param0, u32 param1) +{ + UNK_021C59F4.unk04->unk610[param1] = 0; + + int r7 = param0[0] & 0x10; + if (r7 == 0x10) + { + + u8 r5 = (u8)(param0[0] & 0xc); + if (r5 == 0) + { + UNK_021C59F4.unk04->unk610[param1] |= 0x40; + } + else if (r5 == 4) + { + UNK_021C59F4.unk04->unk610[param1] |= 0x80; + } + else if (r5 == 8) + { + UNK_021C59F4.unk04->unk610[param1] |= 0x20; + } + else if (r5 == 0xc) + { + UNK_021C59F4.unk04->unk610[param1] |= 0x10; + } + + UNK_021C59F4.unk04->unk620[param1] = (u8)((param0[0] >> 5) & 0x7); + } + + return 1; +} + +THUMB_FUNC void FUN_0203086C() +{ +} + +THUMB_FUNC u32 FUN_02030870(u8 *param0) +{ + if (UNK_021C59F4.unk04->unk62A != 0) + { + return 0; + } + + if (FUN_02030FE0() == 0) + { + return 0; + } + + if (UNK_021C59F4.unk04->unk681 != 0) + { + UNK_021C59F4.unk04->unk681--; + } + + if ((UNK_021C59F4.unk04->unk628 & 0x40) != 0) + { + param0[0] |= 0x10; + UNK_021C59F4.unk04->unk681 = 8; + } + else if ((UNK_021C59F4.unk04->unk628 & 0x80) != 0) + { + param0[0] |= 0x14; + UNK_021C59F4.unk04->unk681 = 8; + } + else if ((UNK_021C59F4.unk04->unk628 & 0x20) != 0) + { + param0[0] |= 0x18; + UNK_021C59F4.unk04->unk681 = 8; + } + else if ((UNK_021C59F4.unk04->unk628 & 0x10) != 0) + { + param0[0] |= 0x1c; + UNK_021C59F4.unk04->unk681 = 8; + } + + param0[0] |= UNK_021C59F4.unk04->unk62B << 5; + + return 0; +} + +THUMB_FUNC u32 FUN_02030930(u8 *param0) +{ + int r5 = FUN_02031228((u16)FUN_02033534()); + FUN_0202D858((u16)FUN_02033534()); + + if (UNK_021C59F4.unk04->unk684 == 0) + { + param0[0] = 0; + } + else + { + param0[0] = 1; + } + + if (FUN_0202FA28() == 0) + { + FUN_02030870(param0); + } + + UNK_021C59F4.unk04->unk684 = 0; + + if (FUN_0202D4E4(UNK_021C59F4.unk04->unk54C) != 0) + { + param0[0] |= 2; + if (param0[0] == 2) + { + return 0; + } + } + else + { + int st0[2]; + st0[1] = r5 - 1; + st0[0] = (int)param0 + 1; + if (FUN_0202D760(UNK_021C59F4.unk04->unk54C, st0, 1) == 0) + { + UNK_021C59F4.unk04->unk684 = 1; + } + + if (FUN_0202FA28() == 1) + { + UNK_021C59F4.unk04->unk65E++; + + param0[0] |= UNK_021C59F4.unk04->unk65E << 4 & 0xf0; + } + } + + return 1; +} + +THUMB_FUNC void FUN_02030A00(u8 *param0) +{ + param0[0] = 0xb; + if (UNK_021C59F4.unk04->unk685 == 0) + { + param0[1] = 0; + } + else + { + param0[1] = 1; + } + + u16 res = FUN_0202CB8C(); + param0[2] = (u8)(res >> 8); + param0[3] = (u8)res; + + int st0[2]; + st0[1] = 0xbb; + st0[0] = (int)param0 + 5; + if (FUN_0202D760(UNK_021C59F4.unk04->unk56C, st0, 0) != 0) + { + UNK_021C59F4.unk04->unk685 = 0; + param0[4] = (u8)(0xbb - st0[1]); + + return; + } + + UNK_021C59F4.unk04->unk685 = 1; + param0[4] = 0xbb; +} + +THUMB_FUNC u32 FUN_02030A78(u32 param0, u8 *param1, u32 param2) +{ + if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) + { + return 0; + } + + if (FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 0) != 0) + { + return 1; + } + + if (FUN_02033534() == 0xa) + { + FUN_02031454(); + } + + return 0; +} + +THUMB_FUNC u32 FUN_02030ADC(u32 param0, u8 *param1, u32 param2) +{ + if (FUN_02030E7C(FUN_02031190()) == 0 && FUN_02031280() == 0) + { + return 0; + } + + if (FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 1) != 0) + { + return 1; + } + + if (FUN_02033534() == 0xa) + { + FUN_02031454(); + } + + return 0; +} + +THUMB_FUNC u32 FUN_02030B3C(u32 param0, u8 *param1, u32 param2) +{ + if (FUN_02031190() != 0) + { + ErrorHandling(); + return 0; + } + + if (FUN_02030E7C(0) == 0 && FUN_02031280() == 0) + { + return 0; + } + + if (FUN_0202FA28() == 1) + { + return FUN_02030A78(param0, param1, param2); + } + + if (FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 0) != 0) + { + return 1; + } + + if (FUN_02033534() == 0xa) + { + FUN_02031454(); + } + + return 0; +} + +THUMB_FUNC u32 FUN_02030BC4(u32 param0, u8 *param1, u32 param2) +{ + if (FUN_02031190() != 0) + { + FUN_02031454(); + return 0; + } + + if (FUN_02030E7C(0) == 0 && FUN_02031280() == 0) + { + return 0; + } + + if (FUN_0202FA28() == 1) + { + return FUN_02030ADC(param0, param1, param2); + } + + if (FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 1) != 0) + { + return 1; + } + + if (FUN_02033534() == 0xa) + { + FUN_02031454(); + } + + return 0; +} + +THUMB_FUNC u32 FUN_02030C4C(u32 param0, u8 *param1) +{ + return FUN_02030BC4(param0, param1, 0); +} + +THUMB_FUNC int FUN_02030C58() +{ + return FUN_0202D498(&UNK_021C59F4.unk04->unk464); +} + +THUMB_FUNC void FUN_02030C70( + u32 param0, u32 param1, u32 param2, void *param3, struct UnkStruct0202F150_sub2 *param4) +{ + FUN_0202D934(param0, param1, param2, param3); + param4->unk0a = 0xee; + param4->unk08 = 0xffff; + param4->unk04 = 0; + param4->unk00 = 0; +} + +THUMB_FUNC void FUN_02030C8C(struct UnkStruct0202F150_sub1 *param0, + u32 param1, + void *param2, + u32 param3, + struct UnkStruct0202F150_sub2 *param4) +{ +#pragma unused(param3) + while (FUN_0202D478(param0) != 0) + { + + u32 r7 = param4->unk0a; + if (r7 == 0xee) + { + r7 = FUN_0202D41C(param0); + if (r7 == 0xee) + { + continue; + } + } + + int st10 = param0->unk04; + param4->unk0a = (u8)r7; + int r4 = param4->unk08; + if (r4 == 0xffff) + { + r4 = FUN_0202D9A0(r7); + + if (UNK_021C59F4.unk04->unk689 != 0) + { + return; + } + + if (r4 == 0xffff) + { + if (FUN_0202D478(param0) < 1) + { + param0->unk04 = (s16)st10; + return; + } + + r4 = (int)FUN_0202D41C(param0) << 8; + r4 += FUN_0202D41C(param0); + + st10 = param0->unk04; + } + + param4->unk08 = (u16)r4; + } + + if (FUN_0202DA04(r7) != 0) + { + if (param4->unk04 == 0) + { + param4->unk04 = FUN_0202DA40(r7, param1, param4->unk08); + } + + int stc = FUN_0202D400(param0, param2, r4 - param4->unk00); + + if (param4->unk04 != 0) + { + MI_CpuCopy8(param2, param4->unk04 + param4->unk00, (u32)stc); + } + + if ((int)(param4->unk00 += stc) < (int)r4) + { + continue; + } + + FUN_02030C70(param1, r7, (u32)r4, param4->unk04, param4); + } + else + { + if (FUN_0202D478(param0) >= r4) + { + FUN_0202D400(param0, param2, (u32)r4); + FUN_02030C70(param1, r7, (u32)r4, param2, param4); + } + else + { + param0->unk04 = (s16)st10; + return; + } + } + } +} + +THUMB_FUNC void FUN_02030DA4() +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk68B == 0) + { + FUN_0202D4BC(&UNK_021C59F4.unk04->unk470); + if (FUN_0202D478(&UNK_021C59F4.unk04->unk470) > 0) + { + FUN_02030C8C(&UNK_021C59F4.unk04->unk470, + 0, + UNK_021C59F4.unk04->unk460, + 1, + (struct UnkStruct0202F150_sub2 *)&UNK_021C59F4.unk04->unk5EC); + } + } + } +} + +THUMB_FUNC void FUN_02030DFC() +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk68B == 0) + { + int r7 = (int)FUN_0202D858((u16)FUN_02033534()) + 1; + int r4; + for (r4 = 0; r4 < r7; r4++) + { + FUN_0202D4BC(&UNK_021C59F4.unk04->unk4E8[r4]); + if (FUN_0202D478(&UNK_021C59F4.unk04->unk4E8[r4]) > 0) + { + + FUN_02030C8C(&UNK_021C59F4.unk04->unk4E8[r4], + (u32)r4, + UNK_021C59F4.unk04->unk460, + 0, + &UNK_021C59F4.unk04->unk58C[r4]); + } + } + } + } +} + +THUMB_FUNC u32 FUN_02030E7C(u16 param0) +{ + if (UNK_021C59F4.unk04 == NULL) + { + return 0; + } + + if (FUN_02033534() >= 0x13) + { + if (UNK_021C59F4.unk04->unk687 != 0 && MOD04_021D8018() != 0xffffffff) + { + if (param0 == 0) + { + return 1; + } + + if (param0 == 1) + { + return 1; + } + } + + return 0; + } + + if (FUN_02030F40() == 0) + { + return 0; + } + + if (FUN_0202CBD4() != 4) + { + return 0; + } + + if (FUN_02031190() == param0) + { + return 1; + } + + if (FUN_02031190() == 0) + { + u16 r0 = FUN_0202CB8C(); + + if ((r0 & (1 << param0)) != 0) + { + return 1; + } + } + else + { + if ((UNK_021C59F4.unk04->unk65C & (1 << param0)) != 0) + { + return 1; + } + } + + return 0; +} + +THUMB_FUNC u32 FUN_02030F20() +{ + u32 r4 = 0; + for (int i = 0; i < 8; i++) + { + if (FUN_02030E7C((u16)i) != 0) + { + r4++; + } + } + + return r4; +} + +THUMB_FUNC u32 FUN_02030F40() +{ + if (UNK_021C59F4.unk04 != NULL && FUN_02033534() >= 0x13) + { + return 1; + } + + return FUN_0202EDF8(); +} + +THUMB_FUNC void FUN_02030F60(u8 param0) +{ + UNK_021C59F4.unk04->unk62B = param0; +} + +THUMB_FUNC u8 FUN_02030F74(u32 param0) +{ + return UNK_021C59F4.unk04->unk620[param0]; +} + +THUMB_FUNC u32 FUN_02030F88(u32 param0) +{ + if (UNK_021C59F4.unk04 == NULL) + { + return 0; + } + + u32 ret = UNK_021C59F4.unk04->unk610[param0]; + UNK_021C59F4.unk04->unk610[param0] = 0; + + return ret; +} + +THUMB_FUNC void FUN_02030FA8() +{ + if (UNK_021C59F4.unk04 != NULL) + { + UNK_021C59F4.unk04->unk628 |= 0x8000; + } +} + +THUMB_FUNC void FUN_02030FC8() +{ + if (UNK_021C59F4.unk04 != NULL) + { + UNK_021C59F4.unk04->unk628 = 0; + } +} + +THUMB_FUNC u32 FUN_02030FE0() +{ + if (UNK_021C59F4.unk04 != NULL) + { + return (u32)(UNK_021C59F4.unk04->unk628 & 0x8000); + } + + return 1; +} + +THUMB_FUNC void FUN_02031000(u32 param0, u8 *param1, u32 param2) +{ + if (FUN_0202FA28() == 1) + { + FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 1, 0); + return; + } + + FUN_0202D684(UNK_021C59F4.unk04->unk56C, param0, param1, param2, 1, 0); +} + +THUMB_FUNC void FUN_0203105C(u32 param0, u8 *param1, u32 param2) +{ + FUN_0202D684(UNK_021C59F4.unk04->unk54C, param0, param1, param2, 0, 0); +} + +THUMB_FUNC void FUN_02031088() +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk67B != 1) + { + if (UNK_021C59F4.unk04->unk67B != 3) + { + return; + } + } + else + { + u32 res; + if (FUN_0202FA28() == 1) + { + res = FUN_020311D0(0xb, &UNK_021C59F4.unk04->unk67C); + } + else + { + res = FUN_02030BC4(0xb, &UNK_021C59F4.unk04->unk67C, 1); + } + + if (res == 0) + { + return; + } + UNK_021C59F4.unk04->unk67B = 2; + return; + } + + if (FUN_020311D0(0xc, &UNK_021C59F4.unk04->unk67C) != 0) + { + FUN_0202F9E0(UNK_021C59F4.unk04->unk67C); + UNK_021C59F4.unk04->unk67B = 0; + } + } +} + +THUMB_FUNC void FUN_0203110C(u32 param0, u32 param1, u8 *param2) +{ +#pragma unused(param0) +#pragma unused(param1) + if (FUN_02031190() == 0) + { + UNK_021C59F4.unk04->unk67B = 1; + UNK_021C59F4.unk04->unk67C = param2[0]; + } +} + +THUMB_FUNC void FUN_02031134(u32 param0, u32 param1, u8 *param2) +{ +#pragma unused(param0) +#pragma unused(param1) + if (FUN_02031190() != 0) + { + UNK_021C59F4.unk04->unk67C = param2[0]; + UNK_021C59F4.unk04->unk67B = 3; + } +} + +THUMB_FUNC void FUN_0203115C(u32 param0, u32 param1, u8 *param2) +{ +#pragma unused(param0) +#pragma unused(param1) + if (FUN_02031190() == 0 && UNK_021C59F4.unk04->unk67B == 2) + { + FUN_0202F9E0(*param2); + UNK_021C59F4.unk04->unk67B = 0; + } +} + +THUMB_FUNC u16 FUN_02031190() +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (FUN_02033534() >= 0x13) + { + u32 res = MOD04_021D8018(); + if (res != 0xffffffff) + { + return (u16)res; + } + } + else + { + if (FUN_02031280() != 0) + { + return 0; + } + + return FUN_0202D19C(); + } + } + + return 0; +} + +THUMB_FUNC u32 FUN_020311D0(u32 param0, u8 *param1) +{ + return FUN_02030ADC(param0, param1, 0); +} + +THUMB_FUNC u32 FUN_020311DC(u32 param0) +{ + return FUN_02030ADC(param0, 0, 0); +} + +THUMB_FUNC u32 FUN_020311E8() +{ + return FUN_0202EE24(); +} + +THUMB_FUNC u32 FUN_020311F0() +{ + if (FUN_02031280() != 0) + { + return 0; + } + + if (UNK_021C59F4.unk04 != NULL && UNK_021C59F4.unk04->unk689 != 0) + { + FUN_020334E8(1, 1); + return 1; + } + + return FUN_0202EE60(); +} + +THUMB_FUNC int FUN_02031228(u16 param0) +{ + if (FUN_0202D858(param0) >= 5) + { + return 0xc; + } + + if (FUN_0202FA28() == 0) + { + return 0xc; + } + + return 0x26; +} + +THUMB_FUNC u32 FUN_02031248(u32 param0) +{ + return FUN_0202D858((u16)param0) + 1; +} + +THUMB_FUNC u32 FUN_02031258(u32 param0) +{ + return FUN_0202D884((u16)param0) + 1; +} + +THUMB_FUNC void FUN_02031268(u8 param0) +{ + if (UNK_021C59F4.unk04 != NULL) + { + UNK_021C59F4.unk04->unk686 = param0; + } +} + +THUMB_FUNC u8 FUN_02031280() +{ + if (UNK_021C59F4.unk04 != NULL) + { + return UNK_021C59F4.unk04->unk686; + } + + return 0; +} + +THUMB_FUNC void FUN_0203129C() +{ + if (FUN_0202F03C() == 0 && FUN_02031190() == 0) + { + u8 st0; + FUN_02030C4C(2, &st0); + } + + FUN_0202F05C(); +} + +#ifdef NONMATCHING +THUMB_FUNC void FUN_020312BC(s64 *param0) +{ + RTCDate st10; + RTCTime st4; + GF_RTC_CopyDateTime(&st10, &st4); + + gMain.unk2C + st4.second; + u32 r6 = st10.year << 4 + st10.month; + u32 r5 = 0 << 4 | st10.year >> 0x1c; + st4.second; + + u32 st0 = st10.day; + st4.hour; + st4.minute; + + 0x00000000; + (0x00000000 + r5) << 5; +} +#else +THUMB_FUNC asm void FUN_020312BC(s64 *param0) +{ + // clang-format off + push {r3-r7, lr} + sub sp, #0x20 + add r4, r0, #0x0 + add r0, sp, #0x10 + add r1, sp, #0x4 + bl GF_RTC_CopyDateTime + ldr r0, =gMain + ldr r6, [sp, #0x10] + mov r5, #0x0 + lsr r7, r6, #0x1c + lsl r5, r5, #0x4 + ldr r1, [sp, #0xc] + ldr r0, [r0, #0x2c] + lsl r6, r6, #0x4 + add r3, r1, r0 + ldr r0, [sp, #0x18] + orr r5, r7 + str r0, [sp, #0x0] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x4] + add r6, r0, r6 + ldr r0, =0x00000000 + ldr r2, [sp, #0x8] + adc r0, r5 + lsr r5, r6, #0x1b + lsl r0, r0, #0x5 + orr r0, r5 + ldr r5, [sp, #0x0] + lsl r6, r6, #0x5 + add r6, r5, r6 + ldr r5, =0x00000000 + adc r5, r0 + lsr r0, r6, #0x1b + lsl r5, r5, #0x5 + orr r5, r0 + lsl r0, r6, #0x5 + add r6, r1, r0 + ldr r1, =0x00000000 + adc r1, r5 + lsr r0, r6, #0x1a + lsl r1, r1, #0x6 + orr r1, r0 + lsl r0, r6, #0x6 + add r5, r2, r0 + ldr r2, =0x00000000 + adc r2, r1 + lsr r0, r5, #0x1a + lsl r1, r2, #0x6 + orr r1, r0 + lsl r0, r5, #0x6 + add r2, r3, r0 + ldr r0, =0x00000000 + str r2, [r4, #0x0] + adc r0, r1 + str r0, [r4, #0x4] + ldr r1, =0x6C078965 + ldr r0, =0x5D588B65 + str r1, [r4, #0x8] + str r0, [r4, #0xc] + ldr r0, =0x00269EC3 + str r0, [r4, #0x10] + mov r0, #0x0 + str r0, [r4, #0x14] + add sp, #0x20 + pop {r3-r7, pc} + // clang-format on +} +#endif + +THUMB_FUNC void FUN_02031354(u32 param0) +{ + FUN_0202D830(UNK_021C59F4.unk04->unk56C, param0); +} + +THUMB_FUNC u32 FUN_02031370() +{ + return FUN_0202D4E4(UNK_021C59F4.unk04->unk56C); +} + +THUMB_FUNC u32 FUN_02031388() +{ + return FUN_0202D4E4(UNK_021C59F4.unk04->unk54C); +} + +THUMB_FUNC void FUN_020313A0(u8 param0) +{ + UNK_021C59F4.unk04->unk687 = param0; +} + +THUMB_FUNC void FUN_020313B4(u8 param0, u32 param1) +{ + if (UNK_021C59F4.unk04 != NULL) + { + UNK_021C59F4.unk04->unk677[param1] = param0; + } +} + +THUMB_FUNC u32 FUN_020313CC(u32 param0) +{ + if (UNK_021C59F4.unk04 != NULL) + { + if (UNK_021C59F4.unk04->unk677[param0] != 0xff) + { + return UNK_021C59F4.unk04->unk677[param0]; + } + } + + return param0; +} + +THUMB_FUNC u32 FUN_020313EC() +{ + if (FUN_02033534() < 0x13) + { + return 0; + } + + return MOD04_021D8624(); +} + +THUMB_FUNC void FUN_02031400(u32 param0) +{ + if (FUN_02033534() >= 0x13) + { + UNK_021C59F4.unk04->unk630 = param0; + if (param0 != 0) + { + UNK_021C59F4.unk04->unk634 = 0; + UNK_021C59F4.unk04->unk638[0] = 0; + UNK_021C59F4.unk04->unk638[1] = 0; + } + } +} + +THUMB_FUNC u32 FUN_02031438() +{ + if (UNK_021C59F4.unk04->unk681 != 0) + { + return 1; + } + + return 0; +} + +THUMB_FUNC void FUN_02031454() +{ + UNK_021C59F4.unk04->unk689 = 1; +} + +THUMB_FUNC void FUN_02031468() +{ + if (UNK_021C59F4.unk04 != NULL) + { + UNK_021C59F4.unk04->unk68A = 1; + } +}
\ No newline at end of file diff --git a/arm9/src/unk_0204AEA8.c b/arm9/src/unk_0204AEA8.c new file mode 100644 index 00000000..9c572a8e --- /dev/null +++ b/arm9/src/unk_0204AEA8.c @@ -0,0 +1,43 @@ +#include "global.h" +#include "heap.h" +#include "unk_0204639C.h" +#include "unk_0204AEA8.h" + +extern void MOD05_021E3444(u32, struct UnkStruct_0204639C *, u32); +extern void FUN_0200433C(u32, u16, u32); + +THUMB_FUNC BOOL FUN_0204AEA8(struct UnkStruct_0204639C *a0) +{ + struct UnkStruct_0204639C *v0 = FUN_02046528(a0); + u32 *v1 = FUN_0204652C(a0); + + switch (v1[0]) + { + case 0: + MOD05_021E3444(v1[2], v0, (u32)v1 + 4); + FUN_0200433C(5, (u16)v1[3], 1); + v1[0]++; + break; + case 1: + if (v1[1] == 1) + { + FreeToHeap(v1); + return TRUE; + } + break; + } + + return FALSE; +} + +THUMB_FUNC void FUN_0204AEF8(struct UnkStruct_0204639C *a0, u32 a1, u32 a2) +{ + u32 *v0 = AllocFromHeapAtEnd(11, 4 * sizeof(u32)); + + v0[0] = 0; + v0[1] = 0; + v0[2] = a1; + v0[3] = a2; + + FUN_0204640C(a0, FUN_0204AEA8, v0); +} diff --git a/arm9/src/unk_0205FA2C.c b/arm9/src/unk_0205FA2C.c new file mode 100644 index 00000000..7bcdf950 --- /dev/null +++ b/arm9/src/unk_0205FA2C.c @@ -0,0 +1,543 @@ +#include "unk_0205FA2C.h" + +extern void *UNK_020F96DC; +extern void *UNK_020FA6E8; +extern u32 FUN_02079C70(struct SaveBlock2 *sav2); +extern void FUN_0207B000(struct UnkPlayerStruct2_0205FA2C *ptr, const u8 param1[12]); +extern void FUN_0207C2A4(struct UnkPlayerStruct2_0205FA2C *ptr, struct PlayerData *player_data); +extern u32 FUN_0203384C(u32 *param0); +extern u32 *FUN_02038790(struct UnkStruct_0204639C *param0, u16 param1, u16 param2); +extern u16 *GetVarPointer(struct UnkSavStruct80 *arg, u16); +extern u32 FUN_02031190(); +extern u32 FUN_020316E0(u32 param0); +extern u16 MOD06_02244660(struct UnkStruct_0204639C *param0, u32 param1); +extern u16 MOD06_022446BC(struct UnkStruct_0204639C *param0, u32 param1); +extern u16 MOD06_022446E0(struct UnkStruct_0204639C *param0, u32 param1); +extern void FUN_0202A5CC(u32 param0, u32 param1); +extern u32 FUN_0202A5D0(u32 param0); +extern u32 FUN_0202A150(struct UnkStruct_02029FB0 *param0, u32 param1); +extern u32 FUN_0202A8D8(struct SaveBlock2 *sav2); +extern u32 FUN_0202A578(u32 param0, u32 param1, u32 param2); +extern u32 FUN_02026CC4(struct SaveBlock2 *sav2); +extern u32 FUN_02025D94(u32 param0, u32 param1); +extern u32 FUN_0202A8CC(struct SaveBlock2 *sav2); +extern void FUN_0202A2C4(u32 param0, u32 param1, u32 *param2); +extern u32 FUN_0202A240(u32 param0, u32 param1, u32 param2); +extern int FUN_0202A538(u32 param0, u16 param1, u32 param2); + +const u8 UNK_020F7454[] = { + 0x00, + 0x01, + 0x02, + 0x04, + 0x03, + 0x05, + 0x06, + 0x07, + 0x08, +}; + +THUMB_FUNC u32 FUN_0205FA2C( + struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1, u32 heap_id) +{ + struct UnkPlayerStruct1_0205FA2C *ptr = (struct UnkPlayerStruct1_0205FA2C *)AllocFromHeapAtEnd( + heap_id, sizeof(struct UnkPlayerStruct1_0205FA2C)); + + struct SaveBlock2 *sav2 = (struct SaveBlock2 *)(param1->unkC); + MI_CpuFill8(ptr, 0, sizeof(struct UnkPlayerStruct1_0205FA2C)); + + ptr->options = Sav2_PlayerData_GetOptionsAddr(sav2); + + ptr->player_party = SavArray_PlayerParty_get(sav2); + + ptr->bag = Sav2_Bag_get(sav2); + + ptr->unk21 = 0; + ptr->unk20 = param0->unk08; + ptr->unk32 = param0->unk0a; + ptr->unk322 = param0->unk0b; + ptr->unk33 = param0->unk0c; + ptr->unk22 = param0->unk0d; + + for (u8 i = 0; i < 6; i++) + { + ptr->unk2c[i] = param0->unk0e[i]; + } + + FUN_020373D4(param1, (u32)&UNK_020F96DC, (u32)ptr); + + *param0->unk14 = ptr; + + return 1; +} + +THUMB_FUNC u32 FUN_0205FAD8( + struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1) +{ + if (FUN_0204647C(param1)) + { + return 1; + } + + struct UnkPlayerStruct1_0205FA2C *ptr = (struct UnkPlayerStruct1_0205FA2C *)*param0->unk14; + + u8 r1 = ptr->unk22; + if (r1 != 6) + { + if (r1 == 7) + { + param0->unk00 = 0; + return 4; + } + } + else + { + param0->unk00 = 1; + return 4; + } + + MI_CpuCopy8(ptr->unk2c, param0->unk0e, 6); + + param0->unk0d = ptr->unk22; + FreeToHeap(ptr); + + *param0->unk14 = NULL; + + return 2; +} + +THUMB_FUNC u32 FUN_0205FB34( + struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1, u32 heap_id) +{ + struct SaveBlock2 *sav2 = (struct SaveBlock2 *)(param1->unkC); + + struct UnkPlayerStruct2_0205FA2C *ptr = (struct UnkPlayerStruct2_0205FA2C *)AllocFromHeapAtEnd( + heap_id, sizeof(struct UnkPlayerStruct2_0205FA2C)); + MI_CpuFill8(ptr, 0, sizeof(struct UnkPlayerStruct2_0205FA2C)); + + ptr->options = Sav2_PlayerData_GetOptionsAddr(sav2); + ptr->player_party = SavArray_PlayerParty_get(sav2); + ptr->IsNatDex = SavArray_IsNatDexEnabled(sav2); + ptr->unk2c = FUN_02079C70(sav2); + + ptr->unk11 = 1; + ptr->unk14 = param0->unk0d; + + ptr->party_count = (u8)GetPartyCount(ptr->player_party); + + ptr->unk18 = 0; + ptr->unk12 = param0->unk09; + + ptr->unk20 = FUN_0202A918(sav2); + + FUN_0207B000(ptr, UNK_020F7454); + + FUN_0207C2A4(ptr, Sav2_PlayerData_GetProfileAddr(sav2)); + + FUN_020373D4(param1, (u32)&UNK_020FA6E8, (u32)ptr); + + *param0->unk14 = ptr; + + return 3; +} + +THUMB_FUNC u32 FUN_0205FBC0( + struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1) +{ + if (FUN_0204647C(param1)) + { + return 3; + } + + struct UnkPlayerStruct2_0205FA2C *ptr = (struct UnkPlayerStruct2_0205FA2C *)*param0->unk14; + param0->unk0d = ptr->unk14; + FreeToHeap(ptr); + + *param0->unk14 = NULL; + + return 0; +} + +THUMB_FUNC int FUN_0205FBE8(struct UnkStruct_0204639C *param0) +{ + struct UnkStruct_0204639C *res = FUN_02046528(param0); + struct UnkCallbackStruct1_0205FA2C *res2 = + (struct UnkCallbackStruct1_0205FA2C *)FUN_0204652C(param0); + switch (res2->unk04) + { + case 0: + res2->unk04 = FUN_0205FA2C(res2, res, 0xb); + break; + case 1: + res2->unk04 = FUN_0205FAD8(res2, res); + break; + case 2: + res2->unk04 = FUN_0205FB34(res2, res, 0xb); + break; + case 3: + res2->unk04 = FUN_0205FBC0(res2, res); + break; + case 4: + FreeToHeap(res2); + return 1; + } + + return 0; +} + +THUMB_FUNC void FUN_0205FC50(struct UnkStruct_0204639C *param0, + void **param1, + u8 param2, + u8 param3, + u8 param4, + u8 param5, + u8 param6, + u8 param7) +{ + struct UnkStruct_0204639C *res = FUN_02046528(param0); + + struct UnkCallbackStruct1_0205FA2C *ptr = (struct UnkCallbackStruct1_0205FA2C *)AllocFromHeap( + 0xb, sizeof(struct UnkCallbackStruct1_0205FA2C)); + MI_CpuFill8(ptr, 0, sizeof(struct UnkCallbackStruct1_0205FA2C)); + + ptr->unk08 = param2; + ptr->unk09 = param3; + ptr->unk0a = param4; + ptr->unk0b = param5; + ptr->unk0c = param6; + ptr->unk0d = param7; + ptr->unk14 = param1; + + FUN_0204640C(res->unk10, &FUN_0205FBE8, (u32 *)ptr); +} + +THUMB_FUNC u32 FUN_0205FC9C( + struct UnkCallbackStruct2_0205FA2C *param0, struct UnkStruct_0204639C *param1) +{ + if (FUN_0203384C(param1->unkC)) + { + + param0->unk08 = FUN_02038790(param1, param0->unk12, param0->unk14); + return 1; + } + + param0->unk00 = 1; + return 2; +} + +THUMB_FUNC u32 FUN_0205FCC4( + struct UnkCallbackStruct2_0205FA2C *param0, struct UnkStruct_0204639C *param1) +{ + if (FUN_0204647C(param1)) + { + return 1; + } + + param0->unk00 = param0->unk08[8]; + FreeToHeap(param0->unk08); + + return 2; +} + +THUMB_FUNC int FUN_0205FCE8(struct UnkStruct_0204639C *param0) +{ + struct UnkStruct_0204639C *res = FUN_02046528(param0); + struct UnkCallbackStruct2_0205FA2C *res2 = + (struct UnkCallbackStruct2_0205FA2C *)FUN_0204652C(param0); + + switch (res2->unk04) + { + case 0: + res2->unk04 = FUN_0205FC9C(res2, res); + break; + case 1: + res2->unk04 = FUN_0205FCC4(res2, res); + break; + case 2: + u16 *var = GetVarPointer((struct UnkSavStruct80 *)res, res2->unk10); + *var = (u16)res2->unk00; + FreeToHeap(res2); + + return 1; + } + + return 0; +} + +THUMB_FUNC void FUN_0205FD38(struct UnkStruct_0204639C *param0, u16 param1, u16 param2, u16 param3) +{ + struct UnkStruct_0204639C *res = FUN_02046528(param0); + struct UnkCallbackStruct2_0205FA2C *ptr = (struct UnkCallbackStruct2_0205FA2C *)AllocFromHeap( + 0xb, sizeof(struct UnkCallbackStruct2_0205FA2C)); + MI_CpuFill8(ptr, 0, sizeof(struct UnkCallbackStruct2_0205FA2C)); + + ptr->unk12 = param1; + ptr->unk14 = param3; + ptr->unk10 = param2; + + FUN_0204640C(res->unk10, &FUN_0205FCE8, (u32 *)ptr); +} + +THUMB_FUNC int FUN_0205FD70(struct UnkStruct_0204639C *param0) +{ + struct UnkStruct_0204639C *res = FUN_02046528(param0); + u16 *res2 = (u16 *)FUN_0204652C(param0); + u32 res3 = FUN_020316E0(1 - FUN_02031190()); + if (res3 == 0) + { + return 0; + } + + u16 *var = GetVarPointer((struct UnkSavStruct80 *)res, res2[1]); + switch (res2[0]) + { + case 0: + *var = MOD06_02244660(res, res3); + break; + case 1: + *var = MOD06_022446BC(res, res3); + + break; + case 2: + *var = MOD06_022446E0(res, res3); + + break; + } + + FreeToHeap(res2); + + return 1; +} + +THUMB_FUNC void FUN_0205FDDC(struct UnkStruct_0204639C *param0, u16 param1, u16 param2) +{ + struct UnkStruct_0204639C *res = FUN_02046528(param0); + + u16 *ptr = AllocFromHeap(0xb, 2 * sizeof(u16)); + MI_CpuFill8(ptr, 0, 2 * sizeof(u16)); + + ptr[0] = param1; + ptr[1] = param2; + + FUN_0204640C(res->unk10, &FUN_0205FD70, (u32 *)ptr); +} + +THUMB_FUNC u32 FUN_0205FE10(struct SaveBlock2 *sav2) +{ + + u16 res = (u16)FUN_0202A150(FUN_02029FC8(sav2), 0x35); + if (res < 20) + { + return 0; + } + + u32 res2 = FUN_0202A8D8(sav2); + + u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0); + u8 res4 = (u8)FUN_0202A578(res2, 0, 0); + u8 res5 = (u8)FUN_0202A578(res2, 1, 0); + + u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0); + u8 res7 = (u8)FUN_0202A578(res2, 2, 0); + u8 res8 = (u8)FUN_0202A578(res2, 3, 0); + + if (res3 != 0 && res4 != 0 && res5 != 0) + { + return 0; + } + + u32 res9 = FUN_02026CC4(sav2); + if (res3 == 0) + { + if (FUN_02025D94(res9, 0x55) != 0) + { + FUN_0202A578(res2, 0xd, 1); + return 1; + } + + if (res6 == 0) + { + FUN_0202A578(res2, 0xe, 1); + } + + return 4; + } + + if (res < 50) + { + return 0; + } + + if (res4 == 0) + { + if (FUN_02025D94(res9, 0x56) != 0) + { + FUN_0202A578(res2, 0, 1); + return 2; + } + + if (res7 == 0) + { + FUN_0202A578(res2, 2, 1); + } + + return 4; + } + + if (res < 100 || res5 != 0) + { + return 0; + } + + if (FUN_02025D94(res9, 0x57) != 0) + { + FUN_0202A578(res2, 1, 1); + return 3; + } + + if (res8 == 0) + { + FUN_0202A578(res2, 3, 1); + } + + return 4; +} + +THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2) +{ + u16 res = (u16)FUN_0202A150(FUN_02029FC8(sav2), 0x35); + if (res < 20) + { + return 0; + } + + u32 res2 = FUN_0202A8D8(sav2); + + u8 res3 = (u8)FUN_0202A578(res2, 0xd, 0); + u8 res4 = (u8)FUN_0202A578(res2, 0, 0); + u8 res5 = (u8)FUN_0202A578(res2, 1, 0); + + u8 res6 = (u8)FUN_0202A578(res2, 0xe, 0); + u8 res7 = (u8)FUN_0202A578(res2, 2, 0); + u8 res8 = (u8)FUN_0202A578(res2, 3, 0); + + if (res3 != 0 && res4 != 0 && res5 != 0) + { + return 0; + } + + if (res3 == 0) + { + if (res6 != 0) + { + return 4; + } + + return 1; + } + + if (res < 50) + { + return 0; + } + + if (res4 == 0) + { + if (res7 != 0) + { + return 5; + } + + return 2; + } + + if (res < 100) + { + return 0; + } + + if (res5 != 0) + { + return 0; + } + + if (res8 != 0) + { + return 6; + } + + return 3; +} + +THUMB_FUNC void FUN_02060044(u16 **param0, u32 *param1) +{ + u16 *ptr = param0[42]; + + ptr[18] += param1[0]; + ptr[20] += param1[1]; + ptr[19] += param1[2]; +} + +THUMB_FUNC u32 FUN_02060064(u32 param0) +{ + return param0 * 0x02E90EDD + 1; +} + +THUMB_FUNC u32 FUN_02060070(u32 param0) +{ + return param0 * 0x5D588B65 + 1; +} + +THUMB_FUNC u32 FUN_0206007C(struct SaveBlock2 *sav2) +{ + u32 res = FUN_02060070(FUN_020287A4(FUN_0202881C(sav2))); + + FUN_0202A5CC(FUN_0202A8D8(sav2), res); + + return res; +} + +THUMB_FUNC u32 FUN_020600A0(struct SaveBlock2 *sav2) +{ + u32 res = FUN_0202A8D8(sav2); + + u32 res2 = FUN_02060070(FUN_0202A5D0(res)); + + FUN_0202A5CC(res, res2); + u32 res3 = FUN_02060064(res2); + + FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3); + + return res3; +} + +THUMB_FUNC u32 FUN_020600DC(struct SaveBlock2 *sav2) +{ + u32 res = FUN_0202A8D8(sav2); + + u32 res2 = FUN_0202A8CC(sav2); + + u32 res3 = FUN_02060064(FUN_0202A5D0(res)); + + int i = 0; + int res4 = FUN_0202A538(res, (u16)FUN_0202A240(res2, 0, 0), 0) * 0x18; + + for (i = 0; i < res4; i++) + { + res3 = FUN_02060064(res3); + } + + FUN_0202A2C4(FUN_0202A8CC(sav2), 0xa, &res3); + + return res3; +} + +THUMB_FUNC BOOL FUN_02060144(u32 **param0) +{ + if (param0[7][0] == SPECIES_ARCEUS) + { + return TRUE; + } + + return FALSE; +} diff --git a/arm9/src/unk_02064E4C.c b/arm9/src/unk_02064E4C.c index 1e9f8515..90ff8340 100644 --- a/arm9/src/unk_02064E4C.c +++ b/arm9/src/unk_02064E4C.c @@ -16,7 +16,7 @@ void FUN_02064E4C(struct MsgData * msgData, u16 map_sec, struct String * dest) void FUN_02064E60(u32 map_no, u32 heap_id, struct String * dest) { struct MsgData * msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 382, heap_id); - u16 map_sec = FUN_02034824(map_no); + u16 map_sec = MapHeader_GetMapSec(map_no); FUN_02064E4C(msgData, map_sec, dest); diff --git a/arm9/src/unk_0206BB28.c b/arm9/src/unk_0206BB28.c index baaecc6a..e7c12793 100644 --- a/arm9/src/unk_0206BB28.c +++ b/arm9/src/unk_0206BB28.c @@ -6,12 +6,12 @@ #pragma thumb on -BOOL FUN_0206BB28(struct SaveBlock2 * sav2) +BOOL SavArray_IsNatDexEnabled(struct SaveBlock2 * sav2) { - return FUN_0206BB34(Sav2_Pokedex_get(sav2)); + return Pokedex_IsNatDexEnabled(Sav2_Pokedex_get(sav2)); } -BOOL FUN_0206BB34(struct Pokedex * pokedex) +BOOL Pokedex_IsNatDexEnabled(struct Pokedex * pokedex) { return Pokedex_GetNatDexFlag(pokedex) == TRUE; } diff --git a/arm9/temp.c b/arm9/temp.c deleted file mode 100644 index e69de29b..00000000 --- a/arm9/temp.c +++ /dev/null diff --git a/files/poketool/icongra/poke_icon/.gitignore b/files/poketool/icongra/poke_icon/.gitignore index 15216251..8f4afa7f 100644 --- a/files/poketool/icongra/poke_icon/.gitignore +++ b/files/poketool/icongra/poke_icon/.gitignore @@ -1,5 +1,6 @@ narc_0000.NCLR narc_0002.NCER +narc_0004.NCER narc_0007.NCGR narc_0008.NCGR narc_0009.NCGR diff --git a/files/poketool/icongra/poke_icon/narc_0002.json b/files/poketool/icongra/poke_icon/narc_0002.json index a0d15511..defb5b41 100644 --- a/files/poketool/icongra/poke_icon/narc_0002.json +++ b/files/poketool/icongra/poke_icon/narc_0002.json @@ -1,5 +1,5 @@ { - "label": true, + "labelEnabled": true, "extended": true, "imageHeight": 32, "imageWidth": 32, @@ -31,8 +31,7 @@ "Priority": 0, "Palette": 0 } - }, - "label": "CellAnime0" + } }, { "readOnly": 2054, @@ -60,8 +59,9 @@ "Priority": 0, "Palette": 0 } - }, - "label": "CellAnime1" + } } - ] + ], + "labels": ["CellAnime0", "CellAnime1"], + "labelCount": 2 } diff --git a/files/poketool/icongra/poke_icon/narc_0004.NCER b/files/poketool/icongra/poke_icon/narc_0004.NCER Binary files differdeleted file mode 100644 index 10193211..00000000 --- a/files/poketool/icongra/poke_icon/narc_0004.NCER +++ /dev/null diff --git a/files/poketool/icongra/poke_icon/narc_0004.json b/files/poketool/icongra/poke_icon/narc_0004.json new file mode 100644 index 00000000..3d8b8b80 --- /dev/null +++ b/files/poketool/icongra/poke_icon/narc_0004.json @@ -0,0 +1,67 @@ +{ + "labelEnabled": true, + "extended": true, + "imageHeight": 32, + "imageWidth": 32, + "cellCount": 2, + "cells": [ + { + "readOnly": 2054, + "maxX": 15, + "maxY": 15, + "minX": 65520, + "minY": 65520, + "OAM": { + "Attr0": { + "YCoordinate": 240, + "Rotation": false, + "SizeDisable": false, + "Mode": 0, + "Mosaic": false, + "Colours": 16, + "Shape": 0 + }, + "Attr1": { + "XCoordinate": 496, + "RotationScaling": 0, + "Size": 2 + }, + "Attr2": { + "CharName": 0, + "Priority": 0, + "Palette": 0 + } + } + }, + { + "readOnly": 2054, + "maxX": 15, + "maxY": 15, + "minX": 65520, + "minY": 65520, + "OAM": { + "Attr0": { + "YCoordinate": 240, + "Rotation": false, + "SizeDisable": false, + "Mode": 0, + "Mosaic": false, + "Colours": 16, + "Shape": 0 + }, + "Attr1": { + "XCoordinate": 496, + "RotationScaling": 0, + "Size": 2 + }, + "Attr2": { + "CharName": 16, + "Priority": 0, + "Palette": 0 + } + } + } + ], + "labels": ["CellAnime0", "CellAnime1", "CellAnime2", "CellAnime3", "CellAnime4", "CellAnime5"], + "labelCount": 6 +} diff --git a/filesystem.mk b/filesystem.mk index 8aaff73f..4264c367 100644 --- a/filesystem.mk +++ b/filesystem.mk @@ -2588,6 +2588,7 @@ files/poketool/pokegra/pokegra.narc: \ files/poketool/icongra/poke_icon.narc: \ files/poketool/icongra/poke_icon/narc_0000.NCLR \ files/poketool/icongra/poke_icon/narc_0002.NCER \ + files/poketool/icongra/poke_icon/narc_0004.NCER \ files/poketool/icongra/poke_icon/narc_0007.NCGR \ files/poketool/icongra/poke_icon/narc_0008.NCGR \ files/poketool/icongra/poke_icon/narc_0009.NCGR \ diff --git a/graphics_rules.mk b/graphics_rules.mk index dd2525f1..8abbbbaa 100644 --- a/graphics_rules.mk +++ b/graphics_rules.mk @@ -880,7 +880,8 @@ NCLR_CLEAN_LIST := files/application/wifi_earth/wifi_earth/narc_0006.NCLR \ files/poketool/trgra/trfgra/narc_0192.NCLR \ files/poketool/trgra/trfgra/narc_0194.NCLR \ -NCER_CLEAN_LIST := files/poketool/icongra/poke_icon/narc_0002.NCER +NCER_CLEAN_LIST := files/poketool/icongra/poke_icon/narc_0002.NCER \ + files/poketool/icongra/poke_icon/narc_0004.NCER NSCR_CLEAN_LIST := files/demo/title/titledemo/narc_0000.NSCR \ files/demo/title/titledemo/narc_0008.NSCR \ diff --git a/include/GX_layers.h b/include/GX_layers.h new file mode 100644 index 00000000..e94fb4ec --- /dev/null +++ b/include/GX_layers.h @@ -0,0 +1,33 @@ +#ifndef POKEDIAMOND_GX_LAYERS_H +#define POKEDIAMOND_GX_LAYERS_H + + +#include "global.h" +#include "GX_vramcnt.h" +#include "error_message_reset.h" +#include "gx.h" + +struct GX_LayerData +{ + u32 EngineB_DISPCNT_LayerMask; + u32 EngineA_DISPCNT_LayerMask; +}; + + +typedef enum { + GX_LAYER_TOGGLE_OFF, + GX_LAYER_TOGGLE_ON, +} GX_LayerToggle; + + +THUMB_FUNC void GX_SetBanks(const struct GraphicsBanks *banks); +THUMB_FUNC void GX_DisableEngineALayers(); +THUMB_FUNC void GX_EngineAToggleLayers(u32 layer_mask, GX_LayerToggle layer_toggle); +THUMB_FUNC void GX_SetEngineALayers(u32 layer_mask); +THUMB_FUNC void GX_DisableEngineBLayers(); +THUMB_FUNC void GX_EngineBToggleLayers(u32 layer_mask, GX_LayerToggle layer_toggle); +THUMB_FUNC void GX_BothDispOn(); +THUMB_FUNC void GX_SwapDisplay(); +THUMB_FUNC u32 GX_GetEngineALayers(); + +#endif //POKEDIAMOND_GX_LAYERS_H diff --git a/include/error_message_reset.h b/include/error_message_reset.h new file mode 100644 index 00000000..d12cbf33 --- /dev/null +++ b/include/error_message_reset.h @@ -0,0 +1,39 @@ +#ifndef POKEDIAMOND_ERROR_MESSAGE_RESET_H +#define POKEDIAMOND_ERROR_MESSAGE_RESET_H + +#include "global.h" +#include "heap.h" +#include "SPI_pm.h" +#include "game_init.h" +#include "msgdata.h" +#include "text.h" + + + +struct GraphicsBanks +{ + s32 bg; + s32 bgextpltt; + s32 subbg; + s32 subbgextpltt; + s32 obj; + s32 objextpltt; + s32 subobj; + s32 subobjextpltt; + s32 tex; + s32 texpltt; +}; + + +struct GraphicsModes { + u32 mode1; + u32 mode2; + u32 mode3; + u32 mode4; +}; + + +THUMB_FUNC void VBlankHandler(); +THUMB_FUNC void PrintErrorMessageAndReset(); + +#endif //POKEDIAMOND_ERROR_MESSAGE_RESET_H diff --git a/include/event_data.h b/include/event_data.h index e1d46348..1f0f090a 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -1,6 +1,8 @@ #ifndef GUARD_SCRIPT_STATE_H #define GUARD_SCRIPT_STATE_H +#include "save_block_2.h" + struct ScriptState { u16 vars[288]; diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h deleted file mode 100644 index 4557a2e7..00000000 --- a/include/global.fieldmap.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef POKEDIAMOND_GLOBAL_FIELDMAP_H -#define POKEDIAMOND_GLOBAL_FIELDMAP_H - -struct MapHeader -{ - u8 unk0; - u8 unk1; - u16 unk2; - u16 unk4; - u16 unk6; - u16 unk8; - u16 unkA; - u16 unkC; - u16 unkE; - u16 unk10; - u16 mapsec; - u8 unk14; - u8 unk15; - u8 unk16; - u8 unk17_0:4; - u8 unk17_4:1; - u8 unk17_5:1; - u8 unk17_6:1; - u8 unk17_7:1; -}; - -#endif //POKEDIAMOND_GLOBAL_FIELDMAP_H diff --git a/include/global.h b/include/global.h index e0e8cb22..1c92a1ec 100644 --- a/include/global.h +++ b/include/global.h @@ -6,7 +6,6 @@ #include "MWC_string.h" #include "function_target.h" #include "nitro.h" -#include "global.fieldmap.h" #include "constants/global.h" #include "error_handling.h" diff --git a/include/heap.h b/include/heap.h index 6f04c5bc..69aedd9e 100644 --- a/include/heap.h +++ b/include/heap.h @@ -1,9 +1,37 @@ #ifndef POKEDIAMOND_HEAP_H #define POKEDIAMOND_HEAP_H -void * AllocFromHeap(u32 heap_id, u32 size); -void * AllocFromHeapAtEnd(u32 heap_id, u32 size); -void FreeToHeap(void * ptr); +#include "global.h" + +struct UnkStruct_020166C8 +{ + void **unk00; + void **unk04; + void **unk08; + u16 *unk0c; + u8 *unk10; + u16 unk14; + u16 unk16; + u16 unk18; + u16 unk1a; +}; + + +THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size); +THUMB_FUNC s32 FUN_020167F4(); +THUMB_FUNC u32 FUN_0201681C(u32 param0, u32 heap_id, u32 param2); +THUMB_FUNC u32 FUN_02016828(u32 param0, u32 param1, u32 param2); +THUMB_FUNC u32 FUN_02016834(u32 param0, u32 param1, u32 param2, s32 param3); +THUMB_FUNC void FUN_020168D0(u32 heap_id); +THUMB_FUNC u32 *FUN_02016944(void *param0, u32 param1, s32 param2, u32 param3); +THUMB_FUNC void FUN_02016988(); +void *AllocFromHeap(u32 heap_id, u32 size); +void *AllocFromHeapAtEnd(u32 heap_id, u32 size); +void FreeToHeap(void *ptr); void FUN_02016A8C(u32 heap_id, void * ptr); +THUMB_FUNC u32 FUN_02016AF8(u32 param0); +THUMB_FUNC void FUN_02016B20(u32 param0, u32 param1, u32 param2); +THUMB_FUNC void FUN_02016B44(void *ptr, u32 param1); +THUMB_FUNC u32 FUN_02016B90(u32 param0); #endif //POKEDIAMOND_HEAP_H diff --git a/include/map.h b/include/map.h deleted file mode 100644 index 18b8c1d1..00000000 --- a/include/map.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef POKEDIAMOND_MAP_H -#define POKEDIAMOND_MAP_H - -typedef struct { - u8 MapAreaData; - u8 field_0x1; - u16 Matrix; - u16 MapScripts; - u16 MapLevelScripts; - u16 MapTexts; - u16 DayMusic; - u16 NightMusic; - u16 WildPokemonData; - u16 MapEvents; - u16 MapName; - u8 WeatherType; - u8 field_0x15; - u8 field_0x16; - u8 field_0x17; -} MapHeader; - -#endif //POKEDIAMOND_MAP_H diff --git a/include/map_header.h b/include/map_header.h index e4e96a59..20677025 100644 --- a/include/map_header.h +++ b/include/map_header.h @@ -1,27 +1,50 @@ #ifndef POKEDIAMOND_MAP_HEADER_H #define POKEDIAMOND_MAP_HEADER_H -u8 FUN_02034724(u32 mapno); -u8 FUN_02034738(u32 mapno); -u16 FUN_0203474C(u32 mapno); +struct MapHeader +{ + u8 area_data_bank; + u8 unk1; + u16 matrix_id; + u16 scripts_bank; + u16 level_scripts_bank; + u16 msg_bank; + u16 day_music_id; + u16 night_music_id; + u16 wild_encounter_bank; + u16 events_bank; + u16 mapsec; + u8 weather_type; + u8 camera_type; + u8 unk16; + u8 unk17_0:4; + u8 is_bike_allowed:1; + u8 unk17_5:1; + u8 unk17_6:1; + u8 is_fly_allowed:1; +}; + +u8 MapHeader_GetAreaDataBank(u32 mapno); +u8 MapHeader_GetField1(u32 mapno); +u16 MapHeader_GetMatrixId(u32 mapno); u16 MapHeader_GetMsgBank(u32 mapno); -u16 MapHeader_GetScrSeqReleaseNo(u32 mapno); -u16 FUN_0203479C(u32 mapno); -u16 FUN_020347B0(u32 mapno); -u16 FUN_020347C4(u32 mapno); -BOOL FUN_020347D8(u32 mapno); -u16 FUN_020347FC(u32 mapno); -u16 FUN_02034810(u32 mapno); -u16 FUN_02034824(u32 mapno); -u8 FUN_02034838(u32 mapno); -u8 FUN_0203484C(u32 mapno); -u8 FUN_02034860(u32 mapno); -u8 FUN_0203487C(u32 mapno); -u8 FUN_02034898(u32 mapno); -u8 FUN_020348B4(u32 mapno); -u8 FUN_020348D0(u32 mapno); +u16 MapHeader_GetScriptsBank(u32 mapno); +u16 MapHeader_GetLevelScriptsBank(u32 mapno); +u16 MapHeader_GetDayMusicId(u32 mapno); +u16 MapHeader_GetNightMusicId(u32 mapno); +BOOL MapHeader_HasWildEncounters(u32 mapno); +u16 MapHeader_GetWildEncounterBank(u32 mapno); +u16 MapHeader_GetEventsBank(u32 mapno); +u16 MapHeader_GetMapSec(u32 mapno); +u8 MapHeader_GetWeatherType(u32 mapno); +u8 MapHeader_GetCameraType(u32 mapno); +u8 MapHeader_GetField17_0(u32 mapno); +u8 MapHeader_GetField17_6(u32 mapno); +u8 MapHeader_IsFlyAllowed(u32 mapno); +u8 MapHeader_IsBikeAllowed(u32 mapno); +u8 MapHeader_GetField16(u32 mapno); BOOL FUN_020348E4(u32 mapno); -BOOL FUN_02034908(u32 mapno); +BOOL MapHeader_MapIsOnOverworldMatrix(u32 mapno); BOOL FUN_0203491C(u32 mapno); BOOL FUN_02034930(u32 mapno); BOOL FUN_02034944(u32 mapno); diff --git a/include/scrcmd.h b/include/scrcmd.h index 5ebec947..120a0c96 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -1,6 +1,257 @@ #ifndef POKEDIAMOND_SCRCMD_H #define POKEDIAMOND_SCRCMD_H -BOOL ScrCmd_givemon(struct ScriptContext* ctx); +#include "global.h" +#include "script.h" + +extern u16 VarGet(struct UnkSavStruct80* arg, u16); +extern u16* GetVarPointer(struct UnkSavStruct80* arg, u16); +extern struct SaveBlock2* ScriptEnvironment_GetSav2Ptr(struct UnkSavStruct80* unk); + +struct UnkStruct_0203A288 { + u8 unk0; + u8 unk1; + u8 unk2; + u8 padding[1]; +}; + +//scrcmd.c +BOOL ScrCmd_Nop(struct ScriptContext* ctx); +BOOL ScrCmd_Dummy(struct ScriptContext* ctx); +BOOL ScrCmd_End(struct ScriptContext* ctx); +BOOL ScrCmd_Wait(struct ScriptContext* ctx); +BOOL ScrCmd_DebugWatch(struct ScriptContext* ctx); +BOOL ScrCmd_LoadByte(struct ScriptContext* ctx); +BOOL ScrCmd_LoadWord(struct ScriptContext* ctx); +BOOL ScrCmd_LoadByteFromAddr(struct ScriptContext* ctx); +BOOL ScrCmd_WriteByteToAddr(struct ScriptContext* ctx); +BOOL ScrCmd_SetPtrByte(struct ScriptContext* ctx); +BOOL ScrCmd_CopyLocal(struct ScriptContext* ctx); +BOOL ScrCmd_CopyByte(struct ScriptContext* ctx); +BOOL ScrCmd_CompareLocalToLocal(struct ScriptContext* ctx); +BOOL ScrCmd_CompareLocalToValue(struct ScriptContext* ctx); +BOOL ScrCmd_CompareLocalToAddr(struct ScriptContext* ctx); +BOOL ScrCmd_CompareAddrToLocal(struct ScriptContext* ctx); +BOOL ScrCmd_CompareAddrToValue(struct ScriptContext* ctx); +BOOL ScrCmd_CompareAddrToAddr(struct ScriptContext* ctx); +BOOL ScrCmd_CompareVarToValue(struct ScriptContext* ctx); +BOOL ScrCmd_CompareVarToVar(struct ScriptContext* ctx); +BOOL ScrCmd_RunScript(struct ScriptContext* ctx); +BOOL ScrCmd_RunScriptWait(struct ScriptContext* ctx); +BOOL ScrCmd_RestartCurrentScript(struct ScriptContext* ctx); +BOOL ScrCmd_GoTo(struct ScriptContext* ctx); +BOOL ScrCmd_ObjectGoTo(struct ScriptContext* ctx); +BOOL ScrCmd_BgGoTo(struct ScriptContext* ctx); +BOOL ScrCmd_DirectionGoTo(struct ScriptContext* ctx); +BOOL ScrCmd_Call(struct ScriptContext* ctx); +BOOL ScrCmd_Return(struct ScriptContext* ctx); +BOOL ScrCmd_GoToIf(struct ScriptContext* ctx); +BOOL ScrCmd_CallIf(struct ScriptContext* ctx); +BOOL ScrCmd_SetFlag(struct ScriptContext* ctx); +BOOL ScrCmd_ClearFlag(struct ScriptContext* ctx); +BOOL ScrCmd_CheckFlag(struct ScriptContext* ctx); +BOOL ScrCmd_CheckFlagVar(struct ScriptContext* ctx); +BOOL ScrCmd_SetFlagVar(struct ScriptContext* ctx); +BOOL ScrCmd_SetTrainerFlag(struct ScriptContext* ctx); +BOOL ScrCmd_ClearTrainerFlag(struct ScriptContext* ctx); +BOOL ScrCmd_CheckTrainerFlag(struct ScriptContext* ctx); +BOOL ScrCmd_AddVar(struct ScriptContext* ctx); +BOOL ScrCmd_SubVar(struct ScriptContext* ctx); +BOOL ScrCmd_SetVar(struct ScriptContext* ctx); +BOOL ScrCmd_CopyVar(struct ScriptContext* ctx); +BOOL ScrCmd_SetOrCopyVar(struct ScriptContext* ctx); +BOOL ScrCmd_Message(struct ScriptContext* ctx); +BOOL ScrCmd_MessageFrom(struct ScriptContext* ctx); +BOOL ScrCmd_MessageFrom2(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01FC(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01FD(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01FE(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01FF(struct ScriptContext* ctx); +BOOL ScrCmd_Unk026D(struct ScriptContext* ctx); +BOOL ScrCmd_Unk002C(struct ScriptContext* ctx); +BOOL ScrCmd_Unk002D(struct ScriptContext* ctx); +BOOL ScrCmd_Unk02C0(struct ScriptContext* ctx); +BOOL ScrCmd_Unk002E(struct ScriptContext* ctx); +BOOL ScrCmd_Unk020C(struct ScriptContext* ctx); +BOOL ScrCmd_Unk002F(struct ScriptContext* ctx); +BOOL ScrCmd_WaitButtonAB(struct ScriptContext* ctx); +BOOL ScrCmd_WaitButtonABTime(struct ScriptContext *ctx); +BOOL ScrCmd_WaitButton(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0032(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0033(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0034(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0035(struct ScriptContext* ctx); +BOOL ScrCmd_ScrollBg(struct ScriptContext* ctx); +BOOL ScrCmd_CreateMessageBox(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0037(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0038(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0039(struct ScriptContext* ctx); +BOOL ScrCmd_Unk003A(struct ScriptContext* ctx); +BOOL ScrCmd_Unk003B(struct ScriptContext *ctx); +BOOL ScrCmd_Menu(struct ScriptContext *ctx); +BOOL ScrCmd_YesNoMenu(struct ScriptContext *ctx); +BOOL ScrCmd_ShowSaveClock(struct ScriptContext *ctx); +BOOL ScrCmd_HideSaveClock(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0040(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0041(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0042(struct ScriptContext *ctx); +BOOL ScrCmd_Unk029D(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0043(struct ScriptContext *ctx); +BOOL ScrCmd_Unk02B9(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0044(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0045(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0046(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0047(struct ScriptContext *ctx); +BOOL ScrCmd_Unk0048(struct ScriptContext *ctx); +BOOL ScrCmd_Unk02CF(struct ScriptContext *ctx); +BOOL ScrCmd_Unk02D0(struct ScriptContext *ctx); + +//scrcmd_4.c +BOOL ScrCmd_GetPlayerName(struct ScriptContext* ctx); +BOOL ScrCmd_GetRivalName(struct ScriptContext* ctx); +BOOL ScrCmd_GetFriendName(struct ScriptContext* ctx); +BOOL ScrCmd_Unk00D0(struct ScriptContext* ctx); +BOOL ScrCmd_GetItemName(struct ScriptContext* ctx); +BOOL ScrCmd_GetPocketName(struct ScriptContext* ctx); +BOOL ScrCmd_GetTMHMMoveName(struct ScriptContext* ctx); +BOOL ScrCmd_GetMoveName(struct ScriptContext* ctx); +BOOL ScrCmd_Unk00D5(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0280(struct ScriptContext* ctx); +BOOL ScrCmd_Unk00D6(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0251(struct ScriptContext* ctx); +BOOL ScrCmd_GetPoketchAppName(struct ScriptContext* ctx); +BOOL ScrCmd_GetTrainerClassName(struct ScriptContext* ctx); +BOOL ScrCmd_Unk00D9(struct ScriptContext* ctx); +BOOL ScrCmd_Unk00DA(struct ScriptContext* ctx); +struct String* FUN_02040AE4(u32 msg_no, u32 heap_id); +BOOL ScrCmd_Unk00DB(struct ScriptContext* ctx); +BOOL ScrCmd_Unk00DC(struct ScriptContext* ctx); +BOOL ScrCmd_Unk00DD(struct ScriptContext* ctx); +BOOL ScrCmd_GetDecorationName(struct ScriptContext* ctx); +BOOL ScrCmd_GetUndergroundTrapName(struct ScriptContext* ctx); +BOOL ScrCmd_GetUndergroundItemName(struct ScriptContext* ctx); +BOOL ScrCmd_Unk00E2(struct ScriptContext* ctx); +BOOL ScrCmd_Unk017B(struct ScriptContext* ctx); +BOOL ScrCmd_GetNatureName(struct ScriptContext* ctx); +BOOL ScrCmd_GetFashionName(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0272(struct ScriptContext* ctx); +BOOL ScrCmd_GetPokemonMoveName(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0232(struct ScriptContext* ctx); +BOOL ScrCmd_GetSealName(struct ScriptContext* ctx); +BOOL ScrCmd_GetItemNameWithIndefArticle(struct ScriptContext* ctx); +BOOL ScrCmd_GetItemNamePlural(struct ScriptContext* ctx); +BOOL ScrCmd_GetDecorationNameWithArticle(struct ScriptContext* ctx); +BOOL ScrCmd_GetUndergroundTrapNameWithArticle(struct ScriptContext* ctx); +BOOL ScrCmd_GetUndergroundItemNameWithArticle(struct ScriptContext* ctx); +BOOL ScrCmd_Unk02C9(struct ScriptContext* ctx); +BOOL ScrCmd_Unk02CA(struct ScriptContext* ctx); +BOOL ScrCmd_GetFashionNameWithArticle(struct ScriptContext* ctx); +BOOL ScrCmd_Unk02CC(struct ScriptContext* ctx); +BOOL ScrCmd_GetSealNamePlural(struct ScriptContext* ctx); +BOOL ScrCmd_CapitalizeFirstChar(struct ScriptContext* ctx); + +//scrcmd_11.c +BOOL ScrCmd_Unk017D(struct ScriptContext* ctx); +BOOL ScrCmd_Unk017E(struct ScriptContext* ctx); +BOOL ScrCmd_Unk017F(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0180(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0181(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0182(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0183(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0184(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0185(struct ScriptContext* ctx); + +//scrcmd_13.c +BOOL ScrCmd_Unk0253(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0254(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0255(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0256(struct ScriptContext* ctx); + +//scrcmd_coins.c +BOOL ScrCmd_Unk0075(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0076(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0077(struct ScriptContext* ctx); +BOOL ScrCmd_GetCoins(struct ScriptContext* ctx); +BOOL ScrCmd_GiveCoins(struct ScriptContext* ctx); +BOOL ScrCmd_TakeCoinsImmediate(struct ScriptContext* ctx); +BOOL ScrCmd_TakeCoinsAddress(struct ScriptContext* ctx); +BOOL ScrCmd_HasEnoughCoinsImmediate(struct ScriptContext* ctx); +BOOL ScrCmd_HasEnoughCoinsAddress(struct ScriptContext* ctx); +BOOL ScrCmd_CanGiveCoins(struct ScriptContext* ctx); + +//scrcmd_money.c +BOOL ScrCmd_GiveMoney(struct ScriptContext* ctx); +BOOL ScrCmd_TakeMoneyImmediate(struct ScriptContext* ctx); +BOOL ScrCmd_TakeMoneyAddress(struct ScriptContext* ctx); +BOOL ScrCmd_HasEnoughMoneyImmediate(struct ScriptContext* ctx); +BOOL ScrCmd_HasEnoughMoneyAddress(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0072(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0073(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0074(struct ScriptContext* ctx); + +//scrcmd_daycare.c +BOOL ScrCmd_Unk016D(struct ScriptContext* ctx); +BOOL ScrCmd_Unk016E(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01A8(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01A9(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01A4(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01AA(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01AE(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01AF(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01B0(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01BC(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01BE(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01BF(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01A5(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01A6(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01A7(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01AD(struct ScriptContext* ctx); + +//scrcmd_18.c +BOOL ScrCmd_GiveMon(struct ScriptContext* ctx); + +//scrcmd_19.c +BOOL ScrCmd_Unk01F1(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01F4(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01F5(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01F2(struct ScriptContext* ctx); +BOOL ScrCmd_Unk01F3(struct ScriptContext* ctx); + +//scrcmd_20.c +BOOL ScrCmd_Unk02A6(struct ScriptContext* ctx); + +//scrcmd_items.c +BOOL ScrCmd_GiveItem(struct ScriptContext* ctx); +BOOL ScrCmd_TakeItem(struct ScriptContext* ctx); +BOOL ScrCmd_HasSpaceForItem(struct ScriptContext* ctx); +BOOL ScrCmd_HasItem(struct ScriptContext* ctx); +BOOL ScrCmd_ItemIdIsTMOrHM(struct ScriptContext* ctx); +BOOL ScrCmd_GetItemPocketId(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0081(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0082(struct ScriptContext* ctx); + +//scrcmd_23.c +BOOL ScrCmd_Unk0083(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0084(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0085(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0086(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0087(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0088(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0089(struct ScriptContext* ctx); +BOOL ScrCmd_Unk008A(struct ScriptContext* ctx); +BOOL ScrCmd_Unk008B(struct ScriptContext* ctx); +BOOL ScrCmd_Unk008C(struct ScriptContext* ctx); +BOOL ScrCmd_Unk008D(struct ScriptContext* ctx); +BOOL ScrCmd_Unk008E(struct ScriptContext* ctx); +BOOL ScrCmd_Unk008F(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0090(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0091(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0092(struct ScriptContext* ctx); + +//scrcmd_25.c +BOOL ScrCmd_Unk023F(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0240(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0241(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0242(struct ScriptContext* ctx); #endif //POKEDIAMOND_SCRCMD_H diff --git a/include/script.h b/include/script.h index 8fd7696f..9a7270c2 100644 --- a/include/script.h +++ b/include/script.h @@ -10,30 +10,60 @@ struct ScriptContext; typedef u8 (*ScrCmdFunc)(struct ScriptContext *);
typedef u8 Script[];
+
+struct UnkStruct_020464D4
+{
+ u16 unk0[4];
+ u8 padding[0x108];
+};
+
+struct UnkStruct_02046444
+{
+ u8 padding[0x90];
+ struct UnkStruct_020464D4 unk90[1]; //todo find size
+};
+
+struct UnkSavStruct80
+{
+ u8 padding[0x8];
+ u32 unk08;
+ struct SaveBlock2 *saveBlock2; //0xC
+ u8 padding2[0xC];
+ u32 *mapId; //0x1C
+ u8 padding3[0x18];
+ u32 unk38;
+ u8 padding4[0x24];
+ u32 unk60;
+ u8 padding5[0x14];
+ u32 unk78;
+ u8 padding6[0x2C];
+ struct UnkStruct_02046444 * unkA8;
+};
+
struct ScriptContext
{
u8 stackDepth;
u8 mode;
u8 comparisonResult;
- u8 (*nativePtr)(struct ScriptContext *);
+ BOOL (*nativePtr)(struct ScriptContext *);
const u8 *scriptPtr;
const u8 *stack[20];
ScrCmdFunc *cmdTable;
u32 cmdCount;
u32 data[4];
- u32 unk74;
- struct MsgData * unk78;
- u8 *unk7C;
- struct UnkStruct_0204639C * unk80;
+ struct UnkStruct_0204639C *unk74;
+ struct MsgData *msgData;
+ u8 *unk7C;
+ struct UnkSavStruct80 *unk80;
};
#define ScriptReadByte(ctx) (*(ctx->scriptPtr++))
void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 cmdCount);
u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr);
-void SetupNativeScript(struct ScriptContext *ctx, u8 (*ptr)(struct ScriptContext *));
+void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *));
void StopScript(struct ScriptContext *ctx);
-void FUN_02038B6C(struct ScriptContext *ctx, s32 r1);
+void FUN_02038B6C(struct ScriptContext *ctx, struct UnkStruct_0204639C *r1);
u8 RunScriptCommand(struct ScriptContext *ctx);
u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr);
const u8 *ScriptPop(struct ScriptContext *ctx);
diff --git a/include/timer3.h b/include/timer3.h new file mode 100644 index 00000000..be6e1da8 --- /dev/null +++ b/include/timer3.h @@ -0,0 +1,21 @@ +#ifndef POKEDIAMOND_TIMER3_H +#define POKEDIAMOND_TIMER3_H + + +#include "global.h" + +struct Timer3Data +{ + BOOL NeedReset; + vu64 Timer3Counter; +}; + +THUMB_FUNC void Init_Timer3(); +THUMB_FUNC void CountUpTimer3(); +THUMB_FUNC u64 internal_GetTimer3Count(); +THUMB_FUNC u64 GetTimer3Count(); +THUMB_FUNC u64 Timer3CountToMilliSeconds(u64 count); +THUMB_FUNC u64 Timer3CountToSeconds(u64 count); + + +#endif //POKEDIAMOND_TIMER3_H diff --git a/include/unk_02015E30.h b/include/unk_02015E30.h new file mode 100644 index 00000000..6a4d6c15 --- /dev/null +++ b/include/unk_02015E30.h @@ -0,0 +1,22 @@ +#ifndef POKEDIAMOND_UNK_02015E30_H +#define POKEDIAMOND_UNK_02015E30_H + +#include "global.h" +#include "igt.h" +#include "timer3.h" + +struct UnkStruct_02015E30 +{ + u32 unk00; + struct IGT *unk04; + u64 unk08; + u32 unk10; + u32 unk14; + u64 unk18; +}; + +THUMB_FUNC void FUN_02015E30(); +THUMB_FUNC void FUN_02015E3C(struct IGT *igt); +THUMB_FUNC void FUN_02015E60(); + +#endif //POKEDIAMOND_UNK_02015E30_H diff --git a/include/unk_02024E64.h b/include/unk_02024E64.h new file mode 100644 index 00000000..ed1bd447 --- /dev/null +++ b/include/unk_02024E64.h @@ -0,0 +1,28 @@ +#ifndef POKEDIAMOND_UNK_02024E64_H +#define POKEDIAMOND_UNK_02024E64_H + +#include "global.h" +#include "MI_memory.h" +#include "save_block_2.h" +#include "string16.h" + +struct UnkStruct_02024E64 { + u8 unk0[0xE][0x80]; + u8 unk700[0x24]; + u16 rival_name_buf[0x8]; + u16 unk734[0xB]; + u8 unk74A[2]; // might be padding +}; + +THUMB_FUNC u32 FUN_02024E64(); +THUMB_FUNC void FUN_02024E6C(struct UnkStruct_02024E64 *param0); +THUMB_FUNC struct UnkStruct_02024E64 *FUN_02024EB4(struct SaveBlock2 *sav2); +THUMB_FUNC void *FUN_02024EC0(struct SaveBlock2 *sav2); +THUMB_FUNC struct UnkStruct_02024E64 *FUN_02024ECC(struct SaveBlock2 *sav2); +THUMB_FUNC void *FUN_02024ED8(struct SaveBlock2 *sav2); +THUMB_FUNC u16 *GetRivalNamePtr(struct UnkStruct_02024E64 *unk); +THUMB_FUNC void RivalsNameToU16Array(struct UnkStruct_02024E64 *unk, struct String *str); +THUMB_FUNC u16 *FUN_02024F0C(struct UnkStruct_02024E64 *unk); +THUMB_FUNC void FUN_02024F18(struct UnkStruct_02024E64 *unk, struct String *str); + +#endif diff --git a/include/unk_02025484.h b/include/unk_02025484.h new file mode 100644 index 00000000..0412dda1 --- /dev/null +++ b/include/unk_02025484.h @@ -0,0 +1,18 @@ +#ifndef POKEDIAMOND_UNK_02025484_H +#define POKEDIAMOND_UNK_02025484_H + +struct unk_2025484 +{ + // size: 0x24 + u32 unk0; + u32 unk4; + u8 padding[0x1C]; +}; + +void FUN_02025484(struct unk_2025484 *r0, u32 r1); +u32 *FUN_02025490(struct unk_2025484 *r0, u32 r1); +u32 *FUN_020254A0(struct unk_2025484 *r0, u32 r1); +u32 FUN_020254B4(struct unk_2025484 *r0); + +#endif POKEDIAMOND_UNK_02025484_H + diff --git a/include/unk_02029FB0.h b/include/unk_02029FB0.h index 0185bff4..9ce6451d 100644 --- a/include/unk_02029FB0.h +++ b/include/unk_02029FB0.h @@ -1,6 +1,8 @@ #ifndef POKEDIAMOND_UNK_02029FB0_H #define POKEDIAMOND_UNK_02029FB0_H +struct Pokedex; + struct UnkStruct_02029FB0 { u8 unk[0x14C]; diff --git a/include/unk_0202F150.h b/include/unk_0202F150.h new file mode 100644 index 00000000..3996c1c8 --- /dev/null +++ b/include/unk_0202F150.h @@ -0,0 +1,184 @@ +#ifndef POKEDIAMOND_UNK_0202F150_H +#define POKEDIAMOND_UNK_0202F150_H + +#include "global.h" +#include "MI_memory.h" +#include "RTC_api.h" +#include "heap.h" +#include "main.h" + +struct UnkStruct0202F150_sub1 +{ + u32 unk00; + s16 unk04; + s16 unk06; + u32 unk08; +}; + +struct UnkStruct0202F150_sub2 +{ + u32 unk00; + void *unk04; + u16 unk08; + u8 unk0a; +}; + +struct UnkStruct0202F150 +{ + u8 unk000[2][38]; + u8 unk04c[264]; + u8 unk154[2][192]; + u8 unk2D4[384]; + void *unk454; + void *unk458; + void *unk45C; + void *unk460; + struct UnkStruct0202F150_sub1 unk464; + struct UnkStruct0202F150_sub1 unk470; + struct UnkStruct0202F150_sub1 unk47C[8]; + struct UnkStruct0202F150_sub1 unk4DC; + struct UnkStruct0202F150_sub1 unk4E8[8]; + u32 unk548; + u8 unk54C[32]; + u8 unk56C[32]; + struct UnkStruct0202F150_sub2 unk58C[8]; + u32 unk5EC; + u32 unk5F0; + u16 unk5F4; + u8 unk5F6; + u8 unk5F7; + s64 unk5F8[3]; + u16 unk610[8]; + u8 unk620[0x8]; + u16 unk628; + u8 unk62A; + u8 unk62B; + u8 unk62C; + s8 unk62D; + u16 unk62E; + u32 unk630; + u32 unk634; + u32 unk638[8]; + u32 unk658; + u16 unk65C; + u8 unk65E; + u8 unk65F[8]; + u8 unk667[8]; + u8 unk66F[8]; + u8 unk677[4]; + u8 unk67B; + u8 unk67C; + u8 unk67D; + u8 unk67E; + u8 unk67F; + u8 unk680; + u8 unk681; + u8 unk682; + u8 unk683; + u8 unk684; + u8 unk685; + u8 unk686; + u8 unk687; + u8 unk688; + u8 unk689; + u8 unk68A; + u8 unk68B; +}; + +THUMB_FUNC u32 FUN_0202F150(u32 param0, u32 param1); +THUMB_FUNC void FUN_0202F2F0(); +THUMB_FUNC void FUN_0202F5A4(); +THUMB_FUNC void FUN_0202F820(int param0); +THUMB_FUNC void FUN_0202F8D4(); +THUMB_FUNC void FUN_0202F910(int param0); +THUMB_FUNC u32 FUN_0202F918(u32 param0, u32 param1, u32 param2, u32 param3); +THUMB_FUNC u32 FUN_0202F950(u32 param0, u32 param1, u32 param2); +THUMB_FUNC void FUN_0202F984(); +THUMB_FUNC void FUN_0202F9E0(u32 param0); +THUMB_FUNC void FUN_0202FA10(); +THUMB_FUNC void FUN_0202FA1C(); +THUMB_FUNC u8 FUN_0202FA28(); +THUMB_FUNC u32 FUN_0202FA48(); +THUMB_FUNC void FUN_0202FA5C(); +THUMB_FUNC u32 FUN_0202FB18(u32 param0); +THUMB_FUNC void FUN_0202FB20(); +THUMB_FUNC void FUN_0202FB58(); +THUMB_FUNC u32 FUN_0202FB80(); +THUMB_FUNC void FUN_0202FC60(); +THUMB_FUNC void FUN_0202FC80(); +THUMB_FUNC void FUN_0202FCA8(); +THUMB_FUNC void FUN_0202FCCC(); +THUMB_FUNC u32 FUN_0202FE2C(int param0); +THUMB_FUNC void FUN_0202FEEC(); +THUMB_FUNC void FUN_02030074(); +THUMB_FUNC void FUN_02030238(u32 param0, void *param1, u32 param2); +THUMB_FUNC void FUN_0203026C(u32 param0, u8 *param1, u32 param2); +THUMB_FUNC void FUN_020303BC(u32 param0, u8 *param1, u16 param2); +THUMB_FUNC void FUN_020303F4(u32 param0, u8 *param1, u16 param2); +THUMB_FUNC void FUN_020304D4(u32 param0); +THUMB_FUNC void FUN_020304F0(u32 param0); +THUMB_FUNC void FUN_0203050C(); +THUMB_FUNC void FUN_02030674(); +THUMB_FUNC void FUN_020307A8(); +THUMB_FUNC void FUN_020307BC(); +THUMB_FUNC void FUN_020307D0(); +THUMB_FUNC u32 FUN_020307E4(u8 *param0, u32 param1); +THUMB_FUNC void FUN_0203086C(); +THUMB_FUNC u32 FUN_02030870(u8 *param0); +THUMB_FUNC u32 FUN_02030930(u8 *param0); +THUMB_FUNC void FUN_02030A00(u8 *param0); +THUMB_FUNC u32 FUN_02030A78(u32 param0, u8 *param1, u32 param2); +THUMB_FUNC u32 FUN_02030ADC(u32 param0, u8 *param1, u32 param2); +THUMB_FUNC u32 FUN_02030B3C(u32 param0, u8 *param1, u32 param2); +THUMB_FUNC u32 FUN_02030BC4(u32 param0, u8 *param1, u32 param2); +THUMB_FUNC u32 FUN_02030C4C(u32 param0, u8 *param1); +THUMB_FUNC int FUN_02030C58(); +THUMB_FUNC void FUN_02030C70( + u32 param0, u32 param1, u32 param2, void *param3, struct UnkStruct0202F150_sub2 *param4); +THUMB_FUNC void FUN_02030C8C(struct UnkStruct0202F150_sub1 *param0, + u32 param1, + void *param2, + u32 param3, + struct UnkStruct0202F150_sub2 *param4); +THUMB_FUNC void FUN_02030DA4(); +THUMB_FUNC void FUN_02030DFC(); +THUMB_FUNC u32 FUN_02030E7C(u16 param0); +THUMB_FUNC u32 FUN_02030F20(); +THUMB_FUNC u32 FUN_02030F40(); +THUMB_FUNC void FUN_02030F60(u8 param0); +THUMB_FUNC u8 FUN_02030F74(u32 param0); +THUMB_FUNC u32 FUN_02030F88(u32 param0); +THUMB_FUNC void FUN_02030FA8(); +THUMB_FUNC void FUN_02030FC8(); +THUMB_FUNC u32 FUN_02030FE0(); +THUMB_FUNC void FUN_02031000(u32 param0, u8 *param1, u32 param2); +THUMB_FUNC void FUN_0203105C(u32 param0, u8 *param1, u32 param2); +THUMB_FUNC void FUN_02031088(); +THUMB_FUNC void FUN_0203110C(u32 param0, u32 param1, u8 *param2); +THUMB_FUNC void FUN_02031134(u32 param0, u32 param1, u8 *param2); +THUMB_FUNC void FUN_0203115C(u32 param0, u32 param1, u8 *param2); +THUMB_FUNC u16 FUN_02031190(); +THUMB_FUNC u32 FUN_020311D0(u32 param0, u8 *param1); +THUMB_FUNC u32 FUN_020311DC(u32 param0); +THUMB_FUNC u32 FUN_020311E8(); +THUMB_FUNC u32 FUN_020311F0(); +THUMB_FUNC int FUN_02031228(u16 param0); +THUMB_FUNC u32 FUN_02031248(u32 param0); +THUMB_FUNC u32 FUN_02031258(u32 param0); +THUMB_FUNC void FUN_02031268(u8 param0); +THUMB_FUNC u8 FUN_02031280(); +THUMB_FUNC void FUN_0203129C(); +THUMB_FUNC void FUN_020312BC(s64 *param0); +THUMB_FUNC void FUN_02031354(u32 param0); +THUMB_FUNC u32 FUN_02031370(); +THUMB_FUNC u32 FUN_02031388(); +THUMB_FUNC void FUN_020313A0(u8 param0); +THUMB_FUNC void FUN_020313B4(u8 param0, u32 param1); +THUMB_FUNC u32 FUN_020313CC(u32 param0); +THUMB_FUNC u32 FUN_020313EC(); +THUMB_FUNC void FUN_02031400(u32 param0); +THUMB_FUNC u32 FUN_02031438(); +THUMB_FUNC void FUN_02031454(); +THUMB_FUNC void FUN_02031468(); + +#endif // POKEDIAMOND_UNK_0202F150_H diff --git a/include/unk_0204AEA8.h b/include/unk_0204AEA8.h new file mode 100644 index 00000000..90e13cc2 --- /dev/null +++ b/include/unk_0204AEA8.h @@ -0,0 +1,7 @@ +#ifndef POKEDIAMOND_UNK_0204AEA8_H +#define POKEDIAMOND_UNK_0204AEA8_H + +BOOL FUN_0204AEA8(struct UnkStruct_0204639C *a0); +void FUN_0204AEF8(struct UnkStruct_0204639C *a0, u32 a1, u32 a2); + +#endif diff --git a/include/unk_0205FA2C.h b/include/unk_0205FA2C.h new file mode 100644 index 00000000..99cf7606 --- /dev/null +++ b/include/unk_0205FA2C.h @@ -0,0 +1,120 @@ +#ifndef POKEDIAMOND_UNK_0205FA2C_H +#define POKEDIAMOND_UNK_0205FA2C_H + +#include "global.h" +#include "MI_memory.h" +#include "bag.h" +#include "heap.h" +#include "party.h" +#include "player_data.h" +#include "script.h" +#include "unk_020286F8.h" +#include "unk_02029FB0.h" +#include "unk_0202A8F4.h" +#include "unk_0204639C.h" +#include "unk_0206BB28.h" + +struct UnkPlayerStruct1_0205FA2C +{ + /* 0x00 */ struct PlayerParty *player_party; + /* 0x04 */ struct Bag *bag; + u32 unk08; + /* 0x0c */ struct Options *options; + u32 unk10[4]; + u8 unk20; + u8 unk21; + u8 unk22; + u8 unk23; + u32 unk24[2]; + u8 unk2c[6]; + u8 unk32 : 4; + u8 unk322 : 4; + u8 unk33; + u32 unk34[3]; +}; + +struct UnkPlayerStruct2_0205FA2C +{ + /* 0x00 */ struct PlayerParty *player_party; + /* 0x04 */ struct Options *options; + u32 unk08; + u32 unk0c; + u8 unk10; + u8 unk11; + u8 unk12; + /* 0x04 */ u8 party_count; + u8 unk14; + u8 unk15[3]; + u16 unk18; + u16 unk1a; + /* 0x1c */ BOOL IsNatDex; + void *unk20; + u32 unk24; + u32 unk28; + u32 unk2c; +}; + +struct UnkCallbackStruct1_0205FA2C +{ + u32 unk00; + u32 unk04; + u8 unk08; + u8 unk09; + u8 unk0a; + u8 unk0b; + u8 unk0c; + u8 unk0d; + u8 unk0e[6]; + void **unk14; +}; + +struct UnkCallbackStruct2_0205FA2C +{ + u32 unk00; + u32 unk04; + u32 *unk08; + u32 unk0c; + u16 unk10; + u16 unk12; + u16 unk14; +}; + +THUMB_FUNC u32 FUN_0205FA2C( + struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1, u32 heap_id); +THUMB_FUNC u32 FUN_0205FAD8( + struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1); +THUMB_FUNC u32 FUN_0205FB34( + struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1, u32 heap_id); +THUMB_FUNC u32 FUN_0205FBC0( + struct UnkCallbackStruct1_0205FA2C *param0, struct UnkStruct_0204639C *param1); +THUMB_FUNC int FUN_0205FBE8(struct UnkStruct_0204639C *param0); +THUMB_FUNC void FUN_0205FC50(struct UnkStruct_0204639C *param0, + void **param1, + u8 param2, + u8 param3, + u8 param4, + u8 param5, + u8 param6, + u8 param7); + +THUMB_FUNC u32 FUN_0205FC9C( + struct UnkCallbackStruct2_0205FA2C *param0, struct UnkStruct_0204639C *param1); +THUMB_FUNC u32 FUN_0205FCC4( + struct UnkCallbackStruct2_0205FA2C *param0, struct UnkStruct_0204639C *param1); +THUMB_FUNC int FUN_0205FCE8(struct UnkStruct_0204639C *param0); +THUMB_FUNC void FUN_0205FD38(struct UnkStruct_0204639C *param0, u16 param1, u16 param2, u16 param3); + +THUMB_FUNC int FUN_0205FD70(struct UnkStruct_0204639C *param0); +THUMB_FUNC void FUN_0205FDDC(struct UnkStruct_0204639C *param0, u16 param1, u16 param2); + +THUMB_FUNC u32 FUN_0205FE10(struct SaveBlock2 *sav2); +THUMB_FUNC u32 FUN_0205FF5C(struct SaveBlock2 *sav2); +THUMB_FUNC void FUN_02060044(u16 **param0, u32 *param1); +THUMB_FUNC u32 FUN_02060064(u32 param0); +THUMB_FUNC u32 FUN_02060070(u32 param0); +THUMB_FUNC u32 FUN_0206007C(struct SaveBlock2 *sav2); +THUMB_FUNC u32 FUN_020600A0(struct SaveBlock2 *sav2); +THUMB_FUNC u32 FUN_020600DC(struct SaveBlock2 *sav2); +THUMB_FUNC BOOL FUN_02060144(u32 **param0); + +#endif // POKEDIAMOND_UNK_0205FA2C_H
\ No newline at end of file diff --git a/include/unk_0206BB28.h b/include/unk_0206BB28.h index ff60e220..44997e73 100644 --- a/include/unk_0206BB28.h +++ b/include/unk_0206BB28.h @@ -5,8 +5,8 @@ #include "pokedex.h" #include "pokemon.h" -BOOL FUN_0206BB28(struct SaveBlock2 * sav2); -BOOL FUN_0206BB34(struct Pokedex * pokedex); +BOOL SavArray_IsNatDexEnabled(struct SaveBlock2 * sav2); +BOOL Pokedex_IsNatDexEnabled(struct Pokedex * pokedex); u32 FUN_0206BB48(BOOL isNationalDex, u32 species); #endif //POKEDIAMOND_UNK_0206BB28_H diff --git a/tools/asm_processor/asm_processor.py b/tools/asm_processor/asm_processor.py index e3226cb2..ec01c68e 100644..100755 --- a/tools/asm_processor/asm_processor.py +++ b/tools/asm_processor/asm_processor.py @@ -1,1261 +1,1269 @@ -#!/usr/bin/env python3
-import argparse
-import tempfile
-import struct
-import copy
-import sys
-import re
-import os
-from collections import namedtuple, defaultdict
-from io import StringIO
-
-MAX_FN_SIZE = 100
-SLOW_CHECKS = False
-
-EI_NIDENT = 16
-EI_CLASS = 4
-EI_DATA = 5
-EI_VERSION = 6
-EI_OSABI = 7
-EI_ABIVERSION = 8
-STN_UNDEF = 0
-
-SHN_UNDEF = 0
-SHN_ABS = 0xfff1
-SHN_COMMON = 0xfff2
-SHN_XINDEX = 0xffff
-SHN_LORESERVE = 0xff00
-
-STT_NOTYPE = 0
-STT_OBJECT = 1
-STT_FUNC = 2
-STT_SECTION = 3
-STT_FILE = 4
-STT_COMMON = 5
-STT_TLS = 6
-
-STB_LOCAL = 0
-STB_GLOBAL = 1
-STB_WEAK = 2
-
-STV_DEFAULT = 0
-STV_INTERNAL = 1
-STV_HIDDEN = 2
-STV_PROTECTED = 3
-
-SHT_NULL = 0
-SHT_PROGBITS = 1
-SHT_SYMTAB = 2
-SHT_STRTAB = 3
-SHT_RELA = 4
-SHT_HASH = 5
-SHT_DYNAMIC = 6
-SHT_NOTE = 7
-SHT_NOBITS = 8
-SHT_REL = 9
-SHT_SHLIB = 10
-SHT_DYNSYM = 11
-SHT_INIT_ARRAY = 14
-SHT_FINI_ARRAY = 15
-SHT_PREINIT_ARRAY = 16
-SHT_GROUP = 17
-SHT_SYMTAB_SHNDX = 18
-SHT_MIPS_GPTAB = 0x70000003
-SHT_MIPS_DEBUG = 0x70000005
-SHT_MIPS_REGINFO = 0x70000006
-SHT_MIPS_OPTIONS = 0x7000000d
-
-SHF_WRITE = 0x1
-SHF_ALLOC = 0x2
-SHF_EXECINSTR = 0x4
-SHF_MERGE = 0x10
-SHF_STRINGS = 0x20
-SHF_INFO_LINK = 0x40
-SHF_LINK_ORDER = 0x80
-SHF_OS_NONCONFORMING = 0x100
-SHF_GROUP = 0x200
-SHF_TLS = 0x400
-
-R_MIPS_32 = 2
-R_MIPS_26 = 4
-R_MIPS_HI16 = 5
-R_MIPS_LO16 = 6
-
-
-class ElfHeader:
- """
- typedef struct {
- unsigned char e_ident[EI_NIDENT];
- Elf32_Half e_type;
- Elf32_Half e_machine;
- Elf32_Word e_version;
- Elf32_Addr e_entry;
- Elf32_Off e_phoff;
- Elf32_Off e_shoff;
- Elf32_Word e_flags;
- Elf32_Half e_ehsize;
- Elf32_Half e_phentsize;
- Elf32_Half e_phnum;
- Elf32_Half e_shentsize;
- Elf32_Half e_shnum;
- Elf32_Half e_shstrndx;
- } Elf32_Ehdr;
- """
-
- def __init__(self, data):
- self.e_ident = data[:EI_NIDENT]
- self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx = struct.unpack('<HHIIIIIHHHHHH', data[EI_NIDENT:])
- assert self.e_ident[EI_CLASS] == 1 # 32-bit
- #assert self.e_ident[EI_DATA] == 2 # big-endian
- #assert self.e_type == 1 # relocatable
- #assert self.e_machine == 8 # MIPS I Architecture
- assert self.e_phoff == 0 # no program header
- assert self.e_shoff != 0 # section header
- assert self.e_shstrndx != SHN_UNDEF
-
- def to_bin(self):
- return self.e_ident + struct.pack('<HHIIIIIHHHHHH', self.e_type,
- self.e_machine, self.e_version, self.e_entry, self.e_phoff,
- self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize,
- self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx)
-
-
-class Symbol:
- """
- typedef struct {
- Elf32_Word st_name;
- Elf32_Addr st_value;
- Elf32_Word st_size;
- unsigned char st_info;
- unsigned char st_other;
- Elf32_Half st_shndx;
- } Elf32_Sym;
- """
-
- def __init__(self, data, strtab):
- self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx = struct.unpack('<IIIBBH', data)
- assert self.st_shndx != SHN_XINDEX, "too many sections (SHN_XINDEX not supported)"
- self.bind = st_info >> 4
- self.type = st_info & 15
- self.name = strtab.lookup_str(self.st_name)
- self.visibility = self.st_other & 3
-
- def to_bin(self):
- st_info = (self.bind << 4) | self.type
- return struct.pack('<IIIBBH', self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx)
-
-
-class Relocation:
- def __init__(self, data, sh_type):
- self.sh_type = sh_type
- if sh_type == SHT_REL:
- self.r_offset, self.r_info = struct.unpack('<II', data)
- else:
- self.r_offset, self.r_info, self.r_addend = struct.unpack('<III', data)
- self.sym_index = self.r_info >> 8
- self.rel_type = self.r_info & 0xff
-
- def to_bin(self):
- self.r_info = (self.sym_index << 8) | self.rel_type
- if self.sh_type == SHT_REL:
- return struct.pack('<II', self.r_offset, self.r_info)
- else:
- return struct.pack('<III', self.r_offset, self.r_info, self.r_addend)
-
-class Section:
- """
- typedef struct {
- Elf32_Word sh_name;
- Elf32_Word sh_type;
- Elf32_Word sh_flags;
- Elf32_Addr sh_addr;
- Elf32_Off sh_offset;
- Elf32_Word sh_size;
- Elf32_Word sh_link;
- Elf32_Word sh_info;
- Elf32_Word sh_addralign;
- Elf32_Word sh_entsize;
- } Elf32_Shdr;
- """
-
- def __init__(self, header, data, index):
- self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize = struct.unpack('<IIIIIIIIII', header)
- assert not self.sh_flags & SHF_LINK_ORDER
- if self.sh_entsize != 0:
- assert self.sh_size % self.sh_entsize == 0
- if self.sh_type == SHT_NOBITS:
- self.data = ''
- else:
- self.data = data[self.sh_offset:self.sh_offset + self.sh_size]
- self.index = index
- self.relocated_by = []
-
- @staticmethod
- def from_parts(sh_name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data, index):
- header = struct.pack('<IIIIIIIIII', sh_name, sh_type, sh_flags, 0, 0, len(data), sh_link, sh_info, sh_addralign, sh_entsize)
- return Section(header, data, index)
-
- def lookup_str(self, index):
- assert self.sh_type == SHT_STRTAB
- to = self.data.find(b'\0', index)
- assert to != -1
- return self.data[index:to].decode('latin1')
-
- def add_str(self, string):
- assert self.sh_type == SHT_STRTAB
- ret = len(self.data)
- self.data += string.encode('latin1') + b'\0'
- return ret
-
- def is_rel(self):
- return self.sh_type == SHT_REL or self.sh_type == SHT_RELA
-
- def header_to_bin(self):
- if self.sh_type != SHT_NOBITS:
- self.sh_size = len(self.data)
- return struct.pack('<IIIIIIIIII', self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize)
-
- def late_init(self, sections):
- if self.sh_type == SHT_SYMTAB:
- self.init_symbols(sections)
- elif self.is_rel():
- self.rel_target = sections[self.sh_info]
- self.rel_target.relocated_by.append(self)
- self.init_relocs()
-
- def find_symbol(self, name):
- assert self.sh_type == SHT_SYMTAB
- for s in self.symbol_entries:
- if s.name == name:
- return (s.st_shndx, s.st_value)
- return None
-
- def find_symbol_in_section(self, name, section):
- pos = self.find_symbol(name)
- assert pos is not None
- assert pos[0] == section.index
- return pos[1]
-
- def init_symbols(self, sections):
- assert self.sh_type == SHT_SYMTAB
- assert self.sh_entsize == 16
- self.strtab = sections[self.sh_link]
- entries = []
- for i in range(0, self.sh_size, self.sh_entsize):
- entries.append(Symbol(self.data[i:i+self.sh_entsize], self.strtab))
- self.symbol_entries = entries
-
- def init_relocs(self):
- assert self.is_rel()
- entries = []
- for i in range(0, self.sh_size, self.sh_entsize):
- entries.append(Relocation(self.data[i:i+self.sh_entsize], self.sh_type))
- self.relocations = entries
-
- def local_symbols(self):
- assert self.sh_type == SHT_SYMTAB
- return self.symbol_entries[:self.sh_info]
-
- def global_symbols(self):
- assert self.sh_type == SHT_SYMTAB
- return self.symbol_entries[self.sh_info:]
-
-
-class ElfFile:
- def __init__(self, data):
- self.data = data
- assert data[:4] == b'\x7fELF', "not an ELF file"
-
- self.elf_header = ElfHeader(data[0:52])
-
- offset, size = self.elf_header.e_shoff, self.elf_header.e_shentsize
- null_section = Section(data[offset:offset + size], data, 0)
- num_sections = self.elf_header.e_shnum or null_section.sh_size
-
- self.sections = [null_section]
- for i in range(1, num_sections):
- ind = offset + i * size
- self.sections.append(Section(data[ind:ind + size], data, i))
-
- symtab = None
- for s in self.sections:
- if s.sh_type == SHT_SYMTAB:
- assert not symtab
- symtab = s
- assert symtab is not None
- self.symtab = symtab
-
- shstr = self.sections[self.elf_header.e_shstrndx]
- for s in self.sections:
- s.name = shstr.lookup_str(s.sh_name)
- s.late_init(self.sections)
-
- def find_section(self, name, num):
- i = 0 # Count how many sections of name `name` have been encountered so far, when i reaches `num` return that section
- for s in self.sections:
- if s.name == name and i == num:
- return s
- # Increment if section is a .text section
- if s.name == ".text":
- i += 1
- return None
-
- # Because Metrowerks for DS can make duplicate .text sections
- # for every function, we may need to lookup a specific .text area.
- def find_section_with_name(self, name, st_name):
- for s in self.sections:
- if s.name == name and s.sh_name == st_name:
- return s
- return None
-
- # Return i, where i is the ith text section corresponding to the function
- # called `name`.
- def text_section_index(self, name):
- st_shndx, _ = self.symtab.find_symbol(name)
- n_text = 0
- for sec in self.sections:
- if sec.index == st_shndx:
- return n_text
- if sec.name =='.text':
- n_text += 1
- return -1
-
- def add_section(self, name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data):
- shstr = self.sections[self.elf_header.e_shstrndx]
- sh_name = shstr.add_str(name)
- s = Section.from_parts(sh_name=sh_name, sh_type=sh_type,
- sh_flags=sh_flags, sh_link=sh_link, sh_info=sh_info,
- sh_addralign=sh_addralign, sh_entsize=sh_entsize, data=data,
- index=len(self.sections))
- self.sections.append(s)
- s.name = name
- s.late_init(self.sections)
- return s
-
- def drop_irrelevant_sections(self):
- # We can only drop sections at the end, since otherwise section
- # references might be wrong. Luckily, these sections typically are.
- while self.sections[-1].sh_type in [SHT_MIPS_DEBUG, SHT_MIPS_GPTAB]:
- self.sections.pop()
-
- def write(self, filename):
- outfile = open(filename, 'wb')
- outidx = 0
- def write_out(data):
- nonlocal outidx
- outfile.write(data)
- outidx += len(data)
- def pad_out(align):
- if align and outidx % align:
- write_out(b'\0' * (align - outidx % align))
-
- self.elf_header.e_shnum = len(self.sections)
- write_out(self.elf_header.to_bin())
-
- for s in self.sections:
- if s.sh_type != SHT_NOBITS and s.sh_type != SHT_NULL:
- pad_out(s.sh_addralign)
- s.sh_offset = outidx
- write_out(s.data)
-
- pad_out(4)
- self.elf_header.e_shoff = outidx
- for s in self.sections:
- write_out(s.header_to_bin())
-
- outfile.seek(0)
- outfile.write(self.elf_header.to_bin())
- outfile.close()
-
-
-def is_temp_name(name):
- return name.startswith('_asmpp_')
-
-
-# https://stackoverflow.com/a/241506
-def re_comment_replacer(match):
- s = match.group(0)
- if s[0] in "/#":
- return " "
- else:
- return s
-
-
-re_comment_or_string = re.compile(
- r'#.*|/\*.*?\*/|"(?:\\.|[^\\"])*"'
-)
-
-
-class Failure(Exception):
- def __init__(self, message):
- self.message = message
-
- def __str__(self):
- return self.message
-
-
-class GlobalState:
- def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata):
- # A value that hopefully never appears as a 32-bit rodata constant (or we
- # miscompile late rodata). Increases by 1 in each step.
- self.late_rodata_hex = 0xE0123456
- self.namectr = 0
- self.min_instr_count = min_instr_count
- self.skip_instr_count = skip_instr_count
- self.use_jtbl_for_rodata = use_jtbl_for_rodata
-
- def next_late_rodata_hex(self):
- dummy_bytes = struct.pack('<I', self.late_rodata_hex)
- if (self.late_rodata_hex & 0xffff) == 0:
- # Avoid lui
- self.late_rodata_hex += 1
- self.late_rodata_hex += 1
- return dummy_bytes
-
- def make_name(self, cat):
- self.namectr += 1
- return '_asmpp_{}{}'.format(cat, self.namectr)
-
-
-Function = namedtuple('Function', ['text_glabels', 'asm_conts', 'late_rodata_dummy_bytes', 'jtbl_rodata_size', 'late_rodata_asm_conts', 'fn_desc', 'data'])
-
-
-class GlobalAsmBlock:
- def __init__(self, fn_desc):
- self.fn_desc = fn_desc
- self.cur_section = '.text'
- self.asm_conts = []
- self.late_rodata_asm_conts = []
- self.late_rodata_alignment = 0
- self.late_rodata_alignment_from_content = False
- self.text_glabels = []
- self.fn_section_sizes = {
- '.text': 0,
- '.init': 0,
- '.data': 0,
- '.bss': 0,
- '.rodata': 0,
- '.sdata': 0,
- '.sdata2': 0,
- '.sbss': 0,
- #'.sbss2': 0,
- '.late_rodata': 0,
- }
- self.fn_ins_inds = []
- self.glued_line = ''
- self.num_lines = 0
-
- def fail(self, message, line=None):
- context = self.fn_desc
- if line:
- context += ", at line \"" + line + "\""
- raise Failure(message + "\nwithin " + context)
-
- def count_quoted_size(self, line, z, real_line, output_enc):
- line = line.encode(output_enc).decode('latin1')
- in_quote = False
- num_parts = 0
- ret = 0
- i = 0
- digits = "0123456789" # 0-7 would be more sane, but this matches GNU as
- while i < len(line):
- c = line[i]
- i += 1
- if not in_quote:
- if c == '"':
- in_quote = True
- num_parts += 1
- else:
- if c == '"':
- in_quote = False
- continue
- ret += 1
- if c != '\\':
- continue
- if i == len(line):
- self.fail("backslash at end of line not supported", real_line)
- c = line[i]
- i += 1
- # (if c is in "bfnrtv", we have a real escaped literal)
- if c == 'x':
- # hex literal, consume any number of hex chars, possibly none
- while i < len(line) and line[i] in digits + "abcdefABCDEF":
- i += 1
- elif c in digits:
- # octal literal, consume up to two more digits
- it = 0
- while i < len(line) and line[i] in digits and it < 2:
- i += 1
- it += 1
-
- if in_quote:
- self.fail("unterminated string literal", real_line)
- if num_parts == 0:
- self.fail(".ascii with no string", real_line)
- return ret + num_parts if z else ret
-
-
- def align4(self):
- while self.fn_section_sizes[self.cur_section] % 2 != 0:
- self.fn_section_sizes[self.cur_section] += 1
-
- def add_sized(self, size, line):
- if self.cur_section in ['.text', '.init', '.late_rodata']:
- if size % 2 != 0:
- self.fail("size must be a multiple of 2 or 4", line)
- if size < 0:
- self.fail("size cannot be negative", line)
- self.fn_section_sizes[self.cur_section] += size
- if self.cur_section in ['.text', '.init']:
- if not self.text_glabels:
- self.fail(".text or .init block without an initial glabel", line)
- self.fn_ins_inds.append((self.num_lines - 1, size // 2))
-
- def process_line(self, line, output_enc):
- self.num_lines += 1
- if line.endswith('\\'):
- self.glued_line += line[:-1]
- return
- line = self.glued_line + line
- self.glued_line = ''
-
- real_line = line
- line = re.sub(re_comment_or_string, re_comment_replacer, line)
- line = line.strip()
- line = re.sub(r'^[a-zA-Z0-9_]+:\s*', '', line)
- changed_section = False
- emitting_double = False
- if line.startswith('glabel ') and self.cur_section in ['.text', '.init']:
- self.text_glabels.append(line.split()[1])
- if not line:
- pass # empty line
- elif line.startswith('glabel ') or (' ' not in line and line.endswith(':')):
- pass # label
- elif line.startswith('.section') or line in ['.text', '.init', '.data', '.rdata', '.rodata', '.sdata', '.sdata2', '.bss','.sbss', '.late_rodata']:
- # section change
- self.cur_section = '.rodata' if line == '.rdata' else line.split(',')[0].split()[-1]
- if self.cur_section not in ['.data', '.text', '.init', '.rodata', '.sdata', '.sdata2', '.late_rodata', '.bss', '.sbss']:
- self.fail("unrecognized .section directive", real_line)
- changed_section = True
- elif line.startswith('.late_rodata_alignment'):
- if self.cur_section != '.late_rodata':
- self.fail(".late_rodata_alignment must occur within .late_rodata section", real_line)
- value = int(line.split()[1])
- if value not in [4, 8]:
- self.fail(".late_rodata_alignment argument must be 4 or 8", real_line)
- if self.late_rodata_alignment and self.late_rodata_alignment != value:
- self.fail(".late_rodata_alignment alignment assumption conflicts with earlier .double directive. Make sure to provide explicit alignment padding.")
- self.late_rodata_alignment = value
- changed_section = True
- elif line.startswith('.incbin'):
- self.add_sized(int(line.split(',')[-1].strip(), 0), real_line)
- elif line.startswith('.skip'):
- self.add_sized(int(line.split()[-1].strip(), 0), real_line)
- elif line.startswith('.long') or line.startswith('.float'):
- self.align4()
- self.add_sized(4 * len(line.split(',')), real_line)
- elif line.startswith('.double'):
- self.align4()
- if self.cur_section == '.late_rodata':
- align8 = self.fn_section_sizes[self.cur_section] % 8
- # Automatically set late_rodata_alignment, so the generated C code uses doubles.
- # This gives us correct alignment for the transferred doubles even when the
- # late_rodata_alignment is wrong, e.g. for non-matching compilation.
- if not self.late_rodata_alignment:
- self.late_rodata_alignment = 8 - align8
- self.late_rodata_alignment_from_content = True
- elif self.late_rodata_alignment != 8 - align8:
- if self.late_rodata_alignment_from_content:
- self.fail("found two .double directives with different start addresses mod 8. Make sure to provide explicit alignment padding.", real_line)
- else:
- self.fail(".double at address that is not 0 mod 8 (based on .late_rodata_alignment assumption). Make sure to provide explicit alignment padding.", real_line)
- self.add_sized(8 * len(line.split(',')), real_line)
- emitting_double = True
- elif line.startswith('.space'):
- self.add_sized(int(line.split()[1], 0), real_line)
- elif line.startswith('.balign') or line.startswith('.align'):
- align = int(line.split()[1])
- if align != 2:
- self.fail("only .balign 4 is supported", real_line)
- self.align4()
- elif line.startswith('.asci'):
- z = (line.startswith('.asciz') or line.startswith('.asciiz'))
- self.add_sized(self.count_quoted_size(line, z, real_line, output_enc), real_line)
- elif line.startswith('.byte'):
- self.add_sized(len(line.split(',')), real_line)
- # Branches are 4 bytes long
- elif line.startswith('bl'):
- self.add_sized(4, real_line)
- elif line.startswith('.'):
- # .macro, ...
- self.fail("asm directive not supported", real_line)
- else:
- # Unfortunately, macros are hard to support for .rodata --
- # we don't know how how space they will expand to before
- # running the assembler, but we need that information to
- # construct the C code. So if we need that we'll either
- # need to run the assembler twice (at least in some rare
- # cases), or change how this program is invoked.
- # Similarly, we can't currently deal with pseudo-instructions
- # that expand to several real instructions.
- if self.cur_section != '.text' and self.cur_section != '.init':
- self.fail("instruction or macro call in non-.text/.init section? not supported", real_line)
- self.add_sized(2, real_line)
- if self.cur_section == '.late_rodata':
- if not changed_section:
- if emitting_double:
- self.late_rodata_asm_conts.append(".align 0")
- self.late_rodata_asm_conts.append(real_line)
- if emitting_double:
- self.late_rodata_asm_conts.append(".align 2")
- else:
- self.asm_conts.append(real_line)
-
- def finish(self, state):
- src = [''] * (self.num_lines + 1)
- late_rodata_dummy_bytes = []
- jtbl_rodata_size = 0
- late_rodata_fn_output = []
-
- num_instr = self.fn_section_sizes['.text'] // 2
-
- if self.fn_section_sizes['.late_rodata'] > 0:
- # Generate late rodata by emitting unique float constants.
- # This requires 3 instructions for each 4 bytes of rodata.
- # If we know alignment, we can use doubles, which give 3
- # instructions for 8 bytes of rodata.
- size = self.fn_section_sizes['.late_rodata'] // 2
- skip_next = False
- needs_double = (self.late_rodata_alignment != 0)
- for i in range(size):
- if skip_next:
- skip_next = False
- continue
- # Jump tables give 9 instructions for >= 5 words of rodata, and should be
- # emitted when:
- # - -O2 or -O2 -g3 are used, which give the right codegen
- # - we have emitted our first .float/.double (to ensure that we find the
- # created rodata in the binary)
- # - we have emitted our first .double, if any (to ensure alignment of doubles
- # in shifted rodata sections)
- # - we have at least 5 words of rodata left to emit (otherwise IDO does not
- # generate a jump table)
- # - we have at least 10 more instructions to go in this function (otherwise our
- # function size computation will be wrong since the delay slot goes unused)
- if (not needs_double and state.use_jtbl_for_rodata and i >= 1 and
- size - i >= 5 and num_instr - len(late_rodata_fn_output) >= 10):
- cases = " ".join("case {}:".format(case) for case in range(size - i))
- late_rodata_fn_output.append("switch (*(volatile int*)0) { " + cases + " ; }")
- late_rodata_fn_output.extend([""] * 8)
- jtbl_rodata_size = (size - i) * 4
- break
- dummy_bytes = state.next_late_rodata_hex()
- late_rodata_dummy_bytes.append(dummy_bytes)
- if self.late_rodata_alignment == 4 * ((i + 1) % 2 + 1) and i + 1 < size:
- dummy_bytes2 = state.next_late_rodata_hex()
- late_rodata_dummy_bytes.append(dummy_bytes2)
- fval, = struct.unpack('<d', dummy_bytes + dummy_bytes2)
- late_rodata_fn_output.append('*(volatile double*)0 = {};'.format(fval))
- skip_next = True
- needs_double = True
- else:
- fval, = struct.unpack('<f', dummy_bytes)
- late_rodata_fn_output.append('*(volatile float*)0 = {}f;'.format(fval))
- late_rodata_fn_output.append('')
- late_rodata_fn_output.append('')
-
- text_name = None
- if self.fn_section_sizes['.text'] > 0 or late_rodata_fn_output:
- text_name = state.make_name('func')
- src[0] = 'int {}(void) {{ return '.format(text_name)
- instr_count = self.fn_section_sizes['.text'] // 2
- src[self.num_lines] = '((volatile void *) 0); }; ' if instr_count > 1 else '; }; '
- if instr_count < state.min_instr_count:
- self.fail("too short .text block")
- tot_emitted = 0
- tot_skipped = 0
- fn_emitted = 0
- fn_skipped = 0
- rodata_stack = late_rodata_fn_output[::-1]
- for (line, count) in self.fn_ins_inds:
- for _ in range(count):
- if (fn_emitted > MAX_FN_SIZE and instr_count - tot_emitted > state.min_instr_count and
- (not rodata_stack or rodata_stack[-1])):
- # Don't let functions become too large. When a function reaches 284
- # instructions, and -O2 -framepointer flags are passed, the IRIX
- # compiler decides it is a great idea to start optimizing more.
- fn_emitted = 0
- fn_skipped = 0
- src[line] += '((volatile void *) 0); }} int {}(void) {{ return '.format(state.make_name('large_func'))
- if fn_skipped < state.skip_instr_count:
- fn_skipped += 1
- tot_skipped += 1
- elif rodata_stack:
- src[line] += rodata_stack.pop()
- else:
- src[line] += '*(int *)'
- tot_emitted += 1
- fn_emitted += 1
- if rodata_stack:
- size = len(late_rodata_fn_output) // 3
- available = instr_count - tot_skipped
- self.fail(
- "late rodata to text ratio is too high: {} / {} must be <= 1/3\n"
- "add .late_rodata_alignment (4|8) to the .late_rodata "
- "block to double the allowed ratio."
- .format(size, available))
-
- init_name = None
- if self.fn_section_sizes['.init'] > 0 or late_rodata_fn_output:
- init_name = state.make_name('func')
- src[0] = 'int {}(void) {{ return '.format(init_name)
- instr_count = self.fn_section_sizes['.init'] // 2
- src[self.num_lines] = '((volatile void *) 0); }; ' if instr_count else '; }; '
- if instr_count < state.min_instr_count:
- self.fail("too short .init block")
- tot_emitted = 0
- tot_skipped = 0
- fn_emitted = 0
- fn_skipped = 0
- rodata_stack = late_rodata_fn_output[::-1]
- for (line, count) in self.fn_ins_inds:
- for _ in range(count):
- if (fn_emitted > MAX_FN_SIZE and instr_count - tot_emitted > state.min_instr_count and
- (not rodata_stack or rodata_stack[-1])):
- # Don't let functions become too large. When a function reaches 284
- # instructions, and -O2 -framepointer flags are passed, the IRIX
- # compiler decides it is a great idea to start optimizing more.
- fn_emitted = 0
- fn_skipped = 0
- src[line] += '((volatile void *) 0); }} int {}(void) {{ return '.format(state.make_name('large_func'))
- if fn_skipped < state.skip_instr_count:
- fn_skipped += 1
- tot_skipped += 1
- elif rodata_stack:
- src[line] += rodata_stack.pop()
- else:
- src[line] += '*(int *)'
- tot_emitted += 1
- fn_emitted += 1
- if rodata_stack:
- size = len(late_rodata_fn_output) // 3
- available = instr_count - tot_skipped
- self.fail(
- "late rodata to init ratio is too high: {} / {} must be <= 1/3\n"
- "add .late_rodata_alignment (4|8) to the .late_rodata "
- "block to double the allowed ratio."
- .format(size, available))
-
- rodata_name = None
- if self.fn_section_sizes['.rodata'] > 0:
- rodata_name = state.make_name('rodata')
- src[self.num_lines] += f" const char {rodata_name}[{self.fn_section_sizes['.rodata']}] = {{1}};"
-
- data_name = None
- if self.fn_section_sizes['.data'] > 0:
- data_name = state.make_name('data')
- src[self.num_lines] += f" char {data_name}[{self.fn_section_sizes['.data']}] = {{1}};"
-
- bss_name = None
- if self.fn_section_sizes['.bss'] > 0:
- bss_name = state.make_name('bss')
- src[self.num_lines] += f" char {bss_name}[{self.fn_section_sizes['.bss']}];"
-
- sdata_name = None # sdata is like data but small
- if self.fn_section_sizes['.sdata'] > 0:
- sdata_code = ""
- for i in range(self.fn_section_sizes['.sdata']):
- sdata_name = state.make_name('sdata')
- sdata_code += f" char {sdata_name} = 1;"
- src[self.num_lines] += sdata_code
-
- sdata2_name = None # sdata2 is like rodata but small
- if self.fn_section_sizes['.sdata2'] > 0:
- sdata2_code = ""
- for i in range(self.fn_section_sizes['.sdata2']):
- sdata2_name = state.make_name('sdata2')
- sdata2_code += f" const char {sdata2_name} = 1;"
- src[self.num_lines] += sdata2_code
-
- sbss_name = None # Similarly, sbss is like uninitialized data but small
- if self.fn_section_sizes['.sbss'] > 0:
- sbss_code = ""
- for i in range(self.fn_section_sizes['.sbss']):
- sbss_name = state.make_name('sbss')
- sbss_code += f" char {sbss_name};"
- src[self.num_lines] += sbss_code
-
- """ sbss2 is currently borked
- sbss2_name = None # Similarly, sbss2 is like uninitialized rodata but small
- if self.fn_section_sizes['.sbss2'] > 0:
- sbss2_code = ""
- for i in range(self.fn_section_sizes['.sbss2']):
- sbss2_name = state.make_name('sbss2')
- sbss2_code += f" const char {sbss2_name};"
- src[self.num_lines] += sbss2_code
- """
-
- fn = Function(
- text_glabels=self.text_glabels,
- asm_conts=self.asm_conts,
- late_rodata_dummy_bytes=late_rodata_dummy_bytes,
- jtbl_rodata_size=jtbl_rodata_size,
- late_rodata_asm_conts=self.late_rodata_asm_conts,
- fn_desc=self.fn_desc,
- data={
- '.text': (text_name, self.fn_section_sizes['.text']),
- '.data': (data_name, self.fn_section_sizes['.data']),
- '.rodata': (rodata_name, self.fn_section_sizes['.rodata']),
- '.bss': (bss_name, self.fn_section_sizes['.bss']),
- '.sdata': (sdata_name, self.fn_section_sizes['.sdata']),
- '.sdata2': (sdata2_name, self.fn_section_sizes['.sdata2']),
- '.sbss': (sbss_name, self.fn_section_sizes['.sbss']),
- #'.sbss2': (sbss2_name, self.fn_section_sizes['.sbss2']),
- })
- return src, fn
-
-cutscene_data_regexpr = re.compile(r"CutsceneData (.|\n)*\[\] = {")
-float_regexpr = re.compile(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f")
-
-def repl_float_hex(m):
- return str(struct.unpack("<I", struct.pack("<f", float(m.group(0).strip().rstrip("f"))))[0])
-
-def parse_source(f, opt, framepointer, input_enc, output_enc, print_source=None):
- opt = "O4"
- min_instr_count = 3 # idk
- skip_instr_count = 2 # idk
-
- use_jtbl_for_rodata = False
- if opt in ['O2', 'g3'] and not framepointer:
- use_jtbl_for_rodata = True
-
- state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata)
-
- global_asm = None
- asm_functions = []
- output_lines = []
-
- is_cutscene_data = False
-
- for line_no, raw_line in enumerate(f, 1):
- raw_line = raw_line.rstrip()
- line = raw_line.lstrip()
-
- # Print exactly one output line per source line, to make compiler
- # errors have correct line numbers. These will be overridden with
- # reasonable content further down.
- output_lines.append('')
- if global_asm is not None:
- if line.startswith(')'):
- src, fn = global_asm.finish(state)
- for i, line2 in enumerate(src):
- output_lines[start_index + i] = line2
- asm_functions.append(fn)
- global_asm = None
- else:
- global_asm.process_line(raw_line, output_enc)
- else:
- if line in ['GLOBAL_ASM(', '#pragma GLOBAL_ASM(']:
- global_asm = GlobalAsmBlock("GLOBAL_ASM block at line " + str(line_no))
- start_index = len(output_lines)
- elif ((line.startswith('GLOBAL_ASM("') or line.startswith('#pragma GLOBAL_ASM("'))
- and line.endswith('")')):
- fname = line[line.index('(') + 2 : -2]
- global_asm = GlobalAsmBlock(fname)
- with open(fname, encoding=input_enc) as f:
- for line2 in f:
- global_asm.process_line(line2.rstrip(), output_enc)
- src, fn = global_asm.finish(state)
- output_lines[-1] = ''.join(src)
- asm_functions.append(fn)
- global_asm = None
- elif ((line.startswith('#include "')) and line.endswith('" EARLY')):
- # C includes qualified with EARLY (i.e. #include "file.c" EARLY) will be
- # processed recursively when encountered
- fpath = os.path.dirname(f.name)
- fname = line[line.index(' ') + 2 : -7]
- include_src = StringIO()
- with open(fpath + os.path.sep + fname, encoding=input_enc) as include_file:
- parse_source(include_file, opt, framepointer, input_enc, output_enc, include_src)
- output_lines[-1] = include_src.getvalue()
- include_src.write('#line ' + str(line_no) + '\n')
- include_src.close()
- else:
- # This is a hack to replace all floating-point numbers in an array of a particular type
- # (in this case CutsceneData) with their corresponding IEEE-754 hexadecimal representation
- if cutscene_data_regexpr.search(line) is not None:
- is_cutscene_data = True
- elif line.endswith("};"):
- is_cutscene_data = False
- if is_cutscene_data:
- raw_line = re.sub(float_regexpr, repl_float_hex, raw_line)
- output_lines[-1] = raw_line
-
- if print_source:
- if isinstance(print_source, StringIO):
- for line in output_lines:
- print_source.write(line + '\n')
- else:
- for line in output_lines:
- print_source.write(line.encode(output_enc) + b'\n')
- print_source.flush()
- if print_source != sys.stdout.buffer:
- print_source.close()
- out_file = open("output.txt", 'w')
- out_file.write(str(asm_functions))
- out_file.close()
- return asm_functions
-
-def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc):
- SECTIONS = ['.data']
- SECTIONS.extend(['.text' for i in range(0,len(functions))])
- SECTIONS.extend(['.rodata', '.bss', '.sdata', '.sdata2', '.sbss'])
-
- with open(objfile_name, 'rb') as f:
- objfile = ElfFile(f.read())
-
- prev_locs = defaultdict(int)
- to_copy = defaultdict(list)
-
- asm = []
- all_late_rodata_dummy_bytes = []
- all_jtbl_rodata_size = []
- late_rodata_asm = []
- late_rodata_source_name_start = None
- late_rodata_source_name_end = None
-
- # Generate an assembly file with all the assembly we need to fill in. For
- # simplicity we pad with nops/.space so that addresses match exactly, so we
- # don't have to fix up relocations/symbol references.
- all_text_glabels = set()
- for function in functions:
- ifdefed = False
- for sectype, (temp_name, size) in function.data.items():
- if temp_name is None:
- continue
- assert size > 0
- n_text = objfile.text_section_index(temp_name)
- loc = objfile.symtab.find_symbol(temp_name)
- if loc is None:
- ifdefed = True
- break
- loc = loc[1]
- prev_loc = prev_locs[sectype + (str(n_text) if sectype == '.text' else '')]
- if loc < prev_loc:
- raise Failure("Wrongly computed size for section {} (diff {}). This is an asm-processor bug!".format(sectype + (str(n_text) if sectype == '.text' else ''), prev_loc- loc))
- if loc != prev_loc:
- asm.append('.section ' + sectype)
- if sectype == '.text':
- for i in range((loc - prev_loc) // 2):
- asm.append('nop')
- else:
- asm.append('.space {}'.format(loc - prev_loc))
- to_copy[sectype + (str(n_text) if sectype == '.text' else '')].append((loc, size, temp_name, function.fn_desc))
- prev_locs[sectype + (str(n_text) if sectype == '.text' else '')] = loc + size
- if not ifdefed:
- all_text_glabels.update(function.text_glabels)
- all_late_rodata_dummy_bytes.append(function.late_rodata_dummy_bytes)
- all_jtbl_rodata_size.append(function.jtbl_rodata_size)
- late_rodata_asm.append(function.late_rodata_asm_conts)
- for sectype, (temp_name, size) in function.data.items():
- if temp_name is not None:
- asm.append('.section ' + sectype)
- asm.append('glabel ' + temp_name + '_asm_start')
- asm.append('.section .text')
- for line in function.asm_conts:
- asm.append(line)
- for sectype, (temp_name, size) in function.data.items():
- if temp_name is not None:
- #asm.append('.section ' + sectype)
- asm.append('glabel ' + temp_name + '_asm_end')
-
- if any(late_rodata_asm):
- late_rodata_source_name_start = '_asmpp_late_rodata_start'
- late_rodata_source_name_end = '_asmpp_late_rodata_end'
- asm.append('.rdata')
- asm.append('glabel {}'.format(late_rodata_source_name_start))
- for conts in late_rodata_asm:
- asm.extend(conts)
- asm.append('glabel {}'.format(late_rodata_source_name_end))
-
- o_file = open("asm_processor_temp.o", 'w').close() # Create temp file. tempfile module isn't working for me.
- o_name = "asm_processor_temp.o"
-
- s_file = open("asm_processor_temp.s", 'wb') # Ditto.
- s_name = "asm_processor_temp.s"
- try:
- s_file.write(asm_prelude + b'\n')
- for line in asm:
- s_file.write(line.encode(output_enc) + b'\n')
- s_file.close()
- ret = os.system(assembler + " " + s_name + " -o " + o_name)
- if ret != 0:
- raise Failure("failed to assemble")
- with open(o_name, 'rb') as f:
- asm_objfile = ElfFile(f.read())
-
- # Remove some clutter from objdump output
- objfile.drop_irrelevant_sections()
-
- """
- # Unify reginfo sections
- target_reginfo = objfile.find_section('.reginfo')
- source_reginfo_data = list(asm_objfile.find_section('.reginfo').data)
- data = list(target_reginfo.data)
- for i in range(20):
- data[i] |= source_reginfo_data[i]
- target_reginfo.data = bytes(data)
- """
-
- # Move over section contents
- modified_text_positions = set()
- jtbl_rodata_positions = set()
- last_rodata_pos = 0
- n_text = 0
- for sec in objfile.sections:
- sectype = sec.name
- if not to_copy[sectype + (str(n_text) if sectype == '.text' else '')]:
- if sectype == '.text':
- n_text += 1
- continue
- # This should work as long as you NONMATCH whole functions rather than asm fragments
- func = to_copy[sectype + str(n_text) if sectype == '.text' else ''][0][2]
- asm_n_text = asm_objfile.text_section_index(func + '_asm_start')
- source = asm_objfile.find_section(sectype, asm_n_text if sectype == '.text' else 0)
- assert source is not None, "didn't find source section: " + sectype
- for (pos, count, temp_name, fn_desc) in to_copy[sectype + (str(n_text) if sectype == '.text' else '')]:
- loc1 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_start', source)
- loc2 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_end', source)
- assert loc1 == pos, "assembly and C files don't line up for section " + sectype + ", " + fn_desc
- if loc2 - loc1 != count:
- raise Failure("incorrectly computed size for section " + sectype + ", " + fn_desc + ". If using .double, make sure to provide explicit alignment padding.")
- if sectype == '.bss' or sectype == '.sbss2':
- continue
- target = objfile.find_section(sectype, n_text if sectype == '.text' else 0)
- assert target is not None, "missing target section of type " + sectype
- data = list(target.data)
- for (pos, count, _, _) in to_copy[sectype + (str(n_text) if sectype == '.text' else '')]:
- # mwasmarm 4-aligns text sections, so make sure to copy exactly `count` bytes
- data[pos:pos + count] = source.data[pos:pos + count]
- if sectype == '.text':
- assert count % 2 == 0
- assert pos % 2 == 0
- for i in range(count // 2):
- modified_text_positions.add(pos + 2 * i)
- elif sectype == '.rodata':
- last_rodata_pos = pos + count
- target.data = bytes(data)
- if sectype == '.text':
- n_text += 1
-
- # Move over late rodata. This is heuristic, sadly, since I can't think
- # of another way of doing it.
- moved_late_rodata = {}
- if any(all_late_rodata_dummy_bytes) or any(all_jtbl_rodata_size):
- source = asm_objfile.find_section('.rodata', 0)
- target = objfile.find_section('.rodata', 0)
- source_pos = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_start, source)
- source_end = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_end, source)
- if source_end - source_pos != sum(map(len, all_late_rodata_dummy_bytes)) * 2 + sum(all_jtbl_rodata_size):
- raise Failure("computed wrong size of .late_rodata")
- new_data = list(target.data)
- for dummy_bytes_list, jtbl_rodata_size in zip(all_late_rodata_dummy_bytes, all_jtbl_rodata_size):
- for index, dummy_bytes in enumerate(dummy_bytes_list):
- pos = target.data.index(dummy_bytes, last_rodata_pos)
- # This check is nice, but makes time complexity worse for large files:
- if SLOW_CHECKS and target.data.find(dummy_bytes, pos + 2) != -1:
- raise Failure("multiple occurrences of late_rodata hex magic. Change asm-processor to use something better than 0xE0123456!")
- if index == 0 and len(dummy_bytes_list) > 1 and target.data[pos+2:pos+8] == b'\0\0\0\0':
- # Ugly hack to handle double alignment for non-matching builds.
- # We were told by .late_rodata_alignment (or deduced from a .double)
- # that a function's late_rodata started out 4 (mod 8), and emitted
- # a float and then a double. But it was actually 0 (mod 8), so our
- # double was moved by 4 bytes. To make them adjacent to keep jump
- # tables correct, move the float by 4 bytes as well.
- new_data[pos:pos+2] = b'\0\0\0\0'
- pos += 2
- new_data[pos:pos+2] = source.data[source_pos:source_pos+2]
- moved_late_rodata[source_pos] = pos
- last_rodata_pos = pos + 2
- source_pos += 2
- if jtbl_rodata_size > 0:
- assert dummy_bytes_list, "should always have dummy bytes before jtbl data"
- pos = last_rodata_pos
- new_data[pos : pos + jtbl_rodata_size] = \
- source.data[source_pos : source_pos + jtbl_rodata_size]
- for i in range(0, jtbl_rodata_size, 2):
- moved_late_rodata[source_pos + i] = pos + i
- jtbl_rodata_positions.add(pos + i)
- last_rodata_pos += jtbl_rodata_size
- source_pos += jtbl_rodata_size
- target.data = bytes(new_data)
-
- # Merge strtab data.
- strtab_adj = len(objfile.symtab.strtab.data)
- objfile.symtab.strtab.data += asm_objfile.symtab.strtab.data
-
- # Find relocated symbols
- relocated_symbols = set()
- for obj in [asm_objfile, objfile]:
- for sec in obj.sections:
- for reltab in sec.relocated_by:
- for rel in reltab.relocations:
- relocated_symbols.add(obj.symtab.symbol_entries[rel.sym_index])
-
- # Move over symbols, deleting the temporary function labels.
- # Sometimes this naive procedure results in duplicate symbols, or UNDEF
- # symbols that are also defined the same .o file. Hopefully that's fine.
- # Skip over local symbols that aren't used relocated against, to avoid
- # conflicts.
- new_local_syms = [s for s in objfile.symtab.local_symbols() if not is_temp_name(s.name)]
- new_global_syms = [s for s in objfile.symtab.global_symbols() if not is_temp_name(s.name)]
- n_text = 0
- for i, s in enumerate(asm_objfile.symtab.symbol_entries):
- is_local = (i < asm_objfile.symtab.sh_info)
- if is_local and s not in relocated_symbols:
- continue
- if is_temp_name(s.name):
- continue
- if s.st_shndx not in [SHN_UNDEF, SHN_ABS]:
- section_name = asm_objfile.sections[s.st_shndx].name
- if section_name not in SECTIONS:
- raise Failure("generated assembly .o must only have symbols for .text, .data, .rodata, .sdata, .sdata2, .sbss, ABS and UNDEF, but found " + section_name)
- if section_name == '.sbss2': #! I'm not sure why this isn't working
- continue
- s.st_shndx = objfile.find_section(section_name, n_text if section_name == '.text' else 0).index
- if section_name == '.text':
- n_text += 1
- # glabel's aren't marked as functions, making objdump output confusing. Fix that.
- if s.name in all_text_glabels:
- s.type = STT_FUNC
- if objfile.sections[s.st_shndx].name == '.rodata' and s.st_value in moved_late_rodata:
- s.st_value = moved_late_rodata[s.st_value]
- s.st_name += strtab_adj
- if is_local:
- new_local_syms.append(s)
- else:
- new_global_syms.append(s)
- new_syms = new_local_syms + new_global_syms
- for i, s in enumerate(new_syms):
- s.new_index = i
- objfile.symtab.data = b''.join(s.to_bin() for s in new_syms)
- objfile.symtab.sh_info = len(new_local_syms)
-
- # Move over relocations
- n_text = 0
- for sec in objfile.sections:
- sectype = sec.name
- # This should work as long as you NONMATCH whole functions rather than asm fragments
- target = objfile.find_section(sectype, n_text if sectype == '.text' else 0)
-
- if target is not None:
- # fixup relocation symbol indices, since we butchered them above
- for reltab in target.relocated_by:
- nrels = []
- for rel in reltab.relocations:
- if (sectype == '.text' and rel.r_offset in modified_text_positions or
- sectype == '.rodata' and rel.r_offset in jtbl_rodata_positions) or sectype == ".sbss2":
- # don't include relocations for late_rodata dummy code
- continue
- # hopefully we don't have relocations for local or
- # temporary symbols, so new_index exists
- rel.sym_index = objfile.symtab.symbol_entries[rel.sym_index].new_index
- nrels.append(rel)
- reltab.relocations = nrels
- reltab.data = b''.join(rel.to_bin() for rel in nrels)
-
- if not to_copy[sectype + (str(n_text) if sectype == '.text' else '')]:
- if sectype == '.text':
- n_text += 1
- continue
-
- func = to_copy[sectype + str(n_text) if sectype == '.text' else ''][0][2]
- asm_n_text = asm_objfile.text_section_index(func + '_asm_start')
- source = asm_objfile.find_section(sectype, asm_n_text if sectype == '.text' else 0)
- if not source:
- if sectype == '.text':
- n_text += 1
- continue
-
- target_reltab = objfile.find_section('.rel' + sectype, n_text if sectype == '.text' else 0)
- target_reltaba = objfile.find_section('.rela' + sectype, n_text if sectype == '.text' else 0)
- for reltab in source.relocated_by:
- for rel in reltab.relocations:
- rel.sym_index = asm_objfile.symtab.symbol_entries[rel.sym_index].new_index
- # I suspect that this is requried for matching. If the after linking the
- # binary doesn't match, retry after commenting out the following line:
- rel.r_addend = 0
- if sectype == '.rodata' and rel.r_offset in moved_late_rodata:
- rel.r_offset = moved_late_rodata[rel.r_offset]
- new_data = b''.join(rel.to_bin() for rel in reltab.relocations)
- if reltab.sh_type == SHT_REL:
- target_reltab = objfile.add_section('.rel' + sectype,
- sh_type=SHT_REL, sh_flags=0,
- sh_link=objfile.symtab.index, sh_info=target.index,
- sh_addralign=4, sh_entsize=8, data=b'')
- target_reltab.data += new_data
- else:
- # Always append as a separate .rela.text section
- target_reltaba = objfile.add_section('.rela' + sectype,
- sh_type=SHT_RELA, sh_flags=0,
- sh_link=objfile.symtab.index, sh_info=target.index,
- sh_addralign=4, sh_entsize=12, data=b'')
- target_reltaba.data += new_data
- if sectype == '.text':
- n_text += 1
-
- objfile.write(objfile_name)
- finally:
- s_file.close()
- #os.remove(s_name)
- try:
- pass
- #os.remove(o_name)
- except:
- pass
-
-def run_wrapped(argv, outfile):
- parser = argparse.ArgumentParser(description="Pre-process .c files and post-process .o files to enable embedding assembly into C.")
- parser.add_argument('filename', help="path to .c code")
- parser.add_argument('--post-process', dest='objfile', help="path to .o file to post-process")
- parser.add_argument('--assembler', dest='assembler', help="assembler command (e.g. \"mips-linux-gnu-as -march=vr4300 -mabi=32\")")
- parser.add_argument('--asm-prelude', dest='asm_prelude', help="path to a file containing a prelude to the assembly file (with .set and .macro directives, e.g.)")
- parser.add_argument('--input-enc', default='latin1', help="Input encoding (default: latin1)")
- parser.add_argument('--output-enc', default='latin1', help="Output encoding (default: latin1)")
- parser.add_argument('-framepointer', dest='framepointer', action='store_true')
- parser.add_argument('-g3', dest='g3', action='store_true')
- group = parser.add_mutually_exclusive_group(required=False)
- group.add_argument('-O1', dest='opt', action='store_const', const='O1')
- group.add_argument('-O2', dest='opt', action='store_const', const='O2')
- group.add_argument('-g', dest='opt', action='store_const', const='g')
- args = parser.parse_args(argv)
- opt = args.opt
- if args.g3:
- if opt != 'O2':
- raise Failure("-g3 is only supported together with -O2")
- opt = 'g3'
-
- if args.objfile is None:
- with open(args.filename, encoding=args.input_enc) as f:
- parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc, print_source=outfile)
- else:
- if args.assembler is None:
- raise Failure("must pass assembler command")
- with open(args.filename, encoding=args.input_enc) as f:
- functions = parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc)
- if not functions:
- return
- asm_prelude = b''
- if args.asm_prelude:
- with open(args.asm_prelude, 'rb') as f:
- asm_prelude = f.read()
- fixup_objfile(args.objfile, functions, asm_prelude, args.assembler, args.output_enc)
-
-def run(argv, outfile=sys.stdout.buffer):
- try:
- run_wrapped(argv, outfile)
- except Failure as e:
- sys.exit(1)
-
-if __name__ == "__main__":
- run(sys.argv[1:])
+#!/usr/bin/env python3 +import argparse +import tempfile +import struct +import copy +import sys +import re +import os +from collections import namedtuple, defaultdict +from io import StringIO + +MAX_FN_SIZE = 100 +SLOW_CHECKS = False + +EI_NIDENT = 16 +EI_CLASS = 4 +EI_DATA = 5 +EI_VERSION = 6 +EI_OSABI = 7 +EI_ABIVERSION = 8 +STN_UNDEF = 0 + +SHN_UNDEF = 0 +SHN_ABS = 0xfff1 +SHN_COMMON = 0xfff2 +SHN_XINDEX = 0xffff +SHN_LORESERVE = 0xff00 + +STT_NOTYPE = 0 +STT_OBJECT = 1 +STT_FUNC = 2 +STT_SECTION = 3 +STT_FILE = 4 +STT_COMMON = 5 +STT_TLS = 6 + +STB_LOCAL = 0 +STB_GLOBAL = 1 +STB_WEAK = 2 + +STV_DEFAULT = 0 +STV_INTERNAL = 1 +STV_HIDDEN = 2 +STV_PROTECTED = 3 + +SHT_NULL = 0 +SHT_PROGBITS = 1 +SHT_SYMTAB = 2 +SHT_STRTAB = 3 +SHT_RELA = 4 +SHT_HASH = 5 +SHT_DYNAMIC = 6 +SHT_NOTE = 7 +SHT_NOBITS = 8 +SHT_REL = 9 +SHT_SHLIB = 10 +SHT_DYNSYM = 11 +SHT_INIT_ARRAY = 14 +SHT_FINI_ARRAY = 15 +SHT_PREINIT_ARRAY = 16 +SHT_GROUP = 17 +SHT_SYMTAB_SHNDX = 18 +SHT_MIPS_GPTAB = 0x70000003 +SHT_MIPS_DEBUG = 0x70000005 +SHT_MIPS_REGINFO = 0x70000006 +SHT_MIPS_OPTIONS = 0x7000000d + +SHF_WRITE = 0x1 +SHF_ALLOC = 0x2 +SHF_EXECINSTR = 0x4 +SHF_MERGE = 0x10 +SHF_STRINGS = 0x20 +SHF_INFO_LINK = 0x40 +SHF_LINK_ORDER = 0x80 +SHF_OS_NONCONFORMING = 0x100 +SHF_GROUP = 0x200 +SHF_TLS = 0x400 + +R_MIPS_32 = 2 +R_MIPS_26 = 4 +R_MIPS_HI16 = 5 +R_MIPS_LO16 = 6 + + +class ElfHeader: + """ + typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf32_Half e_type; + Elf32_Half e_machine; + Elf32_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf32_Word e_flags; + Elf32_Half e_ehsize; + Elf32_Half e_phentsize; + Elf32_Half e_phnum; + Elf32_Half e_shentsize; + Elf32_Half e_shnum; + Elf32_Half e_shstrndx; + } Elf32_Ehdr; + """ + + def __init__(self, data): + self.e_ident = data[:EI_NIDENT] + self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx = struct.unpack('<HHIIIIIHHHHHH', data[EI_NIDENT:]) + assert self.e_ident[EI_CLASS] == 1 # 32-bit + #assert self.e_ident[EI_DATA] == 2 # big-endian + #assert self.e_type == 1 # relocatable + #assert self.e_machine == 8 # MIPS I Architecture + assert self.e_phoff == 0 # no program header + assert self.e_shoff != 0 # section header + assert self.e_shstrndx != SHN_UNDEF + + def to_bin(self): + return self.e_ident + struct.pack('<HHIIIIIHHHHHH', self.e_type, + self.e_machine, self.e_version, self.e_entry, self.e_phoff, + self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, + self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx) + + +class Symbol: + """ + typedef struct { + Elf32_Word st_name; + Elf32_Addr st_value; + Elf32_Word st_size; + unsigned char st_info; + unsigned char st_other; + Elf32_Half st_shndx; + } Elf32_Sym; + """ + + def __init__(self, data, strtab): + self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx = struct.unpack('<IIIBBH', data) + assert self.st_shndx != SHN_XINDEX, "too many sections (SHN_XINDEX not supported)" + self.bind = st_info >> 4 + self.type = st_info & 15 + self.name = strtab.lookup_str(self.st_name) + self.visibility = self.st_other & 3 + + def to_bin(self): + st_info = (self.bind << 4) | self.type + return struct.pack('<IIIBBH', self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx) + + +class Relocation: + def __init__(self, data, sh_type): + self.sh_type = sh_type + if sh_type == SHT_REL: + self.r_offset, self.r_info = struct.unpack('<II', data) + else: + self.r_offset, self.r_info, self.r_addend = struct.unpack('<III', data) + self.sym_index = self.r_info >> 8 + self.rel_type = self.r_info & 0xff + + def to_bin(self): + self.r_info = (self.sym_index << 8) | self.rel_type + if self.sh_type == SHT_REL: + return struct.pack('<II', self.r_offset, self.r_info) + else: + return struct.pack('<III', self.r_offset, self.r_info, self.r_addend) + +class Section: + """ + typedef struct { + Elf32_Word sh_name; + Elf32_Word sh_type; + Elf32_Word sh_flags; + Elf32_Addr sh_addr; + Elf32_Off sh_offset; + Elf32_Word sh_size; + Elf32_Word sh_link; + Elf32_Word sh_info; + Elf32_Word sh_addralign; + Elf32_Word sh_entsize; + } Elf32_Shdr; + """ + + def __init__(self, header, data, index): + self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize = struct.unpack('<IIIIIIIIII', header) + assert not self.sh_flags & SHF_LINK_ORDER + if self.sh_entsize != 0: + assert self.sh_size % self.sh_entsize == 0 + if self.sh_type == SHT_NOBITS: + self.data = '' + else: + self.data = data[self.sh_offset:self.sh_offset + self.sh_size] + self.index = index + self.relocated_by = [] + + @staticmethod + def from_parts(sh_name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data, index): + header = struct.pack('<IIIIIIIIII', sh_name, sh_type, sh_flags, 0, 0, len(data), sh_link, sh_info, sh_addralign, sh_entsize) + return Section(header, data, index) + + def lookup_str(self, index): + assert self.sh_type == SHT_STRTAB + to = self.data.find(b'\0', index) + assert to != -1 + return self.data[index:to].decode('latin1') + + def add_str(self, string): + assert self.sh_type == SHT_STRTAB + ret = len(self.data) + self.data += string.encode('latin1') + b'\0' + return ret + + def is_rel(self): + return self.sh_type == SHT_REL or self.sh_type == SHT_RELA + + def header_to_bin(self): + if self.sh_type != SHT_NOBITS: + self.sh_size = len(self.data) + return struct.pack('<IIIIIIIIII', self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize) + + def late_init(self, sections): + if self.sh_type == SHT_SYMTAB: + self.init_symbols(sections) + elif self.is_rel(): + self.rel_target = sections[self.sh_info] + self.rel_target.relocated_by.append(self) + self.init_relocs() + + def find_symbol(self, name): + assert self.sh_type == SHT_SYMTAB + for s in self.symbol_entries: + if s.name == name: + return (s.st_shndx, s.st_value) + return None + + def find_symbol_in_section(self, name, section): + pos = self.find_symbol(name) + assert pos is not None + assert pos[0] == section.index + return pos[1] + + def init_symbols(self, sections): + assert self.sh_type == SHT_SYMTAB + assert self.sh_entsize == 16 + self.strtab = sections[self.sh_link] + entries = [] + for i in range(0, self.sh_size, self.sh_entsize): + entries.append(Symbol(self.data[i:i+self.sh_entsize], self.strtab)) + self.symbol_entries = entries + + def init_relocs(self): + assert self.is_rel() + entries = [] + for i in range(0, self.sh_size, self.sh_entsize): + entries.append(Relocation(self.data[i:i+self.sh_entsize], self.sh_type)) + self.relocations = entries + + def local_symbols(self): + assert self.sh_type == SHT_SYMTAB + return self.symbol_entries[:self.sh_info] + + def global_symbols(self): + assert self.sh_type == SHT_SYMTAB + return self.symbol_entries[self.sh_info:] + + +class ElfFile: + def __init__(self, data): + self.data = data + assert data[:4] == b'\x7fELF', "not an ELF file" + + self.elf_header = ElfHeader(data[0:52]) + + offset, size = self.elf_header.e_shoff, self.elf_header.e_shentsize + null_section = Section(data[offset:offset + size], data, 0) + num_sections = self.elf_header.e_shnum or null_section.sh_size + + self.sections = [null_section] + for i in range(1, num_sections): + ind = offset + i * size + self.sections.append(Section(data[ind:ind + size], data, i)) + + symtab = None + for s in self.sections: + if s.sh_type == SHT_SYMTAB: + assert not symtab + symtab = s + assert symtab is not None + self.symtab = symtab + + shstr = self.sections[self.elf_header.e_shstrndx] + for s in self.sections: + s.name = shstr.lookup_str(s.sh_name) + s.late_init(self.sections) + + def find_section(self, name, num): + i = 0 # Count how many sections of name `name` have been encountered so far, when i reaches `num` return that section + for s in self.sections: + if s.name == name and i == num: + return s + # Increment if section is a .text section + if s.name == ".text": + i += 1 + return None + + # Because Metrowerks for DS can make duplicate .text sections + # for every function, we may need to lookup a specific .text area. + def find_section_with_name(self, name, st_name): + for s in self.sections: + if s.name == name and s.sh_name == st_name: + return s + return None + + # Return i, where i is the ith text section corresponding to the function + # called `name`. + def text_section_index(self, name): + st_shndx, _ = self.symtab.find_symbol(name) + n_text = 0 + for sec in self.sections: + if sec.index == st_shndx: + return n_text + if sec.name =='.text': + n_text += 1 + return -1 + + def add_section(self, name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data): + shstr = self.sections[self.elf_header.e_shstrndx] + sh_name = shstr.add_str(name) + s = Section.from_parts(sh_name=sh_name, sh_type=sh_type, + sh_flags=sh_flags, sh_link=sh_link, sh_info=sh_info, + sh_addralign=sh_addralign, sh_entsize=sh_entsize, data=data, + index=len(self.sections)) + self.sections.append(s) + s.name = name + s.late_init(self.sections) + return s + + def drop_irrelevant_sections(self): + # We can only drop sections at the end, since otherwise section + # references might be wrong. Luckily, these sections typically are. + while self.sections[-1].sh_type in [SHT_MIPS_DEBUG, SHT_MIPS_GPTAB]: + self.sections.pop() + + def write(self, filename): + outfile = open(filename, 'wb') + outidx = 0 + def write_out(data): + nonlocal outidx + outfile.write(data) + outidx += len(data) + def pad_out(align): + if align and outidx % align: + write_out(b'\0' * (align - outidx % align)) + + self.elf_header.e_shnum = len(self.sections) + write_out(self.elf_header.to_bin()) + + for s in self.sections: + if s.sh_type != SHT_NOBITS and s.sh_type != SHT_NULL: + pad_out(s.sh_addralign) + s.sh_offset = outidx + write_out(s.data) + + pad_out(4) + self.elf_header.e_shoff = outidx + for s in self.sections: + write_out(s.header_to_bin()) + + outfile.seek(0) + outfile.write(self.elf_header.to_bin()) + outfile.close() + + +def is_temp_name(name): + return name.startswith('_asmpp_') + + +# https://stackoverflow.com/a/241506 +def re_comment_replacer(match): + s = match.group(0) + if s[0] in "/#": + return " " + else: + return s + + +re_comment_or_string = re.compile( + r'#.*|/\*.*?\*/|"(?:\\.|[^\\"])*"' +) + + +class Failure(Exception): + def __init__(self, message): + self.message = message + + def __str__(self): + return self.message + + +class GlobalState: + def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata): + # A value that hopefully never appears as a 32-bit rodata constant (or we + # miscompile late rodata). Increases by 1 in each step. + self.late_rodata_hex = 0xE0123456 + self.namectr = 0 + self.min_instr_count = min_instr_count + self.skip_instr_count = skip_instr_count + self.use_jtbl_for_rodata = use_jtbl_for_rodata + + def next_late_rodata_hex(self): + dummy_bytes = struct.pack('<I', self.late_rodata_hex) + if (self.late_rodata_hex & 0xffff) == 0: + # Avoid lui + self.late_rodata_hex += 1 + self.late_rodata_hex += 1 + return dummy_bytes + + def make_name(self, cat): + self.namectr += 1 + return '_asmpp_{}{}'.format(cat, self.namectr) + + +Function = namedtuple('Function', ['text_glabels', 'asm_conts', 'late_rodata_dummy_bytes', 'jtbl_rodata_size', 'late_rodata_asm_conts', 'fn_desc', 'data']) + + +class GlobalAsmBlock: + def __init__(self, fn_desc): + self.fn_desc = fn_desc + self.cur_section = '.text' + self.asm_conts = [] + self.late_rodata_asm_conts = [] + self.late_rodata_alignment = 0 + self.late_rodata_alignment_from_content = False + self.text_glabels = [] + self.fn_section_sizes = { + '.text': 0, + '.init': 0, + '.data': 0, + '.bss': 0, + '.rodata': 0, + '.sdata': 0, + '.sdata2': 0, + '.sbss': 0, + #'.sbss2': 0, + '.late_rodata': 0, + } + self.fn_ins_inds = [] + self.glued_line = '' + self.num_lines = 0 + + def fail(self, message, line=None): + context = self.fn_desc + if line: + context += ", at line \"" + line + "\"" + raise Failure(message + "\nwithin " + context) + + def count_quoted_size(self, line, z, real_line, output_enc): + line = line.encode(output_enc).decode('latin1') + in_quote = False + num_parts = 0 + ret = 0 + i = 0 + digits = "0123456789" # 0-7 would be more sane, but this matches GNU as + while i < len(line): + c = line[i] + i += 1 + if not in_quote: + if c == '"': + in_quote = True + num_parts += 1 + else: + if c == '"': + in_quote = False + continue + ret += 1 + if c != '\\': + continue + if i == len(line): + self.fail("backslash at end of line not supported", real_line) + c = line[i] + i += 1 + # (if c is in "bfnrtv", we have a real escaped literal) + if c == 'x': + # hex literal, consume any number of hex chars, possibly none + while i < len(line) and line[i] in digits + "abcdefABCDEF": + i += 1 + elif c in digits: + # octal literal, consume up to two more digits + it = 0 + while i < len(line) and line[i] in digits and it < 2: + i += 1 + it += 1 + + if in_quote: + self.fail("unterminated string literal", real_line) + if num_parts == 0: + self.fail(".ascii with no string", real_line) + return ret + num_parts if z else ret + + + def align4(self): + while self.fn_section_sizes[self.cur_section] % 2 != 0: + self.fn_section_sizes[self.cur_section] += 1 + + def add_sized(self, size, line): + if self.cur_section in ['.text', '.init', '.late_rodata']: + if size % 2 != 0: + self.fail("size must be a multiple of 2 or 4", line) + if size < 0: + self.fail("size cannot be negative", line) + self.fn_section_sizes[self.cur_section] += size + if self.cur_section in ['.text', '.init']: + if not self.text_glabels: + self.fail(".text or .init block without an initial glabel", line) + self.fn_ins_inds.append((self.num_lines - 1, size // 2)) + + def process_line(self, line, output_enc): + self.num_lines += 1 + if line.endswith('\\'): + self.glued_line += line[:-1] + return + line = self.glued_line + line + self.glued_line = '' + + real_line = line + line = re.sub(re_comment_or_string, re_comment_replacer, line) + line = line.strip() + line = re.sub(r'^[a-zA-Z0-9_]+:\s*', '', line) + changed_section = False + emitting_double = False + if line.startswith('glabel ') and self.cur_section in ['.text', '.init']: + self.text_glabels.append(line.split()[1]) + if not line: + pass # empty line + elif line.startswith('glabel ') or (' ' not in line and line.endswith(':')): + pass # label + elif line.startswith('.section') or line in ['.text', '.init', '.data', '.rdata', '.rodata', '.sdata', '.sdata2', '.bss','.sbss', '.late_rodata']: + # section change + self.cur_section = '.rodata' if line == '.rdata' else line.split(',')[0].split()[-1] + if self.cur_section not in ['.data', '.text', '.init', '.rodata', '.sdata', '.sdata2', '.late_rodata', '.bss', '.sbss']: + self.fail("unrecognized .section directive", real_line) + changed_section = True + elif line.startswith('.late_rodata_alignment'): + if self.cur_section != '.late_rodata': + self.fail(".late_rodata_alignment must occur within .late_rodata section", real_line) + value = int(line.split()[1]) + if value not in [4, 8]: + self.fail(".late_rodata_alignment argument must be 4 or 8", real_line) + if self.late_rodata_alignment and self.late_rodata_alignment != value: + self.fail(".late_rodata_alignment alignment assumption conflicts with earlier .double directive. Make sure to provide explicit alignment padding.") + self.late_rodata_alignment = value + changed_section = True + elif line.startswith('.incbin'): + self.add_sized(int(line.split(',')[-1].strip(), 0), real_line) + elif line.startswith('.skip'): + self.add_sized(int(line.split()[-1].strip(), 0), real_line) + elif line.startswith('.long') or line.startswith('.float'): + self.align4() + self.add_sized(4 * len(line.split(',')), real_line) + elif line.startswith('.double'): + self.align4() + if self.cur_section == '.late_rodata': + align8 = self.fn_section_sizes[self.cur_section] % 8 + # Automatically set late_rodata_alignment, so the generated C code uses doubles. + # This gives us correct alignment for the transferred doubles even when the + # late_rodata_alignment is wrong, e.g. for non-matching compilation. + if not self.late_rodata_alignment: + self.late_rodata_alignment = 8 - align8 + self.late_rodata_alignment_from_content = True + elif self.late_rodata_alignment != 8 - align8: + if self.late_rodata_alignment_from_content: + self.fail("found two .double directives with different start addresses mod 8. Make sure to provide explicit alignment padding.", real_line) + else: + self.fail(".double at address that is not 0 mod 8 (based on .late_rodata_alignment assumption). Make sure to provide explicit alignment padding.", real_line) + self.add_sized(8 * len(line.split(',')), real_line) + emitting_double = True + elif line.startswith('.space'): + self.add_sized(int(line.split()[1], 0), real_line) + elif line.startswith('.balign') or line.startswith('.align'): + align = int(line.split()[1]) + if align != 4: + self.fail("only .balign 4 is supported", real_line) + self.align4() + elif line.startswith('.asci'): + z = (line.startswith('.asciz') or line.startswith('.asciiz')) + self.add_sized(self.count_quoted_size(line, z, real_line, output_enc), real_line) + elif line.startswith('.byte'): + self.add_sized(len(line.split(',')), real_line) + # Branches are 4 bytes long + elif line.startswith('bl'): + self.add_sized(4, real_line) + else: + # Unfortunately, macros are hard to support for .rodata -- + # we don't know how how space they will expand to before + # running the assembler, but we need that information to + # construct the C code. So if we need that we'll either + # need to run the assembler twice (at least in some rare + # cases), or change how this program is invoked. + # Similarly, we can't currently deal with pseudo-instructions + # that expand to several real instructions. + if self.cur_section != '.text' and self.cur_section != '.init': + self.fail("instruction or macro call in non-.text/.init section? not supported", real_line) + self.add_sized(2, real_line) + if self.cur_section == '.late_rodata': + if not changed_section: + if emitting_double: + self.late_rodata_asm_conts.append(".align 0") + self.late_rodata_asm_conts.append(real_line) + if emitting_double: + self.late_rodata_asm_conts.append(".align 2") + else: + self.asm_conts.append(real_line) + + def finish(self, state): + src = [''] * (self.num_lines + 1) + late_rodata_dummy_bytes = [] + jtbl_rodata_size = 0 + late_rodata_fn_output = [] + + num_instr = self.fn_section_sizes['.text'] // 2 + + if self.fn_section_sizes['.late_rodata'] > 0: + # Generate late rodata by emitting unique float constants. + # This requires 3 instructions for each 4 bytes of rodata. + # If we know alignment, we can use doubles, which give 3 + # instructions for 8 bytes of rodata. + size = self.fn_section_sizes['.late_rodata'] // 2 + skip_next = False + needs_double = (self.late_rodata_alignment != 0) + for i in range(size): + if skip_next: + skip_next = False + continue + # Jump tables give 9 instructions for >= 5 words of rodata, and should be + # emitted when: + # - -O2 or -O2 -g3 are used, which give the right codegen + # - we have emitted our first .float/.double (to ensure that we find the + # created rodata in the binary) + # - we have emitted our first .double, if any (to ensure alignment of doubles + # in shifted rodata sections) + # - we have at least 5 words of rodata left to emit (otherwise IDO does not + # generate a jump table) + # - we have at least 10 more instructions to go in this function (otherwise our + # function size computation will be wrong since the delay slot goes unused) + if (not needs_double and state.use_jtbl_for_rodata and i >= 1 and + size - i >= 5 and num_instr - len(late_rodata_fn_output) >= 10): + cases = " ".join("case {}:".format(case) for case in range(size - i)) + late_rodata_fn_output.append("switch (*(volatile int*)0) { " + cases + " ; }") + late_rodata_fn_output.extend([""] * 8) + jtbl_rodata_size = (size - i) * 4 + break + dummy_bytes = state.next_late_rodata_hex() + late_rodata_dummy_bytes.append(dummy_bytes) + if self.late_rodata_alignment == 4 * ((i + 1) % 2 + 1) and i + 1 < size: + dummy_bytes2 = state.next_late_rodata_hex() + late_rodata_dummy_bytes.append(dummy_bytes2) + fval, = struct.unpack('<d', dummy_bytes + dummy_bytes2) + late_rodata_fn_output.append('*(volatile double*)0 = {};'.format(fval)) + skip_next = True + needs_double = True + else: + fval, = struct.unpack('<f', dummy_bytes) + late_rodata_fn_output.append('*(volatile float*)0 = {}f;'.format(fval)) + late_rodata_fn_output.append('') + late_rodata_fn_output.append('') + + text_name = None + if self.fn_section_sizes['.text'] > 0 or late_rodata_fn_output: + text_name = state.make_name('func') + src[0] = 'int {}(void) {{ return '.format(text_name) + instr_count = self.fn_section_sizes['.text'] // 2 + src[self.num_lines] = '((volatile void *) 0); }; ' if instr_count > 1 else '; }; ' + if instr_count < state.min_instr_count: + self.fail("too short .text block") + tot_emitted = 0 + tot_skipped = 0 + fn_emitted = 0 + fn_skipped = 0 + rodata_stack = late_rodata_fn_output[::-1] + for (line, count) in self.fn_ins_inds: + for _ in range(count): + if (fn_emitted > MAX_FN_SIZE and instr_count - tot_emitted > state.min_instr_count and + (not rodata_stack or rodata_stack[-1])): + # Don't let functions become too large. When a function reaches 284 + # instructions, and -O2 -framepointer flags are passed, the IRIX + # compiler decides it is a great idea to start optimizing more. + fn_emitted = 0 + fn_skipped = 0 + src[line] += '((volatile void *) 0); }} int {}(void) {{ return '.format(state.make_name('large_func')) + if fn_skipped < state.skip_instr_count: + fn_skipped += 1 + tot_skipped += 1 + elif rodata_stack: + src[line] += rodata_stack.pop() + else: + src[line] += '*(int *)' + tot_emitted += 1 + fn_emitted += 1 + if rodata_stack: + size = len(late_rodata_fn_output) // 3 + available = instr_count - tot_skipped + self.fail( + "late rodata to text ratio is too high: {} / {} must be <= 1/3\n" + "add .late_rodata_alignment (4|8) to the .late_rodata " + "block to double the allowed ratio." + .format(size, available)) + + init_name = None + if self.fn_section_sizes['.init'] > 0 or late_rodata_fn_output: + init_name = state.make_name('func') + src[0] = 'int {}(void) {{ return '.format(init_name) + instr_count = self.fn_section_sizes['.init'] // 2 + src[self.num_lines] = '((volatile void *) 0); }; ' if instr_count else '; }; ' + if instr_count < state.min_instr_count: + self.fail("too short .init block") + tot_emitted = 0 + tot_skipped = 0 + fn_emitted = 0 + fn_skipped = 0 + rodata_stack = late_rodata_fn_output[::-1] + for (line, count) in self.fn_ins_inds: + for _ in range(count): + if (fn_emitted > MAX_FN_SIZE and instr_count - tot_emitted > state.min_instr_count and + (not rodata_stack or rodata_stack[-1])): + # Don't let functions become too large. When a function reaches 284 + # instructions, and -O2 -framepointer flags are passed, the IRIX + # compiler decides it is a great idea to start optimizing more. + fn_emitted = 0 + fn_skipped = 0 + src[line] += '((volatile void *) 0); }} int {}(void) {{ return '.format(state.make_name('large_func')) + if fn_skipped < state.skip_instr_count: + fn_skipped += 1 + tot_skipped += 1 + elif rodata_stack: + src[line] += rodata_stack.pop() + else: + src[line] += '*(int *)' + tot_emitted += 1 + fn_emitted += 1 + if rodata_stack: + size = len(late_rodata_fn_output) // 3 + available = instr_count - tot_skipped + self.fail( + "late rodata to init ratio is too high: {} / {} must be <= 1/3\n" + "add .late_rodata_alignment (4|8) to the .late_rodata " + "block to double the allowed ratio." + .format(size, available)) + + rodata_name = None + if self.fn_section_sizes['.rodata'] > 0: + rodata_name = state.make_name('rodata') + src[self.num_lines] += f" const char {rodata_name}[{self.fn_section_sizes['.rodata']}] = {{1}};" + + data_name = None + if self.fn_section_sizes['.data'] > 0: + data_name = state.make_name('data') + src[self.num_lines] += f" char {data_name}[{self.fn_section_sizes['.data']}] = {{1}};" + + bss_name = None + if self.fn_section_sizes['.bss'] > 0: + bss_name = state.make_name('bss') + src[self.num_lines] += f" char {bss_name}[{self.fn_section_sizes['.bss']}];" + + sdata_name = None # sdata is like data but small + if self.fn_section_sizes['.sdata'] > 0: + sdata_code = "" + for i in range(self.fn_section_sizes['.sdata']): + sdata_name = state.make_name('sdata') + sdata_code += f" char {sdata_name} = 1;" + src[self.num_lines] += sdata_code + + sdata2_name = None # sdata2 is like rodata but small + if self.fn_section_sizes['.sdata2'] > 0: + sdata2_code = "" + for i in range(self.fn_section_sizes['.sdata2']): + sdata2_name = state.make_name('sdata2') + sdata2_code += f" const char {sdata2_name} = 1;" + src[self.num_lines] += sdata2_code + + sbss_name = None # Similarly, sbss is like uninitialized data but small + if self.fn_section_sizes['.sbss'] > 0: + sbss_code = "" + for i in range(self.fn_section_sizes['.sbss']): + sbss_name = state.make_name('sbss') + sbss_code += f" char {sbss_name};" + src[self.num_lines] += sbss_code + + """ sbss2 is currently borked + sbss2_name = None # Similarly, sbss2 is like uninitialized rodata but small + if self.fn_section_sizes['.sbss2'] > 0: + sbss2_code = "" + for i in range(self.fn_section_sizes['.sbss2']): + sbss2_name = state.make_name('sbss2') + sbss2_code += f" const char {sbss2_name};" + src[self.num_lines] += sbss2_code + """ + + fn = Function( + text_glabels=self.text_glabels, + asm_conts=self.asm_conts, + late_rodata_dummy_bytes=late_rodata_dummy_bytes, + jtbl_rodata_size=jtbl_rodata_size, + late_rodata_asm_conts=self.late_rodata_asm_conts, + fn_desc=self.fn_desc, + data={ + '.text': (text_name, self.fn_section_sizes['.text']), + '.data': (data_name, self.fn_section_sizes['.data']), + '.rodata': (rodata_name, self.fn_section_sizes['.rodata']), + '.bss': (bss_name, self.fn_section_sizes['.bss']), + '.sdata': (sdata_name, self.fn_section_sizes['.sdata']), + '.sdata2': (sdata2_name, self.fn_section_sizes['.sdata2']), + '.sbss': (sbss_name, self.fn_section_sizes['.sbss']), + #'.sbss2': (sbss2_name, self.fn_section_sizes['.sbss2']), + }) + return src, fn + +cutscene_data_regexpr = re.compile(r"CutsceneData (.|\n)*\[\] = {") +float_regexpr = re.compile(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f") + +def repl_float_hex(m): + return str(struct.unpack("<I", struct.pack("<f", float(m.group(0).strip().rstrip("f"))))[0]) + +def parse_source(f, opt, framepointer, input_enc, output_enc, print_source=None): + opt = "O4" + min_instr_count = 3 # idk + skip_instr_count = 2 # idk + + use_jtbl_for_rodata = False + if opt in ['O2', 'g3'] and not framepointer: + use_jtbl_for_rodata = True + + state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata) + + global_asm = None + asm_functions = [] + output_lines = [] + + is_cutscene_data = False + + for line_no, raw_line in enumerate(f, 1): + raw_line = raw_line.rstrip() + line = raw_line.lstrip() + + # Print exactly one output line per source line, to make compiler + # errors have correct line numbers. These will be overridden with + # reasonable content further down. + output_lines.append('') + if global_asm is not None: + if line.startswith(')'): + src, fn = global_asm.finish(state) + for i, line2 in enumerate(src): + output_lines[start_index + i] = line2 + asm_functions.append(fn) + global_asm = None + else: + global_asm.process_line(raw_line, output_enc) + else: + if line in ['GLOBAL_ASM(', '#pragma GLOBAL_ASM(']: + global_asm = GlobalAsmBlock("GLOBAL_ASM block at line " + str(line_no)) + start_index = len(output_lines) + elif ((line.startswith('GLOBAL_ASM("') or line.startswith('#pragma GLOBAL_ASM("')) + and line.endswith('")')): + fname = line[line.index('(') + 2 : -2] + global_asm = GlobalAsmBlock(fname) + with open(fname, encoding=input_enc) as f: + for line2 in f: + global_asm.process_line(line2.rstrip(), output_enc) + src, fn = global_asm.finish(state) + output_lines[-1] = ''.join(src) + asm_functions.append(fn) + global_asm = None + elif ((line.startswith('#include "')) and line.endswith('" EARLY')): + # C includes qualified with EARLY (i.e. #include "file.c" EARLY) will be + # processed recursively when encountered + fpath = os.path.dirname(f.name) + fname = line[line.index(' ') + 2 : -7] + include_src = StringIO() + with open(fpath + os.path.sep + fname, encoding=input_enc) as include_file: + parse_source(include_file, opt, framepointer, input_enc, output_enc, include_src) + output_lines[-1] = include_src.getvalue() + include_src.write('#line ' + str(line_no) + '\n') + include_src.close() + else: + # This is a hack to replace all floating-point numbers in an array of a particular type + # (in this case CutsceneData) with their corresponding IEEE-754 hexadecimal representation + if cutscene_data_regexpr.search(line) is not None: + is_cutscene_data = True + elif line.endswith("};"): + is_cutscene_data = False + if is_cutscene_data: + raw_line = re.sub(float_regexpr, repl_float_hex, raw_line) + output_lines[-1] = raw_line + + if print_source: + if isinstance(print_source, StringIO): + for line in output_lines: + print_source.write(line + '\n') + else: + for line in output_lines: + print_source.write(line.encode(output_enc) + b'\n') + print_source.flush() + if print_source != sys.stdout.buffer: + print_source.close() + out_file = open("output.txt", 'w') + out_file.write(str(asm_functions)) + out_file.close() + return asm_functions + +# Return the function name in objfile corresponding to function +# `asm_func_name` in asm_objfile. `to_copy` is the dictionary of the +# same name in fix_objfile(). +def convert_func_name(asm_func_name, to_copy): + for sec_name, func_data in to_copy.items(): + if func_data and func_data[0][4] == asm_func_name: + return func_data[0][2] + return '' + +def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): + SECTIONS = ['.data'] + SECTIONS.extend(['.text' for i in range(0,len(functions))]) + SECTIONS.extend(['.rodata', '.bss', '.sdata', '.sdata2', '.sbss']) + + with open(objfile_name, 'rb') as f: + objfile = ElfFile(f.read()) + + prev_locs = defaultdict(int) + to_copy = defaultdict(list) + + asm = [] + all_late_rodata_dummy_bytes = [] + all_jtbl_rodata_size = [] + late_rodata_asm = [] + late_rodata_source_name_start = None + late_rodata_source_name_end = None + + # Generate an assembly file with all the assembly we need to fill in. For + # simplicity we pad with nops/.space so that addresses match exactly, so we + # don't have to fix up relocations/symbol references. + all_text_glabels = set() + for function in functions: + ifdefed = False + for sectype, (temp_name, size) in function.data.items(): + if temp_name is None: + continue + assert size > 0 + n_text = objfile.text_section_index(temp_name) + loc = objfile.symtab.find_symbol(temp_name) + if loc is None: + ifdefed = True + break + loc = loc[1] + prev_loc = prev_locs[sectype + (str(n_text) if sectype == '.text' else '')] + if loc < prev_loc: + raise Failure("Wrongly computed size for section {} (diff {}). This is an asm-processor bug!".format(sectype + (str(n_text) if sectype == '.text' else ''), prev_loc- loc)) + if loc != prev_loc: + asm.append('.section ' + sectype) + if sectype == '.text': + for i in range((loc - prev_loc) // 2): + asm.append('nop') + else: + asm.append('.space {}'.format(loc - prev_loc)) + to_copy[sectype + (str(n_text) if sectype == '.text' else '')].append((loc, size, temp_name, function.fn_desc, function.text_glabels[0])) + prev_locs[sectype + (str(n_text) if sectype == '.text' else '')] = loc + size + if not ifdefed: + all_text_glabels.update(function.text_glabels) + all_late_rodata_dummy_bytes.append(function.late_rodata_dummy_bytes) + all_jtbl_rodata_size.append(function.jtbl_rodata_size) + late_rodata_asm.append(function.late_rodata_asm_conts) + for sectype, (temp_name, size) in function.data.items(): + if temp_name is not None: + asm.append('.section ' + sectype) + asm.append('glabel ' + temp_name + '_asm_start') + asm.append('.section .text') + for line in function.asm_conts: + asm.append(line) + for sectype, (temp_name, size) in function.data.items(): + if temp_name is not None: + #asm.append('.section ' + sectype) + asm.append('glabel ' + temp_name + '_asm_end') + + if any(late_rodata_asm): + late_rodata_source_name_start = '_asmpp_late_rodata_start' + late_rodata_source_name_end = '_asmpp_late_rodata_end' + asm.append('.rdata') + asm.append('glabel {}'.format(late_rodata_source_name_start)) + for conts in late_rodata_asm: + asm.extend(conts) + asm.append('glabel {}'.format(late_rodata_source_name_end)) + + o_file = open("asm_processor_temp.o", 'w').close() # Create temp file. tempfile module isn't working for me. + o_name = "asm_processor_temp.o" + + s_file = open("asm_processor_temp.s", 'wb') # Ditto. + s_name = "asm_processor_temp.s" + try: + s_file.write(asm_prelude + b'\n') + for line in asm: + s_file.write(line.encode(output_enc) + b'\n') + s_file.close() + ret = os.system(assembler + " " + s_name + " -o " + o_name) + if ret != 0: + raise Failure("failed to assemble") + with open(o_name, 'rb') as f: + asm_objfile = ElfFile(f.read()) + + # Remove some clutter from objdump output + objfile.drop_irrelevant_sections() + + """ + # Unify reginfo sections + target_reginfo = objfile.find_section('.reginfo') + source_reginfo_data = list(asm_objfile.find_section('.reginfo').data) + data = list(target_reginfo.data) + for i in range(20): + data[i] |= source_reginfo_data[i] + target_reginfo.data = bytes(data) + """ + + # Move over section contents + modified_text_positions = set() + jtbl_rodata_positions = set() + last_rodata_pos = 0 + n_text = 0 + for sec in objfile.sections: + sectype = sec.name + if not to_copy[sectype + (str(n_text) if sectype == '.text' else '')]: + if sectype == '.text': + n_text += 1 + continue + # This should work as long as you NONMATCH whole functions rather than asm fragments + func = to_copy[sectype + str(n_text) if sectype == '.text' else ''][0][2] + asm_n_text = asm_objfile.text_section_index(func + '_asm_start') + source = asm_objfile.find_section(sectype, asm_n_text if sectype == '.text' else 0) + assert source is not None, "didn't find source section: " + sectype + for (pos, count, temp_name, fn_desc, fn_name) in to_copy[sectype + (str(n_text) if sectype == '.text' else '')]: + loc1 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_start', source) + loc2 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_end', source) + assert loc1 == pos, "assembly and C files don't line up for section " + sectype + ", " + fn_desc + # Since we are nonmatching whole functions, we don't need to insert the correct + # amount of padding into the src file. We don't actually need to insert padding + # at all. We can just plop the asm's text section into the objfile. + # if loc2 - loc1 != count: + # raise Failure("incorrectly computed size for section " + sectype + ", " + fn_desc + ". If using .double, make sure to provide explicit alignment padding.") + if sectype == '.bss' or sectype == '.sbss2': + continue + target = objfile.find_section(sectype, n_text if sectype == '.text' else 0) + assert target is not None, "missing target section of type " + sectype + data = list(target.data) + for (pos, count, _, _, _) in to_copy[sectype + (str(n_text) if sectype == '.text' else '')]: + # mwasmarm 4-aligns text sections, so make sure to copy exactly `count` bytes + data[pos:pos + count] = source.data[pos:pos + count] + if sectype == '.text': + assert count % 2 == 0 + assert pos % 2 == 0 + for i in range(count // 2): + modified_text_positions.add(pos + 2 * i) + elif sectype == '.rodata': + last_rodata_pos = pos + count + target.data = bytes(data) + if sectype == '.text': + n_text += 1 + + # Move over late rodata. This is heuristic, sadly, since I can't think + # of another way of doing it. + moved_late_rodata = {} + if any(all_late_rodata_dummy_bytes) or any(all_jtbl_rodata_size): + source = asm_objfile.find_section('.rodata', 0) + target = objfile.find_section('.rodata', 0) + source_pos = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_start, source) + source_end = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_end, source) + if source_end - source_pos != sum(map(len, all_late_rodata_dummy_bytes)) * 2 + sum(all_jtbl_rodata_size): + raise Failure("computed wrong size of .late_rodata") + new_data = list(target.data) + for dummy_bytes_list, jtbl_rodata_size in zip(all_late_rodata_dummy_bytes, all_jtbl_rodata_size): + for index, dummy_bytes in enumerate(dummy_bytes_list): + pos = target.data.index(dummy_bytes, last_rodata_pos) + # This check is nice, but makes time complexity worse for large files: + if SLOW_CHECKS and target.data.find(dummy_bytes, pos + 2) != -1: + raise Failure("multiple occurrences of late_rodata hex magic. Change asm-processor to use something better than 0xE0123456!") + if index == 0 and len(dummy_bytes_list) > 1 and target.data[pos+2:pos+8] == b'\0\0\0\0': + # Ugly hack to handle double alignment for non-matching builds. + # We were told by .late_rodata_alignment (or deduced from a .double) + # that a function's late_rodata started out 4 (mod 8), and emitted + # a float and then a double. But it was actually 0 (mod 8), so our + # double was moved by 4 bytes. To make them adjacent to keep jump + # tables correct, move the float by 4 bytes as well. + new_data[pos:pos+2] = b'\0\0\0\0' + pos += 2 + new_data[pos:pos+2] = source.data[source_pos:source_pos+2] + moved_late_rodata[source_pos] = pos + last_rodata_pos = pos + 2 + source_pos += 2 + if jtbl_rodata_size > 0: + assert dummy_bytes_list, "should always have dummy bytes before jtbl data" + pos = last_rodata_pos + new_data[pos : pos + jtbl_rodata_size] = \ + source.data[source_pos : source_pos + jtbl_rodata_size] + for i in range(0, jtbl_rodata_size, 2): + moved_late_rodata[source_pos + i] = pos + i + jtbl_rodata_positions.add(pos + i) + last_rodata_pos += jtbl_rodata_size + source_pos += jtbl_rodata_size + target.data = bytes(new_data) + + # Merge strtab data. + strtab_adj = len(objfile.symtab.strtab.data) + objfile.symtab.strtab.data += asm_objfile.symtab.strtab.data + + # Find relocated symbols + relocated_symbols = set() + for obj in [asm_objfile, objfile]: + for sec in obj.sections: + for reltab in sec.relocated_by: + for rel in reltab.relocations: + relocated_symbols.add(obj.symtab.symbol_entries[rel.sym_index]) + + # Move over symbols, deleting the temporary function labels. + # Sometimes this naive procedure results in duplicate symbols, or UNDEF + # symbols that are also defined the same .o file. Hopefully that's fine. + # Skip over local symbols that aren't used relocated against, to avoid + # conflicts. + new_local_syms = [s for s in objfile.symtab.local_symbols() if not is_temp_name(s.name)] + new_global_syms = [s for s in objfile.symtab.global_symbols() if not is_temp_name(s.name)] + n_text = 0 + for i, s in enumerate(asm_objfile.symtab.symbol_entries): + is_local = (i < asm_objfile.symtab.sh_info) + if is_local and s not in relocated_symbols: + continue + if is_temp_name(s.name): + continue + if s.st_shndx not in [SHN_UNDEF, SHN_ABS]: + section_name = asm_objfile.sections[s.st_shndx].name + if section_name not in SECTIONS: + raise Failure("generated assembly .o must only have symbols for .text, .data, .rodata, .sdata, .sdata2, .sbss, ABS and UNDEF, but found " + section_name) + if section_name == '.sbss2': #! I'm not sure why this isn't working + continue + obj_func_name = convert_func_name(s.name, to_copy) + obj_n_text = objfile.text_section_index(obj_func_name) + s.st_shndx = objfile.find_section(section_name, obj_n_text if section_name == '.text' else 0).index + if section_name == '.text': + n_text += 1 + # glabel's aren't marked as functions, making objdump output confusing. Fix that. + if s.name in all_text_glabels: + s.type = STT_FUNC + if objfile.sections[s.st_shndx].name == '.rodata' and s.st_value in moved_late_rodata: + s.st_value = moved_late_rodata[s.st_value] + s.st_name += strtab_adj + if is_local: + new_local_syms.append(s) + else: + new_global_syms.append(s) + new_syms = new_local_syms + new_global_syms + for i, s in enumerate(new_syms): + s.new_index = i + objfile.symtab.data = b''.join(s.to_bin() for s in new_syms) + objfile.symtab.sh_info = len(new_local_syms) + + # Move over relocations + n_text = 0 + for sec in objfile.sections: + sectype = sec.name + # This should work as long as you NONMATCH whole functions rather than asm fragments + target = objfile.find_section(sectype, n_text if sectype == '.text' else 0) + + if target is not None: + # fixup relocation symbol indices, since we butchered them above + for reltab in target.relocated_by: + nrels = [] + for rel in reltab.relocations: + if (sectype == '.rodata' and rel.r_offset in jtbl_rodata_positions) or sectype == ".sbss2": + # don't include relocations for late_rodata dummy code + continue + # hopefully we don't have relocations for local or + # temporary symbols, so new_index exists + rel.sym_index = objfile.symtab.symbol_entries[rel.sym_index].new_index + nrels.append(rel) + reltab.relocations = nrels + reltab.data = b''.join(rel.to_bin() for rel in nrels) + + if not to_copy[sectype + (str(n_text) if sectype == '.text' else '')]: + if sectype == '.text': + n_text += 1 + continue + + func = to_copy[sectype + str(n_text) if sectype == '.text' else ''][0][2] + asm_n_text = asm_objfile.text_section_index(func + '_asm_start') + source = asm_objfile.find_section(sectype, asm_n_text if sectype == '.text' else 0) + if not source: + if sectype == '.text': + n_text += 1 + continue + + target_reltab = objfile.find_section('.rel' + sectype, n_text if sectype == '.text' else 0) + target_reltaba = objfile.find_section('.rela' + sectype, n_text if sectype == '.text' else 0) + for reltab in source.relocated_by: + for rel in reltab.relocations: + rel.sym_index = asm_objfile.symtab.symbol_entries[rel.sym_index].new_index + if sectype == '.rodata' and rel.r_offset in moved_late_rodata: + rel.r_offset = moved_late_rodata[rel.r_offset] + new_data = b''.join(rel.to_bin() for rel in reltab.relocations) + if reltab.sh_type == SHT_REL: + target_reltab = objfile.add_section('.rel' + sectype, + sh_type=SHT_REL, sh_flags=0, + sh_link=objfile.symtab.index, sh_info=target.index, + sh_addralign=4, sh_entsize=8, data=b'') + target_reltab.data += new_data + else: + # Always append as a separate .rela.text section + target_reltaba = objfile.add_section('.rela' + sectype, + sh_type=SHT_RELA, sh_flags=0, + sh_link=objfile.symtab.index, sh_info=target.index, + sh_addralign=4, sh_entsize=12, data=b'') + target_reltaba.data += new_data + if sectype == '.text': + n_text += 1 + + objfile.write(objfile_name) + finally: + s_file.close() + #os.remove(s_name) + try: + pass + #os.remove(o_name) + except: + pass + +def run_wrapped(argv, outfile): + parser = argparse.ArgumentParser(description="Pre-process .c files and post-process .o files to enable embedding assembly into C.") + parser.add_argument('filename', help="path to .c code") + parser.add_argument('--post-process', dest='objfile', help="path to .o file to post-process") + parser.add_argument('--assembler', dest='assembler', help="assembler command (e.g. \"mips-linux-gnu-as -march=vr4300 -mabi=32\")") + parser.add_argument('--asm-prelude', dest='asm_prelude', help="path to a file containing a prelude to the assembly file (with .set and .macro directives, e.g.)") + parser.add_argument('--input-enc', default='latin1', help="Input encoding (default: latin1)") + parser.add_argument('--output-enc', default='latin1', help="Output encoding (default: latin1)") + parser.add_argument('-framepointer', dest='framepointer', action='store_true') + parser.add_argument('-g3', dest='g3', action='store_true') + group = parser.add_mutually_exclusive_group(required=False) + group.add_argument('-O1', dest='opt', action='store_const', const='O1') + group.add_argument('-O2', dest='opt', action='store_const', const='O2') + group.add_argument('-g', dest='opt', action='store_const', const='g') + args = parser.parse_args(argv) + opt = args.opt + if args.g3: + if opt != 'O2': + raise Failure("-g3 is only supported together with -O2") + opt = 'g3' + + if args.objfile is None: + with open(args.filename, encoding=args.input_enc) as f: + parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc, print_source=outfile) + else: + if args.assembler is None: + raise Failure("must pass assembler command") + with open(args.filename, encoding=args.input_enc) as f: + functions = parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc) + if not functions: + return + asm_prelude = b'' + if args.asm_prelude: + with open(args.asm_prelude, 'rb') as f: + asm_prelude = f.read() + fixup_objfile(args.objfile, functions, asm_prelude, args.assembler, args.output_enc) + +def run(argv, outfile=sys.stdout.buffer): + try: + run_wrapped(argv, outfile) + except Failure as e: + print("Error:", e, file=sys.stderr) + sys.exit(1) + +if __name__ == "__main__": + run(sys.argv[1:]) diff --git a/tools/asm_processor/compile.sh b/tools/asm_processor/compile.sh index 786da404..feef7fc9 100644..100755 --- a/tools/asm_processor/compile.sh +++ b/tools/asm_processor/compile.sh @@ -1,19 +1,30 @@ #!/bin/bash CC="$1" -shift -AS="$1" -shift +AS="$2" +OBJ="$3" +SRC="$4" -temp="$(mktemp)" -../tools/asm_processor/asm_processor.py "$2" --assembler "$AS" > "$temp.c" && -$CC -c "$temp.c" -o "$1" +PADDED_SRC="$(mktemp --suffix=.c padded-XXXXXX)" +PADDED_OBJ="$(mktemp --suffix=.o padded-XXXXXX)" -prelude=$(mktemp prelude.XXXXXX) -cat ../include/macros.inc >> "$prelude" -cat global.inc >> "$prelude" +# Create a .c file replacing the nonmatching function with volatile int writes, +# and compile. +../tools/asm_processor/asm_processor.py "$SRC" --assembler "$AS" > "$PADDED_SRC" +$CC -c "$PADDED_SRC" -o "$PADDED_OBJ" -../tools/asm_processor/asm_processor.py "$2" --post-process "$1" --assembler "$AS" --asm-prelude "$prelude" -arm-none-eabi-objcopy --remove-section .comment "$1" "$1" -rm "$prelude" -rm "$temp" +PRELUDE=$(mktemp) +cat ../include/macros.inc >> "$PRELUDE" +cat global.inc >> "$PRELUDE" + +# Inject the matching assembly into the padded obj file. +../tools/asm_processor/asm_processor.py "$SRC" --post-process "$PADDED_OBJ" --assembler "$AS" --asm-prelude "$PRELUDE" + +arm-none-eabi-objcopy --remove-section .comment "$PADDED_OBJ" "$OBJ" + +rm "$PADDED_SRC" +rm "$PADDED_OBJ" +rm "$PRELUDE" +rm output.txt +rm asm_processor_temp.s +rm asm_processor_temp.o diff --git a/tools/nitrogfx/gfx.c b/tools/nitrogfx/gfx.c index be01a456..305fbeb2 100644 --- a/tools/nitrogfx/gfx.c +++ b/tools/nitrogfx/gfx.c @@ -744,16 +744,17 @@ void WriteNtrCell(char *path, struct JsonToCellOptions *options) if (fp == NULL) FATAL_ERROR("Failed to open \"%s\" for writing.\n", path); - unsigned int totalSize = (options->label > 0 ? 0x34 : 0x20) + options->cellCount * (options->extended ? 0x16 : 0xe); + unsigned int totalSize = (options->labelEnabled > 0 ? 0x34 : 0x20) + options->cellCount * (options->extended ? 0x16 : 0xe); - if (options->label) + if (options->labelEnabled) { - for (int i = 0; i < options->cellCount; i++) { - totalSize += strlen(options->cells[i]->label) + 5; //strlen + terminator + pointer + for (int j = 0; j < options->labelCount; j++) + { + totalSize += strlen(options->labels[j]) + 5; //strlen + terminator + pointer } } - WriteGenericNtrHeader(fp, "RECN", totalSize, true, false, options->label ? 3 : 1); + WriteGenericNtrHeader(fp, "RECN", totalSize, true, false, options->labelEnabled ? 3 : 1); unsigned char KBECHeader[0x20] = { @@ -858,12 +859,12 @@ void WriteNtrCell(char *path, struct JsonToCellOptions *options) free(KBECContents); - if (options->label) + if (options->labelEnabled) { - unsigned int lablSize = 8 + options->cellCount * 4; - for (i = 0; i < options->cellCount; i++) + unsigned int lablSize = 8; + for (int j = 0; j < options->labelCount; j++) { - lablSize += strlen(options->cells[i]->label) + 1; + lablSize += strlen(options->labels[j]) + 5; } unsigned char *labl = malloc(lablSize); @@ -876,18 +877,20 @@ void WriteNtrCell(char *path, struct JsonToCellOptions *options) unsigned int position = 0; - for (i = 0; i < options->cellCount * 4; i += 4) + i = 0; + for (int j = 0; j < options->labelCount; j++) { labl[i + 8] = position & 0xff; labl[i + 9] = position >> 8; - position += strlen(options->cells[i / 4]->label) + 1; + position += strlen(options->labels[j]) + 1; + i += 4; } - for (int j = 0; j < options->cellCount; j++) + for (int j = 0; j < options->labelCount; j++) { - strcpy((char *) (labl + (i + 8)), options->cells[j]->label); - i += strlen(options->cells[j]->label) + 1; + strcpy((char *) (labl + (i + 8)), options->labels[j]); + i += strlen(options->labels[j]) + 1; } fwrite(labl, 1, lablSize, fp); diff --git a/tools/nitrogfx/json.c b/tools/nitrogfx/json.c index 53f83ceb..aad325be 100644 --- a/tools/nitrogfx/json.c +++ b/tools/nitrogfx/json.c @@ -46,13 +46,13 @@ struct JsonToCellOptions *ParseNCERJson(char *path) FATAL_ERROR("Error in line \"%s\"\n", errorPtr); } - cJSON *labelBool = cJSON_GetObjectItemCaseSensitive(json, "label"); + cJSON *labelBool = cJSON_GetObjectItemCaseSensitive(json, "labelEnabled"); cJSON *extended = cJSON_GetObjectItemCaseSensitive(json, "extended"); cJSON *imageHeight = cJSON_GetObjectItemCaseSensitive(json, "imageHeight"); cJSON *imageWidth = cJSON_GetObjectItemCaseSensitive(json, "imageWidth"); cJSON *cellCount = cJSON_GetObjectItemCaseSensitive(json, "cellCount"); - options->label = GetBool(labelBool); + options->labelEnabled = GetBool(labelBool); options->extended = GetBool(extended); options->imageHeight = GetInt(imageHeight); options->imageWidth = GetInt(imageWidth); @@ -60,6 +60,26 @@ struct JsonToCellOptions *ParseNCERJson(char *path) options->cells = malloc(sizeof(struct Cell *) * options->cellCount); + + if (options->labelEnabled) + { + cJSON *labelCount = cJSON_GetObjectItemCaseSensitive(json, "labelCount"); + options->labelCount = GetInt(labelCount); + options->labels = malloc(sizeof(char *) * options->labelCount); + + cJSON *labels = cJSON_GetObjectItemCaseSensitive(json, "labels"); + cJSON *label = NULL; + + int j = 0; + cJSON_ArrayForEach(label, labels) + { + char *labelString = GetString(label); + options->labels[j] = malloc(strlen(labelString) + 1); + strcpy(options->labels[j], labelString); + j++; + } + } + for (int i = 0; i < options->cellCount; i++) { options->cells[i] = malloc(sizeof(struct Cell)); @@ -89,14 +109,6 @@ struct JsonToCellOptions *ParseNCERJson(char *path) options->cells[i]->minX = (short)GetInt(minX); options->cells[i]->minY = (short)GetInt(minY); } - - if (options->label) - { - cJSON *label = cJSON_GetObjectItemCaseSensitive(cell, "label"); - char *labelString = GetString(label); - options->cells[i]->label = malloc(strlen(labelString) + 1); - strcpy(options->cells[i]->label, labelString); - } //OAM data cJSON *OAM = cJSON_GetObjectItemCaseSensitive(cell, "OAM"); @@ -221,11 +233,15 @@ void FreeNCERCell(struct JsonToCellOptions *options) { for (int i = 0; i < options->cellCount; i++) { - if (options->label) + free(options->cells[i]); + } + if (options->labelEnabled) + { + for (int j = 0; j < options->labelCount; j++) { - free(options->cells[i]->label); + free(options->labels[j]); } - free(options->cells[i]); + free(options->labels); } free(options); } diff --git a/tools/nitrogfx/options.h b/tools/nitrogfx/options.h index f4626df9..780c83e6 100644 --- a/tools/nitrogfx/options.h +++ b/tools/nitrogfx/options.h @@ -69,16 +69,17 @@ struct Cell { short minX; short minY; struct OAM oam; - char *label; }; struct JsonToCellOptions { - bool label; + bool labelEnabled; bool extended; int imageHeight; int imageWidth; int cellCount; struct Cell **cells; + char **labels; + int labelCount; }; struct JsonToScreenOptions { |