summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/calcrom/.gitattributes1
-rw-r--r--.github/calcrom/webhook.sh1
-rw-r--r--.github/workflows/build.yml6
-rw-r--r--INSTALL.md9
-rw-r--r--arm9/arm9.lsf19
-rw-r--r--arm9/asm/nonmatchings/GenerateFontHalfRowLookupTable.s11
-rw-r--r--arm9/asm/scrcmd_11.s239
-rw-r--r--arm9/asm/scrcmd_13.s220
-rw-r--r--arm9/asm/scrcmd_14.s267
-rw-r--r--arm9/asm/scrcmd_15.s198
-rw-r--r--arm9/asm/scrcmd_16.s408
-rw-r--r--arm9/asm/scrcmd_18.s2
-rw-r--r--arm9/asm/scrcmd_19.s175
-rw-r--r--arm9/asm/scrcmd_20.s56
-rw-r--r--arm9/asm/scrcmd_22.s220
-rw-r--r--arm9/asm/scrcmd_23.s483
-rw-r--r--arm9/asm/scrcmd_25.s30
-rw-r--r--arm9/asm/scrcmd_3.s2
-rw-r--r--arm9/asm/scrcmd_4.s1313
-rw-r--r--arm9/asm/scrcmd_asm.s (renamed from arm9/asm/scrcmd.s)2849
-rw-r--r--arm9/asm/unk_0200CABC.s2
-rw-r--r--arm9/asm/unk_02015E30.s72
-rw-r--r--arm9/asm/unk_020166C8.s665
-rw-r--r--arm9/asm/unk_02016B94.s40
-rw-r--r--arm9/asm/unk_0201B1A8.s2
-rw-r--r--arm9/asm/unk_0201E66C.s197
-rw-r--r--arm9/asm/unk_02020AFC.s165
-rw-r--r--arm9/asm/unk_02022318.s2
-rw-r--r--arm9/asm/unk_02024E64.s118
-rw-r--r--arm9/asm/unk_02025484.s41
-rw-r--r--arm9/asm/unk_02028980.s4
-rw-r--r--arm9/asm/unk_0202F150.s4516
-rw-r--r--arm9/asm/unk_02033F50.s10
-rw-r--r--arm9/asm/unk_02034188.s10
-rw-r--r--arm9/asm/unk_020343A8.s2
-rw-r--r--arm9/asm/unk_02034A28.s8
-rw-r--r--arm9/asm/unk_02034FE4.s2
-rw-r--r--arm9/asm/unk_02035068.s10
-rw-r--r--arm9/asm/unk_020377F0.s10
-rw-r--r--arm9/asm/unk_02038C78.s426
-rw-r--r--arm9/asm/unk_020476CC.s4
-rw-r--r--arm9/asm/unk_02048120.s2
-rw-r--r--arm9/asm/unk_020484A8.s2
-rw-r--r--arm9/asm/unk_02048904.s4
-rw-r--r--arm9/asm/unk_0204AB0C.s8
-rw-r--r--arm9/asm/unk_0204AEA8.s67
-rw-r--r--arm9/asm/unk_02050E48.s2
-rw-r--r--arm9/asm/unk_02053750.s12
-rw-r--r--arm9/asm/unk_0205CE48.s10
-rw-r--r--arm9/asm/unk_0205F7A0.s2
-rw-r--r--arm9/asm/unk_0205FA2C.s930
-rw-r--r--arm9/asm/unk_02060CCC.s10
-rw-r--r--arm9/asm/unk_0206367C.s4
-rw-r--r--arm9/asm/unk_02063948.s4
-rw-r--r--arm9/asm/unk_0206C700.s14
-rw-r--r--arm9/asm/unk_0206DE24.s6
-rw-r--r--arm9/asm/unk_0206F3FC.s12
-rw-r--r--arm9/asm/unk_02073710.s4
-rw-r--r--arm9/asm/unk_0207550C.s2
-rw-r--r--arm9/asm/unk_020772F0.s30
-rw-r--r--arm9/asm/unk_02079C70.s12
-rw-r--r--arm9/asm/unk_0207C328.s4
-rw-r--r--arm9/asm/unk_0207EF6C.s2
-rw-r--r--arm9/asm/unk_020859C0.s16
-rw-r--r--arm9/asm/unk_02086084.s10
-rw-r--r--arm9/asm/unk_02086414.s16
-rw-r--r--arm9/asm/unk_02086FA8.s8
-rw-r--r--arm9/asm/unk_02089498.s8
-rw-r--r--arm9/asm/unk_02089960.s8
-rw-r--r--arm9/asm/unk_02089D90.s10
-rw-r--r--arm9/asm/unk_02089F24.s20
-rw-r--r--arm9/asm/unk_0208A998.s294
-rw-r--r--arm9/global.inc502
-rw-r--r--arm9/modules/05/asm/mod05_021D74E0.s22
-rw-r--r--arm9/modules/05/asm/mod05_021D80E8.s14
-rw-r--r--arm9/modules/05/asm/mod05_021DC0B8.s60
-rw-r--r--arm9/modules/05/asm/mod05_021E2E88.s2
-rw-r--r--arm9/modules/05/asm/mod05_021E3444.s8
-rw-r--r--arm9/modules/05/asm/mod05_021E8310.s2
-rw-r--r--arm9/modules/05/asm/module_05.s62
-rw-r--r--arm9/modules/05/src/mod05_021E72FC.c2
-rw-r--r--arm9/modules/06/asm/module_06.s34
-rw-r--r--arm9/modules/07/asm/module_07.s16
-rw-r--r--arm9/modules/09/asm/module_09.s8
-rw-r--r--arm9/modules/11/asm/module_11_thumb1.s36
-rw-r--r--arm9/modules/11/asm/module_11_thumb2.s12
-rw-r--r--arm9/modules/12/asm/module_12.s84
-rw-r--r--arm9/modules/14/asm/module_14.s16
-rw-r--r--arm9/modules/15/asm/module_15.s10
-rw-r--r--arm9/modules/16/asm/module_16.s20
-rw-r--r--arm9/modules/17/asm/module_17.s40
-rw-r--r--arm9/modules/18/asm/module_18.s66
-rw-r--r--arm9/modules/20/asm/module_20.s4
-rw-r--r--arm9/modules/22/asm/module_22.s10
-rw-r--r--arm9/modules/41/asm/module_41.s10
-rw-r--r--arm9/modules/42/asm/module_42.s4
-rw-r--r--arm9/modules/43/asm/module_43.s4
-rw-r--r--arm9/modules/51/asm/module_51.s18
-rw-r--r--arm9/modules/52/asm/module_52.s293
-rw-r--r--arm9/modules/52/include/module_52.h42
-rw-r--r--arm9/modules/52/src/module_52.c647
-rw-r--r--arm9/modules/53/asm/module_53.s10
-rw-r--r--arm9/modules/54/asm/module_54.s10
-rw-r--r--arm9/modules/55/asm/module_55.s16
-rw-r--r--arm9/modules/56/asm/module_56.s22
-rw-r--r--arm9/modules/57/asm/module_57.s12
-rw-r--r--arm9/modules/58/asm/module_58.s10
-rw-r--r--arm9/modules/59/asm/mod59_021D74E0_asm.s10
-rw-r--r--arm9/modules/59/asm/mod59_021D9868.s8
-rw-r--r--arm9/modules/59/src/mod59_021D74E0_src.c3
-rw-r--r--arm9/modules/60/asm/module_60.s12
-rw-r--r--arm9/modules/61/asm/module_61.s12
-rw-r--r--arm9/modules/62/asm/module_62.s40
-rw-r--r--arm9/modules/63/asm/mod63_021D74E0.s78
-rw-r--r--arm9/modules/63/asm/mod63_021D8890.s60
-rw-r--r--arm9/modules/63/asm/mod63_021DA640.s2
-rw-r--r--arm9/modules/63/asm/mod63_021DAE5C.s4
-rw-r--r--arm9/modules/64/asm/module_64.s12
-rw-r--r--arm9/modules/65/asm/module_65.s28
-rw-r--r--arm9/modules/66/asm/module_66.s14
-rw-r--r--arm9/modules/67/asm/module_67.s42
-rw-r--r--arm9/modules/68/asm/module_68.s12
-rw-r--r--arm9/modules/69/asm/module_69.s6
-rw-r--r--arm9/modules/70/asm/module_70.s4
-rw-r--r--arm9/modules/71/asm/module_71.s18
-rw-r--r--arm9/modules/73/asm/module_73.s36
-rw-r--r--arm9/modules/74/asm/module_74.s12
-rw-r--r--arm9/modules/75/asm/module_75.s14
-rw-r--r--arm9/modules/76/asm/module_76.s10
-rw-r--r--arm9/modules/77/asm/module_77.s26
-rw-r--r--arm9/modules/78/asm/module_78.s8
-rw-r--r--arm9/modules/80/asm/module_80.s54
-rw-r--r--arm9/modules/81/asm/module_81.s58
-rw-r--r--arm9/modules/82/asm/module_82.s26
-rw-r--r--arm9/modules/83/asm/module_83.s60
-rw-r--r--arm9/modules/84/asm/module_84_thumb1.s12
-rw-r--r--arm9/modules/84/asm/module_84_thumb2.s22
-rw-r--r--arm9/modules/85/asm/module_85.s26
-rw-r--r--arm9/modules/86/asm/module_86.s8
-rw-r--r--arm9/src/GX_layers.c110
-rw-r--r--arm9/src/error_handling.c2
-rw-r--r--arm9/src/error_message_reset.c142
-rw-r--r--arm9/src/game_init.c5
-rw-r--r--arm9/src/heap.c380
-rw-r--r--arm9/src/main.c4
-rw-r--r--arm9/src/map_header.c80
-rw-r--r--arm9/src/save_arrays.c3
-rw-r--r--arm9/src/scrcmd.c1300
-rw-r--r--arm9/src/scrcmd_11.c120
-rw-r--r--arm9/src/scrcmd_13.c111
-rw-r--r--arm9/src/scrcmd_18_c.c12
-rw-r--r--arm9/src/scrcmd_19.c86
-rw-r--r--arm9/src/scrcmd_20.c35
-rw-r--r--arm9/src/scrcmd_23.c169
-rw-r--r--arm9/src/scrcmd_25.c27
-rw-r--r--arm9/src/scrcmd_coins.c136
-rw-r--r--arm9/src/scrcmd_daycare.c192
-rw-r--r--arm9/src/scrcmd_items.c96
-rw-r--r--arm9/src/scrcmd_money.c111
-rw-r--r--arm9/src/scrcmd_names.c540
-rw-r--r--arm9/src/script.c8
-rw-r--r--arm9/src/script_buffers.c5
-rw-r--r--arm9/src/text.c88
-rw-r--r--arm9/src/timer3.c66
-rw-r--r--arm9/src/trainer_data.c5
-rw-r--r--arm9/src/unk_02015E30.c35
-rw-r--r--arm9/src/unk_02024E64.c62
-rw-r--r--arm9/src/unk_02025484.c27
-rw-r--r--arm9/src/unk_0202F150.c2478
-rw-r--r--arm9/src/unk_0204AEA8.c43
-rw-r--r--arm9/src/unk_0205FA2C.c543
-rw-r--r--arm9/src/unk_02064E4C.c2
-rw-r--r--arm9/src/unk_0206BB28.c6
-rw-r--r--arm9/temp.c0
-rw-r--r--files/poketool/icongra/poke_icon/.gitignore1
-rw-r--r--files/poketool/icongra/poke_icon/narc_0002.json12
-rw-r--r--files/poketool/icongra/poke_icon/narc_0004.NCERbin202 -> 0 bytes
-rw-r--r--files/poketool/icongra/poke_icon/narc_0004.json67
-rw-r--r--filesystem.mk1
-rw-r--r--graphics_rules.mk3
-rw-r--r--include/GX_layers.h33
-rw-r--r--include/error_message_reset.h39
-rw-r--r--include/event_data.h2
-rw-r--r--include/global.fieldmap.h27
-rw-r--r--include/global.h1
-rw-r--r--include/heap.h34
-rw-r--r--include/map.h22
-rw-r--r--include/map_header.h61
-rw-r--r--include/scrcmd.h253
-rw-r--r--include/script.h44
-rw-r--r--include/timer3.h21
-rw-r--r--include/unk_02015E30.h22
-rw-r--r--include/unk_02024E64.h28
-rw-r--r--include/unk_02025484.h18
-rw-r--r--include/unk_02029FB0.h2
-rw-r--r--include/unk_0202F150.h184
-rw-r--r--include/unk_0204AEA8.h7
-rw-r--r--include/unk_0205FA2C.h120
-rw-r--r--include/unk_0206BB28.h4
-rwxr-xr-x[-rw-r--r--]tools/asm_processor/asm_processor.py2530
-rwxr-xr-x[-rw-r--r--]tools/asm_processor/compile.sh37
-rw-r--r--tools/nitrogfx/gfx.c31
-rw-r--r--tools/nitrogfx/json.c42
-rw-r--r--tools/nitrogfx/options.h5
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
diff --git a/INSTALL.md b/INSTALL.md
index f6826063..012a24a4 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -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
deleted file mode 100644
index 10193211..00000000
--- a/files/poketool/icongra/poke_icon/narc_0004.NCER
+++ /dev/null
Binary files differ
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 {