summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_weather.s3024
-rw-r--r--asm/field_weather_effects.s5240
-rw-r--r--asm/overworld.s12
-rw-r--r--asm/pokemon_storage_system.s23034
-rw-r--r--asm/pokemon_summary_screen.s2
-rw-r--r--data/field_weather.s392
-rw-r--r--data/pokemon_storage_system.s692
-rw-r--r--data/scripts/pc.inc2
-rw-r--r--data/specials.inc2
-rw-r--r--graphics/field_effects/unk_83C2D00.pal19
-rw-r--r--graphics/field_effects/unk_83C2D20.pal19
-rw-r--r--graphics/field_effects/unk_83C3540.pngbin1031 -> 0 bytes
-rw-r--r--graphics/field_effects/unk_83C4540.pngbin179 -> 0 bytes
-rw-r--r--graphics/field_effects/unk_83C4580.pngbin190 -> 0 bytes
-rw-r--r--graphics/field_effects/unk_83C55C0.pngbin271 -> 0 bytes
-rw-r--r--graphics/interface/pss_unk_83CEA30.pal19
-rw-r--r--graphics/title_screen/unk_83BFBE4.bin (renamed from graphics/field_effects/unk_83BFBE4.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C0408.bin (renamed from graphics/field_effects/unk_83C0408.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C0C00.bin (renamed from graphics/field_effects/unk_83C0C00.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C139C.bin (renamed from graphics/field_effects/unk_83C139C.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C1BB8.bin (renamed from graphics/field_effects/unk_83C1BB8.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/title_screen/unk_83C2380.bin (renamed from graphics/field_effects/unk_83C2380.bin)bin8192 -> 8192 bytes
-rw-r--r--graphics/weather/ash.png (renamed from graphics/field_effects/unk_83C45C0.png)bin366 -> 353 bytes
-rw-r--r--graphics/weather/bubble.pngbin0 -> 177 bytes
-rw-r--r--graphics/weather/cloud.png (renamed from graphics/field_effects/unk_83C3D40.png)bin653 -> 640 bytes
-rw-r--r--graphics/weather/fog_diagonal.png (renamed from graphics/field_effects/unk_83C2D40.png)bin941 -> 928 bytes
-rw-r--r--graphics/weather/fog_horizontal.pngbin0 -> 1018 bytes
-rw-r--r--graphics/weather/rain.pngbin0 -> 258 bytes
-rw-r--r--graphics/weather/sandstorm.png (renamed from graphics/field_effects/unk_83C5BC0.png)bin603 -> 590 bytes
-rw-r--r--graphics/weather/snow0.pngbin0 -> 150 bytes
-rw-r--r--graphics/weather/snow1.pngbin0 -> 145 bytes
-rw-r--r--include/blend_palette.h1
-rw-r--r--include/box_party_pokemon_dropdown.h28
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/constants/pokemon.h1
-rw-r--r--include/constants/weather.h2
-rw-r--r--include/field_weather.h136
-rw-r--r--include/field_weather_effects.h55
-rw-r--r--include/field_weather_util.h6
-rw-r--r--include/global.h2
-rw-r--r--include/graphics.h9
-rw-r--r--include/pc_screen_effect.h8
-rw-r--r--include/pokemon.h2
-rw-r--r--include/pokemon_icon.h4
-rw-r--r--include/pokemon_storage_system.h33
-rw-r--r--include/pokemon_storage_system_internal.h516
-rw-r--r--include/sprite.h1
-rw-r--r--include/string_util.h4
-rw-r--r--include/strings.h83
-rw-r--r--include/text.h1
-rw-r--r--include/window.h6
-rw-r--r--ld_script.txt27
-rw-r--r--src/berry_pouch.c2
-rw-r--r--src/bg.c20
-rw-r--r--src/box_party_pokemon_dropdown.c180
-rw-r--r--src/credits.c4
-rw-r--r--src/field_specials.c10
-rw-r--r--src/field_weather.c1169
-rw-r--r--src/field_weather_effects.c2320
-rw-r--r--src/field_weather_util.c105
-rw-r--r--src/graphics.c4
-rw-r--r--src/hall_of_fame.c8
-rw-r--r--src/ice.c4
-rw-r--r--src/item_menu.c2
-rw-r--r--src/item_pc.c8
-rw-r--r--src/naming_screen.c2
-rw-r--r--src/pc_screen_effect.c154
-rw-r--r--src/pokemon.c4
-rw-r--r--src/pokemon_storage_system.c172
-rw-r--r--src/pokemon_storage_system_2.c653
-rw-r--r--src/pokemon_storage_system_3.c2779
-rw-r--r--src/pokemon_storage_system_4.c1489
-rw-r--r--src/pokemon_storage_system_5.c2036
-rw-r--r--src/pokemon_storage_system_6.c147
-rw-r--r--src/pokemon_storage_system_7.c582
-rw-r--r--src/pokemon_storage_system_8.c755
-rw-r--r--src/pokemon_storage_system_9.c87
-rw-r--r--src/quest_log.c8
-rw-r--r--src/string_util.c6
-rw-r--r--src/strings.c160
-rw-r--r--src/title_screen.c16
-rw-r--r--src/tm_case.c2
-rw-r--r--src/trade.c14
-rw-r--r--src/window_8bpp.c4
-rw-r--r--sym_bss.txt6
-rw-r--r--sym_ewram.txt89
86 files changed, 13533 insertions, 32852 deletions
diff --git a/asm/field_weather.s b/asm/field_weather.s
deleted file mode 100644
index c5204def2..000000000
--- a/asm/field_weather.s
+++ /dev/null
@@ -1,3024 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8079C08
-sub_8079C08: @ 8079C08
- push {r4-r6,lr}
- ldr r0, _08079CCC @ =Task_WeatherMain
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- bne _08079CC4
- movs r0, 0x90
- lsls r0, 5
- bl AllocSpritePalette
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _08079CD0 @ =gUnknown_83C2CE0
- lsls r1, r5, 5
- ldr r2, _08079CD4 @ =gPlttBufferUnfaded + 0x200
- adds r1, r2
- ldr r2, _08079CD8 @ =0x04000008
- bl CpuSet
- adds r0, r5, 0
- bl sub_8083598
- bl sub_8079EE8
- ldr r4, _08079CDC @ =gUnknown_2037F34
- ldr r1, _08079CE0 @ =0x000006d5
- adds r0, r4, r1
- strb r5, [r0]
- subs r1, 0x1
- adds r0, r4, r1
- strb r5, [r0]
- adds r1, 0x6
- adds r0, r4, r1
- strb r6, [r0]
- subs r1, 0x2
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x6
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x6
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x1C
- adds r0, r4, r1
- strb r6, [r0]
- subs r1, 0x5
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x29
- adds r0, r4, r1
- strb r6, [r0]
- subs r1, 0xE
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x1
- adds r0, r4, r1
- strb r6, [r0]
- adds r1, 0x17
- adds r0, r4, r1
- strb r6, [r0]
- subs r1, 0x34
- adds r0, r4, r1
- strb r6, [r0]
- movs r0, 0x10
- movs r1, 0
- bl Weather_SetBlendCoeffs
- movs r1, 0xDA
- lsls r1, 3
- adds r0, r4, r1
- strb r6, [r0]
- ldr r0, _08079CE4 @ =0x000006c6
- adds r1, r4, r0
- movs r0, 0x3
- strb r0, [r1]
- movs r1, 0xD9
- lsls r1, 3
- adds r0, r4, r1
- strb r6, [r0]
- ldr r0, _08079CE8 @ =0x000006d3
- adds r1, r4, r0
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, _08079CEC @ =Task_WeatherInit
- movs r1, 0x50
- bl CreateTask
- ldr r1, _08079CF0 @ =0x000006c9
- adds r4, r1
- strb r0, [r4]
-_08079CC4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08079CCC: .4byte Task_WeatherMain
-_08079CD0: .4byte gUnknown_83C2CE0
-_08079CD4: .4byte gPlttBufferUnfaded + 0x200
-_08079CD8: .4byte 0x04000008
-_08079CDC: .4byte gUnknown_2037F34
-_08079CE0: .4byte 0x000006d5
-_08079CE4: .4byte 0x000006c6
-_08079CE8: .4byte 0x000006d3
-_08079CEC: .4byte Task_WeatherInit
-_08079CF0: .4byte 0x000006c9
- thumb_func_end sub_8079C08
-
- thumb_func_start weather_set
-weather_set: @ 8079CF4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- beq _08079D0A
- cmp r4, 0x5
- beq _08079D0A
- cmp r4, 0xD
- beq _08079D0A
- bl PlayRainStoppingSoundEffect
-_08079D0A:
- ldr r1, _08079D4C @ =gUnknown_2037F34
- ldr r2, _08079D50 @ =0x000006d1
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, r4
- beq _08079D2E
- movs r3, 0xDA
- lsls r3, 3
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, r4
- bne _08079D2E
- ldr r0, _08079D54 @ =gUnknown_83C2BC0
- lsls r1, r4, 4
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
-_08079D2E:
- ldr r1, _08079D4C @ =gUnknown_2037F34
- ldr r2, _08079D58 @ =0x000006d3
- adds r0, r1, r2
- movs r2, 0
- strb r2, [r0]
- ldr r3, _08079D50 @ =0x000006d1
- adds r0, r1, r3
- strb r4, [r0]
- ldr r0, _08079D5C @ =0x000006ce
- adds r1, r0
- strh r2, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08079D4C: .4byte gUnknown_2037F34
-_08079D50: .4byte 0x000006d1
-_08079D54: .4byte gUnknown_83C2BC0
-_08079D58: .4byte 0x000006d3
-_08079D5C: .4byte 0x000006ce
- thumb_func_end weather_set
-
- thumb_func_start sub_8079D60
-sub_8079D60: @ 8079D60
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl PlayRainStoppingSoundEffect
- ldr r0, _08079D84 @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r1, r0, r2
- strb r4, [r1]
- ldr r1, _08079D88 @ =0x000006d1
- adds r0, r1
- strb r4, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08079D84: .4byte gUnknown_2037F34
-_08079D88: .4byte 0x000006d1
- thumb_func_end sub_8079D60
-
- thumb_func_start sub_8079D8C
-sub_8079D8C: @ 8079D8C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl PlayRainStoppingSoundEffect
- ldr r1, _08079DB8 @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r0, r1, r2
- strb r4, [r0]
- adds r2, 0x1
- adds r0, r1, r2
- strb r4, [r0]
- movs r0, 0xD9
- lsls r0, 3
- adds r1, r0
- movs r0, 0x1
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08079DB8: .4byte gUnknown_2037F34
- thumb_func_end sub_8079D8C
-
- thumb_func_start Task_WeatherInit
-Task_WeatherInit: @ 8079DBC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _08079DFC @ =gUnknown_2037F34
- movs r1, 0xD9
- lsls r1, 3
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08079DF4
- ldr r1, _08079E00 @ =gUnknown_83C2BC0
- movs r3, 0xDA
- lsls r3, 3
- adds r0, r2, r3
- ldrb r0, [r0]
- lsls r0, 4
- adds r1, 0x8
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- ldr r1, _08079E04 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08079E08 @ =Task_WeatherMain
- str r1, [r0]
-_08079DF4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08079DFC: .4byte gUnknown_2037F34
-_08079E00: .4byte gUnknown_83C2BC0
-_08079E04: .4byte gTasks
-_08079E08: .4byte Task_WeatherMain
- thumb_func_end Task_WeatherInit
-
- thumb_func_start Task_WeatherMain
-Task_WeatherMain: @ 8079E0C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r5, _08079E68 @ =gUnknown_2037F34
- movs r0, 0xDA
- lsls r0, 3
- adds r6, r5, r0
- ldr r1, _08079E6C @ =0x000006d1
- adds r7, r5, r1
- ldrb r0, [r6]
- ldrb r2, [r7]
- cmp r0, r2
- beq _08079E80
- ldr r0, _08079E70 @ =gUnknown_83C2BC0
- mov r8, r0
- ldrb r0, [r6]
- lsls r0, 4
- mov r1, r8
- adds r1, 0xC
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08079E90
- ldrb r0, [r7]
- lsls r0, 4
- add r0, r8
- ldr r0, [r0]
- bl _call_via_r0
- ldr r1, _08079E74 @ =0x000006c3
- adds r0, r5, r1
- strb r4, [r0]
- ldr r2, _08079E78 @ =0x000006c6
- adds r0, r5, r2
- strb r4, [r0]
- ldrb r0, [r7]
- strb r0, [r6]
- ldr r0, _08079E7C @ =0x000006d3
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
- b _08079E90
- .align 2, 0
-_08079E68: .4byte gUnknown_2037F34
-_08079E6C: .4byte 0x000006d1
-_08079E70: .4byte gUnknown_83C2BC0
-_08079E74: .4byte 0x000006c3
-_08079E78: .4byte 0x000006c6
-_08079E7C: .4byte 0x000006d3
-_08079E80:
- ldr r0, _08079EB0 @ =gUnknown_83C2BC0
- ldrb r1, [r6]
- lsls r1, 4
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
-_08079E90:
- ldr r1, _08079EB4 @ =gUnknown_83C2CB0
- ldr r0, _08079EB8 @ =gUnknown_2037F34
- ldr r2, _08079EBC @ =0x000006c6
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08079EB0: .4byte gUnknown_83C2BC0
-_08079EB4: .4byte gUnknown_83C2CB0
-_08079EB8: .4byte gUnknown_2037F34
-_08079EBC: .4byte 0x000006c6
- thumb_func_end Task_WeatherMain
-
- thumb_func_start sub_8079EC0
-sub_8079EC0: @ 8079EC0
- ldr r0, _08079ED4 @ =gUnknown_2037F34
- ldr r2, _08079ED8 @ =0x000006c1
- adds r1, r0, r2
- movs r2, 0
- strb r2, [r1]
- ldr r1, _08079EDC @ =0x000006c2
- adds r0, r1
- strb r2, [r0]
- bx lr
- .align 2, 0
-_08079ED4: .4byte gUnknown_2037F34
-_08079ED8: .4byte 0x000006c1
-_08079EDC: .4byte 0x000006c2
- thumb_func_end sub_8079EC0
-
- thumb_func_start nullsub_45
-nullsub_45: @ 8079EE0
- bx lr
- thumb_func_end nullsub_45
-
- thumb_func_start sub_8079EE4
-sub_8079EE4: @ 8079EE4
- movs r0, 0
- bx lr
- thumb_func_end sub_8079EE4
-
- thumb_func_start sub_8079EE8
-sub_8079EE8: @ 8079EE8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r1, _08079F28 @ =gUnknown_20386A4
- ldr r0, _08079F2C @ =gUnknown_83C2CC0
- str r0, [r1]
- movs r0, 0
- mov r12, r0
- ldr r1, _08079F30 @ =gUnknown_2038394
- mov r10, r1
-_08079F00:
- mov r7, r10
- mov r0, r12
- cmp r0, 0
- bne _08079F0C
- ldr r1, _08079F34 @ =0xfffffda0
- adds r7, r1
-_08079F0C:
- movs r5, 0
- movs r0, 0x1
- add r0, r12
- mov r9, r0
-_08079F14:
- lsls r1, r5, 8
- lsls r0, r5, 24
- lsrs r2, r0, 16
- mov r0, r12
- cmp r0, 0
- bne _08079F38
- adds r0, r1, 0
- lsls r0, 12
- lsrs r4, r0, 16
- b _08079F3A
- .align 2, 0
-_08079F28: .4byte gUnknown_20386A4
-_08079F2C: .4byte gUnknown_83C2CC0
-_08079F30: .4byte gUnknown_2038394
-_08079F34: .4byte 0xfffffda0
-_08079F38:
- movs r4, 0
-_08079F3A:
- movs r3, 0
- adds r1, r5, 0x1
- mov r8, r1
-_08079F40:
- subs r1, r2, r4
- lsls r1, 16
- lsrs r2, r1, 16
- lsls r0, r3, 5
- adds r0, r7
- adds r0, r5
- lsrs r1, 24
- strb r1, [r0]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x2
- bls _08079F40
- adds r6, r2, 0
- movs r0, 0xF8
- lsls r0, 5
- subs r0, r2
- cmp r0, 0
- bge _08079F68
- adds r0, 0xF
-_08079F68:
- lsls r0, 12
- lsrs r4, r0, 16
- cmp r5, 0xB
- bhi _08079FB2
- cmp r3, 0x12
- bhi _08079FD8
-_08079F74:
- adds r0, r2, r4
- lsls r0, 16
- lsrs r2, r0, 16
- subs r0, r2, r6
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0
- ble _08079F90
- lsrs r0, 31
- adds r0, r1, r0
- asrs r0, 1
- subs r0, r2, r0
- lsls r0, 16
- lsrs r2, r0, 16
-_08079F90:
- lsls r0, r3, 5
- adds r0, r7
- adds r1, r0, r5
- lsrs r0, r2, 8
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _08079FA6
- movs r0, 0x1F
- strb r0, [r1]
-_08079FA6:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x12
- bls _08079F74
- b _08079FD8
-_08079FB2:
- cmp r3, 0x12
- bhi _08079FD8
- movs r6, 0x1F
-_08079FB8:
- adds r1, r2, r4
- lsls r1, 16
- lsrs r2, r1, 16
- lsls r0, r3, 5
- adds r0, r7
- adds r0, r5
- lsrs r1, 24
- strb r1, [r0]
- cmp r1, 0x1F
- bls _08079FCE
- strb r6, [r0]
-_08079FCE:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x12
- bls _08079FB8
-_08079FD8:
- mov r1, r8
- lsls r0, r1, 16
- lsrs r5, r0, 16
- cmp r5, 0x1F
- bls _08079F14
- mov r1, r9
- lsls r0, r1, 16
- lsrs r0, 16
- mov r12, r0
- cmp r0, 0x1
- bls _08079F00
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8079EE8
-
- thumb_func_start sub_8079FFC
-sub_8079FFC: @ 8079FFC
- push {r4-r7,lr}
- ldr r0, _0807A028 @ =gUnknown_2037F34
- movs r1, 0xD8
- lsls r1, 3
- adds r4, r0, r1
- ldr r2, _0807A02C @ =0x000006c1
- adds r1, r0, r2
- ldrb r7, [r4]
- mov r12, r7
- movs r6, 0
- ldrsb r6, [r4, r6]
- movs r5, 0
- ldrsb r5, [r1, r5]
- adds r3, r0, 0
- cmp r6, r5
- bne _0807A034
- ldr r0, _0807A030 @ =0x000006c6
- adds r1, r3, r0
- movs r0, 0x3
- strb r0, [r1]
- b _0807A07C
- .align 2, 0
-_0807A028: .4byte gUnknown_2037F34
-_0807A02C: .4byte 0x000006c1
-_0807A030: .4byte 0x000006c6
-_0807A034:
- ldr r1, _0807A05C @ =0x000006c3
- adds r2, r3, r1
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- ldr r7, _0807A060 @ =0x000006c2
- adds r1, r3, r7
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bcc _0807A07C
- movs r0, 0
- strb r0, [r2]
- mov r0, r12
- cmp r6, r5
- bge _0807A064
- adds r0, 0x1
- b _0807A068
- .align 2, 0
-_0807A05C: .4byte 0x000006c3
-_0807A060: .4byte 0x000006c2
-_0807A064:
- mov r0, r12
- subs r0, 0x1
-_0807A068:
- strb r0, [r4]
- movs r1, 0xD8
- lsls r1, 3
- adds r0, r3, r1
- movs r2, 0
- ldrsb r2, [r0, r2]
- movs r0, 0
- movs r1, 0x20
- bl sub_807A294
-_0807A07C:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8079FFC
-
- thumb_func_start sub_807A084
-sub_807A084: @ 807A084
- push {lr}
- ldr r2, _0807A0BC @ =gUnknown_2037F34
- ldr r0, _0807A0C0 @ =0x000006cb
- adds r1, r2, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0807A0A2
- ldr r3, _0807A0C4 @ =0x000006ca
- adds r1, r2, r3
- movs r0, 0
- strb r0, [r1]
-_0807A0A2:
- movs r1, 0xDA
- lsls r1, 3
- adds r0, r2, r1
- ldrb r0, [r0]
- subs r0, 0x3
- cmp r0, 0xA
- bhi _0807A16C
- lsls r0, 2
- ldr r1, _0807A0C8 @ =_0807A0CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807A0BC: .4byte gUnknown_2037F34
-_0807A0C0: .4byte 0x000006cb
-_0807A0C4: .4byte 0x000006ca
-_0807A0C8: .4byte _0807A0CC
- .align 2, 0
-_0807A0CC:
- .4byte _0807A0F8
- .4byte _0807A0F8
- .4byte _0807A0F8
- .4byte _0807A144
- .4byte _0807A16C
- .4byte _0807A16C
- .4byte _0807A16C
- .4byte _0807A16C
- .4byte _0807A0F8
- .4byte _0807A120
- .4byte _0807A0F8
-_0807A0F8:
- bl sub_807A19C
- lsls r0, 24
- cmp r0, 0
- bne _0807A18C
- ldr r0, _0807A118 @ =gUnknown_2037F34
- movs r2, 0xD8
- lsls r2, 3
- adds r1, r0, r2
- movs r2, 0x3
- strb r2, [r1]
- ldr r3, _0807A11C @ =0x000006c6
- adds r0, r3
- strb r2, [r0]
- b _0807A18C
- .align 2, 0
-_0807A118: .4byte gUnknown_2037F34
-_0807A11C: .4byte 0x000006c6
-_0807A120:
- bl sub_807A1FC
- lsls r0, 24
- cmp r0, 0
- bne _0807A18C
- ldr r1, _0807A13C @ =gUnknown_2037F34
- movs r0, 0xD8
- lsls r0, 3
- adds r2, r1, r0
- movs r0, 0xFA
- strb r0, [r2]
- ldr r2, _0807A140 @ =0x000006c6
- adds r1, r2
- b _0807A188
- .align 2, 0
-_0807A13C: .4byte gUnknown_2037F34
-_0807A140: .4byte 0x000006c6
-_0807A144:
- bl sub_807A254
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- bne _0807A18C
- ldr r0, _0807A164 @ =gUnknown_2037F34
- movs r3, 0xD8
- lsls r3, 3
- adds r1, r0, r3
- strb r2, [r1]
- ldr r1, _0807A168 @ =0x000006c6
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0]
- b _0807A18C
- .align 2, 0
-_0807A164: .4byte gUnknown_2037F34
-_0807A168: .4byte 0x000006c6
-_0807A16C:
- ldr r0, _0807A190 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0807A18C
- ldr r3, _0807A194 @ =0x000006c1
- adds r0, r2, r3
- ldrb r1, [r0]
- subs r3, 0x1
- adds r0, r2, r3
- strb r1, [r0]
- ldr r0, _0807A198 @ =0x000006c6
- adds r1, r2, r0
-_0807A188:
- movs r0, 0x3
- strb r0, [r1]
-_0807A18C:
- pop {r0}
- bx r0
- .align 2, 0
-_0807A190: .4byte gPaletteFade
-_0807A194: .4byte 0x000006c1
-_0807A198: .4byte 0x000006c6
- thumb_func_end sub_807A084
-
- thumb_func_start sub_807A19C
-sub_807A19C: @ 807A19C
- push {r4,lr}
- sub sp, 0x4
- ldr r2, _0807A1D8 @ =gUnknown_2037F34
- ldr r0, _0807A1DC @ =0x000006c7
- adds r4, r2, r0
- ldrb r0, [r4]
- cmp r0, 0x10
- beq _0807A1F2
- adds r1, r0, 0x1
- strb r1, [r4]
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, 0xF
- bhi _0807A1E4
- movs r3, 0x10
- subs r3, r1
- lsls r3, 24
- lsrs r3, 24
- ldr r1, _0807A1E0 @ =0x000006c4
- adds r0, r2, r1
- ldrh r0, [r0]
- str r0, [sp]
- movs r0, 0
- movs r1, 0x20
- movs r2, 0x3
- bl sub_807A3D0
- movs r0, 0x1
- b _0807A1F4
- .align 2, 0
-_0807A1D8: .4byte gUnknown_2037F34
-_0807A1DC: .4byte 0x000006c7
-_0807A1E0: .4byte 0x000006c4
-_0807A1E4:
- movs r0, 0
- movs r1, 0x20
- movs r2, 0x3
- bl sub_807A294
- movs r0, 0x10
- strb r0, [r4]
-_0807A1F2:
- movs r0, 0
-_0807A1F4:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807A19C
-
- thumb_func_start sub_807A1FC
-sub_807A1FC: @ 807A1FC
- push {r4,lr}
- ldr r2, _0807A230 @ =gUnknown_2037F34
- ldr r0, _0807A234 @ =0x000006c7
- adds r4, r2, r0
- ldrb r0, [r4]
- cmp r0, 0x10
- beq _0807A24C
- adds r3, r0, 0x1
- strb r3, [r4]
- lsls r0, r3, 24
- lsrs r0, 24
- cmp r0, 0xF
- bhi _0807A23C
- movs r0, 0x6
- negs r0, r0
- movs r1, 0x10
- subs r1, r3
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0807A238 @ =0x000006c4
- adds r2, r3
- ldrh r2, [r2]
- bl sub_807A518
- movs r0, 0x1
- b _0807A24E
- .align 2, 0
-_0807A230: .4byte gUnknown_2037F34
-_0807A234: .4byte 0x000006c7
-_0807A238: .4byte 0x000006c4
-_0807A23C:
- movs r2, 0x6
- negs r2, r2
- movs r0, 0
- movs r1, 0x20
- bl sub_807A294
- movs r0, 0x10
- strb r0, [r4]
-_0807A24C:
- movs r0, 0
-_0807A24E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807A1FC
-
- thumb_func_start sub_807A254
-sub_807A254: @ 807A254
- push {lr}
- ldr r2, _0807A27C @ =gUnknown_2037F34
- ldr r1, _0807A280 @ =0x000006c7
- adds r0, r2, r1
- ldrb r1, [r0]
- cmp r1, 0x10
- beq _0807A288
- adds r1, 0x1
- strb r1, [r0]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0807A284 @ =0x000006c4
- adds r1, r2, r3
- ldrh r1, [r1]
- bl sub_807A5F8
- movs r0, 0x1
- b _0807A28A
- .align 2, 0
-_0807A27C: .4byte gUnknown_2037F34
-_0807A280: .4byte 0x000006c7
-_0807A284: .4byte 0x000006c4
-_0807A288:
- movs r0, 0
-_0807A28A:
- pop {r1}
- bx r1
- thumb_func_end sub_807A254
-
- thumb_func_start nullsub_46
-nullsub_46: @ 807A290
- bx lr
- thumb_func_end nullsub_46
-
- thumb_func_start sub_807A294
-sub_807A294: @ 807A294
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r3, r0, 24
- adds r4, r3, 0
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- lsls r2, 24
- asrs r0, r2, 24
- cmp r0, 0
- ble _0807A3A0
- subs r0, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r6, r3, 4
- adds r0, r1, r3
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r4, r9
- bcs _0807A3B6
- lsls r0, r2, 24
- asrs r0, 19
- str r0, [sp]
-_0807A2CE:
- ldr r0, _0807A300 @ =gUnknown_20386A4
- ldr r0, [r0]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807A30C
- lsls r1, r6, 1
- ldr r0, _0807A304 @ =gPlttBufferUnfaded
- adds r0, r1, r0
- ldr r2, _0807A308 @ =gPlttBufferFaded
- adds r1, r2
- movs r2, 0x8
- bl CpuFastSet
- adds r0, r6, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r6, r0, 16
- mov r0, r9
- lsls r0, 16
- mov r8, r0
- adds r4, 0x1
- mov r12, r4
- b _0807A38A
- .align 2, 0
-_0807A300: .4byte gUnknown_20386A4
-_0807A304: .4byte gPlttBufferUnfaded
-_0807A308: .4byte gPlttBufferFaded
-_0807A30C:
- cmp r0, 0x2
- beq _0807A320
- adds r1, r4, 0
- subs r1, 0x10
- ldr r2, _0807A324 @ =gUnknown_2037F34
- ldr r3, _0807A328 @ =0x000006d5
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r1, r0
- bne _0807A330
-_0807A320:
- ldr r0, _0807A32C @ =gUnknown_2038394
- b _0807A336
- .align 2, 0
-_0807A324: .4byte gUnknown_2037F34
-_0807A328: .4byte 0x000006d5
-_0807A32C: .4byte gUnknown_2038394
-_0807A330:
- movs r3, 0x80
- lsls r3, 2
- adds r0, r2, r3
-_0807A336:
- ldr r1, [sp]
- adds r5, r1, r0
- movs r7, 0
- mov r3, r9
- lsls r3, 16
- mov r8, r3
- adds r4, 0x1
- mov r12, r4
- ldr r0, _0807A398 @ =gPlttBufferFaded
- mov r10, r0
-_0807A34A:
- adds r2, r6, 0
- lsls r0, r2, 1
- ldr r1, _0807A39C @ =gPlttBufferUnfaded
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r1, 27
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r4, [r0]
- lsls r0, r1, 22
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r3, [r0]
- lsls r1, 17
- lsrs r1, 27
- adds r1, r5, r1
- ldrb r1, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r2, 1
- add r2, r10
- lsls r1, 10
- lsls r3, 5
- orrs r1, r3
- orrs r1, r4
- strh r1, [r2]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0xF
- bls _0807A34A
-_0807A38A:
- mov r3, r12
- lsls r0, r3, 16
- lsrs r4, r0, 16
- cmp r0, r8
- bcc _0807A2CE
- b _0807A3B6
- .align 2, 0
-_0807A398: .4byte gPlttBufferFaded
-_0807A39C: .4byte gPlttBufferUnfaded
-_0807A3A0:
- cmp r0, 0
- blt _0807A3B6
- lsls r1, r4, 5
- ldr r0, _0807A3C8 @ =gPlttBufferUnfaded
- adds r0, r1, r0
- ldr r2, _0807A3CC @ =gPlttBufferFaded
- adds r1, r2
- mov r3, r9
- lsls r2, r3, 3
- bl CpuFastSet
-_0807A3B6:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A3C8: .4byte gPlttBufferUnfaded
-_0807A3CC: .4byte gPlttBufferFaded
- thumb_func_end sub_807A294
-
- thumb_func_start sub_807A3D0
-sub_807A3D0: @ 807A3D0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r4, [sp, 0x34]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- mov r1, sp
- strh r4, [r1]
- ldr r1, [sp]
- lsls r3, r1, 27
- lsrs r3, 27
- str r3, [sp, 0x4]
- lsls r3, r1, 22
- lsrs r3, 27
- str r3, [sp, 0x8]
- lsls r1, 17
- lsrs r1, 27
- str r1, [sp, 0xC]
- lsls r6, r0, 4
- mov r3, r10
- adds r1, r3, r0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r2, r1
- lsrs r2, 24
- adds r4, r0, 0
- cmp r4, r10
- bcs _0807A4FC
- lsls r0, r2, 24
- asrs r0, 19
- str r0, [sp, 0x10]
-_0807A428:
- ldr r0, _0807A458 @ =gUnknown_20386A4
- ldr r0, [r0]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807A45C
- mov r0, sp
- ldrh r3, [r0]
- adds r0, r6, 0
- movs r1, 0x10
- mov r2, r8
- bl BlendPalette
- adds r0, r6, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r6, r0, 16
- mov r3, r10
- lsls r3, 16
- mov r9, r3
- adds r4, 0x1
- mov r12, r4
- b _0807A4F2
- .align 2, 0
-_0807A458: .4byte gUnknown_20386A4
-_0807A45C:
- cmp r0, 0x1
- bne _0807A46C
- ldr r0, _0807A468 @ =gUnknown_2038134
- ldr r1, [sp, 0x10]
- adds r5, r1, r0
- b _0807A472
- .align 2, 0
-_0807A468: .4byte gUnknown_2038134
-_0807A46C:
- ldr r0, _0807A50C @ =gUnknown_2038394
- ldr r3, [sp, 0x10]
- adds r5, r3, r0
-_0807A472:
- movs r7, 0
- mov r0, r10
- lsls r0, 16
- mov r9, r0
- adds r4, 0x1
- mov r12, r4
-_0807A47E:
- adds r4, r6, 0
- lsls r0, r4, 1
- ldr r1, _0807A510 @ =gPlttBufferUnfaded
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r1, 27
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r3, [r0]
- lsls r0, r1, 22
- lsrs r0, 27
- adds r0, r5, r0
- ldrb r2, [r0]
- lsls r1, 17
- lsrs r1, 27
- adds r1, r5, r1
- ldrb r1, [r1]
- ldr r6, [sp, 0x4]
- subs r0, r6, r3
- mov r6, r8
- muls r6, r0
- adds r0, r6, 0
- asrs r0, 4
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- ldr r6, [sp, 0x8]
- subs r0, r6, r2
- mov r6, r8
- muls r6, r0
- adds r0, r6, 0
- asrs r0, 4
- adds r2, r0
- lsls r2, 24
- ldr r6, [sp, 0xC]
- subs r0, r6, r1
- mov r6, r8
- muls r6, r0
- adds r0, r6, 0
- asrs r0, 4
- adds r1, r0
- lsls r1, 24
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r4, 1
- ldr r0, _0807A514 @ =gPlttBufferFaded
- adds r4, r0
- lsrs r1, 14
- lsrs r2, 19
- orrs r1, r2
- orrs r1, r3
- strh r1, [r4]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0xF
- bls _0807A47E
-_0807A4F2:
- mov r1, r12
- lsls r0, r1, 16
- lsrs r4, r0, 16
- cmp r0, r9
- bcc _0807A428
-_0807A4FC:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A50C: .4byte gUnknown_2038394
-_0807A510: .4byte gPlttBufferUnfaded
-_0807A514: .4byte gPlttBufferFaded
- thumb_func_end sub_807A3D0
-
- thumb_func_start sub_807A518
-sub_807A518: @ 807A518
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r1, 24
- lsrs r6, r1, 24
- mov r0, sp
- strh r2, [r0]
- ldr r0, [sp]
- lsls r1, r0, 27
- lsrs r1, 27
- str r1, [sp, 0x4]
- lsls r1, r0, 22
- lsrs r1, 27
- mov r10, r1
- lsls r0, 17
- lsrs r0, 27
- mov r8, r0
- movs r5, 0
- movs r4, 0
-_0807A544:
- ldr r0, _0807A56C @ =gUnknown_20386A4
- ldr r0, [r0]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807A570
- mov r0, sp
- ldrh r3, [r0]
- adds r0, r5, 0
- movs r1, 0x10
- adds r2, r6, 0
- bl BlendPalette
- adds r0, r5, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, 0x1
- mov r12, r4
- b _0807A5D4
- .align 2, 0
-_0807A56C: .4byte gUnknown_20386A4
-_0807A570:
- movs r7, 0
- adds r4, 0x1
- mov r12, r4
- ldr r0, _0807A5F0 @ =gPlttBufferFaded
- mov r9, r0
-_0807A57A:
- adds r4, r5, 0
- lsls r0, r4, 1
- ldr r1, _0807A5F4 @ =gPlttBufferUnfaded
- adds r0, r1
- ldr r1, [r0]
- lsls r3, r1, 27
- lsrs r3, 27
- lsls r2, r1, 22
- lsrs r2, 27
- lsls r1, 17
- lsrs r1, 27
- ldr r5, [sp, 0x4]
- subs r0, r5, r3
- muls r0, r6
- asrs r0, 4
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- mov r5, r10
- subs r0, r5, r2
- muls r0, r6
- asrs r0, 4
- adds r2, r0
- lsls r2, 24
- mov r5, r8
- subs r0, r5, r1
- muls r0, r6
- asrs r0, 4
- adds r1, r0
- lsls r1, 24
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r4, 1
- add r4, r9
- lsrs r1, 14
- lsrs r2, 19
- orrs r1, r2
- orrs r1, r3
- strh r1, [r4]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0xF
- bls _0807A57A
-_0807A5D4:
- mov r1, r12
- lsls r0, r1, 16
- lsrs r4, r0, 16
- cmp r4, 0x1F
- bls _0807A544
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A5F0: .4byte gPlttBufferFaded
-_0807A5F4: .4byte gPlttBufferUnfaded
- thumb_func_end sub_807A518
-
- thumb_func_start sub_807A5F8
-sub_807A5F8: @ 807A5F8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- adds r3, r1, 0
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r3, 16
- lsrs r3, 16
- mov r0, sp
- strh r3, [r0]
- movs r1, 0x80
- lsls r1, 1
- movs r0, 0
- adds r2, r7, 0
- bl BlendPalette
- ldr r0, [sp]
- lsls r1, r0, 27
- lsrs r1, 27
- str r1, [sp, 0x4]
- lsls r1, r0, 22
- lsrs r1, 27
- str r1, [sp, 0x8]
- lsls r0, 17
- lsrs r0, 27
- mov r10, r0
- movs r4, 0x10
-_0807A634:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_807A748
- lsls r0, 24
- cmp r0, 0
- beq _0807A6E4
- adds r0, r4, 0x1
- lsls r1, r0, 20
- lsrs r1, 16
- mov r12, r1
- lsls r1, r4, 20
- lsrs r6, r1, 16
- mov r9, r0
- cmp r6, r12
- bcs _0807A6F8
- movs r0, 0x1C
- mov r8, r0
-_0807A658:
- lsls r5, r6, 1
- ldr r0, _0807A6DC @ =gPlttBufferUnfaded
- adds r0, r5, r0
- ldr r2, [r0]
- lsls r4, r2, 27
- lsrs r4, 27
- lsls r3, r2, 22
- lsrs r3, 27
- lsls r2, 17
- lsrs r2, 27
- mov r0, r8
- subs r1, r0, r4
- lsls r0, r1, 1
- adds r0, r1
- asrs r0, 2
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- movs r1, 0x1F
- subs r1, r3
- lsls r0, r1, 1
- adds r0, r1
- asrs r0, 2
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- mov r0, r8
- subs r1, r0, r2
- lsls r0, r1, 1
- adds r0, r1
- asrs r0, 2
- adds r2, r0
- lsls r2, 24
- lsrs r2, 24
- ldr r1, [sp, 0x4]
- subs r0, r1, r4
- muls r0, r7
- asrs r0, 4
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, [sp, 0x8]
- subs r0, r1, r3
- muls r0, r7
- asrs r0, 4
- adds r3, r0
- lsls r3, 24
- mov r1, r10
- subs r0, r1, r2
- muls r0, r7
- asrs r0, 4
- adds r2, r0
- lsls r2, 24
- ldr r0, _0807A6E0 @ =gPlttBufferFaded
- adds r5, r0
- lsrs r2, 14
- lsrs r3, 19
- orrs r2, r3
- orrs r2, r4
- strh r2, [r5]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, r12
- bcc _0807A658
- b _0807A6F8
- .align 2, 0
-_0807A6DC: .4byte gPlttBufferUnfaded
-_0807A6E0: .4byte gPlttBufferFaded
-_0807A6E4:
- lsls r0, r4, 20
- lsrs r0, 16
- mov r1, sp
- ldrh r3, [r1]
- movs r1, 0x10
- adds r2, r7, 0
- bl BlendPalette
- adds r4, 0x1
- mov r9, r4
-_0807A6F8:
- mov r1, r9
- lsls r0, r1, 16
- lsrs r4, r0, 16
- cmp r4, 0x1F
- bls _0807A634
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_807A5F8
-
- thumb_func_start sub_807A714
-sub_807A714: @ 807A714
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r3, _0807A73C @ =gUnknown_2037F34
- ldr r0, _0807A740 @ =0x000006fa
- adds r1, r3, r0
- ldrb r0, [r1]
- cmp r0, 0x5
- bhi _0807A736
- ldr r4, _0807A744 @ =0x000006f4
- adds r0, r3, r4
- ldrb r3, [r1]
- adds r0, r3
- strb r2, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0807A736:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A73C: .4byte gUnknown_2037F34
-_0807A740: .4byte 0x000006fa
-_0807A744: .4byte 0x000006f4
- thumb_func_end sub_807A714
-
- thumb_func_start sub_807A748
-sub_807A748: @ 807A748
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r1, 0
- ldr r2, _0807A770 @ =gUnknown_2037F34
- ldr r4, _0807A774 @ =0x000006fa
- adds r0, r2, r4
- ldrb r0, [r0]
- cmp r1, r0
- bcs _0807A786
- ldr r5, _0807A778 @ =0x000006f4
- adds r4, r2, r5
- adds r2, r0, 0
-_0807A762:
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r3
- bne _0807A77C
- movs r0, 0x1
- b _0807A788
- .align 2, 0
-_0807A770: .4byte gUnknown_2037F34
-_0807A774: .4byte 0x000006fa
-_0807A778: .4byte 0x000006f4
-_0807A77C:
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r2
- bcc _0807A762
-_0807A786:
- movs r0, 0
-_0807A788:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_807A748
-
- thumb_func_start sub_807A790
-sub_807A790: @ 807A790
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, _0807A7BC @ =gUnknown_2037F34
- ldr r1, _0807A7C0 @ =0x000006c6
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _0807A7B6
- lsls r2, r4, 24
- asrs r2, 24
- movs r0, 0
- movs r1, 0x20
- bl sub_807A294
- movs r1, 0xD8
- lsls r1, 3
- adds r0, r5, r1
- strb r4, [r0]
-_0807A7B6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A7BC: .4byte gUnknown_2037F34
-_0807A7C0: .4byte 0x000006c6
- thumb_func_end sub_807A790
-
- thumb_func_start sub_807A7C4
-sub_807A7C4: @ 807A7C4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r3, _0807A80C @ =gUnknown_2037F34
- ldr r0, _0807A810 @ =0x000006c6
- adds r2, r3, r0
- ldrb r0, [r2]
- cmp r0, 0x3
- bne _0807A804
- movs r1, 0
- strb r1, [r2]
- movs r2, 0xD8
- lsls r2, 3
- adds r0, r3, r2
- strb r4, [r0]
- adds r2, 0x1
- adds r0, r3, r2
- strb r5, [r0]
- adds r2, 0x2
- adds r0, r3, r2
- strb r1, [r0]
- ldr r1, _0807A814 @ =0x000006c2
- adds r0, r3, r1
- strb r6, [r0]
- lsls r0, r4, 24
- asrs r0, 24
- bl sub_807A790
-_0807A804:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A80C: .4byte gUnknown_2037F34
-_0807A810: .4byte 0x000006c6
-_0807A814: .4byte 0x000006c2
- thumb_func_end sub_807A7C4
-
- thumb_func_start FadeScreen
-FadeScreen: @ 807A818
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r0, 0x1
- beq _0807A850
- cmp r0, 0x1
- bgt _0807A834
- cmp r0, 0
- beq _0807A83E
- b _0807A92C
-_0807A834:
- cmp r2, 0x2
- beq _0807A844
- cmp r2, 0x3
- beq _0807A854
- b _0807A92C
-_0807A83E:
- movs r4, 0
- movs r1, 0
- b _0807A858
-_0807A844:
- ldr r4, _0807A84C @ =0x0000ffff
- movs r1, 0
- b _0807A858
- .align 2, 0
-_0807A84C: .4byte 0x0000ffff
-_0807A850:
- movs r4, 0
- b _0807A856
-_0807A854:
- ldr r4, _0807A878 @ =0x0000ffff
-_0807A856:
- movs r1, 0x1
-_0807A858:
- ldr r0, _0807A87C @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x3
- blt _0807A880
- cmp r0, 0x6
- ble _0807A872
- cmp r0, 0xD
- bgt _0807A880
- cmp r0, 0xB
- blt _0807A880
-_0807A872:
- movs r2, 0x1
- b _0807A882
- .align 2, 0
-_0807A878: .4byte 0x0000ffff
-_0807A87C: .4byte gUnknown_2037F34
-_0807A880:
- movs r2, 0
-_0807A882:
- cmp r1, 0
- beq _0807A8C4
- cmp r2, 0
- beq _0807A896
- ldr r0, _0807A8B4 @ =gPlttBufferFaded
- ldr r1, _0807A8B8 @ =gPlttBufferUnfaded
- movs r2, 0x80
- lsls r2, 1
- bl CpuFastSet
-_0807A896:
- movs r0, 0x1
- negs r0, r0
- lsls r1, r5, 24
- asrs r1, 24
- str r4, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _0807A8BC @ =gUnknown_2037F34
- ldr r3, _0807A8C0 @ =0x000006c6
- adds r0, r3
- movs r1, 0x2
- strb r1, [r0]
- b _0807A92C
- .align 2, 0
-_0807A8B4: .4byte gPlttBufferFaded
-_0807A8B8: .4byte gPlttBufferUnfaded
-_0807A8BC: .4byte gUnknown_2037F34
-_0807A8C0: .4byte 0x000006c6
-_0807A8C4:
- ldr r1, _0807A8DC @ =gUnknown_2037F34
- ldr r3, _0807A8E0 @ =0x000006c4
- adds r0, r1, r3
- strh r4, [r0]
- cmp r2, 0
- beq _0807A8E8
- ldr r0, _0807A8E4 @ =0x000006c7
- adds r1, r0
- movs r0, 0
- strb r0, [r1]
- b _0807A8FA
- .align 2, 0
-_0807A8DC: .4byte gUnknown_2037F34
-_0807A8E0: .4byte 0x000006c4
-_0807A8E4: .4byte 0x000006c7
-_0807A8E8:
- movs r0, 0x1
- negs r0, r0
- lsls r1, r5, 24
- asrs r1, 24
- str r4, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_0807A8FA:
- ldr r4, _0807A934 @ =gUnknown_2037F34
- ldr r1, _0807A938 @ =0x000006c6
- adds r0, r4, r1
- movs r1, 0
- movs r5, 0x1
- strb r5, [r0]
- ldr r2, _0807A93C @ =0x000006ca
- adds r0, r4, r2
- strb r5, [r0]
- ldr r3, _0807A940 @ =0x000006cb
- adds r0, r4, r3
- strb r1, [r0]
- movs r1, 0xE6
- lsls r1, 3
- adds r0, r4, r1
- ldrb r0, [r0]
- adds r2, 0x68
- adds r1, r4, r2
- ldrb r1, [r1]
- bl Weather_SetBlendCoeffs
- movs r3, 0xD9
- lsls r3, 3
- adds r4, r3
- strb r5, [r4]
-_0807A92C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807A934: .4byte gUnknown_2037F34
-_0807A938: .4byte 0x000006c6
-_0807A93C: .4byte 0x000006ca
-_0807A940: .4byte 0x000006cb
- thumb_func_end FadeScreen
-
- thumb_func_start FieldWeather_StartFadingOutCreditsMap
-FieldWeather_StartFadingOutCreditsMap: @ 807A944
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r2, 0
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r0, 0x1
- beq _0807A97C
- cmp r0, 0x1
- bgt _0807A962
- cmp r0, 0
- beq _0807A96C
- b _0807AA56
-_0807A962:
- cmp r2, 0x2
- beq _0807A972
- cmp r2, 0x3
- beq _0807A980
- b _0807AA56
-_0807A96C:
- movs r4, 0
- movs r1, 0
- b _0807A984
-_0807A972:
- ldr r4, _0807A978 @ =0x0000ffff
- movs r1, 0
- b _0807A984
- .align 2, 0
-_0807A978: .4byte 0x0000ffff
-_0807A97C:
- movs r4, 0
- b _0807A982
-_0807A980:
- ldr r4, _0807A9A4 @ =0x0000ffff
-_0807A982:
- movs r1, 0x1
-_0807A984:
- ldr r0, _0807A9A8 @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x3
- blt _0807A9AC
- cmp r0, 0x6
- ble _0807A99E
- cmp r0, 0xD
- bgt _0807A9AC
- cmp r0, 0xB
- blt _0807A9AC
-_0807A99E:
- movs r2, 0x1
- b _0807A9AE
- .align 2, 0
-_0807A9A4: .4byte 0x0000ffff
-_0807A9A8: .4byte gUnknown_2037F34
-_0807A9AC:
- movs r2, 0
-_0807A9AE:
- cmp r1, 0
- beq _0807A9F0
- cmp r2, 0
- beq _0807A9C2
- ldr r0, _0807A9E0 @ =gPlttBufferFaded
- ldr r1, _0807A9E4 @ =gPlttBufferUnfaded
- movs r2, 0x80
- lsls r2, 1
- bl CpuFastSet
-_0807A9C2:
- lsls r1, r5, 24
- asrs r1, 24
- str r4, [sp]
- adds r0, r6, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _0807A9E8 @ =gUnknown_2037F34
- ldr r3, _0807A9EC @ =0x000006c6
- adds r0, r3
- movs r1, 0x2
- strb r1, [r0]
- b _0807AA56
- .align 2, 0
-_0807A9E0: .4byte gPlttBufferFaded
-_0807A9E4: .4byte gPlttBufferUnfaded
-_0807A9E8: .4byte gUnknown_2037F34
-_0807A9EC: .4byte 0x000006c6
-_0807A9F0:
- ldr r1, _0807AA08 @ =gUnknown_2037F34
- ldr r3, _0807AA0C @ =0x000006c4
- adds r0, r1, r3
- strh r4, [r0]
- cmp r2, 0
- beq _0807AA14
- ldr r0, _0807AA10 @ =0x000006c7
- adds r1, r0
- movs r0, 0
- strb r0, [r1]
- b _0807AA24
- .align 2, 0
-_0807AA08: .4byte gUnknown_2037F34
-_0807AA0C: .4byte 0x000006c4
-_0807AA10: .4byte 0x000006c7
-_0807AA14:
- lsls r1, r5, 24
- asrs r1, 24
- str r4, [sp]
- adds r0, r6, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_0807AA24:
- ldr r4, _0807AA60 @ =gUnknown_2037F34
- ldr r1, _0807AA64 @ =0x000006c6
- adds r0, r4, r1
- movs r1, 0
- movs r5, 0x1
- strb r5, [r0]
- ldr r2, _0807AA68 @ =0x000006ca
- adds r0, r4, r2
- strb r5, [r0]
- ldr r3, _0807AA6C @ =0x000006cb
- adds r0, r4, r3
- strb r1, [r0]
- movs r1, 0xE6
- lsls r1, 3
- adds r0, r4, r1
- ldrb r0, [r0]
- adds r2, 0x68
- adds r1, r4, r2
- ldrb r1, [r1]
- bl Weather_SetBlendCoeffs
- movs r3, 0xD9
- lsls r3, 3
- adds r4, r3
- strb r5, [r4]
-_0807AA56:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807AA60: .4byte gUnknown_2037F34
-_0807AA64: .4byte 0x000006c6
-_0807AA68: .4byte 0x000006ca
-_0807AA6C: .4byte 0x000006cb
- thumb_func_end FieldWeather_StartFadingOutCreditsMap
-
- thumb_func_start IsWeatherNotFadingIn
-IsWeatherNotFadingIn: @ 807AA70
- ldr r0, _0807AA84 @ =gUnknown_2037F34
- ldr r1, _0807AA88 @ =0x000006c6
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x1
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- bx lr
- .align 2, 0
-_0807AA84: .4byte gUnknown_2037F34
-_0807AA88: .4byte 0x000006c6
- thumb_func_end IsWeatherNotFadingIn
-
- thumb_func_start UpdateSpritePaletteWithWeather
-UpdateSpritePaletteWithWeather: @ 807AA8C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 8
- movs r1, 0x80
- lsls r1, 13
- adds r0, r1
- lsrs r4, r0, 16
- ldr r5, _0807AACC @ =gUnknown_2037F34
- ldr r2, _0807AAD0 @ =0x000006c6
- adds r0, r5, r2
- ldrb r0, [r0]
- adds r1, r5, 0
- cmp r0, 0x1
- beq _0807AAD4
- cmp r0, 0x2
- beq _0807AB20
- adds r2, 0xA
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x6
- beq _0807AB58
- lsls r0, r4, 24
- lsrs r0, 24
- subs r2, 0x10
- adds r1, r2
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r1, 0x1
- bl sub_807A294
- b _0807AB68
- .align 2, 0
-_0807AACC: .4byte gUnknown_2037F34
-_0807AAD0: .4byte 0x000006c6
-_0807AAD4:
- ldr r2, _0807AB14 @ =0x000006ca
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807AB68
- adds r2, 0x6
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _0807AAF0
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_807A714
-_0807AAF0:
- lsls r0, r4, 20
- lsrs r4, r0, 16
- movs r2, 0
- ldr r6, _0807AB18 @ =gPlttBufferFaded
- ldr r0, _0807AB1C @ =0x000006c4
- adds r3, r5, r0
-_0807AAFC:
- adds r0, r4, r2
- lsls r0, 1
- adds r0, r6
- ldrh r1, [r3]
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0xF
- bls _0807AAFC
- b _0807AB68
- .align 2, 0
-_0807AB14: .4byte 0x000006ca
-_0807AB18: .4byte gPlttBufferFaded
-_0807AB1C: .4byte 0x000006c4
-_0807AB20:
- lsls r0, r4, 20
- lsrs r4, r0, 16
- lsls r1, r4, 1
- ldr r0, _0807AB4C @ =gPlttBufferFaded
- adds r0, r1, r0
- ldr r2, _0807AB50 @ =gPlttBufferUnfaded
- adds r1, r2
- movs r2, 0x8
- bl CpuFastSet
- ldr r0, _0807AB54 @ =gPaletteFade
- ldrh r2, [r0, 0x4]
- lsls r2, 21
- lsrs r2, 27
- ldrh r3, [r0, 0x6]
- lsls r3, 17
- lsrs r3, 17
- adds r0, r4, 0
- movs r1, 0x10
- bl BlendPalette
- b _0807AB68
- .align 2, 0
-_0807AB4C: .4byte gPlttBufferFaded
-_0807AB50: .4byte gPlttBufferUnfaded
-_0807AB54: .4byte gPaletteFade
-_0807AB58:
- lsls r0, r4, 20
- lsrs r4, r0, 16
- ldr r3, _0807AB70 @ =0x000073fc
- adds r0, r4, 0
- movs r1, 0x10
- movs r2, 0xC
- bl BlendPalette
-_0807AB68:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807AB70: .4byte 0x000073fc
- thumb_func_end UpdateSpritePaletteWithWeather
-
- thumb_func_start sub_807AB74
-sub_807AB74: @ 807AB74
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0807AB90 @ =gUnknown_2037F34
- movs r2, 0xD8
- lsls r2, 3
- adds r1, r2
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r1, 0x1
- bl sub_807A294
- pop {r0}
- bx r0
- .align 2, 0
-_0807AB90: .4byte gUnknown_2037F34
- thumb_func_end sub_807AB74
-
- thumb_func_start sub_807AB94
-sub_807AB94: @ 807AB94
- push {lr}
- ldr r1, _0807ABA8 @ =gUnknown_2037F34
- ldr r2, _0807ABAC @ =0x000006c6
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0807ABB0
- movs r0, 0
- b _0807ABB6
- .align 2, 0
-_0807ABA8: .4byte gUnknown_2037F34
-_0807ABAC: .4byte 0x000006c6
-_0807ABB0:
- ldr r2, _0807ABBC @ =0x000006ca
- adds r0, r1, r2
- ldrb r0, [r0]
-_0807ABB6:
- pop {r1}
- bx r1
- .align 2, 0
-_0807ABBC: .4byte 0x000006ca
- thumb_func_end sub_807AB94
-
- thumb_func_start sub_807ABC0
-sub_807ABC0: @ 807ABC0
- push {r4,lr}
- ldr r4, _0807ABE8 @ =gUnknown_2037F34
- ldr r1, _0807ABEC @ =0x000006d4
- adds r4, r1
- ldrb r1, [r4]
- lsls r1, 20
- movs r2, 0x80
- lsls r2, 17
- adds r1, r2
- lsrs r1, 16
- movs r2, 0x20
- bl LoadPalette
- ldrb r0, [r4]
- bl UpdateSpritePaletteWithWeather
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807ABE8: .4byte gUnknown_2037F34
-_0807ABEC: .4byte 0x000006d4
- thumb_func_end sub_807ABC0
-
- thumb_func_start nullsub_47
-nullsub_47: @ 807ABF0
- bx lr
- thumb_func_end nullsub_47
-
- thumb_func_start sub_807ABF4
-sub_807ABF4: @ 807ABF4
- ldr r0, _0807AC08 @ =gUnknown_2037F34
- ldr r2, _0807AC0C @ =0x0000074d
- adds r1, r0, r2
- movs r2, 0x1
- strb r2, [r1]
- ldr r1, _0807AC10 @ =0x0000074e
- adds r0, r1
- strb r2, [r0]
- bx lr
- .align 2, 0
-_0807AC08: .4byte gUnknown_2037F34
-_0807AC0C: .4byte 0x0000074d
-_0807AC10: .4byte 0x0000074e
- thumb_func_end sub_807ABF4
-
- thumb_func_start sub_807AC14
-sub_807AC14: @ 807AC14
- push {r4,lr}
- ldr r1, _0807AC3C @ =gUnknown_2037F34
- ldr r0, _0807AC40 @ =0x0000074d
- adds r4, r1, r0
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x1F
- bgt _0807AC48
- ldr r0, _0807AC44 @ =0x0000074e
- adds r1, r0
- adds r0, r4, 0
- bl nullsub_47
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x1F
- bgt _0807AC48
- movs r0, 0x1
- b _0807AC4A
- .align 2, 0
-_0807AC3C: .4byte gUnknown_2037F34
-_0807AC40: .4byte 0x0000074d
-_0807AC44: .4byte 0x0000074e
-_0807AC48:
- movs r0, 0
-_0807AC4A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_807AC14
-
- thumb_func_start sub_807AC50
-sub_807AC50: @ 807AC50
- push {lr}
- lsls r0, 24
- asrs r0, 24
- mvns r0, r0
- bl sub_807A790
- pop {r0}
- bx r0
- thumb_func_end sub_807AC50
-
- thumb_func_start sub_807AC60
-sub_807AC60: @ 807AC60
- ldr r1, _0807AC88 @ =gUnknown_2037F34
- ldr r2, _0807AC8C @ =0x0000073c
- adds r0, r1, r2
- movs r2, 0
- strh r2, [r0]
- movs r3, 0xE8
- lsls r3, 3
- adds r0, r1, r3
- strh r2, [r0]
- adds r3, 0x2
- adds r0, r1, r3
- strh r2, [r0]
- ldr r0, _0807AC90 @ =0x0000073e
- adds r1, r0
- strh r2, [r1]
- ldr r1, _0807AC94 @ =gUnknown_20386A8
- movs r0, 0x5
- strh r0, [r1]
- bx lr
- .align 2, 0
-_0807AC88: .4byte gUnknown_2037F34
-_0807AC8C: .4byte 0x0000073c
-_0807AC90: .4byte 0x0000073e
-_0807AC94: .4byte gUnknown_20386A8
- thumb_func_end sub_807AC60
-
- thumb_func_start sub_807AC98
-sub_807AC98: @ 807AC98
- push {r4-r7,lr}
- ldr r5, _0807ACB4 @ =gUnknown_2037F34
- ldr r0, _0807ACB8 @ =0x00000742
- adds r7, r5, r0
- movs r1, 0
- ldrsh r2, [r7, r1]
- cmp r2, 0x1
- beq _0807AD14
- cmp r2, 0x1
- bgt _0807ACBC
- cmp r2, 0
- beq _0807ACC2
- b _0807ADA0
- .align 2, 0
-_0807ACB4: .4byte gUnknown_2037F34
-_0807ACB8: .4byte 0x00000742
-_0807ACBC:
- cmp r2, 0x2
- beq _0807AD68
- b _0807ADA0
-_0807ACC2:
- movs r3, 0xE8
- lsls r3, 3
- adds r6, r5, r3
- ldrh r0, [r6]
- adds r0, 0x1
- strh r0, [r6]
- lsls r0, 16
- asrs r0, 16
- ldr r1, _0807AD08 @ =gUnknown_20386A8
- ldrh r1, [r1]
- cmp r0, r1
- ble _0807ADA0
- strh r2, [r6]
- ldr r0, _0807AD0C @ =0x0000073c
- adds r4, r5, r0
- ldrh r0, [r4]
- adds r1, r0, 0x1
- strh r1, [r4]
- lsls r0, 24
- asrs r0, 24
- bl sub_807AC50
- ldrh r1, [r4]
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0x5
- ble _0807ADA0
- ldr r3, _0807AD10 @ =0x0000073e
- adds r0, r5, r3
- strh r1, [r0]
- movs r0, 0x1
- strh r0, [r7]
- movs r0, 0x3C
- strh r0, [r6]
- b _0807ADA0
- .align 2, 0
-_0807AD08: .4byte gUnknown_20386A8
-_0807AD0C: .4byte 0x0000073c
-_0807AD10: .4byte 0x0000073e
-_0807AD14:
- movs r0, 0xE8
- lsls r0, 3
- adds r2, r5, r0
- ldrh r0, [r2]
- adds r0, 0x3
- movs r1, 0x7F
- ands r0, r1
- strh r0, [r2]
- ldr r1, _0807AD5C @ =gSineTable
- movs r3, 0
- ldrsh r0, [r2, r3]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- subs r0, 0x1
- asrs r0, 6
- adds r0, 0x2
- ldr r2, _0807AD60 @ =0x0000073c
- adds r6, r5, r2
- adds r2, r0, 0
- strh r0, [r6]
- ldr r3, _0807AD64 @ =0x0000073e
- adds r4, r5, r3
- movs r3, 0
- ldrsh r1, [r4, r3]
- cmp r0, r1
- beq _0807AD54
- lsls r0, r2, 24
- asrs r0, 24
- bl sub_807AC50
-_0807AD54:
- ldrh r0, [r6]
- strh r0, [r4]
- b _0807ADA0
- .align 2, 0
-_0807AD5C: .4byte gSineTable
-_0807AD60: .4byte 0x0000073c
-_0807AD64: .4byte 0x0000073e
-_0807AD68:
- movs r0, 0xE8
- lsls r0, 3
- adds r2, r5, r0
- ldrh r0, [r2]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r2]
- lsls r0, 16
- asrs r0, 16
- ldr r1, _0807ADA8 @ =gUnknown_20386A8
- ldrh r1, [r1]
- cmp r0, r1
- ble _0807ADA0
- strh r6, [r2]
- ldr r1, _0807ADAC @ =0x0000073c
- adds r4, r5, r1
- ldrh r0, [r4]
- subs r0, 0x1
- strh r0, [r4]
- lsls r0, 24
- asrs r0, 24
- bl sub_807AC50
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0x3
- bne _0807ADA0
- strh r6, [r7]
-_0807ADA0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807ADA8: .4byte gUnknown_20386A8
-_0807ADAC: .4byte 0x0000073c
- thumb_func_end sub_807AC98
-
- thumb_func_start Weather_SetBlendCoeffs
-Weather_SetBlendCoeffs: @ 807ADB0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0807ADE8 @ =gUnknown_2037F34
- movs r4, 0xE6
- lsls r4, 3
- adds r2, r3, r4
- strh r0, [r2]
- adds r4, 0x2
- adds r2, r3, r4
- strh r1, [r2]
- adds r4, 0x2
- adds r2, r3, r4
- strh r0, [r2]
- ldr r2, _0807ADEC @ =0x00000736
- adds r3, r2
- strh r1, [r3]
- lsls r1, 8
- orrs r1, r0
- movs r0, 0x52
- bl SetGpuReg
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807ADE8: .4byte gUnknown_2037F34
-_0807ADEC: .4byte 0x00000736
- thumb_func_end Weather_SetBlendCoeffs
-
- thumb_func_start Weather_SetTargetBlendCoeffs
-Weather_SetTargetBlendCoeffs: @ 807ADF0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0807AE24 @ =gUnknown_2037F34
- ldr r5, _0807AE28 @ =0x00000734
- adds r4, r3, r5
- movs r5, 0
- strh r0, [r4]
- ldr r4, _0807AE2C @ =0x00000736
- adds r0, r3, r4
- strh r1, [r0]
- ldr r1, _0807AE30 @ =0x0000073a
- adds r0, r3, r1
- strb r2, [r0]
- adds r4, 0x3
- adds r0, r3, r4
- strb r5, [r0]
- movs r0, 0xE7
- lsls r0, 3
- adds r3, r0
- strb r5, [r3]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807AE24: .4byte gUnknown_2037F34
-_0807AE28: .4byte 0x00000734
-_0807AE2C: .4byte 0x00000736
-_0807AE30: .4byte 0x0000073a
- thumb_func_end Weather_SetTargetBlendCoeffs
-
- thumb_func_start Weather_UpdateBlend
-Weather_UpdateBlend: @ 807AE34
- push {r4-r6,lr}
- ldr r0, _0807AE8C @ =gUnknown_2037F34
- movs r1, 0xE6
- lsls r1, 3
- adds r3, r0, r1
- ldr r2, [r3]
- ldr r6, _0807AE90 @ =0x00000734
- adds r4, r0, r6
- ldr r1, [r4]
- adds r5, r0, 0
- cmp r2, r1
- beq _0807AEF8
- ldr r0, _0807AE94 @ =0x00000739
- adds r2, r5, r0
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- ldr r6, _0807AE98 @ =0x0000073a
- adds r1, r5, r6
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- bls _0807AEC4
- movs r0, 0
- strb r0, [r2]
- movs r0, 0xE7
- lsls r0, 3
- adds r1, r5, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0807AE9C
- ldrh r1, [r3]
- adds r2, r1, 0
- ldrh r0, [r4]
- cmp r2, r0
- bcs _0807AEBC
- adds r0, r1, 0x1
- b _0807AEC2
- .align 2, 0
-_0807AE8C: .4byte gUnknown_2037F34
-_0807AE90: .4byte 0x00000734
-_0807AE94: .4byte 0x00000739
-_0807AE98: .4byte 0x0000073a
-_0807AE9C:
- ldr r1, _0807AEB4 @ =0x00000732
- adds r3, r5, r1
- ldr r2, _0807AEB8 @ =0x00000736
- adds r0, r5, r2
- ldrh r1, [r3]
- adds r2, r1, 0
- ldrh r0, [r0]
- cmp r2, r0
- bcs _0807AEBC
- adds r0, r1, 0x1
- b _0807AEC2
- .align 2, 0
-_0807AEB4: .4byte 0x00000732
-_0807AEB8: .4byte 0x00000736
-_0807AEBC:
- cmp r2, r0
- bls _0807AEC4
- subs r0, r1, 0x1
-_0807AEC2:
- strh r0, [r3]
-_0807AEC4:
- ldr r6, _0807AEF0 @ =0x00000732
- adds r0, r5, r6
- ldrh r1, [r0]
- lsls r1, 8
- movs r0, 0xE6
- lsls r0, 3
- adds r4, r5, r0
- ldrh r0, [r4]
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- ldr r1, [r4]
- ldr r2, _0807AEF4 @ =0x00000734
- adds r0, r5, r2
- ldr r0, [r0]
- cmp r1, r0
- beq _0807AEF8
- movs r0, 0
- b _0807AEFA
- .align 2, 0
-_0807AEF0: .4byte 0x00000732
-_0807AEF4: .4byte 0x00000734
-_0807AEF8:
- movs r0, 0x1
-_0807AEFA:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end Weather_UpdateBlend
-
- thumb_func_start sub_807AF00
-sub_807AF00: @ 807AF00
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- cmp r0, 0x9
- bhi _0807AF92
- lsls r0, 2
- ldr r1, _0807AF18 @ =_0807AF1C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807AF18: .4byte _0807AF1C
- .align 2, 0
-_0807AF1C:
- .4byte _0807AF44
- .4byte _0807AF4C
- .4byte _0807AF54
- .4byte _0807AF5C
- .4byte _0807AF64
- .4byte _0807AF6C
- .4byte _0807AF74
- .4byte _0807AF7C
- .4byte _0807AF84
- .4byte _0807AF8C
-_0807AF44:
- movs r0, 0x1
- bl SetWeather
- b _0807AF92
-_0807AF4C:
- movs r0, 0x2
- bl SetWeather
- b _0807AF92
-_0807AF54:
- movs r0, 0x3
- bl SetWeather
- b _0807AF92
-_0807AF5C:
- movs r0, 0x4
- bl SetWeather
- b _0807AF92
-_0807AF64:
- movs r0, 0x5
- bl SetWeather
- b _0807AF92
-_0807AF6C:
- movs r0, 0x6
- bl SetWeather
- b _0807AF92
-_0807AF74:
- movs r0, 0x9
- bl SetWeather
- b _0807AF92
-_0807AF7C:
- movs r0, 0x7
- bl SetWeather
- b _0807AF92
-_0807AF84:
- movs r0, 0x8
- bl SetWeather
- b _0807AF92
-_0807AF8C:
- movs r0, 0xB
- bl SetWeather
-_0807AF92:
- pop {r0}
- bx r0
- thumb_func_end sub_807AF00
-
- thumb_func_start GetCurrentWeather
-GetCurrentWeather: @ 807AF98
- ldr r0, _0807AFA4 @ =gUnknown_2037F34
- movs r1, 0xDA
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0807AFA4: .4byte gUnknown_2037F34
- thumb_func_end GetCurrentWeather
-
- thumb_func_start SetRainStrengthFromSoundEffect
-SetRainStrengthFromSoundEffect: @ 807AFA8
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, _0807AFC8 @ =gUnknown_2037F34
- ldr r3, _0807AFCC @ =0x000006c6
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _0807AFFA
- cmp r2, 0x4C
- beq _0807AFE0
- cmp r2, 0x4C
- bgt _0807AFD0
- cmp r2, 0x4A
- beq _0807AFEC
- b _0807AFFA
- .align 2, 0
-_0807AFC8: .4byte gUnknown_2037F34
-_0807AFCC: .4byte 0x000006c6
-_0807AFD0:
- cmp r2, 0x4E
- bne _0807AFFA
- ldr r0, _0807AFDC @ =0x000006dd
- adds r1, r0
- movs r0, 0
- b _0807AFF2
- .align 2, 0
-_0807AFDC: .4byte 0x000006dd
-_0807AFE0:
- ldr r3, _0807AFE8 @ =0x000006dd
- adds r1, r3
- movs r0, 0x1
- b _0807AFF2
- .align 2, 0
-_0807AFE8: .4byte 0x000006dd
-_0807AFEC:
- ldr r0, _0807B000 @ =0x000006dd
- adds r1, r0
- movs r0, 0x2
-_0807AFF2:
- strb r0, [r1]
- adds r0, r2, 0
- bl PlaySE
-_0807AFFA:
- pop {r0}
- bx r0
- .align 2, 0
-_0807B000: .4byte 0x000006dd
- thumb_func_end SetRainStrengthFromSoundEffect
-
- thumb_func_start PlayRainStoppingSoundEffect
-PlayRainStoppingSoundEffect: @ 807B004
- push {lr}
- bl IsSpecialSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _0807B042
- ldr r0, _0807B02C @ =gUnknown_2037F34
- ldr r1, _0807B030 @ =0x000006dd
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0807B034
- cmp r0, 0x1
- bgt _0807B03C
- cmp r0, 0
- bne _0807B03C
- movs r0, 0x4F
- bl PlaySE
- b _0807B042
- .align 2, 0
-_0807B02C: .4byte gUnknown_2037F34
-_0807B030: .4byte 0x000006dd
-_0807B034:
- movs r0, 0x4D
- bl PlaySE
- b _0807B042
-_0807B03C:
- movs r0, 0x4B
- bl PlaySE
-_0807B042:
- pop {r0}
- bx r0
- thumb_func_end PlayRainStoppingSoundEffect
-
- thumb_func_start sub_807B048
-sub_807B048: @ 807B048
- ldr r0, _0807B054 @ =gUnknown_2037F34
- ldr r1, _0807B058 @ =0x000006d3
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0807B054: .4byte gUnknown_2037F34
-_0807B058: .4byte 0x000006d3
- thumb_func_end sub_807B048
-
- thumb_func_start SetWeatherScreenFadeOut
-SetWeatherScreenFadeOut: @ 807B05C
- ldr r0, _0807B068 @ =gUnknown_2037F34
- ldr r1, _0807B06C @ =0x000006c6
- adds r0, r1
- movs r1, 0x2
- strb r1, [r0]
- bx lr
- .align 2, 0
-_0807B068: .4byte gUnknown_2037F34
-_0807B06C: .4byte 0x000006c6
- thumb_func_end SetWeatherScreenFadeOut
-
- thumb_func_start sub_807B070
-sub_807B070: @ 807B070
- ldr r0, _0807B07C @ =gUnknown_2037F34
- ldr r1, _0807B080 @ =0x000006c6
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0]
- bx lr
- .align 2, 0
-_0807B07C: .4byte gUnknown_2037F34
-_0807B080: .4byte 0x000006c6
- thumb_func_end sub_807B070
-
- thumb_func_start PreservePaletteInWeather
-PreservePaletteInWeather: @ 807B084
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0807B0A8 @ =gUnknown_83C2CC0
- ldr r5, _0807B0AC @ =gUnknown_2038684
- adds r1, r5, 0
- movs r2, 0x10
- bl CpuSet
- adds r4, r5
- movs r0, 0
- strb r0, [r4]
- ldr r0, _0807B0B0 @ =gUnknown_20386A4
- str r5, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B0A8: .4byte gUnknown_83C2CC0
-_0807B0AC: .4byte gUnknown_2038684
-_0807B0B0: .4byte gUnknown_20386A4
- thumb_func_end PreservePaletteInWeather
-
- thumb_func_start ResetPreservedPalettesInWeather
-ResetPreservedPalettesInWeather: @ 807B0B4
- ldr r1, _0807B0BC @ =gUnknown_20386A4
- ldr r0, _0807B0C0 @ =gUnknown_83C2CC0
- str r0, [r1]
- bx lr
- .align 2, 0
-_0807B0BC: .4byte gUnknown_20386A4
-_0807B0C0: .4byte gUnknown_83C2CC0
- thumb_func_end ResetPreservedPalettesInWeather
-
- thumb_func_start sub_807B0C4
-sub_807B0C4: @ 807B0C4
- push {lr}
- adds r1, r0, 0
- adds r3, r2, 0
- ldr r0, _0807B0E8 @ =gUnknown_2037F34
- movs r2, 0xDA
- lsls r2, 3
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0xB
- beq _0807B0F0
- cmp r0, 0xB
- bgt _0807B0EC
- cmp r0, 0x5
- bgt _0807B0FA
- cmp r0, 0x3
- blt _0807B0FA
- b _0807B0F0
- .align 2, 0
-_0807B0E8: .4byte gUnknown_2037F34
-_0807B0EC:
- cmp r0, 0xD
- bne _0807B0FA
-_0807B0F0:
- adds r0, r1, 0
- movs r1, 0
- movs r2, 0x3
- bl sub_8045314
-_0807B0FA:
- pop {r0}
- bx r0
- thumb_func_end sub_807B0C4
-
- thumb_func_start SetSav1Weather
-SetSav1Weather: @ 807B100
- push {r4,r5,lr}
- ldr r4, _0807B12C @ =gSaveBlock1Ptr
- ldr r1, [r4]
- adds r1, 0x2E
- ldrb r5, [r1]
- lsls r0, 24
- lsrs r0, 24
- bl TranslateWeatherNum
- ldr r1, [r4]
- adds r1, 0x2E
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, 0x2E
- ldrb r0, [r0]
- adds r1, r5, 0
- bl UpdateRainCounter
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B12C: .4byte gSaveBlock1Ptr
- thumb_func_end SetSav1Weather
-
- thumb_func_start sav1_get_weather_probably
-sav1_get_weather_probably: @ 807B130
- ldr r0, _0807B13C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x2E
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0807B13C: .4byte gSaveBlock1Ptr
- thumb_func_end sav1_get_weather_probably
-
- thumb_func_start SetSav1WeatherFromCurrMapHeader
-SetSav1WeatherFromCurrMapHeader: @ 807B140
- push {r4,r5,lr}
- ldr r4, _0807B16C @ =gSaveBlock1Ptr
- ldr r0, [r4]
- adds r0, 0x2E
- ldrb r5, [r0]
- ldr r0, _0807B170 @ =gMapHeader
- ldrb r0, [r0, 0x16]
- bl TranslateWeatherNum
- ldr r1, [r4]
- adds r1, 0x2E
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, 0x2E
- ldrb r0, [r0]
- adds r1, r5, 0
- bl UpdateRainCounter
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B16C: .4byte gSaveBlock1Ptr
-_0807B170: .4byte gMapHeader
- thumb_func_end SetSav1WeatherFromCurrMapHeader
-
- thumb_func_start SetWeather
-SetWeather: @ 807B174
- push {lr}
- bl SetSav1Weather
- bl sav1_get_weather_probably
- lsls r0, 24
- lsrs r0, 24
- bl weather_set
- pop {r0}
- bx r0
- thumb_func_end SetWeather
-
- thumb_func_start sub_807B18C
-sub_807B18C: @ 807B18C
- push {lr}
- bl SetSav1Weather
- bl sav1_get_weather_probably
- lsls r0, 24
- lsrs r0, 24
- bl sub_8079D60
- pop {r0}
- bx r0
- thumb_func_end sub_807B18C
-
- thumb_func_start DoCurrentWeather
-DoCurrentWeather: @ 807B1A4
- push {lr}
- bl sav1_get_weather_probably
- lsls r0, 24
- lsrs r0, 24
- bl weather_set
- pop {r0}
- bx r0
- thumb_func_end DoCurrentWeather
-
- thumb_func_start sub_807B1B8
-sub_807B1B8: @ 807B1B8
- push {lr}
- bl sav1_get_weather_probably
- lsls r0, 24
- lsrs r0, 24
- bl sub_8079D60
- pop {r0}
- bx r0
- thumb_func_end sub_807B1B8
-
- thumb_func_start TranslateWeatherNum
-TranslateWeatherNum: @ 807B1CC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x15
- bhi _0807B294
- lsls r0, 2
- ldr r1, _0807B1E0 @ =_0807B1E4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807B1E0: .4byte _0807B1E4
- .align 2, 0
-_0807B1E4:
- .4byte _0807B294
- .4byte _0807B23C
- .4byte _0807B240
- .4byte _0807B244
- .4byte _0807B248
- .4byte _0807B24C
- .4byte _0807B250
- .4byte _0807B254
- .4byte _0807B258
- .4byte _0807B25C
- .4byte _0807B260
- .4byte _0807B264
- .4byte _0807B268
- .4byte _0807B26C
- .4byte _0807B270
- .4byte _0807B294
- .4byte _0807B294
- .4byte _0807B294
- .4byte _0807B294
- .4byte _0807B294
- .4byte _0807B274
- .4byte _0807B27C
-_0807B23C:
- movs r0, 0x1
- b _0807B296
-_0807B240:
- movs r0, 0x2
- b _0807B296
-_0807B244:
- movs r0, 0x3
- b _0807B296
-_0807B248:
- movs r0, 0x4
- b _0807B296
-_0807B24C:
- movs r0, 0x5
- b _0807B296
-_0807B250:
- movs r0, 0x6
- b _0807B296
-_0807B254:
- movs r0, 0x7
- b _0807B296
-_0807B258:
- movs r0, 0x8
- b _0807B296
-_0807B25C:
- movs r0, 0x9
- b _0807B296
-_0807B260:
- movs r0, 0xA
- b _0807B296
-_0807B264:
- movs r0, 0xB
- b _0807B296
-_0807B268:
- movs r0, 0xC
- b _0807B296
-_0807B26C:
- movs r0, 0xD
- b _0807B296
-_0807B270:
- movs r0, 0xE
- b _0807B296
-_0807B274:
- ldr r1, _0807B278 @ =gUnknown_83C65C0
- b _0807B27E
- .align 2, 0
-_0807B278: .4byte gUnknown_83C65C0
-_0807B27C:
- ldr r1, _0807B28C @ =gUnknown_83C65C4
-_0807B27E:
- ldr r0, _0807B290 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x2F
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- b _0807B296
- .align 2, 0
-_0807B28C: .4byte gUnknown_83C65C4
-_0807B290: .4byte gSaveBlock1Ptr
-_0807B294:
- movs r0, 0
-_0807B296:
- pop {r1}
- bx r1
- thumb_func_end TranslateWeatherNum
-
- thumb_func_start UpdateWeatherPerDay
-UpdateWeatherPerDay: @ 807B29C
- lsls r0, 16
- ldr r1, _0807B2B8 @ =gSaveBlock1Ptr
- ldr r2, [r1]
- adds r2, 0x2F
- lsrs r0, 16
- ldrb r1, [r2]
- adds r0, r1
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- lsrs r1, 16
- strb r1, [r2]
- bx lr
- .align 2, 0
-_0807B2B8: .4byte gSaveBlock1Ptr
- thumb_func_end UpdateWeatherPerDay
-
- thumb_func_start UpdateRainCounter
-UpdateRainCounter: @ 807B2BC
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r2, r0, 24
- cmp r0, r1
- beq _0807B2D6
- cmp r2, 0x3
- beq _0807B2D0
- cmp r2, 0x5
- bne _0807B2D6
-_0807B2D0:
- movs r0, 0x28
- bl IncrementGameStat
-_0807B2D6:
- pop {r0}
- bx r0
- thumb_func_end UpdateRainCounter
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_weather_effects.s b/asm/field_weather_effects.s
deleted file mode 100644
index decfe4078..000000000
--- a/asm/field_weather_effects.s
+++ /dev/null
@@ -1,5240 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start Clouds_InitVars
-Clouds_InitVars: @ 807B2DC
- push {lr}
- ldr r0, _0807B314 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r2, _0807B318 @ =0x000006c1
- adds r1, r0, r2
- movs r2, 0
- strb r2, [r1]
- ldr r1, _0807B31C @ =0x000006c2
- adds r3, r0, r1
- movs r1, 0x14
- strb r1, [r3]
- ldr r3, _0807B320 @ =0x000006d2
- adds r1, r0, r3
- strb r2, [r1]
- subs r3, 0x6
- adds r1, r0, r3
- strh r2, [r1]
- ldr r1, _0807B324 @ =0x000006de
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807B310
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
-_0807B310:
- pop {r0}
- bx r0
- .align 2, 0
-_0807B314: .4byte gUnknown_83C2BBC
-_0807B318: .4byte 0x000006c1
-_0807B31C: .4byte 0x000006c2
-_0807B320: .4byte 0x000006d2
-_0807B324: .4byte 0x000006de
- thumb_func_end Clouds_InitVars
-
- thumb_func_start Clouds_InitAll
-Clouds_InitAll: @ 807B328
- push {r4,lr}
- bl Clouds_InitVars
- ldr r0, _0807B350 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B354 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807B348
- adds r4, r1, r2
-_0807B33E:
- bl Clouds_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807B33E
-_0807B348:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B350: .4byte gUnknown_83C2BBC
-_0807B354: .4byte 0x000006d2
- thumb_func_end Clouds_InitAll
-
- thumb_func_start Clouds_Main
-Clouds_Main: @ 807B358
- push {r4,r5,lr}
- ldr r0, _0807B374 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807B378 @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807B388
- cmp r0, 0x1
- bgt _0807B37C
- cmp r0, 0
- beq _0807B382
- b _0807B3AC
- .align 2, 0
-_0807B374: .4byte gUnknown_83C2BBC
-_0807B378: .4byte 0x000006cc
-_0807B37C:
- cmp r0, 0x2
- beq _0807B394
- b _0807B3AC
-_0807B382:
- bl CreateCloudSprites
- b _0807B3A6
-_0807B388:
- movs r0, 0xC
- movs r1, 0x8
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807B3A6
-_0807B394:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807B3AC
- ldr r0, _0807B3B4 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807B3A6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807B3AC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B3B4: .4byte 0x000006d2
- thumb_func_end Clouds_Main
-
- thumb_func_start Clouds_Finish
-Clouds_Finish: @ 807B3B8
- push {r4,lr}
- ldr r0, _0807B3D0 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807B3D4 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0
- beq _0807B3D8
- cmp r0, 0x1
- beq _0807B3E4
- movs r0, 0
- b _0807B3FA
- .align 2, 0
-_0807B3D0: .4byte gUnknown_83C2BBC
-_0807B3D4: .4byte 0x000006ce
-_0807B3D8:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807B3F2
-_0807B3E4:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807B3F8
- bl sub_807B504
-_0807B3F2:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807B3F8:
- movs r0, 0x1
-_0807B3FA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Clouds_Finish
-
- thumb_func_start Weather2_InitVars
-Weather2_InitVars: @ 807B400
- ldr r0, _0807B418 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807B41C @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0
- strb r0, [r2]
- ldr r0, _0807B420 @ =0x000006c2
- adds r1, r0
- movs r0, 0x14
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0807B418: .4byte gUnknown_83C2BBC
-_0807B41C: .4byte 0x000006c1
-_0807B420: .4byte 0x000006c2
- thumb_func_end Weather2_InitVars
-
- thumb_func_start Weather2_InitAll
-Weather2_InitAll: @ 807B424
- push {lr}
- bl Weather2_InitVars
- pop {r0}
- bx r0
- thumb_func_end Weather2_InitAll
-
- thumb_func_start nullsub_48
-nullsub_48: @ 807B430
- bx lr
- thumb_func_end nullsub_48
-
- thumb_func_start sub_807B434
-sub_807B434: @ 807B434
- movs r0, 0
- bx lr
- thumb_func_end sub_807B434
-
- thumb_func_start CreateCloudSprites
-CreateCloudSprites: @ 807B438
- push {r4,r5,lr}
- ldr r0, _0807B4B0 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807B4B4 @ =0x000006de
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0807B4F4
- ldr r0, _0807B4B8 @ =gUnknown_83C65D4
- bl LoadSpriteSheet
- ldr r0, _0807B4BC @ =gUnknown_83C2D00
- bl sub_807ABC0
- movs r5, 0
-_0807B456:
- ldr r0, _0807B4C0 @ =gUnknown_83C65F0
- movs r1, 0
- movs r2, 0
- movs r3, 0xFF
- bl CreateSprite
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x40
- beq _0807B4CC
- ldr r0, _0807B4B0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- lsls r2, r5, 2
- movs r0, 0xFA
- lsls r0, 1
- adds r1, r0
- adds r1, r2
- lsls r4, r3, 4
- adds r4, r3
- lsls r4, 2
- ldr r0, _0807B4C4 @ =gSprites
- adds r4, r0
- str r4, [r1]
- ldr r0, _0807B4C8 @ =gUnknown_83C65C8
- adds r2, r0
- ldrh r0, [r2]
- adds r0, 0x7
- lsls r0, 16
- asrs r0, 16
- ldrh r1, [r2, 0x2]
- adds r1, 0x7
- lsls r1, 16
- asrs r1, 16
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- bl SetSpritePosToMapCoords
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- b _0807B4DE
- .align 2, 0
-_0807B4B0: .4byte gUnknown_83C2BBC
-_0807B4B4: .4byte 0x000006de
-_0807B4B8: .4byte gUnknown_83C65D4
-_0807B4BC: .4byte gUnknown_83C2D00
-_0807B4C0: .4byte gUnknown_83C65F0
-_0807B4C4: .4byte gSprites
-_0807B4C8: .4byte gUnknown_83C65C8
-_0807B4CC:
- ldr r0, _0807B4FC @ =gUnknown_83C2BBC
- ldr r1, [r0]
- lsls r0, r5, 2
- movs r2, 0xFA
- lsls r2, 1
- adds r1, r2
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807B4DE:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x2
- bls _0807B456
- ldr r0, _0807B4FC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807B500 @ =0x000006de
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807B4F4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B4FC: .4byte gUnknown_83C2BBC
-_0807B500: .4byte 0x000006de
- thumb_func_end CreateCloudSprites
-
- thumb_func_start sub_807B504
-sub_807B504: @ 807B504
- push {r4,r5,lr}
- ldr r0, _0807B550 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B554 @ =0x000006de
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807B548
- movs r4, 0
- movs r0, 0xFA
- lsls r0, 1
- adds r5, r1, r0
-_0807B51C:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807B52A
- bl DestroySprite
-_0807B52A:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x2
- bls _0807B51C
- movs r0, 0x90
- lsls r0, 5
- bl FreeSpriteTilesByTag
- ldr r0, _0807B550 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807B554 @ =0x000006de
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807B548:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B550: .4byte gUnknown_83C2BBC
-_0807B554: .4byte 0x000006de
- thumb_func_end sub_807B504
-
- thumb_func_start sub_807B558
-sub_807B558: @ 807B558
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- movs r1, 0x1
- ands r0, r1
- strh r0, [r2, 0x2E]
- cmp r0, 0
- beq _0807B570
- ldrh r0, [r2, 0x20]
- subs r0, 0x1
- strh r0, [r2, 0x20]
-_0807B570:
- pop {r0}
- bx r0
- thumb_func_end sub_807B558
-
- thumb_func_start Drought_InitVars
-Drought_InitVars: @ 807B574
- ldr r0, _0807B598 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807B59C @ =0x000006cc
- adds r3, r1, r0
- movs r2, 0
- movs r0, 0
- strh r0, [r3]
- ldr r3, _0807B5A0 @ =0x000006d2
- adds r0, r1, r3
- strb r2, [r0]
- subs r3, 0x11
- adds r0, r1, r3
- strb r2, [r0]
- ldr r0, _0807B5A4 @ =0x000006c2
- adds r1, r0
- strb r2, [r1]
- bx lr
- .align 2, 0
-_0807B598: .4byte gUnknown_83C2BBC
-_0807B59C: .4byte 0x000006cc
-_0807B5A0: .4byte 0x000006d2
-_0807B5A4: .4byte 0x000006c2
- thumb_func_end Drought_InitVars
-
- thumb_func_start Drought_InitAll
-Drought_InitAll: @ 807B5A8
- push {r4,lr}
- bl Drought_InitVars
- ldr r0, _0807B5D0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B5D4 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807B5C8
- adds r4, r1, r2
-_0807B5BE:
- bl Drought_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807B5BE
-_0807B5C8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B5D0: .4byte gUnknown_83C2BBC
-_0807B5D4: .4byte 0x000006d2
- thumb_func_end Drought_InitAll
-
- thumb_func_start Drought_Main
-Drought_Main: @ 807B5D8
- push {lr}
- ldr r1, _0807B5F4 @ =gUnknown_83C2BBC
- ldr r0, [r1]
- ldr r2, _0807B5F8 @ =0x000006cc
- adds r0, r2
- ldrh r0, [r0]
- adds r2, r1, 0
- cmp r0, 0x4
- bhi _0807B6B4
- lsls r0, 2
- ldr r1, _0807B5FC @ =_0807B600
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807B5F4: .4byte gUnknown_83C2BBC
-_0807B5F8: .4byte 0x000006cc
-_0807B5FC: .4byte _0807B600
- .align 2, 0
-_0807B600:
- .4byte _0807B614
- .4byte _0807B630
- .4byte _0807B648
- .4byte _0807B664
- .4byte _0807B67C
-_0807B614:
- ldr r1, [r2]
- ldr r2, _0807B628 @ =0x000006c6
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807B6B8
- ldr r0, _0807B62C @ =0x000006cc
- adds r1, r0
- b _0807B69C
- .align 2, 0
-_0807B628: .4byte 0x000006c6
-_0807B62C: .4byte 0x000006cc
-_0807B630:
- bl sub_807ABF4
- ldr r0, _0807B640 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B644 @ =0x000006cc
- adds r1, r2
- b _0807B69C
- .align 2, 0
-_0807B640: .4byte gUnknown_83C2BBC
-_0807B644: .4byte 0x000006cc
-_0807B648:
- bl sub_807AC14
- lsls r0, 24
- cmp r0, 0
- bne _0807B6B8
- ldr r0, _0807B65C @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807B660 @ =0x000006cc
- adds r1, r0
- b _0807B69C
- .align 2, 0
-_0807B65C: .4byte gUnknown_83C2BBC
-_0807B660: .4byte 0x000006cc
-_0807B664:
- bl sub_807AC60
- ldr r0, _0807B674 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B678 @ =0x000006cc
- adds r1, r2
- b _0807B69C
- .align 2, 0
-_0807B674: .4byte gUnknown_83C2BBC
-_0807B678: .4byte 0x000006cc
-_0807B67C:
- bl sub_807AC98
- ldr r0, _0807B6A4 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r1, _0807B6A8 @ =0x0000073c
- adds r0, r2, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x6
- bne _0807B6B8
- ldr r0, _0807B6AC @ =0x000006d2
- adds r1, r2, r0
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, _0807B6B0 @ =0x000006cc
- adds r1, r2, r0
-_0807B69C:
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0807B6B8
- .align 2, 0
-_0807B6A4: .4byte gUnknown_83C2BBC
-_0807B6A8: .4byte 0x0000073c
-_0807B6AC: .4byte 0x000006d2
-_0807B6B0: .4byte 0x000006cc
-_0807B6B4:
- bl sub_807AC98
-_0807B6B8:
- pop {r0}
- bx r0
- thumb_func_end Drought_Main
-
- thumb_func_start sub_807B6BC
-sub_807B6BC: @ 807B6BC
- movs r0, 0
- bx lr
- thumb_func_end sub_807B6BC
-
- thumb_func_start StartDroughtWeatherBlend
-StartDroughtWeatherBlend: @ 807B6C0
- push {lr}
- ldr r0, _0807B6D0 @ =task50_0807B6D4
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_0807B6D0: .4byte task50_0807B6D4
- thumb_func_end StartDroughtWeatherBlend
-
- thumb_func_start task50_0807B6D4
-task50_0807B6D4: @ 807B6D4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0807B6F8 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bhi _0807B7C2
- lsls r0, 2
- ldr r1, _0807B6FC @ =_0807B700
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807B6F8: .4byte gTasks
-_0807B6FC: .4byte _0807B700
- .align 2, 0
-_0807B700:
- .4byte _0807B714
- .4byte _0807B740
- .4byte _0807B768
- .4byte _0807B798
- .4byte _0807B7B8
-_0807B714:
- movs r0, 0
- strh r0, [r4, 0xA]
- strh r0, [r4, 0xC]
- movs r0, 0x48
- bl GetGpuReg
- strh r0, [r4, 0xE]
- ldr r1, _0807B764 @ =0x00003f3f
- movs r0, 0x48
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0x9E
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0807B740:
- ldrh r0, [r4, 0xA]
- adds r0, 0x3
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- ble _0807B752
- movs r0, 0x10
- strh r0, [r4, 0xA]
-_0807B752:
- ldrh r1, [r4, 0xA]
- movs r0, 0x54
- bl SetGpuReg
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- ble _0807B7C2
- b _0807B7B0
- .align 2, 0
-_0807B764: .4byte 0x00003f3f
-_0807B768:
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x9
- ble _0807B7C2
- strh r1, [r4, 0xC]
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bgt _0807B78E
- strh r1, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0807B78E:
- ldrh r1, [r4, 0xA]
- movs r0, 0x54
- bl SetGpuReg
- b _0807B7C2
-_0807B798:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldrh r1, [r4, 0xE]
- movs r0, 0x48
- bl SetGpuReg
-_0807B7B0:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0807B7C2
-_0807B7B8:
- bl EnableBothScriptContexts
- adds r0, r5, 0
- bl DestroyTask
-_0807B7C2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end task50_0807B6D4
-
- thumb_func_start LightRain_InitVars
-LightRain_InitVars: @ 807B7C8
- push {r4,lr}
- ldr r0, _0807B818 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B81C @ =0x000006cc
- adds r0, r1, r2
- movs r3, 0
- movs r2, 0
- strh r2, [r0]
- ldr r4, _0807B820 @ =0x000006d2
- adds r0, r1, r4
- strb r3, [r0]
- adds r4, 0x4
- adds r0, r1, r4
- strh r2, [r0]
- ldr r0, _0807B824 @ =0x000006db
- adds r2, r1, r0
- movs r0, 0x8
- strb r0, [r2]
- ldr r2, _0807B828 @ =0x000006dc
- adds r0, r1, r2
- strb r3, [r0]
- adds r4, 0x3
- adds r2, r1, r4
- movs r0, 0xA
- strb r0, [r2]
- ldr r0, _0807B82C @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0x3
- strb r0, [r2]
- ldr r2, _0807B830 @ =0x000006c2
- adds r1, r2
- movs r0, 0x14
- strb r0, [r1]
- movs r0, 0x4E
- bl SetRainStrengthFromSoundEffect
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B818: .4byte gUnknown_83C2BBC
-_0807B81C: .4byte 0x000006cc
-_0807B820: .4byte 0x000006d2
-_0807B824: .4byte 0x000006db
-_0807B828: .4byte 0x000006dc
-_0807B82C: .4byte 0x000006c1
-_0807B830: .4byte 0x000006c2
- thumb_func_end LightRain_InitVars
-
- thumb_func_start LightRain_InitAll
-LightRain_InitAll: @ 807B834
- push {r4,lr}
- bl LightRain_InitVars
- ldr r0, _0807B85C @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807B860 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807B854
- adds r4, r1, r2
-_0807B84A:
- bl LightRain_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807B84A
-_0807B854:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B85C: .4byte gUnknown_83C2BBC
-_0807B860: .4byte 0x000006d2
- thumb_func_end LightRain_InitAll
-
- thumb_func_start LightRain_Main
-LightRain_Main: @ 807B864
- push {r4,r5,lr}
- ldr r0, _0807B880 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807B884 @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807B894
- cmp r0, 0x1
- bgt _0807B888
- cmp r0, 0
- beq _0807B88E
- b _0807B8B8
- .align 2, 0
-_0807B880: .4byte gUnknown_83C2BBC
-_0807B884: .4byte 0x000006cc
-_0807B888:
- cmp r0, 0x2
- beq _0807B8A0
- b _0807B8B8
-_0807B88E:
- bl LoadRainSpriteSheet
- b _0807B8B2
-_0807B894:
- bl CreateRainSprite
- lsls r0, 24
- cmp r0, 0
- bne _0807B8B8
- b _0807B8B2
-_0807B8A0:
- bl sub_807BD4C
- lsls r0, 24
- cmp r0, 0
- bne _0807B8B8
- ldr r0, _0807B8C0 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807B8B2:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807B8B8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B8C0: .4byte 0x000006d2
- thumb_func_end LightRain_Main
-
- thumb_func_start LightRain_Finish
-LightRain_Finish: @ 807B8C4
- push {r4,r5,lr}
- ldr r0, _0807B8E0 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r1, _0807B8E4 @ =0x000006ce
- adds r3, r2, r1
- ldrh r1, [r3]
- adds r4, r0, 0
- cmp r1, 0
- beq _0807B8E8
- cmp r1, 0x1
- beq _0807B91C
- movs r0, 0
- b _0807B94A
- .align 2, 0
-_0807B8E0: .4byte gUnknown_83C2BBC
-_0807B8E4: .4byte 0x000006ce
-_0807B8E8:
- ldr r5, _0807B908 @ =0x000006d1
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _0807B8FA
- cmp r0, 0x5
- beq _0807B8FA
- cmp r0, 0xD
- bne _0807B910
-_0807B8FA:
- ldr r0, [r4]
- ldr r1, _0807B90C @ =0x000006ce
- adds r0, r1
- movs r1, 0xFF
- strh r1, [r0]
- movs r0, 0
- b _0807B94A
- .align 2, 0
-_0807B908: .4byte 0x000006d1
-_0807B90C: .4byte 0x000006ce
-_0807B910:
- ldr r4, _0807B93C @ =0x000006d9
- adds r0, r2, r4
- strb r1, [r0]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
-_0807B91C:
- bl sub_807BD4C
- lsls r0, 24
- cmp r0, 0
- bne _0807B948
- bl DestroyRainSprites
- ldr r0, _0807B940 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r5, _0807B944 @ =0x000006ce
- adds r1, r5
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- movs r0, 0
- b _0807B94A
- .align 2, 0
-_0807B93C: .4byte 0x000006d9
-_0807B940: .4byte gUnknown_83C2BBC
-_0807B944: .4byte 0x000006ce
-_0807B948:
- movs r0, 0x1
-_0807B94A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end LightRain_Finish
-
- thumb_func_start sub_807B950
-sub_807B950: @ 807B950
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- movs r1, 0x30
- ldrsh r0, [r7, r1]
- cmp r0, 0
- bne _0807B964
- ldr r0, _0807BA08 @ =0x00000169
- strh r0, [r7, 0x30]
-_0807B964:
- movs r2, 0x30
- ldrsh r1, [r7, r2]
- ldr r0, _0807BA0C @ =0x41c64e6d
- muls r0, r1
- ldr r3, _0807BA10 @ =0x00003039
- adds r0, r3
- lsls r0, 1
- lsrs r0, 17
- movs r1, 0x96
- lsls r1, 2
- bl __umodsi3
- movs r1, 0
- mov r8, r1
- strh r0, [r7, 0x30]
- ldr r1, _0807BA14 @ =gUnknown_83C66C4
- ldr r0, _0807BA18 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r2, _0807BA1C @ =0x000006dc
- adds r5, r2
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldrh r6, [r0]
- movs r3, 0x30
- ldrsh r0, [r7, r3]
- movs r1, 0x1E
- bl __modsi3
- adds r4, r0, 0
- lsls r4, 16
- asrs r4, 16
- lsls r0, r4, 3
- strh r0, [r7, 0x32]
- movs r1, 0x30
- ldrsh r0, [r7, r1]
- movs r1, 0x1E
- bl __divsi3
- lsls r0, 16
- lsls r4, 7
- strh r4, [r7, 0x32]
- asrs r0, 9
- strh r0, [r7, 0x34]
- ldr r2, _0807BA20 @ =gUnknown_83C66BC
- ldrb r1, [r5]
- lsls r1, 2
- adds r1, r2
- movs r3, 0
- ldrsh r1, [r1, r3]
- muls r1, r6
- subs r4, r1
- strh r4, [r7, 0x32]
- ldrb r1, [r5]
- lsls r1, 2
- adds r2, 0x2
- adds r1, r2
- movs r2, 0
- ldrsh r1, [r1, r2]
- muls r1, r6
- subs r0, r1
- strh r0, [r7, 0x34]
- adds r0, r7, 0
- movs r1, 0
- bl StartSpriteAnim
- mov r3, r8
- strh r3, [r7, 0x36]
- adds r2, r7, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- strh r6, [r7, 0x2E]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BA08: .4byte 0x00000169
-_0807BA0C: .4byte 0x41c64e6d
-_0807BA10: .4byte 0x00003039
-_0807BA14: .4byte gUnknown_83C66C4
-_0807BA18: .4byte gUnknown_83C2BBC
-_0807BA1C: .4byte 0x000006dc
-_0807BA20: .4byte gUnknown_83C66BC
- thumb_func_end sub_807B950
-
- thumb_func_start sub_807BA24
-sub_807BA24: @ 807BA24
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x36
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0807BB00
- ldr r3, _0807BA98 @ =gUnknown_83C66BC
- ldr r4, _0807BA9C @ =gUnknown_83C2BBC
- ldr r2, [r4]
- ldr r0, _0807BAA0 @ =0x000006dc
- adds r2, r0
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0]
- ldrh r0, [r5, 0x32]
- adds r1, r0
- strh r1, [r5, 0x32]
- ldrb r0, [r2]
- lsls r0, 2
- adds r3, 0x2
- adds r0, r3
- ldrh r0, [r0]
- ldrh r2, [r5, 0x34]
- adds r0, r2
- strh r0, [r5, 0x34]
- lsls r1, 16
- asrs r1, 20
- strh r1, [r5, 0x20]
- lsls r0, 16
- asrs r2, r0, 20
- strh r2, [r5, 0x22]
- movs r3, 0x38
- ldrsh r0, [r5, r3]
- adds r3, r4, 0
- cmp r0, 0
- beq _0807BAA4
- adds r0, r1, 0
- adds r0, 0x8
- lsls r0, 16
- movs r1, 0x80
- lsls r1, 17
- cmp r0, r1
- bhi _0807BAA4
- adds r1, r2, 0
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- blt _0807BAA4
- cmp r1, 0xB0
- bgt _0807BAA4
- adds r0, r5, 0
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- b _0807BAAE
- .align 2, 0
-_0807BA98: .4byte gUnknown_83C66BC
-_0807BA9C: .4byte gUnknown_83C2BBC
-_0807BAA0: .4byte 0x000006dc
-_0807BAA4:
- adds r0, r5, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
-_0807BAAE:
- strb r1, [r0]
- adds r4, r0, 0
- ldrh r0, [r5, 0x2E]
- subs r0, 0x1
- strh r0, [r5, 0x2E]
- lsls r0, 16
- cmp r0, 0
- bne _0807BB20
- ldr r0, [r3]
- ldr r1, _0807BAF4 @ =0x000006dc
- adds r0, r1
- ldrb r1, [r0]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl StartSpriteAnim
- movs r0, 0x1
- strh r0, [r5, 0x36]
- ldr r1, _0807BAF8 @ =gSpriteCoordOffsetX
- ldrh r0, [r5, 0x20]
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r5, 0x20]
- ldr r1, _0807BAFC @ =gSpriteCoordOffsetY
- ldrh r0, [r5, 0x22]
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r5, 0x22]
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- b _0807BB20
- .align 2, 0
-_0807BAF4: .4byte 0x000006dc
-_0807BAF8: .4byte gSpriteCoordOffsetX
-_0807BAFC: .4byte gSpriteCoordOffsetY
-_0807BB00:
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0807BB20
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, 0
- bl sub_807B950
-_0807BB20:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_807BA24
-
- thumb_func_start sub_807BB28
-sub_807BB28: @ 807BB28
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0807BB48
- adds r0, r4, 0
- bl sub_807B950
- ldr r0, _0807BB44 @ =sub_807BA24
- str r0, [r4, 0x1C]
- b _0807BB4C
- .align 2, 0
-_0807BB44: .4byte sub_807BA24
-_0807BB48:
- subs r0, r1, 0x1
- strh r0, [r4, 0x2E]
-_0807BB4C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_807BB28
-
- thumb_func_start sub_807BB54
-sub_807BB54: @ 807BB54
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- lsls r5, r1, 16
- lsrs r5, 16
- ldr r2, _0807BBD8 @ =gUnknown_83C66C4
- ldr r0, _0807BBDC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807BBE0 @ =0x000006dc
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 2
- adds r1, r0, r2
- ldrh r1, [r1]
- mov r8, r1
- adds r2, 0x2
- adds r0, r2
- ldrh r4, [r0]
- add r4, r8
- adds r0, r5, 0
- adds r1, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl __modsi3
- lsls r0, 16
- lsrs r4, r0, 16
- subs r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, _0807BBE4 @ =0x0000ffff
- cmp r6, r0
- beq _0807BBB2
- adds r5, r0, 0
-_0807BBA2:
- adds r0, r7, 0
- bl sub_807B950
- subs r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, r5
- bne _0807BBA2
-_0807BBB2:
- cmp r4, r8
- bcs _0807BBE8
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _0807BBE4 @ =0x0000ffff
- cmp r4, r0
- beq _0807BBD4
- adds r5, r0, 0
-_0807BBC4:
- adds r0, r7, 0
- bl sub_807BA24
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r5
- bne _0807BBC4
-_0807BBD4:
- movs r0, 0
- b _0807BBFC
- .align 2, 0
-_0807BBD8: .4byte gUnknown_83C66C4
-_0807BBDC: .4byte gUnknown_83C2BBC
-_0807BBE0: .4byte 0x000006dc
-_0807BBE4: .4byte 0x0000ffff
-_0807BBE8:
- mov r1, r8
- subs r0, r4, r1
- strh r0, [r7, 0x2E]
- adds r2, r7, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x1
-_0807BBFC:
- strh r0, [r7, 0x3A]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_807BB54
-
- thumb_func_start LoadRainSpriteSheet
-LoadRainSpriteSheet: @ 807BC08
- push {lr}
- ldr r0, _0807BC14 @ =gUnknown_83C66CC
- bl LoadSpriteSheet
- pop {r0}
- bx r0
- .align 2, 0
-_0807BC14: .4byte gUnknown_83C66CC
- thumb_func_end LoadRainSpriteSheet
-
- thumb_func_start CreateRainSprite
-CreateRainSprite: @ 807BC18
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0807BCC4 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r0, _0807BCC8 @ =0x000006da
- adds r2, r4, r0
- ldrb r0, [r2]
- cmp r0, 0x18
- bne _0807BC32
- b _0807BD38
-_0807BC32:
- ldrb r7, [r2]
- ldr r0, _0807BCCC @ =gUnknown_83C66A4
- ldr r2, _0807BCD0 @ =gUnknown_83C6608
- lsls r6, r7, 2
- adds r2, r6, r2
- movs r3, 0
- ldrsh r1, [r2, r3]
- movs r3, 0x2
- ldrsh r2, [r2, r3]
- movs r3, 0x4E
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x40
- beq _0807BCE0
- ldr r3, _0807BCD4 @ =gSprites
- lsls r4, r5, 4
- adds r1, r4, r5
- lsls r1, 2
- adds r1, r3
- movs r0, 0
- strh r0, [r1, 0x38]
- lsls r2, r7, 3
- adds r0, r2, r7
- lsls r0, 4
- adds r0, r7
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r0, 16
- ldr r1, _0807BCD8 @ =0x00000257
- mov r10, r6
- mov r9, r3
- mov r12, r4
- mov r8, r2
- cmp r0, r1
- ble _0807BC96
- adds r2, r1, 0
-_0807BC7E:
- adds r0, r4, r5
- lsls r0, 2
- ldr r6, _0807BCD4 @ =gSprites
- adds r0, r6
- ldr r3, _0807BCDC @ =0xfffffda8
- ldrh r6, [r0, 0x30]
- adds r1, r3, r6
- strh r1, [r0, 0x30]
- lsls r1, 16
- asrs r1, 16
- cmp r1, r2
- bgt _0807BC7E
-_0807BC96:
- mov r0, r12
- adds r4, r0, r5
- lsls r4, 2
- add r4, r9
- adds r0, r4, 0
- bl sub_807B950
- mov r3, r8
- adds r1, r3, r7
- adds r0, r4, 0
- bl sub_807BB54
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0807BCC4 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- add r0, r10
- str r4, [r0]
- b _0807BCE6
- .align 2, 0
-_0807BCC4: .4byte gUnknown_83C2BBC
-_0807BCC8: .4byte 0x000006da
-_0807BCCC: .4byte gUnknown_83C66A4
-_0807BCD0: .4byte gUnknown_83C6608
-_0807BCD4: .4byte gSprites
-_0807BCD8: .4byte 0x00000257
-_0807BCDC: .4byte 0xfffffda8
-_0807BCE0:
- adds r1, r4, r6
- movs r0, 0
- str r0, [r1]
-_0807BCE6:
- ldr r0, _0807BD1C @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r6, _0807BD20 @ =0x000006da
- adds r1, r2, r6
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x18
- bne _0807BD3C
- movs r3, 0
- adds r1, r2, 0
- ldr r5, _0807BD24 @ =sub_807BA24
- ldr r4, _0807BD28 @ =sub_807BB28
-_0807BD04:
- lsls r0, r3, 2
- adds r0, r1, r0
- ldr r2, [r0]
- cmp r2, 0
- beq _0807BD2E
- movs r6, 0x3A
- ldrsh r0, [r2, r6]
- cmp r0, 0
- bne _0807BD2C
- str r5, [r2, 0x1C]
- b _0807BD2E
- .align 2, 0
-_0807BD1C: .4byte gUnknown_83C2BBC
-_0807BD20: .4byte 0x000006da
-_0807BD24: .4byte sub_807BA24
-_0807BD28: .4byte sub_807BB28
-_0807BD2C:
- str r4, [r2, 0x1C]
-_0807BD2E:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x17
- bls _0807BD04
-_0807BD38:
- movs r0, 0
- b _0807BD3E
-_0807BD3C:
- movs r0, 0x1
-_0807BD3E:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end CreateRainSprite
-
- thumb_func_start sub_807BD4C
-sub_807BD4C: @ 807BD4C
- push {r4-r7,lr}
- ldr r0, _0807BD68 @ =gUnknown_83C2BBC
- ldr r3, [r0]
- movs r0, 0xDB
- lsls r0, 3
- adds r4, r3, r0
- ldr r1, _0807BD6C @ =0x000006d9
- adds r5, r3, r1
- ldrb r0, [r4]
- ldrb r7, [r5]
- cmp r0, r7
- bne _0807BD70
- movs r0, 0
- b _0807BDD2
- .align 2, 0
-_0807BD68: .4byte gUnknown_83C2BBC
-_0807BD6C: .4byte 0x000006d9
-_0807BD70:
- ldr r0, _0807BDA8 @ =0x000006d6
- adds r2, r3, r0
- ldrh r0, [r2]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r2]
- ldr r7, _0807BDAC @ =0x000006db
- adds r1, r3, r7
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1]
- cmp r0, r1
- bls _0807BDD0
- strh r6, [r2]
- ldrb r0, [r4]
- adds r1, r0, 0
- ldrb r5, [r5]
- cmp r1, r5
- bcs _0807BDB0
- adds r0, 0x1
- strb r0, [r4]
- lsls r0, r1, 2
- adds r0, r3, r0
- ldr r1, [r0]
- movs r0, 0x1
- strh r0, [r1, 0x38]
- b _0807BDD0
- .align 2, 0
-_0807BDA8: .4byte 0x000006d6
-_0807BDAC: .4byte 0x000006db
-_0807BDB0:
- subs r0, 0x1
- strb r0, [r4]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r3, r0
- ldr r0, [r0]
- strh r6, [r0, 0x38]
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r3, r0
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
-_0807BDD0:
- movs r0, 0x1
-_0807BDD2:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_807BD4C
-
- thumb_func_start DestroyRainSprites
-DestroyRainSprites: @ 807BDD8
- push {r4-r7,lr}
- movs r4, 0
- ldr r0, _0807BE20 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r3, _0807BE24 @ =0x000006da
- adds r1, r2, r3
- adds r7, r0, 0
- ldrb r1, [r1]
- cmp r4, r1
- bcs _0807BE0A
- adds r5, r2, 0
- adds r6, r5, r3
-_0807BDF0:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807BDFE
- bl DestroySprite
-_0807BDFE:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldrb r0, [r6]
- cmp r4, r0
- bcc _0807BDF0
-_0807BE0A:
- ldr r0, [r7]
- ldr r1, _0807BE24 @ =0x000006da
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, _0807BE28 @ =0x00001206
- bl FreeSpriteTilesByTag
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BE20: .4byte gUnknown_83C2BBC
-_0807BE24: .4byte 0x000006da
-_0807BE28: .4byte 0x00001206
- thumb_func_end DestroyRainSprites
-
- thumb_func_start Snow_InitVars
-Snow_InitVars: @ 807BE2C
- push {r4,lr}
- ldr r0, _0807BE68 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807BE6C @ =0x000006cc
- adds r0, r1, r2
- movs r2, 0
- movs r3, 0
- strh r3, [r0]
- ldr r4, _0807BE70 @ =0x000006d2
- adds r0, r1, r4
- strb r2, [r0]
- ldr r0, _0807BE74 @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0x3
- strb r0, [r2]
- subs r4, 0x10
- adds r2, r1, r4
- movs r0, 0x14
- strb r0, [r2]
- ldr r0, _0807BE78 @ =0x000006e5
- adds r2, r1, r0
- movs r0, 0x10
- strb r0, [r2]
- movs r2, 0xDC
- lsls r2, 3
- adds r1, r2
- strh r3, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BE68: .4byte gUnknown_83C2BBC
-_0807BE6C: .4byte 0x000006cc
-_0807BE70: .4byte 0x000006d2
-_0807BE74: .4byte 0x000006c1
-_0807BE78: .4byte 0x000006e5
- thumb_func_end Snow_InitVars
-
- thumb_func_start Snow_InitAll
-Snow_InitAll: @ 807BE7C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl Snow_InitVars
- ldr r2, _0807BEDC @ =gUnknown_83C2BBC
- ldr r1, [r2]
- ldr r3, _0807BEE0 @ =0x000006d2
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807BED2
- mov r8, r2
- adds r7, r1, r3
-_0807BE98:
- bl snowflakes_progress2
- movs r4, 0
- mov r1, r8
- ldr r0, [r1]
- ldr r3, _0807BEE4 @ =0x000006e4
- adds r0, r3
- ldrb r0, [r0]
- cmp r4, r0
- bcs _0807BECC
- ldr r0, _0807BEDC @ =gUnknown_83C2BBC
- ldr r5, [r0]
- adds r6, r5, r3
-_0807BEB2:
- lsls r1, r4, 2
- adds r0, r5, 0
- adds r0, 0x60
- adds r0, r1
- ldr r0, [r0]
- bl sub_807C1AC
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldrb r0, [r6]
- cmp r4, r0
- bcc _0807BEB2
-_0807BECC:
- ldrb r0, [r7]
- cmp r0, 0
- beq _0807BE98
-_0807BED2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BEDC: .4byte gUnknown_83C2BBC
-_0807BEE0: .4byte 0x000006d2
-_0807BEE4: .4byte 0x000006e4
- thumb_func_end Snow_InitAll
-
- thumb_func_start snowflakes_progress2
-snowflakes_progress2: @ 807BEE8
- push {r4,r5,lr}
- ldr r0, _0807BF18 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807BF1C @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0
- bne _0807BF10
- bl snowflakes_progress
- lsls r0, 24
- cmp r0, 0
- bne _0807BF10
- ldr r0, _0807BF20 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807BF10:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807BF18: .4byte gUnknown_83C2BBC
-_0807BF1C: .4byte 0x000006cc
-_0807BF20: .4byte 0x000006d2
- thumb_func_end snowflakes_progress2
-
- thumb_func_start Snow_Finish
-Snow_Finish: @ 807BF24
- push {r4,lr}
- ldr r0, _0807BF3C @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807BF40 @ =0x000006ce
- adds r3, r2, r0
- ldrh r1, [r3]
- cmp r1, 0
- beq _0807BF44
- cmp r1, 0x1
- beq _0807BF56
- movs r0, 0
- b _0807BF82
- .align 2, 0
-_0807BF3C: .4byte gUnknown_83C2BBC
-_0807BF40: .4byte 0x000006ce
-_0807BF44:
- ldr r4, _0807BF74 @ =0x000006e5
- adds r0, r2, r4
- strb r1, [r0]
- subs r4, 0x5
- adds r0, r2, r4
- strh r1, [r0]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
-_0807BF56:
- bl snowflakes_progress
- lsls r0, 24
- cmp r0, 0
- bne _0807BF80
- ldr r0, _0807BF78 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807BF7C @ =0x000006ce
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- movs r0, 0
- b _0807BF82
- .align 2, 0
-_0807BF74: .4byte 0x000006e5
-_0807BF78: .4byte gUnknown_83C2BBC
-_0807BF7C: .4byte 0x000006ce
-_0807BF80:
- movs r0, 0x1
-_0807BF82:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Snow_Finish
-
- thumb_func_start snowflakes_progress
-snowflakes_progress: @ 807BF88
- push {r4,lr}
- ldr r0, _0807BFA4 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807BFA8 @ =0x000006e4
- adds r3, r1, r0
- ldr r4, _0807BFAC @ =0x000006e5
- adds r2, r1, r4
- ldrb r0, [r3]
- ldrb r4, [r2]
- cmp r0, r4
- bne _0807BFB0
- movs r0, 0
- b _0807BFF2
- .align 2, 0
-_0807BFA4: .4byte gUnknown_83C2BBC
-_0807BFA8: .4byte 0x000006e4
-_0807BFAC: .4byte 0x000006e5
-_0807BFB0:
- movs r0, 0xDC
- lsls r0, 3
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x24
- bls _0807BFDA
- movs r0, 0
- strh r0, [r1]
- ldrb r0, [r3]
- ldrb r2, [r2]
- cmp r0, r2
- bcs _0807BFD6
- bl snowflake_add
- b _0807BFDA
-_0807BFD6:
- bl snowflake_remove
-_0807BFDA:
- ldr r0, _0807BFF8 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r2, _0807BFFC @ =0x000006e4
- adds r1, r0, r2
- ldr r4, _0807C000 @ =0x000006e5
- adds r0, r4
- ldrb r1, [r1]
- ldrb r0, [r0]
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
-_0807BFF2:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0807BFF8: .4byte gUnknown_83C2BBC
-_0807BFFC: .4byte 0x000006e4
-_0807C000: .4byte 0x000006e5
- thumb_func_end snowflakes_progress
-
- thumb_func_start snowflake_add
-snowflake_add: @ 807C004
- push {r4-r6,lr}
- ldr r0, _0807C058 @ =gUnknown_83C6704
- movs r1, 0
- movs r2, 0
- movs r3, 0x4E
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _0807C068
- ldr r0, _0807C05C @ =gSprites
- lsls r4, r1, 4
- adds r4, r1
- lsls r4, 2
- adds r4, r0
- ldr r0, _0807C060 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807C064 @ =0x000006e4
- adds r6, r5, r0
- ldrb r0, [r6]
- strh r0, [r4, 0x36]
- adds r0, r4, 0
- bl sub_807C0A4
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- adds r1, r0, 0x1
- strb r1, [r6]
- lsls r0, 24
- lsrs r0, 22
- adds r5, 0x60
- adds r5, r0
- str r4, [r5]
- movs r0, 0x1
- b _0807C06A
- .align 2, 0
-_0807C058: .4byte gUnknown_83C6704
-_0807C05C: .4byte gSprites
-_0807C060: .4byte gUnknown_83C2BBC
-_0807C064: .4byte 0x000006e4
-_0807C068:
- movs r0, 0
-_0807C06A:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end snowflake_add
-
- thumb_func_start snowflake_remove
-snowflake_remove: @ 807C070
- push {lr}
- ldr r0, _0807C084 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807C088 @ =0x000006e4
- adds r2, r1, r0
- ldrb r0, [r2]
- cmp r0, 0
- bne _0807C08C
- movs r0, 0
- b _0807C0A0
- .align 2, 0
-_0807C084: .4byte gUnknown_83C2BBC
-_0807C088: .4byte 0x000006e4
-_0807C08C:
- subs r0, 0x1
- strb r0, [r2]
- lsls r0, 24
- lsrs r0, 22
- adds r1, 0x60
- adds r1, r0
- ldr r0, [r1]
- bl DestroySprite
- movs r0, 0x1
-_0807C0A0:
- pop {r1}
- bx r1
- thumb_func_end snowflake_remove
-
- thumb_func_start sub_807C0A4
-sub_807C0A4: @ 807C0A4
- push {r4-r7,lr}
- adds r5, r0, 0
- bl Random
- movs r1, 0x36
- ldrsh r2, [r5, r1]
- lsls r1, r2, 2
- adds r1, r2
- movs r2, 0x7
- ands r1, r2
- lsls r4, r1, 4
- subs r4, r1
- lsls r4, 1
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1E
- bl __umodsi3
- adds r4, r0
- lsls r4, 16
- lsrs r4, 16
- ldr r1, _0807C148 @ =gSpriteCoordOffsetY
- adds r0, r5, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrh r1, [r1]
- adds r0, r1
- movs r2, 0x3
- negs r2, r2
- adds r1, r2, 0
- subs r1, r0
- movs r7, 0
- strh r1, [r5, 0x22]
- ldr r1, _0807C14C @ =gSpriteCoordOffsetX
- adds r0, r5, 0
- adds r0, 0x28
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrh r1, [r1]
- adds r0, r1
- subs r4, r0
- strh r4, [r5, 0x20]
- movs r1, 0x22
- ldrsh r0, [r5, r1]
- lsls r0, 7
- strh r0, [r5, 0x2E]
- strh r7, [r5, 0x24]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r6, r0, 0
- movs r4, 0x3
- ands r4, r6
- lsls r0, r4, 2
- adds r0, r4
- adds r0, 0x40
- strh r0, [r5, 0x30]
- strh r0, [r5, 0x3C]
- movs r1, 0x1
- bics r1, r6
- adds r0, r5, 0
- bl StartSpriteAnim
- strh r7, [r5, 0x34]
- movs r0, 0x1
- cmp r4, 0
- bne _0807C134
- movs r0, 0x2
-_0807C134:
- strh r0, [r5, 0x32]
- movs r0, 0x1F
- ands r0, r6
- adds r0, 0xD2
- strh r0, [r5, 0x3A]
- strh r7, [r5, 0x38]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C148: .4byte gSpriteCoordOffsetY
-_0807C14C: .4byte gSpriteCoordOffsetX
- thumb_func_end sub_807C0A4
-
- thumb_func_start sub_807C150
-sub_807C150: @ 807C150
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807C19C @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807C1A0 @ =0x000006e2
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x12
- bls _0807C196
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _0807C1A4 @ =sub_807C1AC
- str r0, [r3, 0x1C]
- ldr r1, _0807C1A8 @ =gSpriteCoordOffsetY
- adds r0, r3, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldrh r1, [r1]
- adds r0, r1
- movs r1, 0xFA
- subs r1, r0
- movs r2, 0
- strh r1, [r3, 0x22]
- movs r1, 0x22
- ldrsh r0, [r3, r1]
- lsls r0, 7
- strh r0, [r3, 0x2E]
- strh r2, [r4]
-_0807C196:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C19C: .4byte gUnknown_83C2BBC
-_0807C1A0: .4byte 0x000006e2
-_0807C1A4: .4byte sub_807C1AC
-_0807C1A8: .4byte gSpriteCoordOffsetY
- thumb_func_end sub_807C150
-
- thumb_func_start sub_807C1AC
-sub_807C1AC: @ 807C1AC
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- ldrh r1, [r4, 0x2E]
- adds r0, r1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 23
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x32]
- ldrh r2, [r4, 0x34]
- adds r0, r2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x34]
- ldr r1, _0807C224 @ =gSineTable
- movs r3, 0x34
- ldrsh r0, [r4, r3]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bge _0807C1DE
- adds r0, 0x3F
-_0807C1DE:
- asrs r0, 6
- strh r0, [r4, 0x24]
- adds r0, r4, 0
- adds r0, 0x28
- movs r5, 0
- ldrsb r5, [r0, r5]
- ldrh r0, [r4, 0x20]
- adds r0, r5
- ldr r1, _0807C228 @ =gSpriteCoordOffsetX
- ldrh r1, [r1]
- adds r3, r1, r0
- ldr r2, _0807C22C @ =0x000001ff
- adds r0, r2, 0
- ands r3, r0
- adds r2, r3, 0
- movs r0, 0x80
- lsls r0, 1
- ands r0, r2
- cmp r0, 0
- beq _0807C210
- ldr r3, _0807C230 @ =0xffffff00
- adds r0, r3, 0
- orrs r2, r0
- lsls r0, r2, 16
- lsrs r3, r0, 16
-_0807C210:
- lsls r0, r3, 16
- asrs r0, 16
- movs r2, 0x3
- negs r2, r2
- cmp r0, r2
- bge _0807C234
- adds r1, r5
- movs r0, 0xF2
- subs r0, r1
- b _0807C23C
- .align 2, 0
-_0807C224: .4byte gSineTable
-_0807C228: .4byte gSpriteCoordOffsetX
-_0807C22C: .4byte 0x000001ff
-_0807C230: .4byte 0xffffff00
-_0807C234:
- cmp r0, 0xF2
- ble _0807C23E
- adds r0, r1, r5
- subs r0, r2, r0
-_0807C23C:
- strh r0, [r4, 0x20]
-_0807C23E:
- adds r0, r4, 0
- adds r0, 0x29
- movs r3, 0
- ldrsb r3, [r0, r3]
- ldrh r0, [r4, 0x22]
- adds r0, r3
- ldr r1, _0807C27C @ =gSpriteCoordOffsetY
- ldrh r1, [r1]
- adds r2, r1, r0
- movs r0, 0xFF
- ands r2, r0
- adds r0, r2, 0
- subs r0, 0xA4
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x6
- bhi _0807C280
- adds r1, r3
- movs r0, 0xFA
- subs r0, r1
- movs r1, 0
- strh r0, [r4, 0x22]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- lsls r0, 7
- strh r0, [r4, 0x2E]
- strh r1, [r4, 0x38]
- movs r0, 0xDC
- strh r0, [r4, 0x3A]
- b _0807C2AC
- .align 2, 0
-_0807C27C: .4byte gSpriteCoordOffsetY
-_0807C280:
- adds r0, r2, 0
- subs r0, 0xF3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x6
- bhi _0807C2AC
- movs r1, 0
- movs r0, 0xA3
- strh r0, [r4, 0x22]
- lsls r0, 7
- strh r0, [r4, 0x2E]
- strh r1, [r4, 0x38]
- movs r0, 0xDC
- strh r0, [r4, 0x3A]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0807C2E0 @ =sub_807C150
- str r0, [r4, 0x1C]
-_0807C2AC:
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x3A
- ldrsh r1, [r4, r3]
- cmp r0, r1
- bne _0807C2D8
- adds r0, r4, 0
- bl sub_807C0A4
- movs r0, 0xFA
- strh r0, [r4, 0x22]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0807C2E0 @ =sub_807C150
- str r0, [r4, 0x1C]
-_0807C2D8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C2E0: .4byte sub_807C150
- thumb_func_end sub_807C1AC
-
- thumb_func_start sub_807C2E4
-sub_807C2E4: @ 807C2E4
- push {r4,r5,lr}
- ldr r0, _0807C33C @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C340 @ =0x000006cc
- adds r0, r1, r2
- movs r3, 0
- movs r2, 0
- strh r2, [r0]
- ldr r5, _0807C344 @ =0x000006d2
- adds r4, r1, r5
- strb r3, [r4]
- adds r5, 0x4
- adds r0, r1, r5
- strh r2, [r0]
- ldr r0, _0807C348 @ =0x000006db
- adds r2, r1, r0
- movs r0, 0x4
- strb r0, [r2]
- ldr r2, _0807C34C @ =0x000006dc
- adds r0, r1, r2
- strb r3, [r0]
- adds r5, 0x3
- adds r2, r1, r5
- movs r0, 0x10
- strb r0, [r2]
- ldr r0, _0807C350 @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0x3
- strb r0, [r2]
- subs r5, 0x17
- adds r2, r1, r5
- movs r0, 0x14
- strb r0, [r2]
- strb r3, [r4]
- ldr r0, _0807C354 @ =0x000006ed
- adds r1, r0
- strb r3, [r1]
- movs r0, 0x4A
- bl SetRainStrengthFromSoundEffect
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C33C: .4byte gUnknown_83C2BBC
-_0807C340: .4byte 0x000006cc
-_0807C344: .4byte 0x000006d2
-_0807C348: .4byte 0x000006db
-_0807C34C: .4byte 0x000006dc
-_0807C350: .4byte 0x000006c1
-_0807C354: .4byte 0x000006ed
- thumb_func_end sub_807C2E4
-
- thumb_func_start sub_807C358
-sub_807C358: @ 807C358
- push {r4,lr}
- bl sub_807C2E4
- ldr r0, _0807C380 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C384 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C378
- adds r4, r1, r2
-_0807C36E:
- bl Rain_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807C36E
-_0807C378:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C380: .4byte gUnknown_83C2BBC
-_0807C384: .4byte 0x000006d2
- thumb_func_end sub_807C358
-
- thumb_func_start sub_807C388
-sub_807C388: @ 807C388
- push {r4,r5,lr}
- ldr r0, _0807C3DC @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C3E0 @ =0x000006cc
- adds r0, r1, r2
- movs r4, 0
- movs r2, 0
- strh r2, [r0]
- ldr r5, _0807C3E4 @ =0x000006d2
- adds r3, r1, r5
- strb r4, [r3]
- adds r5, 0x4
- adds r0, r1, r5
- strh r2, [r0]
- ldr r0, _0807C3E8 @ =0x000006db
- adds r2, r1, r0
- movs r0, 0x4
- strb r0, [r2]
- adds r5, 0x6
- adds r2, r1, r5
- movs r0, 0x1
- strb r0, [r2]
- ldr r0, _0807C3EC @ =0x000006d9
- adds r2, r1, r0
- movs r0, 0x18
- strb r0, [r2]
- subs r5, 0x1B
- adds r2, r1, r5
- movs r0, 0x3
- strb r0, [r2]
- ldr r0, _0807C3F0 @ =0x000006c2
- adds r1, r0
- movs r0, 0x14
- strb r0, [r1]
- strb r4, [r3]
- movs r0, 0x4C
- bl SetRainStrengthFromSoundEffect
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C3DC: .4byte gUnknown_83C2BBC
-_0807C3E0: .4byte 0x000006cc
-_0807C3E4: .4byte 0x000006d2
-_0807C3E8: .4byte 0x000006db
-_0807C3EC: .4byte 0x000006d9
-_0807C3F0: .4byte 0x000006c2
- thumb_func_end sub_807C388
-
- thumb_func_start sub_807C3F4
-sub_807C3F4: @ 807C3F4
- push {r4,lr}
- bl sub_807C388
- ldr r0, _0807C41C @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C420 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C414
- adds r4, r1, r2
-_0807C40A:
- bl Rain_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807C40A
-_0807C414:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C41C: .4byte gUnknown_83C2BBC
-_0807C420: .4byte 0x000006d2
- thumb_func_end sub_807C3F4
-
- thumb_func_start Rain_Main
-Rain_Main: @ 807C424
- push {r4,r5,lr}
- bl UpdateThunderSound
- ldr r0, _0807C444 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807C448 @ =0x000006cc
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0xE
- bls _0807C43A
- b _0807C79A
-_0807C43A:
- lsls r0, 2
- ldr r1, _0807C44C @ =_0807C450
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807C444: .4byte gUnknown_83C2BBC
-_0807C448: .4byte 0x000006cc
-_0807C44C: .4byte _0807C450
- .align 2, 0
-_0807C450:
- .4byte _0807C48C
- .4byte _0807C4A8
- .4byte _0807C4CC
- .4byte _0807C4FC
- .4byte _0807C520
- .4byte _0807C550
- .4byte _0807C580
- .4byte _0807C5AC
- .4byte _0807C5CA
- .4byte _0807C628
- .4byte _0807C6AC
- .4byte _0807C6D4
- .4byte _0807C704
- .4byte _0807C748
- .4byte _0807C77C
-_0807C48C:
- bl LoadRainSpriteSheet
- ldr r0, _0807C4A0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C4A4 @ =0x000006cc
- adds r1, r2
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C4A0: .4byte gUnknown_83C2BBC
-_0807C4A4: .4byte 0x000006cc
-_0807C4A8:
- bl CreateRainSprite
- lsls r0, 24
- cmp r0, 0
- beq _0807C4B4
- b _0807C79A
-_0807C4B4:
- ldr r0, _0807C4C4 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r3, _0807C4C8 @ =0x000006cc
- adds r1, r3
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C4C4: .4byte gUnknown_83C2BBC
-_0807C4C8: .4byte 0x000006cc
-_0807C4CC:
- bl sub_807BD4C
- lsls r0, 24
- cmp r0, 0
- beq _0807C4D8
- b _0807C79A
-_0807C4D8:
- ldr r0, _0807C4F0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807C4F4 @ =0x000006d2
- adds r2, r1, r0
- movs r0, 0x1
- strb r0, [r2]
- ldr r2, _0807C4F8 @ =0x000006cc
- adds r1, r2
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C4F0: .4byte gUnknown_83C2BBC
-_0807C4F4: .4byte 0x000006d2
-_0807C4F8: .4byte 0x000006cc
-_0807C4FC:
- ldr r0, _0807C514 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r3, _0807C518 @ =0x000006c6
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C50C
- b _0807C79A
-_0807C50C:
- ldr r0, _0807C51C @ =0x000006cc
- adds r1, r0
- movs r0, 0x6
- b _0807C798
- .align 2, 0
-_0807C514: .4byte gUnknown_83C2BBC
-_0807C518: .4byte 0x000006c6
-_0807C51C: .4byte 0x000006cc
-_0807C520:
- ldr r0, _0807C570 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r2, _0807C574 @ =0x000006ea
- adds r1, r4, r2
- movs r0, 0x1
- strb r0, [r1]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r5, 0xB4
- lsls r5, 1
- adds r1, r5, 0
- bl __umodsi3
- adds r0, r5
- ldr r3, _0807C578 @ =0x000006e6
- adds r1, r4, r3
- strh r0, [r1]
- ldr r0, _0807C57C @ =0x000006cc
- adds r4, r0
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807C550:
- ldr r0, _0807C570 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r3, _0807C578 @ =0x000006e6
- adds r1, r2, r3
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- beq _0807C566
- b _0807C79A
-_0807C566:
- ldr r0, _0807C57C @ =0x000006cc
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C570: .4byte gUnknown_83C2BBC
-_0807C574: .4byte 0x000006ea
-_0807C578: .4byte 0x000006e6
-_0807C57C: .4byte 0x000006cc
-_0807C580:
- ldr r0, _0807C5A0 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r1, _0807C5A4 @ =0x000006ea
- adds r0, r4, r1
- movs r5, 0x1
- strb r5, [r0]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ands r0, r5
- ldr r2, _0807C5A8 @ =0x000006eb
- adds r1, r4, r2
- strb r0, [r1]
- b _0807C608
- .align 2, 0
-_0807C5A0: .4byte gUnknown_83C2BBC
-_0807C5A4: .4byte 0x000006ea
-_0807C5A8: .4byte 0x000006eb
-_0807C5AC:
- bl Random
- ldr r1, _0807C614 @ =gUnknown_83C2BBC
- ldr r2, [r1]
- movs r1, 0x1
- ands r1, r0
- adds r1, 0x1
- ldr r3, _0807C618 @ =0x000006ec
- adds r0, r2, r3
- strb r1, [r0]
- ldr r0, _0807C61C @ =0x000006cc
- adds r2, r0
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
-_0807C5CA:
- movs r0, 0x13
- bl sub_807A790
- ldr r0, _0807C614 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C620 @ =0x000006eb
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C5EE
- ldr r3, _0807C618 @ =0x000006ec
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0807C5EE
- movs r0, 0x14
- bl SetThunderCounter
-_0807C5EE:
- bl Random
- ldr r1, _0807C614 @ =gUnknown_83C2BBC
- ldr r4, [r1]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- adds r0, 0x6
- ldr r2, _0807C624 @ =0x000006e6
- adds r1, r4, r2
- strh r0, [r1]
-_0807C608:
- ldr r3, _0807C61C @ =0x000006cc
- adds r4, r3
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807C79A
- .align 2, 0
-_0807C614: .4byte gUnknown_83C2BBC
-_0807C618: .4byte 0x000006ec
-_0807C61C: .4byte 0x000006cc
-_0807C620: .4byte 0x000006eb
-_0807C624: .4byte 0x000006e6
-_0807C628:
- ldr r0, _0807C674 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r0, _0807C678 @ =0x000006e6
- adds r5, r4, r0
- ldrh r0, [r5]
- subs r0, 0x1
- strh r0, [r5]
- lsls r0, 16
- cmp r0, 0
- beq _0807C63E
- b _0807C79A
-_0807C63E:
- movs r0, 0x3
- bl sub_807A790
- ldr r2, _0807C67C @ =0x000006ea
- adds r1, r4, r2
- movs r0, 0x1
- strb r0, [r1]
- ldr r3, _0807C680 @ =0x000006ec
- adds r1, r4, r3
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- beq _0807C688
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- adds r0, 0x3C
- strh r0, [r5]
- ldr r0, _0807C684 @ =0x000006cc
- adds r1, r4, r0
- movs r0, 0xA
- b _0807C798
- .align 2, 0
-_0807C674: .4byte gUnknown_83C2BBC
-_0807C678: .4byte 0x000006e6
-_0807C67C: .4byte 0x000006ea
-_0807C680: .4byte 0x000006ec
-_0807C684: .4byte 0x000006cc
-_0807C688:
- ldr r1, _0807C698 @ =0x000006eb
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C6A0
- ldr r2, _0807C69C @ =0x000006cc
- adds r1, r4, r2
- b _0807C796
- .align 2, 0
-_0807C698: .4byte 0x000006eb
-_0807C69C: .4byte 0x000006cc
-_0807C6A0:
- ldr r3, _0807C6A8 @ =0x000006cc
- adds r1, r4, r3
- movs r0, 0xB
- b _0807C798
- .align 2, 0
-_0807C6A8: .4byte 0x000006cc
-_0807C6AC:
- ldr r0, _0807C6C8 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807C6CC @ =0x000006e6
- adds r1, r2, r0
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bne _0807C79A
- ldr r3, _0807C6D0 @ =0x000006cc
- adds r1, r2, r3
- movs r0, 0x8
- b _0807C798
- .align 2, 0
-_0807C6C8: .4byte gUnknown_83C2BBC
-_0807C6CC: .4byte 0x000006e6
-_0807C6D0: .4byte 0x000006cc
-_0807C6D4:
- bl Random
- ldr r1, _0807C6F8 @ =gUnknown_83C2BBC
- ldr r2, [r1]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- adds r0, 0x3C
- ldr r3, _0807C6FC @ =0x000006e6
- adds r1, r2, r3
- strh r0, [r1]
- ldr r0, _0807C700 @ =0x000006cc
- adds r2, r0
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
- b _0807C79A
- .align 2, 0
-_0807C6F8: .4byte gUnknown_83C2BBC
-_0807C6FC: .4byte 0x000006e6
-_0807C700: .4byte 0x000006cc
-_0807C704:
- ldr r0, _0807C73C @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r1, _0807C740 @ =0x000006e6
- adds r4, r5, r1
- ldrh r0, [r4]
- subs r0, 0x1
- strh r0, [r4]
- lsls r0, 16
- cmp r0, 0
- bne _0807C79A
- movs r0, 0x64
- bl SetThunderCounter
- movs r0, 0x13
- bl sub_807A790
- bl Random
- movs r1, 0xF
- ands r1, r0
- adds r1, 0x1E
- strh r1, [r4]
- ldr r2, _0807C744 @ =0x000006cc
- adds r1, r5, r2
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C73C: .4byte gUnknown_83C2BBC
-_0807C740: .4byte 0x000006e6
-_0807C744: .4byte 0x000006cc
-_0807C748:
- ldr r0, _0807C770 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r3, _0807C774 @ =0x000006e6
- adds r1, r4, r3
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bne _0807C79A
- movs r0, 0x13
- movs r1, 0x3
- movs r2, 0x5
- bl sub_807A7C4
- ldr r0, _0807C778 @ =0x000006cc
- adds r1, r4, r0
- ldrh r0, [r1]
- adds r0, 0x1
- b _0807C798
- .align 2, 0
-_0807C770: .4byte gUnknown_83C2BBC
-_0807C774: .4byte 0x000006e6
-_0807C778: .4byte 0x000006cc
-_0807C77C:
- ldr r0, _0807C7A0 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r1, _0807C7A4 @ =0x000006c6
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _0807C79A
- ldr r3, _0807C7A8 @ =0x000006ea
- adds r1, r2, r3
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, _0807C7AC @ =0x000006cc
- adds r1, r2, r0
-_0807C796:
- movs r0, 0x4
-_0807C798:
- strh r0, [r1]
-_0807C79A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C7A0: .4byte gUnknown_83C2BBC
-_0807C7A4: .4byte 0x000006c6
-_0807C7A8: .4byte 0x000006ea
-_0807C7AC: .4byte 0x000006cc
- thumb_func_end Rain_Main
-
- thumb_func_start Rain_Finish
-Rain_Finish: @ 807C7B0
- push {r4-r6,lr}
- ldr r0, _0807C7CC @ =gUnknown_83C2BBC
- ldr r6, [r0]
- ldr r0, _0807C7D0 @ =0x000006ce
- adds r5, r6, r0
- ldrh r1, [r5]
- cmp r1, 0x1
- beq _0807C7E6
- cmp r1, 0x1
- bgt _0807C7D4
- cmp r1, 0
- beq _0807C7DA
- b _0807C84C
- .align 2, 0
-_0807C7CC: .4byte gUnknown_83C2BBC
-_0807C7D0: .4byte 0x000006ce
-_0807C7D4:
- cmp r1, 0x2
- beq _0807C830
- b _0807C84C
-_0807C7DA:
- ldr r2, _0807C820 @ =0x000006ea
- adds r0, r6, r2
- strb r1, [r0]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0807C7E6:
- bl Rain_Main
- ldr r0, _0807C824 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r1, _0807C820 @ =0x000006ea
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807C854
- subs r1, 0x19
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x3
- beq _0807C84C
- cmp r0, 0x5
- beq _0807C84C
- cmp r0, 0xD
- beq _0807C84C
- ldr r0, _0807C828 @ =0x000006d9
- adds r1, r2, r0
- movs r0, 0
- strb r0, [r1]
- ldr r0, _0807C82C @ =0x000006ce
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0807C854
- .align 2, 0
-_0807C820: .4byte 0x000006ea
-_0807C824: .4byte gUnknown_83C2BBC
-_0807C828: .4byte 0x000006d9
-_0807C82C: .4byte 0x000006ce
-_0807C830:
- bl sub_807BD4C
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0807C854
- bl DestroyRainSprites
- ldr r1, _0807C850 @ =0x000006ed
- adds r0, r6, r1
- strb r4, [r0]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0807C84C:
- movs r0, 0
- b _0807C856
- .align 2, 0
-_0807C850: .4byte 0x000006ed
-_0807C854:
- movs r0, 0x1
-_0807C856:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end Rain_Finish
-
- thumb_func_start SetThunderCounter
-SetThunderCounter: @ 807C85C
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, _0807C890 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r0, _0807C894 @ =0x000006ed
- adds r5, r4, r0
- ldrb r0, [r5]
- cmp r0, 0
- bne _0807C88A
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl __umodsi3
- movs r2, 0xDD
- lsls r2, 3
- adds r1, r4, r2
- strh r0, [r1]
- movs r0, 0x1
- strb r0, [r5]
-_0807C88A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C890: .4byte gUnknown_83C2BBC
-_0807C894: .4byte 0x000006ed
- thumb_func_end SetThunderCounter
-
- thumb_func_start UpdateThunderSound
-UpdateThunderSound: @ 807C898
- push {r4,lr}
- ldr r0, _0807C8D0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C8D4 @ =0x000006ed
- adds r0, r1, r2
- ldrb r4, [r0]
- cmp r4, 0x1
- bne _0807C8F8
- movs r0, 0xDD
- lsls r0, 3
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _0807C8F4
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _0807C8F8
- bl Random
- ands r4, r0
- cmp r4, 0
- beq _0807C8D8
- movs r0, 0x50
- bl PlaySE
- b _0807C8DE
- .align 2, 0
-_0807C8D0: .4byte gUnknown_83C2BBC
-_0807C8D4: .4byte 0x000006ed
-_0807C8D8:
- movs r0, 0x51
- bl PlaySE
-_0807C8DE:
- ldr r0, _0807C8EC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807C8F0 @ =0x000006ed
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- b _0807C8F8
- .align 2, 0
-_0807C8EC: .4byte gUnknown_83C2BBC
-_0807C8F0: .4byte 0x000006ed
-_0807C8F4:
- subs r0, 0x1
- strh r0, [r1]
-_0807C8F8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end UpdateThunderSound
-
- thumb_func_start Fog1_InitVars
-Fog1_InitVars: @ 807C900
- push {lr}
- ldr r0, _0807C94C @ =gUnknown_83C2BBC
- ldr r3, [r0]
- ldr r0, _0807C950 @ =0x000006cc
- adds r1, r3, r0
- movs r2, 0
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0807C954 @ =0x000006d2
- adds r0, r3, r1
- strb r2, [r0]
- subs r1, 0x11
- adds r0, r3, r1
- strb r2, [r0]
- ldr r2, _0807C958 @ =0x000006c2
- adds r1, r3, r2
- movs r0, 0x14
- strb r0, [r1]
- ldr r1, _0807C95C @ =0x000006fb
- adds r0, r3, r1
- ldrb r1, [r0]
- cmp r1, 0
- bne _0807C948
- adds r2, 0x2E
- adds r0, r3, r2
- strh r1, [r0]
- adds r2, 0x2
- adds r0, r3, r2
- strh r1, [r0]
- subs r2, 0x4
- adds r0, r3, r2
- strh r1, [r0]
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
-_0807C948:
- pop {r0}
- bx r0
- .align 2, 0
-_0807C94C: .4byte gUnknown_83C2BBC
-_0807C950: .4byte 0x000006cc
-_0807C954: .4byte 0x000006d2
-_0807C958: .4byte 0x000006c2
-_0807C95C: .4byte 0x000006fb
- thumb_func_end Fog1_InitVars
-
- thumb_func_start Fog1_InitAll
-Fog1_InitAll: @ 807C960
- push {r4,lr}
- bl Fog1_InitVars
- ldr r0, _0807C988 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807C98C @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807C980
- adds r4, r1, r2
-_0807C976:
- bl Fog1_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807C976
-_0807C980:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807C988: .4byte gUnknown_83C2BBC
-_0807C98C: .4byte 0x000006d2
- thumb_func_end Fog1_InitAll
-
- thumb_func_start Fog1_Main
-Fog1_Main: @ 807C990
- push {r4-r6,lr}
- ldr r0, _0807C9DC @ =gUnknown_83C2BBC
- ldr r6, [r0]
- ldr r0, _0807C9E0 @ =gSpriteCoordOffsetX
- ldr r1, _0807C9E4 @ =0x000006f2
- adds r2, r6, r1
- ldrh r0, [r0]
- ldrh r1, [r2]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- ldr r3, _0807C9E8 @ =0x000006ee
- adds r1, r6, r3
- strh r0, [r1]
- movs r0, 0xDE
- lsls r0, 3
- adds r1, r6, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bls _0807C9CA
- movs r0, 0
- strh r0, [r1]
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
-_0807C9CA:
- ldr r1, _0807C9EC @ =0x000006cc
- adds r5, r6, r1
- ldrh r4, [r5]
- cmp r4, 0
- beq _0807C9F0
- cmp r4, 0x1
- beq _0807CA30
- b _0807CA46
- .align 2, 0
-_0807C9DC: .4byte gUnknown_83C2BBC
-_0807C9E0: .4byte gSpriteCoordOffsetX
-_0807C9E4: .4byte 0x000006f2
-_0807C9E8: .4byte 0x000006ee
-_0807C9EC: .4byte 0x000006cc
-_0807C9F0:
- bl CreateFog1Sprites
- movs r3, 0xDA
- lsls r3, 3
- adds r0, r6, r3
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _0807CA0C
- movs r0, 0xC
- movs r1, 0x8
- movs r2, 0x3
- bl Weather_SetTargetBlendCoeffs
- b _0807CA16
-_0807CA0C:
- movs r0, 0x4
- movs r1, 0x10
- movs r2, 0
- bl Weather_SetTargetBlendCoeffs
-_0807CA16:
- ldr r0, _0807CA28 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807CA2C @ =0x000006cc
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0807CA46
- .align 2, 0
-_0807CA28: .4byte gUnknown_83C2BBC
-_0807CA2C: .4byte 0x000006cc
-_0807CA30:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807CA46
- ldr r1, _0807CA4C @ =0x000006d2
- adds r0, r6, r1
- strb r4, [r0]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0807CA46:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CA4C: .4byte 0x000006d2
- thumb_func_end Fog1_Main
-
- thumb_func_start Fog1_Finish
-Fog1_Finish: @ 807CA50
- push {r4,lr}
- ldr r0, _0807CAA0 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807CAA4 @ =gSpriteCoordOffsetX
- ldr r1, _0807CAA8 @ =0x000006f2
- adds r3, r2, r1
- ldrh r0, [r0]
- ldrh r1, [r3]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- ldr r4, _0807CAAC @ =0x000006ee
- adds r1, r2, r4
- strh r0, [r1]
- movs r0, 0xDE
- lsls r0, 3
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bls _0807CA8A
- movs r0, 0
- strh r0, [r1]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
-_0807CA8A:
- ldr r1, _0807CAB0 @ =0x000006ce
- adds r4, r2, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807CAC6
- cmp r0, 0x1
- bgt _0807CAB4
- cmp r0, 0
- beq _0807CABA
- b _0807CADE
- .align 2, 0
-_0807CAA0: .4byte gUnknown_83C2BBC
-_0807CAA4: .4byte gSpriteCoordOffsetX
-_0807CAA8: .4byte 0x000006f2
-_0807CAAC: .4byte 0x000006ee
-_0807CAB0: .4byte 0x000006ce
-_0807CAB4:
- cmp r0, 0x2
- beq _0807CAD2
- b _0807CADE
-_0807CABA:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x3
- bl Weather_SetTargetBlendCoeffs
- b _0807CAD6
-_0807CAC6:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807CAE2
- b _0807CAD6
-_0807CAD2:
- bl DestroyFog1Sprites
-_0807CAD6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807CAE2
-_0807CADE:
- movs r0, 0
- b _0807CAE4
-_0807CAE2:
- movs r0, 0x1
-_0807CAE4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Fog1_Finish
-
- thumb_func_start Fog1SpriteCallback
-Fog1SpriteCallback: @ 807CAEC
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807CB38 @ =gSpriteCoordOffsetY
- ldrb r0, [r0]
- strh r0, [r3, 0x26]
- ldr r0, _0807CB3C @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CB40 @ =0x000006ee
- adds r2, r0, r1
- ldrh r1, [r2]
- adds r1, 0x20
- movs r4, 0x2E
- ldrsh r0, [r3, r4]
- lsls r0, 6
- adds r1, r0
- strh r1, [r3, 0x20]
- lsls r1, 16
- ldr r0, _0807CB44 @ =0x010f0000
- cmp r1, r0
- ble _0807CB30
- movs r0, 0xF0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r2]
- adds r1, r2
- movs r4, 0x2E
- ldrsh r2, [r3, r4]
- movs r0, 0x4
- subs r0, r2
- lsls r0, 6
- subs r1, r0
- ldr r0, _0807CB48 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807CB30:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CB38: .4byte gSpriteCoordOffsetY
-_0807CB3C: .4byte gUnknown_83C2BBC
-_0807CB40: .4byte 0x000006ee
-_0807CB44: .4byte 0x010f0000
-_0807CB48: .4byte 0x000001ff
- thumb_func_end Fog1SpriteCallback
-
- thumb_func_start CreateFog1Sprites
-CreateFog1Sprites: @ 807CB4C
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r0, _0807CBC0 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CBC4 @ =0x000006fb
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807CBF6
- ldr r0, _0807CBC8 @ =gUnknown_83C67A8
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- movs r5, 0
-_0807CB70:
- ldr r0, _0807CBCC @ =gUnknown_83C6790
- movs r1, 0
- movs r2, 0
- movs r3, 0xFF
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0807CBD4
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0807CBD0 @ =gSprites
- adds r4, r0
- adds r0, r5, 0
- movs r1, 0x5
- bl __umodsi3
- strh r0, [r4, 0x2E]
- lsls r0, 16
- lsrs r0, 10
- adds r0, 0x20
- strh r0, [r4, 0x20]
- adds r0, r5, 0
- movs r1, 0x5
- bl __udivsi3
- lsls r0, 16
- lsrs r0, 10
- adds r0, 0x20
- strh r0, [r4, 0x22]
- ldr r2, _0807CBC0 @ =gUnknown_83C2BBC
- ldr r0, [r2]
- lsls r1, r5, 2
- adds r0, 0xA0
- adds r0, r1
- str r4, [r0]
- b _0807CBE2
- .align 2, 0
-_0807CBC0: .4byte gUnknown_83C2BBC
-_0807CBC4: .4byte 0x000006fb
-_0807CBC8: .4byte gUnknown_83C67A8
-_0807CBCC: .4byte gUnknown_83C6790
-_0807CBD0: .4byte gSprites
-_0807CBD4:
- ldr r2, _0807CC00 @ =gUnknown_83C2BBC
- ldr r1, [r2]
- lsls r0, r5, 2
- adds r1, 0xA0
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807CBE2:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x13
- bls _0807CB70
- ldr r0, [r2]
- ldr r1, _0807CC04 @ =0x000006fb
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807CBF6:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CC00: .4byte gUnknown_83C2BBC
-_0807CC04: .4byte 0x000006fb
- thumb_func_end CreateFog1Sprites
-
- thumb_func_start DestroyFog1Sprites
-DestroyFog1Sprites: @ 807CC08
- push {r4,r5,lr}
- ldr r0, _0807CC50 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807CC54 @ =0x000006fb
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807CC48
- movs r4, 0
- adds r5, r1, 0
- adds r5, 0xA0
-_0807CC1E:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807CC2C
- bl DestroySprite
-_0807CC2C:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807CC1E
- ldr r0, _0807CC58 @ =0x00001201
- bl FreeSpriteTilesByTag
- ldr r0, _0807CC50 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CC54 @ =0x000006fb
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807CC48:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CC50: .4byte gUnknown_83C2BBC
-_0807CC54: .4byte 0x000006fb
-_0807CC58: .4byte 0x00001201
- thumb_func_end DestroyFog1Sprites
-
- thumb_func_start Ash_InitVars
-Ash_InitVars: @ 807CC5C
- push {lr}
- ldr r0, _0807CCA8 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807CCAC @ =0x000006cc
- adds r2, r1, r0
- movs r3, 0
- movs r0, 0
- strh r0, [r2]
- ldr r2, _0807CCB0 @ =0x000006d2
- adds r0, r1, r2
- strb r3, [r0]
- subs r2, 0x11
- adds r0, r1, r2
- strb r3, [r0]
- ldr r3, _0807CCB4 @ =0x000006c2
- adds r0, r1, r3
- movs r2, 0x14
- strb r2, [r0]
- adds r3, 0x3C
- adds r0, r1, r3
- strh r2, [r0]
- movs r0, 0xE0
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- bne _0807CCA4
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
- movs r1, 0xFD
- lsls r1, 6
- movs r0, 0x52
- bl SetGpuReg
-_0807CCA4:
- pop {r0}
- bx r0
- .align 2, 0
-_0807CCA8: .4byte gUnknown_83C2BBC
-_0807CCAC: .4byte 0x000006cc
-_0807CCB0: .4byte 0x000006d2
-_0807CCB4: .4byte 0x000006c2
- thumb_func_end Ash_InitVars
-
- thumb_func_start Ash_InitAll
-Ash_InitAll: @ 807CCB8
- push {r4,lr}
- bl Ash_InitVars
- ldr r0, _0807CCE0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807CCE4 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807CCD8
- adds r4, r1, r2
-_0807CCCE:
- bl Ash_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807CCCE
-_0807CCD8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CCE0: .4byte gUnknown_83C2BBC
-_0807CCE4: .4byte 0x000006d2
- thumb_func_end Ash_InitAll
-
- thumb_func_start Ash_Main
-Ash_Main: @ 807CCE8
- push {r4,r5,lr}
- ldr r2, _0807CD2C @ =gUnknown_83C2BBC
- ldr r1, [r2]
- ldr r0, _0807CD30 @ =gSpriteCoordOffsetX
- ldrh r0, [r0]
- ldr r3, _0807CD34 @ =0x000001ff
- ands r3, r0
- ldr r0, _0807CD38 @ =0x000006fc
- adds r1, r0
- strh r3, [r1]
- cmp r3, 0xEF
- bls _0807CD14
- adds r4, r1, 0
- adds r1, r3, 0
-_0807CD04:
- adds r3, r1, 0
- subs r3, 0xF0
- adds r1, r3, 0
- lsls r0, r3, 16
- lsrs r0, 16
- cmp r0, 0xEF
- bhi _0807CD04
- strh r3, [r4]
-_0807CD14:
- ldr r5, [r2]
- ldr r1, _0807CD3C @ =0x000006cc
- adds r4, r5, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807CD4C
- cmp r0, 0x1
- bgt _0807CD40
- cmp r0, 0
- beq _0807CD46
- b _0807CD88
- .align 2, 0
-_0807CD2C: .4byte gUnknown_83C2BBC
-_0807CD30: .4byte gSpriteCoordOffsetX
-_0807CD34: .4byte 0x000001ff
-_0807CD38: .4byte 0x000006fc
-_0807CD3C: .4byte 0x000006cc
-_0807CD40:
- cmp r0, 0x2
- beq _0807CD68
- b _0807CD88
-_0807CD46:
- bl LoadAshSpriteSheet
- b _0807CD7A
-_0807CD4C:
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807CD5C
- bl CreateAshSprites
-_0807CD5C:
- movs r0, 0x10
- movs r1, 0
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807CD7A
-_0807CD68:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807CD8C
- ldr r0, _0807CD84 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807CD7A:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807CD8C
- .align 2, 0
-_0807CD84: .4byte 0x000006d2
-_0807CD88:
- bl Weather_UpdateBlend
-_0807CD8C:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end Ash_Main
-
- thumb_func_start Ash_Finish
-Ash_Finish: @ 807CD94
- push {r4,lr}
- ldr r0, _0807CDB0 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CDB4 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807CDCA
- cmp r0, 0x1
- bgt _0807CDB8
- cmp r0, 0
- beq _0807CDBE
- b _0807CDEE
- .align 2, 0
-_0807CDB0: .4byte gUnknown_83C2BBC
-_0807CDB4: .4byte 0x000006ce
-_0807CDB8:
- cmp r0, 0x2
- beq _0807CDE0
- b _0807CDEE
-_0807CDBE:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807CDD8
-_0807CDCA:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807CDF2
- bl DestroyAshSprites
-_0807CDD8:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807CDF2
-_0807CDE0:
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807CDEE:
- movs r0, 0
- b _0807CDF4
-_0807CDF2:
- movs r0, 0x1
-_0807CDF4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Ash_Finish
-
- thumb_func_start LoadAshSpriteSheet
-LoadAshSpriteSheet: @ 807CDFC
- push {lr}
- ldr r0, _0807CE08 @ =gUnknown_83C67B0
- bl LoadSpriteSheet
- pop {r0}
- bx r0
- .align 2, 0
-_0807CE08: .4byte gUnknown_83C67B0
- thumb_func_end LoadAshSpriteSheet
-
- thumb_func_start CreateAshSprites
-CreateAshSprites: @ 807CE0C
- push {r4,r5,lr}
- ldr r0, _0807CE78 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807CEA8
- movs r5, 0
-_0807CE20:
- ldr r0, _0807CE7C @ =gUnknown_83C67D0
- movs r1, 0
- movs r2, 0
- movs r3, 0x4E
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0807CE84
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0807CE80 @ =gSprites
- adds r4, r0
- movs r0, 0
- strh r0, [r4, 0x30]
- adds r0, r5, 0
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- adds r0, r5, 0
- movs r1, 0x5
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x34]
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- lsls r0, 6
- adds r0, 0x20
- strh r0, [r4, 0x2E]
- ldr r2, _0807CE78 @ =gUnknown_83C2BBC
- ldr r0, [r2]
- lsls r1, r5, 2
- adds r0, 0xF0
- adds r0, r1
- str r4, [r0]
- b _0807CE92
- .align 2, 0
-_0807CE78: .4byte gUnknown_83C2BBC
-_0807CE7C: .4byte gUnknown_83C67D0
-_0807CE80: .4byte gSprites
-_0807CE84:
- ldr r2, _0807CEB0 @ =gUnknown_83C2BBC
- ldr r1, [r2]
- lsls r0, r5, 2
- adds r1, 0xF0
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807CE92:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x13
- bls _0807CE20
- ldr r0, [r2]
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807CEA8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CEB0: .4byte gUnknown_83C2BBC
- thumb_func_end CreateAshSprites
-
- thumb_func_start DestroyAshSprites
-DestroyAshSprites: @ 807CEB4
- push {r4,r5,lr}
- ldr r0, _0807CF00 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- movs r2, 0xE0
- lsls r2, 3
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807CEF8
- movs r4, 0
- adds r5, r1, 0
- adds r5, 0xF0
-_0807CECC:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807CEDA
- bl DestroySprite
-_0807CEDA:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807CECC
- ldr r0, _0807CF04 @ =0x00001202
- bl FreeSpriteTilesByTag
- ldr r0, _0807CF00 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- movs r1, 0xE0
- lsls r1, 3
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807CEF8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CF00: .4byte gUnknown_83C2BBC
-_0807CF04: .4byte 0x00001202
- thumb_func_end DestroyAshSprites
-
- thumb_func_start sub_807CF08
-sub_807CF08: @ 807CF08
- push {r4,lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x30]
- adds r0, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- ble _0807CF24
- movs r0, 0
- strh r0, [r3, 0x30]
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
-_0807CF24:
- ldr r1, _0807CF70 @ =gSpriteCoordOffsetY
- ldrh r0, [r3, 0x2E]
- ldrh r1, [r1]
- adds r0, r1
- strh r0, [r3, 0x22]
- ldr r0, _0807CF74 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807CF78 @ =0x000006fc
- adds r2, r0, r1
- ldrh r1, [r2]
- adds r1, 0x20
- movs r4, 0x32
- ldrsh r0, [r3, r4]
- lsls r0, 6
- adds r1, r0
- strh r1, [r3, 0x20]
- lsls r1, 16
- ldr r0, _0807CF7C @ =0x010f0000
- cmp r1, r0
- ble _0807CF68
- movs r0, 0xF0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r2]
- adds r1, r2
- movs r4, 0x32
- ldrsh r2, [r3, r4]
- movs r0, 0x4
- subs r0, r2
- lsls r0, 6
- subs r1, r0
- ldr r0, _0807CF80 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807CF68:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CF70: .4byte gSpriteCoordOffsetY
-_0807CF74: .4byte gUnknown_83C2BBC
-_0807CF78: .4byte 0x000006fc
-_0807CF7C: .4byte 0x010f0000
-_0807CF80: .4byte 0x000001ff
- thumb_func_end sub_807CF08
-
- thumb_func_start Fog2_InitVars
-Fog2_InitVars: @ 807CF84
- push {r4,lr}
- ldr r0, _0807CFF4 @ =gUnknown_83C2BBC
- ldr r3, [r0]
- ldr r1, _0807CFF8 @ =0x000006cc
- adds r0, r3, r1
- movs r1, 0
- movs r2, 0
- strh r2, [r0]
- ldr r4, _0807CFFC @ =0x000006d2
- adds r0, r3, r4
- strb r1, [r0]
- subs r4, 0x11
- adds r0, r3, r4
- strb r1, [r0]
- ldr r0, _0807D000 @ =0x000006c2
- adds r1, r3, r0
- movs r0, 0x14
- strb r0, [r1]
- movs r1, 0xDE
- lsls r1, 3
- adds r0, r3, r1
- strh r2, [r0]
- adds r4, 0x31
- adds r1, r3, r4
- movs r0, 0x1
- strh r0, [r1]
- ldr r1, _0807D004 @ =0x00000724
- adds r0, r3, r1
- ldrb r2, [r0]
- cmp r2, 0
- bne _0807CFEE
- adds r4, 0x2A
- adds r0, r3, r4
- strh r2, [r0]
- subs r1, 0x6
- adds r0, r3, r1
- strh r2, [r0]
- adds r4, 0x4
- adds r0, r3, r4
- strh r2, [r0]
- adds r1, 0x4
- adds r0, r3, r1
- strh r2, [r0]
- subs r4, 0x8
- adds r0, r3, r4
- strh r2, [r0]
- subs r1, 0x8
- adds r0, r3, r1
- strh r2, [r0]
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
-_0807CFEE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807CFF4: .4byte gUnknown_83C2BBC
-_0807CFF8: .4byte 0x000006cc
-_0807CFFC: .4byte 0x000006d2
-_0807D000: .4byte 0x000006c2
-_0807D004: .4byte 0x00000724
- thumb_func_end Fog2_InitVars
-
- thumb_func_start Fog2_InitAll
-Fog2_InitAll: @ 807D008
- push {r4,lr}
- bl Fog2_InitVars
- ldr r0, _0807D030 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D034 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D028
- adds r4, r1, r2
-_0807D01E:
- bl Fog2_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807D01E
-_0807D028:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D030: .4byte gUnknown_83C2BBC
-_0807D034: .4byte 0x000006d2
- thumb_func_end Fog2_InitAll
-
- thumb_func_start Fog2_Main
-Fog2_Main: @ 807D038
- push {r4,r5,lr}
- bl sub_807D0FC
- ldr r0, _0807D058 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807D05C @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807D06C
- cmp r0, 0x1
- bgt _0807D060
- cmp r0, 0
- beq _0807D066
- b _0807D090
- .align 2, 0
-_0807D058: .4byte gUnknown_83C2BBC
-_0807D05C: .4byte 0x000006cc
-_0807D060:
- cmp r0, 0x2
- beq _0807D078
- b _0807D090
-_0807D066:
- bl CreateFog2Sprites
- b _0807D08A
-_0807D06C:
- movs r0, 0xC
- movs r1, 0x8
- movs r2, 0x8
- bl Weather_SetTargetBlendCoeffs
- b _0807D08A
-_0807D078:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807D090
- ldr r0, _0807D098 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807D08A:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807D090:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D098: .4byte 0x000006d2
- thumb_func_end Fog2_Main
-
- thumb_func_start Fog2_Finish
-Fog2_Finish: @ 807D09C
- push {r4,lr}
- bl sub_807D0FC
- ldr r0, _0807D0BC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D0C0 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807D0D6
- cmp r0, 0x1
- bgt _0807D0C4
- cmp r0, 0
- beq _0807D0CA
- b _0807D0EE
- .align 2, 0
-_0807D0BC: .4byte gUnknown_83C2BBC
-_0807D0C0: .4byte 0x000006ce
-_0807D0C4:
- cmp r0, 0x2
- beq _0807D0E2
- b _0807D0EE
-_0807D0CA:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x1
- bl Weather_SetTargetBlendCoeffs
- b _0807D0E6
-_0807D0D6:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807D0F2
- b _0807D0E6
-_0807D0E2:
- bl DestroyFog2Sprites
-_0807D0E6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807D0F2
-_0807D0EE:
- movs r0, 0
- b _0807D0F4
-_0807D0F2:
- movs r0, 0x1
-_0807D0F4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Fog2_Finish
-
- thumb_func_start sub_807D0FC
-sub_807D0FC: @ 807D0FC
- push {r4,r5,lr}
- ldr r0, _0807D174 @ =gUnknown_83C2BBC
- ldr r3, [r0]
- ldr r0, _0807D178 @ =0x0000071c
- adds r2, r3, r0
- ldrh r0, [r2]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r2]
- ldr r1, _0807D17C @ =0x0000ffff
- adds r4, r1, 0
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- bls _0807D128
- movs r0, 0xE4
- lsls r0, 3
- adds r1, r3, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- strh r5, [r2]
-_0807D128:
- ldr r1, _0807D180 @ =0x0000071e
- adds r2, r3, r1
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
- ands r0, r4
- cmp r0, 0x4
- bls _0807D144
- ldr r0, _0807D184 @ =0x00000722
- adds r1, r3, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- strh r5, [r2]
-_0807D144:
- ldr r0, _0807D188 @ =gSpriteCoordOffsetX
- movs r2, 0xE4
- lsls r2, 3
- adds r1, r3, r2
- ldrh r0, [r0]
- ldrh r1, [r1]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- subs r2, 0x8
- adds r1, r3, r2
- strh r0, [r1]
- ldr r1, _0807D18C @ =gSpriteCoordOffsetY
- adds r2, 0xA
- adds r0, r3, r2
- ldrh r0, [r0]
- ldrh r1, [r1]
- adds r0, r1
- subs r2, 0x8
- adds r1, r3, r2
- strh r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D174: .4byte gUnknown_83C2BBC
-_0807D178: .4byte 0x0000071c
-_0807D17C: .4byte 0x0000ffff
-_0807D180: .4byte 0x0000071e
-_0807D184: .4byte 0x00000722
-_0807D188: .4byte gSpriteCoordOffsetX
-_0807D18C: .4byte gSpriteCoordOffsetY
- thumb_func_end sub_807D0FC
-
- thumb_func_start CreateFog2Sprites
-CreateFog2Sprites: @ 807D190
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r0, _0807D1FC @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D200 @ =0x00000724
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D236
- ldr r0, _0807D204 @ =gUnknown_83C67E8
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- movs r6, 0
-_0807D1B4:
- adds r0, r6, 0
- movs r1, 0x5
- bl __udivsi3
- adds r5, r0, 0
- lsls r2, r5, 22
- asrs r2, 16
- ldr r0, _0807D208 @ =gUnknown_83C6804
- movs r1, 0
- movs r3, 0xFF
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0807D210
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0807D20C @ =gSprites
- adds r4, r0
- adds r0, r6, 0
- movs r1, 0x5
- bl __umodsi3
- strh r0, [r4, 0x2E]
- strh r5, [r4, 0x30]
- ldr r2, _0807D1FC @ =gUnknown_83C2BBC
- ldr r0, [r2]
- lsls r1, r6, 2
- movs r3, 0xA0
- lsls r3, 1
- adds r0, r3
- adds r0, r1
- str r4, [r0]
- b _0807D222
- .align 2, 0
-_0807D1FC: .4byte gUnknown_83C2BBC
-_0807D200: .4byte 0x00000724
-_0807D204: .4byte gUnknown_83C67E8
-_0807D208: .4byte gUnknown_83C6804
-_0807D20C: .4byte gSprites
-_0807D210:
- ldr r2, _0807D240 @ =gUnknown_83C2BBC
- ldr r1, [r2]
- lsls r0, r6, 2
- movs r3, 0xA0
- lsls r3, 1
- adds r1, r3
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807D222:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x13
- bls _0807D1B4
- ldr r0, [r2]
- ldr r1, _0807D244 @ =0x00000724
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807D236:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D240: .4byte gUnknown_83C2BBC
-_0807D244: .4byte 0x00000724
- thumb_func_end CreateFog2Sprites
-
- thumb_func_start DestroyFog2Sprites
-DestroyFog2Sprites: @ 807D248
- push {r4,r5,lr}
- ldr r0, _0807D290 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D294 @ =0x00000724
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807D28A
- movs r4, 0
- movs r0, 0xA0
- lsls r0, 1
- adds r5, r1, r0
-_0807D260:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807D26E
- bl DestroySprite
-_0807D26E:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807D260
- ldr r0, _0807D298 @ =0x00001203
- bl FreeSpriteTilesByTag
- ldr r0, _0807D290 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D294 @ =0x00000724
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807D28A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D290: .4byte gUnknown_83C2BBC
-_0807D294: .4byte 0x00000724
-_0807D298: .4byte 0x00001203
- thumb_func_end DestroyFog2Sprites
-
- thumb_func_start Fog2SpriteCallback
-Fog2SpriteCallback: @ 807D29C
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807D2EC @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D2F0 @ =0x0000071a
- adds r0, r1, r2
- ldrh r0, [r0]
- strh r0, [r3, 0x26]
- movs r4, 0xE3
- lsls r4, 3
- adds r2, r1, r4
- ldrh r1, [r2]
- adds r1, 0x20
- movs r4, 0x2E
- ldrsh r0, [r3, r4]
- lsls r0, 6
- adds r1, r0
- strh r1, [r3, 0x20]
- lsls r1, 16
- ldr r0, _0807D2F4 @ =0x010f0000
- cmp r1, r0
- ble _0807D2E4
- movs r0, 0xF0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r2]
- adds r1, r2
- movs r4, 0x2E
- ldrsh r2, [r3, r4]
- movs r0, 0x4
- subs r0, r2
- lsls r0, 6
- subs r1, r0
- ldr r0, _0807D2F8 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807D2E4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D2EC: .4byte gUnknown_83C2BBC
-_0807D2F0: .4byte 0x0000071a
-_0807D2F4: .4byte 0x010f0000
-_0807D2F8: .4byte 0x000001ff
- thumb_func_end Fog2SpriteCallback
-
- thumb_func_start Sandstorm_InitVars
-Sandstorm_InitVars: @ 807D2FC
- push {r4,lr}
- ldr r0, _0807D360 @ =gUnknown_83C2BBC
- ldr r3, [r0]
- ldr r0, _0807D364 @ =0x000006cc
- adds r1, r3, r0
- movs r2, 0
- movs r0, 0
- strh r0, [r1]
- ldr r1, _0807D368 @ =0x000006d2
- adds r0, r3, r1
- strb r2, [r0]
- ldr r4, _0807D36C @ =0x000006c1
- adds r0, r3, r4
- strb r2, [r0]
- ldr r0, _0807D370 @ =0x000006c2
- adds r1, r3, r0
- movs r0, 0x14
- strb r0, [r1]
- ldr r1, _0807D374 @ =0x00000716
- adds r0, r3, r1
- ldrb r2, [r0]
- cmp r2, 0
- bne _0807D358
- adds r4, 0x43
- adds r1, r3, r4
- adds r4, 0x4
- adds r0, r3, r4
- str r2, [r0]
- str r2, [r1]
- ldr r0, _0807D378 @ =0x00000712
- adds r1, r3, r0
- movs r0, 0x8
- strh r0, [r1]
- adds r4, 0xC
- adds r0, r3, r4
- strh r2, [r0]
- ldrh r2, [r1]
- cmp r2, 0x5F
- bls _0807D350
- movs r0, 0x80
- subs r0, r2
- strh r0, [r1]
-_0807D350:
- movs r0, 0
- movs r1, 0x10
- bl Weather_SetBlendCoeffs
-_0807D358:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D360: .4byte gUnknown_83C2BBC
-_0807D364: .4byte 0x000006cc
-_0807D368: .4byte 0x000006d2
-_0807D36C: .4byte 0x000006c1
-_0807D370: .4byte 0x000006c2
-_0807D374: .4byte 0x00000716
-_0807D378: .4byte 0x00000712
- thumb_func_end Sandstorm_InitVars
-
- thumb_func_start Sandstorm_InitAll
-Sandstorm_InitAll: @ 807D37C
- push {r4,lr}
- bl Sandstorm_InitVars
- ldr r0, _0807D3A4 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D3A8 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D39C
- adds r4, r1, r2
-_0807D392:
- bl Sandstorm_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807D392
-_0807D39C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D3A4: .4byte gUnknown_83C2BBC
-_0807D3A8: .4byte 0x000006d2
- thumb_func_end Sandstorm_InitAll
-
- thumb_func_start Sandstorm_Main
-Sandstorm_Main: @ 807D3AC
- push {r4,r5,lr}
- bl sub_807D4C4
- bl sub_807D48C
- ldr r0, _0807D3DC @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807D3E0 @ =0x00000712
- adds r1, r5, r0
- ldrh r0, [r1]
- cmp r0, 0x5F
- bls _0807D3C8
- movs r0, 0x20
- strh r0, [r1]
-_0807D3C8:
- ldr r0, _0807D3E4 @ =0x000006cc
- adds r4, r5, r0
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807D3F8
- cmp r0, 0x1
- bgt _0807D3E8
- cmp r0, 0
- beq _0807D3EE
- b _0807D41C
- .align 2, 0
-_0807D3DC: .4byte gUnknown_83C2BBC
-_0807D3E0: .4byte 0x00000712
-_0807D3E4: .4byte 0x000006cc
-_0807D3E8:
- cmp r0, 0x2
- beq _0807D404
- b _0807D41C
-_0807D3EE:
- bl CreateSandstormSprites_1
- bl CreateSandstormSprites_2
- b _0807D416
-_0807D3F8:
- movs r0, 0x10
- movs r1, 0
- movs r2, 0
- bl Weather_SetTargetBlendCoeffs
- b _0807D416
-_0807D404:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807D41C
- ldr r0, _0807D424 @ =0x000006d2
- adds r1, r5, r0
- movs r0, 0x1
- strb r0, [r1]
-_0807D416:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0807D41C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D424: .4byte 0x000006d2
- thumb_func_end Sandstorm_Main
-
- thumb_func_start Sandstorm_Finish
-Sandstorm_Finish: @ 807D428
- push {r4,lr}
- bl sub_807D4C4
- bl sub_807D48C
- ldr r0, _0807D44C @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D450 @ =0x000006ce
- adds r4, r0, r1
- ldrh r0, [r4]
- cmp r0, 0x1
- beq _0807D466
- cmp r0, 0x1
- bgt _0807D454
- cmp r0, 0
- beq _0807D45A
- b _0807D47E
- .align 2, 0
-_0807D44C: .4byte gUnknown_83C2BBC
-_0807D450: .4byte 0x000006ce
-_0807D454:
- cmp r0, 0x2
- beq _0807D472
- b _0807D47E
-_0807D45A:
- movs r0, 0
- movs r1, 0x10
- movs r2, 0
- bl Weather_SetTargetBlendCoeffs
- b _0807D476
-_0807D466:
- bl Weather_UpdateBlend
- lsls r0, 24
- cmp r0, 0
- beq _0807D482
- b _0807D476
-_0807D472:
- bl sub_807D544
-_0807D476:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0807D482
-_0807D47E:
- movs r0, 0
- b _0807D484
-_0807D482:
- movs r0, 0x1
-_0807D484:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end Sandstorm_Finish
-
- thumb_func_start sub_807D48C
-sub_807D48C: @ 807D48C
- push {lr}
- ldr r0, _0807D4B8 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807D4BC @ =0x00000714
- adds r3, r2, r0
- ldrh r0, [r3]
- adds r1, r0, 0x1
- strh r1, [r3]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x4
- bls _0807D4B2
- ldr r1, _0807D4C0 @ =0x00000712
- adds r0, r2, r1
- ldrh r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strh r1, [r0]
- strh r2, [r3]
-_0807D4B2:
- pop {r0}
- bx r0
- .align 2, 0
-_0807D4B8: .4byte gUnknown_83C2BBC
-_0807D4BC: .4byte 0x00000714
-_0807D4C0: .4byte 0x00000712
- thumb_func_end sub_807D48C
-
- thumb_func_start sub_807D4C4
-sub_807D4C4: @ 807D4C4
- push {r4-r6,lr}
- ldr r0, _0807D528 @ =gUnknown_83C2BBC
- ldr r2, [r0]
- ldr r0, _0807D52C @ =0x00000704
- adds r4, r2, r0
- ldr r6, _0807D530 @ =gSineTable
- ldr r1, _0807D534 @ =0x00000712
- adds r5, r2, r1
- ldrh r0, [r5]
- lsls r0, 1
- adds r0, r6
- movs r3, 0
- ldrsh r1, [r0, r3]
- lsls r1, 2
- ldr r0, [r4]
- subs r0, r1
- str r0, [r4]
- movs r0, 0xE1
- lsls r0, 3
- adds r3, r2, r0
- ldrh r0, [r5]
- lsls r0, 1
- adds r0, r6
- movs r5, 0
- ldrsh r1, [r0, r5]
- ldr r0, [r3]
- subs r0, r1
- str r0, [r3]
- ldr r1, _0807D538 @ =gSpriteCoordOffsetX
- ldr r0, [r4]
- lsrs r0, 8
- ldrh r1, [r1]
- adds r0, r1
- movs r1, 0xFF
- ands r0, r1
- ldr r4, _0807D53C @ =0x0000070e
- adds r1, r2, r4
- strh r0, [r1]
- ldr r1, _0807D540 @ =gSpriteCoordOffsetY
- ldr r0, [r3]
- lsrs r0, 8
- ldrh r1, [r1]
- adds r0, r1
- movs r5, 0xE2
- lsls r5, 3
- adds r2, r5
- strh r0, [r2]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D528: .4byte gUnknown_83C2BBC
-_0807D52C: .4byte 0x00000704
-_0807D530: .4byte gSineTable
-_0807D534: .4byte 0x00000712
-_0807D538: .4byte gSpriteCoordOffsetX
-_0807D53C: .4byte 0x0000070e
-_0807D540: .4byte gSpriteCoordOffsetY
- thumb_func_end sub_807D4C4
-
- thumb_func_start sub_807D544
-sub_807D544: @ 807D544
- push {r4,r5,lr}
- ldr r0, _0807D5C8 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D5CC @ =0x00000716
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807D586
- movs r4, 0
- movs r0, 0xC8
- lsls r0, 1
- adds r5, r1, r0
-_0807D55C:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807D56A
- bl DestroySprite
-_0807D56A:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0807D55C
- ldr r0, _0807D5C8 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D5CC @ =0x00000716
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, _0807D5D0 @ =0x00001204
- bl FreeSpriteTilesByTag
-_0807D586:
- ldr r0, _0807D5C8 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D5D4 @ =0x00000717
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807D5C0
- movs r4, 0
- movs r0, 0xF0
- lsls r0, 1
- adds r5, r1, r0
-_0807D59C:
- lsls r0, r4, 2
- adds r0, r5, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _0807D5AA
- bl DestroySprite
-_0807D5AA:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x4
- bls _0807D59C
- ldr r0, _0807D5C8 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D5D4 @ =0x00000717
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807D5C0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D5C8: .4byte gUnknown_83C2BBC
-_0807D5CC: .4byte 0x00000716
-_0807D5D0: .4byte 0x00001204
-_0807D5D4: .4byte 0x00000717
- thumb_func_end sub_807D544
-
- thumb_func_start CreateSandstormSprites_1
-CreateSandstormSprites_1: @ 807D5D8
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r0, _0807D648 @ =gUnknown_83C2BBC
- ldr r0, [r0]
- ldr r1, _0807D64C @ =0x00000716
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D686
- ldr r0, _0807D650 @ =gUnknown_83C6854
- bl LoadSpriteSheet
- ldr r0, _0807D654 @ =gUnknown_83C2D20
- bl sub_807ABC0
- movs r7, 0
-_0807D5F8:
- adds r0, r7, 0
- movs r1, 0x5
- bl __udivsi3
- adds r6, r0, 0
- lsls r2, r6, 22
- asrs r2, 16
- ldr r0, _0807D658 @ =gUnknown_83C683C
- movs r1, 0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _0807D660
- ldr r2, _0807D648 @ =gUnknown_83C2BBC
- ldr r5, [r2]
- lsls r0, r7, 2
- movs r3, 0xC8
- lsls r3, 1
- adds r5, r3
- adds r5, r0
- lsls r4, r1, 4
- adds r4, r1
- lsls r4, 2
- ldr r0, _0807D65C @ =gSprites
- adds r4, r0
- str r4, [r5]
- adds r0, r7, 0
- movs r1, 0x5
- str r2, [sp]
- bl __umodsi3
- strh r0, [r4, 0x2E]
- ldr r0, [r5]
- strh r6, [r0, 0x30]
- ldr r2, [sp]
- b _0807D672
- .align 2, 0
-_0807D648: .4byte gUnknown_83C2BBC
-_0807D64C: .4byte 0x00000716
-_0807D650: .4byte gUnknown_83C6854
-_0807D654: .4byte gUnknown_83C2D20
-_0807D658: .4byte gUnknown_83C683C
-_0807D65C: .4byte gSprites
-_0807D660:
- ldr r2, _0807D690 @ =gUnknown_83C2BBC
- ldr r1, [r2]
- lsls r0, r7, 2
- movs r3, 0xC8
- lsls r3, 1
- adds r1, r3
- adds r1, r0
- movs r0, 0
- str r0, [r1]
-_0807D672:
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0x13
- bls _0807D5F8
- ldr r0, [r2]
- ldr r1, _0807D694 @ =0x00000716
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0807D686:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D690: .4byte gUnknown_83C2BBC
-_0807D694: .4byte 0x00000716
- thumb_func_end CreateSandstormSprites_1
-
- thumb_func_start CreateSandstormSprites_2
-CreateSandstormSprites_2: @ 807D698
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, _0807D740 @ =gUnknown_83C2BBC
- ldr r0, [r4]
- ldr r1, _0807D744 @ =0x00000717
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D784
- movs r7, 0
- mov r9, r4
- movs r2, 0
- mov r10, r2
-_0807D6B8:
- lsls r0, r7, 1
- mov r8, r0
- adds r6, r0, r7
- lsls r5, r6, 4
- adds r1, r5, 0
- adds r1, 0x18
- lsls r1, 16
- asrs r1, 16
- ldr r0, _0807D748 @ =gUnknown_83C683C
- movs r2, 0xD0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _0807D75C
- mov r2, r9
- ldr r4, [r2]
- lsls r0, r7, 2
- movs r2, 0xF0
- lsls r2, 1
- adds r4, r2
- adds r4, r0
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- ldr r0, _0807D74C @ =gSprites
- adds r2, r0
- str r2, [r4]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x3]
- ldr r1, [r4]
- adds r0, r6, r5
- strh r0, [r1, 0x30]
- ldr r1, [r4]
- movs r0, 0x8
- strh r0, [r1, 0x2E]
- ldr r0, [r4]
- mov r1, r10
- strh r1, [r0, 0x32]
- ldr r1, [r4]
- ldr r0, _0807D750 @ =0x00006730
- strh r0, [r1, 0x36]
- ldr r1, [r4]
- ldr r0, _0807D754 @ =gUnknown_83C685C
- add r0, r8
- ldrh r0, [r0]
- strh r0, [r1, 0x34]
- ldr r0, [r4]
- movs r1, 0x1
- bl StartSpriteAnim
- ldr r0, [r4]
- movs r1, 0
- movs r2, 0x2
- movs r3, 0
- bl CalcCenterToCornerVec
- ldr r1, [r4]
- ldr r0, _0807D758 @ =SandstormSpriteCallback2
- str r0, [r1, 0x1C]
- b _0807D76E
- .align 2, 0
-_0807D740: .4byte gUnknown_83C2BBC
-_0807D744: .4byte 0x00000717
-_0807D748: .4byte gUnknown_83C683C
-_0807D74C: .4byte gSprites
-_0807D750: .4byte 0x00006730
-_0807D754: .4byte gUnknown_83C685C
-_0807D758: .4byte SandstormSpriteCallback2
-_0807D75C:
- mov r2, r9
- ldr r0, [r2]
- lsls r1, r7, 2
- movs r2, 0xF0
- lsls r2, 1
- adds r0, r2
- adds r0, r1
- mov r1, r10
- str r1, [r0]
-_0807D76E:
- mov r2, r9
- ldr r0, [r2]
- ldr r1, _0807D794 @ =0x00000717
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0x4
- bls _0807D6B8
-_0807D784:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D794: .4byte 0x00000717
- thumb_func_end CreateSandstormSprites_2
-
- thumb_func_start SandstormSpriteCallback1
-SandstormSpriteCallback1: @ 807D798
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _0807D7E8 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- movs r2, 0xE2
- lsls r2, 3
- adds r0, r1, r2
- ldrh r0, [r0]
- strh r0, [r3, 0x26]
- ldr r4, _0807D7EC @ =0x0000070e
- adds r2, r1, r4
- ldrh r1, [r2]
- adds r1, 0x20
- movs r4, 0x2E
- ldrsh r0, [r3, r4]
- lsls r0, 6
- adds r1, r0
- strh r1, [r3, 0x20]
- lsls r1, 16
- ldr r0, _0807D7F0 @ =0x010f0000
- cmp r1, r0
- ble _0807D7E0
- movs r0, 0xF0
- lsls r0, 1
- adds r1, r0, 0
- ldrh r2, [r2]
- adds r1, r2
- movs r4, 0x2E
- ldrsh r2, [r3, r4]
- movs r0, 0x4
- subs r0, r2
- lsls r0, 6
- subs r1, r0
- ldr r0, _0807D7F4 @ =0x000001ff
- ands r1, r0
- strh r1, [r3, 0x20]
-_0807D7E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D7E8: .4byte gUnknown_83C2BBC
-_0807D7EC: .4byte 0x0000070e
-_0807D7F0: .4byte 0x010f0000
-_0807D7F4: .4byte 0x000001ff
- thumb_func_end SandstormSpriteCallback1
-
- thumb_func_start SandstormSpriteCallback2
-SandstormSpriteCallback2: @ 807D7F8
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x34]
- subs r0, 0x1
- strh r0, [r2, 0x34]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _0807D812
- ldr r0, _0807D818 @ =SandstormSpriteCallback3
- str r0, [r2, 0x1C]
-_0807D812:
- pop {r0}
- bx r0
- .align 2, 0
-_0807D818: .4byte SandstormSpriteCallback3
- thumb_func_end SandstormSpriteCallback2
-
- thumb_func_start SandstormSpriteCallback3
-SandstormSpriteCallback3: @ 807D81C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x22]
- subs r0, 0x1
- strh r0, [r5, 0x22]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x30
- negs r1, r1
- cmp r0, r1
- bge _0807D83A
- movs r0, 0xD0
- strh r0, [r5, 0x22]
- movs r0, 0x4
- strh r0, [r5, 0x2E]
-_0807D83A:
- movs r0, 0x2E
- ldrsh r4, [r5, r0]
- ldr r3, _0807D88C @ =gSineTable
- movs r2, 0x30
- ldrsh r1, [r5, r2]
- lsls r0, r1, 1
- adds r0, r3
- movs r2, 0
- ldrsh r0, [r0, r2]
- adds r2, r4, 0
- muls r2, r0
- adds r1, 0x40
- lsls r1, 1
- adds r1, r3
- movs r3, 0
- ldrsh r0, [r1, r3]
- muls r0, r4
- lsrs r2, 8
- strh r2, [r5, 0x24]
- lsrs r0, 8
- strh r0, [r5, 0x26]
- ldrh r0, [r5, 0x30]
- adds r0, 0xA
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x32]
- adds r0, 0x1
- strh r0, [r5, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- ble _0807D886
- movs r0, 0
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
-_0807D886:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D88C: .4byte gSineTable
- thumb_func_end SandstormSpriteCallback3
-
- thumb_func_start Weather11_InitVars
-Weather11_InitVars: @ 807D890
- ldr r0, _0807D8B0 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807D8B4 @ =0x000006cc
- adds r2, r1, r0
- movs r0, 0
- strh r0, [r2]
- ldr r0, _0807D8B8 @ =0x000006c1
- adds r2, r1, r0
- movs r0, 0x3
- strb r0, [r2]
- ldr r0, _0807D8BC @ =0x000006c2
- adds r1, r0
- movs r0, 0x14
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0807D8B0: .4byte gUnknown_83C2BBC
-_0807D8B4: .4byte 0x000006cc
-_0807D8B8: .4byte 0x000006c1
-_0807D8BC: .4byte 0x000006c2
- thumb_func_end Weather11_InitVars
-
- thumb_func_start Weather11_InitAll
-Weather11_InitAll: @ 807D8C0
- push {lr}
- bl Weather11_InitVars
- pop {r0}
- bx r0
- thumb_func_end Weather11_InitAll
-
- thumb_func_start nullsub_49
-nullsub_49: @ 807D8CC
- bx lr
- thumb_func_end nullsub_49
-
- thumb_func_start sub_807D8D0
-sub_807D8D0: @ 807D8D0
- movs r0, 0
- bx lr
- thumb_func_end sub_807D8D0
-
- thumb_func_start Bubbles_InitVars
-Bubbles_InitVars: @ 807D8D4
- push {r4,r5,lr}
- bl Fog1_InitVars
- ldr r0, _0807D914 @ =gUnknown_83C2BBC
- ldr r4, [r0]
- ldr r1, _0807D918 @ =0x0000072e
- adds r0, r4, r1
- ldrb r5, [r0]
- cmp r5, 0
- bne _0807D90C
- ldr r0, _0807D91C @ =gUnknown_83C6870
- bl LoadSpriteSheet
- movs r2, 0xE5
- lsls r2, 3
- adds r0, r4, r2
- strh r5, [r0]
- ldr r0, _0807D920 @ =gUnknown_83C6868
- ldrb r1, [r0]
- subs r2, 0x2
- adds r0, r4, r2
- strh r1, [r0]
- ldr r1, _0807D924 @ =0x0000072a
- adds r0, r4, r1
- strh r5, [r0]
- adds r2, 0x6
- adds r0, r4, r2
- strh r5, [r0]
-_0807D90C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D914: .4byte gUnknown_83C2BBC
-_0807D918: .4byte 0x0000072e
-_0807D91C: .4byte gUnknown_83C6870
-_0807D920: .4byte gUnknown_83C6868
-_0807D924: .4byte 0x0000072a
- thumb_func_end Bubbles_InitVars
-
- thumb_func_start Bubbles_InitAll
-Bubbles_InitAll: @ 807D928
- push {r4,lr}
- bl Bubbles_InitVars
- ldr r0, _0807D950 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r2, _0807D954 @ =0x000006d2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807D948
- adds r4, r1, r2
-_0807D93E:
- bl Bubbles_Main
- ldrb r0, [r4]
- cmp r0, 0
- beq _0807D93E
-_0807D948:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D950: .4byte gUnknown_83C2BBC
-_0807D954: .4byte 0x000006d2
- thumb_func_end Bubbles_InitAll
-
- thumb_func_start Bubbles_Main
-Bubbles_Main: @ 807D958
- push {r4-r7,lr}
- bl Fog1_Main
- ldr r0, _0807D9B8 @ =gUnknown_83C2BBC
- ldr r5, [r0]
- ldr r0, _0807D9BC @ =0x00000726
- adds r4, r5, r0
- ldrh r0, [r4]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r4]
- ldr r1, _0807D9C0 @ =0x0000ffff
- adds r7, r1, 0
- ldr r2, _0807D9C4 @ =gUnknown_83C6868
- movs r1, 0xE5
- lsls r1, 3
- adds r3, r5, r1
- ldrh r1, [r3]
- adds r1, r2
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1]
- cmp r0, r1
- bls _0807D9B0
- strh r6, [r4]
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- ands r0, r7
- cmp r0, 0x7
- bls _0807D998
- strh r6, [r3]
-_0807D998:
- ldr r0, _0807D9C8 @ =0x0000072a
- adds r4, r5, r0
- ldrh r0, [r4]
- bl sub_807D9E8
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- ands r0, r7
- cmp r0, 0xC
- bls _0807D9B0
- strh r6, [r4]
-_0807D9B0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807D9B8: .4byte gUnknown_83C2BBC
-_0807D9BC: .4byte 0x00000726
-_0807D9C0: .4byte 0x0000ffff
-_0807D9C4: .4byte gUnknown_83C6868
-_0807D9C8: .4byte 0x0000072a
- thumb_func_end Bubbles_Main
-
- thumb_func_start Bubbles_Finish
-Bubbles_Finish: @ 807D9CC
- push {lr}
- bl Fog1_Finish
- lsls r0, 24
- cmp r0, 0
- beq _0807D9DC
- movs r0, 0x1
- b _0807D9E2
-_0807D9DC:
- bl sub_807DA70
- movs r0, 0
-_0807D9E2:
- pop {r1}
- bx r1
- thumb_func_end Bubbles_Finish
-
- thumb_func_start sub_807D9E8
-sub_807D9E8: @ 807D9E8
- push {r4,lr}
- lsls r0, 16
- ldr r1, _0807DA58 @ =gUnknown_83C6878
- lsrs r0, 14
- adds r3, r0, r1
- adds r1, 0x2
- adds r0, r1
- ldr r1, _0807DA5C @ =gSpriteCoordOffsetY
- ldrh r2, [r0]
- ldrh r0, [r1]
- subs r2, r0
- ldr r0, _0807DA60 @ =gUnknown_83C68BC
- movs r4, 0
- ldrsh r1, [r3, r4]
- lsls r2, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _0807DA50
- ldr r0, _0807DA64 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r3]
- movs r0, 0
- strh r0, [r1, 0x2E]
- strh r0, [r1, 0x30]
- strh r0, [r1, 0x32]
- ldr r0, _0807DA68 @ =gUnknown_83C2BBC
- ldr r1, [r0]
- ldr r0, _0807DA6C @ =0x0000072c
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
-_0807DA50:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807DA58: .4byte gUnknown_83C6878
-_0807DA5C: .4byte gSpriteCoordOffsetY
-_0807DA60: .4byte gUnknown_83C68BC
-_0807DA64: .4byte gSprites
-_0807DA68: .4byte gUnknown_83C2BBC
-_0807DA6C: .4byte 0x0000072c
- thumb_func_end sub_807D9E8
-
- thumb_func_start sub_807DA70
-sub_807DA70: @ 807DA70
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _0807DAA8 @ =gSprites
-_0807DA76:
- lsls r0, r4, 4
- adds r0, r4
- lsls r2, r0, 2
- adds r0, r5, 0
- adds r0, 0x14
- adds r0, r2, r0
- ldr r1, [r0]
- ldr r0, _0807DAAC @ =gUnknown_83C68BC
- cmp r1, r0
- bne _0807DA90
- adds r0, r2, r5
- bl DestroySprite
-_0807DA90:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x3F
- bls _0807DA76
- ldr r0, _0807DAB0 @ =0x00001205
- bl FreeSpriteTilesByTag
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0807DAA8: .4byte gSprites
-_0807DAAC: .4byte gUnknown_83C68BC
-_0807DAB0: .4byte 0x00001205
- thumb_func_end sub_807DA70
-
- thumb_func_start unc_0807DAB4
-unc_0807DAB4: @ 807DAB4
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x2E]
- movs r2, 0
- adds r0, 0x2
- strh r0, [r1, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- ble _0807DAF4
- strh r2, [r1, 0x2E]
- movs r3, 0x30
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bne _0807DAE6
- ldrh r0, [r1, 0x24]
- adds r0, 0x1
- strh r0, [r1, 0x24]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _0807DAF4
- movs r0, 0x1
- strh r0, [r1, 0x30]
- b _0807DAF4
-_0807DAE6:
- ldrh r0, [r1, 0x24]
- subs r0, 0x1
- strh r0, [r1, 0x24]
- lsls r0, 16
- cmp r0, 0
- bgt _0807DAF4
- strh r2, [r1, 0x30]
-_0807DAF4:
- ldrh r0, [r1, 0x22]
- subs r0, 0x3
- strh r0, [r1, 0x22]
- ldrh r0, [r1, 0x32]
- adds r0, 0x1
- strh r0, [r1, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x77
- ble _0807DB0E
- adds r0, r1, 0
- bl DestroySprite
-_0807DB0E:
- pop {r0}
- bx r0
- thumb_func_end unc_0807DAB4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/overworld.s b/asm/overworld.s
index 27235fa18..179d79fdc 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -1728,7 +1728,7 @@ sub_8055864: @ 8055864
_080558D4:
lsls r0, r4, 24
lsrs r0, 24
- bl sub_807AB74
+ bl ApplyWeatherGammaShiftToPal
adds r4, 0x1
cmp r4, 0xC
ble _080558D4
@@ -4644,8 +4644,8 @@ _08057050:
bl InitObjectEventPalettes
_08057056:
bl FieldEffectActiveListClear
- bl sub_8079C08
- bl sub_807B1B8
+ bl StartWeather
+ bl ResumePausedWeather
cmp r4, 0
bne _0805706A
bl SetUpFieldTasks
@@ -5400,8 +5400,8 @@ _0805769C:
bl ResetCameraUpdateInfo
bl InstallCameraPanAheadCallback
bl FieldEffectActiveListClear
- bl sub_8079C08
- bl sub_807B1B8
+ bl StartWeather
+ bl ResumePausedWeather
bl SetUpFieldTasks
bl mapheader_run_script_with_tag_x5
b _0805772A
@@ -5451,7 +5451,7 @@ _08057712:
ldr r2, _08057738 @ =0x3fffffff
movs r0, 0
movs r1, 0
- bl FieldWeather_StartFadingOutCreditsMap
+ bl FadeSelectedPals
_0805772A:
ldrb r0, [r4]
adds r0, 0x1
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
deleted file mode 100644
index 3227d5dcd..000000000
--- a/asm/pokemon_storage_system.s
+++ /dev/null
@@ -1,23034 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_808B9C0
-sub_808B9C0: @ 808B9C0
- push {lr}
- ldr r1, _0808B9D0 @ =gPokemonStoragePtr
- ldr r1, [r1]
- ldr r2, _0808B9D4 @ =0x000083d0
- bl memcpy
- pop {r0}
- bx r0
- .align 2, 0
-_0808B9D0: .4byte gPokemonStoragePtr
-_0808B9D4: .4byte 0x000083d0
- thumb_func_end sub_808B9C0
-
- thumb_func_start sub_808B9D8
-sub_808B9D8: @ 808B9D8
- push {lr}
- adds r1, r0, 0
- ldr r0, _0808B9EC @ =gPokemonStoragePtr
- ldr r0, [r0]
- ldr r2, _0808B9F0 @ =0x000083d0
- bl memcpy
- pop {r0}
- bx r0
- .align 2, 0
-_0808B9EC: .4byte gPokemonStoragePtr
-_0808B9F0: .4byte 0x000083d0
- thumb_func_end sub_808B9D8
-
- thumb_func_start StorageGetCurrentBox
-StorageGetCurrentBox: @ 808B9F4
- ldr r0, _0808B9FC @ =gPokemonStoragePtr
- ldr r0, [r0]
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0808B9FC: .4byte gPokemonStoragePtr
- thumb_func_end StorageGetCurrentBox
-
- thumb_func_start sub_808BA00
-sub_808BA00: @ 808BA00
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xD
- bhi _0808BA10
- ldr r0, _0808BA14 @ =gPokemonStoragePtr
- ldr r0, [r0]
- strb r1, [r0]
-_0808BA10:
- pop {r0}
- bx r0
- .align 2, 0
-_0808BA14: .4byte gPokemonStoragePtr
- thumb_func_end sub_808BA00
-
- thumb_func_start GetBoxMonDataFromAnyBox
-GetBoxMonDataFromAnyBox: @ 808BA18
- push {r4,r5,lr}
- adds r5, r2, 0
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r3, 0xD
- bhi _0808BA54
- cmp r4, 0x1D
- bhi _0808BA54
- ldr r2, _0808BA50 @ =gPokemonStoragePtr
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 5
- adds r1, 0x4
- ldr r0, [r2]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 4
- adds r0, r1
- adds r1, r5, 0
- bl GetBoxMonData
- b _0808BA56
- .align 2, 0
-_0808BA50: .4byte gPokemonStoragePtr
-_0808BA54:
- movs r0, 0
-_0808BA56:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetBoxMonDataFromAnyBox
-
- thumb_func_start SetBoxMonDataFromAnyBox
-SetBoxMonDataFromAnyBox: @ 808BA5C
- push {r4-r6,lr}
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r3, 0xD
- bhi _0808BA94
- cmp r4, 0x1D
- bhi _0808BA94
- ldr r2, _0808BA9C @ =gPokemonStoragePtr
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 5
- adds r1, 0x4
- ldr r0, [r2]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 4
- adds r0, r1
- adds r1, r5, 0
- adds r2, r6, 0
- bl SetBoxMonData
-_0808BA94:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808BA9C: .4byte gPokemonStoragePtr
- thumb_func_end SetBoxMonDataFromAnyBox
-
- thumb_func_start GetBoxMonDataFromSelectedBox
-GetBoxMonDataFromSelectedBox: @ 808BAA0
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- lsls r3, 24
- lsrs r3, 24
- ldr r0, _0808BABC @ =gPokemonStoragePtr
- ldr r0, [r0]
- ldrb r0, [r0]
- adds r1, r3, 0
- bl GetBoxMonDataFromAnyBox
- pop {r1}
- bx r1
- .align 2, 0
-_0808BABC: .4byte gPokemonStoragePtr
- thumb_func_end GetBoxMonDataFromSelectedBox
-
- thumb_func_start SetBoxMonDataFromSelectedBox
-SetBoxMonDataFromSelectedBox: @ 808BAC0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r3, r2, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0808BAE0 @ =gPokemonStoragePtr
- ldr r0, [r0]
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r2, r5, 0
- bl SetBoxMonDataFromAnyBox
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808BAE0: .4byte gPokemonStoragePtr
- thumb_func_end SetBoxMonDataFromSelectedBox
-
- thumb_func_start GetBoxMonNickFromAnyBox
-GetBoxMonNickFromAnyBox: @ 808BAE4
- push {r4,r5,lr}
- adds r5, r2, 0
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r3, 0xD
- bhi _0808BB20
- cmp r4, 0x1D
- bhi _0808BB20
- ldr r2, _0808BB1C @ =gPokemonStoragePtr
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 5
- adds r1, 0x4
- ldr r0, [r2]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 4
- adds r0, r1
- movs r1, 0x2
- adds r2, r5, 0
- bl GetBoxMonData
- b _0808BB24
- .align 2, 0
-_0808BB1C: .4byte gPokemonStoragePtr
-_0808BB20:
- movs r0, 0xFF
- strb r0, [r5]
-_0808BB24:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetBoxMonNickFromAnyBox
-
- thumb_func_start SetBoxMonNickFromAnyBox
-SetBoxMonNickFromAnyBox: @ 808BB2C
- push {r4,r5,lr}
- adds r5, r2, 0
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r3, 0xD
- bhi _0808BB62
- cmp r4, 0x1D
- bhi _0808BB62
- ldr r2, _0808BB68 @ =gPokemonStoragePtr
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 5
- adds r1, 0x4
- ldr r0, [r2]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 4
- adds r0, r1
- movs r1, 0x2
- adds r2, r5, 0
- bl SetBoxMonData
-_0808BB62:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808BB68: .4byte gPokemonStoragePtr
- thumb_func_end SetBoxMonNickFromAnyBox
-
- thumb_func_start GetAndCopyBoxMonDataFromAnyBox
-GetAndCopyBoxMonDataFromAnyBox: @ 808BB6C
- push {r4-r6,lr}
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r3, 0xD
- bhi _0808BBAC
- cmp r4, 0x1D
- bhi _0808BBAC
- ldr r2, _0808BBA8 @ =gPokemonStoragePtr
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 5
- adds r1, 0x4
- ldr r0, [r2]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 4
- adds r0, r1
- adds r1, r5, 0
- adds r2, r6, 0
- bl GetBoxMonData
- b _0808BBAE
- .align 2, 0
-_0808BBA8: .4byte gPokemonStoragePtr
-_0808BBAC:
- movs r0, 0
-_0808BBAE:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end GetAndCopyBoxMonDataFromAnyBox
-
- thumb_func_start CopyBoxMonFromAnyBox
-CopyBoxMonFromAnyBox: @ 808BBB4
- push {r4,r5,lr}
- adds r5, r2, 0
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r4, 0xD
- bhi _0808BBEA
- cmp r1, 0x1D
- bhi _0808BBEA
- ldr r0, _0808BBF0 @ =gPokemonStoragePtr
- ldr r0, [r0]
- lsls r3, r1, 2
- adds r3, r1
- lsls r3, 4
- lsls r2, r4, 2
- adds r2, r4
- lsls r1, r2, 4
- subs r1, r2
- lsls r1, 5
- adds r3, r1
- adds r0, r3
- adds r0, 0x4
- adds r1, r5, 0
- movs r2, 0x50
- bl memcpy
-_0808BBEA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808BBF0: .4byte gPokemonStoragePtr
- thumb_func_end CopyBoxMonFromAnyBox
-
- thumb_func_start sub_808BBF4
-sub_808BBF4: @ 808BBF4
- push {r4,r5,lr}
- adds r5, r2, 0
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r2, r1, 24
- cmp r4, 0xD
- bhi _0808BC2A
- cmp r2, 0x1D
- bhi _0808BC2A
- ldr r0, _0808BC30 @ =gPokemonStoragePtr
- ldr r1, [r0]
- lsls r3, r2, 2
- adds r3, r2
- lsls r3, 4
- lsls r2, r4, 2
- adds r2, r4
- lsls r0, r2, 4
- subs r0, r2
- lsls r0, 5
- adds r3, r0
- adds r1, r3
- adds r1, 0x4
- adds r0, r5, 0
- movs r2, 0x50
- bl memcpy
-_0808BC2A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808BC30: .4byte gPokemonStoragePtr
- thumb_func_end sub_808BBF4
-
- thumb_func_start sub_808BC34
-sub_808BC34: @ 808BC34
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- ldr r4, [sp, 0x30]
- ldr r5, [sp, 0x34]
- ldr r6, [sp, 0x3C]
- mov r12, r6
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 16
- lsrs r2, 16
- mov r9, r2
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- mov r0, r12
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r7, 0xD
- bhi _0808BCA0
- cmp r6, 0x1D
- bhi _0808BCA0
- ldr r2, _0808BCB0 @ =gPokemonStoragePtr
- lsls r0, r7, 2
- adds r0, r7
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 5
- adds r1, 0x4
- ldr r0, [r2]
- adds r0, r1
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 4
- adds r0, r1
- str r5, [sp]
- ldr r1, [sp, 0x38]
- str r1, [sp, 0x4]
- str r3, [sp, 0x8]
- ldr r1, [sp, 0x40]
- str r1, [sp, 0xC]
- mov r1, r9
- mov r2, r8
- adds r3, r4, 0
- bl CreateBoxMon
-_0808BCA0:
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808BCB0: .4byte gPokemonStoragePtr
- thumb_func_end sub_808BC34
-
- thumb_func_start sub_808BCB4
-sub_808BCB4: @ 808BCB4
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r3, 0xD
- bhi _0808BCE4
- cmp r4, 0x1D
- bhi _0808BCE4
- ldr r2, _0808BCEC @ =gPokemonStoragePtr
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 5
- adds r1, 0x4
- ldr r0, [r2]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 4
- adds r0, r1
- bl ZeroBoxMonData
-_0808BCE4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808BCEC: .4byte gPokemonStoragePtr
- thumb_func_end sub_808BCB4
-
- thumb_func_start sub_808BCF0
-sub_808BCF0: @ 808BCF0
- push {r4,r5,lr}
- adds r5, r2, 0
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r3, 0xD
- bhi _0808BD24
- cmp r4, 0x1D
- bhi _0808BD24
- ldr r2, _0808BD2C @ =gPokemonStoragePtr
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 5
- adds r1, 0x4
- ldr r0, [r2]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 4
- adds r0, r1
- adds r1, r5, 0
- bl BoxMonToMon
-_0808BD24:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808BD2C: .4byte gPokemonStoragePtr
- thumb_func_end sub_808BCF0
-
- thumb_func_start GetBoxedMonPtr
-GetBoxedMonPtr: @ 808BD30
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r3, 0xD
- bhi _0808BD64
- cmp r4, 0x1D
- bhi _0808BD64
- ldr r2, _0808BD60 @ =gPokemonStoragePtr
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 5
- adds r1, 0x4
- ldr r0, [r2]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 4
- adds r0, r1
- b _0808BD66
- .align 2, 0
-_0808BD60: .4byte gPokemonStoragePtr
-_0808BD64:
- movs r0, 0
-_0808BD66:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetBoxedMonPtr
-
- thumb_func_start GetBoxNamePtr
-GetBoxNamePtr: @ 808BD6C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xD
- bls _0808BD7A
- movs r0, 0
- b _0808BD88
-_0808BD7A:
- ldr r0, _0808BD8C @ =gPokemonStoragePtr
- lsls r1, r2, 3
- adds r1, r2
- ldr r2, _0808BD90 @ =0x00008344
- adds r1, r2
- ldr r0, [r0]
- adds r0, r1
-_0808BD88:
- pop {r1}
- bx r1
- .align 2, 0
-_0808BD8C: .4byte gPokemonStoragePtr
-_0808BD90: .4byte 0x00008344
- thumb_func_end GetBoxNamePtr
-
- thumb_func_start sub_808BD94
-sub_808BD94: @ 808BD94
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xD
- bls _0808BDA2
- movs r0, 0
- b _0808BDAE
-_0808BDA2:
- ldr r0, _0808BDB4 @ =gPokemonStoragePtr
- ldr r0, [r0]
- ldr r2, _0808BDB8 @ =0x000083c2
- adds r0, r2
- adds r0, r1
- ldrb r0, [r0]
-_0808BDAE:
- pop {r1}
- bx r1
- .align 2, 0
-_0808BDB4: .4byte gPokemonStoragePtr
-_0808BDB8: .4byte 0x000083c2
- thumb_func_end sub_808BD94
-
- thumb_func_start sub_808BDBC
-sub_808BDBC: @ 808BDBC
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r2, 0xD
- bhi _0808BDDA
- cmp r1, 0xF
- bhi _0808BDDA
- ldr r0, _0808BDE0 @ =gPokemonStoragePtr
- ldr r0, [r0]
- ldr r3, _0808BDE4 @ =0x000083c2
- adds r0, r3
- adds r0, r2
- strb r1, [r0]
-_0808BDDA:
- pop {r0}
- bx r0
- .align 2, 0
-_0808BDE0: .4byte gPokemonStoragePtr
-_0808BDE4: .4byte 0x000083c2
- thumb_func_end sub_808BDBC
-
- thumb_func_start sub_808BDE8
-sub_808BDE8: @ 808BDE8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- lsls r1, 24
- lsrs r0, r1, 24
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r3, 24
- adds r4, r3, 0
- ldr r2, _0808BE4C @ =0x0000ffff
- cmp r3, 0x1
- bhi _0808BE0A
- movs r2, 0x1
- cmp r3, 0x1
- beq _0808BE0E
-_0808BE0A:
- cmp r4, 0x3
- bne _0808BE58
-_0808BE0E:
- lsls r0, 24
- asrs r0, 24
- lsls r2, 16
- asrs r1, r2, 16
- adds r1, r0
- lsls r0, r1, 16
- asrs r1, r0, 16
- adds r6, r2, 0
- cmp r1, 0
- blt _0808BEA4
- cmp r1, r7
- bgt _0808BEA4
-_0808BE26:
- asrs r4, r0, 16
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- add r0, r8
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- bne _0808BE50
- asrs r0, r6, 16
- adds r0, r4, r0
- lsls r0, 16
- asrs r2, r0, 16
- cmp r2, 0
- blt _0808BEA4
- cmp r2, r7
- ble _0808BE26
- b _0808BEA4
- .align 2, 0
-_0808BE4C: .4byte 0x0000ffff
-_0808BE50:
- adds r0, r4, 0
- b _0808BEA8
-_0808BE54:
- adds r0, r5, 0
- b _0808BEA8
-_0808BE58:
- lsls r0, 24
- asrs r0, 24
- lsls r2, 16
- asrs r1, r2, 16
- adds r1, r0
- lsls r0, r1, 16
- asrs r1, r0, 16
- adds r6, r2, 0
- cmp r1, 0
- blt _0808BEA4
- cmp r1, r7
- bgt _0808BEA4
-_0808BE70:
- asrs r5, r0, 16
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 4
- mov r1, r8
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _0808BE94
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetBoxMonData
- cmp r0, 0
- beq _0808BE54
-_0808BE94:
- asrs r0, r6, 16
- adds r0, r5, r0
- lsls r0, 16
- asrs r2, r0, 16
- cmp r2, 0
- blt _0808BEA4
- cmp r2, r7
- ble _0808BE70
-_0808BEA4:
- movs r0, 0x1
- negs r0, r0
-_0808BEA8:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_808BDE8
-
- thumb_func_start PSS_RenderTextToVramViaBuffer
-PSS_RenderTextToVramViaBuffer: @ 808BEB4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- str r0, [sp, 0x24]
- adds r7, r1, 0
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x28]
- lsls r3, 24
- lsrs r3, 24
- mov r9, r3
- movs r0, 0
- movs r1, 0
- str r0, [sp, 0x1C]
- str r1, [sp, 0x20]
- ldr r1, _0808BF30 @ =0x00ffffff
- ldr r0, [sp, 0x1C]
- ands r0, r1
- movs r1, 0xC0
- lsls r1, 21
- orrs r0, r1
- str r0, [sp, 0x1C]
- ldr r1, _0808BF34 @ =0xffffff00
- add r5, sp, 0x1C
- ldr r0, [r5, 0x4]
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- str r0, [r5, 0x4]
- adds r0, r5, 0
- bl AddWindow
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsls r4, r0, 24
- lsrs r4, 24
- mov r0, r9
- lsls r1, r0, 4
- orrs r1, r0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FillWindowPixelBuffer
- adds r0, r4, 0
- movs r1, 0x7
- bl GetWindowAttribute
- adds r6, r0, 0
- ldrb r0, [r5, 0x3]
- lsls r0, 5
- adds r0, r6
- mov r8, r0
- ldr r1, [sp, 0x28]
- cmp r1, 0
- bne _0808BF38
- add r0, sp, 0x14
- b _0808BF3C
- .align 2, 0
-_0808BF30: .4byte 0x00ffffff
-_0808BF34: .4byte 0xffffff00
-_0808BF38:
- add r0, sp, 0x14
- mov r1, r9
-_0808BF3C:
- strb r1, [r0]
- add r1, sp, 0x14
- movs r2, 0
- movs r0, 0xF
- strb r0, [r1, 0x1]
- movs r0, 0xE
- strb r0, [r1, 0x2]
- mov r0, r10
- lsls r4, r0, 24
- lsrs r0, r4, 24
- str r2, [sp]
- str r2, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x1
- negs r1, r1
- str r1, [sp, 0xC]
- ldr r1, [sp, 0x24]
- str r1, [sp, 0x10]
- movs r1, 0x1
- movs r3, 0x2
- bl AddTextPrinterParameterized4
- ldr r0, [sp, 0x50]
- mov r10, r4
- cmp r0, 0x6
- ble _0808BF72
- movs r0, 0x6
-_0808BF72:
- ldr r4, [sp, 0x50]
- subs r4, 0x6
- cmp r0, 0
- ble _0808BFA4
- adds r5, r0, 0
-_0808BF7C:
- adds r0, r6, 0
- adds r1, r7, 0
- movs r2, 0x40
- bl CpuSet
- adds r1, r7, 0
- adds r1, 0x80
- mov r0, r8
- movs r2, 0x40
- bl CpuSet
- adds r6, 0x80
- movs r2, 0x80
- add r8, r2
- movs r0, 0x80
- lsls r0, 1
- adds r7, r0
- subs r5, 0x1
- cmp r5, 0
- bne _0808BF7C
-_0808BFA4:
- cmp r4, 0
- ble _0808BFC4
- add r0, sp, 0x18
- mov r2, r9
- lsls r1, r2, 4
- orrs r1, r2
- strh r1, [r0]
- lsls r2, r4, 7
- ldr r1, _0808BFDC @ =0x001fffff
- ands r2, r1
- movs r1, 0x80
- lsls r1, 17
- orrs r2, r1
- adds r1, r7, 0
- bl CpuSet
-_0808BFC4:
- mov r1, r10
- lsrs r0, r1, 24
- bl RemoveWindow
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808BFDC: .4byte 0x001fffff
- thumb_func_end PSS_RenderTextToVramViaBuffer
-
- thumb_func_start sub_808BFE0
-sub_808BFE0: @ 808BFE0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- str r0, [sp, 0x20]
- str r1, [sp, 0x24]
- adds r6, r3, 0
- ldr r0, [sp, 0x4C]
- mov r9, r0
- ldr r1, [sp, 0x50]
- mov r10, r1
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x28]
- lsls r6, 24
- lsrs r6, 24
- mov r2, r9
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- mov r0, r10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- movs r0, 0
- movs r1, 0
- str r0, [sp, 0x18]
- str r1, [sp, 0x1C]
- ldr r0, [sp, 0x20]
- bl StringLength_Multibyte
- lsls r0, 24
- ldr r2, _0808C0CC @ =0x00ffffff
- ldr r1, [sp, 0x18]
- ands r1, r2
- orrs r1, r0
- str r1, [sp, 0x18]
- ldr r1, _0808C0D0 @ =0xffffff00
- add r2, sp, 0x18
- mov r8, r2
- ldr r0, [r2, 0x4]
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- str r0, [r2, 0x4]
- ldr r5, [sp, 0x18]
- lsrs r5, 24
- lsls r5, 5
- mov r0, r8
- bl AddWindow
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, r6, 4
- orrs r1, r6
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FillWindowPixelBuffer
- adds r0, r4, 0
- movs r1, 0x7
- bl GetWindowAttribute
- adds r7, r0, 0
- mov r0, r8
- ldrb r0, [r0, 0x3]
- lsls r0, 5
- mov r8, r0
- add r8, r7
- add r0, sp, 0x14
- movs r1, 0
- strb r6, [r0]
- mov r2, r9
- strb r2, [r0, 0x1]
- mov r2, r10
- strb r2, [r0, 0x2]
- str r1, [sp]
- str r1, [sp, 0x4]
- str r0, [sp, 0x8]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0xC]
- ldr r0, [sp, 0x20]
- str r0, [sp, 0x10]
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x2
- bl AddTextPrinterParameterized4
- lsrs r5, 1
- adds r0, r7, 0
- ldr r1, [sp, 0x24]
- adds r2, r5, 0
- bl CpuSet
- ldr r2, [sp, 0x24]
- ldr r0, [sp, 0x28]
- adds r1, r2, r0
- mov r0, r8
- adds r2, r5, 0
- bl CpuSet
- adds r0, r4, 0
- bl RemoveWindow
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808C0CC: .4byte 0x00ffffff
-_0808C0D0: .4byte 0xffffff00
- thumb_func_end sub_808BFE0
-
- thumb_func_start CountMonsInBox
-CountMonsInBox: @ 808C0D4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r4, 0
- movs r5, 0
-_0808C0DE:
- lsls r1, r4, 24
- lsrs r1, 24
- adds r0, r6, 0
- movs r2, 0xB
- bl GetBoxMonDataFromAnyBox
- cmp r0, 0
- beq _0808C0F4
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
-_0808C0F4:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1D
- bls _0808C0DE
- lsls r0, r5, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end CountMonsInBox
-
- thumb_func_start GetFirstFreeBoxSpot
-GetFirstFreeBoxSpot: @ 808C108
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
-_0808C110:
- lsls r1, r4, 24
- lsrs r1, 24
- adds r0, r5, 0
- movs r2, 0xB
- bl GetBoxMonDataFromAnyBox
- cmp r0, 0
- bne _0808C126
- lsls r0, r4, 16
- asrs r0, 16
- b _0808C134
-_0808C126:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1D
- bls _0808C110
- movs r0, 0x1
- negs r0, r0
-_0808C134:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetFirstFreeBoxSpot
-
- thumb_func_start CountPartyNonEggMons
-CountPartyNonEggMons: @ 808C13C
- push {r4-r6,lr}
- movs r5, 0
- movs r6, 0
-_0808C142:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0808C180 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0808C16A
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0808C16A
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_0808C16A:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x5
- bls _0808C142
- lsls r0, r6, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0808C180: .4byte gPlayerParty
- thumb_func_end CountPartyNonEggMons
-
- thumb_func_start CountPartyAliveNonEggMonsExcept
-CountPartyAliveNonEggMonsExcept: @ 808C184
- push {r4-r7,lr}
- lsls r0, 24
- movs r5, 0
- movs r6, 0
- lsrs r7, r0, 24
-_0808C18E:
- cmp r5, r7
- beq _0808C1C6
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0808C1DC @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0808C1C6
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0808C1C6
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0808C1C6
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_0808C1C6:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x5
- bls _0808C18E
- lsls r0, r6, 24
- lsrs r0, 24
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0808C1DC: .4byte gPlayerParty
- thumb_func_end CountPartyAliveNonEggMonsExcept
-
- thumb_func_start CountPartyAliveNonEggMons_IgnoreVar0x8004Slot
-CountPartyAliveNonEggMons_IgnoreVar0x8004Slot: @ 808C1E0
- push {lr}
- ldr r0, _0808C1F4 @ =gSpecialVar_0x8004
- ldrb r0, [r0]
- bl CountPartyAliveNonEggMonsExcept
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0808C1F4: .4byte gSpecialVar_0x8004
- thumb_func_end CountPartyAliveNonEggMons_IgnoreVar0x8004Slot
-
- thumb_func_start CountPartyMons
-CountPartyMons: @ 808C1F8
- push {r4,r5,lr}
- movs r4, 0
- movs r5, 0
-_0808C1FE:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _0808C22C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0808C216
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
-_0808C216:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x5
- bls _0808C1FE
- lsls r0, r5, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0808C22C: .4byte gPlayerParty
- thumb_func_end CountPartyMons
-
- thumb_func_start StringCopyAndFillWithSpaces
-StringCopyAndFillWithSpaces: @ 808C230
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r4, r2, 16
- lsrs r4, 16
- bl StringCopy
- adds r1, r0, 0
- adds r5, r4
- cmp r1, r5
- bcs _0808C24E
- movs r0, 0
-_0808C246:
- strb r0, [r1]
- adds r1, 0x1
- cmp r1, r5
- bcc _0808C246
-_0808C24E:
- movs r0, 0xFF
- strb r0, [r1]
- adds r0, r1, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end StringCopyAndFillWithSpaces
-
- thumb_func_start sub_808C25C
-sub_808C25C: @ 808C25C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r6, r0, 0
- adds r7, r3, 0
- ldr r5, [sp, 0x1C]
- ldr r4, [sp, 0x20]
- ldr r0, [sp, 0x24]
- mov r9, r0
- ldr r0, [sp, 0x28]
- ldr r3, [sp, 0x2C]
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r3, 16
- lsrs r3, 16
- mov r0, r9
- lsls r0, 17
- mov r9, r0
- lsrs r2, 11
- adds r2, r1
- lsls r2, 1
- adds r6, r2
- adds r0, r4, 0
- muls r0, r3
- adds r0, r5
- lsls r0, 1
- adds r7, r0
- movs r4, 0
- cmp r4, r8
- bcs _0808C2CC
- mov r0, r9
- lsrs r0, 1
- mov r9, r0
- lsls r5, r3, 1
-_0808C2B2:
- adds r0, r7, 0
- adds r1, r6, 0
- mov r3, r9
- lsrs r2, r3, 16
- bl CpuSet
- adds r6, 0x40
- adds r7, r5
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r8
- bcc _0808C2B2
-_0808C2CC:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_808C25C
-
- thumb_func_start sub_808C2D8
-sub_808C2D8: @ 808C2D8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r0, [sp, 0x28]
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsrs r2, 11
- adds r2, r1
- lsls r2, 1
- adds r4, r2
- lsls r3, 17
- lsrs r0, r3, 16
- str r0, [sp, 0x4]
- movs r0, 0
- cmp r0, r10
- bcs _0808C382
- movs r6, 0x80
- lsls r6, 5
- mov r5, sp
- ldr r7, _0808C344 @ =0x040000d4
- lsrs r3, 17
- mov r9, r3
- mov r1, r9
- movs r2, 0x81
- lsls r2, 24
- orrs r1, r2
- mov r9, r1
-_0808C31E:
- adds r3, r4, 0
- ldr r2, [sp, 0x4]
- movs r1, 0x40
- adds r1, r4
- mov r8, r1
- adds r0, 0x1
- mov r12, r0
- cmp r2, r6
- bhi _0808C348
- movs r0, 0
- strh r0, [r5]
- mov r2, sp
- str r2, [r7]
- str r4, [r7, 0x4]
- mov r0, r9
- str r0, [r7, 0x8]
- ldr r0, [r7, 0x8]
- b _0808C376
- .align 2, 0
-_0808C344: .4byte 0x040000d4
-_0808C348:
- movs r4, 0
- strh r4, [r5]
- ldr r1, _0808C394 @ =0x040000d4
- mov r0, sp
- str r0, [r1]
- str r3, [r1, 0x4]
- ldr r0, _0808C398 @ =0x81000800
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r3, r6
- subs r2, r6
- cmp r2, r6
- bhi _0808C348
- strh r4, [r5]
- mov r0, sp
- str r0, [r1]
- str r3, [r1, 0x4]
- lsrs r0, r2, 1
- movs r2, 0x81
- lsls r2, 24
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0808C376:
- mov r4, r8
- mov r1, r12
- lsls r0, r1, 16
- lsrs r0, 16
- cmp r0, r10
- bcc _0808C31E
-_0808C382:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808C394: .4byte 0x040000d4
-_0808C398: .4byte 0x81000800
- thumb_func_end sub_808C2D8
-
- thumb_func_start c3_0808C39C
-c3_0808C39C: @ 808C39C
- push {r4-r7,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _0808C3C4 @ =gTasks
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x4
- bls _0808C3B8
- b _0808C69C
-_0808C3B8:
- lsls r0, 2
- ldr r1, _0808C3C8 @ =_0808C3CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808C3C4: .4byte gTasks
-_0808C3C8: .4byte _0808C3CC
- .align 2, 0
-_0808C3CC:
- .4byte _0808C3E0
- .4byte _0808C448
- .4byte _0808C45C
- .4byte _0808C5A6
- .4byte _0808C680
-_0808C3E0:
- movs r0, 0x1C @ HELPCONTEXT_BILLS_PC
- bl SetHelpContext
- ldrb r0, [r5, 0xA]
- adds r1, r5, 0
- adds r1, 0x26
- bl sub_808C72C
- bl LoadStdWindowFrameGfx
- movs r0, 0
- movs r1, 0
- bl DrawDialogueFrame
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r1, _0808C444 @ =gUnknown_83CDA20
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r2, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x2
- movs r3, 0xFF
- bl AddTextPrinterParameterized2
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- ldrh r0, [r5, 0x26]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- bl CopyWindowToVram
- b _0808C454
- .align 2, 0
-_0808C444: .4byte gUnknown_83CDA20
-_0808C448:
- bl IsWeatherNotFadingIn
- lsls r0, 24
- cmp r0, 0
- bne _0808C454
- b _0808C69C
-_0808C454:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _0808C69C
-_0808C45C:
- bl Menu_ProcessInput
- lsls r0, 24
- asrs r0, 24
- strh r0, [r5, 0xC]
- movs r3, 0xC
- ldrsh r1, [r5, r3]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0808C50C
- cmp r1, r0
- bgt _0808C47E
- subs r0, 0x1
- cmp r1, r0
- beq _0808C484
- b _0808C530
-_0808C47E:
- cmp r1, 0x4
- beq _0808C50C
- b _0808C530
-_0808C484:
- ldrh r3, [r5, 0xA]
- strh r3, [r5, 0xE]
- ldr r2, _0808C504 @ =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0808C4A2
- subs r0, r3, 0x1
- strh r0, [r5, 0xE]
- lsls r0, 16
- cmp r0, 0
- bge _0808C4A2
- movs r0, 0x4
- strh r0, [r5, 0xE]
-_0808C4A2:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0808C4BE
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _0808C4BE
- movs r0, 0
- strh r0, [r5, 0xE]
-_0808C4BE:
- lsls r0, r3, 16
- asrs r0, 16
- ldrh r2, [r5, 0xE]
- movs r3, 0xE
- ldrsh r1, [r5, r3]
- cmp r0, r1
- bne _0808C4CE
- b _0808C69C
-_0808C4CE:
- movs r4, 0
- strh r2, [r5, 0xA]
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r1, _0808C508 @ =gUnknown_83CDA20
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r2, [r0]
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x2
- movs r3, 0
- bl AddTextPrinterParameterized2
- b _0808C69C
- .align 2, 0
-_0808C504: .4byte gMain
-_0808C508: .4byte gUnknown_83CDA20
-_0808C50C:
- movs r0, 0
- movs r1, 0x1
- bl ClearStdWindowAndFrame
- ldrh r0, [r5, 0x26]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl ClearStdWindowAndFrame
- bl ScriptContext2_Disable
- bl EnableBothScriptContexts
- adds r0, r4, 0
- bl DestroyTask
- b _0808C69C
-_0808C530:
- movs r3, 0xC
- ldrsh r4, [r5, r3]
- cmp r4, 0
- bne _0808C564
- bl CountPartyMons
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- bne _0808C564
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, _0808C560 @ =gUnknown_84186B0
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r4, 0x3
- str r4, [sp, 0xC]
- b _0808C66E
- .align 2, 0
-_0808C560: .4byte gUnknown_84186B0
-_0808C564:
- movs r1, 0xC
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- bne _0808C598
- bl CountPartyMons
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bne _0808C598
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, _0808C594 @ =gUnknown_8418690
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r4, 0x3
- str r4, [sp, 0xC]
- b _0808C66E
- .align 2, 0
-_0808C594: .4byte gUnknown_8418690
-_0808C598:
- movs r0, 0x1
- movs r1, 0
- bl FadeScreen
- movs r0, 0x4
- strh r0, [r5, 0x8]
- b _0808C69C
-_0808C5A6:
- ldr r0, _0808C5D0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r7, 0x3
- adds r4, r7, 0
- ands r4, r1
- cmp r4, 0
- beq _0808C5D8
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r1, _0808C5D4 @ =gUnknown_83CDA20
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r2, [r0]
- movs r0, 0
- str r0, [sp]
- b _0808C664
- .align 2, 0
-_0808C5D0: .4byte gMain
-_0808C5D4: .4byte gUnknown_83CDA20
-_0808C5D8:
- movs r0, 0x40
- ands r0, r1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0
- beq _0808C624
- ldrh r0, [r5, 0xA]
- subs r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- cmp r0, 0
- bge _0808C5F4
- movs r0, 0x4
- strh r0, [r5, 0xA]
-_0808C5F4:
- movs r0, 0x1
- negs r0, r0
- bl Menu_MoveCursor
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0xA]
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r1, _0808C620 @ =gUnknown_83CDA20
- movs r3, 0xA
- ldrsh r0, [r5, r3]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r2, [r0]
- str r4, [sp]
- b _0808C664
- .align 2, 0
-_0808C620: .4byte gUnknown_83CDA20
-_0808C624:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0808C69C
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- ble _0808C63C
- strh r6, [r5, 0xA]
-_0808C63C:
- movs r0, 0x1
- bl Menu_MoveCursor
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0xA]
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r1, _0808C67C @ =gUnknown_83CDA20
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r2, [r0]
- str r6, [sp]
-_0808C664:
- movs r4, 0x2
- str r4, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- str r7, [sp, 0xC]
-_0808C66E:
- movs r0, 0
- movs r1, 0x2
- movs r3, 0
- bl AddTextPrinterParameterized2
- strh r4, [r5, 0x8]
- b _0808C69C
- .align 2, 0
-_0808C67C: .4byte gUnknown_83CDA20
-_0808C680:
- ldr r0, _0808C6A4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808C69C
- bl CleanupOverworldWindowsAndTilemaps
- ldrb r0, [r5, 0xC]
- bl sub_808CDE4
- adds r0, r4, 0
- bl DestroyTask
-_0808C69C:
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808C6A4: .4byte gPaletteFade
- thumb_func_end c3_0808C39C
-
- thumb_func_start ShowPokemonStorageSystem
-ShowPokemonStorageSystem: @ 808C6A8
- push {lr}
- ldr r0, _0808C6D0 @ =c3_0808C39C
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0808C6D4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x8]
- strh r0, [r1, 0xA]
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .align 2, 0
-_0808C6D0: .4byte c3_0808C39C
-_0808C6D4: .4byte gTasks
- thumb_func_end ShowPokemonStorageSystem
-
- thumb_func_start mapldr_0808C6D8
-mapldr_0808C6D8: @ 808C6D8
- push {r4,r5,lr}
- ldr r0, _0808C71C @ =gMain
- ldr r5, [r0, 0xC]
- movs r0, 0
- bl SetVBlankCallback
- ldr r4, _0808C720 @ =c3_0808C39C
- adds r0, r4, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0808C724 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0
- strh r2, [r1, 0x8]
- ldr r2, _0808C728 @ =sPreviousBoxOption
- ldrb r2, [r2]
- strh r2, [r1, 0xA]
- bl _call_via_r4
- adds r0, r5, 0
- bl SetVBlankCallback
- bl FadeInFromBlack
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808C71C: .4byte gMain
-_0808C720: .4byte c3_0808C39C
-_0808C724: .4byte gTasks
-_0808C728: .4byte sPreviousBoxOption
- thumb_func_end mapldr_0808C6D8
-
- thumb_func_start sub_808C72C
-sub_808C72C: @ 808C72C
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0xC
- adds r6, r0, 0
- mov r10, r1
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _0808C7AC @ =gUnknown_83CDA48
- bl AddWindow
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r4, r5, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0
- bl DrawStdWindowFrame
- movs r0, 0x2
- movs r1, 0
- bl GetMenuCursorDimensionByFont
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x10
- mov r9, r0
- str r0, [sp]
- movs r0, 0x5
- mov r8, r0
- str r0, [sp, 0x4]
- ldr r0, _0808C7B0 @ =gUnknown_83CDA20
- str r0, [sp, 0x8]
- adds r0, r4, 0
- movs r1, 0x2
- movs r3, 0x2
- bl PrintTextArray
- mov r0, r9
- str r0, [sp]
- mov r0, r8
- str r0, [sp, 0x4]
- str r6, [sp, 0x8]
- adds r0, r4, 0
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl Menu_InitCursor
- mov r0, r10
- strh r5, [r0]
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808C7AC: .4byte gUnknown_83CDA48
-_0808C7B0: .4byte gUnknown_83CDA20
- thumb_func_end sub_808C72C
-
- thumb_func_start sub_808C7B4
-sub_808C7B4: @ 808C7B4
- push {lr}
- bl sub_808FDF0
- ldr r1, _0808C7D0 @ =sPreviousBoxOption
- strb r0, [r1]
- ldr r1, _0808C7D4 @ =gFieldCallback
- ldr r0, _0808C7D8 @ =mapldr_0808C6D8
- str r0, [r1]
- ldr r0, _0808C7DC @ =CB2_ReturnToField
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0808C7D0: .4byte sPreviousBoxOption
-_0808C7D4: .4byte gFieldCallback
-_0808C7D8: .4byte mapldr_0808C6D8
-_0808C7DC: .4byte CB2_ReturnToField
- thumb_func_end sub_808C7B4
-
- thumb_func_start ResetPokemonStorageSystem
-ResetPokemonStorageSystem: @ 808C7E0
- push {r4-r6,lr}
- movs r0, 0
- bl sub_808BA00
- movs r5, 0
-_0808C7EA:
- movs r4, 0
- lsls r6, r5, 24
-_0808C7EE:
- lsls r1, r4, 24
- lsrs r1, 24
- lsrs r0, r6, 24
- bl sub_808BCB4
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1D
- bls _0808C7EE
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0xD
- bls _0808C7EA
- movs r5, 0
-_0808C80E:
- lsls r0, r5, 24
- lsrs r0, 24
- bl GetBoxNamePtr
- ldr r1, _0808C850 @ =gUnknown_84186CD
- bl StringCopy
- adds r4, r5, 0x1
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- lsls r4, 16
- lsrs r5, r4, 16
- cmp r5, 0xD
- bls _0808C80E
- movs r5, 0
-_0808C832:
- lsls r0, r5, 24
- lsrs r0, 24
- movs r1, 0x3
- ands r1, r5
- bl sub_808BDBC
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0xD
- bls _0808C832
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808C850: .4byte gUnknown_84186CD
- thumb_func_end ResetPokemonStorageSystem
-
- thumb_func_start sub_808C854
-sub_808C854: @ 808C854
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x20
- adds r5, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r6, r1, 0
- lsls r2, 16
- lsrs r2, 16
- adds r7, r2, 0
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- ldr r0, _0808C8E8 @ =gUnknown_83CDA98
- str r0, [sp, 0x18]
- ldr r1, _0808C8EC @ =0xffff0000
- add r4, sp, 0x18
- ldr r0, [r4, 0x4]
- ands r0, r1
- orrs r0, r7
- str r0, [r4, 0x4]
- mov r1, sp
- ldr r0, _0808C8F0 @ =gUnknown_83CDAB8
- str r0, [sp]
- movs r0, 0x80
- lsls r0, 4
- strh r0, [r1, 0x4]
- strh r6, [r1, 0x6]
- ldr r0, _0808C8F4 @ =gUnknown_83CE2B8
- str r0, [sp, 0x8]
- movs r0, 0xC0
- lsls r0, 1
- strh r0, [r1, 0xC]
- adds r0, r6, 0x1
- strh r0, [r1, 0xE]
- add r0, sp, 0x10
- movs r1, 0
- movs r2, 0x8
- bl memset
- ldr r0, [sp, 0x38]
- cmp r0, 0
- beq _0808C8B2
- adds r0, r4, 0
- bl LoadSpritePalette
-_0808C8B2:
- mov r0, sp
- bl LoadSpriteSheets
- ldr r0, _0808C8F8 @ =gUnknown_20397AC
- str r5, [r0]
- movs r1, 0x90
- lsls r1, 2
- adds r0, r5, r1
- strh r6, [r0]
- adds r1, 0x2
- adds r0, r5, r1
- strh r7, [r0]
- adds r1, 0x4
- adds r0, r5, r1
- mov r1, r8
- strb r1, [r0]
- movs r1, 0x8F
- lsls r1, 2
- adds r0, r5, r1
- ldr r1, [sp, 0x38]
- str r1, [r0]
- add sp, 0x20
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808C8E8: .4byte gUnknown_83CDA98
-_0808C8EC: .4byte 0xffff0000
-_0808C8F0: .4byte gUnknown_83CDAB8
-_0808C8F4: .4byte gUnknown_83CE2B8
-_0808C8F8: .4byte gUnknown_20397AC
- thumb_func_end sub_808C854
-
- thumb_func_start sub_808C8FC
-sub_808C8FC: @ 808C8FC
- push {r4,r5,lr}
- ldr r5, _0808C93C @ =gUnknown_20397AC
- ldr r1, [r5]
- movs r2, 0x8F
- lsls r2, 2
- adds r0, r1, r2
- ldr r0, [r0]
- cmp r0, 0
- beq _0808C918
- adds r2, 0x6
- adds r0, r1, r2
- ldrh r0, [r0]
- bl FreeSpritePaletteByTag
-_0808C918:
- ldr r0, [r5]
- movs r4, 0x90
- lsls r4, 2
- adds r0, r4
- ldrh r0, [r0]
- bl FreeSpriteTilesByTag
- ldr r0, [r5]
- adds r0, r4
- ldrh r0, [r0]
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpriteTilesByTag
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808C93C: .4byte gUnknown_20397AC
- thumb_func_end sub_808C8FC
-
- thumb_func_start sub_808C940
-sub_808C940: @ 808C940
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_808C9C4
- pop {r0}
- bx r0
- thumb_func_end sub_808C940
-
- thumb_func_start sub_808C950
-sub_808C950: @ 808C950
- push {lr}
- bl sub_808CBA4
- pop {r0}
- bx r0
- thumb_func_end sub_808C950
-
- thumb_func_start sub_808C95C
-sub_808C95C: @ 808C95C
- push {lr}
- ldr r0, _0808C974 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0808C978
- movs r0, 0x5
- bl PlaySE
- movs r0, 0xC9
- b _0808C9C0
- .align 2, 0
-_0808C974: .4byte gMain
-_0808C978:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0808C998
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808C994 @ =gUnknown_20397AC
- ldr r0, [r0]
- movs r1, 0x91
- lsls r1, 2
- adds r0, r1
- ldrb r0, [r0]
- b _0808C9C0
- .align 2, 0
-_0808C994: .4byte gUnknown_20397AC
-_0808C998:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0808C9AC
- movs r0, 0x5
- bl PlaySE
- bl sub_808CC44
- b _0808C9BE
-_0808C9AC:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0808C9BE
- movs r0, 0x5
- bl PlaySE
- bl sub_808CC10
-_0808C9BE:
- movs r0, 0xC8
-_0808C9C0:
- pop {r1}
- bx r1
- thumb_func_end sub_808C95C
-
- thumb_func_start sub_808C9C4
-sub_808C9C4: @ 808C9C4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x3C
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0
- movs r1, 0
- str r0, [sp, 0x34]
- str r1, [sp, 0x38]
- movs r1, 0xC0
- lsls r1, 24
- ldr r0, [sp, 0x34]
- orrs r0, r1
- str r0, [sp, 0x34]
- ldr r1, _0808CB78 @ =0xffff0fff
- add r4, sp, 0x34
- ldr r0, [r4, 0x4]
- ands r0, r1
- movs r1, 0x80
- lsls r1, 5
- orrs r0, r1
- str r0, [r4, 0x4]
- add r0, sp, 0x1C
- mov r8, r0
- movs r1, 0
- strh r1, [r0]
- mov r0, sp
- adds r0, 0x1E
- strh r1, [r0]
- str r4, [sp, 0x20]
- ldr r0, _0808CB7C @ =gDummySpriteAnimTable
- str r0, [sp, 0x24]
- str r1, [sp, 0x28]
- ldr r0, _0808CB80 @ =gDummySpriteAffineAnimTable
- str r0, [sp, 0x2C]
- ldr r0, _0808CB84 @ =SpriteCallbackDummy
- str r0, [sp, 0x30]
- add r0, sp, 0x4
- mov r1, r8
- movs r2, 0x18
- bl memcpy
- ldr r1, _0808CB88 @ =gUnknown_83CDA94
- mov r0, r8
- movs r2, 0x4
- bl memcpy
- ldr r6, _0808CB8C @ =gUnknown_20397AC
- ldr r0, [r6]
- movs r1, 0x91
- lsls r1, 2
- adds r0, r1
- strb r5, [r0]
- add r2, sp, 0x4
- ldr r1, [r6]
- movs r5, 0x90
- lsls r5, 2
- adds r0, r1, r5
- ldrh r0, [r0]
- strh r0, [r2]
- ldr r3, _0808CB90 @ =0x00000242
- adds r1, r3
- ldrh r0, [r1]
- strh r0, [r2, 0x2]
- adds r0, r2, 0
- movs r1, 0xA0
- movs r2, 0x60
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r3, [r6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0808CB94 @ =gSprites
- adds r0, r1
- str r0, [r3]
- ldrb r2, [r4, 0x1]
- movs r1, 0x3F
- adds r0, r1, 0
- ands r0, r2
- movs r2, 0x80
- orrs r0, r2
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- ands r1, r0
- movs r0, 0x40
- orrs r1, r0
- strb r1, [r4, 0x3]
- add r1, sp, 0x4
- adds r3, r5
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r1]
- ldr r0, _0808CB98 @ =gUnknown_83CDA70
- str r0, [sp, 0xC]
- movs r4, 0
- mov r7, r8
-_0808CA90:
- ldr r0, [r6]
- ldr r1, _0808CB9C @ =0x00000246
- adds r0, r1
- ldrb r3, [r0]
- add r0, sp, 0x4
- movs r1, 0x7C
- movs r2, 0x50
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r2, [r6]
- lsls r3, r4, 2
- adds r2, 0x4
- adds r2, r3
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0808CB94 @ =gSprites
- adds r1, r0, r1
- str r1, [r2]
- movs r5, 0
- movs r0, 0x2
- ands r0, r4
- cmp r0, 0
- beq _0808CACA
- movs r0, 0xC4
- strh r0, [r1, 0x20]
- movs r5, 0x2
-_0808CACA:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0808CAEE
- ldr r1, [r6]
- adds r1, 0x4
- adds r1, r3
- ldr r2, [r1]
- movs r0, 0x70
- strh r0, [r2, 0x22]
- ldr r2, [r1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2, 0x3]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
-_0808CAEE:
- ldr r0, [r6]
- adds r0, 0x4
- adds r0, r3
- ldr r0, [r0]
- lsls r1, r5, 24
- lsrs r1, 24
- bl StartSpriteAnim
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x3
- bls _0808CA90
- movs r4, 0
- ldr r5, _0808CB8C @ =gUnknown_20397AC
-_0808CB0C:
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 19
- movs r3, 0xF8
- lsls r3, 15
- adds r0, r3
- lsrs r0, 16
- lsls r2, r4, 24
- lsrs r2, 24
- ldr r1, [r5]
- ldr r3, _0808CB9C @ =0x00000246
- adds r1, r3
- ldrb r1, [r1]
- str r1, [sp]
- movs r1, 0x58
- movs r3, 0
- bl sub_809223C
- adds r2, r0, 0
- ldr r0, [r5]
- lsls r1, r4, 2
- adds r0, 0x20
- adds r0, r1
- str r2, [r0]
- cmp r2, 0
- beq _0808CB54
- movs r1, 0x1
- cmp r4, 0
- bne _0808CB4C
- movs r3, 0x1
- negs r3, r3
- adds r1, r3, 0
-_0808CB4C:
- strh r1, [r2, 0x2E]
- ldr r1, [r0]
- ldr r0, _0808CBA0 @ =sub_808CD64
- str r0, [r1, 0x1C]
-_0808CB54:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _0808CB0C
- bl sub_808CC74
- adds r0, r7, 0
- movs r1, 0x5
- movs r2, 0x3
- bl sub_808CCFC
- add sp, 0x3C
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808CB78: .4byte 0xffff0fff
-_0808CB7C: .4byte gDummySpriteAnimTable
-_0808CB80: .4byte gDummySpriteAffineAnimTable
-_0808CB84: .4byte SpriteCallbackDummy
-_0808CB88: .4byte gUnknown_83CDA94
-_0808CB8C: .4byte gUnknown_20397AC
-_0808CB90: .4byte 0x00000242
-_0808CB94: .4byte gSprites
-_0808CB98: .4byte gUnknown_83CDA70
-_0808CB9C: .4byte 0x00000246
-_0808CBA0: .4byte sub_808CD64
- thumb_func_end sub_808C9C4
-
- thumb_func_start sub_808CBA4
-sub_808CBA4: @ 808CBA4
- push {r4-r6,lr}
- ldr r4, _0808CC0C @ =gUnknown_20397AC
- ldr r0, [r4]
- ldr r0, [r0]
- cmp r0, 0
- beq _0808CBBA
- bl DestroySprite
- ldr r1, [r4]
- movs r0, 0
- str r0, [r1]
-_0808CBBA:
- movs r5, 0
- adds r6, r4, 0
-_0808CBBE:
- ldr r0, [r6]
- lsls r4, r5, 2
- adds r0, 0x4
- adds r0, r4
- ldr r0, [r0]
- cmp r0, 0
- beq _0808CBDA
- bl DestroySprite
- ldr r0, [r6]
- adds r0, 0x4
- adds r0, r4
- movs r1, 0
- str r1, [r0]
-_0808CBDA:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bls _0808CBBE
- movs r5, 0
-_0808CBE6:
- ldr r0, _0808CC0C @ =gUnknown_20397AC
- ldr r0, [r0]
- lsls r1, r5, 2
- adds r0, 0x20
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- beq _0808CBFA
- bl DestroySprite
-_0808CBFA:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x1
- bls _0808CBE6
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808CC0C: .4byte gUnknown_20397AC
- thumb_func_end sub_808CBA4
-
- thumb_func_start sub_808CC10
-sub_808CC10: @ 808CC10
- push {lr}
- ldr r2, _0808CC40 @ =gUnknown_20397AC
- ldr r1, [r2]
- movs r0, 0x91
- lsls r0, 2
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xD
- bls _0808CC36
- ldr r0, [r2]
- movs r1, 0x91
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0808CC36:
- bl sub_808CC74
- pop {r0}
- bx r0
- .align 2, 0
-_0808CC40: .4byte gUnknown_20397AC
- thumb_func_end sub_808CC10
-
- thumb_func_start sub_808CC44
-sub_808CC44: @ 808CC44
- push {lr}
- ldr r0, _0808CC5C @ =gUnknown_20397AC
- ldr r2, [r0]
- movs r1, 0x91
- lsls r1, 2
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808CC60
- subs r1, r0, 0x1
- b _0808CC62
- .align 2, 0
-_0808CC5C: .4byte gUnknown_20397AC
-_0808CC60:
- movs r1, 0xD
-_0808CC62:
- movs r3, 0x91
- lsls r3, 2
- adds r0, r2, r3
- strb r1, [r0]
- bl sub_808CC74
- pop {r0}
- bx r0
- thumb_func_end sub_808CC44
-
- thumb_func_start sub_808CC74
-sub_808CC74: @ 808CC74
- push {r4-r7,lr}
- ldr r6, _0808CCF8 @ =gUnknown_20397AC
- ldr r0, [r6]
- movs r5, 0x91
- lsls r5, 2
- adds r0, r5
- ldrb r0, [r0]
- bl CountMonsInBox
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, [r6]
- movs r1, 0x8A
- lsls r1, 2
- adds r4, r0, r1
- adds r0, r5
- ldrb r0, [r0]
- bl GetBoxNamePtr
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- adds r1, r0, 0
- ldr r0, [r6]
- movs r2, 0x8C
- lsls r2, 2
- adds r0, r2
- cmp r1, r0
- bcs _0808CCC0
- movs r4, 0
- adds r3, r6, 0
-_0808CCB4:
- strb r4, [r1]
- adds r1, 0x1
- ldr r0, [r3]
- adds r0, r2
- cmp r1, r0
- bcc _0808CCB4
-_0808CCC0:
- movs r0, 0xFF
- strb r0, [r1]
- ldr r5, _0808CCF8 @ =gUnknown_20397AC
- ldr r0, [r5]
- movs r4, 0x8A
- lsls r4, 2
- adds r0, r4
- movs r1, 0
- movs r2, 0x1
- bl sub_808CCFC
- ldr r0, [r5]
- adds r0, r4
- adds r1, r7, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, [r5]
- adds r0, r4
- movs r1, 0x3
- movs r2, 0x3
- bl sub_808CCFC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808CCF8: .4byte gUnknown_20397AC
- thumb_func_end sub_808CC74
-
- thumb_func_start sub_808CCFC
-sub_808CCFC: @ 808CCFC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0xC
- mov r8, r0
- adds r5, r1, 0
- adds r4, r2, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r4, 16
- lsrs r4, 16
- ldr r6, _0808CD5C @ =gUnknown_20397AC
- ldr r0, [r6]
- movs r1, 0x90
- lsls r1, 2
- adds r0, r1
- ldrh r0, [r0]
- bl GetSpriteTileStartByTag
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 11
- lsls r4, 8
- ldr r0, _0808CD60 @ =0x06010000
- adds r4, r0
- adds r1, r4
- lsls r5, 5
- adds r1, r5
- movs r2, 0x80
- lsls r2, 1
- movs r0, 0xF
- str r0, [sp]
- movs r0, 0xE
- str r0, [sp, 0x4]
- ldr r0, [r6]
- adds r0, 0x28
- str r0, [sp, 0x8]
- mov r0, r8
- movs r3, 0x4
- bl sub_808BFE0
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808CD5C: .4byte gUnknown_20397AC
-_0808CD60: .4byte 0x06010000
- thumb_func_end sub_808CCFC
-
- thumb_func_start sub_808CD64
-sub_808CD64: @ 808CD64
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- adds r0, 0x1
- movs r2, 0
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- ble _0808CD94
- strh r2, [r1, 0x30]
- ldrh r0, [r1, 0x2E]
- ldrh r3, [r1, 0x24]
- adds r0, r3
- strh r0, [r1, 0x24]
- ldrh r0, [r1, 0x32]
- adds r0, 0x1
- strh r0, [r1, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- ble _0808CD94
- strh r2, [r1, 0x32]
- strh r2, [r1, 0x24]
-_0808CD94:
- pop {r0}
- bx r0
- thumb_func_end sub_808CD64
-
- thumb_func_start sub_808CD98
-sub_808CD98: @ 808CD98
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl sub_8096BF8
- bl TransferPlttBuffer
- ldr r0, _0808CDC0 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xB3
- lsls r1, 2
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x18
- bl SetGpuReg
- pop {r0}
- bx r0
- .align 2, 0
-_0808CDC0: .4byte sPSSData
- thumb_func_end sub_808CD98
-
- thumb_func_start c2_Box
-c2_Box: @ 808CDC4
- push {lr}
- bl RunTasks
- bl DoScheduledBgTilemapCopiesToVram
- bl sub_808EFC8
- bl sub_808F99C
- bl AnimateSprites
- bl BuildOamBuffer
- pop {r0}
- bx r0
- thumb_func_end c2_Box
-
- thumb_func_start sub_808CDE4
-sub_808CDE4: @ 808CDE4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl ResetTasks
- ldr r0, _0808CE08 @ =sCurrentBoxOption
- strb r5, [r0]
- ldr r4, _0808CE0C @ =sPSSData
- ldr r0, _0808CE10 @ =0x000062bc
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- bne _0808CE18
- ldr r0, _0808CE14 @ =sub_808C7B4
- bl SetMainCallback2
- b _0808CE4A
- .align 2, 0
-_0808CE08: .4byte sCurrentBoxOption
-_0808CE0C: .4byte sPSSData
-_0808CE10: .4byte 0x000062bc
-_0808CE14: .4byte sub_808C7B4
-_0808CE18:
- movs r2, 0
- strb r5, [r0, 0x1]
- ldr r0, [r4]
- strb r2, [r0, 0x3]
- ldr r0, _0808CE50 @ =gUnknown_20397BA
- movs r1, 0
- strh r2, [r0]
- ldr r0, [r4]
- strb r1, [r0]
- ldr r0, _0808CE54 @ =task_box_related_3
- movs r1, 0x3
- bl CreateTask
- ldr r1, [r4]
- strb r0, [r1, 0x4]
- movs r0, 0x1C @ HELPCONTEXT_BILLS_PC
- bl SetHelpContext
- bl StorageGetCurrentBox
- ldr r1, _0808CE58 @ =sLastUsedBox
- strb r0, [r1]
- ldr r0, _0808CE5C @ =c2_Box
- bl SetMainCallback2
-_0808CE4A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808CE50: .4byte gUnknown_20397BA
-_0808CE54: .4byte task_box_related_3
-_0808CE58: .4byte sLastUsedBox
-_0808CE5C: .4byte c2_Box
- thumb_func_end sub_808CDE4
-
- thumb_func_start sub_808CE60
-sub_808CE60: @ 808CE60
- push {r4,lr}
- bl ResetTasks
- ldr r4, _0808CE80 @ =sPSSData
- ldr r0, _0808CE84 @ =0x000062bc
- bl Alloc
- adds r1, r0, 0
- str r1, [r4]
- cmp r1, 0
- bne _0808CE8C
- ldr r0, _0808CE88 @ =sub_808C7B4
- bl SetMainCallback2
- b _0808CEB6
- .align 2, 0
-_0808CE80: .4byte sPSSData
-_0808CE84: .4byte 0x000062bc
-_0808CE88: .4byte sub_808C7B4
-_0808CE8C:
- ldr r0, _0808CEBC @ =sCurrentBoxOption
- ldrb r0, [r0]
- movs r2, 0
- strb r0, [r1, 0x1]
- ldr r1, [r4]
- movs r0, 0x1
- strb r0, [r1, 0x3]
- ldr r0, [r4]
- strb r2, [r0]
- ldr r0, _0808CEC0 @ =task_box_related_3
- movs r1, 0x3
- bl CreateTask
- ldr r1, [r4]
- strb r0, [r1, 0x4]
- movs r0, 0x1C @ HELPCONTEXT_BILLS_PC
- bl SetHelpContext
- ldr r0, _0808CEC4 @ =c2_Box
- bl SetMainCallback2
-_0808CEB6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808CEBC: .4byte sCurrentBoxOption
-_0808CEC0: .4byte task_box_related_3
-_0808CEC4: .4byte c2_Box
- thumb_func_end sub_808CE60
-
- thumb_func_start sub_808CEC8
-sub_808CEC8: @ 808CEC8
- push {lr}
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- thumb_func_end sub_808CEC8
-
- thumb_func_start sub_808CF10
-sub_808CF10: @ 808CF10
- push {r4,lr}
- sub sp, 0x4
- bl ResetPaletteFade
- bl ResetSpriteData
- bl FreeSpriteTileRanges
- bl FreeAllSpritePalettes
- bl ClearDma3Requests
- ldr r1, _0808CF80 @ =gReservedSpriteTileCount
- movs r2, 0xA0
- lsls r2, 2
- adds r0, r2, 0
- strh r0, [r1]
- ldr r4, _0808CF84 @ =sPSSData
- ldr r1, [r4]
- adds r0, r1, 0
- adds r0, 0x8
- adds r1, 0x10
- movs r2, 0x8
- bl sub_8096BE4
- ldr r1, _0808CF88 @ =gKeyRepeatStartDelay
- movs r0, 0x14
- strh r0, [r1]
- bl ClearScheduledBgCopiesToVram
- movs r0, 0x3
- bl sub_80F7AD8
- ldr r2, _0808CF8C @ =gUnknown_83CE6F8
- movs r0, 0x4
- str r0, [sp]
- movs r0, 0
- movs r1, 0x1
- movs r3, 0x8
- bl sub_80F7B80
- movs r0, 0
- movs r1, 0x1
- movs r2, 0
- bl sub_80F7CAC
- ldr r0, [r4]
- ldr r1, _0808CF90 @ =0x000002c7
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808CF80: .4byte gReservedSpriteTileCount
-_0808CF84: .4byte sPSSData
-_0808CF88: .4byte gKeyRepeatStartDelay
-_0808CF8C: .4byte gUnknown_83CE6F8
-_0808CF90: .4byte 0x000002c7
- thumb_func_end sub_808CF10
-
- thumb_func_start sub_808CF94
-sub_808CF94: @ 808CF94
- push {lr}
- bl sub_8092B50
- ldr r2, _0808CFB8 @ =sInPartyMenu
- movs r1, 0
- ldr r0, _0808CFBC @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bne _0808CFAA
- movs r1, 0x1
-_0808CFAA:
- strb r1, [r2]
- ldr r1, _0808CFC0 @ =gUnknown_20397B6
- movs r0, 0
- strb r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0808CFB8: .4byte sInPartyMenu
-_0808CFBC: .4byte sPSSData
-_0808CFC0: .4byte gUnknown_20397B6
- thumb_func_end sub_808CF94
-
- thumb_func_start sub_808CFC4
-sub_808CFC4: @ 808CFC4
- push {lr}
- ldr r0, _0808CFF0 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _0808CFE2
- movs r1, 0xFC
- lsls r1, 6
- movs r0, 0x50
- bl SetGpuReg
- ldr r1, _0808CFF4 @ =0x00000b07
- movs r0, 0x52
- bl SetGpuReg
-_0808CFE2:
- movs r1, 0xFA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- .align 2, 0
-_0808CFF0: .4byte sPSSData
-_0808CFF4: .4byte 0x00000b07
- thumb_func_end sub_808CFC4
-
- thumb_func_start add_to_c3_somehow
-add_to_c3_somehow: @ 808CFF8
- push {r4,lr}
- ldr r4, _0808D018 @ =gTasks
- ldr r1, _0808D01C @ =sPSSData
- ldr r3, [r1]
- ldrb r2, [r3, 0x4]
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r4
- str r0, [r1]
- movs r0, 0
- strb r0, [r3]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808D018: .4byte gTasks
-_0808D01C: .4byte sPSSData
- thumb_func_end add_to_c3_somehow
-
- thumb_func_start task_box_related_3
-task_box_related_3: @ 808D020
- push {lr}
- sub sp, 0x4
- ldr r0, _0808D03C @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0xA
- bls _0808D030
- b _0808D216
-_0808D030:
- lsls r0, 2
- ldr r1, _0808D040 @ =_0808D044
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808D03C: .4byte sPSSData
-_0808D040: .4byte _0808D044
- .align 2, 0
-_0808D044:
- .4byte _0808D070
- .4byte _0808D0C8
- .4byte _0808D0D6
- .4byte _0808D104
- .4byte _0808D120
- .4byte _0808D13E
- .4byte _0808D15E
- .4byte _0808D164
- .4byte _0808D16A
- .4byte _0808D178
- .4byte _0808D1BE
-_0808D070:
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- bl sub_808CF10
- ldr r0, _0808D0A0 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- cmp r0, 0
- beq _0808D0BE
- ldr r0, _0808D0A4 @ =sWhichToReshow
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808D0AE
- cmp r0, 0x1
- bgt _0808D0A8
- cmp r0, 0
- beq _0808D0B4
- b _0808D0BE
- .align 2, 0
-_0808D0A0: .4byte sPSSData
-_0808D0A4: .4byte sWhichToReshow
-_0808D0A8:
- cmp r0, 0x2
- beq _0808D0BA
- b _0808D0BE
-_0808D0AE:
- bl sub_8093660
- b _0808D0BE
-_0808D0B4:
- bl sub_80937B4
- b _0808D0BE
-_0808D0BA:
- bl sub_808EF0C
-_0808D0BE:
- bl sub_808EFE4
- bl sub_808F068
- b _0808D20C
-_0808D0C8:
- bl sub_808F044
- lsls r0, 24
- cmp r0, 0
- beq _0808D0D4
- b _0808D20C
-_0808D0D4:
- b _0808D148
-_0808D0D6:
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0x1
- bl ClearWindowTilemap
- movs r0, 0
- str r0, [sp]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _0808D100 @ =0x05000080
- mov r0, sp
- bl CpuSet
- movs r0, 0x1
- movs r1, 0xB
- movs r2, 0xE0
- bl TextWindow_SetUserSelectedFrame
- b _0808D20C
- .align 2, 0
-_0808D100: .4byte 0x05000080
-_0808D104:
- bl sub_808CEC8
- ldr r0, _0808D11C @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- cmp r0, 0
- beq _0808D114
- b _0808D20C
-_0808D114:
- bl sub_808CF94
- b _0808D20C
- .align 2, 0
-_0808D11C: .4byte sPSSData
-_0808D120:
- bl sub_808FFAC
- ldr r0, _0808D134 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- cmp r0, 0
- bne _0808D138
- bl sub_80922C0
- b _0808D20C
- .align 2, 0
-_0808D134: .4byte sPSSData
-_0808D138:
- bl sub_8092340
- b _0808D20C
-_0808D13E:
- bl sub_8095050
- lsls r0, 24
- cmp r0, 0
- bne _0808D154
-_0808D148:
- ldr r0, _0808D150 @ =sub_808EE18
- bl add_to_c3_somehow
- b _0808D216
- .align 2, 0
-_0808D150: .4byte sub_808EE18
-_0808D154:
- bl sub_808EF8C
- bl sub_808FB68
- b _0808D20C
-_0808D15E:
- bl sub_808F078
- b _0808D20C
-_0808D164:
- bl sub_808F68C
- b _0808D20C
-_0808D16A:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- bl sub_80913DC
- b _0808D20C
-_0808D178:
- bl sub_809140C
- lsls r0, 24
- cmp r0, 0
- bne _0808D216
- ldr r0, _0808D1A8 @ =sPSSData
- ldr r2, [r0]
- ldrb r0, [r2, 0x1]
- cmp r0, 0x3
- beq _0808D1B4
- movs r1, 0xDA
- lsls r1, 4
- adds r0, r2, r1
- movs r1, 0xD
- strh r1, [r0]
- ldr r1, _0808D1AC @ =0x00000da2
- adds r2, r1
- ldr r1, _0808D1B0 @ =0x0000dace
- strh r1, [r2]
- bl SetMonMarkingsMenuPointer
- bl LoadMonMarkingsFrameGfx
- b _0808D20C
- .align 2, 0
-_0808D1A8: .4byte sPSSData
-_0808D1AC: .4byte 0x00000da2
-_0808D1B0: .4byte 0x0000dace
-_0808D1B4:
- bl sub_8095B5C
- bl sub_808FDFC
- b _0808D20C
-_0808D1BE:
- bl sub_808CFC4
- ldr r0, _0808D1E0 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- cmp r0, 0
- bne _0808D1E8
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldr r0, _0808D1E4 @ =sub_808D220
- bl add_to_c3_somehow
- b _0808D1FA
- .align 2, 0
-_0808D1E0: .4byte sPSSData
-_0808D1E4: .4byte sub_808D220
-_0808D1E8:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldr r0, _0808D204 @ =sub_808D26C
- bl add_to_c3_somehow
-_0808D1FA:
- ldr r0, _0808D208 @ =sub_808CD98
- bl SetVBlankCallback
- b _0808D216
- .align 2, 0
-_0808D204: .4byte sub_808D26C
-_0808D208: .4byte sub_808CD98
-_0808D20C:
- ldr r0, _0808D21C @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0808D216:
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0808D21C: .4byte sPSSData
- thumb_func_end task_box_related_3
-
- thumb_func_start sub_808D220
-sub_808D220: @ 808D220
- push {r4,lr}
- ldr r4, _0808D234 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808D238
- cmp r0, 0x1
- beq _0808D252
- b _0808D262
- .align 2, 0
-_0808D234: .4byte sPSSData
-_0808D238:
- movs r0, 0x2
- bl PlaySE
- movs r0, 0x14
- movs r1, 0
- movs r2, 0x1
- bl sub_80A0A48
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808D262
-_0808D252:
- bl sub_80A0A98
- lsls r0, 24
- cmp r0, 0
- bne _0808D262
- ldr r0, _0808D268 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808D262:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808D268: .4byte sub_808D2BC
- thumb_func_end sub_808D220
-
- thumb_func_start sub_808D26C
-sub_808D26C: @ 808D26C
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _0808D280 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808D284
- cmp r0, 0x1
- beq _0808D29E
- b _0808D2AE
- .align 2, 0
-_0808D280: .4byte sPSSData
-_0808D284:
- movs r1, 0x1
- negs r1, r1
- str r0, [sp]
- adds r0, r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808D2AE
-_0808D29E:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _0808D2AE
- ldr r0, _0808D2B8 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808D2AE:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808D2B8: .4byte sub_808D2BC
- thumb_func_end sub_808D26C
-
- thumb_func_start sub_808D2BC
-sub_808D2BC: @ 808D2BC
- push {r4,r5,lr}
- ldr r0, _0808D2D4 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0xB
- bls _0808D2CA
- b _0808D7B2
-_0808D2CA:
- lsls r0, 2
- ldr r1, _0808D2D8 @ =_0808D2DC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808D2D4: .4byte sPSSData
-_0808D2D8: .4byte _0808D2DC
- .align 2, 0
-_0808D2DC:
- .4byte _0808D30C
- .4byte _0808D630
- .4byte _0808D670
- .4byte _0808D6C8
- .4byte _0808D6EC
- .4byte _0808D6F6
- .4byte _0808D710
- .4byte _0808D730
- .4byte _0808D736
- .4byte _0808D74C
- .4byte _0808D778
- .4byte _0808D7A0
-_0808D30C:
- bl sub_80948B4
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- cmp r0, 0x19
- bls _0808D31C
- b _0808D7B2
-_0808D31C:
- lsls r0, 2
- ldr r1, _0808D328 @ =_0808D32C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808D328: .4byte _0808D32C
- .align 2, 0
-_0808D32C:
- .4byte _0808D394
- .4byte _0808D7B2
- .4byte _0808D7B2
- .4byte _0808D424
- .4byte _0808D3A8
- .4byte _0808D3DC
- .4byte _0808D43C
- .4byte _0808D450
- .4byte _0808D45C
- .4byte _0808D494
- .4byte _0808D4D8
- .4byte _0808D55C
- .4byte _0808D51C
- .4byte _0808D52E
- .4byte _0808D570
- .4byte _0808D584
- .4byte _0808D598
- .4byte _0808D5AC
- .4byte _0808D430
- .4byte _0808D5C0
- .4byte _0808D5E0
- .4byte _0808D5CA
- .4byte _0808D5EA
- .4byte _0808D628
- .4byte _0808D5EE
- .4byte _0808D608
-_0808D394:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808D3A4 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D3A4: .4byte sPSSData
-_0808D3A8:
- ldr r4, _0808D3C8 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0808D3CC
- movs r0, 0x10
- bl sub_808FBA4
- ldr r1, [r4]
- movs r0, 0x3
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D3C8: .4byte sPSSData
-_0808D3CC:
- bl sub_8092B50
- ldr r0, _0808D3D8 @ =sub_808D7BC
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D3D8: .4byte sub_808D7BC
-_0808D3DC:
- ldr r4, _0808D408 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x2
- bne _0808D410
- bl sub_80939A0
- lsls r0, 24
- cmp r0, 0
- beq _0808D416
- ldr r0, [r4]
- ldr r1, _0808D40C @ =0x00000ce2
- adds r0, r1
- ldrh r0, [r0]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0808D404
- b _0808D4F6
-_0808D404:
- b _0808D416
- .align 2, 0
-_0808D408: .4byte sPSSData
-_0808D40C: .4byte 0x00000ce2
-_0808D410:
- cmp r0, 0x3
- beq _0808D416
- b _0808D7B2
-_0808D416:
- ldr r0, _0808D420 @ =sub_808D7FC
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D420: .4byte sub_808D7FC
-_0808D424:
- ldr r0, _0808D42C @ =sub_808EBB0
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D42C: .4byte sub_808EBB0
-_0808D430:
- ldr r0, _0808D438 @ =sub_808ECE4
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D438: .4byte sub_808ECE4
-_0808D43C:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808D44C @ =box_related
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D44C: .4byte box_related
-_0808D450:
- ldr r0, _0808D458 @ =sub_808D878
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D458: .4byte sub_808D878
-_0808D45C:
- movs r0, 0x5
- bl PlaySE
- bl StorageGetCurrentBox
- ldr r4, _0808D48C @ =sPSSData
- ldr r1, [r4]
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- ldr r2, _0808D490 @ =0x000002ca
- adds r1, r2
- strh r0, [r1]
- cmp r0, 0xD
- ble _0808D47E
- movs r0, 0
- strh r0, [r1]
-_0808D47E:
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x3
- beq _0808D4CC
- adds r0, r1, r2
- b _0808D78A
- .align 2, 0
-_0808D48C: .4byte sPSSData
-_0808D490: .4byte 0x000002ca
-_0808D494:
- movs r0, 0x5
- bl PlaySE
- bl StorageGetCurrentBox
- ldr r4, _0808D4C4 @ =sPSSData
- ldr r1, [r4]
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- ldr r2, _0808D4C8 @ =0x000002ca
- adds r1, r2
- strh r0, [r1]
- cmp r0, 0
- bge _0808D4B6
- movs r0, 0xD
- strh r0, [r1]
-_0808D4B6:
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x3
- beq _0808D4CC
- adds r0, r1, r2
- b _0808D78A
- .align 2, 0
-_0808D4C4: .4byte sPSSData
-_0808D4C8: .4byte 0x000002ca
-_0808D4CC:
- bl sub_8094D60
- ldr r1, [r4]
- movs r0, 0xA
- strb r0, [r1]
- b _0808D7B2
-_0808D4D8:
- bl sub_8093900
- lsls r0, 24
- cmp r0, 0
- bne _0808D538
- ldr r4, _0808D500 @ =sPSSData
- ldr r0, [r4]
- ldr r1, _0808D504 @ =0x00000ce2
- adds r0, r1
- ldrh r0, [r0]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0808D508
-_0808D4F6:
- ldr r1, [r4]
- movs r0, 0x5
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D500: .4byte sPSSData
-_0808D504: .4byte 0x00000ce2
-_0808D508:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808D518 @ =sub_808DD88
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D518: .4byte sub_808DD88
-_0808D51C:
- bl sub_8093900
- lsls r0, 24
- cmp r0, 0
- bne _0808D538
- movs r0, 0x5
- bl PlaySE
- b _0808D740
-_0808D52E:
- bl sub_809393C
- lsls r0, 24
- cmp r0, 0
- bne _0808D548
-_0808D538:
- ldr r0, _0808D544 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x4
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D544: .4byte sPSSData
-_0808D548:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808D558 @ =sub_808DC50
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D558: .4byte sub_808DC50
-_0808D55C:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808D56C @ =sub_808DC9C
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D56C: .4byte sub_808DC9C
-_0808D570:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808D580 @ =sub_808DBF0
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D580: .4byte sub_808DBF0
-_0808D584:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808D594 @ =sub_808E140
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D594: .4byte sub_808E140
-_0808D598:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808D5A8 @ =sub_808E1F4
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D5A8: .4byte sub_808E1F4
-_0808D5AC:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808D5BC @ =sub_808E3C8
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D5BC: .4byte sub_808E3C8
-_0808D5C0:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0
- b _0808D616
-_0808D5CA:
- movs r0, 0x1
- bl sub_80950BC
- ldr r0, _0808D5DC @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x8
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D5DC: .4byte sPSSData
-_0808D5E0:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x2
- b _0808D5F6
-_0808D5EA:
- movs r0, 0x3
- b _0808D616
-_0808D5EE:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x4
-_0808D5F6:
- bl sub_80950BC
- ldr r0, _0808D604 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x9
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D604: .4byte sPSSData
-_0808D608:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x3
- bl sub_808FE54
- movs r0, 0x5
-_0808D616:
- bl sub_80950BC
- ldr r0, _0808D624 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x7
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D624: .4byte sPSSData
-_0808D628:
- movs r0, 0x1A
- bl PlaySE
- b _0808D7B2
-_0808D630:
- bl sub_80924A8
- lsls r0, 24
- cmp r0, 0
- beq _0808D63C
- b _0808D7B2
-_0808D63C:
- bl sub_80939C8
- lsls r0, 24
- cmp r0, 0
- beq _0808D64C
- bl sub_808F948
- b _0808D650
-_0808D64C:
- bl sub_808F974
-_0808D650:
- ldr r4, _0808D668 @ =sPSSData
- ldr r0, [r4]
- ldr r1, _0808D66C @ =0x00000ce6
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808D662
- bl BoxSetMosaic
-_0808D662:
- ldr r1, [r4]
- b _0808D6DC
- .align 2, 0
-_0808D668: .4byte sPSSData
-_0808D66C: .4byte 0x00000ce6
-_0808D670:
- bl sub_80915FC
- lsls r0, 24
- cmp r0, 0
- beq _0808D67C
- b _0808D7B2
-_0808D67C:
- ldr r0, _0808D6BC @ =sPSSData
- ldr r0, [r0]
- ldr r1, _0808D6C0 @ =0x000002ca
- adds r0, r1
- ldrb r0, [r0]
- bl sub_808BA00
- ldr r0, _0808D6C4 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- bne _0808D6A4
- bl sub_80939A0
- lsls r0, 24
- cmp r0, 0
- bne _0808D6A4
- bl sub_8092F54
- bl BoxSetMosaic
-_0808D6A4:
- ldr r4, _0808D6BC @ =sPSSData
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x3
- bne _0808D6DC
- bl sub_8094D84
- ldr r1, [r4]
- movs r0, 0xB
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D6BC: .4byte sPSSData
-_0808D6C0: .4byte 0x000002ca
-_0808D6C4: .4byte sInPartyMenu
-_0808D6C8:
- ldr r0, _0808D6E4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808D7B2
- bl sub_808FD20
- ldr r0, _0808D6E8 @ =sPSSData
- ldr r1, [r0]
-_0808D6DC:
- movs r0, 0
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D6E4: .4byte gMain
-_0808D6E8: .4byte sPSSData
-_0808D6EC:
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0xD
- b _0808D6FE
-_0808D6F6:
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0x16
-_0808D6FE:
- bl sub_808FBA4
- ldr r0, _0808D70C @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x6
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D70C: .4byte sPSSData
-_0808D710:
- ldr r0, _0808D728 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808D7B2
- bl sub_808FD20
- ldr r0, _0808D72C @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D728: .4byte gMain
-_0808D72C: .4byte sub_808D2BC
-_0808D730:
- bl sub_80950D0
- b _0808D7A4
-_0808D736:
- bl sub_80950D0
- lsls r0, 24
- cmp r0, 0
- bne _0808D7B2
-_0808D740:
- ldr r0, _0808D748 @ =sub_808DB94
- bl add_to_c3_somehow
- b _0808D7B2
- .align 2, 0
-_0808D748: .4byte sub_808DB94
-_0808D74C:
- bl sub_80950D0
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0808D7B2
- ldr r5, _0808D770 @ =sPSSData
- ldr r0, [r5]
- ldr r1, _0808D774 @ =0x00000ce6
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808D76A
- bl BoxSetMosaic
-_0808D76A:
- ldr r0, [r5]
- strb r4, [r0]
- b _0808D7B2
- .align 2, 0
-_0808D770: .4byte sPSSData
-_0808D774: .4byte 0x00000ce6
-_0808D778:
- bl sub_809610C
- lsls r0, 24
- cmp r0, 0
- bne _0808D7B2
- ldr r4, _0808D798 @ =sPSSData
- ldr r0, [r4]
- ldr r1, _0808D79C @ =0x000002ca
- adds r0, r1
-_0808D78A:
- ldrb r0, [r0]
- bl sub_8091514
- ldr r1, [r4]
- movs r0, 0x2
- strb r0, [r1]
- b _0808D7B2
- .align 2, 0
-_0808D798: .4byte sPSSData
-_0808D79C: .4byte 0x000002ca
-_0808D7A0:
- bl sub_809610C
-_0808D7A4:
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _0808D7B2
- ldr r0, _0808D7B8 @ =sPSSData
- ldr r0, [r0]
- strb r1, [r0]
-_0808D7B2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808D7B8: .4byte sPSSData
- thumb_func_end sub_808D2BC
-
- thumb_func_start sub_808D7BC
-sub_808D7BC: @ 808D7BC
- push {r4,lr}
- ldr r4, _0808D7D0 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808D7D4
- cmp r0, 0x1
- beq _0808D7E2
- b _0808D7F2
- .align 2, 0
-_0808D7D0: .4byte sPSSData
-_0808D7D4:
- bl sub_808FAD4
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808D7F2
-_0808D7E2:
- bl sub_808FAF8
- lsls r0, 24
- cmp r0, 0
- bne _0808D7F2
- ldr r0, _0808D7F8 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808D7F2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808D7F8: .4byte sub_808D2BC
- thumb_func_end sub_808D7BC
-
- thumb_func_start sub_808D7FC
-sub_808D7FC: @ 808D7FC
- push {r4,lr}
- ldr r4, _0808D814 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808D82A
- cmp r0, 0x1
- bgt _0808D818
- cmp r0, 0
- beq _0808D81E
- b _0808D86A
- .align 2, 0
-_0808D814: .4byte sPSSData
-_0808D818:
- cmp r0, 0x2
- beq _0808D84A
- b _0808D86A
-_0808D81E:
- movs r0, 0x5
- bl PlaySE
- bl sub_808F810
- b _0808D840
-_0808D82A:
- bl sub_808F850
- lsls r0, 24
- cmp r0, 0
- bne _0808D86A
- bl sub_8092B70
- lsls r0, 24
- lsrs r0, 24
- bl sub_8092B3C
-_0808D840:
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808D86A
-_0808D84A:
- bl sub_80924A8
- lsls r0, 24
- cmp r0, 0
- bne _0808D86A
- ldr r0, [r4]
- ldr r1, _0808D870 @ =0x00000ce6
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808D864
- bl BoxSetMosaic
-_0808D864:
- ldr r0, _0808D874 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808D86A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808D870: .4byte 0x00000ce6
-_0808D874: .4byte sub_808D2BC
- thumb_func_end sub_808D7FC
-
- thumb_func_start sub_808D878
-sub_808D878: @ 808D878
- push {r4,lr}
- ldr r0, _0808D890 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x6
- bls _0808D886
- b _0808DB86
-_0808D886:
- lsls r0, 2
- ldr r1, _0808D894 @ =_0808D898
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808D890: .4byte sPSSData
-_0808D894: .4byte _0808D898
- .align 2, 0
-_0808D898:
- .4byte _0808D8B4
- .4byte _0808D918
- .4byte _0808D934
- .4byte _0808DB40
- .4byte _0808DB54
- .4byte _0808DB4A
- .4byte _0808DB70
-_0808D8B4:
- bl sub_808F258
- lsls r0, 24
- cmp r0, 0
- beq _0808D8C0
- b _0808DB86
-_0808D8C0:
- movs r0, 0x5
- bl PlaySE
- ldr r4, _0808D8D8 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- beq _0808D8DC
- movs r0, 0x4
- bl sub_808FBA4
- b _0808D906
- .align 2, 0
-_0808D8D8: .4byte sPSSData
-_0808D8DC:
- bl sub_809616C
- lsls r0, 24
- cmp r0, 0
- bne _0808D8F2
- ldr r0, [r4]
- ldr r1, _0808D8FC @ =0x00000ce2
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0
- beq _0808D900
-_0808D8F2:
- movs r0, 0x17
- bl sub_808FBA4
- b _0808D906
- .align 2, 0
-_0808D8FC: .4byte 0x00000ce2
-_0808D900:
- movs r0, 0x18
- bl sub_808FBA4
-_0808D906:
- bl sub_8094E88
- ldr r0, _0808D914 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1]
- b _0808DB86
- .align 2, 0
-_0808D914: .4byte sPSSData
-_0808D918:
- bl sub_8094F90
- lsls r0, 24
- cmp r0, 0
- beq _0808D924
- b _0808DB86
-_0808D924:
- ldr r0, _0808D930 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x2
- strb r0, [r1]
- b _0808DB86
- .align 2, 0
-_0808D930: .4byte sPSSData
-_0808D934:
- bl sub_8094F94
- adds r0, 0x1
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x12
- bls _0808D944
- b _0808DB86
-_0808D944:
- lsls r0, 2
- ldr r1, _0808D950 @ =_0808D954
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808D950: .4byte _0808D954
- .align 2, 0
-_0808D954:
- .4byte _0808D9A0
- .4byte _0808D9A0
- .4byte _0808DA20
- .4byte _0808DA08
- .4byte _0808D9B0
- .4byte _0808D9E8
- .4byte _0808D9D0
- .4byte _0808DAC0
- .4byte _0808DA5C
- .4byte _0808DAD4
- .4byte _0808DB86
- .4byte _0808DB86
- .4byte _0808DB86
- .4byte _0808DAE8
- .4byte _0808DAFC
- .4byte _0808DB28
- .4byte _0808DB1C
- .4byte _0808DB10
- .4byte _0808DB34
-_0808D9A0:
- bl sub_808FD20
- ldr r0, _0808D9AC @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808D9AC: .4byte sub_808D2BC
-_0808D9B0:
- bl sub_8093900
- lsls r0, 24
- cmp r0, 0
- bne _0808DA66
- movs r0, 0x5
- bl PlaySE
- bl sub_808FD20
- ldr r0, _0808D9CC @ =sub_808DB94
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808D9CC: .4byte sub_808DB94
-_0808D9D0:
- movs r0, 0x5
- bl PlaySE
- bl sub_808FD20
- ldr r0, _0808D9E4 @ =sub_808DBF0
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808D9E4: .4byte sub_808DBF0
-_0808D9E8:
- bl sub_809393C
- lsls r0, 24
- cmp r0, 0
- beq _0808DA66
- movs r0, 0x5
- bl PlaySE
- bl sub_808FD20
- ldr r0, _0808DA04 @ =sub_808DC50
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DA04: .4byte sub_808DC50
-_0808DA08:
- movs r0, 0x5
- bl PlaySE
- bl sub_808FD20
- ldr r0, _0808DA1C @ =sub_808DC9C
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DA1C: .4byte sub_808DC9C
-_0808DA20:
- bl sub_8093900
- lsls r0, 24
- cmp r0, 0
- bne _0808DA66
- ldr r4, _0808DA50 @ =sPSSData
- ldr r0, [r4]
- ldr r2, _0808DA54 @ =0x00000ce2
- adds r0, r2
- ldrh r0, [r0]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- bne _0808DAA0
- movs r0, 0x5
- bl PlaySE
- bl sub_808FD20
- ldr r0, _0808DA58 @ =sub_808DD88
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DA50: .4byte sPSSData
-_0808DA54: .4byte 0x00000ce2
-_0808DA58: .4byte sub_808DD88
-_0808DA5C:
- bl sub_8093900
- lsls r0, 24
- cmp r0, 0
- beq _0808DA74
-_0808DA66:
- ldr r0, _0808DA70 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x3
- strb r0, [r1]
- b _0808DB86
- .align 2, 0
-_0808DA70: .4byte sPSSData
-_0808DA74:
- ldr r4, _0808DA88 @ =sPSSData
- ldr r1, [r4]
- ldr r2, _0808DA8C @ =0x00000ce9
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808DA90
- movs r0, 0x5
- strb r0, [r1]
- b _0808DB86
- .align 2, 0
-_0808DA88: .4byte sPSSData
-_0808DA8C: .4byte 0x00000ce9
-_0808DA90:
- ldr r2, _0808DAA8 @ =0x00000ce2
- adds r0, r1, r2
- ldrh r0, [r0]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0808DAAC
-_0808DAA0:
- ldr r1, [r4]
- movs r0, 0x4
- strb r0, [r1]
- b _0808DB86
- .align 2, 0
-_0808DAA8: .4byte 0x00000ce2
-_0808DAAC:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808DABC @ =sub_808DECC
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DABC: .4byte sub_808DECC
-_0808DAC0:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808DAD0 @ =sub_808EAF0
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DAD0: .4byte sub_808EAF0
-_0808DAD4:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808DAE4 @ =sub_808E0BC
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DAE4: .4byte sub_808E0BC
-_0808DAE8:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808DAF8 @ =sub_808E140
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DAF8: .4byte sub_808E140
-_0808DAFC:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808DB0C @ =sub_808E1F4
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DB0C: .4byte sub_808E1F4
-_0808DB10:
- ldr r0, _0808DB18 @ =sub_808E2B0
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DB18: .4byte sub_808E2B0
-_0808DB1C:
- ldr r0, _0808DB24 @ =sub_808E3C8
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DB24: .4byte sub_808E3C8
-_0808DB28:
- ldr r0, _0808DB30 @ =sub_808EB50
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DB30: .4byte sub_808EB50
-_0808DB34:
- ldr r0, _0808DB3C @ =sub_808E4B0
- bl add_to_c3_somehow
- b _0808DB86
- .align 2, 0
-_0808DB3C: .4byte sub_808E4B0
-_0808DB40:
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0xD
- b _0808DB5C
-_0808DB4A:
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0x11
- b _0808DB5C
-_0808DB54:
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0x16
-_0808DB5C:
- bl sub_808FBA4
- ldr r0, _0808DB6C @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x6
- strb r0, [r1]
- b _0808DB86
- .align 2, 0
-_0808DB6C: .4byte sPSSData
-_0808DB70:
- ldr r0, _0808DB8C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808DB86
- bl sub_808FD20
- ldr r0, _0808DB90 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808DB86:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808DB8C: .4byte gMain
-_0808DB90: .4byte sub_808D2BC
- thumb_func_end sub_808D878
-
- thumb_func_start sub_808DB94
-sub_808DB94: @ 808DB94
- push {r4,lr}
- ldr r4, _0808DBA8 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808DBAC
- cmp r0, 0x1
- beq _0808DBBC
- b _0808DBE6
- .align 2, 0
-_0808DBA8: .4byte sPSSData
-_0808DBAC:
- movs r0, 0
- bl sub_8092B7C
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808DBE6
-_0808DBBC:
- bl sub_8092BF8
- lsls r0, 24
- cmp r0, 0
- bne _0808DBE6
- ldr r0, _0808DBD8 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808DBE0
- ldr r0, _0808DBDC @ =sub_808E688
- bl add_to_c3_somehow
- b _0808DBE6
- .align 2, 0
-_0808DBD8: .4byte sInPartyMenu
-_0808DBDC: .4byte sub_808E688
-_0808DBE0:
- ldr r0, _0808DBEC @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808DBE6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808DBEC: .4byte sub_808D2BC
- thumb_func_end sub_808DB94
-
- thumb_func_start sub_808DBF0
-sub_808DBF0: @ 808DBF0
- push {r4,lr}
- ldr r4, _0808DC04 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808DC08
- cmp r0, 0x1
- beq _0808DC1E
- b _0808DC46
- .align 2, 0
-_0808DC04: .4byte sPSSData
-_0808DC08:
- movs r0, 0x1
- bl sub_808FE54
- movs r0, 0x1
- bl sub_8092B7C
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808DC46
-_0808DC1E:
- bl sub_8092BF8
- lsls r0, 24
- cmp r0, 0
- bne _0808DC46
- ldr r0, _0808DC38 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808DC40
- ldr r0, _0808DC3C @ =sub_808E688
- bl add_to_c3_somehow
- b _0808DC46
- .align 2, 0
-_0808DC38: .4byte sInPartyMenu
-_0808DC3C: .4byte sub_808E688
-_0808DC40:
- ldr r0, _0808DC4C @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808DC46:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808DC4C: .4byte sub_808D2BC
- thumb_func_end sub_808DBF0
-
- thumb_func_start sub_808DC50
-sub_808DC50: @ 808DC50
- push {r4,lr}
- ldr r4, _0808DC64 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808DC68
- cmp r0, 0x1
- beq _0808DC7E
- b _0808DC92
- .align 2, 0
-_0808DC64: .4byte sPSSData
-_0808DC68:
- movs r0, 0
- bl sub_808FE54
- movs r0, 0x2
- bl sub_8092B7C
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808DC92
-_0808DC7E:
- bl sub_8092BF8
- lsls r0, 24
- cmp r0, 0
- bne _0808DC92
- bl BoxSetMosaic
- ldr r0, _0808DC98 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808DC92:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808DC98: .4byte sub_808D2BC
- thumb_func_end sub_808DC50
-
- thumb_func_start sub_808DC9C
-sub_808DC9C: @ 808DC9C
- push {lr}
- ldr r0, _0808DCB4 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _0808DD7E
- lsls r0, 2
- ldr r1, _0808DCB8 @ =_0808DCBC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808DCB4: .4byte sPSSData
-_0808DCB8: .4byte _0808DCBC
- .align 2, 0
-_0808DCBC:
- .4byte _0808DCD4
- .4byte _0808DD0C
- .4byte _0808DD2C
- .4byte _0808DD42
- .4byte _0808DD5A
- .4byte _0808DD78
-_0808DCD4:
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- bne _0808DCF4
- movs r0, 0xE
- bl sub_808FBA4
- ldr r0, _0808DCF0 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1]
- b _0808DD7E
- .align 2, 0
-_0808DCF0: .4byte sPSSData
-_0808DCF4:
- bl sub_8092B5C
- movs r0, 0
- bl sub_8092B7C
- ldr r0, _0808DD08 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x2
- strb r0, [r1]
- b _0808DD7E
- .align 2, 0
-_0808DD08: .4byte sPSSData
-_0808DD0C:
- ldr r0, _0808DD24 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808DD7E
- bl sub_808FD20
- ldr r0, _0808DD28 @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808DD7E
- .align 2, 0
-_0808DD24: .4byte gMain
-_0808DD28: .4byte sub_808D2BC
-_0808DD2C:
- bl sub_8092BF8
- lsls r0, 24
- cmp r0, 0
- bne _0808DD7E
- movs r0, 0x1
- bl sub_8091184
- bl sub_808FAD4
- b _0808DD68
-_0808DD42:
- bl sub_808FAF8
- lsls r0, 24
- cmp r0, 0
- bne _0808DD7E
- movs r0, 0x1
- bl sub_808FE54
- movs r0, 0x1
- bl sub_8092B7C
- b _0808DD68
-_0808DD5A:
- bl sub_8092BF8
- lsls r0, 24
- cmp r0, 0
- bne _0808DD7E
- bl sub_808FAA8
-_0808DD68:
- ldr r0, _0808DD74 @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808DD7E
- .align 2, 0
-_0808DD74: .4byte sPSSData
-_0808DD78:
- ldr r0, _0808DD84 @ =sub_808D7FC
- bl add_to_c3_somehow
-_0808DD7E:
- pop {r0}
- bx r0
- .align 2, 0
-_0808DD84: .4byte sub_808D7FC
- thumb_func_end sub_808DC9C
-
- thumb_func_start sub_808DD88
-sub_808DD88: @ 808DD88
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0808DDA4 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x4
- bls _0808DD98
- b _0808DEBA
-_0808DD98:
- lsls r0, 2
- ldr r1, _0808DDA8 @ =_0808DDAC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808DDA4: .4byte sPSSData
-_0808DDA8: .4byte _0808DDAC
- .align 2, 0
-_0808DDAC:
- .4byte _0808DDC0
- .4byte _0808DDFC
- .4byte _0808DE64
- .4byte _0808DE7C
- .4byte _0808DEA0
-_0808DDC0:
- movs r0, 0x6
- bl sub_808FBA4
- ldr r4, _0808DDEC @ =sPSSData
- ldr r0, [r4]
- ldr r1, _0808DDF0 @ =0x00001e58
- adds r0, r1
- ldr r2, _0808DDF4 @ =0x0000dac7
- movs r1, 0
- str r1, [sp]
- movs r1, 0xA
- movs r3, 0x3
- bl sub_808C854
- ldr r0, _0808DDF8 @ =gUnknown_20397B6
- ldrb r0, [r0]
- bl sub_808C940
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- b _0808DEB8
- .align 2, 0
-_0808DDEC: .4byte sPSSData
-_0808DDF0: .4byte 0x00001e58
-_0808DDF4: .4byte 0x0000dac7
-_0808DDF8: .4byte gUnknown_20397B6
-_0808DDFC:
- bl sub_808C95C
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- cmp r0, 0xC8
- beq _0808DEBA
- cmp r0, 0xC9
- bne _0808DE1C
- bl sub_808FD20
- bl sub_808C950
- bl sub_808C8FC
- b _0808DE92
-_0808DE1C:
- adds r0, r4, 0
- bl sub_80930E4
- lsls r0, 24
- cmp r0, 0
- beq _0808DE50
- ldr r0, _0808DE48 @ =gUnknown_20397B6
- strb r4, [r0]
- movs r0, 0x2
- bl sub_808FE54
- bl sub_808FD20
- bl sub_808C950
- bl sub_808C8FC
- ldr r0, _0808DE4C @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x2
- b _0808DEB8
- .align 2, 0
-_0808DE48: .4byte gUnknown_20397B6
-_0808DE4C: .4byte sPSSData
-_0808DE50:
- movs r0, 0x8
- bl sub_808FBA4
- ldr r0, _0808DE60 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x4
- b _0808DEB8
- .align 2, 0
-_0808DE60: .4byte sPSSData
-_0808DE64:
- bl CompactPartySlots
- bl sub_80909F4
- ldr r0, _0808DE78 @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- b _0808DEB8
- .align 2, 0
-_0808DE78: .4byte sPSSData
-_0808DE7C:
- bl sub_8090A60
- lsls r0, 24
- cmp r0, 0
- bne _0808DEBA
- bl sub_8093174
- bl BoxSetMosaic
- bl sub_808FAA8
-_0808DE92:
- ldr r0, _0808DE9C @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808DEBA
- .align 2, 0
-_0808DE9C: .4byte sub_808D2BC
-_0808DEA0:
- ldr r0, _0808DEC4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808DEBA
- movs r0, 0x6
- bl sub_808FBA4
- ldr r0, _0808DEC8 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x1
-_0808DEB8:
- strb r0, [r1]
-_0808DEBA:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808DEC4: .4byte gMain
-_0808DEC8: .4byte sPSSData
- thumb_func_end sub_808DD88
-
- thumb_func_start sub_808DECC
-sub_808DECC: @ 808DECC
- push {lr}
- ldr r0, _0808DEE4 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0xD
- bls _0808DEDA
- b _0808E0AE
-_0808DEDA:
- lsls r0, 2
- ldr r1, _0808DEE8 @ =_0808DEEC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808DEE4: .4byte sPSSData
-_0808DEE8: .4byte _0808DEEC
- .align 2, 0
-_0808DEEC:
- .4byte _0808DF24
- .4byte _0808DF3A
- .4byte _0808DF72
- .4byte _0808DF98
- .4byte _0808DFA4
- .4byte _0808DFBC
- .4byte _0808DFF8
- .4byte _0808E010
- .4byte _0808E01C
- .4byte _0808E020
- .4byte _0808E034
- .4byte _0808E050
- .4byte _0808E062
- .4byte _0808E098
-_0808DF24:
- movs r0, 0x9
- bl sub_808FBA4
- movs r0, 0x1
- bl sub_808FCE8
- ldr r0, _0808DF54 @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0808DF3A:
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0808DF64
- cmp r1, 0
- bgt _0808DF58
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0808DF5E
- b _0808E0AE
- .align 2, 0
-_0808DF54: .4byte sPSSData
-_0808DF58:
- cmp r1, 0x1
- beq _0808DF5E
- b _0808E0AE
-_0808DF5E:
- bl sub_808FD20
- b _0808E010
-_0808DF64:
- bl sub_808FD20
- bl sub_809328C
- bl sub_8093194
- b _0808E074
-_0808DF72:
- bl sub_8093420
- bl sub_80931EC
- lsls r0, 24
- cmp r0, 0
- beq _0808DF82
- b _0808E0AE
-_0808DF82:
- b _0808DF8A
-_0808DF84:
- cmp r0, 0
- bne _0808DF8A
- b _0808E088
-_0808DF8A:
- bl sub_8093420
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _0808DF84
- b _0808E074
-_0808DF98:
- bl sub_8093218
- bl sub_808F1D0
- movs r0, 0xA
- b _0808E070
-_0808DFA4:
- ldr r0, _0808DFB8 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- bne _0808DFB2
- b _0808E0AE
-_0808DFB2:
- movs r0, 0xB
- b _0808E070
- .align 2, 0
-_0808DFB8: .4byte gMain
-_0808DFBC:
- ldr r0, _0808DFE0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E0AE
- bl sub_808FD20
- ldr r0, _0808DFE4 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808DFE8
- bl CompactPartySlots
- bl sub_80909F4
- b _0808E074
- .align 2, 0
-_0808DFE0: .4byte gMain
-_0808DFE4: .4byte sInPartyMenu
-_0808DFE8:
- ldr r0, _0808DFF4 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x7
- strb r0, [r1]
- b _0808E0AE
- .align 2, 0
-_0808DFF4: .4byte sPSSData
-_0808DFF8:
- bl sub_8090A60
- lsls r0, 24
- cmp r0, 0
- bne _0808E0AE
- bl sub_8092F54
- bl BoxSetMosaic
- bl sub_808FAA8
- b _0808E074
-_0808E010:
- ldr r0, _0808E018 @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808E0AE
- .align 2, 0
-_0808E018: .4byte sub_808D2BC
-_0808E01C:
- movs r0, 0xA
- b _0808E070
-_0808E020:
- ldr r0, _0808E030 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E0AE
- movs r0, 0x15
- b _0808E070
- .align 2, 0
-_0808E030: .4byte gMain
-_0808E034:
- ldr r0, _0808E04C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E0AE
- bl sub_808FD20
- bl sub_8091114
- b _0808E074
- .align 2, 0
-_0808E04C: .4byte gMain
-_0808E050:
- bl sub_8091150
- lsls r0, 24
- cmp r0, 0
- bne _0808E0AE
- bl sub_8093264
- movs r0, 0x13
- b _0808E070
-_0808E062:
- ldr r0, _0808E080 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E0AE
- movs r0, 0x14
-_0808E070:
- bl sub_808FBA4
-_0808E074:
- ldr r0, _0808E084 @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E0AE
- .align 2, 0
-_0808E080: .4byte gMain
-_0808E084: .4byte sPSSData
-_0808E088:
- ldr r0, _0808E094 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x8
- strb r0, [r1]
- b _0808E0AE
- .align 2, 0
-_0808E094: .4byte sPSSData
-_0808E098:
- ldr r0, _0808E0B4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E0AE
- bl sub_808FD20
- ldr r0, _0808E0B8 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E0AE:
- pop {r0}
- bx r0
- .align 2, 0
-_0808E0B4: .4byte gMain
-_0808E0B8: .4byte sub_808D2BC
- thumb_func_end sub_808DECC
-
- thumb_func_start sub_808E0BC
-sub_808E0BC: @ 808E0BC
- push {r4,lr}
- ldr r4, _0808E0D0 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808E0D4
- cmp r0, 0x1
- beq _0808E108
- b _0808E130
- .align 2, 0
-_0808E0D0: .4byte sPSSData
-_0808E0D4:
- movs r0, 0xC
- bl sub_808FBA4
- ldr r0, [r4]
- ldr r2, _0808E100 @ =0x00000ce7
- adds r1, r0, r2
- ldrb r1, [r1]
- ldr r3, _0808E104 @ =0x00000da4
- adds r0, r3
- strb r1, [r0]
- ldr r0, [r4]
- adds r0, r2
- ldrb r0, [r0]
- movs r1, 0xB0
- movs r2, 0x10
- bl DrawMonMarkingsMenu
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E130
- .align 2, 0
-_0808E100: .4byte 0x00000ce7
-_0808E104: .4byte 0x00000da4
-_0808E108:
- bl MonMarkingsHandleInput
- lsls r0, 24
- cmp r0, 0
- bne _0808E130
- bl TeardownMonMarkingsMenu
- bl sub_808FD20
- ldr r0, [r4]
- ldr r1, _0808E138 @ =0x00000da4
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8093878
- bl sub_808F1D0
- ldr r0, _0808E13C @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E130:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E138: .4byte 0x00000da4
-_0808E13C: .4byte sub_808D2BC
- thumb_func_end sub_808E0BC
-
- thumb_func_start sub_808E140
-sub_808E140: @ 808E140
- push {r4,r5,lr}
- ldr r5, _0808E158 @ =sPSSData
- ldr r0, [r5]
- ldrb r1, [r0]
- cmp r1, 0x1
- beq _0808E18C
- cmp r1, 0x1
- bgt _0808E15C
- cmp r1, 0
- beq _0808E166
- b _0808E1EA
- .align 2, 0
-_0808E158: .4byte sPSSData
-_0808E15C:
- cmp r1, 0x2
- beq _0808E1B4
- cmp r1, 0x3
- beq _0808E1DA
- b _0808E1EA
-_0808E166:
- ldr r1, _0808E17C @ =0x00000ce2
- adds r0, r1
- ldrh r0, [r0]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- bne _0808E180
- bl sub_808FD20
- b _0808E1D0
- .align 2, 0
-_0808E17C: .4byte 0x00000ce2
-_0808E180:
- ldr r0, _0808E188 @ =sub_808E6D0
- bl add_to_c3_somehow
- b _0808E1EA
- .align 2, 0
-_0808E188: .4byte sub_808E6D0
-_0808E18C:
- movs r0, 0x2
- bl sub_8094D14
- ldr r0, _0808E1B0 @ =sInPartyMenu
- ldrb r0, [r0]
- negs r4, r0
- orrs r4, r0
- lsrs r4, 31
- bl sub_8094CC8
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8095D84
- b _0808E1D0
- .align 2, 0
-_0808E1B0: .4byte sInPartyMenu
-_0808E1B4:
- bl sub_809610C
- lsls r0, 24
- cmp r0, 0
- bne _0808E1EA
- movs r0, 0x3
- bl sub_8094D14
- bl sub_808FD20
- bl sub_8092F54
- bl sub_808F49C
-_0808E1D0:
- ldr r1, [r5]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E1EA
-_0808E1DA:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E1EA
- ldr r0, _0808E1F0 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E1EA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E1F0: .4byte sub_808D2BC
- thumb_func_end sub_808E140
-
- thumb_func_start sub_808E1F4
-sub_808E1F4: @ 808E1F4
- push {r4,lr}
- ldr r0, _0808E20C @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x4
- bhi _0808E2A4
- lsls r0, 2
- ldr r1, _0808E210 @ =_0808E214
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808E20C: .4byte sPSSData
-_0808E210: .4byte _0808E214
- .align 2, 0
-_0808E214:
- .4byte _0808E27C
- .4byte _0808E228
- .4byte _0808E250
- .4byte _0808E270
- .4byte _0808E294
-_0808E228:
- movs r0, 0x2
- bl sub_8094D14
- ldr r0, _0808E24C @ =sInPartyMenu
- ldrb r0, [r0]
- negs r4, r0
- orrs r4, r0
- lsrs r4, 31
- bl sub_8094CC8
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8095F74
- b _0808E280
- .align 2, 0
-_0808E24C: .4byte sInPartyMenu
-_0808E250:
- bl sub_809610C
- lsls r0, 24
- cmp r0, 0
- bne _0808E2A4
- movs r0, 0
- bl sub_8094D14
- bl sub_8092F54
- bl sub_808F49C
- movs r0, 0x1C
- bl sub_808FBA4
- b _0808E280
-_0808E270:
- ldr r0, _0808E28C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E2A4
-_0808E27C:
- bl sub_808FD20
-_0808E280:
- ldr r0, _0808E290 @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E2A4
- .align 2, 0
-_0808E28C: .4byte gMain
-_0808E290: .4byte sPSSData
-_0808E294:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E2A4
- ldr r0, _0808E2AC @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E2A4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E2AC: .4byte sub_808D2BC
- thumb_func_end sub_808E1F4
-
- thumb_func_start sub_808E2B0
-sub_808E2B0: @ 808E2B0
- push {r4,r5,lr}
- ldr r1, _0808E2CC @ =sPSSData
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r5, r1, 0
- cmp r0, 0x4
- bls _0808E2C0
- b _0808E3BA
-_0808E2C0:
- lsls r0, 2
- ldr r1, _0808E2D0 @ =_0808E2D4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808E2CC: .4byte sPSSData
-_0808E2D0: .4byte _0808E2D4
- .align 2, 0
-_0808E2D4:
- .4byte _0808E2E8
- .4byte _0808E340
- .4byte _0808E360
- .4byte _0808E3A4
- .4byte _0808E38C
-_0808E2E8:
- ldr r0, [r5]
- ldr r1, _0808E310 @ =0x00000ce2
- adds r0, r1
- ldrh r0, [r0]
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- cmp r0, 0
- bne _0808E314
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0x1A
- bl sub_808FBA4
- ldr r1, [r5]
- movs r0, 0x3
- strb r0, [r1]
- b _0808E3BA
- .align 2, 0
-_0808E310: .4byte 0x00000ce2
-_0808E314:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808E33C @ =sInPartyMenu
- ldrb r0, [r0]
- negs r4, r0
- orrs r4, r0
- lsrs r4, 31
- bl sub_8094CC8
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8096008
- ldr r1, [r5]
- movs r0, 0x1
- strb r0, [r1]
- b _0808E3BA
- .align 2, 0
-_0808E33C: .4byte sInPartyMenu
-_0808E340:
- bl sub_809610C
- lsls r0, 24
- cmp r0, 0
- bne _0808E3BA
- movs r0, 0x19
- bl sub_808FBA4
- ldr r0, _0808E35C @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x2
- strb r0, [r1]
- b _0808E3BA
- .align 2, 0
-_0808E35C: .4byte sPSSData
-_0808E360:
- ldr r0, _0808E384 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E3BA
- bl sub_808FD20
- bl sub_8092F54
- bl sub_808F49C
- ldr r0, _0808E388 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x4
- strb r0, [r1]
- b _0808E3BA
- .align 2, 0
-_0808E384: .4byte gMain
-_0808E388: .4byte sPSSData
-_0808E38C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E3BA
- ldr r0, _0808E3A0 @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808E3BA
- .align 2, 0
-_0808E3A0: .4byte sub_808D2BC
-_0808E3A4:
- ldr r0, _0808E3C0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E3BA
- bl sub_808FD20
- ldr r0, _0808E3C4 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E3BA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E3C0: .4byte gMain
-_0808E3C4: .4byte sub_808D2BC
- thumb_func_end sub_808E2B0
-
- thumb_func_start sub_808E3C8
-sub_808E3C8: @ 808E3C8
- push {r4,lr}
- ldr r1, _0808E3E0 @ =sPSSData
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r4, r1, 0
- cmp r0, 0x4
- bhi _0808E4A4
- lsls r0, 2
- ldr r1, _0808E3E4 @ =_0808E3E8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808E3E0: .4byte sPSSData
-_0808E3E4: .4byte _0808E3E8
- .align 2, 0
-_0808E3E8:
- .4byte _0808E3FC
- .4byte _0808E428
- .4byte _0808E450
- .4byte _0808E470
- .4byte _0808E494
-_0808E3FC:
- ldr r0, [r4]
- ldr r1, _0808E418 @ =0x00000ce2
- adds r0, r1
- ldrh r0, [r0]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- bne _0808E41C
- bl sub_808FD20
- ldr r1, [r4]
- b _0808E484
- .align 2, 0
-_0808E418: .4byte 0x00000ce2
-_0808E41C:
- ldr r0, _0808E424 @ =sub_808E6D0
- bl add_to_c3_somehow
- b _0808E4A4
- .align 2, 0
-_0808E424: .4byte sub_808E6D0
-_0808E428:
- movs r0, 0x2
- bl sub_8094D14
- ldr r0, _0808E44C @ =sInPartyMenu
- ldrb r0, [r0]
- negs r4, r0
- orrs r4, r0
- lsrs r4, 31
- bl sub_8094CC8
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8095EA0
- b _0808E480
- .align 2, 0
-_0808E44C: .4byte sInPartyMenu
-_0808E450:
- bl sub_809610C
- lsls r0, 24
- cmp r0, 0
- bne _0808E4A4
- movs r0, 0x3
- bl sub_8094D14
- bl sub_8092F54
- bl sub_808F49C
- movs r0, 0x1D
- bl sub_808FBA4
- b _0808E480
-_0808E470:
- ldr r0, _0808E48C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E4A4
- bl sub_808FD20
-_0808E480:
- ldr r0, _0808E490 @ =sPSSData
- ldr r1, [r0]
-_0808E484:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E4A4
- .align 2, 0
-_0808E48C: .4byte gMain
-_0808E490: .4byte sPSSData
-_0808E494:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E4A4
- ldr r0, _0808E4AC @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E4A4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E4AC: .4byte sub_808D2BC
- thumb_func_end sub_808E3C8
-
- thumb_func_start sub_808E4B0
-sub_808E4B0: @ 808E4B0
- push {lr}
- ldr r0, _0808E4C8 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x6
- bhi _0808E55C
- lsls r0, 2
- ldr r1, _0808E4CC @ =_0808E4D0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808E4C8: .4byte sPSSData
-_0808E4CC: .4byte _0808E4D0
- .align 2, 0
-_0808E4D0:
- .4byte _0808E4EC
- .4byte _0808E4F2
- .4byte _0808E50C
- .4byte _0808E512
- .4byte _0808E518
- .4byte _0808E530
- .4byte _0808E54C
-_0808E4EC:
- bl sub_808FD20
- b _0808E53A
-_0808E4F2:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E55C
- movs r0, 0x6
- bl PlaySE
- bl sub_8096694
- bl sub_80966F4
- b _0808E53A
-_0808E50C:
- bl sub_8096728
- b _0808E534
-_0808E512:
- bl IsDma3ManagerBusyWithBgCopy
- b _0808E534
-_0808E518:
- ldr r0, _0808E52C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E55C
- movs r0, 0x6
- bl PlaySE
- b _0808E53A
- .align 2, 0
-_0808E52C: .4byte gMain
-_0808E530:
- bl sub_80967C0
-_0808E534:
- lsls r0, 24
- cmp r0, 0
- bne _0808E55C
-_0808E53A:
- ldr r0, _0808E548 @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E55C
- .align 2, 0
-_0808E548: .4byte sPSSData
-_0808E54C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E55C
- ldr r0, _0808E560 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E55C:
- pop {r0}
- bx r0
- .align 2, 0
-_0808E560: .4byte sub_808D2BC
- thumb_func_end sub_808E4B0
-
- thumb_func_start sub_808E564
-sub_808E564: @ 808E564
- push {r4,lr}
- ldr r0, _0808E57C @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x5
- bls _0808E572
- b _0808E67C
-_0808E572:
- lsls r0, 2
- ldr r1, _0808E580 @ =_0808E584
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808E57C: .4byte sPSSData
-_0808E580: .4byte _0808E584
- .align 2, 0
-_0808E584:
- .4byte _0808E59C
- .4byte _0808E5BC
- .4byte _0808E61A
- .4byte _0808E63C
- .4byte _0808E650
- .4byte _0808E66C
-_0808E59C:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1B
- bl sub_808FBA4
- movs r0, 0
- bl sub_808FCE8
- ldr r0, _0808E5B8 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1]
- b _0808E67C
- .align 2, 0
-_0808E5B8: .4byte sPSSData
-_0808E5BC:
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0808E5E0
- cmp r1, 0
- bgt _0808E5D6
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0808E5DA
- b _0808E67C
-_0808E5D6:
- cmp r1, 0x1
- bne _0808E67C
-_0808E5DA:
- bl sub_808FD20
- b _0808E660
-_0808E5E0:
- ldr r4, _0808E604 @ =sPSSData
- ldr r0, [r4]
- ldr r1, _0808E608 @ =0x00002224
- adds r0, r1
- ldrh r0, [r0]
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808E60C
- bl sub_808FD20
- ldr r1, [r4]
- movs r0, 0x3
- strb r0, [r1]
- b _0808E67C
- .align 2, 0
-_0808E604: .4byte sPSSData
-_0808E608: .4byte 0x00002224
-_0808E60C:
- movs r0, 0x1A
- bl sub_808FBA4
- ldr r1, [r4]
- movs r0, 0x2
- strb r0, [r1]
- b _0808E67C
-_0808E61A:
- ldr r0, _0808E634 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E67C
- bl sub_808FD20
- ldr r0, _0808E638 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x5
- strb r0, [r1]
- b _0808E67C
- .align 2, 0
-_0808E634: .4byte gMain
-_0808E638: .4byte sPSSData
-_0808E63C:
- bl sub_8096088
- ldr r0, _0808E64C @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x4
- strb r0, [r1]
- b _0808E67C
- .align 2, 0
-_0808E64C: .4byte sPSSData
-_0808E650:
- bl sub_809610C
- lsls r0, 24
- cmp r0, 0
- bne _0808E67C
- movs r0, 0
- bl sub_8094D14
-_0808E660:
- ldr r0, _0808E668 @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808E67C
- .align 2, 0
-_0808E668: .4byte sub_808D2BC
-_0808E66C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E67C
- ldr r0, _0808E684 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E67C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E684: .4byte sub_808D2BC
- thumb_func_end sub_808E564
-
- thumb_func_start sub_808E688
-sub_808E688: @ 808E688
- push {r4,lr}
- ldr r4, _0808E69C @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808E6A0
- cmp r0, 0x1
- beq _0808E6B2
- b _0808E6C6
- .align 2, 0
-_0808E69C: .4byte sPSSData
-_0808E6A0:
- bl CompactPartySlots
- bl sub_80909F4
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E6C6
-_0808E6B2:
- bl sub_8090A60
- lsls r0, 24
- cmp r0, 0
- bne _0808E6C6
- bl sub_808FAA8
- ldr r0, _0808E6CC @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E6C6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E6CC: .4byte sub_808D2BC
- thumb_func_end sub_808E688
-
- thumb_func_start sub_808E6D0
-sub_808E6D0: @ 808E6D0
- push {r4,lr}
- ldr r4, _0808E6E8 @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808E6FE
- cmp r0, 0x1
- bgt _0808E6EC
- cmp r0, 0
- beq _0808E6F6
- b _0808E738
- .align 2, 0
-_0808E6E8: .4byte sPSSData
-_0808E6EC:
- cmp r0, 0x2
- beq _0808E70A
- cmp r0, 0x3
- beq _0808E728
- b _0808E738
-_0808E6F6:
- movs r0, 0x1E
- bl sub_808FBA4
- b _0808E71A
-_0808E6FE:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E738
- b _0808E71A
-_0808E70A:
- ldr r0, _0808E724 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808E738
- bl sub_808FD20
-_0808E71A:
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E738
- .align 2, 0
-_0808E724: .4byte gMain
-_0808E728:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E738
- ldr r0, _0808E740 @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E738:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E740: .4byte sub_808D2BC
- thumb_func_end sub_808E6D0
-
- thumb_func_start box_related
-box_related: @ 808E744
- push {r4,lr}
- ldr r4, _0808E75C @ =sPSSData
- ldr r0, [r4]
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808E77A
- cmp r0, 0x1
- bgt _0808E760
- cmp r0, 0
- beq _0808E766
- b _0808E830
- .align 2, 0
-_0808E75C: .4byte sPSSData
-_0808E760:
- cmp r0, 0x2
- beq _0808E78C
- b _0808E830
-_0808E766:
- movs r0, 0x1
- bl sub_808FBA4
- bl sub_8094E88
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E830
-_0808E77A:
- bl sub_8094F90
- lsls r0, 24
- cmp r0, 0
- bne _0808E830
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0808E78C:
- bl sub_8094F94
- adds r0, 0x1
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xC
- bhi _0808E830
- lsls r0, 2
- ldr r1, _0808E7A4 @ =_0808E7A8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808E7A4: .4byte _0808E7A8
- .align 2, 0
-_0808E7A8:
- .4byte _0808E7DC
- .4byte _0808E7DC
- .4byte _0808E830
- .4byte _0808E830
- .4byte _0808E830
- .4byte _0808E830
- .4byte _0808E830
- .4byte _0808E830
- .4byte _0808E830
- .4byte _0808E830
- .4byte _0808E820
- .4byte _0808E808
- .4byte _0808E7F4
-_0808E7DC:
- movs r0, 0x1
- bl sub_80920FC
- bl sub_808FD20
- ldr r0, _0808E7F0 @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808E830
- .align 2, 0
-_0808E7F0: .4byte sub_808D2BC
-_0808E7F4:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808E804 @ =sub_808EA90
- bl add_to_c3_somehow
- b _0808E830
- .align 2, 0
-_0808E804: .4byte sub_808EA90
-_0808E808:
- movs r0, 0x5
- bl PlaySE
- bl sub_808FD20
- ldr r0, _0808E81C @ =sub_808E83C
- bl add_to_c3_somehow
- b _0808E830
- .align 2, 0
-_0808E81C: .4byte sub_808E83C
-_0808E820:
- movs r0, 0x5
- bl PlaySE
- bl sub_808FD20
- ldr r0, _0808E838 @ =sub_808E9A0
- bl add_to_c3_somehow
-_0808E830:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E838: .4byte sub_808E9A0
- thumb_func_end box_related
-
- thumb_func_start sub_808E83C
-sub_808E83C: @ 808E83C
- push {r4,r5,lr}
- ldr r0, _0808E854 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x5
- bls _0808E84A
- b _0808E994
-_0808E84A:
- lsls r0, 2
- ldr r1, _0808E858 @ =_0808E85C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808E854: .4byte sPSSData
-_0808E858: .4byte _0808E85C
- .align 2, 0
-_0808E85C:
- .4byte _0808E874
- .4byte _0808E888
- .4byte _0808E8A0
- .4byte _0808E8FA
- .4byte _0808E924
- .4byte _0808E97E
-_0808E874:
- bl sub_808FD34
- movs r0, 0x2
- bl sub_808FBA4
- ldr r0, _0808E884 @ =sPSSData
- ldr r1, [r0]
- b _0808E976
- .align 2, 0
-_0808E884: .4byte sPSSData
-_0808E888:
- bl sub_8094F90
- lsls r0, 24
- cmp r0, 0
- beq _0808E894
- b _0808E994
-_0808E894:
- ldr r0, _0808E89C @ =sPSSData
- ldr r1, [r0]
- b _0808E976
- .align 2, 0
-_0808E89C: .4byte sPSSData
-_0808E8A0:
- bl sub_8094F94
- ldr r5, _0808E8CC @ =sPSSData
- ldr r1, [r5]
- ldr r4, _0808E8D0 @ =0x0000078e
- adds r1, r4
- strh r0, [r1]
- movs r2, 0
- ldrsh r0, [r1, r2]
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _0808E8D8
- movs r0, 0x1
- bl sub_80920FC
- bl sub_808FD20
- ldr r0, _0808E8D4 @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808E994
- .align 2, 0
-_0808E8CC: .4byte sPSSData
-_0808E8D0: .4byte 0x0000078e
-_0808E8D4: .4byte sub_808D2BC
-_0808E8D8:
- cmp r0, r1
- blt _0808E994
- cmp r0, 0x15
- bgt _0808E994
- cmp r0, 0x12
- blt _0808E994
- movs r0, 0x5
- bl PlaySE
- bl sub_8095024
- ldr r1, [r5]
- adds r2, r1, r4
- ldrh r0, [r2]
- subs r0, 0x12
- strh r0, [r2]
- b _0808E976
-_0808E8FA:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0808E994
- ldr r4, _0808E91C @ =sPSSData
- ldr r0, [r4]
- ldr r1, _0808E920 @ =0x0000078e
- adds r0, r1
- ldrb r0, [r0]
- bl sub_808FD5C
- movs r0, 0x3
- bl sub_808FBA4
- b _0808E974
- .align 2, 0
-_0808E91C: .4byte sPSSData
-_0808E920: .4byte 0x0000078e
-_0808E924:
- bl sub_8094F94
- ldr r4, _0808E954 @ =sPSSData
- ldr r1, [r4]
- movs r5, 0xF2
- lsls r5, 3
- adds r1, r5
- strh r0, [r1]
- movs r2, 0
- ldrsh r1, [r1, r2]
- movs r0, 0x2
- negs r0, r0
- cmp r1, r0
- beq _0808E994
- adds r0, 0x1
- cmp r1, r0
- bne _0808E958
- bl sub_808FD20
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1]
- b _0808E994
- .align 2, 0
-_0808E954: .4byte sPSSData
-_0808E958:
- movs r0, 0x5
- bl PlaySE
- bl sub_808FD20
- ldr r1, [r4]
- adds r1, r5
- ldrh r0, [r1]
- subs r0, 0x16
- strh r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- bl sub_8091730
-_0808E974:
- ldr r1, [r4]
-_0808E976:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808E994
-_0808E97E:
- bl sub_8091760
- lsls r0, 24
- cmp r0, 0
- bne _0808E994
- movs r0, 0x1
- bl sub_80920FC
- ldr r0, _0808E99C @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808E994:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808E99C: .4byte sub_808D2BC
- thumb_func_end sub_808E83C
-
- thumb_func_start sub_808E9A0
-sub_808E9A0: @ 808E9A0
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _0808E9B8 @ =sPSSData
- ldr r0, [r5]
- ldrb r4, [r0]
- cmp r4, 0x1
- beq _0808E9F4
- cmp r4, 0x1
- bgt _0808E9BC
- cmp r4, 0
- beq _0808E9C6
- b _0808EA80
- .align 2, 0
-_0808E9B8: .4byte sPSSData
-_0808E9BC:
- cmp r4, 0x2
- beq _0808EA4C
- cmp r4, 0x3
- beq _0808EA64
- b _0808EA80
-_0808E9C6:
- movs r0, 0x5
- bl sub_808FBA4
- ldr r0, [r5]
- ldr r1, _0808E9EC @ =0x00001e58
- adds r0, r1
- ldr r2, _0808E9F0 @ =0x0000dac7
- str r4, [sp]
- movs r1, 0xA
- movs r3, 0x3
- bl sub_808C854
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- bl sub_808C940
- b _0808EA56
- .align 2, 0
-_0808E9EC: .4byte 0x00001e58
-_0808E9F0: .4byte 0x0000dac7
-_0808E9F4:
- bl sub_808C95C
- ldr r1, [r5]
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0808EA44 @ =0x000002ca
- adds r1, r2
- strh r0, [r1]
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0xC8
- beq _0808EA80
- bl sub_808FD20
- bl sub_808C950
- bl sub_808C8FC
- ldr r0, [r5]
- ldr r2, _0808EA44 @ =0x000002ca
- adds r1, r0, r2
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0xC9
- beq _0808EA34
- adds r4, r0, 0
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _0808EA56
-_0808EA34:
- movs r0, 0x1
- bl sub_80920FC
- ldr r0, _0808EA48 @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808EA80
- .align 2, 0
-_0808EA44: .4byte 0x000002ca
-_0808EA48: .4byte sub_808D2BC
-_0808EA4C:
- ldr r1, _0808EA60 @ =0x000002ca
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8091514
-_0808EA56:
- ldr r1, [r5]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808EA80
- .align 2, 0
-_0808EA60: .4byte 0x000002ca
-_0808EA64:
- bl sub_80915FC
- lsls r0, 24
- cmp r0, 0
- bne _0808EA80
- ldr r0, [r5]
- ldr r2, _0808EA88 @ =0x000002ca
- adds r0, r2
- ldrb r0, [r0]
- bl sub_808BA00
- ldr r0, _0808EA8C @ =sub_808D2BC
- bl add_to_c3_somehow
-_0808EA80:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808EA88: .4byte 0x000002ca
-_0808EA8C: .4byte sub_808D2BC
- thumb_func_end sub_808E9A0
-
- thumb_func_start sub_808EA90
-sub_808EA90: @ 808EA90
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _0808EAA4 @ =sPSSData
- ldr r0, [r5]
- ldrb r4, [r0]
- cmp r4, 0
- beq _0808EAA8
- cmp r4, 0x1
- beq _0808EAC6
- b _0808EAE0
- .align 2, 0
-_0808EAA4: .4byte sPSSData
-_0808EAA8:
- bl sub_8093630
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, [r5]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808EAE0
-_0808EAC6:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _0808EAE0
- ldr r0, _0808EAE8 @ =sWhichToReshow
- strb r4, [r0]
- ldr r1, [r5]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- ldr r0, _0808EAEC @ =sub_808EE18
- bl add_to_c3_somehow
-_0808EAE0:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808EAE8: .4byte sWhichToReshow
-_0808EAEC: .4byte sub_808EE18
- thumb_func_end sub_808EA90
-
- thumb_func_start sub_808EAF0
-sub_808EAF0: @ 808EAF0
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _0808EB04 @ =sPSSData
- ldr r0, [r5]
- ldrb r4, [r0]
- cmp r4, 0
- beq _0808EB08
- cmp r4, 0x1
- beq _0808EB26
- b _0808EB40
- .align 2, 0
-_0808EB04: .4byte sPSSData
-_0808EB08:
- bl sub_80936B8
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, [r5]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808EB40
-_0808EB26:
- bl UpdatePaletteFade
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _0808EB40
- ldr r0, _0808EB48 @ =sWhichToReshow
- strb r1, [r0]
- ldr r0, [r5]
- strb r4, [r0, 0x2]
- ldr r0, _0808EB4C @ =sub_808EE18
- bl add_to_c3_somehow
-_0808EB40:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808EB48: .4byte sWhichToReshow
-_0808EB4C: .4byte sub_808EE18
- thumb_func_end sub_808EAF0
-
- thumb_func_start sub_808EB50
-sub_808EB50: @ 808EB50
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _0808EB64 @ =sPSSData
- ldr r0, [r4]
- ldrb r1, [r0]
- cmp r1, 0
- beq _0808EB68
- cmp r1, 0x1
- beq _0808EB82
- b _0808EB9E
- .align 2, 0
-_0808EB64: .4byte sPSSData
-_0808EB68:
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, [r4]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808EB9E
-_0808EB82:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _0808EB9E
- ldr r1, _0808EBA8 @ =sWhichToReshow
- movs r0, 0x2
- strb r0, [r1]
- ldr r1, [r4]
- movs r0, 0x3
- strb r0, [r1, 0x2]
- ldr r0, _0808EBAC @ =sub_808EE18
- bl add_to_c3_somehow
-_0808EB9E:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808EBA8: .4byte sWhichToReshow
-_0808EBAC: .4byte sub_808EE18
- thumb_func_end sub_808EB50
-
- thumb_func_start sub_808EBB0
-sub_808EBB0: @ 808EBB0
- push {r4,lr}
- ldr r0, _0808EBC8 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x4
- bls _0808EBBE
- b _0808ECD0
-_0808EBBE:
- lsls r0, 2
- ldr r1, _0808EBCC @ =_0808EBD0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808EBC8: .4byte sPSSData
-_0808EBCC: .4byte _0808EBD0
- .align 2, 0
-_0808EBD0:
- .4byte _0808EBE4
- .4byte _0808EC40
- .4byte _0808EC54
- .4byte _0808EC90
- .4byte _0808ECAC
-_0808EBE4:
- bl sub_80939A0
- lsls r0, 24
- cmp r0, 0
- beq _0808EC08
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0xF
- bl sub_808FBA4
- ldr r0, _0808EC04 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1]
- b _0808ECD0
- .align 2, 0
-_0808EC04: .4byte sPSSData
-_0808EC08:
- bl sub_809616C
- lsls r0, 24
- cmp r0, 0
- beq _0808EC20
- ldr r0, _0808EC1C @ =sub_808E564
- bl add_to_c3_somehow
- b _0808ECD0
- .align 2, 0
-_0808EC1C: .4byte sub_808E564
-_0808EC20:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0
- bl sub_808FBA4
- movs r0, 0
- bl sub_808FCE8
- ldr r0, _0808EC3C @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x2
- strb r0, [r1]
- b _0808ECD0
- .align 2, 0
-_0808EC3C: .4byte sPSSData
-_0808EC40:
- ldr r0, _0808EC50 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808ECD0
- b _0808EC72
- .align 2, 0
-_0808EC50: .4byte gMain
-_0808EC54:
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0808EC84
- cmp r1, 0
- bgt _0808EC6E
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0808EC72
- b _0808ECD0
-_0808EC6E:
- cmp r1, 0x1
- bne _0808ECD0
-_0808EC72:
- bl sub_808FD20
- ldr r0, _0808EC80 @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808ECD0
- .align 2, 0
-_0808EC80: .4byte sub_808D2BC
-_0808EC84:
- movs r0, 0x3
- bl PlaySE
- bl sub_808FD20
- b _0808EC9A
-_0808EC90:
- movs r0, 0x14
- movs r1, 0
- movs r2, 0x1
- bl sub_80A0A70
-_0808EC9A:
- ldr r0, _0808ECA8 @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808ECD0
- .align 2, 0
-_0808ECA8: .4byte sPSSData
-_0808ECAC:
- bl sub_80A0AAC
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0808ECD0
- bl sub_808FF70
- bl CalculatePlayerPartyCount
- ldr r1, _0808ECD8 @ =gPlayerPartyCount
- strb r0, [r1]
- ldr r0, _0808ECDC @ =sPSSData
- ldr r0, [r0]
- strb r4, [r0, 0x2]
- ldr r0, _0808ECE0 @ =sub_808EE18
- bl add_to_c3_somehow
-_0808ECD0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808ECD8: .4byte gPlayerPartyCount
-_0808ECDC: .4byte sPSSData
-_0808ECE0: .4byte sub_808EE18
- thumb_func_end sub_808EBB0
-
- thumb_func_start sub_808ECE4
-sub_808ECE4: @ 808ECE4
- push {r4,lr}
- ldr r0, _0808ECFC @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x4
- bls _0808ECF2
- b _0808EE04
-_0808ECF2:
- lsls r0, 2
- ldr r1, _0808ED00 @ =_0808ED04
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808ECFC: .4byte sPSSData
-_0808ED00: .4byte _0808ED04
- .align 2, 0
-_0808ED04:
- .4byte _0808ED18
- .4byte _0808ED74
- .4byte _0808ED88
- .4byte _0808EDC4
- .4byte _0808EDE0
-_0808ED18:
- bl sub_80939A0
- lsls r0, 24
- cmp r0, 0
- beq _0808ED3C
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0xF
- bl sub_808FBA4
- ldr r0, _0808ED38 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1]
- b _0808EE04
- .align 2, 0
-_0808ED38: .4byte sPSSData
-_0808ED3C:
- bl sub_809616C
- lsls r0, 24
- cmp r0, 0
- beq _0808ED54
- ldr r0, _0808ED50 @ =sub_808E564
- bl add_to_c3_somehow
- b _0808EE04
- .align 2, 0
-_0808ED50: .4byte sub_808E564
-_0808ED54:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x12
- bl sub_808FBA4
- movs r0, 0
- bl sub_808FCE8
- ldr r0, _0808ED70 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0x2
- strb r0, [r1]
- b _0808EE04
- .align 2, 0
-_0808ED70: .4byte sPSSData
-_0808ED74:
- ldr r0, _0808ED84 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF3
- ands r0, r1
- cmp r0, 0
- beq _0808EE04
- b _0808EDA8
- .align 2, 0
-_0808ED84: .4byte gMain
-_0808ED88:
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0808EDA8
- cmp r1, 0
- bgt _0808EDA2
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0808EDB8
- b _0808EE04
-_0808EDA2:
- cmp r1, 0x1
- beq _0808EDB8
- b _0808EE04
-_0808EDA8:
- bl sub_808FD20
- ldr r0, _0808EDB4 @ =sub_808D2BC
- bl add_to_c3_somehow
- b _0808EE04
- .align 2, 0
-_0808EDB4: .4byte sub_808D2BC
-_0808EDB8:
- movs r0, 0x3
- bl PlaySE
- bl sub_808FD20
- b _0808EDCE
-_0808EDC4:
- movs r0, 0x14
- movs r1, 0
- movs r2, 0
- bl sub_80A0A70
-_0808EDCE:
- ldr r0, _0808EDDC @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808EE04
- .align 2, 0
-_0808EDDC: .4byte sPSSData
-_0808EDE0:
- bl sub_80A0AAC
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0808EE04
- bl sub_808FF70
- bl CalculatePlayerPartyCount
- ldr r1, _0808EE0C @ =gPlayerPartyCount
- strb r0, [r1]
- ldr r0, _0808EE10 @ =sPSSData
- ldr r0, [r0]
- strb r4, [r0, 0x2]
- ldr r0, _0808EE14 @ =sub_808EE18
- bl add_to_c3_somehow
-_0808EE04:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808EE0C: .4byte gPlayerPartyCount
-_0808EE10: .4byte sPSSData
-_0808EE14: .4byte sub_808EE18
- thumb_func_end sub_808ECE4
-
- thumb_func_start sub_808EE18
-sub_808EE18: @ 808EE18
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0808EE44 @ =sPSSData
- ldr r0, [r0]
- ldrb r4, [r0, 0x2]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _0808EE4C
- bl sub_809616C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808EE4C
- bl sub_80961C4
- ldr r1, _0808EE48 @ =gUnknown_20397BA
- b _0808EE50
- .align 2, 0
-_0808EE44: .4byte sPSSData
-_0808EE48: .4byte gUnknown_20397BA
-_0808EE4C:
- ldr r1, _0808EE70 @ =gUnknown_20397BA
- movs r0, 0
-_0808EE50:
- strh r0, [r1]
- cmp r4, 0x1
- beq _0808EE78
- cmp r4, 0x1
- ble _0808EE62
- cmp r4, 0x2
- beq _0808EEBC
- cmp r4, 0x3
- beq _0808EEE8
-_0808EE62:
- bl sub_808EF68
- ldr r0, _0808EE74 @ =sub_808C7B4
- bl SetMainCallback2
- b _0808EEF6
- .align 2, 0
-_0808EE70: .4byte gUnknown_20397BA
-_0808EE74: .4byte sub_808C7B4
-_0808EE78:
- ldr r0, _0808EEAC @ =sPSSData
- ldr r1, [r0]
- ldr r2, _0808EEB0 @ =0x0000217c
- adds r0, r1, r2
- ldr r0, [r0]
- mov r8, r0
- subs r2, 0x3
- adds r0, r1, r2
- ldrb r6, [r0]
- subs r2, 0x1
- adds r0, r1, r2
- ldrb r5, [r0]
- ldr r0, _0808EEB4 @ =0x0000217a
- adds r1, r0
- ldrb r4, [r1]
- bl sub_808EF68
- ldr r3, _0808EEB8 @ =sub_808CE60
- str r4, [sp]
- mov r0, r8
- adds r1, r6, 0
- adds r2, r5, 0
- bl ShowPokemonSummaryScreen
- b _0808EEF6
- .align 2, 0
-_0808EEAC: .4byte sPSSData
-_0808EEB0: .4byte 0x0000217c
-_0808EEB4: .4byte 0x0000217a
-_0808EEB8: .4byte sub_808CE60
-_0808EEBC:
- bl sub_808EF68
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- bl GetBoxNamePtr
- adds r1, r0, 0
- movs r0, 0
- str r0, [sp]
- ldr r0, _0808EEE4 @ =sub_808CE60
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl DoNamingScreen
- b _0808EEF6
- .align 2, 0
-_0808EEE4: .4byte sub_808CE60
-_0808EEE8:
- bl sub_808EF68
- ldr r2, _0808EF08 @ =sub_808CE60
- movs r0, 0x4
- movs r1, 0
- bl GoToBagMenu
-_0808EEF6:
- adds r0, r7, 0
- bl DestroyTask
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808EF08: .4byte sub_808CE60
- thumb_func_end sub_808EE18
-
- thumb_func_start sub_808EF0C
-sub_808EF0C: @ 808EF0C
- push {lr}
- sub sp, 0x4
- ldr r0, _0808EF40 @ =gSpecialVar_ItemId
- ldrh r1, [r0]
- mov r0, sp
- strh r1, [r0]
- cmp r1, 0
- beq _0808EF60
- bl sub_8094CC8
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, _0808EF44 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808EF4C
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0808EF48 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- b _0808EF56
- .align 2, 0
-_0808EF40: .4byte gSpecialVar_ItemId
-_0808EF44: .4byte sInPartyMenu
-_0808EF48: .4byte gPlayerParty
-_0808EF4C:
- adds r0, r1, 0
- movs r1, 0xC
- mov r2, sp
- bl SetBoxMonDataFromSelectedBox
-_0808EF56:
- mov r0, sp
- ldrh r0, [r0]
- movs r1, 0x1
- bl RemoveBagItem
-_0808EF60:
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_808EF0C
-
- thumb_func_start sub_808EF68
-sub_808EF68: @ 808EF68
- push {r4,lr}
- bl sub_80F7B2C
- bl sub_80950A4
- ldr r4, _0808EF88 @ =sPSSData
- ldr r0, [r4]
- bl Free
- movs r0, 0
- str r0, [r4]
- bl FreeAllWindowBuffers
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808EF88: .4byte sPSSData
- thumb_func_end sub_808EF68
-
- thumb_func_start sub_808EF8C
-sub_808EF8C: @ 808EF8C
- push {lr}
- sub sp, 0x4
- ldr r1, _0808EFB8 @ =0x00001f0f
- movs r0, 0xE
- bl SetGpuReg
- ldr r1, _0808EFBC @ =gUnknown_83CE438
- movs r0, 0
- str r0, [sp]
- movs r0, 0x3
- movs r2, 0
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r0, _0808EFC0 @ =gUnknown_83CE4D0
- ldr r1, _0808EFC4 @ =0x0600f800
- bl LZ77UnCompVram
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0808EFB8: .4byte 0x00001f0f
-_0808EFBC: .4byte gUnknown_83CE438
-_0808EFC0: .4byte gUnknown_83CE4D0
-_0808EFC4: .4byte 0x0600f800
- thumb_func_end sub_808EF8C
-
- thumb_func_start sub_808EFC8
-sub_808EFC8: @ 808EFC8
- push {lr}
- movs r0, 0x3
- movs r1, 0x80
- movs r2, 0x1
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0x80
- movs r2, 0x2
- bl ChangeBgY
- pop {r0}
- bx r0
- thumb_func_end sub_808EFC8
-
- thumb_func_start sub_808EFE4
-sub_808EFE4: @ 808EFE4
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r1, _0808F030 @ =gUnknown_83CEA50
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- ldr r1, _0808F034 @ =gUnknown_8E9C438
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r0, _0808F038 @ =gUnknown_83CE5FC
- ldr r5, _0808F03C @ =sPSSData
- ldr r1, [r5]
- ldr r4, _0808F040 @ =0x00005abc
- adds r1, r4
- bl LZ77UnCompWram
- ldr r1, [r5]
- adds r1, r4
- movs r0, 0x1
- bl SetBgTilemapBuffer
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808F030: .4byte gUnknown_83CEA50
-_0808F034: .4byte gUnknown_8E9C438
-_0808F038: .4byte gUnknown_83CE5FC
-_0808F03C: .4byte sPSSData
-_0808F040: .4byte 0x00005abc
- thumb_func_end sub_808EFE4
-
- thumb_func_start sub_808F044
-sub_808F044: @ 808F044
- push {lr}
- ldr r0, _0808F05C @ =gUnknown_83CEA30
- bl InitWindows
- lsls r0, 16
- cmp r0, 0
- beq _0808F060
- bl DeactivateAllTextPrinters
- movs r0, 0x1
- b _0808F062
- .align 2, 0
-_0808F05C: .4byte gUnknown_83CEA30
-_0808F060:
- movs r0, 0
-_0808F062:
- pop {r1}
- bx r1
- thumb_func_end sub_808F044
-
- thumb_func_start sub_808F068
-sub_808F068: @ 808F068
- push {lr}
- ldr r0, _0808F074 @ =gUnknown_83CEA60
- bl LoadSpritePalette
- pop {r0}
- bx r0
- .align 2, 0
-_0808F074: .4byte gUnknown_83CEA60
- thumb_func_end sub_808F068
-
- thumb_func_start sub_808F078
-sub_808F078: @ 808F078
- push {lr}
- ldr r0, _0808F0B0 @ =gUnknown_8E9C3F8
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0808F0B4 @ =gUnknown_8E9C418
- movs r1, 0x20
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0808F0B8 @ =gUnknown_83CEA10
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0808F0BC @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- beq _0808F0C4
- ldr r0, _0808F0C0 @ =gUnknown_83CE738
- movs r1, 0x30
- movs r2, 0x20
- bl LoadPalette
- b _0808F0CE
- .align 2, 0
-_0808F0B0: .4byte gUnknown_8E9C3F8
-_0808F0B4: .4byte gUnknown_8E9C418
-_0808F0B8: .4byte gUnknown_83CEA10
-_0808F0BC: .4byte sPSSData
-_0808F0C0: .4byte gUnknown_83CE738
-_0808F0C4:
- ldr r0, _0808F0EC @ =gUnknown_83CE758
- movs r1, 0x30
- movs r2, 0x20
- bl LoadPalette
-_0808F0CE:
- ldr r1, _0808F0F0 @ =0x00001e05
- movs r0, 0xA
- bl SetGpuReg
- bl sub_808F2BC
- bl sub_808F0F4
- bl sub_808F164
- bl sub_808F1D0
- pop {r0}
- bx r0
- .align 2, 0
-_0808F0EC: .4byte gUnknown_83CE758
-_0808F0F0: .4byte 0x00001e05
- thumb_func_end sub_808F078
-
- thumb_func_start sub_808F0F4
-sub_808F0F4: @ 808F0F4
- push {r4,lr}
- ldr r1, _0808F154 @ =0x0000dac8
- movs r0, 0x10
- movs r2, 0
- bl CreateMonMarkingSprite_AllOff
- ldr r4, _0808F158 @ =sPSSData
- ldr r1, [r4]
- movs r3, 0xD9
- lsls r3, 4
- adds r1, r3
- str r0, [r1]
- ldrb r2, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0, 0x5]
- ldr r0, [r4]
- adds r0, r3
- ldr r0, [r0]
- adds r0, 0x43
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, [r4]
- adds r0, r3
- ldr r2, [r0]
- movs r1, 0x28
- strh r1, [r2, 0x20]
- ldr r1, [r0]
- movs r0, 0x96
- strh r0, [r1, 0x22]
- movs r0, 0x10
- bl GetSpriteTileStartByTag
- ldr r1, [r4]
- ldr r2, _0808F15C @ =0x00000d9c
- adds r1, r2
- lsls r0, 16
- lsrs r0, 11
- ldr r2, _0808F160 @ =0x06010000
- adds r0, r2
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808F154: .4byte 0x0000dac8
-_0808F158: .4byte sPSSData
-_0808F15C: .4byte 0x00000d9c
-_0808F160: .4byte 0x06010000
- thumb_func_end sub_808F0F4
-
- thumb_func_start sub_808F164
-sub_808F164: @ 808F164
- push {r4,lr}
- sub sp, 0x8
- ldr r0, _0808F1BC @ =gUnknown_83CEA68
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- movs r4, 0
-_0808F17A:
- lsls r1, r4, 6
- subs r1, r4
- adds r1, 0x8
- lsls r1, 16
- asrs r1, 16
- ldr r0, _0808F1C0 @ =gUnknown_83CEBD8
- movs r2, 0x9
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0808F1C4 @ =sPSSData
- ldr r2, [r1]
- lsls r1, r4, 2
- ldr r3, _0808F1C8 @ =0x00000d94
- adds r2, r3
- adds r2, r1
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _0808F1CC @ =gSprites
- adds r1, r0
- str r1, [r2]
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _0808F17A
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808F1BC: .4byte gUnknown_83CEA68
-_0808F1C0: .4byte gUnknown_83CEBD8
-_0808F1C4: .4byte sPSSData
-_0808F1C8: .4byte 0x00000d94
-_0808F1CC: .4byte gSprites
- thumb_func_end sub_808F164
-
- thumb_func_start sub_808F1D0
-sub_808F1D0: @ 808F1D0
- push {lr}
- ldr r0, _0808F1FC @ =sPSSData
- ldr r1, [r0]
- movs r2, 0xCE
- lsls r2, 4
- adds r0, r1, r2
- ldrh r0, [r0]
- subs r2, 0x4
- adds r1, r2
- ldr r1, [r1]
- bl sub_808F3F8
- bl sub_808F49C
- bl sub_808F5E8
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- pop {r0}
- bx r0
- .align 2, 0
-_0808F1FC: .4byte sPSSData
- thumb_func_end sub_808F1D0
-
- thumb_func_start BoxSetMosaic
-BoxSetMosaic: @ 808F200
- push {lr}
- bl sub_808F1D0
- ldr r3, _0808F24C @ =sPSSData
- ldr r0, [r3]
- ldr r1, _0808F250 @ =0x00002238
- adds r0, r1
- ldr r2, [r0]
- cmp r2, 0
- beq _0808F248
- ldrb r0, [r2, 0x1]
- movs r1, 0x10
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldr r1, [r3]
- ldr r0, _0808F250 @ =0x00002238
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0xA
- strh r0, [r2, 0x2E]
- ldr r2, [r1]
- movs r0, 0x1
- strh r0, [r2, 0x30]
- ldr r2, [r1]
- ldr r0, _0808F254 @ =BoxSetMosaic2
- str r0, [r2, 0x1C]
- ldr r0, [r1]
- ldrh r0, [r0, 0x2E]
- lsls r1, r0, 12
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x4C
- bl SetGpuReg
-_0808F248:
- pop {r0}
- bx r0
- .align 2, 0
-_0808F24C: .4byte sPSSData
-_0808F250: .4byte 0x00002238
-_0808F254: .4byte BoxSetMosaic2
- thumb_func_end BoxSetMosaic
-
- thumb_func_start sub_808F258
-sub_808F258: @ 808F258
- ldr r0, _0808F26C @ =sPSSData
- ldr r0, [r0]
- ldr r1, _0808F270 @ =0x00002238
- adds r0, r1
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- lsls r0, 27
- lsrs r0, 31
- bx lr
- .align 2, 0
-_0808F26C: .4byte sPSSData
-_0808F270: .4byte 0x00002238
- thumb_func_end sub_808F258
-
- thumb_func_start BoxSetMosaic2
-BoxSetMosaic2: @ 808F274
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- ldrh r1, [r4, 0x30]
- subs r0, r1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- cmp r0, 0
- bge _0808F28A
- movs r0, 0
- strh r0, [r4, 0x2E]
-_0808F28A:
- ldrh r0, [r4, 0x2E]
- lsls r1, r0, 12
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x4C
- bl SetGpuReg
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0808F2B2
- ldrb r0, [r4, 0x1]
- movs r1, 0x11
- negs r1, r1
- ands r1, r0
- strb r1, [r4, 0x1]
- ldr r0, _0808F2B8 @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_0808F2B2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808F2B8: .4byte SpriteCallbackDummy
- thumb_func_end BoxSetMosaic2
-
- thumb_func_start sub_808F2BC
-sub_808F2BC: @ 808F2BC
- push {r4-r7,lr}
- sub sp, 0x28
- ldr r0, _0808F350 @ =sPSSData
- mov r12, r0
- ldr r1, [r0]
- ldr r4, _0808F354 @ =0x000022bc
- adds r0, r1, r4
- str r0, [sp, 0x18]
- add r3, sp, 0x18
- movs r0, 0x82
- lsls r0, 10
- str r0, [r3, 0x4]
- ldr r5, _0808F358 @ =0x0000223c
- adds r1, r5
- str r1, [sp, 0x20]
- ldr r0, _0808F35C @ =0x0000dac6
- add r2, sp, 0x20
- str r0, [r2, 0x4]
- mov r1, sp
- ldr r0, _0808F360 @ =gUnknown_83CEA70
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- movs r6, 0
- adds r7, r2, 0
- mov r5, r12
- movs r2, 0
- ldr r1, _0808F364 @ =0x000007ff
-_0808F2F6:
- ldr r0, [r5]
- adds r0, r4
- adds r0, r6
- strb r2, [r0]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, r1
- bls _0808F2F6
- movs r6, 0
- ldr r5, _0808F350 @ =sPSSData
- ldr r4, _0808F358 @ =0x0000223c
- movs r2, 0
-_0808F310:
- ldr r0, [r5]
- lsls r1, r6, 1
- adds r0, r4
- adds r0, r1
- strh r2, [r0]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0xF
- bls _0808F310
- ldr r0, _0808F350 @ =sPSSData
- ldr r0, [r0]
- ldr r6, _0808F368 @ =0x00002238
- adds r0, r6
- movs r1, 0
- str r1, [r0]
- adds r0, r3, 0
- bl LoadSpriteSheet
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- beq _0808F3C8
- adds r0, r7, 0
- bl LoadSpritePalette
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xFF
- beq _0808F3C8
- b _0808F3B4
- .align 2, 0
-_0808F350: .4byte sPSSData
-_0808F354: .4byte 0x000022bc
-_0808F358: .4byte 0x0000223c
-_0808F35C: .4byte 0x0000dac6
-_0808F360: .4byte gUnknown_83CEA70
-_0808F364: .4byte 0x000007ff
-_0808F368: .4byte 0x00002238
-_0808F36C:
- ldr r0, _0808F39C @ =sPSSData
- ldr r2, [r0]
- ldr r7, _0808F3A0 @ =0x00002238
- adds r3, r2, r7
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0808F3A4 @ =gSprites
- adds r0, r1
- str r0, [r3]
- lsls r0, r4, 4
- movs r1, 0x80
- lsls r1, 1
- adds r0, r1
- ldr r3, _0808F3A8 @ =0x00002232
- adds r1, r2, r3
- strh r0, [r1]
- ldr r6, _0808F3AC @ =0x00002234
- adds r2, r6
- lsls r0, r5, 5
- ldr r7, _0808F3B0 @ =0x06010000
- adds r0, r7
- str r0, [r2]
- b _0808F3C8
- .align 2, 0
-_0808F39C: .4byte sPSSData
-_0808F3A0: .4byte 0x00002238
-_0808F3A4: .4byte gSprites
-_0808F3A8: .4byte 0x00002232
-_0808F3AC: .4byte 0x00002234
-_0808F3B0: .4byte 0x06010000
-_0808F3B4:
- mov r0, sp
- movs r1, 0x28
- movs r2, 0x30
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- bne _0808F36C
-_0808F3C8:
- ldr r0, _0808F3EC @ =sPSSData
- ldr r0, [r0]
- ldr r1, _0808F3F0 @ =0x00002238
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bne _0808F3E2
- movs r0, 0x2
- bl FreeSpriteTilesByTag
- ldr r0, _0808F3F4 @ =0x0000dac6
- bl FreeSpritePaletteByTag
-_0808F3E2:
- add sp, 0x28
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808F3EC: .4byte sPSSData
-_0808F3F0: .4byte 0x00002238
-_0808F3F4: .4byte 0x0000dac6
- thumb_func_end sub_808F2BC
-
- thumb_func_start sub_808F3F8
-sub_808F3F8: @ 808F3F8
- push {r4-r7,lr}
- adds r3, r1, 0
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r6, _0808F468 @ =sPSSData
- ldr r4, [r6]
- ldr r7, _0808F46C @ =0x00002238
- adds r0, r4, r7
- ldr r0, [r0]
- cmp r0, 0
- beq _0808F496
- cmp r2, 0
- beq _0808F48C
- lsls r0, r2, 3
- ldr r1, _0808F470 @ =gMonFrontPicTable
- adds r0, r1
- ldr r5, _0808F474 @ =0x000022bc
- adds r1, r4, r5
- bl HandleLoadSpecialPokePic
- ldr r1, [r6]
- ldr r2, _0808F478 @ =0x00000cd8
- adds r0, r1, r2
- ldr r0, [r0]
- ldr r4, _0808F47C @ =0x0000223c
- adds r1, r4
- bl LZ77UnCompWram
- ldr r0, [r6]
- adds r5, r0, r5
- ldr r1, _0808F480 @ =0x00002234
- adds r0, r1
- ldr r1, [r0]
- ldr r2, _0808F484 @ =0x04000200
- adds r0, r5, 0
- bl CpuSet
- ldr r0, [r6]
- adds r4, r0, r4
- ldr r2, _0808F488 @ =0x00002232
- adds r0, r2
- ldrh r1, [r0]
- adds r0, r4, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, [r6]
- adds r0, r7
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- b _0808F496
- .align 2, 0
-_0808F468: .4byte sPSSData
-_0808F46C: .4byte 0x00002238
-_0808F470: .4byte gMonFrontPicTable
-_0808F474: .4byte 0x000022bc
-_0808F478: .4byte 0x00000cd8
-_0808F47C: .4byte 0x0000223c
-_0808F480: .4byte 0x00002234
-_0808F484: .4byte 0x04000200
-_0808F488: .4byte 0x00002232
-_0808F48C:
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_0808F496:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_808F3F8
-
- thumb_func_start sub_808F49C
-sub_808F49C: @ 808F49C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r6, _0808F51C @ =sPSSData
- ldr r2, [r6]
- ldrb r0, [r2, 0x1]
- cmp r0, 0x3
- beq _0808F528
- movs r4, 0
- movs r5, 0
- mov r8, r6
-_0808F4BC:
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- ldr r1, _0808F520 @ =0x00000cf5
- adds r0, r1
- mov r2, r8
- ldr r1, [r2]
- adds r2, r1, r0
- movs r3, 0x6
- cmp r4, 0x2
- bne _0808F4D4
- movs r3, 0xA
-_0808F4D4:
- lsls r0, r5, 24
- lsrs r0, 24
- str r0, [sp]
- movs r7, 0xFF
- str r7, [sp, 0x4]
- movs r6, 0
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0x2
- bl AddTextPrinterParameterized
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r5, 0
- adds r0, 0xE
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r4, 0x2
- bls _0808F4BC
- ldr r0, _0808F51C @ =sPSSData
- ldr r2, [r0]
- ldr r0, _0808F524 @ =0x00000d61
- adds r2, r0
- adds r0, r5, 0x2
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- str r7, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r3, 0x6
- bl AddTextPrinterParameterized
- b _0808F57E
- .align 2, 0
-_0808F51C: .4byte sPSSData
-_0808F520: .4byte 0x00000cf5
-_0808F524: .4byte 0x00000d61
-_0808F528:
- ldr r1, _0808F5BC @ =0x00000d61
- adds r2, r1
- movs r1, 0
- str r1, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r0, 0
- movs r3, 0x6
- bl AddTextPrinterParameterized
- movs r4, 0
- movs r5, 0xF
-_0808F542:
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- ldr r2, _0808F5C0 @ =0x00000cf5
- adds r0, r2
- ldr r1, [r6]
- adds r2, r1, r0
- movs r3, 0x6
- cmp r4, 0x2
- bne _0808F558
- movs r3, 0xA
-_0808F558:
- lsls r0, r5, 24
- lsrs r0, 24
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r1, 0x2
- bl AddTextPrinterParameterized
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r5, 0
- adds r0, 0xE
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r4, 0x2
- bls _0808F542
-_0808F57E:
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r4, _0808F5C4 @ =sPSSData
- ldr r1, [r4]
- movs r2, 0xCE
- lsls r2, 4
- adds r0, r1, r2
- ldrh r0, [r0]
- cmp r0, 0
- beq _0808F5C8
- adds r2, 0x7
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r2, 0xB5
- adds r1, r2
- ldr r1, [r1]
- bl sub_80BEBD0
- ldr r0, [r4]
- movs r1, 0xD9
- lsls r1, 4
- adds r0, r1
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- b _0808F5D8
- .align 2, 0
-_0808F5BC: .4byte 0x00000d61
-_0808F5C0: .4byte 0x00000cf5
-_0808F5C4: .4byte sPSSData
-_0808F5C8:
- movs r2, 0xD9
- lsls r2, 4
- adds r0, r1, r2
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
-_0808F5D8:
- strb r0, [r1]
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_808F49C
-
- thumb_func_start sub_808F5E8
-sub_808F5E8: @ 808F5E8
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0808F634 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCE
- lsls r1, 4
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0
- beq _0808F63C
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0x8
- bl sub_80F7CE8
- movs r4, 0
-_0808F60E:
- ldr r0, _0808F634 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r4, 2
- ldr r2, _0808F638 @ =0x00000d94
- adds r0, r2
- adds r0, r1
- ldr r0, [r0]
- lsls r1, r4, 1
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAnimIfDifferent
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _0808F60E
- b _0808F66E
- .align 2, 0
-_0808F634: .4byte sPSSData
-_0808F638: .4byte 0x00000d94
-_0808F63C:
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0
- movs r1, 0
- movs r2, 0x2
- movs r3, 0x8
- bl sub_80F7CE8
- movs r4, 0
-_0808F64E:
- ldr r0, _0808F684 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r4, 2
- ldr r2, _0808F688 @ =0x00000d94
- adds r0, r2
- adds r0, r1
- ldr r0, [r0]
- lsls r1, r4, 25
- lsrs r1, 24
- bl StartSpriteAnim
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _0808F64E
-_0808F66E:
- movs r0, 0
- bl sub_80F7E54
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808F684: .4byte sPSSData
-_0808F688: .4byte 0x00000d94
- thumb_func_end sub_808F5E8
-
- thumb_func_start sub_808F68C
-sub_808F68C: @ 808F68C
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0808F704 @ =gUnknown_8E9CAEC
- ldr r4, _0808F708 @ =sPSSData
- ldr r1, [r4]
- adds r1, 0xB0
- bl LZ77UnCompWram
- ldr r0, _0808F70C @ =gUnknown_8E9C3D8
- movs r1, 0x10
- movs r2, 0x20
- bl LoadPalette
- ldr r2, [r4]
- adds r2, 0xB0
- movs r0, 0x16
- str r0, [sp]
- movs r0, 0x1
- movs r1, 0x1
- movs r3, 0xC
- bl sub_80F7B80
- ldr r2, _0808F710 @ =gUnknown_83CE778
- movs r0, 0x4
- str r0, [sp]
- movs r0, 0x2
- movs r1, 0x1
- movs r3, 0x9
- bl sub_80F7B80
- movs r0, 0x1
- movs r1, 0xA
- movs r2, 0
- bl sub_80F7CAC
- movs r0, 0x2
- movs r1, 0x15
- movs r2, 0
- bl sub_80F7CAC
- bl sub_808F9FC
- ldr r0, _0808F714 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808F718
- movs r0, 0x1
- bl sub_808F90C
- movs r0, 0x1
- bl sub_809088C
- movs r0, 0x2
- bl sub_80F7E54
- movs r0, 0x1
- bl sub_80F7E54
- b _0808F73A
- .align 2, 0
-_0808F704: .4byte gUnknown_8E9CAEC
-_0808F708: .4byte sPSSData
-_0808F70C: .4byte gUnknown_8E9C3D8
-_0808F710: .4byte gUnknown_83CE778
-_0808F714: .4byte sInPartyMenu
-_0808F718:
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0x14
- movs r3, 0xC
- bl sub_80F7CE8
- movs r0, 0x1
- bl sub_808F90C
- movs r0, 0x1
- bl sub_80F7E54
- movs r0, 0x2
- bl sub_80F7E54
-_0808F73A:
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- ldr r0, _0808F754 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _0808F758 @ =0x000002c7
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808F754: .4byte sPSSData
-_0808F758: .4byte 0x000002c7
- thumb_func_end sub_808F68C
-
- thumb_func_start sub_808F75C
-sub_808F75C: @ 808F75C
- push {lr}
- ldr r0, _0808F788 @ =sPSSData
- ldr r1, [r0]
- movs r0, 0xB0
- lsls r0, 2
- adds r2, r1, r0
- movs r3, 0
- movs r0, 0x14
- strh r0, [r2]
- ldr r0, _0808F78C @ =0x000002c2
- adds r2, r1, r0
- movs r0, 0x2
- strh r0, [r2]
- ldr r0, _0808F790 @ =0x000002c5
- adds r1, r0
- strb r3, [r1]
- movs r0, 0
- bl sub_809088C
- pop {r0}
- bx r0
- .align 2, 0
-_0808F788: .4byte sPSSData
-_0808F78C: .4byte 0x000002c2
-_0808F790: .4byte 0x000002c5
- thumb_func_end sub_808F75C
-
- thumb_func_start sub_808F794
-sub_808F794: @ 808F794
- push {r4,lr}
- ldr r4, _0808F7F0 @ =sPSSData
- ldr r2, [r4]
- ldr r1, _0808F7F4 @ =0x000002c5
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x14
- beq _0808F802
- movs r0, 0xB0
- lsls r0, 2
- adds r1, r2, r0
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- ldr r0, _0808F7F8 @ =0x000002c2
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0x1
- bl sub_80F7D30
- movs r0, 0x1
- bl sub_80F7E54
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- movs r0, 0x8
- bl sub_8090B98
- ldr r1, [r4]
- ldr r0, _0808F7F4 @ =0x000002c5
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x14
- beq _0808F7FC
- movs r0, 0x1
- b _0808F804
- .align 2, 0
-_0808F7F0: .4byte sPSSData
-_0808F7F4: .4byte 0x000002c5
-_0808F7F8: .4byte 0x000002c2
-_0808F7FC:
- ldr r1, _0808F80C @ =sInPartyMenu
- movs r0, 0x1
- strb r0, [r1]
-_0808F802:
- movs r0, 0
-_0808F804:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0808F80C: .4byte sInPartyMenu
- thumb_func_end sub_808F794
-
- thumb_func_start sub_808F810
-sub_808F810: @ 808F810
- push {r4,lr}
- ldr r4, _0808F844 @ =sPSSData
- ldr r1, [r4]
- movs r0, 0xB0
- lsls r0, 2
- adds r2, r1, r0
- movs r3, 0
- movs r0, 0
- strh r0, [r2]
- ldr r0, _0808F848 @ =0x000002c2
- adds r2, r1, r0
- movs r0, 0x16
- strh r0, [r2]
- ldr r0, _0808F84C @ =0x000002c5
- adds r1, r0
- strb r3, [r1]
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _0808F83C
- bl sub_80960C0
-_0808F83C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808F844: .4byte sPSSData
-_0808F848: .4byte 0x000002c2
-_0808F84C: .4byte 0x000002c5
- thumb_func_end sub_808F810
-
- thumb_func_start sub_808F850
-sub_808F850: @ 808F850
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r5, _0808F8C8 @ =sPSSData
- ldr r2, [r5]
- ldr r1, _0808F8CC @ =0x000002c5
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x14
- beq _0808F8FC
- movs r0, 0xB0
- lsls r0, 2
- adds r1, r2, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- ldr r4, _0808F8D0 @ =0x000002c2
- adds r1, r2, r4
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- movs r2, 0x1
- negs r2, r2
- movs r0, 0x1
- movs r1, 0x3
- bl sub_80F7D30
- movs r0, 0x1
- bl sub_80F7E54
- movs r1, 0x80
- lsls r1, 1
- ldr r0, [r5]
- adds r0, r4
- ldrb r3, [r0]
- movs r0, 0xC
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r2, 0xA
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0x8
- negs r0, r0
- bl sub_8090B98
- ldr r1, [r5]
- ldr r0, _0808F8CC @ =0x000002c5
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x14
- beq _0808F8D4
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- movs r0, 0x1
- b _0808F8FE
- .align 2, 0
-_0808F8C8: .4byte sPSSData
-_0808F8CC: .4byte 0x000002c5
-_0808F8D0: .4byte 0x000002c2
-_0808F8D4:
- ldr r0, _0808F908 @ =sInPartyMenu
- movs r1, 0
- strb r1, [r0]
- bl sub_8090C44
- bl CompactPartySlots
- movs r0, 0x2
- str r0, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x9
- bl sub_80F7CE8
- movs r0, 0x2
- bl sub_80F7E54
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
-_0808F8FC:
- movs r0, 0
-_0808F8FE:
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0808F908: .4byte sInPartyMenu
- thumb_func_end sub_808F850
-
- thumb_func_start sub_808F90C
-sub_808F90C: @ 808F90C
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- cmp r0, 0
- beq _0808F926
- movs r0, 0x2
- str r0, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x9
- bl sub_80F7CE8
- b _0808F934
-_0808F926:
- movs r0, 0x2
- str r0, [sp]
- movs r1, 0
- movs r2, 0x2
- movs r3, 0x9
- bl sub_80F7CE8
-_0808F934:
- movs r0, 0x2
- bl sub_80F7E54
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_808F90C
-
- thumb_func_start sub_808F948
-sub_808F948: @ 808F948
- ldr r2, _0808F968 @ =sPSSData
- ldr r0, [r2]
- ldr r1, _0808F96C @ =0x000002c7
- adds r0, r1
- movs r3, 0x1
- strb r3, [r0]
- ldr r0, [r2]
- adds r1, 0x1
- adds r0, r1
- movs r1, 0x1E
- strb r1, [r0]
- ldr r0, [r2]
- ldr r1, _0808F970 @ =0x000002c9
- adds r0, r1
- strb r3, [r0]
- bx lr
- .align 2, 0
-_0808F968: .4byte sPSSData
-_0808F96C: .4byte 0x000002c7
-_0808F970: .4byte 0x000002c9
- thumb_func_end sub_808F948
-
- thumb_func_start sub_808F974
-sub_808F974: @ 808F974
- push {lr}
- ldr r0, _0808F994 @ =sPSSData
- ldr r0, [r0]
- ldr r2, _0808F998 @ =0x000002c7
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0
- beq _0808F98E
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x1
- bl sub_808F90C
-_0808F98E:
- pop {r0}
- bx r0
- .align 2, 0
-_0808F994: .4byte sPSSData
-_0808F998: .4byte 0x000002c7
- thumb_func_end sub_808F974
-
- thumb_func_start sub_808F99C
-sub_808F99C: @ 808F99C
- push {r4,lr}
- ldr r3, _0808F9F0 @ =sPSSData
- ldr r1, [r3]
- ldr r2, _0808F9F4 @ =0x000002c7
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808F9E8
- movs r0, 0xB2
- lsls r0, 2
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1E
- bls _0808F9E8
- ldr r0, [r3]
- movs r1, 0xB2
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r3]
- movs r2, 0
- ldr r4, _0808F9F8 @ =0x000002c9
- adds r1, r0, r4
- ldrb r0, [r1]
- cmp r0, 0
- bne _0808F9DC
- movs r2, 0x1
-_0808F9DC:
- strb r2, [r1]
- ldr r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- bl sub_808F90C
-_0808F9E8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808F9F0: .4byte sPSSData
-_0808F9F4: .4byte 0x000002c7
-_0808F9F8: .4byte 0x000002c9
- thumb_func_end sub_808F99C
-
- thumb_func_start sub_808F9FC
-sub_808F9FC: @ 808F9FC
- push {r4,lr}
- movs r4, 0x1
-_0808FA00:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _0808FA2C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- negs r1, r0
- orrs r1, r0
- lsrs r1, 31
- adds r0, r4, 0
- bl sub_808FA30
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _0808FA00
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808FA2C: .4byte gPlayerParty
- thumb_func_end sub_808F9FC
-
- thumb_func_start sub_808FA30
-sub_808FA30: @ 808FA30
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r7, _0808FA9C @ =gUnknown_83CE7D8
- cmp r1, 0
- beq _0808FA40
- ldr r7, _0808FAA0 @ =gUnknown_83CE7C0
-_0808FA40:
- subs r0, 0x1
- lsls r1, r0, 1
- adds r1, r0
- adds r1, 0x1
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 18
- movs r1, 0xE0
- lsls r1, 11
- adds r0, r1
- lsrs r3, r0, 16
- movs r0, 0
- ldr r1, _0808FAA4 @ =sPSSData
- mov r12, r1
-_0808FA5C:
- movs r2, 0
- adds r4, r7, 0
- adds r4, 0x8
- adds r5, r3, 0
- adds r5, 0xC
- adds r6, r0, 0x1
-_0808FA68:
- mov r0, r12
- ldr r1, [r0]
- adds r0, r3, r2
- lsls r0, 1
- adds r1, 0xB0
- adds r1, r0
- lsls r0, r2, 1
- adds r0, r7
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x3
- bls _0808FA68
- adds r7, r4, 0
- lsls r0, r5, 16
- lsrs r3, r0, 16
- lsls r0, r6, 16
- lsrs r0, 16
- cmp r0, 0x2
- bls _0808FA5C
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808FA9C: .4byte gUnknown_83CE7D8
-_0808FAA0: .4byte gUnknown_83CE7C0
-_0808FAA4: .4byte sPSSData
- thumb_func_end sub_808FA30
-
- thumb_func_start sub_808FAA8
-sub_808FAA8: @ 808FAA8
- push {lr}
- sub sp, 0x4
- bl sub_808F9FC
- movs r0, 0x16
- str r0, [sp]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- movs r3, 0xC
- bl sub_80F7CE8
- movs r0, 0x1
- bl sub_80F7E54
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_808FAA8
-
- thumb_func_start sub_808FAD4
-sub_808FAD4: @ 808FAD4
- push {lr}
- ldr r0, _0808FAF0 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _0808FAF4 @ =0x000002c6
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- movs r0, 0x6
- bl PlaySE
- bl sub_808F75C
- pop {r0}
- bx r0
- .align 2, 0
-_0808FAF0: .4byte sPSSData
-_0808FAF4: .4byte 0x000002c6
- thumb_func_end sub_808FAD4
-
- thumb_func_start sub_808FAF8
-sub_808FAF8: @ 808FAF8
- push {r4,r5,lr}
- ldr r4, _0808FB14 @ =sPSSData
- ldr r0, [r4]
- ldr r5, _0808FB18 @ =0x000002c6
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808FB32
- cmp r0, 0x1
- bgt _0808FB1C
- cmp r0, 0
- beq _0808FB22
- b _0808FB60
- .align 2, 0
-_0808FB14: .4byte sPSSData
-_0808FB18: .4byte 0x000002c6
-_0808FB1C:
- cmp r0, 0x2
- beq _0808FB5C
- b _0808FB60
-_0808FB22:
- bl sub_808F794
- lsls r0, 24
- cmp r0, 0
- bne _0808FB60
- bl sub_8092AE4
- b _0808FB4C
-_0808FB32:
- bl sub_80924A8
- lsls r0, 24
- cmp r0, 0
- bne _0808FB60
- ldr r0, [r4]
- ldr r1, _0808FB58 @ =0x00000ce6
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808FB4C
- bl BoxSetMosaic
-_0808FB4C:
- ldr r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0808FB60
- .align 2, 0
-_0808FB58: .4byte 0x00000ce6
-_0808FB5C:
- movs r0, 0
- b _0808FB62
-_0808FB60:
- movs r0, 0x1
-_0808FB62:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_808FAF8
-
- thumb_func_start sub_808FB68
-sub_808FB68: @ 808FB68
- push {lr}
- sub sp, 0xC
- movs r1, 0xE8
- lsls r1, 5
- movs r0, 0x8
- bl SetGpuReg
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0xD0
- bl TextWindow_SetStdFrame0_WithPal
- movs r0, 0x20
- str r0, [sp]
- movs r0, 0x14
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0xC
- pop {r0}
- bx r0
- thumb_func_end sub_808FB68
-
- thumb_func_start sub_808FBA4
-sub_808FBA4: @ 808FBA4
- push {r4-r6,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r6, r0, 24
- bl DynamicPlaceholderTextUtil_Reset
- ldr r1, _0808FBC8 @ =gUnknown_83CEA88
- lsls r0, r6, 3
- adds r0, r1
- ldrb r0, [r0, 0x4]
- cmp r0, 0x7
- bhi _0808FC7C
- lsls r0, 2
- ldr r1, _0808FBCC @ =_0808FBD0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0808FBC8: .4byte gUnknown_83CEA88
-_0808FBCC: .4byte _0808FBD0
- .align 2, 0
-_0808FBD0:
- .4byte _0808FC7C
- .4byte _0808FBF0
- .4byte _0808FBF0
- .4byte _0808FBF0
- .4byte _0808FC04
- .4byte _0808FC04
- .4byte _0808FC04
- .4byte _0808FC1C
-_0808FBF0:
- ldr r0, _0808FBFC @ =sPSSData
- ldr r1, [r0]
- ldr r0, _0808FC00 @ =0x00000cea
- adds r1, r0
- b _0808FC0C
- .align 2, 0
-_0808FBFC: .4byte sPSSData
-_0808FC00: .4byte 0x00000cea
-_0808FC04:
- ldr r0, _0808FC14 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _0808FC18 @ =0x000021d0
- adds r1, r2
-_0808FC0C:
- movs r0, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- b _0808FC7C
- .align 2, 0
-_0808FC14: .4byte sPSSData
-_0808FC18: .4byte 0x000021d0
-_0808FC1C:
- bl sub_809616C
- lsls r0, 24
- cmp r0, 0
- beq _0808FC40
- ldr r0, _0808FC38 @ =sPSSData
- ldr r4, [r0]
- ldr r0, _0808FC3C @ =0x000021db
- adds r4, r0
- bl sub_80961A8
- adds r1, r0, 0
- adds r0, r4, 0
- b _0808FC4C
- .align 2, 0
-_0808FC38: .4byte sPSSData
-_0808FC3C: .4byte 0x000021db
-_0808FC40:
- ldr r0, _0808FC54 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _0808FC58 @ =0x000021db
- adds r0, r1, r2
- ldr r2, _0808FC5C @ =0x00000d61
- adds r1, r2
-_0808FC4C:
- bl StringCopy
- adds r2, r0, 0
- b _0808FC62
- .align 2, 0
-_0808FC54: .4byte sPSSData
-_0808FC58: .4byte 0x000021db
-_0808FC5C: .4byte 0x00000d61
-_0808FC60:
- adds r2, r1, 0
-_0808FC62:
- subs r1, r2, 0x1
- ldrb r0, [r1]
- cmp r0, 0
- beq _0808FC60
- movs r0, 0xFF
- strb r0, [r2]
- ldr r0, _0808FCDC @ =sPSSData
- ldr r1, [r0]
- ldr r0, _0808FCE0 @ =0x000021db
- adds r1, r0
- movs r0, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
-_0808FC7C:
- ldr r5, _0808FCDC @ =sPSSData
- ldr r0, [r5]
- movs r4, 0x86
- lsls r4, 6
- adds r0, r4
- ldr r2, _0808FCE4 @ =gUnknown_83CEA88
- lsls r1, r6, 3
- adds r1, r2
- ldr r1, [r1]
- bl DynamicPlaceholderTextUtil_ExpandPlaceholders
- movs r0, 0x1
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, [r5]
- adds r2, r4
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x1
- movs r3, 0
- bl AddTextPrinterParameterized
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0xD
- bl DrawTextBorderOuter
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808FCDC: .4byte sPSSData
-_0808FCE0: .4byte 0x000021db
-_0808FCE4: .4byte gUnknown_83CEA88
- thumb_func_end sub_808FBA4
-
- thumb_func_start sub_808FCE8
-sub_808FCE8: @ 808FCE8
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0808FD1C @ =gUnknown_83CEB80
- movs r1, 0xB
- str r1, [sp]
- movs r1, 0xE
- str r1, [sp, 0x4]
- movs r1, 0x1
- str r1, [sp, 0x8]
- movs r2, 0
- movs r3, 0x2
- bl CreateYesNoMenu
- lsls r4, 24
- asrs r4, 24
- adds r0, r4, 0
- bl Menu_MoveCursorNoWrapAround
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808FD1C: .4byte gUnknown_83CEB80
- thumb_func_end sub_808FCE8
-
- thumb_func_start sub_808FD20
-sub_808FD20: @ 808FD20
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- pop {r0}
- bx r0
- thumb_func_end sub_808FD20
-
- thumb_func_start sub_808FD34
-sub_808FD34: @ 808FD34
- push {lr}
- bl sub_8094DA8
- movs r0, 0x12
- bl sub_8094DEC
- movs r0, 0x13
- bl sub_8094DEC
- movs r0, 0x14
- bl sub_8094DEC
- movs r0, 0x15
- bl sub_8094DEC
- bl sub_8094E88
- pop {r0}
- bx r0
- thumb_func_end sub_808FD34
-
- thumb_func_start sub_808FD5C
-sub_808FD5C: @ 808FD5C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl sub_8094DA8
- cmp r4, 0x1
- beq _0808FD9A
- cmp r4, 0x1
- bgt _0808FD76
- cmp r4, 0
- beq _0808FD80
- b _0808FDE6
-_0808FD76:
- cmp r5, 0x2
- beq _0808FDB4
- cmp r5, 0x3
- beq _0808FDCE
- b _0808FDE6
-_0808FD80:
- movs r0, 0x16
- bl sub_8094DEC
- movs r0, 0x17
- bl sub_8094DEC
- movs r0, 0x18
- bl sub_8094DEC
- movs r0, 0x19
- bl sub_8094DEC
- b _0808FDE6
-_0808FD9A:
- movs r0, 0x1A
- bl sub_8094DEC
- movs r0, 0x1B
- bl sub_8094DEC
- movs r0, 0x1C
- bl sub_8094DEC
- movs r0, 0x1D
- bl sub_8094DEC
- b _0808FDE6
-_0808FDB4:
- movs r0, 0x1E
- bl sub_8094DEC
- movs r0, 0x1F
- bl sub_8094DEC
- movs r0, 0x20
- bl sub_8094DEC
- movs r0, 0x21
- bl sub_8094DEC
- b _0808FDE6
-_0808FDCE:
- movs r0, 0x22
- bl sub_8094DEC
- movs r0, 0x23
- bl sub_8094DEC
- movs r0, 0x24
- bl sub_8094DEC
- movs r0, 0x25
- bl sub_8094DEC
-_0808FDE6:
- bl sub_8094E88
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_808FD5C
-
- thumb_func_start sub_808FDF0
-sub_808FDF0: @ 808FDF0
- ldr r0, _0808FDF8 @ =sCurrentBoxOption
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0808FDF8: .4byte sCurrentBoxOption
- thumb_func_end sub_808FDF0
-
- thumb_func_start sub_808FDFC
-sub_808FDFC: @ 808FDFC
- push {lr}
- bl sub_80939AC
- lsls r0, 24
- cmp r0, 0
- bne _0808FE38
- ldr r0, _0808FE24 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808FE28
- bl sub_8094CC8
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x1
- bl sub_8095C84
- b _0808FE38
- .align 2, 0
-_0808FE24: .4byte sInPartyMenu
-_0808FE28:
- bl sub_8094CC8
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_8095C84
-_0808FE38:
- ldr r1, _0808FE50 @ =gUnknown_20397BA
- ldrh r0, [r1]
- cmp r0, 0
- beq _0808FE4A
- bl sub_8095E2C
- movs r0, 0x3
- bl sub_8094D14
-_0808FE4A:
- pop {r0}
- bx r0
- .align 2, 0
-_0808FE50: .4byte gUnknown_20397BA
- thumb_func_end sub_808FDFC
-
- thumb_func_start sub_808FE54
-sub_808FE54: @ 808FE54
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_8094D34
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808FE90 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCE
- lsls r1, 4
- adds r0, r1
- ldrh r7, [r0]
- ldr r0, _0808FE94 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808FE9C
- movs r6, 0xE
- bl sub_8094CC8
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _0808FE98 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x41
- bl GetMonData
- b _0808FEB2
- .align 2, 0
-_0808FE90: .4byte sPSSData
-_0808FE94: .4byte sInPartyMenu
-_0808FE98: .4byte gPlayerParty
-_0808FE9C:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r6, r0, 24
- bl sub_8094CC8
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x41
- bl GetBoxMonDataFromSelectedBox
-_0808FEB2:
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, _0808FECC @ =sPSSData
- ldr r0, [r0]
- ldr r2, _0808FED0 @ =0x00002228
- adds r1, r0, r2
- cmp r5, 0x1
- beq _0808FF08
- cmp r5, 0x1
- bgt _0808FED4
- cmp r5, 0
- beq _0808FEDE
- b _0808FF6A
- .align 2, 0
-_0808FECC: .4byte sPSSData
-_0808FED0: .4byte 0x00002228
-_0808FED4:
- cmp r5, 0x2
- beq _0808FF3E
- cmp r5, 0x3
- beq _0808FF58
- b _0808FF6A
-_0808FEDE:
- ldr r0, _0808FEF0 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808FEF4
- cmp r4, 0xE
- beq _0808FF6A
-_0808FEEA:
- movs r2, 0x16
- b _0808FF02
- .align 2, 0
-_0808FEF0: .4byte sInPartyMenu
-_0808FEF4:
- cmp r4, 0xE
- beq _0808FEEA
- movs r0, 0x15
- cmp r4, r6
- beq _0808FF00
- movs r0, 0x14
-_0808FF00:
- adds r2, r0, 0
-_0808FF02:
- strh r7, [r1]
- strh r3, [r1, 0x2]
- b _0808FF60
-_0808FF08:
- movs r0, 0
- strh r7, [r1]
- strh r0, [r1, 0x2]
- strb r4, [r1, 0x4]
- movs r0, 0xFF
- strb r0, [r1, 0x5]
- ldr r0, _0808FF24 @ =sInPartyMenu
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808FF28
- cmp r4, 0xE
- beq _0808FF6A
- movs r2, 0x19
- b _0808FF64
- .align 2, 0
-_0808FF24: .4byte sInPartyMenu
-_0808FF28:
- cmp r4, 0xE
- bne _0808FF32
- movs r2, 0x1A
- strb r6, [r1, 0x4]
- b _0808FF64
-_0808FF32:
- cmp r4, r6
- beq _0808FF3A
- movs r2, 0x17
- b _0808FF62
-_0808FF3A:
- movs r2, 0x18
- b _0808FF64
-_0808FF3E:
- movs r2, 0x1A
- movs r0, 0
- strh r7, [r1]
- strh r0, [r1, 0x2]
- ldr r0, _0808FF54 @ =gUnknown_20397B6
- ldrb r0, [r0]
- strb r0, [r1, 0x4]
- movs r0, 0xFF
- strb r0, [r1, 0x5]
- b _0808FF64
- .align 2, 0
-_0808FF54: .4byte gUnknown_20397B6
-_0808FF58:
- movs r2, 0x1B
- movs r0, 0
- strh r0, [r1]
- strh r0, [r1, 0x2]
-_0808FF60:
- strb r4, [r1, 0x4]
-_0808FF62:
- strb r6, [r1, 0x5]
-_0808FF64:
- adds r0, r2, 0
- bl SetQuestLogEvent
-_0808FF6A:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_808FE54
-
- thumb_func_start sub_808FF70
-sub_808FF70: @ 808FF70
- push {r4,lr}
- ldr r4, _0808FFA0 @ =sLastUsedBox
- bl StorageGetCurrentBox
- ldrb r1, [r4]
- lsls r0, 24
- lsrs r0, 24
- cmp r1, r0
- beq _0808FF9A
- ldr r0, _0808FFA4 @ =0x00000843
- bl FlagClear
- ldr r4, _0808FFA8 @ =0x00004037
- bl StorageGetCurrentBox
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl VarSet
-_0808FF9A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808FFA0: .4byte sLastUsedBox
-_0808FFA4: .4byte 0x00000843
-_0808FFA8: .4byte 0x00004037
- thumb_func_end sub_808FF70
-
- thumb_func_start sub_808FFAC
-sub_808FFAC: @ 808FFAC
- push {r4-r6,lr}
- bl LoadMonIconPalettes
- movs r2, 0
- ldr r3, _0809003C @ =sPSSData
- ldr r5, _08090040 @ =0x00000b04
- movs r4, 0
- adds r6, r3, 0
-_0808FFBC:
- ldr r0, [r3]
- lsls r1, r2, 1
- adds r0, r5
- adds r0, r1
- strh r4, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x27
- bls _0808FFBC
- movs r2, 0
- ldr r5, _0809003C @ =sPSSData
- ldr r4, _08090044 @ =0x00000b54
- movs r3, 0
-_0808FFD8:
- ldr r0, [r5]
- lsls r1, r2, 1
- adds r0, r4
- adds r0, r1
- strh r3, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x27
- bls _0808FFD8
- movs r2, 0
- ldr r5, _0809003C @ =sPSSData
- ldr r4, _08090048 @ =0x00000a6c
- movs r3, 0
-_0808FFF4:
- ldr r0, [r5]
- lsls r1, r2, 2
- adds r0, r4
- adds r0, r1
- str r3, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x5
- bls _0808FFF4
- movs r2, 0
- ldr r5, _0809003C @ =sPSSData
- ldr r4, _0809004C @ =0x00000a84
- movs r3, 0
-_08090010:
- ldr r0, [r5]
- lsls r1, r2, 2
- adds r0, r4
- adds r0, r1
- str r3, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x1D
- bls _08090010
- ldr r0, [r6]
- ldr r2, _08090050 @ =0x00000a68
- adds r1, r0, r2
- movs r2, 0
- str r2, [r1]
- ldr r1, _08090054 @ =0x0000078c
- adds r0, r1
- strh r2, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0809003C: .4byte sPSSData
-_08090040: .4byte 0x00000b04
-_08090044: .4byte 0x00000b54
-_08090048: .4byte 0x00000a6c
-_0809004C: .4byte 0x00000a84
-_08090050: .4byte 0x00000a68
-_08090054: .4byte 0x0000078c
- thumb_func_end sub_808FFAC
-
- thumb_func_start sub_8090058
-sub_8090058: @ 8090058
- push {lr}
- bl sub_80939F4
- lsls r0, 24
- movs r1, 0x1
- cmp r0, 0
- beq _08090068
- movs r1, 0x2
-_08090068:
- adds r0, r1, 0
- pop {r1}
- bx r1
- thumb_func_end sub_8090058
-
- thumb_func_start sub_8090070
-sub_8090070: @ 8090070
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r5, _080900C4 @ =sPSSData
- ldr r0, [r5]
- ldr r4, _080900C8 @ =0x000020a0
- adds r0, r4
- movs r1, 0
- bl GetMonData
- adds r6, r0, 0
- ldr r0, [r5]
- adds r0, r4
- movs r1, 0x41
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_8090058
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- movs r0, 0x7
- str r0, [sp, 0x4]
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0
- bl sub_80912E0
- ldr r1, [r5]
- ldr r2, _080900CC @ =0x00000a68
- adds r1, r2
- str r0, [r1]
- ldr r1, _080900D0 @ =sub_80911B0
- str r1, [r0, 0x1C]
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080900C4: .4byte sPSSData
-_080900C8: .4byte 0x000020a0
-_080900CC: .4byte 0x00000a68
-_080900D0: .4byte sub_80911B0
- thumb_func_end sub_8090070
-
- thumb_func_start sub_80900D4
-sub_80900D4: @ 80900D4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r0, 0
- mov r8, r0
- movs r6, 0
- movs r7, 0
-_080900EE:
- movs r5, 0
- adds r1, r7, 0x1
- mov r10, r1
-_080900F4:
- mov r0, r9
- adds r1, r6, 0
- movs r2, 0x41
- bl GetBoxMonDataFromAnyBox
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _0809015C
- mov r0, r9
- adds r1, r6, 0
- movs r2, 0
- bl GetBoxMonDataFromAnyBox
- adds r1, r0, 0
- lsls r2, r5, 1
- adds r2, r5
- lsls r2, 19
- movs r3, 0xC8
- lsls r3, 15
- adds r2, r3
- asrs r2, 16
- lsls r3, r7, 1
- adds r3, r7
- lsls r3, 19
- movs r0, 0xB0
- lsls r0, 14
- adds r3, r0
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x13
- subs r0, r5
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- adds r0, r4, 0
- asrs r3, 16
- bl sub_80912E0
- ldr r1, _08090154 @ =sPSSData
- ldr r1, [r1]
- mov r3, r8
- lsls r2, r3, 2
- ldr r3, _08090158 @ =0x00000a84
- adds r1, r3
- adds r1, r2
- str r0, [r1]
- b _0809016C
- .align 2, 0
-_08090154: .4byte sPSSData
-_08090158: .4byte 0x00000a84
-_0809015C:
- ldr r0, _080901E4 @ =sPSSData
- ldr r0, [r0]
- mov r2, r8
- lsls r1, r2, 2
- ldr r3, _080901E8 @ =0x00000a84
- adds r0, r3
- adds r0, r1
- str r4, [r0]
-_0809016C:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- mov r0, r8
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x5
- bls _080900F4
- mov r1, r10
- lsls r0, r1, 16
- lsrs r7, r0, 16
- cmp r7, 0x4
- bls _080900EE
- ldr r0, _080901E4 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _080901D2
- movs r6, 0
- movs r2, 0xD
- negs r2, r2
- adds r4, r2, 0
-_080901A2:
- mov r0, r9
- adds r1, r6, 0
- movs r2, 0xC
- bl GetBoxMonDataFromAnyBox
- cmp r0, 0
- bne _080901C8
- ldr r0, _080901E4 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r6, 2
- ldr r3, _080901E8 @ =0x00000a84
- adds r0, r3
- adds r0, r1
- ldr r2, [r0]
- ldrb r0, [r2, 0x1]
- ands r0, r4
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x1]
-_080901C8:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x1D
- bls _080901A2
-_080901D2:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080901E4: .4byte sPSSData
-_080901E8: .4byte 0x00000a84
- thumb_func_end sub_80900D4
-
- thumb_func_start sub_80901EC
-sub_80901EC: @ 80901EC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r7, 0
- movs r1, 0x41
- bl GetBoxMonDataFromSelectedBox
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- cmp r0, 0
- beq _08090286
- adds r0, r7, 0
- movs r1, 0x6
- bl __umodsi3
- adds r6, r0, 0
- lsls r0, r6, 24
- lsrs r0, 24
- lsls r5, r0, 1
- adds r5, r0
- lsls r5, 19
- movs r0, 0xC8
- lsls r0, 15
- adds r5, r0
- lsrs r5, 16
- adds r0, r7, 0
- movs r1, 0x6
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 1
- adds r4, r0
- lsls r4, 19
- movs r0, 0xB0
- lsls r0, 14
- adds r4, r0
- lsrs r4, 16
- adds r0, r7, 0
- movs r1, 0
- bl GetBoxMonDataFromSelectedBox
- adds r1, r0, 0
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x13
- subs r0, r6
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- mov r0, r8
- adds r2, r5, 0
- adds r3, r4, 0
- bl sub_80912E0
- adds r3, r0, 0
- ldr r0, _08090294 @ =sPSSData
- ldr r2, [r0]
- lsls r1, r7, 2
- ldr r4, _08090298 @ =0x00000a84
- adds r0, r2, r4
- adds r0, r1
- str r3, [r0]
- ldrb r0, [r2, 0x1]
- cmp r0, 0x3
- bne _08090286
- ldrb r0, [r3, 0x1]
- movs r1, 0xD
- negs r1, r1
- ands r1, r0
- movs r0, 0x4
- orrs r1, r0
- strb r1, [r3, 0x1]
-_08090286:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08090294: .4byte sPSSData
-_08090298: .4byte 0x00000a84
- thumb_func_end sub_80901EC
-
- thumb_func_start sub_809029C
-sub_809029C: @ 809029C
- push {r4-r7,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0
- ldr r7, _080902D4 @ =sPSSData
- ldr r6, _080902D8 @ =0x00000a84
- movs r5, 0x1
- ldr r4, _080902DC @ =sub_8090324
-_080902AC:
- ldr r0, [r7]
- lsls r1, r2, 2
- adds r0, r6
- adds r1, r0, r1
- ldr r0, [r1]
- cmp r0, 0
- beq _080902C4
- strh r3, [r0, 0x32]
- ldr r0, [r1]
- strh r5, [r0, 0x36]
- ldr r0, [r1]
- str r4, [r0, 0x1C]
-_080902C4:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x1D
- bls _080902AC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080902D4: .4byte sPSSData
-_080902D8: .4byte 0x00000a84
-_080902DC: .4byte sub_8090324
- thumb_func_end sub_809029C
-
- thumb_func_start sub_80902E0
-sub_80902E0: @ 80902E0
- push {lr}
- adds r2, r0, 0
- ldrh r1, [r2, 0x30]
- movs r3, 0x30
- ldrsh r0, [r2, r3]
- cmp r0, 0
- beq _080902FC
- subs r0, r1, 0x1
- strh r0, [r2, 0x30]
- ldrh r0, [r2, 0x32]
- ldrh r1, [r2, 0x20]
- adds r0, r1
- strh r0, [r2, 0x20]
- b _08090312
-_080902FC:
- ldr r0, _08090318 @ =sPSSData
- ldr r1, [r0]
- ldr r3, _0809031C @ =0x00000c62
- adds r1, r3
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- ldrh r0, [r2, 0x34]
- strh r0, [r2, 0x20]
- ldr r0, _08090320 @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
-_08090312:
- pop {r0}
- bx r0
- .align 2, 0
-_08090318: .4byte sPSSData
-_0809031C: .4byte 0x00000c62
-_08090320: .4byte SpriteCallbackDummy
- thumb_func_end sub_80902E0
-
- thumb_func_start sub_8090324
-sub_8090324: @ 8090324
- push {lr}
- adds r2, r0, 0
- ldrh r1, [r2, 0x36]
- movs r3, 0x36
- ldrsh r0, [r2, r3]
- cmp r0, 0
- beq _08090338
- subs r0, r1, 0x1
- strh r0, [r2, 0x36]
- b _08090354
-_08090338:
- ldrh r0, [r2, 0x32]
- ldrh r1, [r2, 0x20]
- adds r0, r1
- strh r0, [r2, 0x20]
- ldrh r1, [r2, 0x24]
- adds r0, r1
- strh r0, [r2, 0x38]
- subs r0, 0x45
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xB6
- bls _08090354
- ldr r0, _08090358 @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
-_08090354:
- pop {r0}
- bx r0
- .align 2, 0
-_08090358: .4byte SpriteCallbackDummy
- thumb_func_end sub_8090324
-
- thumb_func_start sub_809035C
-sub_809035C: @ 809035C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r6, 0
- ldr r7, _0809039C @ =sPSSData
-_08090366:
- ldr r0, [r7]
- lsls r4, r5, 2
- ldr r1, _080903A0 @ =0x00000a84
- adds r0, r1
- adds r0, r4
- ldr r0, [r0]
- cmp r0, 0
- beq _08090386
- bl sub_80913C4
- ldr r0, [r7]
- ldr r1, _080903A0 @ =0x00000a84
- adds r0, r1
- adds r0, r4
- movs r1, 0
- str r1, [r0]
-_08090386:
- adds r0, r5, 0x6
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x4
- bls _08090366
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809039C: .4byte sPSSData
-_080903A0: .4byte 0x00000a84
- thumb_func_end sub_809035C
-
- thumb_func_start sub_80903A4
-sub_80903A4: @ 80903A4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0x8]
- lsls r2, 16
- movs r1, 0x2C
- mov r8, r1
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 19
- movs r3, 0xC8
- lsls r3, 15
- adds r1, r3
- lsrs r1, 16
- str r1, [sp, 0x10]
- ldr r1, [sp, 0x8]
- adds r1, 0x1
- lsrs r6, r2, 16
- str r6, [sp, 0xC]
- asrs r2, 16
- muls r1, r2
- ldr r2, [sp, 0x10]
- subs r1, r2, r1
- lsls r1, 16
- lsrs r2, r1, 16
- movs r1, 0x13
- subs r1, r0
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp, 0x14]
- movs r3, 0
- mov r9, r3
- adds r5, r0, 0
- ldr r1, _08090488 @ =sPSSData
- ldr r0, [r1]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- beq _08090498
- movs r7, 0x4
- lsls r2, 16
- mov r10, r2
-_08090404:
- ldr r6, _08090488 @ =sPSSData
- ldr r2, [r6]
- lsls r0, r5, 1
- ldr r3, _0809048C @ =0x00000ba4
- adds r1, r2, r3
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- beq _08090470
- lsls r4, r5, 2
- movs r6, 0xBE
- lsls r6, 4
- adds r1, r2, r6
- adds r1, r4
- ldr r1, [r1]
- mov r2, r8
- lsls r3, r2, 16
- asrs r3, 16
- movs r2, 0x2
- str r2, [sp]
- ldr r6, [sp, 0x14]
- str r6, [sp, 0x4]
- mov r6, r10
- asrs r2, r6, 16
- bl sub_80912E0
- adds r2, r0, 0
- ldr r1, _08090488 @ =sPSSData
- ldr r0, [r1]
- ldr r3, _08090490 @ =0x00000a84
- adds r0, r3
- adds r1, r0, r4
- str r2, [r1]
- cmp r2, 0
- beq _08090470
- mov r6, sp
- ldrh r6, [r6, 0x8]
- strh r6, [r2, 0x30]
- ldr r0, [r1]
- mov r2, sp
- ldrh r2, [r2, 0xC]
- strh r2, [r0, 0x32]
- ldr r0, [r1]
- mov r3, sp
- ldrh r3, [r3, 0x10]
- strh r3, [r0, 0x34]
- ldr r1, [r1]
- ldr r0, _08090494 @ =sub_80902E0
- str r0, [r1, 0x1C]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_08090470:
- adds r0, r5, 0x6
- lsls r0, 24
- lsrs r5, r0, 24
- mov r0, r8
- adds r0, 0x18
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- subs r7, 0x1
- cmp r7, 0
- bge _08090404
- b _08090550
- .align 2, 0
-_08090488: .4byte sPSSData
-_0809048C: .4byte 0x00000ba4
-_08090490: .4byte 0x00000a84
-_08090494: .4byte sub_80902E0
-_08090498:
- mov r10, r1
- movs r7, 0x4
- lsls r2, 16
- str r2, [sp, 0x18]
-_080904A0:
- mov r6, r10
- ldr r2, [r6]
- lsls r0, r5, 1
- ldr r3, _08090564 @ =0x00000ba4
- adds r1, r2, r3
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- beq _0809053A
- lsls r4, r5, 2
- movs r6, 0xBE
- lsls r6, 4
- adds r1, r2, r6
- adds r1, r4
- ldr r1, [r1]
- mov r2, r8
- lsls r3, r2, 16
- asrs r3, 16
- movs r2, 0x2
- str r2, [sp]
- ldr r6, [sp, 0x14]
- str r6, [sp, 0x4]
- ldr r6, [sp, 0x18]
- asrs r2, r6, 16
- bl sub_80912E0
- adds r2, r0, 0
- mov r0, r10
- ldr r3, [r0]
- ldr r1, _08090568 @ =0x00000a84
- adds r0, r3, r1
- adds r1, r0, r4
- str r2, [r1]
- cmp r2, 0
- beq _0809053A
- mov r6, sp
- ldrh r6, [r6, 0x8]
- strh r6, [r2, 0x30]
- ldr r0, [r1]
- mov r2, sp
- ldrh r2, [r2, 0xC]
- strh r2, [r0, 0x32]
- ldr r0, [r1]
- mov r6, sp
- ldrh r6, [r6, 0x10]
- strh r6, [r0, 0x34]
- ldr r1, [r1]
- ldr r0, _0809056C @ =sub_80902E0
- str r0, [r1, 0x1C]
- ldr r1, _08090570 @ =0x00000c58
- adds r0, r3, r1
- ldrb r0, [r0]
- adds r1, r5, 0
- movs r2, 0xC
- bl GetBoxMonDataFromAnyBox
- cmp r0, 0
- bne _08090530
- mov r2, r10
- ldr r0, [r2]
- ldr r3, _08090568 @ =0x00000a84
- adds r0, r3
- adds r0, r4
- ldr r2, [r0]
- ldrb r1, [r2, 0x1]
- movs r6, 0xD
- negs r6, r6
- adds r0, r6, 0
- ands r1, r0
- movs r0, 0x4
- orrs r1, r0
- strb r1, [r2, 0x1]
-_08090530:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0809053A:
- adds r0, r5, 0x6
- lsls r0, 24
- lsrs r5, r0, 24
- mov r0, r8
- adds r0, 0x18
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- subs r7, 0x1
- cmp r7, 0
- bge _080904A0
-_08090550:
- mov r0, r9
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08090564: .4byte 0x00000ba4
-_08090568: .4byte 0x00000a84
-_0809056C: .4byte sub_80902E0
-_08090570: .4byte 0x00000c58
- thumb_func_end sub_80903A4
-
- thumb_func_start sub_8090574
-sub_8090574: @ 8090574
- push {r4-r7,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 24
- lsrs r4, 24
- ldr r6, _080905D0 @ =sPSSData
- ldr r1, [r6]
- ldr r2, _080905D4 @ =0x00000c66
- adds r1, r2
- movs r5, 0
- strb r5, [r1]
- ldr r1, [r6]
- ldr r3, _080905D8 @ =0x00000c67
- adds r1, r3
- strb r0, [r1]
- ldr r1, [r6]
- ldr r7, _080905DC @ =0x00000c65
- adds r1, r7
- strb r4, [r1]
- ldr r3, [r6]
- ldr r1, _080905E0 @ =0x00000c5c
- adds r2, r3, r1
- movs r1, 0x20
- strh r1, [r2]
- lsls r4, 24
- asrs r4, 24
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 1
- negs r1, r1
- subs r7, 0x5
- adds r2, r3, r7
- strh r1, [r2]
- ldr r1, _080905E4 @ =0x00000c62
- adds r3, r1
- strh r5, [r3]
- bl sub_8090794
- cmp r4, 0
- ble _080905EC
- ldr r0, [r6]
- ldr r2, _080905E8 @ =0x00000c64
- adds r0, r2
- movs r1, 0
- b _080905F4
- .align 2, 0
-_080905D0: .4byte sPSSData
-_080905D4: .4byte 0x00000c66
-_080905D8: .4byte 0x00000c67
-_080905DC: .4byte 0x00000c65
-_080905E0: .4byte 0x00000c5c
-_080905E4: .4byte 0x00000c62
-_080905E8: .4byte 0x00000c64
-_080905EC:
- ldr r0, [r6]
- ldr r3, _08090620 @ =0x00000c64
- adds r0, r3
- movs r1, 0x5
-_080905F4:
- strb r1, [r0]
- ldr r0, _08090624 @ =sPSSData
- ldr r2, [r0]
- ldr r7, _08090620 @ =0x00000c64
- adds r0, r2, r7
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, 0x64
- ldr r3, _08090628 @ =0x00000c5e
- adds r1, r2, r3
- strh r0, [r1]
- subs r7, 0x4
- adds r2, r7
- movs r1, 0
- ldrsh r0, [r2, r1]
- bl sub_809029C
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08090620: .4byte 0x00000c64
-_08090624: .4byte sPSSData
-_08090628: .4byte 0x00000c5e
- thumb_func_end sub_8090574
-
- thumb_func_start sub_809062C
-sub_809062C: @ 809062C
- push {r4-r6,lr}
- ldr r5, _08090658 @ =sPSSData
- ldr r0, [r5]
- ldr r4, _0809065C @ =0x00000c5c
- adds r1, r0, r4
- ldrh r0, [r1]
- cmp r0, 0
- beq _08090640
- subs r0, 0x1
- strh r0, [r1]
-_08090640:
- ldr r3, [r5]
- ldr r6, _08090660 @ =0x00000c66
- adds r0, r3, r6
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080906C4
- cmp r0, 0x1
- bgt _08090664
- cmp r0, 0
- beq _0809066C
- b _08090782
- .align 2, 0
-_08090658: .4byte sPSSData
-_0809065C: .4byte 0x00000c5c
-_08090660: .4byte 0x00000c66
-_08090664:
- cmp r0, 0x2
- bne _0809066A
- b _08090770
-_0809066A:
- b _08090782
-_0809066C:
- ldr r0, _080906B8 @ =0x00000c5e
- adds r1, r3, r0
- movs r2, 0xC6
- lsls r2, 4
- adds r0, r3, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- strh r0, [r1]
- subs r0, 0x41
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xBA
- bhi _0809068A
- b _0809078C
-_0809068A:
- ldr r1, _080906BC @ =0x00000c64
- adds r0, r3, r1
- ldrb r0, [r0]
- bl sub_809035C
- ldr r2, [r5]
- ldr r0, _080906B8 @ =0x00000c5e
- adds r3, r2, r0
- ldr r1, _080906C0 @ =0x00000c65
- adds r0, r2, r1
- movs r1, 0
- ldrsb r1, [r0, r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- ldrh r1, [r3]
- adds r0, r1
- strh r0, [r3]
- adds r2, r6
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- b _0809078C
- .align 2, 0
-_080906B8: .4byte 0x00000c5e
-_080906BC: .4byte 0x00000c64
-_080906C0: .4byte 0x00000c65
-_080906C4:
- ldr r2, _08090728 @ =0x00000c5e
- adds r1, r3, r2
- movs r6, 0xC6
- lsls r6, 4
- adds r2, r3, r6
- ldrh r0, [r2]
- ldrh r6, [r1]
- adds r0, r6
- strh r0, [r1]
- ldr r6, _0809072C @ =0x00000c64
- adds r0, r3, r6
- ldrb r0, [r0]
- adds r1, r3, r4
- ldrh r1, [r1]
- movs r3, 0
- ldrsh r2, [r2, r3]
- bl sub_80903A4
- ldr r2, [r5]
- ldr r3, _08090730 @ =0x00000c62
- adds r1, r2, r3
- lsls r0, 24
- lsrs r0, 24
- ldrh r3, [r1]
- adds r0, r3
- strh r0, [r1]
- ldr r1, _08090734 @ =0x00000c65
- adds r0, r2, r1
- movs r1, 0
- ldrsb r1, [r0, r1]
- cmp r1, 0
- ble _0809070C
- adds r0, r2, r6
- ldrb r0, [r0]
- cmp r0, 0x5
- beq _08090718
-_0809070C:
- cmp r1, 0
- bge _08090740
- adds r0, r2, r6
- ldrb r0, [r0]
- cmp r0, 0
- bne _08090740
-_08090718:
- ldr r0, _08090738 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _0809073C @ =0x00000c66
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0809078C
- .align 2, 0
-_08090728: .4byte 0x00000c5e
-_0809072C: .4byte 0x00000c64
-_08090730: .4byte 0x00000c62
-_08090734: .4byte 0x00000c65
-_08090738: .4byte sPSSData
-_0809073C: .4byte 0x00000c66
-_08090740:
- ldr r3, _08090760 @ =sPSSData
- ldr r0, [r3]
- ldr r6, _08090764 @ =0x00000c64
- adds r1, r0, r6
- ldr r2, _08090768 @ =0x00000c65
- adds r0, r2
- ldrb r0, [r0]
- ldrb r6, [r1]
- adds r0, r6
- movs r2, 0
- strb r0, [r1]
- ldr r0, [r3]
- ldr r1, _0809076C @ =0x00000c66
- adds r0, r1
- strb r2, [r0]
- b _0809078C
- .align 2, 0
-_08090760: .4byte sPSSData
-_08090764: .4byte 0x00000c64
-_08090768: .4byte 0x00000c65
-_0809076C: .4byte 0x00000c66
-_08090770:
- ldr r2, _08090788 @ =0x00000c62
- adds r0, r3, r2
- ldrh r0, [r0]
- cmp r0, 0
- bne _0809078C
- adds r1, r3, r4
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
-_08090782:
- movs r0, 0
- b _0809078E
- .align 2, 0
-_08090788: .4byte 0x00000c62
-_0809078C:
- movs r0, 0x1
-_0809078E:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_809062C
-
- thumb_func_start sub_8090794
-sub_8090794: @ 8090794
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- movs r0, 0
- ldr r1, _08090810 @ =sPSSData
- mov r9, r1
-_080907A8:
- adds r0, 0x1
- mov r8, r0
- movs r7, 0x5
-_080907AE:
- lsls r0, r5, 24
- lsrs r4, r0, 24
- adds r0, r6, 0
- adds r1, r4, 0
- movs r2, 0x41
- bl GetBoxMonDataFromAnyBox
- mov r2, r9
- ldr r1, [r2]
- lsls r2, r5, 1
- ldr r3, _08090814 @ =0x00000ba4
- adds r1, r3
- adds r1, r2
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- beq _080907EA
- adds r0, r6, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetBoxMonDataFromAnyBox
- mov r2, r9
- ldr r1, [r2]
- lsls r2, r5, 2
- movs r3, 0xBE
- lsls r3, 4
- adds r1, r3
- adds r1, r2
- str r0, [r1]
-_080907EA:
- adds r5, 0x1
- subs r7, 0x1
- cmp r7, 0
- bge _080907AE
- mov r0, r8
- cmp r0, 0x4
- ble _080907A8
- ldr r0, _08090810 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08090818 @ =0x00000c58
- adds r0, r1
- strb r6, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08090810: .4byte sPSSData
-_08090814: .4byte 0x00000ba4
-_08090818: .4byte 0x00000c58
- thumb_func_end sub_8090794
-
- thumb_func_start sub_809081C
-sub_809081C: @ 809081C
- push {r4,r5,lr}
- lsls r0, 24
- ldr r5, _08090848 @ =sPSSData
- ldr r1, [r5]
- lsrs r4, r0, 22
- ldr r0, _0809084C @ =0x00000a84
- adds r1, r0
- adds r1, r4
- ldr r0, [r1]
- cmp r0, 0
- beq _08090842
- bl sub_80913C4
- ldr r0, [r5]
- ldr r1, _0809084C @ =0x00000a84
- adds r0, r1
- adds r0, r4
- movs r1, 0
- str r1, [r0]
-_08090842:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08090848: .4byte sPSSData
-_0809084C: .4byte 0x00000a84
- thumb_func_end sub_809081C
-
- thumb_func_start sub_8090850
-sub_8090850: @ 8090850
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r2, r1, 24
- ldr r1, _08090884 @ =sPSSData
- ldr r1, [r1]
- lsrs r0, 22
- ldr r3, _08090888 @ =0x00000a84
- adds r1, r3
- adds r1, r0
- ldr r3, [r1]
- cmp r3, 0
- beq _0809087E
- movs r0, 0x3
- adds r1, r2, 0
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x1]
-_0809087E:
- pop {r0}
- bx r0
- .align 2, 0
-_08090884: .4byte sPSSData
-_08090888: .4byte 0x00000a84
- thumb_func_end sub_8090850
-
- thumb_func_start sub_809088C
-sub_809088C: @ 809088C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r4, _0809092C @ =gPlayerParty
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r1, r0, 0
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xC
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r2, 0x68
- movs r3, 0x40
- bl sub_80912E0
- ldr r1, _08090930 @ =sPSSData
- ldr r1, [r1]
- ldr r2, _08090934 @ =0x00000a6c
- adds r1, r2
- str r0, [r1]
- movs r7, 0x1
- movs r6, 0x1
-_080908D2:
- movs r0, 0x64
- adds r1, r6, 0
- muls r1, r0
- ldr r0, _0809092C @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- beq _08090938
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r1, r0, 0
- subs r0, r6, 0x1
- lsls r3, r0, 1
- adds r3, r0
- lsls r3, 19
- movs r0, 0x80
- lsls r0, 13
- adds r3, r0
- asrs r3, 16
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xC
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r2, 0x98
- bl sub_80912E0
- ldr r1, _08090930 @ =sPSSData
- ldr r1, [r1]
- lsls r2, r6, 2
- ldr r3, _08090934 @ =0x00000a6c
- adds r1, r3
- adds r1, r2
- str r0, [r1]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- b _08090946
- .align 2, 0
-_0809092C: .4byte gPlayerParty
-_08090930: .4byte sPSSData
-_08090934: .4byte 0x00000a6c
-_08090938:
- ldr r0, _080909E8 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r6, 2
- ldr r2, _080909EC @ =0x00000a6c
- adds r0, r2
- adds r0, r1
- str r5, [r0]
-_08090946:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x5
- bls _080908D2
- ldr r3, _080909E8 @ =sPSSData
- mov r0, r8
- cmp r0, 0
- bne _0809098A
- movs r6, 0
- cmp r6, r7
- bcs _0809098A
- mov r12, r3
- ldr r5, _080909EC @ =0x00000a6c
- movs r4, 0x4
-_08090964:
- mov r2, r12
- ldr r1, [r2]
- lsls r0, r6, 2
- adds r1, r5
- adds r1, r0
- ldr r2, [r1]
- ldrh r0, [r2, 0x22]
- subs r0, 0xA0
- strh r0, [r2, 0x22]
- ldr r1, [r1]
- adds r1, 0x3E
- ldrb r0, [r1]
- orrs r0, r4
- strb r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, r7
- bcc _08090964
-_0809098A:
- ldr r0, [r3]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _080909DA
- movs r6, 0
- adds r7, r3, 0
- ldr r5, _080909EC @ =0x00000a6c
-_08090998:
- ldr r0, [r7]
- lsls r4, r6, 2
- adds r0, r5
- adds r0, r4
- ldr r0, [r0]
- cmp r0, 0
- beq _080909D0
- movs r0, 0x64
- muls r0, r6
- ldr r1, _080909F0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- cmp r0, 0
- bne _080909D0
- ldr r0, [r7]
- adds r0, r5
- adds r0, r4
- ldr r2, [r0]
- ldrb r1, [r2, 0x1]
- movs r3, 0xD
- negs r3, r3
- adds r0, r3, 0
- ands r1, r0
- movs r0, 0x4
- orrs r1, r0
- strb r1, [r2, 0x1]
-_080909D0:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x5
- bls _08090998
-_080909DA:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080909E8: .4byte sPSSData
-_080909EC: .4byte 0x00000a6c
-_080909F0: .4byte gPlayerParty
- thumb_func_end sub_809088C
-
- thumb_func_start sub_80909F4
-sub_80909F4: @ 80909F4
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r0, _08090A54 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _08090A58 @ =0x00000c5a
- adds r1, r2
- movs r2, 0
- strb r2, [r1]
- movs r5, 0
- movs r6, 0
- adds r3, r0, 0
- ldr r7, _08090A5C @ =0x00000a6c
-_08090A0C:
- ldr r0, [r3]
- lsls r4, r5, 2
- adds r0, r7
- adds r0, r4
- ldr r0, [r0]
- cmp r0, 0
- beq _08090A42
- cmp r5, r6
- beq _08090A3C
- adds r1, r6, 0
- str r3, [sp]
- bl sub_8090A74
- ldr r3, [sp]
- ldr r2, [r3]
- adds r0, r2, r7
- adds r0, r4
- movs r1, 0
- str r1, [r0]
- ldr r0, _08090A58 @ =0x00000c5a
- adds r2, r0
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
-_08090A3C:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_08090A42:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x5
- bls _08090A0C
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08090A54: .4byte sPSSData
-_08090A58: .4byte 0x00000c5a
-_08090A5C: .4byte 0x00000a6c
- thumb_func_end sub_80909F4
-
- thumb_func_start sub_8090A60
-sub_8090A60: @ 8090A60
- ldr r0, _08090A6C @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08090A70 @ =0x00000c5a
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08090A6C: .4byte sPSSData
-_08090A70: .4byte 0x00000c5a
- thumb_func_end sub_8090A60
-
- thumb_func_start sub_8090A74
-sub_8090A74: @ 8090A74
- push {r4,lr}
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- strh r1, [r2, 0x30]
- cmp r1, 0
- bne _08090A88
- movs r3, 0x68
- movs r4, 0x40
- b _08090A9A
-_08090A88:
- movs r3, 0x98
- subs r1, 0x1
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 19
- movs r1, 0x80
- lsls r1, 13
- adds r0, r1
- lsrs r4, r0, 16
-_08090A9A:
- ldrh r0, [r2, 0x20]
- lsls r0, 3
- strh r0, [r2, 0x32]
- ldrh r0, [r2, 0x22]
- lsls r0, 3
- strh r0, [r2, 0x34]
- lsls r1, r3, 3
- movs r3, 0x32
- ldrsh r0, [r2, r3]
- subs r0, r1, r0
- cmp r0, 0
- bge _08090AB4
- adds r0, 0x7
-_08090AB4:
- asrs r0, 3
- strh r0, [r2, 0x36]
- lsls r0, r4, 16
- asrs r0, 13
- movs r3, 0x34
- ldrsh r1, [r2, r3]
- subs r0, r1
- cmp r0, 0
- bge _08090AC8
- adds r0, 0x7
-_08090AC8:
- asrs r0, 3
- strh r0, [r2, 0x38]
- movs r0, 0x8
- strh r0, [r2, 0x3A]
- ldr r0, _08090ADC @ =sub_8090AE0
- str r0, [r2, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08090ADC: .4byte sub_8090AE0
- thumb_func_end sub_8090A74
-
- thumb_func_start sub_8090AE0
-sub_8090AE0: @ 8090AE0
- push {r4,lr}
- adds r3, r0, 0
- ldrh r2, [r3, 0x3A]
- movs r1, 0x3A
- ldrsh r0, [r3, r1]
- cmp r0, 0
- beq _08090B10
- ldrh r0, [r3, 0x36]
- ldrh r4, [r3, 0x32]
- adds r0, r4
- strh r0, [r3, 0x32]
- ldrh r1, [r3, 0x38]
- ldrh r4, [r3, 0x34]
- adds r1, r4
- strh r1, [r3, 0x34]
- lsls r0, 16
- asrs r0, 19
- strh r0, [r3, 0x20]
- lsls r1, 16
- asrs r1, 19
- strh r1, [r3, 0x22]
- subs r0, r2, 0x1
- strh r0, [r3, 0x3A]
- b _08090B54
-_08090B10:
- movs r1, 0x30
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bne _08090B20
- movs r0, 0x68
- strh r0, [r3, 0x20]
- movs r0, 0x40
- b _08090B32
-_08090B20:
- movs r0, 0x98
- strh r0, [r3, 0x20]
- movs r4, 0x30
- ldrsh r1, [r3, r4]
- subs r1, 0x1
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, 0x10
-_08090B32:
- strh r0, [r3, 0x22]
- ldr r0, _08090B5C @ =SpriteCallbackDummy
- str r0, [r3, 0x1C]
- ldr r0, _08090B60 @ =sPSSData
- ldr r2, [r0]
- movs r0, 0x30
- ldrsh r1, [r3, r0]
- lsls r1, 2
- ldr r4, _08090B64 @ =0x00000a6c
- adds r0, r2, r4
- adds r0, r1
- str r3, [r0]
- ldr r0, _08090B68 @ =0x00000c5a
- adds r2, r0
- ldrb r0, [r2]
- subs r0, 0x1
- strb r0, [r2]
-_08090B54:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08090B5C: .4byte SpriteCallbackDummy
-_08090B60: .4byte sPSSData
-_08090B64: .4byte 0x00000a6c
-_08090B68: .4byte 0x00000c5a
- thumb_func_end sub_8090AE0
-
- thumb_func_start sub_8090B6C
-sub_8090B6C: @ 8090B6C
- push {r4,lr}
- ldr r4, _08090B90 @ =sPSSData
- ldr r0, [r4]
- ldr r1, _08090B94 @ =0x00000a68
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- beq _08090B8A
- bl sub_80913C4
- ldr r0, [r4]
- ldr r1, _08090B94 @ =0x00000a68
- adds r0, r1
- movs r1, 0
- str r1, [r0]
-_08090B8A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08090B90: .4byte sPSSData
-_08090B94: .4byte 0x00000a68
- thumb_func_end sub_8090B6C
-
- thumb_func_start sub_8090B98
-sub_8090B98: @ 8090B98
- push {r4-r6,lr}
- movs r3, 0
- ldr r6, _08090BEC @ =sPSSData
- lsls r0, 16
- asrs r4, r0, 16
- movs r5, 0x5
- negs r5, r5
-_08090BA6:
- ldr r0, [r6]
- lsls r1, r3, 2
- ldr r2, _08090BF0 @ =0x00000a6c
- adds r0, r2
- adds r2, r0, r1
- ldr r1, [r2]
- cmp r1, 0
- beq _08090BFE
- ldrh r0, [r1, 0x22]
- adds r0, r4, r0
- strh r0, [r1, 0x22]
- ldr r2, [r2]
- ldrh r1, [r2, 0x26]
- ldrh r0, [r2, 0x22]
- adds r1, r0
- adds r0, r2, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- adds r0, r1
- lsls r0, 16
- movs r1, 0x80
- lsls r1, 13
- adds r0, r1
- lsrs r0, 16
- cmp r0, 0xC0
- bls _08090BF4
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _08090BFE
- .align 2, 0
-_08090BEC: .4byte sPSSData
-_08090BF0: .4byte 0x00000a6c
-_08090BF4:
- adds r2, 0x3E
- ldrb r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- strb r0, [r2]
-_08090BFE:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x5
- bls _08090BA6
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8090B98
-
- thumb_func_start sub_8090C10
-sub_8090C10: @ 8090C10
- push {r4,r5,lr}
- lsls r0, 24
- ldr r5, _08090C3C @ =sPSSData
- ldr r1, [r5]
- lsrs r4, r0, 22
- ldr r0, _08090C40 @ =0x00000a6c
- adds r1, r0
- adds r1, r4
- ldr r0, [r1]
- cmp r0, 0
- beq _08090C36
- bl sub_80913C4
- ldr r0, [r5]
- ldr r1, _08090C40 @ =0x00000a6c
- adds r0, r1
- adds r0, r4
- movs r1, 0
- str r1, [r0]
-_08090C36:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08090C3C: .4byte sPSSData
-_08090C40: .4byte 0x00000a6c
- thumb_func_end sub_8090C10
-
- thumb_func_start sub_8090C44
-sub_8090C44: @ 8090C44
- push {r4-r6,lr}
- movs r5, 0
- ldr r6, _08090C7C @ =sPSSData
-_08090C4A:
- ldr r0, [r6]
- lsls r4, r5, 2
- ldr r1, _08090C80 @ =0x00000a6c
- adds r0, r1
- adds r0, r4
- ldr r0, [r0]
- cmp r0, 0
- beq _08090C6A
- bl sub_80913C4
- ldr r0, [r6]
- ldr r1, _08090C80 @ =0x00000a6c
- adds r0, r1
- adds r0, r4
- movs r1, 0
- str r1, [r0]
-_08090C6A:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x5
- bls _08090C4A
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08090C7C: .4byte sPSSData
-_08090C80: .4byte 0x00000a6c
- thumb_func_end sub_8090C44
-
- thumb_func_start sub_8090C84
-sub_8090C84: @ 8090C84
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r2, r1, 24
- ldr r1, _08090CB8 @ =sPSSData
- ldr r1, [r1]
- lsrs r0, 22
- ldr r3, _08090CBC @ =0x00000a6c
- adds r1, r3
- adds r1, r0
- ldr r3, [r1]
- cmp r3, 0
- beq _08090CB2
- movs r0, 0x3
- adds r1, r2, 0
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x1]
-_08090CB2:
- pop {r0}
- bx r0
- .align 2, 0
-_08090CB8: .4byte sPSSData
-_08090CBC: .4byte 0x00000a6c
- thumb_func_end sub_8090C84
-
- thumb_func_start sub_8090CC0
-sub_8090CC0: @ 8090CC0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r1, 24
- adds r5, r1, 0
- cmp r4, 0
- bne _08090CF0
- ldr r3, _08090CE8 @ =sPSSData
- ldr r0, [r3]
- ldr r5, _08090CEC @ =0x00000a68
- adds r2, r0, r5
- lsls r1, 2
- adds r5, 0x4
- adds r0, r5
- adds r0, r1
- ldr r1, [r0]
- str r1, [r2]
- str r4, [r0]
- b _08090D0C
- .align 2, 0
-_08090CE8: .4byte sPSSData
-_08090CEC: .4byte 0x00000a68
-_08090CF0:
- cmp r4, 0x1
- bne _08090D42
- ldr r3, _08090D48 @ =sPSSData
- ldr r0, [r3]
- ldr r1, _08090D4C @ =0x00000a68
- adds r2, r0, r1
- lsls r1, r5, 2
- ldr r4, _08090D50 @ =0x00000a84
- adds r0, r4
- adds r0, r1
- ldr r1, [r0]
- str r1, [r2]
- movs r1, 0
- str r1, [r0]
-_08090D0C:
- adds r5, r3, 0
- ldr r0, [r5]
- ldr r4, _08090D4C @ =0x00000a68
- adds r0, r4
- ldr r1, [r0]
- ldr r0, _08090D54 @ =sub_80911B0
- str r0, [r1, 0x1C]
- bl sub_8090058
- ldr r1, [r5]
- adds r1, r4
- ldr r3, [r1]
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x5]
- ldr r0, [r5]
- adds r0, r4
- ldr r0, [r0]
- adds r0, 0x43
- movs r1, 0x7
- strb r1, [r0]
-_08090D42:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08090D48: .4byte sPSSData
-_08090D4C: .4byte 0x00000a68
-_08090D50: .4byte 0x00000a84
-_08090D54: .4byte sub_80911B0
- thumb_func_end sub_8090CC0
-
- thumb_func_start sub_8090D58
-sub_8090D58: @ 8090D58
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- cmp r0, 0xE
- bne _08090DA4
- ldr r3, _08090D98 @ =sPSSData
- ldr r1, [r3]
- lsls r5, r6, 2
- ldr r4, _08090D9C @ =0x00000a6c
- adds r0, r1, r4
- adds r0, r5
- ldr r2, _08090DA0 @ =0x00000a68
- adds r1, r2
- ldr r2, [r1]
- str r2, [r0]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r3]
- adds r0, r4
- adds r0, r5
- ldr r0, [r0]
- adds r0, 0x43
- movs r1, 0xC
- strb r1, [r0]
- b _08090DE0
- .align 2, 0
-_08090D98: .4byte sPSSData
-_08090D9C: .4byte 0x00000a6c
-_08090DA0: .4byte 0x00000a68
-_08090DA4:
- ldr r5, _08090DF8 @ =sPSSData
- ldr r1, [r5]
- lsls r4, r6, 2
- ldr r3, _08090DFC @ =0x00000a84
- adds r0, r1, r3
- adds r0, r4
- ldr r2, _08090E00 @ =0x00000a68
- adds r1, r2
- ldr r2, [r1]
- str r2, [r0]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r5]
- adds r0, r3
- adds r0, r4
- ldr r4, [r0]
- adds r0, r6, 0
- movs r1, 0x6
- bl __umodsi3
- movs r1, 0x13
- subs r1, r0
- adds r4, 0x43
- strb r1, [r4]
- adds r3, r5, 0
-_08090DE0:
- ldr r1, [r3]
- ldr r0, _08090E00 @ =0x00000a68
- adds r1, r0
- ldr r2, [r1]
- ldr r0, _08090E04 @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
- movs r0, 0
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08090DF8: .4byte sPSSData
-_08090DFC: .4byte 0x00000a84
-_08090E00: .4byte 0x00000a68
-_08090E04: .4byte SpriteCallbackDummy
- thumb_func_end sub_8090D58
-
- thumb_func_start sub_8090E08
-sub_8090E08: @ 8090E08
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r0, 0xE
- bne _08090E30
- ldr r3, _08090E24 @ =sPSSData
- ldr r1, [r3]
- ldr r0, _08090E28 @ =0x00000afc
- adds r2, r1, r0
- lsls r0, r4, 2
- ldr r4, _08090E2C @ =0x00000a6c
- b _08090E3C
- .align 2, 0
-_08090E24: .4byte sPSSData
-_08090E28: .4byte 0x00000afc
-_08090E2C: .4byte 0x00000a6c
-_08090E30:
- ldr r3, _08090E5C @ =sPSSData
- ldr r1, [r3]
- ldr r0, _08090E60 @ =0x00000afc
- adds r2, r1, r0
- lsls r0, r4, 2
- ldr r4, _08090E64 @ =0x00000a84
-_08090E3C:
- adds r0, r4
- adds r1, r0
- str r1, [r2]
- ldr r1, [r3]
- ldr r2, _08090E68 @ =0x00000a68
- adds r0, r1, r2
- ldr r2, [r0]
- ldr r0, _08090E6C @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
- ldr r4, _08090E70 @ =0x00000c59
- adds r1, r4
- movs r0, 0
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08090E5C: .4byte sPSSData
-_08090E60: .4byte 0x00000afc
-_08090E64: .4byte 0x00000a84
-_08090E68: .4byte 0x00000a68
-_08090E6C: .4byte SpriteCallbackDummy
-_08090E70: .4byte 0x00000c59
- thumb_func_end sub_8090E08
-
- thumb_func_start sub_8090E74
-sub_8090E74: @ 8090E74
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r6, _08090E90 @ =sPSSData
- ldr r0, [r6]
- ldr r1, _08090E94 @ =0x00000c59
- mov r9, r1
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0x10
- bne _08090E98
- movs r0, 0
- b _08090FA0
- .align 2, 0
-_08090E90: .4byte sPSSData
-_08090E94: .4byte 0x00000c59
-_08090E98:
- adds r0, 0x1
- strb r0, [r1]
- ldr r2, [r6]
- ldr r5, _08090FAC @ =0x00000c59
- adds r0, r2, r5
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08090EC6
- ldr r1, _08090FB0 @ =0x00000afc
- adds r0, r2, r1
- ldr r0, [r0]
- ldr r1, [r0]
- ldrh r0, [r1, 0x22]
- subs r0, 0x1
- strh r0, [r1, 0x22]
- ldr r5, _08090FB4 @ =0x00000a68
- adds r0, r2, r5
- ldr r1, [r0]
- ldrh r0, [r1, 0x22]
- adds r0, 0x1
- strh r0, [r1, 0x22]
-_08090EC6:
- ldr r3, [r6]
- ldr r7, _08090FB0 @ =0x00000afc
- adds r4, r3, r7
- ldr r0, [r4]
- ldr r0, [r0]
- mov r8, r0
- ldr r5, _08090FB8 @ =gSineTable
- mov r0, r9
- adds r1, r3, r0
- ldrb r0, [r1]
- lsls r0, 4
- adds r0, r5
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0
- bge _08090EE8
- adds r0, 0xF
-_08090EE8:
- asrs r0, 4
- mov r2, r8
- strh r0, [r2, 0x24]
- ldr r0, _08090FB4 @ =0x00000a68
- mov r8, r0
- add r3, r8
- ldr r2, [r3]
- ldrb r0, [r1]
- lsls r0, 4
- adds r0, r5
- movs r5, 0
- ldrsh r0, [r0, r5]
- cmp r0, 0
- bge _08090F06
- adds r0, 0xF
-_08090F06:
- asrs r0, 4
- negs r0, r0
- strh r0, [r2, 0x24]
- ldrb r0, [r1]
- cmp r0, 0x8
- bne _08090F6A
- ldr r3, [r3]
- ldr r0, [r4]
- ldr r0, [r0]
- ldrb r0, [r0, 0x5]
- movs r5, 0x3
- movs r1, 0xC
- ands r1, r0
- ldrb r2, [r3, 0x5]
- movs r4, 0xD
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x5]
- ldr r0, [r6]
- mov r2, r8
- adds r1, r0, r2
- ldr r1, [r1]
- adds r0, r7
- ldr r0, [r0]
- ldr r0, [r0]
- adds r0, 0x43
- ldrb r0, [r0]
- adds r1, 0x43
- strb r0, [r1]
- bl sub_8090058
- ldr r1, [r6]
- adds r1, r7
- ldr r1, [r1]
- ldr r1, [r1]
- ands r5, r0
- lsls r5, 2
- ldrb r0, [r1, 0x5]
- ands r4, r0
- orrs r4, r5
- strb r4, [r1, 0x5]
- ldr r0, [r6]
- adds r0, r7
- ldr r0, [r0]
- ldr r0, [r0]
- adds r0, 0x43
- movs r1, 0x7
- strb r1, [r0]
-_08090F6A:
- ldr r1, [r6]
- mov r5, r9
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, 0x10
- bne _08090F9E
- mov r0, r8
- adds r2, r1, r0
- ldr r3, [r2]
- adds r1, r7
- ldr r0, [r1]
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r1]
- str r3, [r0]
- ldr r1, [r6]
- mov r2, r8
- adds r0, r1, r2
- ldr r2, [r0]
- ldr r0, _08090FBC @ =sub_80911B0
- str r0, [r2, 0x1C]
- adds r1, r7
- ldr r0, [r1]
- ldr r1, [r0]
- ldr r0, _08090FC0 @ =SpriteCallbackDummy
- str r0, [r1, 0x1C]
-_08090F9E:
- movs r0, 0x1
-_08090FA0:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08090FAC: .4byte 0x00000c59
-_08090FB0: .4byte 0x00000afc
-_08090FB4: .4byte 0x00000a68
-_08090FB8: .4byte gSineTable
-_08090FBC: .4byte sub_80911B0
-_08090FC0: .4byte SpriteCallbackDummy
- thumb_func_end sub_8090E74
-
- thumb_func_start sub_8090FC4
-sub_8090FC4: @ 8090FC4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r0, 0x1
- beq _08090FFC
- cmp r0, 0x1
- bgt _08090FDE
- cmp r0, 0
- beq _08090FE4
- b _08091072
-_08090FDE:
- cmp r2, 0x2
- beq _0809101C
- b _08091072
-_08090FE4:
- ldr r3, _08090FF4 @ =sPSSData
- ldr r1, [r3]
- movs r0, 0xB0
- lsls r0, 4
- adds r2, r1, r0
- lsls r0, r4, 2
- ldr r4, _08090FF8 @ =0x00000a6c
- b _0809100A
- .align 2, 0
-_08090FF4: .4byte sPSSData
-_08090FF8: .4byte 0x00000a6c
-_08090FFC:
- ldr r3, _08091014 @ =sPSSData
- ldr r1, [r3]
- movs r0, 0xB0
- lsls r0, 4
- adds r2, r1, r0
- lsls r0, r4, 2
- ldr r4, _08091018 @ =0x00000a84
-_0809100A:
- adds r0, r4
- adds r1, r0
- str r1, [r2]
- adds r4, r3, 0
- b _0809102E
- .align 2, 0
-_08091014: .4byte sPSSData
-_08091018: .4byte 0x00000a84
-_0809101C:
- ldr r0, _08091078 @ =sPSSData
- ldr r1, [r0]
- movs r3, 0xB0
- lsls r3, 4
- adds r2, r1, r3
- ldr r4, _0809107C @ =0x00000a68
- adds r1, r4
- str r1, [r2]
- adds r4, r0, 0
-_0809102E:
- ldr r0, [r4]
- movs r1, 0xB0
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- ldr r0, [r0]
- cmp r0, 0
- beq _08091072
- bl InitSpriteAffineAnim
- ldr r0, [r4]
- movs r3, 0xB0
- lsls r3, 4
- adds r0, r3
- ldr r0, [r0]
- ldr r2, [r0]
- ldrb r1, [r2, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldr r1, [r4]
- adds r1, r3
- ldr r0, [r1]
- ldr r2, [r0]
- ldr r0, _08091080 @ =gUnknown_83CEC38
- str r0, [r2, 0x10]
- ldr r0, [r1]
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAffineAnim
-_08091072:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08091078: .4byte sPSSData
-_0809107C: .4byte 0x00000a68
-_08091080: .4byte gUnknown_83CEC38
- thumb_func_end sub_8090FC4
-
- thumb_func_start sub_8091084
-sub_8091084: @ 8091084
- push {lr}
- ldr r0, _080910AC @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xB0
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- ldr r1, [r0]
- cmp r1, 0
- beq _080910A6
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- beq _080910B0
-_080910A6:
- movs r0, 0
- b _080910C6
- .align 2, 0
-_080910AC: .4byte sPSSData
-_080910B0:
- adds r0, r1, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080910C4
- movs r0, 0x4
- orrs r0, r2
- strb r0, [r3]
-_080910C4:
- movs r0, 0x1
-_080910C6:
- pop {r1}
- bx r1
- thumb_func_end sub_8091084
-
- thumb_func_start sub_80910CC
-sub_80910CC: @ 80910CC
- push {r4,lr}
- ldr r4, _08091110 @ =sPSSData
- ldr r0, [r4]
- movs r1, 0xB0
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- ldr r0, [r0]
- cmp r0, 0
- beq _08091108
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldr r0, [r4]
- movs r1, 0xB0
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- ldr r0, [r0]
- bl sub_80913C4
- ldr r0, [r4]
- movs r1, 0xB0
- lsls r1, 4
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0
- str r0, [r1]
-_08091108:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08091110: .4byte sPSSData
- thumb_func_end sub_80910CC
-
- thumb_func_start sub_8091114
-sub_8091114: @ 8091114
- push {lr}
- ldr r3, _0809114C @ =sPSSData
- ldr r0, [r3]
- movs r1, 0xB0
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- ldr r0, [r0]
- cmp r0, 0
- beq _08091148
- adds r2, r0, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, [r3]
- movs r1, 0xB0
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_08091148:
- pop {r0}
- bx r0
- .align 2, 0
-_0809114C: .4byte sPSSData
- thumb_func_end sub_8091114
-
- thumb_func_start sub_8091150
-sub_8091150: @ 8091150
- push {lr}
- ldr r0, _08091168 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xB0
- lsls r1, 4
- adds r2, r0, r1
- ldr r0, [r2]
- cmp r0, 0
- bne _0809116C
- movs r0, 0
- b _08091180
- .align 2, 0
-_08091168: .4byte sPSSData
-_0809116C:
- ldr r0, [r0]
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0809117E
- movs r0, 0
- str r0, [r2]
-_0809117E:
- movs r0, 0x1
-_08091180:
- pop {r1}
- bx r1
- thumb_func_end sub_8091150
-
- thumb_func_start sub_8091184
-sub_8091184: @ 8091184
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080911A8 @ =sPSSData
- ldr r1, [r1]
- ldr r2, _080911AC @ =0x00000a68
- adds r1, r2
- ldr r3, [r1]
- movs r1, 0x3
- ands r0, r1
- lsls r0, 2
- ldrb r2, [r3, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x5]
- bx lr
- .align 2, 0
-_080911A8: .4byte sPSSData
-_080911AC: .4byte 0x00000a68
- thumb_func_end sub_8091184
-
- thumb_func_start sub_80911B0
-sub_80911B0: @ 80911B0
- ldr r1, _080911D0 @ =sPSSData
- ldr r1, [r1]
- movs r2, 0xCB
- lsls r2, 4
- adds r1, r2
- ldr r2, [r1]
- ldrh r2, [r2, 0x20]
- strh r2, [r0, 0x20]
- ldr r2, [r1]
- ldrh r1, [r2, 0x26]
- ldrh r2, [r2, 0x22]
- adds r1, r2
- adds r1, 0x4
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_080911D0: .4byte sPSSData
- thumb_func_end sub_80911B0
-
- thumb_func_start sub_80911D4
-sub_80911D4: @ 80911D4
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- movs r4, 0
- ldr r1, _0809123C @ =sPSSData
- ldr r0, [r1]
- ldr r2, _08091240 @ =0x00000b54
- adds r0, r2
- ldrh r0, [r0]
- adds r2, r1, 0
- cmp r0, r3
- beq _08091208
- adds r6, r2, 0
- ldr r5, _08091240 @ =0x00000b54
-_080911F0:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x27
- bhi _08091208
- ldr r0, [r6]
- lsls r1, r4, 1
- adds r0, r5
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r3
- bne _080911F0
-_08091208:
- cmp r4, 0x28
- bne _08091248
- movs r4, 0
- ldr r0, [r2]
- ldr r5, _08091240 @ =0x00000b54
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, 0
- beq _08091234
- adds r6, r2, 0
-_0809121C:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x27
- bhi _08091234
- ldr r0, [r6]
- lsls r1, r4, 1
- adds r0, r5
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0
- bne _0809121C
-_08091234:
- cmp r4, 0x28
- bne _08091248
- ldr r0, _08091244 @ =0x0000ffff
- b _0809127A
- .align 2, 0
-_0809123C: .4byte sPSSData
-_08091240: .4byte 0x00000b54
-_08091244: .4byte 0x0000ffff
-_08091248:
- ldr r1, [r2]
- lsls r2, r4, 1
- ldr r5, _08091280 @ =0x00000b54
- adds r0, r1, r5
- adds r0, r2
- strh r3, [r0]
- ldr r0, _08091284 @ =0x00000b04
- adds r1, r0
- adds r1, r2
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r4, 20
- lsrs r4, 16
- adds r0, r3, 0
- movs r1, 0x1
- bl GetMonIconTiles
- lsls r1, r4, 5
- ldr r2, _08091288 @ =0x06010000
- adds r1, r2
- ldr r2, _0809128C @ =0x04000080
- bl CpuSet
- adds r0, r4, 0
-_0809127A:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08091280: .4byte 0x00000b54
-_08091284: .4byte 0x00000b04
-_08091288: .4byte 0x06010000
-_0809128C: .4byte 0x04000080
- thumb_func_end sub_80911D4
-
- thumb_func_start sub_8091290
-sub_8091290: @ 8091290
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- movs r3, 0
- ldr r6, _080912C4 @ =sPSSData
-_0809129A:
- ldr r1, [r6]
- lsls r2, r3, 1
- ldr r4, _080912C8 @ =0x00000b54
- adds r0, r1, r4
- adds r4, r0, r2
- ldrh r0, [r4]
- cmp r0, r5
- bne _080912D0
- ldr r0, _080912CC @ =0x00000b04
- adds r1, r0
- adds r1, r2
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _080912DA
- strh r0, [r4]
- b _080912DA
- .align 2, 0
-_080912C4: .4byte sPSSData
-_080912C8: .4byte 0x00000b54
-_080912CC: .4byte 0x00000b04
-_080912D0:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x27
- bls _0809129A
-_080912DA:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8091290
-
- thumb_func_start sub_80912E0
-sub_80912E0: @ 80912E0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- ldr r4, [sp, 0x3C]
- ldr r5, [sp, 0x40]
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x18]
- lsls r3, 16
- lsrs r3, 16
- mov r8, r3
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- mov r9, r5
- mov r2, sp
- ldr r0, _08091390 @ =gUnknown_83CEBF0
- ldm r0!, {r3,r5,r7}
- stm r2!, {r3,r5,r7}
- ldm r0!, {r3,r5,r7}
- stm r2!, {r3,r5,r7}
- adds r0, r6, 0
- bl GetIconSpecies
- mov r10, r0
- mov r6, r10
- mov r2, sp
- ldr r1, _08091394 @ =gMonIconPaletteIndices
- adds r1, r6, r1
- ldr r3, _08091398 @ =0x0000dac0
- adds r0, r3, 0
- ldrb r1, [r1]
- adds r0, r1
- strh r0, [r2, 0x2]
- adds r0, r6, 0
- bl sub_80911D4
- lsls r0, 16
- lsrs r0, 16
- adds r5, r0, 0
- ldr r0, _0809139C @ =0x0000ffff
- cmp r5, r0
- beq _080913B2
- ldr r7, [sp, 0x18]
- lsls r1, r7, 16
- asrs r1, 16
- mov r0, r8
- lsls r2, r0, 16
- asrs r2, 16
- mov r0, sp
- mov r3, r9
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080913AC
- ldr r1, _080913A0 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldr r2, _080913A4 @ =0x000003ff
- ands r2, r5
- ldrh r3, [r0, 0x4]
- ldr r1, _080913A8 @ =0xfffffc00
- ands r1, r3
- orrs r1, r2
- strh r1, [r0, 0x4]
- movs r1, 0x3
- ands r4, r1
- lsls r3, r4, 2
- ldrb r2, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r3
- strb r1, [r0, 0x5]
- mov r1, r10
- strh r1, [r0, 0x2E]
- b _080913B4
- .align 2, 0
-_08091390: .4byte gUnknown_83CEBF0
-_08091394: .4byte gMonIconPaletteIndices
-_08091398: .4byte 0x0000dac0
-_0809139C: .4byte 0x0000ffff
-_080913A0: .4byte gSprites
-_080913A4: .4byte 0x000003ff
-_080913A8: .4byte 0xfffffc00
-_080913AC:
- adds r0, r6, 0
- bl sub_8091290
-_080913B2:
- movs r0, 0
-_080913B4:
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80912E0
-
- thumb_func_start sub_80913C4
-sub_80913C4: @ 80913C4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- bl sub_8091290
- adds r0, r4, 0
- bl DestroySprite
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80913C4
-
- thumb_func_start sub_80913DC
-sub_80913DC: @ 80913DC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08091404 @ =sub_8091420
- movs r1, 0x2
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08091408 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xC]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08091404: .4byte sub_8091420
-_08091408: .4byte gTasks
- thumb_func_end sub_80913DC
-
- thumb_func_start sub_809140C
-sub_809140C: @ 809140C
- push {lr}
- ldr r0, _0809141C @ =sub_8091420
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0809141C: .4byte sub_8091420
- thumb_func_end sub_809140C
-
- thumb_func_start sub_8091420
-sub_8091420: @ 8091420
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _08091444 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bhi _08091504
- lsls r0, 2
- ldr r1, _08091448 @ =_0809144C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08091444: .4byte gTasks
-_08091448: .4byte _0809144C
- .align 2, 0
-_0809144C:
- .4byte _08091460
- .4byte _08091498
- .4byte _080914CC
- .4byte _080914D6
- .4byte _080914FC
-_08091460:
- ldr r1, _0809148C @ =sPSSData
- ldr r0, [r1]
- ldr r2, _08091490 @ =0x000002d2
- adds r0, r2
- movs r2, 0
- strb r2, [r0]
- ldr r1, [r1]
- movs r3, 0xB3
- lsls r3, 2
- adds r0, r1, r3
- strh r2, [r0]
- ldr r0, _08091494 @ =0x00004abc
- adds r1, r0
- movs r2, 0x80
- lsls r2, 5
- movs r0, 0
- movs r3, 0x1
- bl RequestDma3Fill
- strh r0, [r4, 0xA]
- b _08091508
- .align 2, 0
-_0809148C: .4byte sPSSData
-_08091490: .4byte 0x000002d2
-_08091494: .4byte 0x00004abc
-_08091498:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- bl CheckForSpaceForDma3Request
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _0809150E
- ldr r0, _080914C4 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _080914C8 @ =0x00004abc
- adds r1, r2
- movs r0, 0x2
- bl SetBgTilemapBuffer
- movs r0, 0x2
- bl ShowBg
- b _08091508
- .align 2, 0
-_080914C4: .4byte sPSSData
-_080914C8: .4byte 0x00004abc
-_080914CC:
- ldrb r0, [r4, 0xC]
- movs r1, 0
- bl sub_8091850
- b _08091508
-_080914D6:
- bl sub_809196C
- cmp r0, 0
- beq _0809150E
- ldrb r0, [r4, 0xC]
- bl sub_8091A94
- bl sub_8091F80
- ldrb r0, [r4, 0xC]
- bl sub_80900D4
- ldr r1, _080914F8 @ =0x00005b0a
- movs r0, 0xC
- bl SetGpuReg
- b _08091508
- .align 2, 0
-_080914F8: .4byte 0x00005b0a
-_080914FC:
- adds r0, r2, 0
- bl DestroyTask
- b _08091508
-_08091504:
- movs r0, 0
- b _0809150C
-_08091508:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
-_0809150C:
- strh r0, [r4, 0x8]
-_0809150E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8091420
-
- thumb_func_start sub_8091514
-sub_8091514: @ 8091514
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r4, r0, 24
- mov r8, r4
- adds r0, r4, 0
- bl sub_80916F4
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0, 0
- ldr r5, _080915D8 @ =sPSSData
- ldr r2, [r5]
- lsls r0, r6, 24
- asrs r3, r0, 24
- movs r0, 0x6
- negs r0, r0
- adds r1, r0, 0
- cmp r3, 0
- ble _08091540
- movs r1, 0x6
-_08091540:
- ldr r7, _080915DC @ =0x000002ce
- adds r0, r2, r7
- strh r1, [r0]
- movs r1, 0x2
- cmp r3, 0
- ble _0809154E
- movs r1, 0x1
-_0809154E:
- ldr r7, _080915E0 @ =0x000002d3
- adds r0, r2, r7
- strb r1, [r0]
- ldr r2, [r5]
- movs r0, 0xB4
- lsls r0, 2
- adds r1, r2, r0
- movs r0, 0x20
- strh r0, [r1]
- movs r1, 0xB5
- lsls r1, 2
- adds r0, r2, r1
- strb r4, [r0]
- ldr r2, [r5]
- movs r1, 0
- cmp r3, 0
- bgt _08091572
- movs r1, 0x5
-_08091572:
- ldr r4, _080915E4 @ =0x000002d6
- adds r0, r2, r4
- strh r1, [r0]
- movs r7, 0xB6
- lsls r7, 2
- adds r0, r2, r7
- strh r3, [r0]
- movs r1, 0x38
- cmp r3, 0
- ble _0809158C
- movs r0, 0x84
- lsls r0, 1
- adds r1, r0, 0
-_0809158C:
- ldr r4, _080915E8 @ =0x000002da
- adds r0, r2, r4
- strh r1, [r0]
- movs r1, 0
- cmp r3, 0
- bgt _0809159A
- movs r1, 0x5
-_0809159A:
- movs r7, 0xB7
- lsls r7, 2
- adds r0, r2, r7
- strh r1, [r0]
- ldr r0, _080915EC @ =0x000002de
- adds r1, r2, r0
- movs r0, 0
- strh r0, [r1]
- movs r3, 0xB8
- lsls r3, 2
- adds r1, r2, r3
- movs r0, 0x2
- strh r0, [r1]
- ldr r4, _080915F0 @ =0x00000a64
- adds r0, r2, r4
- mov r7, r8
- strb r7, [r0]
- ldr r0, [r5]
- ldr r1, _080915F4 @ =0x00000a65
- adds r0, r1
- strb r6, [r0]
- ldr r0, [r5]
- ldr r3, _080915F8 @ =0x00000a63
- adds r0, r3
- movs r1, 0
- strb r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080915D8: .4byte sPSSData
-_080915DC: .4byte 0x000002ce
-_080915E0: .4byte 0x000002d3
-_080915E4: .4byte 0x000002d6
-_080915E8: .4byte 0x000002da
-_080915EC: .4byte 0x000002de
-_080915F0: .4byte 0x00000a64
-_080915F4: .4byte 0x00000a65
-_080915F8: .4byte 0x00000a63
- thumb_func_end sub_8091514
-
- thumb_func_start sub_80915FC
-sub_80915FC: @ 80915FC
- push {r4-r6,lr}
- ldr r4, _08091618 @ =sPSSData
- ldr r1, [r4]
- ldr r5, _0809161C @ =0x00000a63
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08091644
- cmp r0, 0x1
- bgt _08091620
- cmp r0, 0
- beq _08091626
- b _080916D4
- .align 2, 0
-_08091618: .4byte sPSSData
-_0809161C: .4byte 0x00000a63
-_08091620:
- cmp r0, 0x2
- beq _08091694
- b _080916D4
-_08091626:
- ldr r2, _08091688 @ =0x00000a64
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r2, 0x1
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- bl sub_8091850
- ldr r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08091644:
- bl sub_809196C
- cmp r0, 0
- beq _080916E2
- ldr r6, _0809168C @ =sPSSData
- ldr r1, [r6]
- ldr r4, _08091688 @ =0x00000a64
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r5, _08091690 @ =0x00000a65
- adds r1, r5
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- bl sub_8090574
- ldr r1, [r6]
- adds r4, r1, r4
- ldrb r0, [r4]
- adds r1, r5
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- bl sub_8091C48
- ldr r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- bl sub_809200C
- b _080916D4
- .align 2, 0
-_08091688: .4byte 0x00000a64
-_0809168C: .4byte sPSSData
-_08091690: .4byte 0x00000a65
-_08091694:
- bl sub_809062C
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r2, [r4]
- movs r4, 0xB4
- lsls r4, 2
- adds r3, r2, r4
- ldrh r0, [r3]
- cmp r0, 0
- beq _080916D0
- movs r0, 0xB3
- lsls r0, 2
- adds r1, r2, r0
- subs r4, 0x2
- adds r0, r2, r4
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- strh r0, [r1]
- ldrh r0, [r3]
- subs r0, 0x1
- strh r0, [r3]
- lsls r0, 16
- cmp r0, 0
- bne _080916E2
- bl sub_8091E34
- bl sub_80920AC
-_080916D0:
- adds r0, r5, 0
- b _080916E4
-_080916D4:
- ldr r0, _080916EC @ =sPSSData
- ldr r1, [r0]
- ldr r4, _080916F0 @ =0x00000a63
- adds r1, r4
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_080916E2:
- movs r0, 0x1
-_080916E4:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080916EC: .4byte sPSSData
-_080916F0: .4byte 0x00000a63
- thumb_func_end sub_80915FC
-
- thumb_func_start sub_80916F4
-sub_80916F4: @ 80916F4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r1, r0, 24
- movs r2, 0
- cmp r1, r4
- beq _0809171E
-_08091708:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xD
- bls _08091714
- movs r1, 0
-_08091714:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r1, r4
- bne _08091708
-_0809171E:
- movs r0, 0x1
- negs r0, r0
- cmp r2, 0x6
- bhi _08091728
- movs r0, 0x1
-_08091728:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80916F4
-
- thumb_func_start sub_8091730
-sub_8091730: @ 8091730
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl sub_808BDBC
- ldr r0, _08091758 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _0809175C @ =0x00000a62
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08091758: .4byte sPSSData
-_0809175C: .4byte 0x00000a62
- thumb_func_end sub_8091730
-
- thumb_func_start sub_8091760
-sub_8091760: @ 8091760
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _08091780 @ =sPSSData
- ldr r0, [r1]
- ldr r2, _08091784 @ =0x00000a62
- adds r0, r2
- ldrb r0, [r0]
- adds r4, r1, 0
- cmp r0, 0x4
- bhi _08091844
- lsls r0, 2
- ldr r1, _08091788 @ =_0809178C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08091780: .4byte sPSSData
-_08091784: .4byte 0x00000a62
-_08091788: .4byte _0809178C
- .align 2, 0
-_0809178C:
- .4byte _080917A0
- .4byte _080917C8
- .4byte _080917E2
- .4byte _0809181C
- .4byte _08091840
-_080917A0:
- ldr r0, [r4]
- movs r1, 0xE7
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080917C0 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, [r4]
- ldr r2, _080917C4 @ =0x00000a62
- adds r1, r2
- b _0809182E
- .align 2, 0
-_080917C0: .4byte 0x0000ffff
-_080917C4: .4byte 0x00000a62
-_080917C8:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _08091844
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_8091850
- b _08091826
-_080917E2:
- bl sub_809196C
- cmp r0, 0x1
- bne _08091844
- bl sub_8091EF0
- ldr r4, _08091810 @ =sPSSData
- ldr r0, [r4]
- movs r1, 0xE7
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _08091814 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0x1
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, [r4]
- ldr r2, _08091818 @ =0x00000a62
- adds r1, r2
- b _0809182E
- .align 2, 0
-_08091810: .4byte sPSSData
-_08091814: .4byte 0x0000ffff
-_08091818: .4byte 0x00000a62
-_0809181C:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _08091844
-_08091826:
- ldr r0, _08091838 @ =sPSSData
- ldr r1, [r0]
- ldr r0, _0809183C @ =0x00000a62
- adds r1, r0
-_0809182E:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08091844
- .align 2, 0
-_08091838: .4byte sPSSData
-_0809183C: .4byte 0x00000a62
-_08091840:
- movs r0, 0
- b _08091846
-_08091844:
- movs r0, 0x1
-_08091846:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8091760
-
- thumb_func_start sub_8091850
-sub_8091850: @ 8091850
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r4, _08091904 @ =sPSSData
- ldr r2, [r4]
- ldr r3, _08091908 @ =0x000006f9
- adds r2, r3
- movs r3, 0
- strb r3, [r2]
- ldr r2, [r4]
- ldr r3, _0809190C @ =0x000006fa
- adds r2, r3
- strb r0, [r2]
- ldr r0, [r4]
- ldr r2, _08091910 @ =0x000006fb
- adds r0, r2
- strb r1, [r0]
- ldr r1, [r4]
- adds r2, r1, r2
- movs r0, 0
- ldrsb r0, [r2, r0]
- cmp r0, 0
- beq _08091896
- movs r3, 0
- ldr r0, _08091914 @ =0x000002d2
- adds r2, r1, r0
- ldrb r0, [r2]
- cmp r0, 0
- bne _0809188A
- movs r3, 0x1
-_0809188A:
- strb r3, [r2]
- ldr r0, [r4]
- ldr r1, _08091918 @ =0x00004abc
- adds r0, r1
- bl sub_8091A24
-_08091896:
- ldr r6, _08091904 @ =sPSSData
- ldr r0, [r6]
- ldr r2, _0809190C @ =0x000006fa
- adds r0, r2
- ldrb r0, [r0]
- bl sub_808BD94
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- ldr r0, _0809191C @ =gUnknown_83D2A10
- adds r7, r1, r0
- ldr r0, [r7, 0x4]
- ldr r1, [r6]
- ldr r5, _08091920 @ =0x00000792
- adds r1, r5
- bl LZ77UnCompWram
- ldr r1, [r6]
- ldr r3, _08091918 @ =0x00004abc
- adds r0, r1, r3
- adds r5, r1, r5
- ldr r4, _08091910 @ =0x000006fb
- adds r2, r1, r4
- ldrb r2, [r2]
- lsls r2, 24
- asrs r2, 24
- ldr r3, _08091914 @ =0x000002d2
- adds r1, r3
- ldrb r3, [r1]
- adds r1, r5, 0
- bl sub_8091984
- ldr r1, [r6]
- adds r4, r1, r4
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- beq _08091924
- ldr r0, [r7, 0x8]
- ldr r2, _08091914 @ =0x000002d2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 21
- movs r3, 0x80
- lsls r3, 15
- adds r1, r3
- lsrs r1, 16
- movs r2, 0x40
- bl LoadPalette
- b _08091938
- .align 2, 0
-_08091904: .4byte sPSSData
-_08091908: .4byte 0x000006f9
-_0809190C: .4byte 0x000006fa
-_08091910: .4byte 0x000006fb
-_08091914: .4byte 0x000002d2
-_08091918: .4byte 0x00004abc
-_0809191C: .4byte gUnknown_83D2A10
-_08091920: .4byte 0x00000792
-_08091924:
- ldr r0, [r7, 0x8]
- ldr r2, _08091960 @ =0x000002d2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 6
- ldr r2, _08091964 @ =gPlttBufferUnfaded + 0x80
- adds r1, r2
- movs r2, 0x20
- bl CpuSet
-_08091938:
- ldr r1, [r7]
- ldr r0, _08091968 @ =sPSSData
- ldr r0, [r0]
- ldr r3, _08091960 @ =0x000002d2
- adds r0, r3
- ldrb r3, [r0]
- lsls r3, 8
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- movs r2, 0
- bl DecompressAndLoadBgGfxUsingHeap
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08091960: .4byte 0x000002d2
-_08091964: .4byte gPlttBufferUnfaded + 0x80
-_08091968: .4byte sPSSData
- thumb_func_end sub_8091850
-
- thumb_func_start sub_809196C
-sub_809196C: @ 809196C
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0809197E
- movs r0, 0x1
- b _08091980
-_0809197E:
- movs r0, 0
-_08091980:
- pop {r1}
- bx r1
- thumb_func_end sub_809196C
-
- thumb_func_start sub_8091984
-sub_8091984: @ 8091984
- push {r4-r7,lr}
- sub sp, 0x24
- lsls r3, 24
- lsrs r3, 24
- lsls r5, r3, 17
- ldr r0, _080919F0 @ =sPSSData
- ldr r0, [r0]
- movs r4, 0xB3
- lsls r4, 2
- adds r0, r4
- ldrh r4, [r0]
- lsrs r4, 3
- adds r4, 0xA
- lsls r2, 24
- asrs r7, r2, 24
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 3
- adds r6, r4, r0
- movs r0, 0x3F
- ands r6, r0
- movs r4, 0x14
- str r4, [sp]
- movs r2, 0x12
- str r2, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x2
- str r0, [sp, 0xC]
- str r4, [sp, 0x10]
- str r2, [sp, 0x14]
- movs r0, 0x11
- str r0, [sp, 0x18]
- lsls r3, 24
- asrs r3, 16
- str r3, [sp, 0x1C]
- movs r0, 0xC0
- lsls r0, 10
- adds r5, r0
- asrs r5, 16
- str r5, [sp, 0x20]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl CopyRectToBgTilemapBufferRect
- cmp r7, 0
- beq _08091A16
- cmp r7, 0
- ble _080919F4
- lsls r0, r6, 16
- movs r1, 0xA0
- lsls r1, 13
- adds r0, r1
- b _080919FA
- .align 2, 0
-_080919F0: .4byte sPSSData
-_080919F4:
- lsls r0, r6, 16
- ldr r4, _08091A20 @ =0xfffc0000
- adds r0, r4
-_080919FA:
- lsrs r6, r0, 16
- lsls r2, r6, 24
- lsrs r2, 24
- movs r0, 0x4
- str r0, [sp]
- movs r0, 0x12
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- movs r3, 0x2
- bl FillBgTilemapBufferRect
-_08091A16:
- add sp, 0x24
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08091A20: .4byte 0xfffc0000
- thumb_func_end sub_8091984
-
- thumb_func_start sub_8091A24
-sub_8091A24: @ 8091A24
- push {r4-r6,lr}
- adds r2, r0, 0
- ldr r0, _08091A50 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xB3
- lsls r1, 2
- adds r0, r1
- ldrh r0, [r0]
- lsrs r0, 3
- adds r3, r0, 0
- adds r3, 0x1E
- movs r0, 0x3F
- ands r3, r0
- adds r0, r3, 0
- cmp r0, 0x1F
- bgt _08091A54
- lsls r0, 1
- movs r6, 0x98
- lsls r6, 3
- adds r0, r6
- b _08091A5C
- .align 2, 0
-_08091A50: .4byte sPSSData
-_08091A54:
- lsls r0, 1
- movs r1, 0xC8
- lsls r1, 4
- adds r0, r1
-_08091A5C:
- adds r2, r0
- movs r0, 0
- movs r5, 0
- movs r4, 0x3F
-_08091A64:
- strh r5, [r2]
- adds r2, 0x2
- adds r3, 0x1
- ands r3, r4
- adds r1, r3, 0
- cmp r1, 0
- bne _08091A76
- ldr r6, _08091A90 @ =0xfffff7c0
- adds r2, r6
-_08091A76:
- cmp r1, 0x20
- bne _08091A80
- movs r1, 0xF8
- lsls r1, 3
- adds r2, r1
-_08091A80:
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2B
- bls _08091A64
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08091A90: .4byte 0xfffff7c0
- thumb_func_end sub_8091A24
-
- thumb_func_start sub_8091A94
-sub_8091A94: @ 8091A94
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _08091C1C @ =sPSSData
- mov r10, r1
- ldr r1, [r1]
- movs r2, 0xBE
- lsls r2, 2
- adds r0, r1, r2
- str r0, [sp, 0x28]
- mov r3, sp
- adds r3, 0x28
- str r3, [sp, 0x30]
- ldr r0, _08091C20 @ =0x00030200
- str r0, [r3, 0x4]
- ldr r4, _08091C24 @ =0x000006fc
- adds r1, r4
- str r1, [sp, 0x18]
- add r0, sp, 0x1C
- ldr r7, _08091C28 @ =0x0000dac9
- strh r7, [r0]
- add r0, sp, 0x20
- movs r1, 0
- movs r2, 0x8
- bl memset
- add r1, sp, 0x18
- add r0, sp, 0x8
- movs r2, 0x10
- bl memcpy
- mov r0, r8
- bl sub_808BD94
- lsls r0, 24
- mov r5, r10
- ldr r4, [r5]
- ldr r2, _08091C2C @ =gUnknown_83D29D0
- lsrs r0, 22
- adds r1, r0, r2
- ldrh r3, [r1]
- movs r5, 0xE3
- lsls r5, 3
- adds r1, r4, r5
- strh r3, [r1]
- adds r2, 0x2
- adds r0, r2
- ldrh r0, [r0]
- ldr r1, _08091C30 @ =0x0000071a
- adds r4, r1
- strh r0, [r4]
- add r0, sp, 0x8
- bl LoadSpritePalettes
- mov r2, r10
- ldr r0, [r2]
- movs r6, 0xE7
- lsls r6, 3
- adds r0, r6
- movs r1, 0xFC
- lsls r1, 2
- str r1, [r0]
- adds r0, r7, 0
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- mov r4, r10
- ldr r3, [r4]
- lsls r1, r0, 4
- movs r5, 0x87
- lsls r5, 1
- mov r9, r5
- add r1, r9
- ldr r4, _08091C34 @ =0x0000071c
- adds r2, r3, r4
- strh r1, [r2]
- adds r3, r6
- movs r5, 0x80
- lsls r5, 9
- adds r1, r5, 0
- lsls r1, r0
- ldr r0, [r3]
- orrs r0, r1
- str r0, [r3]
- adds r0, r7, 0
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- mov r1, r10
- ldr r4, [r1]
- lsls r1, r0, 4
- add r1, r9
- ldr r3, _08091C38 @ =0x0000071e
- adds r2, r4, r3
- strh r1, [r2]
- adds r6, r4, r6
- lsls r5, r0
- ldr r0, [r6]
- orrs r0, r5
- str r0, [r6]
- ldr r5, _08091C3C @ =0x000021a8
- adds r4, r5
- mov r0, r8
- bl GetBoxNamePtr
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x8
- bl StringCopyPadded
- mov r4, r10
- ldr r0, [r4]
- adds r5, r0, r5
- movs r2, 0xBE
- lsls r2, 2
- adds r1, r0, r2
- movs r3, 0x9F
- lsls r3, 3
- adds r0, r3
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r2, 0
- movs r3, 0
- bl PSS_RenderTextToVramViaBuffer
- ldr r0, [sp, 0x30]
- bl LoadSpriteSheet
- mov r0, r8
- bl GetBoxNamePtr
- bl sub_8091F60
- movs r4, 0
- lsls r0, 16
- asrs r6, r0, 16
-_08091BBC:
- lsls r1, r4, 5
- adds r1, r6, r1
- lsls r1, 16
- asrs r1, 16
- ldr r0, _08091C40 @ =gUnknown_83D2B7C
- movs r2, 0x1C
- movs r3, 0x18
- bl CreateSprite
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r5, _08091C1C @ =sPSSData
- ldr r2, [r5]
- lsls r0, r4, 2
- movs r3, 0xE4
- lsls r3, 3
- adds r2, r3
- adds r2, r0
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08091C44 @ =gSprites
- adds r0, r1
- str r0, [r2]
- lsls r1, r4, 24
- lsrs r1, 24
- bl StartSpriteAnim
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _08091BBC
- ldr r0, [r5]
- movs r4, 0xDF
- lsls r4, 3
- adds r0, r4
- movs r1, 0
- strb r1, [r0]
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08091C1C: .4byte sPSSData
-_08091C20: .4byte 0x00030200
-_08091C24: .4byte 0x000006fc
-_08091C28: .4byte 0x0000dac9
-_08091C2C: .4byte gUnknown_83D29D0
-_08091C30: .4byte 0x0000071a
-_08091C34: .4byte 0x0000071c
-_08091C38: .4byte 0x0000071e
-_08091C3C: .4byte 0x000021a8
-_08091C40: .4byte gUnknown_83D2B7C
-_08091C44: .4byte gSprites
- thumb_func_end sub_8091A94
-
- thumb_func_start sub_8091C48
-sub_8091C48: @ 8091C48
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x30
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x2C]
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- ldr r4, _08091CC4 @ =sPSSData
- ldr r2, [r4]
- movs r1, 0xBE
- lsls r1, 2
- adds r0, r2, r1
- str r0, [sp, 0x20]
- add r3, sp, 0x20
- ldr r5, _08091CC8 @ =0x0000ffff
- mov r12, r5
- movs r6, 0xC0
- lsls r6, 10
- mov r9, r6
- ldr r0, _08091CCC @ =0x00030200
- str r0, [r3, 0x4]
- add r1, sp, 0x8
- ldr r0, _08091CD0 @ =gUnknown_83D2B7C
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- movs r1, 0
- movs r5, 0xDF
- lsls r5, 3
- adds r2, r5
- ldrb r0, [r2]
- mov r8, r4
- adds r6, r3, 0
- cmp r0, 0
- bne _08091C9C
- movs r1, 0x1
-_08091C9C:
- strb r1, [r2]
- mov r7, r8
- ldr r0, [r7]
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0
- bne _08091CD8
- ldr r0, [r6, 0x4]
- mov r1, r12
- ands r0, r1
- mov r2, r9
- orrs r0, r2
- str r0, [r6, 0x4]
- ldr r0, [r7]
- ldr r3, _08091CD4 @ =0x0000071c
- adds r0, r3
- ldrh r0, [r0]
- mov r9, r0
- b _08091CFC
- .align 2, 0
-_08091CC4: .4byte sPSSData
-_08091CC8: .4byte 0x0000ffff
-_08091CCC: .4byte 0x00030200
-_08091CD0: .4byte gUnknown_83D2B7C
-_08091CD4: .4byte 0x0000071c
-_08091CD8:
- ldr r0, [r6, 0x4]
- mov r5, r12
- ands r0, r5
- movs r1, 0x80
- lsls r1, 11
- orrs r0, r1
- str r0, [r6, 0x4]
- mov r7, r8
- ldr r0, [r7]
- ldr r1, _08091E18 @ =0x0000071c
- adds r0, r1
- ldrh r0, [r0]
- mov r9, r0
- add r1, sp, 0x8
- movs r0, 0x4
- strh r0, [r1]
- ldr r0, _08091E1C @ =0x0000dac9
- strh r0, [r1, 0x2]
-_08091CFC:
- mov r2, r8
- ldr r4, [r2]
- ldr r5, _08091E20 @ =0x000021a8
- adds r4, r5
- ldr r0, [sp, 0x2C]
- bl GetBoxNamePtr
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x8
- bl StringCopyPadded
- mov r3, r8
- ldr r0, [r3]
- adds r5, r0, r5
- movs r7, 0xBE
- lsls r7, 2
- adds r1, r0, r7
- movs r2, 0x9F
- lsls r2, 3
- adds r0, r2
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r2, 0
- movs r3, 0
- bl PSS_RenderTextToVramViaBuffer
- adds r0, r6, 0
- bl LoadSpriteSheet
- ldr r0, [sp, 0x2C]
- bl sub_808BD94
- lsls r0, 24
- lsrs r0, 22
- ldr r1, _08091E24 @ =gUnknown_83D29D0
- adds r0, r1
- mov r1, r9
- movs r2, 0x4
- bl LoadPalette
- ldr r0, [sp, 0x2C]
- bl GetBoxNamePtr
- bl sub_8091F60
- lsls r0, 16
- mov r3, r10
- lsls r2, r3, 24
- asrs r2, 24
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 6
- lsrs r5, r0, 16
- str r5, [sp, 0x28]
- asrs r0, 16
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- movs r7, 0
- mov r9, r8
- negs r2, r2
- mov r8, r2
-_08091D82:
- lsls r6, r7, 5
- mov r0, r10
- lsls r1, r0, 16
- asrs r1, 16
- adds r1, r6
- lsls r1, 16
- asrs r1, 16
- add r0, sp, 0x8
- movs r2, 0x1C
- movs r3, 0x18
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- mov r1, r9
- ldr r2, [r1]
- lsls r5, r7, 2
- movs r3, 0xE5
- lsls r3, 3
- adds r2, r3
- adds r2, r5
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08091E28 @ =gSprites
- adds r1, r0
- str r1, [r2]
- mov r0, r8
- lsls r4, r0, 1
- add r4, r8
- lsls r4, 1
- strh r4, [r1, 0x2E]
- ldr r1, [r2]
- ldr r3, [sp, 0x28]
- lsls r0, r3, 16
- asrs r0, 16
- adds r0, r6
- strh r0, [r1, 0x30]
- ldr r0, [r2]
- movs r6, 0
- strh r6, [r0, 0x32]
- ldr r0, [r2]
- ldr r1, _08091E2C @ =sub_8091E84
- str r1, [r0, 0x1C]
- lsls r1, r7, 24
- lsrs r1, 24
- bl StartSpriteAnim
- mov r1, r9
- ldr r0, [r1]
- movs r2, 0xE4
- lsls r2, 3
- adds r0, r2
- adds r0, r5
- ldr r1, [r0]
- strh r4, [r1, 0x2E]
- ldr r2, [r0]
- movs r1, 0x1
- strh r1, [r2, 0x30]
- ldr r1, [r0]
- ldr r0, _08091E30 @ =sub_8091EB8
- str r0, [r1, 0x1C]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0x1
- bls _08091D82
- add sp, 0x30
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08091E18: .4byte 0x0000071c
-_08091E1C: .4byte 0x0000dac9
-_08091E20: .4byte 0x000021a8
-_08091E24: .4byte gUnknown_83D29D0
-_08091E28: .4byte gSprites
-_08091E2C: .4byte sub_8091E84
-_08091E30: .4byte sub_8091EB8
- thumb_func_end sub_8091C48
-
- thumb_func_start sub_8091E34
-sub_8091E34: @ 8091E34
- push {lr}
- ldr r0, _08091E50 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xDF
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08091E54
- movs r0, 0x4
- bl FreeSpriteTilesByTag
- b _08091E5A
- .align 2, 0
-_08091E50: .4byte sPSSData
-_08091E54:
- movs r0, 0x3
- bl FreeSpriteTilesByTag
-_08091E5A:
- ldr r0, _08091E7C @ =sPSSData
- ldr r0, [r0]
- movs r3, 0xE4
- lsls r3, 3
- adds r2, r0, r3
- adds r3, 0x8
- adds r1, r0, r3
- ldr r1, [r1]
- str r1, [r2]
- ldr r2, _08091E80 @ =0x00000724
- adds r1, r0, r2
- adds r3, 0x4
- adds r0, r3
- ldr r0, [r0]
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08091E7C: .4byte sPSSData
-_08091E80: .4byte 0x00000724
- thumb_func_end sub_8091E34
-
- thumb_func_start sub_8091E84
-sub_8091E84: @ 8091E84
- push {lr}
- adds r2, r0, 0
- ldrh r1, [r2, 0x32]
- movs r3, 0x32
- ldrsh r0, [r2, r3]
- cmp r0, 0
- beq _08091E98
- subs r0, r1, 0x1
- strh r0, [r2, 0x32]
- b _08091EB0
-_08091E98:
- ldrh r0, [r2, 0x2E]
- ldrh r1, [r2, 0x20]
- adds r0, r1
- strh r0, [r2, 0x20]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x30
- ldrsh r1, [r2, r3]
- cmp r0, r1
- bne _08091EB0
- ldr r0, _08091EB4 @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
-_08091EB0:
- pop {r0}
- bx r0
- .align 2, 0
-_08091EB4: .4byte SpriteCallbackDummy
- thumb_func_end sub_8091E84
-
- thumb_func_start sub_8091EB8
-sub_8091EB8: @ 8091EB8
- push {lr}
- adds r2, r0, 0
- ldrh r1, [r2, 0x30]
- movs r3, 0x30
- ldrsh r0, [r2, r3]
- cmp r0, 0
- beq _08091ECC
- subs r0, r1, 0x1
- strh r0, [r2, 0x30]
- b _08091EEA
-_08091ECC:
- ldrh r0, [r2, 0x2E]
- ldrh r1, [r2, 0x20]
- adds r0, r1
- strh r0, [r2, 0x20]
- ldrh r1, [r2, 0x24]
- adds r0, r1
- strh r0, [r2, 0x32]
- subs r0, 0x40
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xC0
- bls _08091EEA
- adds r0, r2, 0
- bl DestroySprite
-_08091EEA:
- pop {r0}
- bx r0
- thumb_func_end sub_8091EB8
-
- thumb_func_start sub_8091EF0
-sub_8091EF0: @ 8091EF0
- push {lr}
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- bl sub_808BD94
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, _08091F2C @ =sPSSData
- ldr r2, [r0]
- movs r3, 0xDF
- lsls r3, 3
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _08091F38
- lsls r0, r1, 2
- ldr r1, _08091F30 @ =gUnknown_83D29D0
- adds r0, r1
- adds r3, 0x24
- adds r1, r2, r3
- ldrh r1, [r1]
- lsls r1, 1
- ldr r2, _08091F34 @ =gPlttBufferUnfaded
- adds r1, r2
- movs r2, 0x2
- bl CpuSet
- b _08091F50
- .align 2, 0
-_08091F2C: .4byte sPSSData
-_08091F30: .4byte gUnknown_83D29D0
-_08091F34: .4byte gPlttBufferUnfaded
-_08091F38:
- lsls r0, r1, 2
- ldr r1, _08091F54 @ =gUnknown_83D29D0
- adds r0, r1
- ldr r3, _08091F58 @ =0x0000071e
- adds r1, r2, r3
- ldrh r1, [r1]
- lsls r1, 1
- ldr r2, _08091F5C @ =gPlttBufferUnfaded
- adds r1, r2
- movs r2, 0x2
- bl CpuSet
-_08091F50:
- pop {r0}
- bx r0
- .align 2, 0
-_08091F54: .4byte gUnknown_83D29D0
-_08091F58: .4byte 0x0000071e
-_08091F5C: .4byte gPlttBufferUnfaded
- thumb_func_end sub_8091EF0
-
- thumb_func_start sub_8091F60
-sub_8091F60: @ 8091F60
- push {lr}
- adds r1, r0, 0
- movs r0, 0x1
- movs r2, 0
- bl GetStringWidth
- adds r1, r0, 0
- lsrs r0, r1, 31
- adds r1, r0
- asrs r1, 1
- movs r0, 0xB0
- subs r0, r1
- lsls r0, 16
- asrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_8091F60
-
- thumb_func_start sub_8091F80
-sub_8091F80: @ 8091F80
- push {r4,r5,lr}
- ldr r0, _08091FFC @ =gUnknown_83D2B54
- bl LoadSpriteSheet
- movs r5, 0
-_08091F8A:
- lsls r1, r5, 4
- adds r1, r5
- lsls r1, 19
- movs r0, 0xB8
- lsls r0, 15
- adds r1, r0
- asrs r1, 16
- ldr r0, _08092000 @ =gUnknown_83D2BB4
- movs r2, 0x1C
- movs r3, 0x16
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _08091FDC
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08092004 @ =gSprites
- adds r4, r0, r1
- lsls r1, r5, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- movs r0, 0x1
- cmp r5, 0
- bne _08091FCA
- movs r1, 0x1
- negs r1, r1
- adds r0, r1, 0
-_08091FCA:
- strh r0, [r4, 0x34]
- ldr r0, _08092008 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r5, 2
- movs r2, 0xE6
- lsls r2, 3
- adds r0, r2
- adds r0, r1
- str r4, [r0]
-_08091FDC:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x1
- bls _08091F8A
- bl sub_80939AC
- lsls r0, 24
- cmp r0, 0
- beq _08091FF6
- movs r0, 0x1
- bl sub_80920FC
-_08091FF6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08091FFC: .4byte gUnknown_83D2B54
-_08092000: .4byte gUnknown_83D2BB4
-_08092004: .4byte gSprites
-_08092008: .4byte sPSSData
- thumb_func_end sub_8091F80
-
- thumb_func_start sub_809200C
-sub_809200C: @ 809200C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r2, 0
- ldr r7, _08092060 @ =sPSSData
- mov r12, r7
- movs r6, 0xE6
- lsls r6, 3
- movs r4, 0
- movs r3, 0x2
-_08092020:
- mov r0, r12
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r1, r6
- adds r1, r0
- ldr r0, [r1]
- strh r4, [r0, 0x24]
- ldr r0, [r1]
- strh r3, [r0, 0x2E]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x1
- bls _08092020
- lsls r0, r5, 24
- cmp r0, 0
- bge _08092068
- ldr r1, [r7]
- movs r2, 0xE6
- lsls r2, 3
- adds r3, r1, r2
- ldr r2, [r3]
- movs r0, 0x1D
- strh r0, [r2, 0x30]
- ldr r0, _08092064 @ =0x00000734
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x5
- strh r0, [r2, 0x30]
- ldr r0, [r3]
- movs r2, 0x48
- b _08092084
- .align 2, 0
-_08092060: .4byte sPSSData
-_08092064: .4byte 0x00000734
-_08092068:
- ldr r1, [r7]
- movs r2, 0xE6
- lsls r2, 3
- adds r3, r1, r2
- ldr r2, [r3]
- movs r0, 0x5
- strh r0, [r2, 0x30]
- ldr r0, _080920A8 @ =0x00000734
- adds r1, r0
- ldr r2, [r1]
- movs r0, 0x1D
- strh r0, [r2, 0x30]
- ldr r0, [r3]
- movs r2, 0xF8
-_08092084:
- strh r2, [r0, 0x32]
- ldr r0, [r1]
- strh r2, [r0, 0x32]
- ldr r1, [r7]
- movs r2, 0xE6
- lsls r2, 3
- adds r0, r1, r2
- ldr r2, [r0]
- movs r0, 0
- strh r0, [r2, 0x3C]
- ldr r0, _080920A8 @ =0x00000734
- adds r1, r0
- ldr r1, [r1]
- movs r0, 0x1
- strh r0, [r1, 0x3C]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080920A8: .4byte 0x00000734
- thumb_func_end sub_809200C
-
- thumb_func_start sub_80920AC
-sub_80920AC: @ 80920AC
- push {r4-r6,lr}
- movs r3, 0
- movs r5, 0
- movs r6, 0x5
- negs r6, r6
- ldr r4, _080920F8 @ =sPSSData
-_080920B8:
- ldr r1, [r4]
- lsls r0, r3, 2
- movs r2, 0xE6
- lsls r2, 3
- adds r1, r2
- adds r1, r0
- ldr r2, [r1]
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 3
- adds r0, 0x5C
- strh r0, [r2, 0x20]
- ldr r0, [r1]
- strh r5, [r0, 0x24]
- ldr r1, [r1]
- adds r1, 0x3E
- ldrb r2, [r1]
- adds r0, r6, 0
- ands r0, r2
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x1
- bls _080920B8
- movs r0, 0x1
- bl sub_80920FC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080920F8: .4byte sPSSData
- thumb_func_end sub_80920AC
-
- thumb_func_start sub_80920FC
-sub_80920FC: @ 80920FC
- push {r4-r6,lr}
- lsls r0, 24
- cmp r0, 0
- beq _08092138
- movs r2, 0
- ldr r6, _08092134 @ =sPSSData
- movs r5, 0xE6
- lsls r5, 3
- movs r3, 0
- movs r4, 0x1
-_08092110:
- ldr r1, [r6]
- lsls r0, r2, 2
- adds r1, r5
- adds r1, r0
- ldr r0, [r1]
- strh r4, [r0, 0x2E]
- ldr r0, [r1]
- strh r3, [r0, 0x30]
- ldr r0, [r1]
- strh r3, [r0, 0x32]
- ldr r0, [r1]
- strh r3, [r0, 0x36]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x1
- bls _08092110
- b _08092158
- .align 2, 0
-_08092134: .4byte sPSSData
-_08092138:
- movs r2, 0
- ldr r5, _08092160 @ =sPSSData
- movs r4, 0xE6
- lsls r4, 3
- movs r3, 0
-_08092142:
- ldr r0, [r5]
- lsls r1, r2, 2
- adds r0, r4
- adds r0, r1
- ldr r0, [r0]
- strh r3, [r0, 0x2E]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x1
- bls _08092142
-_08092158:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08092160: .4byte sPSSData
- thumb_func_end sub_80920FC
-
- thumb_func_start sub_8092164
-sub_8092164: @ 8092164
- push {lr}
- adds r2, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0x4
- bhi _08092230
- lsls r0, 2
- ldr r1, _0809217C @ =_08092180
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0809217C: .4byte _08092180
- .align 2, 0
-_08092180:
- .4byte _08092194
- .4byte _0809219A
- .4byte _080921C8
- .4byte _080921CE
- .4byte _08092220
-_08092194:
- movs r0, 0
- strh r0, [r2, 0x24]
- b _08092230
-_0809219A:
- ldrh r0, [r2, 0x30]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r2, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- ble _08092230
- strh r1, [r2, 0x30]
- ldrh r0, [r2, 0x34]
- ldrh r3, [r2, 0x24]
- adds r0, r3
- strh r0, [r2, 0x24]
- ldrh r0, [r2, 0x32]
- adds r0, 0x1
- strh r0, [r2, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- ble _08092230
- strh r1, [r2, 0x32]
- strh r1, [r2, 0x24]
- b _08092230
-_080921C8:
- movs r0, 0x3
- strh r0, [r2, 0x2E]
- b _08092230
-_080921CE:
- ldr r0, _08092218 @ =sPSSData
- ldr r1, [r0]
- ldr r0, _0809221C @ =0x000002ce
- adds r1, r0
- ldrh r0, [r2, 0x20]
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r2, 0x20]
- subs r0, 0x49
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAE
- bls _080921F4
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
-_080921F4:
- ldrh r0, [r2, 0x30]
- subs r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _08092230
- ldrh r0, [r2, 0x32]
- strh r0, [r2, 0x20]
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- movs r0, 0x4
- strh r0, [r2, 0x2E]
- b _08092230
- .align 2, 0
-_08092218: .4byte sPSSData
-_0809221C: .4byte 0x000002ce
-_08092220:
- ldr r0, _08092234 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08092238 @ =0x000002ce
- adds r0, r1
- ldrh r1, [r2, 0x20]
- ldrh r0, [r0]
- subs r1, r0
- strh r1, [r2, 0x20]
-_08092230:
- pop {r0}
- bx r0
- .align 2, 0
-_08092234: .4byte sPSSData
-_08092238: .4byte 0x000002ce
- thumb_func_end sub_8092164
-
- thumb_func_start sub_809223C
-sub_809223C: @ 809223C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- adds r6, r1, 0
- ldr r4, [sp, 0x18]
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080922A8 @ =gUnknown_83D2BB4
- lsls r5, 16
- asrs r5, 16
- lsls r6, 16
- asrs r6, 16
- adds r1, r5, 0
- adds r2, r6, 0
- adds r3, r4, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080922B4
- movs r1, 0x1
- ands r1, r7
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r5, _080922AC @ =gSprites
- adds r6, r4, r5
- adds r0, r6, 0
- bl StartSpriteAnim
- movs r0, 0x3
- mov r1, r8
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r6, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6, 0x5]
- adds r5, 0x1C
- adds r4, r5
- ldr r0, _080922B0 @ =SpriteCallbackDummy
- str r0, [r4]
- adds r0, r6, 0
- b _080922B6
- .align 2, 0
-_080922A8: .4byte gUnknown_83D2BB4
-_080922AC: .4byte gSprites
-_080922B0: .4byte SpriteCallbackDummy
-_080922B4:
- movs r0, 0
-_080922B6:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_809223C
-
- thumb_func_start sub_80922C0
-sub_80922C0: @ 80922C0
- push {lr}
- ldr r0, _080922D4 @ =sPSSData
- ldr r0, [r0]
- ldrb r1, [r0, 0x1]
- cmp r1, 0x1
- beq _080922DC
- ldr r1, _080922D8 @ =sBoxCursorArea
- movs r0, 0
- strb r0, [r1]
- b _080922E0
- .align 2, 0
-_080922D4: .4byte sPSSData
-_080922D8: .4byte sBoxCursorArea
-_080922DC:
- ldr r0, _0809231C @ =sBoxCursorArea
- strb r1, [r0]
-_080922E0:
- ldr r0, _08092320 @ =sBoxCursorPosition
- movs r1, 0
- strb r1, [r0]
- ldr r0, _08092324 @ =sIsMonBeingMoved
- strb r1, [r0]
- ldr r0, _08092328 @ =sMovingMonOrigBoxId
- strb r1, [r0]
- ldr r0, _0809232C @ =sMovingMonOrigBoxPos
- strb r1, [r0]
- ldr r0, _08092330 @ =sCanOnlyMove
- strb r1, [r0]
- bl sub_8092B50
- bl sub_8094AD8
- ldr r2, _08092334 @ =sPSSData
- ldr r0, [r2]
- ldr r1, _08092338 @ =0x00000cd2
- adds r0, r1
- movs r3, 0
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, [r2]
- ldr r1, _0809233C @ =0x000021ef
- adds r0, r1
- strb r3, [r0]
- bl sub_8093A10
- pop {r0}
- bx r0
- .align 2, 0
-_0809231C: .4byte sBoxCursorArea
-_08092320: .4byte sBoxCursorPosition
-_08092324: .4byte sIsMonBeingMoved
-_08092328: .4byte sMovingMonOrigBoxId
-_0809232C: .4byte sMovingMonOrigBoxPos
-_08092330: .4byte sCanOnlyMove
-_08092334: .4byte sPSSData
-_08092338: .4byte 0x00000cd2
-_0809233C: .4byte 0x000021ef
- thumb_func_end sub_80922C0
-
- thumb_func_start sub_8092340
-sub_8092340: @ 8092340
- push {lr}
- bl sub_8094AD8
- bl sub_8093AAC
- ldr r3, _08092380 @ =sPSSData
- ldr r0, [r3]
- ldr r1, _08092384 @ =0x00000cd2
- adds r0, r1
- movs r2, 0
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, [r3]
- ldr r1, _08092388 @ =0x000021ef
- adds r0, r1
- strb r2, [r0]
- ldr r0, _0809238C @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _0809237A
- ldr r0, [r3]
- ldr r1, _08092390 @ =0x000020a0
- adds r0, r1
- ldr r1, _08092394 @ =gUnknown_20397BC
- movs r2, 0x64
- bl memcpy
- bl sub_8090070
-_0809237A:
- pop {r0}
- bx r0
- .align 2, 0
-_08092380: .4byte sPSSData
-_08092384: .4byte 0x00000cd2
-_08092388: .4byte 0x000021ef
-_0809238C: .4byte sIsMonBeingMoved
-_08092390: .4byte 0x000020a0
-_08092394: .4byte gUnknown_20397BC
- thumb_func_end sub_8092340
-
- thumb_func_start sub_8092398
-sub_8092398: @ 8092398
- push {r4-r6,lr}
- adds r4, r2, 0
- adds r6, r3, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r0, 0x4
- bhi _08092450
- lsls r0, 2
- ldr r1, _080923B4 @ =_080923B8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080923B4: .4byte _080923B8
- .align 2, 0
-_080923B8:
- .4byte _080923CC
- .4byte _080923FA
- .4byte _08092422
- .4byte _0809242A
- .4byte _08092448
-_080923CC:
- adds r0, r5, 0
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 3
- adds r1, 0x64
- strh r1, [r4]
- adds r0, r5, 0
- movs r1, 0x6
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 3
- adds r1, 0x20
- strh r1, [r6]
- b _08092450
-_080923FA:
- cmp r5, 0
- bne _08092406
- movs r0, 0x68
- strh r0, [r4]
- movs r0, 0x34
- b _0809244E
-_08092406:
- cmp r5, 0x6
- bne _08092412
- movs r0, 0x98
- strh r0, [r4]
- movs r0, 0x84
- b _0809244E
-_08092412:
- movs r0, 0x98
- strh r0, [r4]
- subs r1, r5, 0x1
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, 0x4
- b _0809244E
-_08092422:
- movs r0, 0xA2
- strh r0, [r4]
- movs r0, 0xC
- b _0809244E
-_0809242A:
- ldr r0, _08092444 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- movs r1, 0xE
- cmp r0, 0
- beq _08092436
- movs r1, 0x8
-_08092436:
- strh r1, [r6]
- movs r0, 0x58
- muls r0, r5
- adds r0, 0x78
- strh r0, [r4]
- b _08092450
- .align 2, 0
-_08092444: .4byte sIsMonBeingMoved
-_08092448:
- movs r0, 0xA0
- strh r0, [r4]
- movs r0, 0x60
-_0809244E:
- strh r0, [r6]
-_08092450:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8092398
-
- thumb_func_start sub_8092458
-sub_8092458: @ 8092458
- push {lr}
- ldr r0, _08092480 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _0809248C
- cmp r0, 0x1
- bne _080924A0
- ldr r0, _08092484 @ =sBoxCursorPosition
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08092488 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- b _08092496
- .align 2, 0
-_08092480: .4byte sBoxCursorArea
-_08092484: .4byte sBoxCursorPosition
-_08092488: .4byte gPlayerParty
-_0809248C:
- ldr r0, _0809249C @ =sBoxCursorPosition
- ldrb r0, [r0]
- movs r1, 0xB
- bl GetBoxMonDataFromSelectedBox
-_08092496:
- lsls r0, 16
- lsrs r0, 16
- b _080924A2
- .align 2, 0
-_0809249C: .4byte sBoxCursorPosition
-_080924A0:
- movs r0, 0
-_080924A2:
- pop {r1}
- bx r1
- thumb_func_end sub_8092458
-
- thumb_func_start sub_80924A8
-sub_80924A8: @ 80924A8
- push {r4-r7,lr}
- ldr r7, _080924C4 @ =sPSSData
- ldr r5, [r7]
- ldr r0, _080924C8 @ =0x00000ccc
- adds r1, r5, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _080924D6
- ldrb r0, [r5, 0x1]
- cmp r0, 0x3
- beq _080924CC
- movs r0, 0
- b _080925F4
- .align 2, 0
-_080924C4: .4byte sPSSData
-_080924C8: .4byte 0x00000ccc
-_080924CC:
- bl sub_809610C
- lsls r0, 24
- lsrs r0, 24
- b _080925F4
-_080924D6:
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- beq _080925D4
- ldr r1, _080925C4 @ =0x00000cb8
- adds r4, r5, r1
- movs r2, 0xCC
- lsls r2, 4
- adds r1, r5, r2
- ldr r0, [r4]
- ldr r1, [r1]
- adds r0, r1
- str r0, [r4]
- ldr r0, _080925C8 @ =0x00000cbc
- adds r3, r5, r0
- adds r2, 0x4
- adds r1, r5, r2
- ldr r0, [r3]
- ldr r1, [r1]
- adds r0, r1
- str r0, [r3]
- movs r6, 0xCB
- lsls r6, 4
- adds r1, r5, r6
- ldr r2, [r1]
- ldr r0, [r4]
- asrs r0, 8
- strh r0, [r2, 0x20]
- ldr r2, [r1]
- ldr r0, [r3]
- asrs r0, 8
- strh r0, [r2, 0x22]
- ldr r1, [r1]
- ldrh r2, [r1, 0x20]
- movs r3, 0x20
- ldrsh r0, [r1, r3]
- movs r3, 0x80
- lsls r3, 1
- cmp r0, r3
- ble _08092534
- ldr r4, _080925CC @ =0xffffff00
- adds r0, r2, r4
- lsls r0, 16
- asrs r0, 16
- adds r0, 0x40
- strh r0, [r1, 0x20]
-_08092534:
- ldr r0, [r7]
- adds r0, r6
- ldr r1, [r0]
- ldrh r2, [r1, 0x20]
- movs r4, 0x20
- ldrsh r0, [r1, r4]
- cmp r0, 0x3F
- bgt _08092550
- movs r0, 0x40
- subs r0, r2
- lsls r0, 16
- asrs r0, 16
- subs r0, r3, r0
- strh r0, [r1, 0x20]
-_08092550:
- ldr r0, [r7]
- adds r0, r6
- ldr r1, [r0]
- ldrh r2, [r1, 0x22]
- movs r3, 0x22
- ldrsh r0, [r1, r3]
- cmp r0, 0xB0
- ble _0809256C
- adds r0, r2, 0
- subs r0, 0xB0
- lsls r0, 16
- asrs r0, 16
- subs r0, 0x10
- strh r0, [r1, 0x22]
-_0809256C:
- ldr r0, [r7]
- adds r0, r6
- ldr r2, [r0]
- ldrh r3, [r2, 0x22]
- movs r4, 0x22
- ldrsh r0, [r2, r4]
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- bge _0809258C
- subs r0, r1, r3
- movs r1, 0xB0
- lsls r0, 16
- asrs r0, 16
- subs r1, r0
- strh r1, [r2, 0x22]
-_0809258C:
- ldr r0, [r7]
- ldr r2, _080925D0 @ =0x00000cd3
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0
- beq _080925F2
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _080925F2
- ldr r0, [r7]
- adds r0, r6
- ldr r2, [r0]
- adds r2, 0x3F
- ldrb r3, [r2]
- lsrs r1, r3, 1
- movs r0, 0x1
- eors r1, r0
- ands r1, r0
- lsls r1, 1
- movs r0, 0x3
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- b _080925F2
- .align 2, 0
-_080925C4: .4byte 0x00000cb8
-_080925C8: .4byte 0x00000cbc
-_080925CC: .4byte 0xffffff00
-_080925D0: .4byte 0x00000cd3
-_080925D4:
- movs r3, 0xCB
- lsls r3, 4
- adds r2, r5, r3
- ldr r1, [r2]
- ldr r4, _080925FC @ =0x00000cc8
- adds r0, r5, r4
- ldrh r0, [r0]
- strh r0, [r1, 0x20]
- ldr r1, [r2]
- ldr r2, _08092600 @ =0x00000cca
- adds r0, r5, r2
- ldrh r0, [r0]
- strh r0, [r1, 0x22]
- bl sub_80929B0
-_080925F2:
- movs r0, 0x1
-_080925F4:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080925FC: .4byte 0x00000cc8
-_08092600: .4byte 0x00000cca
- thumb_func_end sub_80924A8
-
- thumb_func_start sub_8092604
-sub_8092604: @ 8092604
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- mov r6, sp
- adds r6, 0x2
- adds r0, r4, 0
- adds r1, r5, 0
- mov r2, sp
- adds r3, r6, 0
- bl sub_8092398
- ldr r1, _08092654 @ =sPSSData
- ldr r0, [r1]
- movs r2, 0xCD
- lsls r2, 4
- adds r0, r2
- strb r4, [r0]
- ldr r0, [r1]
- ldr r3, _08092658 @ =0x00000cd1
- adds r0, r3
- strb r5, [r0]
- ldr r1, [r1]
- mov r0, sp
- ldrh r2, [r0]
- subs r3, 0x9
- adds r0, r1, r3
- strh r2, [r0]
- ldrh r0, [r6]
- ldr r2, _0809265C @ =0x00000cca
- adds r1, r2
- strh r0, [r1]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08092654: .4byte sPSSData
-_08092658: .4byte 0x00000cd1
-_0809265C: .4byte 0x00000cca
- thumb_func_end sub_8092604
-
- thumb_func_start sub_8092660
-sub_8092660: @ 8092660
- push {r4-r7,lr}
- ldr r0, _0809267C @ =sPSSData
- ldr r2, [r0]
- ldr r3, _08092680 @ =0x00000cce
- adds r1, r2, r3
- ldrh r1, [r1]
- adds r4, r0, 0
- cmp r1, 0
- beq _08092688
- ldr r0, _08092684 @ =0x00000ccc
- adds r1, r2, r0
- movs r0, 0xC
- b _0809268E
- .align 2, 0
-_0809267C: .4byte sPSSData
-_08092680: .4byte 0x00000cce
-_08092684: .4byte 0x00000ccc
-_08092688:
- ldr r3, _080926D4 @ =0x00000ccc
- adds r1, r2, r3
- movs r0, 0x6
-_0809268E:
- strh r0, [r1]
- ldr r1, [r4]
- ldr r0, _080926D8 @ =0x00000cd3
- adds r2, r1, r0
- ldrb r0, [r2]
- cmp r0, 0
- beq _080926A6
- ldr r3, _080926D4 @ =0x00000ccc
- adds r0, r1, r3
- ldrh r0, [r0]
- lsrs r0, 1
- strb r0, [r2]
-_080926A6:
- ldr r2, [r4]
- ldr r1, _080926DC @ =0x00000cce
- adds r0, r2, r1
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080926E4
- cmp r1, 0x1
- beq _08092700
- ldr r3, _080926E0 @ =0x00000cca
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x22
- ldrsh r0, [r0, r2]
- b _08092716
- .align 2, 0
-_080926D4: .4byte 0x00000ccc
-_080926D8: .4byte 0x00000cd3
-_080926DC: .4byte 0x00000cce
-_080926E0: .4byte 0x00000cca
-_080926E4:
- ldr r3, _080926FC @ =0x00000cca
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x22
- ldrsh r0, [r0, r2]
- adds r0, 0xC0
- b _08092716
- .align 2, 0
-_080926FC: .4byte 0x00000cca
-_08092700:
- ldr r3, _08092744 @ =0x00000cca
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x22
- ldrsh r0, [r0, r2]
- subs r0, 0xC0
-_08092716:
- subs r7, r1, r0
- ldr r2, [r4]
- ldr r3, _08092748 @ =0x00000ccf
- adds r0, r2, r3
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08092750
- cmp r1, 0x1
- beq _0809276C
- ldr r1, _0809274C @ =0x00000cc8
- adds r0, r2, r1
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x20
- ldrsh r0, [r0, r2]
- b _08092782
- .align 2, 0
-_08092744: .4byte 0x00000cca
-_08092748: .4byte 0x00000ccf
-_0809274C: .4byte 0x00000cc8
-_08092750:
- ldr r3, _08092768 @ =0x00000cc8
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x20
- ldrsh r0, [r0, r2]
- adds r0, 0xC0
- b _08092782
- .align 2, 0
-_08092768: .4byte 0x00000cc8
-_0809276C:
- ldr r3, _080927D4 @ =0x00000cc8
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x20
- ldrsh r0, [r0, r2]
- subs r0, 0xC0
-_08092782:
- subs r0, r1, r0
- lsls r7, 8
- lsls r0, 8
- ldr r4, [r4]
- movs r3, 0xCC
- lsls r3, 4
- adds r6, r4, r3
- ldr r1, _080927D8 @ =0x00000ccc
- adds r5, r4, r1
- ldrh r1, [r5]
- bl __divsi3
- str r0, [r6]
- ldr r2, _080927DC @ =0x00000cc4
- adds r6, r4, r2
- ldrh r1, [r5]
- adds r0, r7, 0
- bl __divsi3
- str r0, [r6]
- ldr r3, _080927E0 @ =0x00000cb8
- adds r2, r4, r3
- movs r0, 0xCB
- lsls r0, 4
- adds r1, r4, r0
- ldr r0, [r1]
- movs r3, 0x20
- ldrsh r0, [r0, r3]
- lsls r0, 8
- str r0, [r2]
- ldr r0, _080927E4 @ =0x00000cbc
- adds r4, r0
- ldr r0, [r1]
- movs r1, 0x22
- ldrsh r0, [r0, r1]
- lsls r0, 8
- str r0, [r4]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080927D4: .4byte 0x00000cc8
-_080927D8: .4byte 0x00000ccc
-_080927DC: .4byte 0x00000cc4
-_080927E0: .4byte 0x00000cb8
-_080927E4: .4byte 0x00000cbc
- thumb_func_end sub_8092660
-
- thumb_func_start sub_80927E8
-sub_80927E8: @ 80927E8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_8092604
- bl sub_8092660
- ldr r5, _0809282C @ =sPSSData
- ldr r1, [r5]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x3
- beq _08092838
- ldr r2, _08092830 @ =0x000021ef
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092852
- ldr r0, _08092834 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092852
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
- b _08092852
- .align 2, 0
-_0809282C: .4byte sPSSData
-_08092830: .4byte 0x000021ef
-_08092834: .4byte sIsMonBeingMoved
-_08092838:
- bl sub_809616C
- lsls r0, 24
- cmp r0, 0
- bne _08092852
- ldr r0, [r5]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
-_08092852:
- ldr r0, _08092874 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _080928AC
- ldr r0, _08092878 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _08092880
- ldr r0, _0809287C @ =sBoxCursorPosition
- ldrb r1, [r0]
- movs r0, 0
- bl sub_8095D44
- b _0809288E
- .align 2, 0
-_08092874: .4byte sPSSData
-_08092878: .4byte sBoxCursorArea
-_0809287C: .4byte sBoxCursorPosition
-_08092880:
- cmp r0, 0x1
- bne _0809288E
- ldr r0, _0809289C @ =sBoxCursorPosition
- ldrb r1, [r0]
- movs r0, 0x1
- bl sub_8095D44
-_0809288E:
- cmp r4, 0
- bne _080928A0
- movs r0, 0
- adds r1, r6, 0
- bl sub_8095C84
- b _080928AC
- .align 2, 0
-_0809289C: .4byte sBoxCursorPosition
-_080928A0:
- cmp r4, 0x1
- bne _080928D8
- movs r0, 0x1
- adds r1, r6, 0
- bl sub_8095C84
-_080928AC:
- cmp r4, 0x1
- bne _080928D8
- ldr r0, _08092920 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- beq _080928D8
- ldr r1, _08092924 @ =sPSSData
- ldr r0, [r1]
- ldr r2, _08092928 @ =0x00000cd2
- adds r0, r2
- strb r4, [r0]
- ldr r0, [r1]
- ldr r1, _0809292C @ =0x00000cb4
- adds r0, r1
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
-_080928D8:
- cmp r4, 0
- beq _08092930
- cmp r4, 0
- blt _080929A0
- cmp r4, 0x3
- bgt _080929A0
- ldr r5, _08092924 @ =sPSSData
- ldr r0, [r5]
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r2
- ldr r4, [r0]
- ldrb r1, [r4, 0x5]
- movs r2, 0xD
- negs r2, r2
- adds r0, r2, 0
- ands r0, r1
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r4, 0x5]
- ldr r0, [r5]
- ldr r4, _0809292C @ =0x00000cb4
- adds r0, r4
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- orrs r0, r3
- strb r0, [r1]
- ldr r0, [r5]
- adds r0, r4
- ldr r1, [r0]
- ldrb r0, [r1, 0x5]
- ands r2, r0
- orrs r2, r3
- strb r2, [r1, 0x5]
- b _080929A0
- .align 2, 0
-_08092920: .4byte sBoxCursorArea
-_08092924: .4byte sPSSData
-_08092928: .4byte 0x00000cd2
-_0809292C: .4byte 0x00000cb4
-_08092930:
- ldr r3, _08092964 @ =sPSSData
- ldr r1, [r3]
- ldr r2, _08092968 @ =0x000021ef
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _08092970
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r2, [r0]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r3]
- ldr r1, _0809296C @ =0x00000cb4
- adds r0, r1
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- b _080929A0
- .align 2, 0
-_08092964: .4byte sPSSData
-_08092968: .4byte 0x000021ef
-_0809296C: .4byte 0x00000cb4
-_08092970:
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r2, [r0]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, _080929A8 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _080929A0
- ldr r0, _080929AC @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080929A0
- movs r0, 0x2
- bl sub_8091184
-_080929A0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080929A8: .4byte sBoxCursorArea
-_080929AC: .4byte sIsMonBeingMoved
- thumb_func_end sub_80927E8
-
- thumb_func_start sub_80929B0
-sub_80929B0: @ 80929B0
- push {r4,lr}
- ldr r1, _080929F4 @ =sBoxCursorArea
- ldr r4, _080929F8 @ =sPSSData
- ldr r2, [r4]
- movs r3, 0xCD
- lsls r3, 4
- adds r0, r2, r3
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r1, _080929FC @ =sBoxCursorPosition
- adds r3, 0x1
- adds r0, r2, r3
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2, 0x1]
- cmp r0, 0x3
- beq _08092A08
- ldr r1, _08092A00 @ =0x000021ef
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092A22
- ldr r0, _08092A04 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092A22
- subs r3, 0x21
- adds r0, r2, r3
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
- b _08092A22
- .align 2, 0
-_080929F4: .4byte sBoxCursorArea
-_080929F8: .4byte sPSSData
-_080929FC: .4byte sBoxCursorPosition
-_08092A00: .4byte 0x000021ef
-_08092A04: .4byte sIsMonBeingMoved
-_08092A08:
- bl sub_809616C
- lsls r0, 24
- cmp r0, 0
- bne _08092A22
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
-_08092A22:
- bl sub_8093A10
- ldr r0, _08092A3C @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- beq _08092A52
- cmp r0, 0x1
- bgt _08092A40
- cmp r0, 0
- beq _08092A74
- b _08092AD0
- .align 2, 0
-_08092A3C: .4byte sBoxCursorArea
-_08092A40:
- cmp r0, 0x2
- beq _08092A4A
- cmp r0, 0x3
- bne _08092AD0
- b _08092A62
-_08092A4A:
- movs r0, 0x1
- bl sub_80920FC
- b _08092AD0
-_08092A52:
- ldr r0, _08092A6C @ =sPSSData
- ldr r0, [r0]
- ldr r2, _08092A70 @ =0x00000cb4
- adds r0, r2
- ldr r0, [r0]
- adds r0, 0x43
- movs r1, 0xD
- strb r1, [r0]
-_08092A62:
- movs r0, 0x1
- bl sub_8091184
- b _08092AD0
- .align 2, 0
-_08092A6C: .4byte sPSSData
-_08092A70: .4byte 0x00000cb4
-_08092A74:
- ldr r4, _08092AD8 @ =sPSSData
- ldr r1, [r4]
- ldr r3, _08092ADC @ =0x000021ef
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092AD0
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r3, [r0]
- ldrb r1, [r3, 0x5]
- movs r2, 0xD
- negs r2, r2
- adds r0, r2, 0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3, 0x5]
- ldr r0, [r4]
- ldr r3, _08092AE0 @ =0x00000cb4
- adds r0, r3
- ldr r1, [r0]
- ldrb r0, [r1, 0x5]
- ands r2, r0
- movs r0, 0x8
- orrs r2, r0
- strb r2, [r1, 0x5]
- ldr r0, [r4]
- adds r0, r3
- ldr r0, [r0]
- adds r0, 0x43
- movs r1, 0x15
- strb r1, [r0]
- ldr r0, [r4]
- adds r0, r3
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- movs r0, 0x2
- bl sub_8091184
-_08092AD0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08092AD8: .4byte sPSSData
-_08092ADC: .4byte 0x000021ef
-_08092AE0: .4byte 0x00000cb4
- thumb_func_end sub_80929B0
-
- thumb_func_start sub_8092AE4
-sub_8092AE4: @ 8092AE4
- push {lr}
- ldr r0, _08092AF4 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092AF8
- movs r3, 0
- b _08092B06
- .align 2, 0
-_08092AF4: .4byte sIsMonBeingMoved
-_08092AF8:
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x5
- bls _08092B06
- movs r3, 0x5
-_08092B06:
- ldr r0, _08092B34 @ =sPSSData
- ldr r2, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r2, r1
- ldr r0, [r0]
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08092B26
- ldr r0, _08092B38 @ =0x00000cd3
- adds r1, r2, r0
- movs r0, 0x1
- strb r0, [r1]
-_08092B26:
- movs r0, 0x1
- adds r1, r3, 0
- bl sub_80927E8
- pop {r0}
- bx r0
- .align 2, 0
-_08092B34: .4byte sPSSData
-_08092B38: .4byte 0x00000cd3
- thumb_func_end sub_8092AE4
-
- thumb_func_start sub_8092B3C
-sub_8092B3C: @ 8092B3C
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_80927E8
- pop {r0}
- bx r0
- thumb_func_end sub_8092B3C
-
- thumb_func_start sub_8092B50
-sub_8092B50: @ 8092B50
- ldr r1, _08092B58 @ =gUnknown_2039826
- movs r0, 0
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08092B58: .4byte gUnknown_2039826
- thumb_func_end sub_8092B50
-
- thumb_func_start sub_8092B5C
-sub_8092B5C: @ 8092B5C
- ldr r0, _08092B68 @ =gUnknown_2039826
- ldr r1, _08092B6C @ =sBoxCursorPosition
- ldrb r1, [r1]
- strb r1, [r0]
- bx lr
- .align 2, 0
-_08092B68: .4byte gUnknown_2039826
-_08092B6C: .4byte sBoxCursorPosition
- thumb_func_end sub_8092B5C
-
- thumb_func_start sub_8092B70
-sub_8092B70: @ 8092B70
- ldr r0, _08092B78 @ =gUnknown_2039826
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08092B78: .4byte gUnknown_2039826
- thumb_func_end sub_8092B70
-
- thumb_func_start sub_8092B7C
-sub_8092B7C: @ 8092B7C
- lsls r0, 24
- ldr r1, _08092B9C @ =sPSSData
- ldr r1, [r1]
- ldr r2, _08092BA0 @ =0x00000d88
- adds r3, r1, r2
- ldr r2, _08092BA4 @ =gUnknown_83D346C
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, _08092BA8 @ =0x00000d8c
- adds r1, r0
- movs r0, 0
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08092B9C: .4byte sPSSData
-_08092BA0: .4byte 0x00000d88
-_08092BA4: .4byte gUnknown_83D346C
-_08092BA8: .4byte 0x00000d8c
- thumb_func_end sub_8092B7C
-
- thumb_func_start sub_8092BAC
-sub_8092BAC: @ 8092BAC
- push {lr}
- lsls r0, 24
- cmp r0, 0
- bne _08092BCC
- ldr r0, _08092BC0 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _08092BC4 @ =0x00000d88
- adds r1, r2
- ldr r2, _08092BC8 @ =sub_8092E00
- b _08092BD6
- .align 2, 0
-_08092BC0: .4byte sPSSData
-_08092BC4: .4byte 0x00000d88
-_08092BC8: .4byte sub_8092E00
-_08092BCC:
- ldr r0, _08092BE8 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _08092BEC @ =0x00000d88
- adds r1, r2
- ldr r2, _08092BF0 @ =sub_8092E10
-_08092BD6:
- str r2, [r1]
- ldr r0, [r0]
- ldr r1, _08092BF4 @ =0x00000d8c
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08092BE8: .4byte sPSSData
-_08092BEC: .4byte 0x00000d88
-_08092BF0: .4byte sub_8092E10
-_08092BF4: .4byte 0x00000d8c
- thumb_func_end sub_8092BAC
-
- thumb_func_start sub_8092BF8
-sub_8092BF8: @ 8092BF8
- push {lr}
- ldr r0, _08092C10 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08092C14 @ =0x00000d88
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08092C10: .4byte sPSSData
-_08092C14: .4byte 0x00000d88
- thumb_func_end sub_8092BF8
-
- thumb_func_start sub_8092C18
-sub_8092C18: @ 8092C18
- push {r4,r5,lr}
- ldr r4, _08092C34 @ =sPSSData
- ldr r1, [r4]
- ldr r5, _08092C38 @ =0x00000d8c
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08092C68
- cmp r0, 0x1
- bgt _08092C3C
- cmp r0, 0
- beq _08092C46
- b _08092C9C
- .align 2, 0
-_08092C34: .4byte sPSSData
-_08092C38: .4byte 0x00000d8c
-_08092C3C:
- cmp r0, 0x2
- beq _08092C88
- cmp r0, 0x3
- beq _08092C4E
- b _08092C9C
-_08092C46:
- ldr r0, _08092C54 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _08092C58
-_08092C4E:
- movs r0, 0
- b _08092C9E
- .align 2, 0
-_08092C54: .4byte sIsMonBeingMoved
-_08092C58:
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- b _08092C92
-_08092C68:
- bl sub_8092E20
- lsls r0, 24
- cmp r0, 0
- bne _08092C9C
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x3
- bl StartSpriteAnim
- bl sub_8092E80
- b _08092C92
-_08092C88:
- bl sub_8092E54
- lsls r0, 24
- cmp r0, 0
- bne _08092C9C
-_08092C92:
- ldr r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08092C9C:
- movs r0, 0x1
-_08092C9E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8092C18
-
- thumb_func_start sub_8092CA4
-sub_8092CA4: @ 8092CA4
- push {r4,r5,lr}
- ldr r4, _08092CC0 @ =sPSSData
- ldr r0, [r4]
- ldr r5, _08092CC4 @ =0x00000d8c
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08092CEE
- cmp r0, 0x1
- bgt _08092CC8
- cmp r0, 0
- beq _08092CCE
- b _08092D18
- .align 2, 0
-_08092CC0: .4byte sPSSData
-_08092CC4: .4byte 0x00000d8c
-_08092CC8:
- cmp r0, 0x2
- beq _08092D14
- b _08092D18
-_08092CCE:
- bl sub_8092E20
- lsls r0, 24
- cmp r0, 0
- bne _08092D18
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- bl sub_8092EF4
- b _08092D08
-_08092CEE:
- bl sub_8092E54
- lsls r0, 24
- cmp r0, 0
- bne _08092D18
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
-_08092D08:
- ldr r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08092D18
-_08092D14:
- movs r0, 0
- b _08092D1A
-_08092D18:
- movs r0, 0x1
-_08092D1A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8092CA4
-
- thumb_func_start sub_8092D20
-sub_8092D20: @ 8092D20
- push {r4,r5,lr}
- ldr r4, _08092D3C @ =sPSSData
- ldr r1, [r4]
- ldr r5, _08092D40 @ =0x00000d8c
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08092DB4
- cmp r0, 0x1
- bgt _08092D44
- cmp r0, 0
- beq _08092D4A
- b _08092DF8
- .align 2, 0
-_08092D3C: .4byte sPSSData
-_08092D40: .4byte 0x00000d8c
-_08092D44:
- cmp r0, 0x2
- beq _08092DF4
- b _08092DF8
-_08092D4A:
- ldr r0, _08092D64 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08092D6C
- cmp r0, 0x1
- bne _08092DF4
- ldr r0, _08092D68 @ =0x00000d8d
- adds r1, r0
- movs r0, 0xE
- b _08092D76
- .align 2, 0
-_08092D64: .4byte sBoxCursorArea
-_08092D68: .4byte 0x00000d8d
-_08092D6C:
- bl StorageGetCurrentBox
- ldr r1, [r4]
- ldr r2, _08092DA4 @ =0x00000d8d
- adds r1, r2
-_08092D76:
- strb r0, [r1]
- ldr r4, _08092DA8 @ =sPSSData
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- ldr r0, [r4]
- ldr r2, _08092DA4 @ =0x00000d8d
- adds r0, r2
- ldrb r0, [r0]
- ldr r1, _08092DAC @ =sBoxCursorPosition
- ldrb r1, [r1]
- bl sub_8090E08
- ldr r1, [r4]
- ldr r0, _08092DB0 @ =0x00000d8c
- adds r1, r0
- b _08092DE2
- .align 2, 0
-_08092DA4: .4byte 0x00000d8d
-_08092DA8: .4byte sPSSData
-_08092DAC: .4byte sBoxCursorPosition
-_08092DB0: .4byte 0x00000d8c
-_08092DB4:
- bl sub_8090E74
- lsls r0, 24
- cmp r0, 0
- bne _08092DF8
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x3
- bl StartSpriteAnim
- ldr r0, [r4]
- ldr r2, _08092DEC @ =0x00000d8d
- adds r0, r2
- ldrb r0, [r0]
- ldr r1, _08092DF0 @ =sBoxCursorPosition
- ldrb r1, [r1]
- bl diegohint1
- ldr r1, [r4]
- adds r1, r5
-_08092DE2:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08092DF8
- .align 2, 0
-_08092DEC: .4byte 0x00000d8d
-_08092DF0: .4byte sBoxCursorPosition
-_08092DF4:
- movs r0, 0
- b _08092DFA
-_08092DF8:
- movs r0, 0x1
-_08092DFA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8092D20
-
- thumb_func_start sub_8092E00
-sub_8092E00: @ 8092E00
- push {lr}
- bl sub_8092E20
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8092E00
-
- thumb_func_start sub_8092E10
-sub_8092E10: @ 8092E10
- push {lr}
- bl sub_8092E54
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8092E10
-
- thumb_func_start sub_8092E20
-sub_8092E20: @ 8092E20
- push {lr}
- ldr r0, _08092E44 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r1, [r0]
- movs r2, 0x26
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _08092E3A
- cmp r0, 0x8
- beq _08092E48
-_08092E3A:
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _08092E4C
- .align 2, 0
-_08092E44: .4byte sPSSData
-_08092E48:
- movs r0, 0
- b _08092E4E
-_08092E4C:
- movs r0, 0x1
-_08092E4E:
- pop {r1}
- bx r1
- thumb_func_end sub_8092E20
-
- thumb_func_start sub_8092E54
-sub_8092E54: @ 8092E54
- push {lr}
- ldr r0, _08092E74 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r1, [r0]
- movs r2, 0x26
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _08092E78
- ldrh r0, [r1, 0x26]
- subs r0, 0x1
- strh r0, [r1, 0x26]
- movs r0, 0x1
- b _08092E7A
- .align 2, 0
-_08092E74: .4byte sPSSData
-_08092E78:
- movs r0, 0
-_08092E7A:
- pop {r1}
- bx r1
- thumb_func_end sub_8092E54
-
- thumb_func_start sub_8092E80
-sub_8092E80: @ 8092E80
- push {r4,lr}
- ldr r0, _08092EA8 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08092EB0
- cmp r0, 0x1
- bne _08092EDC
- ldr r4, _08092EAC @ =sBoxCursorPosition
- ldrb r1, [r4]
- movs r0, 0xE
- bl sub_8092F60
- ldrb r1, [r4]
- movs r0, 0
- bl sub_8090CC0
- b _08092ED6
- .align 2, 0
-_08092EA8: .4byte sBoxCursorArea
-_08092EAC: .4byte sBoxCursorPosition
-_08092EB0:
- ldr r0, _08092EE4 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08092EE8 @ =0x000021ef
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092ED6
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08092EEC @ =sBoxCursorPosition
- ldrb r1, [r4]
- bl sub_8092F60
- ldrb r1, [r4]
- movs r0, 0x1
- bl sub_8090CC0
-_08092ED6:
- ldr r1, _08092EF0 @ =sIsMonBeingMoved
- movs r0, 0x1
- strb r0, [r1]
-_08092EDC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08092EE4: .4byte sPSSData
-_08092EE8: .4byte 0x000021ef
-_08092EEC: .4byte sBoxCursorPosition
-_08092EF0: .4byte sIsMonBeingMoved
- thumb_func_end sub_8092E80
-
- thumb_func_start sub_8092EF4
-sub_8092EF4: @ 8092EF4
- push {r4,r5,lr}
- ldr r0, _08092F1C @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08092F24
- cmp r0, 0x1
- bne _08092F46
- ldr r4, _08092F20 @ =sBoxCursorPosition
- ldrb r1, [r4]
- movs r0, 0xE
- bl diegohint2
- ldrb r1, [r4]
- movs r0, 0xE
- bl sub_8090D58
- b _08092F40
- .align 2, 0
-_08092F1C: .4byte sBoxCursorArea
-_08092F20: .4byte sBoxCursorPosition
-_08092F24:
- bl StorageGetCurrentBox
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _08092F4C @ =sBoxCursorPosition
- ldrb r1, [r5]
- adds r0, r4, 0
- bl diegohint2
- ldrb r1, [r5]
- adds r0, r4, 0
- bl sub_8090D58
-_08092F40:
- ldr r1, _08092F50 @ =sIsMonBeingMoved
- movs r0, 0
- strb r0, [r1]
-_08092F46:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08092F4C: .4byte sBoxCursorPosition
-_08092F50: .4byte sIsMonBeingMoved
- thumb_func_end sub_8092EF4
-
- thumb_func_start sub_8092F54
-sub_8092F54: @ 8092F54
- push {lr}
- bl sub_8093A10
- pop {r0}
- bx r0
- thumb_func_end sub_8092F54
-
- thumb_func_start sub_8092F60
-sub_8092F60: @ 8092F60
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r4, 0xE
- bne _08092F9C
- ldr r0, _08092F8C @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08092F90 @ =0x000020a0
- adds r0, r1
- ldr r3, _08092F94 @ =gPlayerParty
- ldr r1, _08092F98 @ =sBoxCursorPosition
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r1, 0x64
- muls r1, r2
- adds r1, r3
- movs r2, 0x64
- bl memcpy
- b _08092FAC
- .align 2, 0
-_08092F8C: .4byte sPSSData
-_08092F90: .4byte 0x000020a0
-_08092F94: .4byte gPlayerParty
-_08092F98: .4byte sBoxCursorPosition
-_08092F9C:
- ldr r0, _08092FC4 @ =sPSSData
- ldr r2, [r0]
- ldr r0, _08092FC8 @ =0x000020a0
- adds r2, r0
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_808BCF0
-_08092FAC:
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8093030
- ldr r0, _08092FCC @ =sMovingMonOrigBoxId
- strb r4, [r0]
- ldr r0, _08092FD0 @ =sMovingMonOrigBoxPos
- strb r5, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08092FC4: .4byte sPSSData
-_08092FC8: .4byte 0x000020a0
-_08092FCC: .4byte sMovingMonOrigBoxId
-_08092FD0: .4byte sMovingMonOrigBoxPos
- thumb_func_end sub_8092F60
-
- thumb_func_start diegohint2
-diegohint2: @ 8092FD4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- cmp r6, 0xE
- bne _08093008
- ldr r1, _08092FFC @ =gPlayerParty
- movs r0, 0x64
- muls r0, r7
- adds r0, r1
- ldr r1, _08093000 @ =sPSSData
- ldr r1, [r1]
- ldr r2, _08093004 @ =0x000020a0
- adds r1, r2
- movs r2, 0x64
- bl memcpy
- b _08093020
- .align 2, 0
-_08092FFC: .4byte gPlayerParty
-_08093000: .4byte sPSSData
-_08093004: .4byte 0x000020a0
-_08093008:
- ldr r5, _08093028 @ =sPSSData
- ldr r0, [r5]
- ldr r4, _0809302C @ =0x000020a0
- adds r0, r4
- bl BoxMonRestorePP
- ldr r2, [r5]
- adds r2, r4
- adds r0, r6, 0
- adds r1, r7, 0
- bl CopyBoxMonFromAnyBox
-_08093020:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08093028: .4byte sPSSData
-_0809302C: .4byte 0x000020a0
- thumb_func_end diegohint2
-
- thumb_func_start sub_8093030
-sub_8093030: @ 8093030
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r0, 0xE
- bne _08093050
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0809304C @ =gPlayerParty
- adds r0, r1
- bl ZeroMonData
- b _08093054
- .align 2, 0
-_0809304C: .4byte gPlayerParty
-_08093050:
- bl sub_808BCB4
-_08093054:
- pop {r0}
- bx r0
- thumb_func_end sub_8093030
-
- thumb_func_start diegohint1
-diegohint1: @ 8093058
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- cmp r6, 0xE
- bne _0809308C
- ldr r0, _08093080 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08093084 @ =0x00002104
- adds r0, r1
- ldr r2, _08093088 @ =gPlayerParty
- movs r1, 0x64
- muls r1, r7
- adds r1, r2
- movs r2, 0x64
- bl memcpy
- b _0809309C
- .align 2, 0
-_08093080: .4byte sPSSData
-_08093084: .4byte 0x00002104
-_08093088: .4byte gPlayerParty
-_0809308C:
- ldr r0, _080930D0 @ =sPSSData
- ldr r2, [r0]
- ldr r0, _080930D4 @ =0x00002104
- adds r2, r0
- adds r0, r6, 0
- adds r1, r7, 0
- bl sub_808BCF0
-_0809309C:
- adds r0, r6, 0
- adds r1, r7, 0
- bl diegohint2
- ldr r5, _080930D0 @ =sPSSData
- ldr r1, [r5]
- ldr r4, _080930D8 @ =0x000020a0
- adds r0, r1, r4
- ldr r2, _080930D4 @ =0x00002104
- adds r1, r2
- movs r2, 0x64
- bl memcpy
- ldr r0, [r5]
- adds r0, r4
- movs r1, 0
- bl sub_8093AD0
- ldr r0, _080930DC @ =sMovingMonOrigBoxId
- strb r6, [r0]
- ldr r0, _080930E0 @ =sMovingMonOrigBoxPos
- strb r7, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080930D0: .4byte sPSSData
-_080930D4: .4byte 0x00002104
-_080930D8: .4byte 0x000020a0
-_080930DC: .4byte sMovingMonOrigBoxId
-_080930E0: .4byte sMovingMonOrigBoxPos
- thumb_func_end diegohint1
-
- thumb_func_start sub_80930E4
-sub_80930E4: @ 80930E4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r6, 0
- bl GetFirstFreeBoxSpot
- lsls r0, 16
- lsrs r4, r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _08093102
- movs r0, 0
- b _08093164
-_08093102:
- ldr r5, _08093120 @ =sIsMonBeingMoved
- ldrb r0, [r5]
- cmp r0, 0
- beq _08093124
- lsls r4, 24
- lsrs r1, r4, 24
- adds r0, r6, 0
- bl diegohint2
- bl sub_8090B6C
- movs r0, 0
- strb r0, [r5]
- b _0809313E
- .align 2, 0
-_08093120: .4byte sIsMonBeingMoved
-_08093124:
- ldr r5, _0809316C @ =sBoxCursorPosition
- ldrb r1, [r5]
- movs r0, 0xE
- bl sub_8092F60
- lsls r4, 24
- lsrs r1, r4, 24
- adds r0, r6, 0
- bl diegohint2
- ldrb r0, [r5]
- bl sub_8090C10
-_0809313E:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- cmp r6, r0
- bne _08093150
- lsrs r0, r4, 24
- bl sub_80901EC
-_08093150:
- ldr r0, _08093170 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
- movs r0, 0x1
-_08093164:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0809316C: .4byte sBoxCursorPosition
-_08093170: .4byte sPSSData
- thumb_func_end sub_80930E4
-
- thumb_func_start sub_8093174
-sub_8093174: @ 8093174
- push {lr}
- ldr r0, _08093190 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
- bl sub_8093A10
- pop {r0}
- bx r0
- .align 2, 0
-_08093190: .4byte sPSSData
- thumb_func_end sub_8093174
-
- thumb_func_start sub_8093194
-sub_8093194: @ 8093194
- push {lr}
- ldr r0, _080931A4 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080931A8
- movs r2, 0x2
- b _080931B8
- .align 2, 0
-_080931A4: .4byte sIsMonBeingMoved
-_080931A8:
- ldr r0, _080931D8 @ =sBoxCursorArea
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r2, 0x1
- eors r1, r2
- negs r0, r1
- orrs r0, r1
- lsrs r2, r0, 31
-_080931B8:
- ldr r0, _080931DC @ =sBoxCursorPosition
- ldrb r1, [r0]
- adds r0, r2, 0
- bl sub_8090FC4
- ldr r0, _080931E0 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _080931E4 @ =0x000021d0
- adds r0, r1, r2
- ldr r2, _080931E8 @ =0x00000cea
- adds r1, r2
- bl StringCopy
- pop {r0}
- bx r0
- .align 2, 0
-_080931D8: .4byte sBoxCursorArea
-_080931DC: .4byte sBoxCursorPosition
-_080931E0: .4byte sPSSData
-_080931E4: .4byte 0x000021d0
-_080931E8: .4byte 0x00000cea
- thumb_func_end sub_8093194
-
- thumb_func_start sub_80931EC
-sub_80931EC: @ 80931EC
- push {lr}
- bl sub_8091084
- lsls r0, 24
- cmp r0, 0
- beq _080931FC
- movs r0, 0x1
- b _08093210
-_080931FC:
- ldr r0, _08093214 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
- movs r0, 0
-_08093210:
- pop {r1}
- bx r1
- .align 2, 0
-_08093214: .4byte sPSSData
- thumb_func_end sub_80931EC
-
- thumb_func_start sub_8093218
-sub_8093218: @ 8093218
- push {lr}
- bl sub_80910CC
- ldr r1, _0809322C @ =sIsMonBeingMoved
- ldrb r0, [r1]
- cmp r0, 0
- beq _08093230
- movs r0, 0
- strb r0, [r1]
- b _08093256
- .align 2, 0
-_0809322C: .4byte sIsMonBeingMoved
-_08093230:
- ldr r0, _08093240 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _08093244
- movs r2, 0xE
- b _0809324C
- .align 2, 0
-_08093240: .4byte sBoxCursorArea
-_08093244:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r2, r0, 24
-_0809324C:
- ldr r0, _08093260 @ =sBoxCursorPosition
- ldrb r1, [r0]
- adds r0, r2, 0
- bl sub_8093030
-_08093256:
- bl sub_8093A10
- pop {r0}
- bx r0
- .align 2, 0
-_08093260: .4byte sBoxCursorPosition
- thumb_func_end sub_8093218
-
- thumb_func_start sub_8093264
-sub_8093264: @ 8093264
- push {lr}
- ldr r0, _08093284 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _08093280
- ldr r0, _08093288 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x3
- bl StartSpriteAnim
-_08093280:
- pop {r0}
- bx r0
- .align 2, 0
-_08093284: .4byte sIsMonBeingMoved
-_08093288: .4byte sPSSData
- thumb_func_end sub_8093264
-
- thumb_func_start sub_809328C
-sub_809328C: @ 809328C
- push {r4-r6,lr}
- ldr r0, _080932C0 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080932D8
- ldr r4, _080932C4 @ =sPSSData
- ldr r1, [r4]
- ldr r2, _080932C8 @ =0x00002104
- adds r0, r1, r2
- ldr r3, _080932CC @ =0x000020a0
- adds r1, r3
- movs r2, 0x64
- bl memcpy
- ldr r0, [r4]
- ldr r1, _080932D0 @ =0x0000216e
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0]
- ldr r0, [r4]
- ldr r2, _080932D4 @ =0x0000216f
- adds r0, r2
- movs r1, 0x1
- negs r1, r1
- b _08093354
- .align 2, 0
-_080932C0: .4byte sIsMonBeingMoved
-_080932C4: .4byte sPSSData
-_080932C8: .4byte 0x00002104
-_080932CC: .4byte 0x000020a0
-_080932D0: .4byte 0x0000216e
-_080932D4: .4byte 0x0000216f
-_080932D8:
- ldr r0, _0809330C @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _08093324
- ldr r4, _08093310 @ =sPSSData
- ldr r0, [r4]
- ldr r3, _08093314 @ =0x00002104
- adds r0, r3
- ldr r3, _08093318 @ =gPlayerParty
- ldr r1, _0809331C @ =sBoxCursorPosition
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r1, 0x64
- muls r1, r2
- adds r1, r3
- movs r2, 0x64
- bl memcpy
- ldr r0, [r4]
- ldr r1, _08093320 @ =0x0000216e
- adds r0, r1
- movs r1, 0xE
- strb r1, [r0]
- b _08093348
- .align 2, 0
-_0809330C: .4byte sBoxCursorArea
-_08093310: .4byte sPSSData
-_08093314: .4byte 0x00002104
-_08093318: .4byte gPlayerParty
-_0809331C: .4byte sBoxCursorPosition
-_08093320: .4byte 0x0000216e
-_08093324:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080933BC @ =sBoxCursorPosition
- ldrb r1, [r1]
- ldr r4, _080933C0 @ =sPSSData
- ldr r2, [r4]
- ldr r3, _080933C4 @ =0x00002104
- adds r2, r3
- bl sub_808BCF0
- bl StorageGetCurrentBox
- ldr r1, [r4]
- ldr r2, _080933C8 @ =0x0000216e
- adds r1, r2
- strb r0, [r1]
-_08093348:
- ldr r0, _080933C0 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080933BC @ =sBoxCursorPosition
- ldrb r1, [r1]
- ldr r3, _080933CC @ =0x0000216f
- adds r0, r3
-_08093354:
- strb r1, [r0]
- ldr r6, _080933C0 @ =sPSSData
- ldr r0, [r6]
- ldr r4, _080933D0 @ =0x0000216a
- adds r0, r4
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r6]
- ldr r5, _080933D4 @ =0x0000216b
- adds r0, r5
- strb r1, [r0]
- ldr r0, [r6]
- ldr r1, _080933D8 @ =0x00002172
- adds r2, r0, r1
- movs r1, 0x39
- strh r1, [r2]
- ldr r1, _080933DC @ =0x00002174
- adds r3, r0, r1
- ldr r1, _080933E0 @ =0x00000123
- strh r1, [r3]
- ldr r1, _080933E4 @ =0x00002176
- adds r3, r0, r1
- ldr r1, _080933E8 @ =0x00000163
- strh r1, [r3]
- ldr r3, _080933C4 @ =0x00002104
- adds r0, r3
- movs r1, 0x51
- bl GetMonData
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r1, [r6]
- movs r2, 0x1
- ands r3, r2
- adds r1, r4
- strb r3, [r1]
- ldr r1, [r6]
- lsrs r0, 17
- movs r2, 0x1
- ands r0, r2
- adds r1, r5
- strb r0, [r1]
- ldr r1, [r6]
- adds r4, r1, r4
- ldrh r0, [r4]
- cmp r0, 0
- beq _080933F0
- ldr r0, _080933EC @ =0x00002169
- adds r1, r0
- movs r0, 0
- strb r0, [r1]
- b _080933FE
- .align 2, 0
-_080933BC: .4byte sBoxCursorPosition
-_080933C0: .4byte sPSSData
-_080933C4: .4byte 0x00002104
-_080933C8: .4byte 0x0000216e
-_080933CC: .4byte 0x0000216f
-_080933D0: .4byte 0x0000216a
-_080933D4: .4byte 0x0000216b
-_080933D8: .4byte 0x00002172
-_080933DC: .4byte 0x00002174
-_080933E0: .4byte 0x00000123
-_080933E4: .4byte 0x00002176
-_080933E8: .4byte 0x00000163
-_080933EC: .4byte 0x00002169
-_080933F0:
- ldr r3, _08093410 @ =0x00002169
- adds r0, r1, r3
- strb r2, [r0]
- ldr r0, [r6]
- ldr r1, _08093414 @ =0x00002168
- adds r0, r1
- strb r2, [r0]
-_080933FE:
- ldr r0, _08093418 @ =sPSSData
- ldr r0, [r0]
- ldr r2, _0809341C @ =0x00002170
- adds r0, r2
- movs r1, 0
- strh r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08093410: .4byte 0x00002169
-_08093414: .4byte 0x00002168
-_08093418: .4byte sPSSData
-_0809341C: .4byte 0x00002170
- thumb_func_end sub_809328C
-
- thumb_func_start sub_8093420
-sub_8093420: @ 8093420
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _08093444 @ =sPSSData
- ldr r3, [r0]
- ldr r2, _08093448 @ =0x00002169
- adds r1, r3, r2
- ldrb r1, [r1]
- mov r12, r0
- cmp r1, 0
- beq _08093450
- ldr r1, _0809344C @ =0x00002168
- adds r0, r3, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- b _08093604
- .align 2, 0
-_08093444: .4byte sPSSData
-_08093448: .4byte 0x00002169
-_0809344C: .4byte 0x00002168
-_08093450:
- ldr r2, _08093460 @ =0x00002170
- adds r0, r3, r2
- ldrh r0, [r0]
- cmp r0, 0
- beq _08093464
- cmp r0, 0x1
- beq _0809353C
- b _08093600
- .align 2, 0
-_08093460: .4byte 0x00002170
-_08093464:
- movs r6, 0
- mov r5, r12
- movs r7, 0
-_0809346A:
- ldr r2, [r5]
- ldr r1, _08093500 @ =0x0000216e
- adds r0, r2, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xE
- bne _08093488
- adds r1, 0x1
- adds r0, r2, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, r6
- beq _080934C2
-_08093488:
- movs r0, 0x64
- muls r0, r6
- ldr r1, _08093504 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08093508 @ =0x00002172
- adds r2, r1
- movs r1, 0x51
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _080934AE
- ldr r0, [r5]
- ldr r2, _0809350C @ =0x0000216a
- adds r0, r2
- strb r7, [r0]
-_080934AE:
- movs r0, 0x2
- ands r4, r0
- ldr r0, _08093510 @ =sPSSData
- mov r12, r0
- cmp r4, 0
- beq _080934C2
- ldr r0, [r5]
- ldr r1, _08093514 @ =0x0000216b
- adds r0, r1
- strb r7, [r0]
-_080934C2:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x5
- bls _0809346A
- mov r2, r12
- ldr r1, [r2]
- ldr r2, _0809350C @ =0x0000216a
- adds r0, r1, r2
- ldrh r0, [r0]
- cmp r0, 0
- bne _080934DC
- b _080935EE
-_080934DC:
- ldr r2, _08093518 @ =0x0000216c
- adds r0, r1, r2
- movs r1, 0
- strb r1, [r0]
- mov r2, r12
- ldr r0, [r2]
- ldr r2, _0809351C @ =0x0000216d
- adds r0, r2
- strb r1, [r0]
- mov r0, r12
- ldr r1, [r0]
- adds r2, 0x3
- adds r1, r2
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _08093600
- .align 2, 0
-_08093500: .4byte 0x0000216e
-_08093504: .4byte gPlayerParty
-_08093508: .4byte 0x00002172
-_0809350C: .4byte 0x0000216a
-_08093510: .4byte sPSSData
-_08093514: .4byte 0x0000216b
-_08093518: .4byte 0x0000216c
-_0809351C: .4byte 0x0000216d
-_08093520:
- mov r1, r12
- ldr r0, [r1]
- ldr r2, _08093538 @ =0x00002169
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0]
- mov r1, r12
- ldr r0, [r1]
- subs r2, 0x1
- adds r0, r2
- strb r3, [r0]
- b _080935E0
- .align 2, 0
-_08093538: .4byte 0x00002169
-_0809353C:
- movs r6, 0
- mov r7, r12
- ldr r0, _08093610 @ =0x0000ffff
- mov r8, r0
-_08093544:
- ldr r3, [r7]
- ldr r1, _08093614 @ =0x0000216c
- adds r0, r3, r1
- ldrb r0, [r0]
- ldr r2, _08093618 @ =0x0000216d
- adds r1, r3, r2
- ldrb r1, [r1]
- adds r2, 0x5
- adds r3, r2
- movs r2, 0x51
- bl GetAndCopyBoxMonDataFromAnyBox
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _080935A0
- ldr r5, [r7]
- ldr r1, _0809361C @ =0x0000216e
- adds r0, r5, r1
- ldrh r2, [r0]
- subs r1, 0x2
- adds r0, r5, r1
- ldrh r3, [r0]
- mov r1, r8
- ands r1, r2
- mov r0, r8
- ands r0, r3
- cmp r1, r0
- beq _080935A0
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0809358E
- ldr r2, _08093620 @ =0x0000216a
- adds r1, r5, r2
- movs r0, 0
- strb r0, [r1]
-_0809358E:
- movs r0, 0x2
- ands r4, r0
- cmp r4, 0
- beq _080935A0
- ldr r0, [r7]
- ldr r1, _08093624 @ =0x0000216b
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_080935A0:
- ldr r2, _08093628 @ =sPSSData
- ldr r1, [r2]
- ldr r0, _08093618 @ =0x0000216d
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- movs r3, 0
- strb r0, [r1]
- lsls r0, 24
- asrs r0, 24
- mov r12, r2
- cmp r0, 0x1D
- ble _080935D6
- ldr r0, [r2]
- ldr r1, _08093618 @ =0x0000216d
- adds r0, r1
- strb r3, [r0]
- ldr r1, [r2]
- ldr r2, _08093614 @ =0x0000216c
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xD
- bgt _08093520
-_080935D6:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x4
- bls _08093544
-_080935E0:
- mov r0, r12
- ldr r1, [r0]
- ldr r2, _08093620 @ =0x0000216a
- adds r0, r1, r2
- ldrh r0, [r0]
- cmp r0, 0
- bne _08093600
-_080935EE:
- subs r2, 0x1
- adds r0, r1, r2
- movs r1, 0x1
- strb r1, [r0]
- mov r2, r12
- ldr r0, [r2]
- ldr r2, _0809362C @ =0x00002168
- adds r0, r2
- strb r1, [r0]
-_08093600:
- movs r0, 0x1
- negs r0, r0
-_08093604:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08093610: .4byte 0x0000ffff
-_08093614: .4byte 0x0000216c
-_08093618: .4byte 0x0000216d
-_0809361C: .4byte 0x0000216e
-_08093620: .4byte 0x0000216a
-_08093624: .4byte 0x0000216b
-_08093628: .4byte sPSSData
-_0809362C: .4byte 0x00002168
- thumb_func_end sub_8093420
-
- thumb_func_start sub_8093630
-sub_8093630: @ 8093630
- push {lr}
- ldr r0, _08093650 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _0809364A
- ldr r0, _08093654 @ =gUnknown_20397BC
- ldr r1, _08093658 @ =sPSSData
- ldr r1, [r1]
- ldr r2, _0809365C @ =0x000020a0
- adds r1, r2
- movs r2, 0x64
- bl memcpy
-_0809364A:
- pop {r0}
- bx r0
- .align 2, 0
-_08093650: .4byte sIsMonBeingMoved
-_08093654: .4byte gUnknown_20397BC
-_08093658: .4byte sPSSData
-_0809365C: .4byte 0x000020a0
- thumb_func_end sub_8093630
-
- thumb_func_start sub_8093660
-sub_8093660: @ 8093660
- push {lr}
- ldr r0, _08093684 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080936A8
- ldr r0, _08093688 @ =sMovingMonOrigBoxId
- ldrb r0, [r0]
- cmp r0, 0xE
- bne _08093698
- ldr r0, _0809368C @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08093690 @ =0x000020a0
- adds r0, r1
- ldr r1, _08093694 @ =gUnknown_20397BC
- movs r2, 0x64
- bl memcpy
- b _080936A8
- .align 2, 0
-_08093684: .4byte sIsMonBeingMoved
-_08093688: .4byte sMovingMonOrigBoxId
-_0809368C: .4byte sPSSData
-_08093690: .4byte 0x000020a0
-_08093694: .4byte gUnknown_20397BC
-_08093698:
- ldr r0, _080936AC @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080936B0 @ =0x000020a0
- adds r0, r1
- ldr r1, _080936B4 @ =gUnknown_20397BC
- movs r2, 0x50
- bl memcpy
-_080936A8:
- pop {r0}
- bx r0
- .align 2, 0
-_080936AC: .4byte sPSSData
-_080936B0: .4byte 0x000020a0
-_080936B4: .4byte gUnknown_20397BC
- thumb_func_end sub_8093660
-
- thumb_func_start sub_80936B8
-sub_80936B8: @ 80936B8
- push {r4,r5,lr}
- ldr r0, _080936EC @ =sIsMonBeingMoved
- ldrb r5, [r0]
- cmp r5, 0
- beq _08093708
- bl sub_8093630
- ldr r3, _080936F0 @ =sPSSData
- ldr r1, [r3]
- ldr r0, _080936F4 @ =0x0000217c
- adds r2, r1, r0
- ldr r0, _080936F8 @ =gUnknown_20397BC
- str r0, [r2]
- ldr r2, _080936FC @ =0x00002179
- adds r1, r2
- movs r2, 0
- strb r2, [r1]
- ldr r0, [r3]
- ldr r4, _08093700 @ =0x00002178
- adds r0, r4
- strb r2, [r0]
- ldr r0, [r3]
- ldr r1, _08093704 @ =0x0000217a
- adds r0, r1
- strb r2, [r0]
- b _0809379A
- .align 2, 0
-_080936EC: .4byte sIsMonBeingMoved
-_080936F0: .4byte sPSSData
-_080936F4: .4byte 0x0000217c
-_080936F8: .4byte gUnknown_20397BC
-_080936FC: .4byte 0x00002179
-_08093700: .4byte 0x00002178
-_08093704: .4byte 0x0000217a
-_08093708:
- ldr r0, _08093744 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _08093764
- ldr r4, _08093748 @ =sPSSData
- ldr r1, [r4]
- ldr r0, _0809374C @ =0x0000217c
- adds r2, r1, r0
- ldr r0, _08093750 @ =gPlayerParty
- str r0, [r2]
- ldr r0, _08093754 @ =sBoxCursorPosition
- ldrb r0, [r0]
- ldr r2, _08093758 @ =0x00002179
- adds r1, r2
- strb r0, [r1]
- bl CountPartyMons
- ldr r1, [r4]
- subs r0, 0x1
- ldr r2, _0809375C @ =0x00002178
- adds r1, r2
- strb r0, [r1]
- ldr r0, [r4]
- ldr r4, _08093760 @ =0x0000217a
- adds r0, r4
- strb r5, [r0]
- b _0809379A
- .align 2, 0
-_08093744: .4byte sBoxCursorArea
-_08093748: .4byte sPSSData
-_0809374C: .4byte 0x0000217c
-_08093750: .4byte gPlayerParty
-_08093754: .4byte sBoxCursorPosition
-_08093758: .4byte 0x00002179
-_0809375C: .4byte 0x00002178
-_08093760: .4byte 0x0000217a
-_08093764:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl GetBoxedMonPtr
- ldr r3, _080937A0 @ =sPSSData
- ldr r2, [r3]
- ldr r4, _080937A4 @ =0x0000217c
- adds r1, r2, r4
- str r0, [r1]
- ldr r0, _080937A8 @ =sBoxCursorPosition
- ldrb r0, [r0]
- ldr r1, _080937AC @ =0x00002179
- adds r2, r1
- strb r0, [r2]
- ldr r0, [r3]
- ldr r2, _080937B0 @ =0x00002178
- adds r0, r2
- movs r1, 0x1D
- strb r1, [r0]
- ldr r0, [r3]
- subs r4, 0x2
- adds r0, r4
- movs r1, 0x5
- strb r1, [r0]
-_0809379A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080937A0: .4byte sPSSData
-_080937A4: .4byte 0x0000217c
-_080937A8: .4byte sBoxCursorPosition
-_080937AC: .4byte 0x00002179
-_080937B0: .4byte 0x00002178
- thumb_func_end sub_80936B8
-
- thumb_func_start sub_80937B4
-sub_80937B4: @ 80937B4
- push {r4,lr}
- ldr r0, _080937C4 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080937C8
- bl sub_8093660
- b _080937D0
- .align 2, 0
-_080937C4: .4byte sIsMonBeingMoved
-_080937C8:
- ldr r4, _080937D8 @ =sBoxCursorPosition
- bl GetLastViewedMonIndex
- strb r0, [r4]
-_080937D0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080937D8: .4byte sBoxCursorPosition
- thumb_func_end sub_80937B4
-
- thumb_func_start CompactPartySlots
-CompactPartySlots: @ 80937DC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r7, _08093828 @ =0x0000ffff
- movs r6, 0
- movs r5, 0
- movs r0, 0x64
- mov r9, r0
- ldr r1, _0809382C @ =gPlayerParty
- mov r8, r1
- subs r0, 0x65
- mov r10, r0
-_080937F8:
- mov r0, r9
- muls r0, r6
- mov r1, r8
- adds r4, r0, r1
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- cmp r0, 0
- beq _08093830
- cmp r6, r5
- beq _08093820
- mov r0, r9
- muls r0, r5
- add r0, r8
- adds r1, r4, 0
- movs r2, 0x64
- bl memcpy
-_08093820:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- b _0809383A
- .align 2, 0
-_08093828: .4byte 0x0000ffff
-_0809382C: .4byte gPlayerParty
-_08093830:
- lsls r0, r7, 16
- asrs r0, 16
- cmp r0, r10
- bne _0809383A
- adds r7, r6, 0
-_0809383A:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x5
- bls _080937F8
- lsls r7, 16
- cmp r5, 0x5
- bhi _08093862
- movs r6, 0x64
- ldr r4, _08093874 @ =gPlayerParty
-_0809384E:
- adds r0, r5, 0
- muls r0, r6
- adds r0, r4
- bl ZeroMonData
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x5
- bls _0809384E
-_08093862:
- asrs r0, r7, 16
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08093874: .4byte gPlayerParty
- thumb_func_end CompactPartySlots
-
- thumb_func_start sub_8093878
-sub_8093878: @ 8093878
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r1, sp
- strb r0, [r1]
- ldr r2, _080938A8 @ =sPSSData
- ldr r1, [r2]
- ldr r3, _080938AC @ =0x00000ce7
- adds r1, r3
- strb r0, [r1]
- ldr r0, _080938B0 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080938B8
- ldr r0, [r2]
- ldr r1, _080938B4 @ =0x000020a0
- adds r0, r1
- movs r1, 0x8
- mov r2, sp
- bl SetMonData
- b _080938EC
- .align 2, 0
-_080938A8: .4byte sPSSData
-_080938AC: .4byte 0x00000ce7
-_080938B0: .4byte sIsMonBeingMoved
-_080938B4: .4byte 0x000020a0
-_080938B8:
- ldr r4, _080938F4 @ =sBoxCursorArea
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x1
- bne _080938D8
- ldr r0, _080938F8 @ =sBoxCursorPosition
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080938FC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x8
- mov r2, sp
- bl SetMonData
-_080938D8:
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bne _080938EC
- ldr r0, _080938F8 @ =sBoxCursorPosition
- ldrb r0, [r0]
- movs r1, 0x8
- mov r2, sp
- bl SetBoxMonDataFromSelectedBox
-_080938EC:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080938F4: .4byte sBoxCursorArea
-_080938F8: .4byte sBoxCursorPosition
-_080938FC: .4byte gPlayerParty
- thumb_func_end sub_8093878
-
- thumb_func_start sub_8093900
-sub_8093900: @ 8093900
- push {lr}
- ldr r0, _08093928 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _08093934
- ldr r0, _0809392C @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- bne _08093934
- ldr r0, _08093930 @ =sBoxCursorPosition
- ldrb r0, [r0]
- bl CountPartyAliveNonEggMonsExcept
- lsls r0, 24
- cmp r0, 0
- bne _08093934
- movs r0, 0x1
- b _08093936
- .align 2, 0
-_08093928: .4byte sBoxCursorArea
-_0809392C: .4byte sIsMonBeingMoved
-_08093930: .4byte sBoxCursorPosition
-_08093934:
- movs r0, 0
-_08093936:
- pop {r1}
- bx r1
- thumb_func_end sub_8093900
-
- thumb_func_start sub_809393C
-sub_809393C: @ 809393C
- push {lr}
- ldr r0, _08093980 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _08093998
- ldr r0, _08093984 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _0809397C
- ldr r0, _08093988 @ =sBoxCursorPosition
- ldrb r0, [r0]
- bl CountPartyAliveNonEggMonsExcept
- lsls r0, 24
- cmp r0, 0
- bne _0809397C
- ldr r0, _0809398C @ =sPSSData
- ldr r1, [r0]
- ldr r2, _08093990 @ =0x00000ce9
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _08093998
- ldr r2, _08093994 @ =0x000020a0
- adds r0, r1, r2
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _08093998
-_0809397C:
- movs r0, 0x1
- b _0809399A
- .align 2, 0
-_08093980: .4byte sIsMonBeingMoved
-_08093984: .4byte sBoxCursorArea
-_08093988: .4byte sBoxCursorPosition
-_0809398C: .4byte sPSSData
-_08093990: .4byte 0x00000ce9
-_08093994: .4byte 0x000020a0
-_08093998:
- movs r0, 0
-_0809399A:
- pop {r1}
- bx r1
- thumb_func_end sub_809393C
-
- thumb_func_start sub_80939A0
-sub_80939A0: @ 80939A0
- ldr r0, _080939A8 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080939A8: .4byte sIsMonBeingMoved
- thumb_func_end sub_80939A0
-
- thumb_func_start sub_80939AC
-sub_80939AC: @ 80939AC
- push {lr}
- movs r1, 0
- ldr r0, _080939C4 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x2
- bne _080939BE
- movs r1, 0x1
-_080939BE:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080939C4: .4byte sBoxCursorArea
- thumb_func_end sub_80939AC
-
- thumb_func_start sub_80939C8
-sub_80939C8: @ 80939C8
- push {lr}
- movs r1, 0
- ldr r0, _080939EC @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x3
- bne _080939E6
- ldr r0, _080939F0 @ =sBoxCursorPosition
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _080939E6
- movs r1, 0x1
-_080939E6:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080939EC: .4byte sBoxCursorArea
-_080939F0: .4byte sBoxCursorPosition
- thumb_func_end sub_80939C8
-
- thumb_func_start sub_80939F4
-sub_80939F4: @ 80939F4
- push {lr}
- movs r1, 0
- ldr r0, _08093A0C @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _08093A06
- movs r1, 0x1
-_08093A06:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08093A0C: .4byte sBoxCursorArea
- thumb_func_end sub_80939F4
-
- thumb_func_start sub_8093A10
-sub_8093A10: @ 8093A10
- push {r4,lr}
- ldr r0, _08093A44 @ =sPSSData
- ldr r1, [r0]
- movs r2, 0
- ldr r3, _08093A48 @ =sIsMonBeingMoved
- ldrb r0, [r3]
- cmp r0, 0
- bne _08093A22
- movs r2, 0x1
-_08093A22:
- ldr r4, _08093A4C @ =0x00000ce6
- adds r0, r1, r4
- strb r2, [r0]
- ldrb r0, [r3]
- cmp r0, 0
- bne _08093AA0
- ldr r0, _08093A50 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- beq _08093A5A
- cmp r0, 0x1
- bgt _08093A54
- cmp r0, 0
- beq _08093A8A
- b _08093AA0
- .align 2, 0
-_08093A44: .4byte sPSSData
-_08093A48: .4byte sIsMonBeingMoved
-_08093A4C: .4byte 0x00000ce6
-_08093A50: .4byte sBoxCursorArea
-_08093A54:
- cmp r0, 0x3
- bgt _08093AA0
- b _08093A80
-_08093A5A:
- ldr r1, _08093A78 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _08093A80
- adds r1, r0, 0
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08093A7C @ =gPlayerParty
- adds r0, r1
- movs r1, 0
- bl sub_8093AD0
- b _08093AA0
- .align 2, 0
-_08093A78: .4byte sBoxCursorPosition
-_08093A7C: .4byte gPlayerParty
-_08093A80:
- movs r0, 0
- movs r1, 0x2
- bl sub_8093AD0
- b _08093AA0
-_08093A8A:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08093AA8 @ =sBoxCursorPosition
- ldrb r1, [r1]
- bl GetBoxedMonPtr
- movs r1, 0x1
- bl sub_8093AD0
-_08093AA0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08093AA8: .4byte sBoxCursorPosition
- thumb_func_end sub_8093A10
-
- thumb_func_start sub_8093AAC
-sub_8093AAC: @ 8093AAC
- push {lr}
- ldr r0, _08093AC0 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _08093AC8
- ldr r0, _08093AC4 @ =gUnknown_20397BC
- movs r1, 0
- bl sub_8093AD0
- b _08093ACC
- .align 2, 0
-_08093AC0: .4byte sIsMonBeingMoved
-_08093AC4: .4byte gUnknown_20397BC
-_08093AC8:
- bl sub_8093A10
-_08093ACC:
- pop {r0}
- bx r0
- thumb_func_end sub_8093AAC
-
- thumb_func_start sub_8093AD0
-sub_8093AD0: @ 8093AD0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r5, r1, 0
- ldr r0, _08093B38 @ =sPSSData
- mov r8, r0
- ldr r1, [r0]
- ldr r3, _08093B3C @ =0x00000ce2
- adds r2, r1, r3
- movs r0, 0
- strh r0, [r2]
- mov r9, r0
- mov r10, r0
- cmp r5, 0
- bne _08093BEC
- adds r6, r4, 0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- mov r2, r8
- ldr r1, [r2]
- movs r3, 0xCE
- lsls r3, 4
- adds r1, r3
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bne _08093B16
- b _08093D0C
-_08093B16:
- adds r0, r4, 0
- movs r1, 0x4
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- cmp r0, 0
- beq _08093B44
- mov r1, r8
- ldr r0, [r1]
- ldr r2, _08093B40 @ =0x00000ce9
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0]
- b _08093B56
- .align 2, 0
-_08093B38: .4byte sPSSData
-_08093B3C: .4byte 0x00000ce2
-_08093B40: .4byte 0x00000ce9
-_08093B44:
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- mov r3, r8
- ldr r1, [r3]
- ldr r2, _08093BCC @ =0x00000ce9
- adds r1, r2
- strb r0, [r1]
-_08093B56:
- ldr r4, _08093BD0 @ =sPSSData
- ldr r2, [r4]
- ldr r5, _08093BD4 @ =0x00000cea
- adds r2, r5
- adds r0, r6, 0
- movs r1, 0x2
- bl GetMonData
- ldr r0, [r4]
- adds r0, r5
- bl StringGetEnd10
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- ldr r1, [r4]
- ldr r3, _08093BD8 @ =0x00000ce8
- adds r1, r3
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0x8
- bl GetMonData
- ldr r1, [r4]
- ldr r2, _08093BDC @ =0x00000ce7
- adds r1, r2
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0
- bl GetMonData
- ldr r1, [r4]
- ldr r3, _08093BE0 @ =0x00000cdc
- adds r1, r3
- str r0, [r1]
- adds r0, r6, 0
- bl GetMonFrontSpritePal
- ldr r1, [r4]
- ldr r2, _08093BE4 @ =0x00000cd8
- adds r1, r2
- str r0, [r1]
- adds r0, r6, 0
- bl GetMonGender
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- adds r0, r6, 0
- movs r1, 0xC
- bl GetMonData
- ldr r1, [r4]
- ldr r3, _08093BE8 @ =0x00000ce2
- adds r1, r3
- strh r0, [r1]
- b _08093CFC
- .align 2, 0
-_08093BCC: .4byte 0x00000ce9
-_08093BD0: .4byte sPSSData
-_08093BD4: .4byte 0x00000cea
-_08093BD8: .4byte 0x00000ce8
-_08093BDC: .4byte 0x00000ce7
-_08093BE0: .4byte 0x00000cdc
-_08093BE4: .4byte 0x00000cd8
-_08093BE8: .4byte 0x00000ce2
-_08093BEC:
- cmp r5, 0x1
- beq _08093BF2
- b _08093CF0
-_08093BF2:
- adds r7, r4, 0
- adds r0, r7, 0
- movs r1, 0x41
- bl GetBoxMonData
- mov r2, r8
- ldr r1, [r2]
- movs r3, 0xCE
- lsls r3, 4
- adds r1, r3
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bne _08093C10
- b _08093D0C
-_08093C10:
- adds r0, r7, 0
- movs r1, 0x1
- bl GetBoxMonData
- mov r9, r0
- adds r0, r7, 0
- movs r1, 0x4
- bl GetBoxMonData
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- cmp r0, 0
- beq _08093C3C
- mov r1, r8
- ldr r0, [r1]
- ldr r2, _08093C38 @ =0x00000ce9
- adds r0, r2
- strb r5, [r0]
- b _08093C4E
- .align 2, 0
-_08093C38: .4byte 0x00000ce9
-_08093C3C:
- adds r0, r7, 0
- movs r1, 0x2D
- bl GetBoxMonData
- mov r3, r8
- ldr r1, [r3]
- ldr r2, _08093CD0 @ =0x00000ce9
- adds r1, r2
- strb r0, [r1]
-_08093C4E:
- ldr r5, _08093CD4 @ =sPSSData
- ldr r2, [r5]
- ldr r4, _08093CD8 @ =0x00000cea
- adds r2, r4
- adds r0, r7, 0
- movs r1, 0x2
- bl GetBoxMonData
- ldr r0, [r5]
- adds r0, r4
- bl StringGetEnd10
- adds r0, r7, 0
- bl GetLevelFromBoxMonExp
- ldr r1, [r5]
- ldr r3, _08093CDC @ =0x00000ce8
- adds r1, r3
- strb r0, [r1]
- adds r0, r7, 0
- movs r1, 0x8
- bl GetBoxMonData
- ldr r1, [r5]
- ldr r2, _08093CE0 @ =0x00000ce7
- adds r1, r2
- strb r0, [r1]
- adds r0, r7, 0
- movs r1, 0
- bl GetBoxMonData
- adds r2, r0, 0
- ldr r1, [r5]
- ldr r6, _08093CE4 @ =0x00000cdc
- adds r0, r1, r6
- str r2, [r0]
- subs r4, 0xA
- adds r1, r4
- ldrh r0, [r1]
- mov r1, r9
- bl GetMonSpritePalFromSpeciesAndPersonality
- ldr r1, [r5]
- ldr r3, _08093CE8 @ =0x00000cd8
- adds r2, r1, r3
- str r0, [r2]
- adds r4, r1, r4
- ldrh r0, [r4]
- adds r1, r6
- ldr r1, [r1]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- adds r0, r7, 0
- movs r1, 0xC
- bl GetBoxMonData
- ldr r1, [r5]
- ldr r2, _08093CEC @ =0x00000ce2
- adds r1, r2
- strh r0, [r1]
- b _08093CFC
- .align 2, 0
-_08093CD0: .4byte 0x00000ce9
-_08093CD4: .4byte sPSSData
-_08093CD8: .4byte 0x00000cea
-_08093CDC: .4byte 0x00000ce8
-_08093CE0: .4byte 0x00000ce7
-_08093CE4: .4byte 0x00000cdc
-_08093CE8: .4byte 0x00000cd8
-_08093CEC: .4byte 0x00000ce2
-_08093CF0:
- movs r3, 0xCE
- lsls r3, 4
- adds r0, r1, r3
- mov r1, r9
- strh r1, [r0]
- strh r1, [r2]
-_08093CFC:
- ldr r0, _08093D50 @ =sPSSData
- ldr r1, [r0]
- movs r2, 0xCE
- lsls r2, 4
- adds r0, r1, r2
- ldrh r2, [r0]
- cmp r2, 0
- bne _08093D68
-_08093D0C:
- ldr r4, _08093D50 @ =sPSSData
- ldr r0, [r4]
- ldr r3, _08093D54 @ =0x00000cea
- adds r0, r3
- movs r1, 0
- movs r2, 0x5
- bl StringFill
- ldr r0, [r4]
- ldr r1, _08093D58 @ =0x00000cf5
- adds r0, r1
- movs r1, 0
- movs r2, 0x8
- bl StringFill
- ldr r0, [r4]
- ldr r2, _08093D5C @ =0x00000d19
- adds r0, r2
- movs r1, 0
- movs r2, 0x8
- bl StringFill
- ldr r0, [r4]
- ldr r3, _08093D60 @ =0x00000d3d
- adds r0, r3
- movs r1, 0
- movs r2, 0x8
- bl StringFill
- ldr r0, [r4]
- ldr r1, _08093D64 @ =0x00000d61
- adds r0, r1
- b _08093DC6
- .align 2, 0
-_08093D50: .4byte sPSSData
-_08093D54: .4byte 0x00000cea
-_08093D58: .4byte 0x00000cf5
-_08093D5C: .4byte 0x00000d19
-_08093D60: .4byte 0x00000d3d
-_08093D64: .4byte 0x00000d61
-_08093D68:
- ldr r3, _08093D8C @ =0x00000ce9
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- beq _08093DE8
- mov r0, r10
- cmp r0, 0
- beq _08093D94
- ldr r2, _08093D90 @ =0x00000cf5
- adds r0, r1, r2
- adds r3, 0x1
- adds r1, r3
- movs r2, 0
- movs r3, 0x5
- bl StringCopyPadded
- b _08093DA2
- .align 2, 0
-_08093D8C: .4byte 0x00000ce9
-_08093D90: .4byte 0x00000cf5
-_08093D94:
- ldr r2, _08093DD0 @ =0x00000cf5
- adds r0, r1, r2
- ldr r1, _08093DD4 @ =gText_EggNickname
- movs r2, 0
- movs r3, 0x8
- bl StringCopyPadded
-_08093DA2:
- ldr r4, _08093DD8 @ =sPSSData
- ldr r0, [r4]
- ldr r3, _08093DDC @ =0x00000d19
- adds r0, r3
- movs r1, 0
- movs r2, 0x8
- bl StringFill
- ldr r0, [r4]
- ldr r1, _08093DE0 @ =0x00000d3d
- adds r0, r1
- movs r1, 0
- movs r2, 0x8
- bl StringFill
- ldr r0, [r4]
- ldr r2, _08093DE4 @ =0x00000d61
- adds r0, r2
-_08093DC6:
- movs r1, 0
- movs r2, 0x8
- bl StringFill
- b _08093F84
- .align 2, 0
-_08093DD0: .4byte 0x00000cf5
-_08093DD4: .4byte gText_EggNickname
-_08093DD8: .4byte sPSSData
-_08093DDC: .4byte 0x00000d19
-_08093DE0: .4byte 0x00000d3d
-_08093DE4: .4byte 0x00000d61
-_08093DE8:
- cmp r2, 0x1D
- beq _08093DF0
- cmp r2, 0x20
- bne _08093DF4
-_08093DF0:
- movs r3, 0xFF
- mov r9, r3
-_08093DF4:
- ldr r4, _08093E78 @ =sPSSData
- ldr r1, [r4]
- ldr r2, _08093E7C @ =0x00000cf5
- adds r0, r1, r2
- ldr r3, _08093E80 @ =0x00000cea
- adds r1, r3
- movs r2, 0
- movs r3, 0x5
- bl StringCopyPadded
- ldr r1, [r4]
- ldr r0, _08093E84 @ =0x00000d19
- adds r2, r1, r0
- movs r0, 0xBA
- strb r0, [r2]
- ldr r3, _08093E88 @ =0x00000d1a
- adds r2, r1, r3
- ldr r0, [r4]
- movs r1, 0xCE
- lsls r1, 4
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0xB
- muls r1, r0
- ldr r0, _08093E8C @ =gSpeciesNames
- adds r1, r0
- adds r0, r2, 0
- movs r2, 0
- movs r3, 0x5
- bl StringCopyPadded
- ldr r4, [r4]
- ldr r3, _08093E90 @ =0x00000d3d
- adds r2, r4, r3
- movs r0, 0xFC
- strb r0, [r2]
- ldr r0, _08093E94 @ =0x00000d3e
- adds r2, r4, r0
- movs r0, 0x4
- strb r0, [r2]
- ldr r1, _08093E98 @ =0x00000d3f
- adds r2, r4, r1
- mov r3, r9
- cmp r3, 0
- beq _08093EA4
- cmp r3, 0xFE
- beq _08093ED0
- movs r0, 0x2
- strb r0, [r2]
- movs r0, 0xD4
- lsls r0, 4
- adds r2, r4, r0
- movs r0, 0x1
- strb r0, [r2]
- adds r1, 0x2
- adds r2, r4, r1
- movs r0, 0x3
- strb r0, [r2]
- ldr r3, _08093E9C @ =0x00000d42
- adds r2, r4, r3
- movs r0, 0
- strb r0, [r2]
- ldr r0, _08093EA0 @ =0x00000d43
- adds r2, r4, r0
- b _08093EF2
- .align 2, 0
-_08093E78: .4byte sPSSData
-_08093E7C: .4byte 0x00000cf5
-_08093E80: .4byte 0x00000cea
-_08093E84: .4byte 0x00000d19
-_08093E88: .4byte 0x00000d1a
-_08093E8C: .4byte gSpeciesNames
-_08093E90: .4byte 0x00000d3d
-_08093E94: .4byte 0x00000d3e
-_08093E98: .4byte 0x00000d3f
-_08093E9C: .4byte 0x00000d42
-_08093EA0: .4byte 0x00000d43
-_08093EA4:
- strb r0, [r2]
- movs r1, 0xD4
- lsls r1, 4
- adds r2, r4, r1
- movs r0, 0x1
- strb r0, [r2]
- ldr r3, _08093EC8 @ =0x00000d41
- adds r2, r4, r3
- movs r0, 0x5
- strb r0, [r2]
- ldr r0, _08093ECC @ =0x00000d42
- adds r2, r4, r0
- movs r0, 0xB5
- strb r0, [r2]
- adds r1, 0x3
- adds r2, r4, r1
- b _08093EF2
- .align 2, 0
-_08093EC8: .4byte 0x00000d41
-_08093ECC: .4byte 0x00000d42
-_08093ED0:
- movs r0, 0x6
- strb r0, [r2]
- movs r3, 0xD4
- lsls r3, 4
- adds r2, r4, r3
- movs r0, 0x1
- strb r0, [r2]
- ldr r0, _08093F60 @ =0x00000d41
- adds r2, r4, r0
- movs r0, 0x7
- strb r0, [r2]
- ldr r1, _08093F64 @ =0x00000d42
- adds r2, r4, r1
- movs r0, 0xB6
- strb r0, [r2]
- adds r3, 0x3
- adds r2, r4, r3
-_08093EF2:
- movs r0, 0xFC
- strb r0, [r2]
- adds r2, 0x1
- movs r0, 0x4
- strb r0, [r2]
- adds r2, 0x1
- movs r0, 0x2
- strb r0, [r2]
- adds r2, 0x1
- movs r0, 0x1
- strb r0, [r2]
- adds r2, 0x1
- movs r0, 0x3
- strb r0, [r2]
- adds r2, 0x1
- movs r5, 0
- strb r5, [r2]
- adds r2, 0x1
- movs r0, 0xF9
- strb r0, [r2]
- adds r2, 0x1
- movs r0, 0x5
- strb r0, [r2]
- adds r2, 0x1
- ldr r4, _08093F68 @ =sPSSData
- ldr r0, [r4]
- ldr r1, _08093F6C @ =0x00000ce8
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r2, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r2, r0, 0
- strb r5, [r2]
- movs r0, 0xFF
- strb r0, [r2, 0x1]
- ldr r4, [r4]
- ldr r2, _08093F70 @ =0x00000ce2
- adds r1, r4, r2
- ldrh r0, [r1]
- cmp r0, 0
- beq _08093F78
- ldr r3, _08093F74 @ =0x00000d61
- adds r4, r3
- bl ItemId_GetName
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x8
- bl StringCopyPadded
- b _08093F84
- .align 2, 0
-_08093F60: .4byte 0x00000d41
-_08093F64: .4byte 0x00000d42
-_08093F68: .4byte sPSSData
-_08093F6C: .4byte 0x00000ce8
-_08093F70: .4byte 0x00000ce2
-_08093F74: .4byte 0x00000d61
-_08093F78:
- ldr r1, _08093F94 @ =0x00000d61
- adds r0, r4, r1
- movs r1, 0
- movs r2, 0x8
- bl StringFill
-_08093F84:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08093F94: .4byte 0x00000d61
- thumb_func_end sub_8093AD0
-
- thumb_func_start sub_8093F98
-sub_8093F98: @ 8093F98
- push {lr}
- ldr r0, _08093FB8 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08093FBC @ =0x000021ef
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08093FC0
- cmp r0, 0x1
- ble _08093FB0
- cmp r0, 0x2
- beq _08093FC6
-_08093FB0:
- bl sub_8093FD4
- b _08093FCA
- .align 2, 0
-_08093FB8: .4byte sPSSData
-_08093FBC: .4byte 0x000021ef
-_08093FC0:
- bl sub_8094240
- b _08093FCA
-_08093FC6:
- bl sub_8094378
-_08093FCA:
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8093F98
-
- thumb_func_start sub_8093FD4
-sub_8093FD4: @ 8093FD4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _08094058 @ =sBoxCursorArea
- ldrb r0, [r0]
- mov r8, r0
- ldr r2, _0809405C @ =sBoxCursorPosition
- ldrb r4, [r2]
- ldr r5, _08094060 @ =sPSSData
- ldr r0, [r5]
- ldr r1, _08094064 @ =0x00000cce
- mov r10, r1
- add r0, r10
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r5]
- ldr r7, _08094068 @ =0x00000ccf
- adds r0, r7
- strb r1, [r0]
- ldr r0, [r5]
- ldr r3, _0809406C @ =0x00000cd3
- mov r9, r3
- add r0, r9
- strb r1, [r0]
- ldr r6, _08094070 @ =gMain
- ldrh r1, [r6, 0x30]
- movs r0, 0x40
- ands r0, r1
- adds r3, r2, 0
- cmp r0, 0
- beq _08094018
- b _08094208
-_08094018:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08094074
- movs r6, 0x1
- lsls r0, r4, 24
- movs r1, 0xC0
- lsls r1, 19
- adds r0, r1
- lsrs r4, r0, 24
- asrs r0, 24
- cmp r0, 0x1D
- bgt _08094034
- b _08094224
-_08094034:
- movs r2, 0x3
- mov r8, r2
- subs r0, 0x1E
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x3
- bl __divsi3
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, [r5]
- add r0, r10
- strb r6, [r0]
- ldr r0, [r5]
- add r0, r9
- strb r6, [r0]
- b _08094224
- .align 2, 0
-_08094058: .4byte sBoxCursorArea
-_0809405C: .4byte sBoxCursorPosition
-_08094060: .4byte sPSSData
-_08094064: .4byte 0x00000cce
-_08094068: .4byte 0x00000ccf
-_0809406C: .4byte 0x00000cd3
-_08094070: .4byte gMain
-_08094074:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080940AA
- movs r6, 0x1
- movs r0, 0
- ldrsb r0, [r3, r0]
- movs r1, 0x6
- bl __modsi3
- lsls r0, 24
- cmp r0, 0
- beq _08094096
- lsls r0, r4, 24
- movs r3, 0xFF
- lsls r3, 24
- b _08094218
-_08094096:
- ldr r0, [r5]
- adds r0, r7
- movs r1, 0xFF
- strb r1, [r0]
- lsls r0, r4, 24
- movs r1, 0xA0
- lsls r1, 19
- adds r0, r1
- lsrs r4, r0, 24
- b _08094224
-_080940AA:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080940DE
- movs r6, 0x1
- movs r0, 0
- ldrsb r0, [r3, r0]
- adds r0, 0x1
- movs r1, 0x6
- bl __modsi3
- cmp r0, 0
- beq _080940D0
- lsls r0, r4, 24
- movs r2, 0x80
- lsls r2, 17
- adds r0, r2
- lsrs r4, r0, 24
- b _08094224
-_080940D0:
- ldr r0, [r5]
- adds r0, r7
- strb r6, [r0]
- lsls r0, r4, 24
- movs r3, 0xFB
- lsls r3, 24
- b _08094218
-_080940DE:
- ldrh r1, [r6, 0x2E]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080940EC
- movs r6, 0x1
- b _0809421E
-_080940EC:
- movs r4, 0x1
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080941B0
- bl sub_8094924
- lsls r0, 24
- cmp r0, 0
- beq _080941B0
- ldr r0, _0809410C @ =sCanOnlyMove
- ldrb r0, [r0]
- cmp r0, 0
- bne _08094110
- movs r0, 0x8
- b _08094232
- .align 2, 0
-_0809410C: .4byte sCanOnlyMove
-_08094110:
- ldr r1, [r5]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x2
- bne _08094120
- ldr r0, _0809413C @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080941A0
-_08094120:
- movs r0, 0
- bl sub_8094E50
- subs r0, 0x1
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xE
- bhi _080941B0
- lsls r0, 2
- ldr r1, _08094140 @ =_08094144
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0809413C: .4byte sIsMonBeingMoved
-_08094140: .4byte _08094144
- .align 2, 0
-_08094144:
- .4byte _08094180
- .4byte _08094184
- .4byte _08094188
- .4byte _0809418C
- .4byte _08094190
- .4byte _080941B0
- .4byte _080941B0
- .4byte _080941B0
- .4byte _080941B0
- .4byte _080941B0
- .4byte _080941B0
- .4byte _08094194
- .4byte _08094198
- .4byte _080941B0
- .4byte _0809419C
-_08094180:
- movs r0, 0xB
- b _08094232
-_08094184:
- movs r0, 0xC
- b _08094232
-_08094188:
- movs r0, 0xD
- b _08094232
-_0809418C:
- movs r0, 0xE
- b _08094232
-_08094190:
- movs r0, 0xF
- b _08094232
-_08094194:
- movs r0, 0x10
- b _08094232
-_08094198:
- movs r0, 0x11
- b _08094232
-_0809419C:
- movs r0, 0x12
- b _08094232
-_080941A0:
- ldr r2, _080941AC @ =0x000021ef
- adds r0, r1, r2
- strb r4, [r0]
- movs r0, 0x14
- b _08094232
- .align 2, 0
-_080941AC: .4byte 0x000021ef
-_080941B0:
- ldr r2, _080941C0 @ =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080941C4
- movs r0, 0x13
- b _08094232
- .align 2, 0
-_080941C0: .4byte gMain
-_080941C4:
- ldr r0, _080941E0 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x1
- bne _080941F2
- ldrh r1, [r2, 0x2C]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _080941E4
- movs r0, 0xA
- b _08094232
- .align 2, 0
-_080941E0: .4byte gSaveBlock2Ptr
-_080941E4:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _080941F2
- movs r0, 0x9
- b _08094232
-_080941F2:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08094204
- bl sub_8094C84
- movs r0, 0
- b _08094232
-_08094204:
- movs r6, 0
- b _08094230
-_08094208:
- movs r6, 0x1
- movs r0, 0
- ldrsb r0, [r2, r0]
- cmp r0, 0x5
- ble _0809421E
- lsls r0, r4, 24
- movs r3, 0xFA
- lsls r3, 24
-_08094218:
- adds r0, r3
- lsrs r4, r0, 24
- b _08094224
-_0809421E:
- movs r0, 0x2
- mov r8, r0
- movs r4, 0
-_08094224:
- cmp r6, 0
- beq _08094230
- mov r0, r8
- adds r1, r4, 0
- bl sub_80927E8
-_08094230:
- adds r0, r6, 0
-_08094232:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8093FD4
-
- thumb_func_start sub_8094240
-sub_8094240: @ 8094240
- push {r4,lr}
- ldr r1, _08094270 @ =gMain
- ldrh r0, [r1, 0x2C]
- movs r4, 0x1
- ands r4, r0
- cmp r4, 0
- beq _080942F4
- ldrh r1, [r1, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08094278
- ldr r4, _08094274 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x6
- bl __divsi3
- lsls r0, 24
- cmp r0, 0
- beq _080942EC
- ldrb r1, [r4]
- subs r1, 0x6
- b _080942DA
- .align 2, 0
-_08094270: .4byte gMain
-_08094274: .4byte sBoxCursorPosition
-_08094278:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08094298
- ldr r1, _08094294 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r1, r0]
- adds r0, 0x6
- cmp r0, 0x1D
- bgt _080942EC
- ldrb r1, [r1]
- adds r1, 0x6
- b _080942DA
- .align 2, 0
-_08094294: .4byte sBoxCursorPosition
-_08094298:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080942BC
- ldr r4, _080942B8 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x6
- bl __modsi3
- lsls r0, 24
- cmp r0, 0
- beq _080942EC
- ldrb r1, [r4]
- subs r1, 0x1
- b _080942DA
- .align 2, 0
-_080942B8: .4byte sBoxCursorPosition
-_080942BC:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080942F0
- ldr r4, _080942E8 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r4, r0]
- adds r0, 0x1
- movs r1, 0x6
- bl __modsi3
- cmp r0, 0
- beq _080942EC
- ldrb r1, [r4]
- adds r1, 0x1
-_080942DA:
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_80927E8
- movs r0, 0x15
- b _08094364
- .align 2, 0
-_080942E8: .4byte sBoxCursorPosition
-_080942EC:
- movs r0, 0x18
- b _08094364
-_080942F0:
- movs r0, 0
- b _08094364
-_080942F4:
- bl sub_8095AA0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08094330 @ =sBoxCursorPosition
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- cmp r0, r1
- beq _08094344
- ldr r2, _08094334 @ =sIsMonBeingMoved
- ldr r0, _08094338 @ =sPSSData
- ldr r1, [r0]
- movs r3, 0xCE
- lsls r3, 4
- adds r0, r1, r3
- ldrh r0, [r0]
- negs r0, r0
- lsrs r0, 31
- strb r0, [r2]
- ldr r0, _0809433C @ =0x000021ef
- adds r1, r0
- movs r0, 0x2
- strb r0, [r1]
- bl StorageGetCurrentBox
- ldr r1, _08094340 @ =sMovingMonOrigBoxId
- strb r0, [r1]
- movs r0, 0x17
- b _08094364
- .align 2, 0
-_08094330: .4byte sBoxCursorPosition
-_08094334: .4byte sIsMonBeingMoved
-_08094338: .4byte sPSSData
-_0809433C: .4byte 0x000021ef
-_08094340: .4byte sMovingMonOrigBoxId
-_08094344:
- ldr r1, _0809436C @ =sPSSData
- ldr r0, [r1]
- ldr r2, _08094370 @ =0x000021ef
- adds r0, r2
- strb r4, [r0]
- ldr r0, [r1]
- ldr r3, _08094374 @ =0x00000cb4
- adds r0, r3
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- movs r0, 0x16
-_08094364:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0809436C: .4byte sPSSData
-_08094370: .4byte 0x000021ef
-_08094374: .4byte 0x00000cb4
- thumb_func_end sub_8094240
-
- thumb_func_start sub_8094378
-sub_8094378: @ 8094378
- push {r4,lr}
- ldr r2, _0809439C @ =gMain
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080943A4
- movs r0, 0
- bl sub_8095474
- lsls r0, 24
- cmp r0, 0
- beq _08094450
- ldr r0, _080943A0 @ =sBoxCursorPosition
- ldrb r1, [r0]
- subs r1, 0x6
- b _08094402
- .align 2, 0
-_0809439C: .4byte gMain
-_080943A0: .4byte sBoxCursorPosition
-_080943A4:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080943C4
- movs r0, 0x1
- bl sub_8095474
- lsls r0, 24
- cmp r0, 0
- beq _08094450
- ldr r0, _080943C0 @ =sBoxCursorPosition
- ldrb r1, [r0]
- adds r1, 0x6
- b _08094402
- .align 2, 0
-_080943C0: .4byte sBoxCursorPosition
-_080943C4:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080943E4
- movs r0, 0x2
- bl sub_8095474
- lsls r0, 24
- cmp r0, 0
- beq _0809446A
- ldr r0, _080943E0 @ =sBoxCursorPosition
- ldrb r1, [r0]
- subs r1, 0x1
- b _08094402
- .align 2, 0
-_080943E0: .4byte sBoxCursorPosition
-_080943E4:
- movs r0, 0x10
- ands r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _08094414
- movs r0, 0x3
- bl sub_8095474
- lsls r0, 24
- cmp r0, 0
- beq _0809447E
- ldr r0, _08094410 @ =sBoxCursorPosition
- ldrb r1, [r0]
- adds r1, 0x1
-_08094402:
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_80927E8
- movs r0, 0x19
- b _08094484
- .align 2, 0
-_08094410: .4byte sBoxCursorPosition
-_08094414:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08094448
- bl sub_8095ABC
- lsls r0, 24
- cmp r0, 0
- beq _08094450
- ldr r0, _0809443C @ =sIsMonBeingMoved
- strb r4, [r0]
- ldr r0, _08094440 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08094444 @ =0x000021ef
- adds r0, r1
- strb r4, [r0]
- movs r0, 0x1A
- b _08094484
- .align 2, 0
-_0809443C: .4byte sIsMonBeingMoved
-_08094440: .4byte sPSSData
-_08094444: .4byte 0x000021ef
-_08094448:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08094454
-_08094450:
- movs r0, 0x18
- b _08094484
-_08094454:
- ldr r0, _08094470 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x1
- bne _08094482
- ldrh r1, [r2, 0x2C]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _08094474
-_0809446A:
- movs r0, 0xA
- b _08094484
- .align 2, 0
-_08094470: .4byte gSaveBlock2Ptr
-_08094474:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08094482
-_0809447E:
- movs r0, 0x9
- b _08094484
-_08094482:
- movs r0, 0
-_08094484:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8094378
-
- thumb_func_start sub_809448C
-sub_809448C: @ 809448C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _080944FC @ =sBoxCursorArea
- ldrb r0, [r0]
- mov r9, r0
- ldr r6, _08094500 @ =sBoxCursorPosition
- ldrb r4, [r6]
- ldr r2, _08094504 @ =sPSSData
- ldr r0, [r2]
- ldr r1, _08094508 @ =0x00000ccf
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r2]
- ldr r3, _0809450C @ =0x00000cce
- adds r0, r3
- strb r1, [r0]
- ldr r0, [r2]
- adds r3, 0x5
- adds r0, r3
- strb r1, [r0]
- mov r8, r1
- movs r7, 0
- ldr r1, _08094510 @ =gMain
- ldrh r3, [r1, 0x30]
- movs r0, 0x40
- ands r0, r3
- adds r5, r6, 0
- mov r12, r1
- cmp r0, 0
- beq _080944D0
- b _08094670
-_080944D0:
- movs r0, 0x80
- ands r0, r3
- cmp r0, 0
- beq _08094514
- lsls r0, r4, 24
- movs r1, 0x80
- lsls r1, 17
- adds r0, r1
- lsrs r4, r0, 24
- asrs r0, 24
- cmp r0, 0x6
- ble _080944EA
- movs r4, 0
-_080944EA:
- lsls r0, r4, 24
- asrs r0, 24
- movs r1, 0
- ldrsb r1, [r5, r1]
- cmp r0, r1
- bne _080944F8
- b _0809468E
-_080944F8:
- movs r7, 0x1
- b _08094692
- .align 2, 0
-_080944FC: .4byte sBoxCursorArea
-_08094500: .4byte sBoxCursorPosition
-_08094504: .4byte sPSSData
-_08094508: .4byte 0x00000ccf
-_0809450C: .4byte 0x00000cce
-_08094510: .4byte gMain
-_08094514:
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- beq _08094538
- ldrb r1, [r5]
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0
- beq _08094538
- movs r7, 0x1
- ldr r0, [r2]
- ldr r2, _08094534 @ =0x00000cd2
- adds r0, r2
- strb r1, [r0]
- movs r4, 0
- b _0809468E
- .align 2, 0
-_08094534: .4byte 0x00000cd2
-_08094538:
- mov r3, r12
- ldrh r1, [r3, 0x30]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08094566
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0
- bne _0809455C
- movs r7, 0x1
- ldr r0, [r2]
- ldr r1, _08094558 @ =0x00000cd2
- adds r0, r1
- ldrb r4, [r0]
- b _0809468E
- .align 2, 0
-_08094558: .4byte 0x00000cd2
-_0809455C:
- movs r7, 0x6
- movs r2, 0
- mov r9, r2
- movs r4, 0
- b _0809468E
-_08094566:
- mov r3, r12
- ldrh r1, [r3, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08094624
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0x6
- bne _0809458C
- ldr r0, [r2]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bne _08094586
- movs r0, 0x4
- b _080946A0
-_08094586:
- movs r0, 0x1
- mov r8, r0
- b _08094624
-_0809458C:
- bl sub_8094924
- lsls r0, 24
- cmp r0, 0
- beq _08094624
- ldr r0, _080945A4 @ =sCanOnlyMove
- ldrb r0, [r0]
- cmp r0, 0
- bne _080945A8
- movs r0, 0x8
- b _080946A0
- .align 2, 0
-_080945A4: .4byte sCanOnlyMove
-_080945A8:
- movs r0, 0
- bl sub_8094E50
- subs r0, 0x1
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xE
- bhi _08094624
- lsls r0, 2
- ldr r1, _080945C4 @ =_080945C8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080945C4: .4byte _080945C8
- .align 2, 0
-_080945C8:
- .4byte _08094604
- .4byte _08094608
- .4byte _0809460C
- .4byte _08094610
- .4byte _08094614
- .4byte _08094624
- .4byte _08094624
- .4byte _08094624
- .4byte _08094624
- .4byte _08094624
- .4byte _08094624
- .4byte _08094618
- .4byte _0809461C
- .4byte _08094624
- .4byte _08094620
-_08094604:
- movs r0, 0xB
- b _080946A0
-_08094608:
- movs r0, 0xC
- b _080946A0
-_0809460C:
- movs r0, 0xD
- b _080946A0
-_08094610:
- movs r0, 0xE
- b _080946A0
-_08094614:
- movs r0, 0xF
- b _080946A0
-_08094618:
- movs r0, 0x10
- b _080946A0
-_0809461C:
- movs r0, 0x11
- b _080946A0
-_08094620:
- movs r0, 0x12
- b _080946A0
-_08094624:
- ldr r2, _08094640 @ =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x2
- ands r0, r1
- mov r12, r2
- cmp r0, 0
- beq _0809464C
- ldr r0, _08094644 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bne _08094648
- movs r0, 0x13
- b _080946A0
- .align 2, 0
-_08094640: .4byte gMain
-_08094644: .4byte sPSSData
-_08094648:
- movs r1, 0x1
- mov r8, r1
-_0809464C:
- mov r2, r8
- cmp r2, 0
- beq _0809465C
- movs r7, 0x6
- movs r3, 0
- mov r9, r3
- movs r4, 0
- b _0809468E
-_0809465C:
- mov r0, r12
- ldrh r1, [r0, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0809468E
- bl sub_8094C84
- movs r0, 0
- b _080946A0
-_08094670:
- lsls r0, r4, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r1
- lsrs r4, r0, 24
- cmp r0, 0
- bge _08094680
- movs r4, 0x6
-_08094680:
- lsls r0, r4, 24
- asrs r0, 24
- movs r1, 0
- ldrsb r1, [r6, r1]
- cmp r0, r1
- beq _0809468E
- movs r7, 0x1
-_0809468E:
- cmp r7, 0
- beq _0809469E
-_08094692:
- cmp r7, 0x6
- beq _0809469E
- mov r0, r9
- adds r1, r4, 0
- bl sub_80927E8
-_0809469E:
- adds r0, r7, 0
-_080946A0:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_809448C
-
- thumb_func_start sub_80946AC
-sub_80946AC: @ 80946AC
- push {r4-r6,lr}
- ldr r3, _080946E8 @ =sPSSData
- ldr r0, [r3]
- ldr r1, _080946EC @ =0x00000ccf
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r3]
- ldr r2, _080946F0 @ =0x00000cce
- adds r0, r2
- strb r1, [r0]
- ldr r0, [r3]
- ldr r5, _080946F4 @ =0x00000cd3
- adds r0, r5
- strb r1, [r0]
- ldr r1, _080946F8 @ =gMain
- ldrh r2, [r1, 0x30]
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- bne _08094772
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _080946FC
- movs r4, 0x1
- movs r1, 0
- movs r6, 0x2
- b _0809477E
- .align 2, 0
-_080946E8: .4byte sPSSData
-_080946EC: .4byte 0x00000ccf
-_080946F0: .4byte 0x00000cce
-_080946F4: .4byte 0x00000cd3
-_080946F8: .4byte gMain
-_080946FC:
- ldrh r2, [r1, 0x2C]
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- bne _08094722
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- bne _08094736
- ldr r0, _08094728 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x1
- bne _0809473A
- movs r0, 0x80
- lsls r0, 2
- ands r0, r2
- cmp r0, 0
- beq _0809472C
-_08094722:
- movs r0, 0xA
- b _0809479A
- .align 2, 0
-_08094728: .4byte gSaveBlock2Ptr
-_0809472C:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r2
- cmp r0, 0
- beq _0809473A
-_08094736:
- movs r0, 0x9
- b _0809479A
-_0809473A:
- ldrh r1, [r1, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08094752
- movs r0, 0
- bl sub_80920FC
- bl sub_8094900
- movs r0, 0x7
- b _0809479A
-_08094752:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0809475E
- movs r0, 0x13
- b _0809479A
-_0809475E:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0809476E
- bl sub_8094C84
- movs r0, 0
- b _0809479A
-_0809476E:
- movs r4, 0
- b _08094798
-_08094772:
- movs r4, 0x1
- movs r1, 0x3
- movs r6, 0
- ldr r0, [r3]
- adds r0, r5
- strb r4, [r0]
-_0809477E:
- cmp r4, 0
- beq _08094798
- lsls r5, r1, 24
- cmp r1, 0x2
- beq _0809478E
- movs r0, 0
- bl sub_80920FC
-_0809478E:
- lsrs r0, r5, 24
- lsls r1, r6, 24
- lsrs r1, 24
- bl sub_80927E8
-_08094798:
- adds r0, r4, 0
-_0809479A:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80946AC
-
- thumb_func_start sub_80947A0
-sub_80947A0: @ 80947A0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _080947F0 @ =sBoxCursorArea
- ldrb r0, [r0]
- mov r8, r0
- ldr r0, _080947F4 @ =sBoxCursorPosition
- mov r12, r0
- ldrb r2, [r0]
- ldr r3, _080947F8 @ =sPSSData
- ldr r0, [r3]
- ldr r1, _080947FC @ =0x00000ccf
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r3]
- ldr r6, _08094800 @ =0x00000cce
- adds r0, r6
- strb r1, [r0]
- ldr r0, [r3]
- ldr r5, _08094804 @ =0x00000cd3
- adds r0, r5
- strb r1, [r0]
- ldr r7, _08094808 @ =gMain
- ldrh r1, [r7, 0x30]
- movs r0, 0x40
- ands r0, r1
- adds r4, r3, 0
- cmp r0, 0
- bne _0809487A
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- beq _0809480C
- movs r7, 0x1
- movs r0, 0x2
- mov r8, r0
- movs r2, 0
- ldr r0, [r4]
- b _08094898
- .align 2, 0
-_080947F0: .4byte sBoxCursorArea
-_080947F4: .4byte sBoxCursorPosition
-_080947F8: .4byte sPSSData
-_080947FC: .4byte 0x00000ccf
-_08094800: .4byte 0x00000cce
-_08094804: .4byte 0x00000cd3
-_08094808: .4byte gMain
-_0809480C:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08094828
- movs r7, 0x1
- lsls r0, r2, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r1
- lsrs r2, r0, 24
- cmp r0, 0
- bge _0809489C
- movs r2, 0x1
- b _0809489C
-_08094828:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08094846
- movs r7, 0x1
- lsls r0, r2, 24
- movs r1, 0x80
- lsls r1, 17
- adds r0, r1
- lsrs r2, r0, 24
- asrs r0, 24
- cmp r0, 0x1
- ble _0809489C
- movs r2, 0
- b _0809489C
-_08094846:
- ldrh r1, [r7, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0809485A
- movs r0, 0x4
- cmp r2, 0
- bne _080948AA
- movs r0, 0x5
- b _080948AA
-_0809485A:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08094866
- movs r0, 0x13
- b _080948AA
-_08094866:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08094876
- bl sub_8094C84
- movs r0, 0
- b _080948AA
-_08094876:
- movs r7, 0
- b _080948A8
-_0809487A:
- movs r7, 0x1
- movs r0, 0
- mov r8, r0
- ldr r0, [r3]
- adds r0, r6
- movs r1, 0xFF
- strb r1, [r0]
- mov r1, r12
- movs r0, 0
- ldrsb r0, [r1, r0]
- movs r2, 0x1D
- cmp r0, 0
- bne _08094896
- movs r2, 0x18
-_08094896:
- ldr r0, [r3]
-_08094898:
- adds r0, r5
- strb r7, [r0]
-_0809489C:
- cmp r7, 0
- beq _080948A8
- mov r0, r8
- adds r1, r2, 0
- bl sub_80927E8
-_080948A8:
- adds r0, r7, 0
-_080948AA:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80947A0
-
- thumb_func_start sub_80948B4
-sub_80948B4: @ 80948B4
- push {r4,r5,lr}
- movs r3, 0
- ldr r0, _080948E0 @ =gUnknown_83D3478
- ldr r1, [r0]
- adds r4, r0, 0
- cmp r1, 0
- beq _080948F8
- ldr r5, _080948E4 @ =sBoxCursorArea
-_080948C4:
- lsls r0, r3, 3
- adds r2, r0, r4
- movs r1, 0x4
- ldrsb r1, [r2, r1]
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r1, r0
- bne _080948E8
- ldr r0, [r2]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- b _080948FA
- .align 2, 0
-_080948E0: .4byte gUnknown_83D3478
-_080948E4: .4byte sBoxCursorArea
-_080948E8:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r0, r3, 3
- adds r0, r4
- ldr r0, [r0]
- cmp r0, 0
- bne _080948C4
-_080948F8:
- movs r0, 0
-_080948FA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80948B4
-
- thumb_func_start sub_8094900
-sub_8094900: @ 8094900
- push {lr}
- bl sub_8094DA8
- movs r0, 0x9
- bl sub_8094DEC
- movs r0, 0xA
- bl sub_8094DEC
- movs r0, 0xB
- bl sub_8094DEC
- movs r0, 0
- bl sub_8094DEC
- pop {r0}
- bx r0
- thumb_func_end sub_8094900
-
- thumb_func_start sub_8094924
-sub_8094924: @ 8094924
- push {lr}
- bl sub_8094DA8
- ldr r0, _0809493C @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _08094940
- bl sub_8094A0C
- b _08094944
- .align 2, 0
-_0809493C: .4byte sPSSData
-_08094940:
- bl sub_809494C
-_08094944:
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8094924
-
- thumb_func_start sub_809494C
-sub_809494C: @ 809494C
- push {lr}
- bl sub_8092458
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, _0809496C @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- beq _08094976
- cmp r0, 0x1
- bgt _08094970
- cmp r0, 0
- beq _08094982
- b _080949BC
- .align 2, 0
-_0809496C: .4byte sPSSData
-_08094970:
- cmp r0, 0x2
- beq _0809498E
- b _080949BC
-_08094976:
- cmp r1, 0
- beq _080949BC
- movs r0, 0x1
- bl sub_8094DEC
- b _080949C0
-_08094982:
- cmp r1, 0
- beq _080949BC
- movs r0, 0x2
- bl sub_8094DEC
- b _080949C0
-_0809498E:
- ldr r0, _080949A4 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080949B0
- cmp r1, 0
- beq _080949A8
- movs r0, 0x4
- bl sub_8094DEC
- b _080949C0
- .align 2, 0
-_080949A4: .4byte sIsMonBeingMoved
-_080949A8:
- movs r0, 0x5
- bl sub_8094DEC
- b _080949C0
-_080949B0:
- cmp r1, 0
- beq _080949BC
- movs r0, 0x3
- bl sub_8094DEC
- b _080949C0
-_080949BC:
- movs r0, 0
- b _08094A06
-_080949C0:
- movs r0, 0x6
- bl sub_8094DEC
- ldr r0, _080949E4 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x2
- bne _080949F2
- ldr r0, _080949E8 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _080949EC
- movs r0, 0x2
- bl sub_8094DEC
- b _080949F2
- .align 2, 0
-_080949E4: .4byte sPSSData
-_080949E8: .4byte sBoxCursorArea
-_080949EC:
- movs r0, 0x1
- bl sub_8094DEC
-_080949F2:
- movs r0, 0x8
- bl sub_8094DEC
- movs r0, 0x7
- bl sub_8094DEC
- movs r0, 0
- bl sub_8094DEC
- movs r0, 0x1
-_08094A06:
- pop {r1}
- bx r1
- thumb_func_end sub_809494C
-
- thumb_func_start sub_8094A0C
-sub_8094A0C: @ 8094A0C
- push {r4,r5,lr}
- ldr r4, _08094A48 @ =sPSSData
- ldr r0, [r4]
- movs r5, 0xCE
- lsls r5, 4
- adds r0, r5
- ldrh r1, [r0]
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- beq _08094A9E
- bl sub_809616C
- lsls r0, 24
- cmp r0, 0
- bne _08094A70
- ldr r2, [r4]
- ldr r0, _08094A4C @ =0x00000ce2
- adds r1, r2, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _08094A50
- adds r0, r2, r5
- ldrh r0, [r0]
- cmp r0, 0
- beq _08094A9E
- movs r0, 0xE
- bl sub_8094DEC
- b _08094AA8
- .align 2, 0
-_08094A48: .4byte sPSSData
-_08094A4C: .4byte 0x00000ce2
-_08094A50:
- ldrh r0, [r1]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- bne _08094A68
- movs r0, 0xC
- bl sub_8094DEC
- movs r0, 0x10
- bl sub_8094DEC
-_08094A68:
- movs r0, 0x11
- bl sub_8094DEC
- b _08094AA8
-_08094A70:
- ldr r2, [r4]
- ldr r0, _08094A8C @ =0x00000ce2
- adds r1, r2, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _08094A90
- adds r0, r2, r5
- ldrh r0, [r0]
- cmp r0, 0
- beq _08094A9E
- movs r0, 0xD
- bl sub_8094DEC
- b _08094AA8
- .align 2, 0
-_08094A8C: .4byte 0x00000ce2
-_08094A90:
- ldrh r0, [r1]
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08094AA2
-_08094A9E:
- movs r0, 0
- b _08094AB0
-_08094AA2:
- movs r0, 0xF
- bl sub_8094DEC
-_08094AA8:
- movs r0, 0
- bl sub_8094DEC
- movs r0, 0x1
-_08094AB0:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8094A0C
-
- thumb_func_start sub_8094AB8
-sub_8094AB8: @ 8094AB8
- ldr r1, _08094AD4 @ =sPSSData
- ldr r1, [r1]
- movs r2, 0xCB
- lsls r2, 4
- adds r1, r2
- ldr r2, [r1]
- ldrh r2, [r2, 0x20]
- strh r2, [r0, 0x20]
- ldr r1, [r1]
- ldrh r1, [r1, 0x22]
- adds r1, 0x14
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_08094AD4: .4byte sPSSData
- thumb_func_end sub_8094AB8
-
- thumb_func_start sub_8094AD8
-sub_8094AD8: @ 8094AD8
- push {r4-r6,lr}
- sub sp, 0x2C
- mov r1, sp
- ldr r0, _08094BA4 @ =gUnknown_83D34A0
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- add r4, sp, 0x18
- adds r1, r4, 0
- ldr r0, _08094BA8 @ =gUnknown_83D34B8
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldr r0, [r0]
- str r0, [r1]
- mov r0, sp
- bl LoadSpriteSheets
- adds r0, r4, 0
- bl LoadSpritePalettes
- ldr r0, _08094BAC @ =0x0000daca
- bl IndexOfSpritePaletteTag
- ldr r6, _08094BB0 @ =sPSSData
- ldr r1, [r6]
- ldr r4, _08094BB4 @ =0x00000cd4
- adds r1, r4
- strb r0, [r1]
- ldr r0, _08094BB8 @ =0x0000dac7
- bl IndexOfSpritePaletteTag
- ldr r1, [r6]
- ldr r5, _08094BBC @ =0x00000cd5
- adds r1, r5
- strb r0, [r1]
- ldr r0, _08094BC0 @ =sBoxCursorArea
- ldrb r0, [r0]
- ldr r1, _08094BC4 @ =sBoxCursorPosition
- ldrb r1, [r1]
- add r4, sp, 0x28
- mov r5, sp
- adds r5, 0x2A
- adds r2, r4, 0
- adds r3, r5, 0
- bl sub_8092398
- ldr r0, _08094BC8 @ =gUnknown_83D350C
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0
- ldrsh r2, [r5, r3]
- movs r3, 0x6
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _08094BD8
- ldr r2, [r6]
- movs r4, 0xCB
- lsls r4, 4
- adds r3, r2, r4
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08094BCC @ =gSprites
- adds r1, r0
- str r1, [r3]
- ldr r0, _08094BD0 @ =sCanOnlyMove
- ldr r5, _08094BB4 @ =0x00000cd4
- adds r2, r5
- ldrb r0, [r0]
- adds r2, r0
- ldrb r2, [r2]
- lsls r2, 4
- ldrb r3, [r1, 0x5]
- movs r0, 0xF
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x5]
- ldr r0, [r6]
- adds r0, r4
- ldr r2, [r0]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, _08094BD4 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _08094BE4
- ldr r0, [r6]
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0x3
- bl StartSpriteAnim
- b _08094BE4
- .align 2, 0
-_08094BA4: .4byte gUnknown_83D34A0
-_08094BA8: .4byte gUnknown_83D34B8
-_08094BAC: .4byte 0x0000daca
-_08094BB0: .4byte sPSSData
-_08094BB4: .4byte 0x00000cd4
-_08094BB8: .4byte 0x0000dac7
-_08094BBC: .4byte 0x00000cd5
-_08094BC0: .4byte sBoxCursorArea
-_08094BC4: .4byte sBoxCursorPosition
-_08094BC8: .4byte gUnknown_83D350C
-_08094BCC: .4byte gSprites
-_08094BD0: .4byte sCanOnlyMove
-_08094BD4: .4byte sIsMonBeingMoved
-_08094BD8:
- ldr r0, [r6]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- movs r1, 0
- str r1, [r0]
-_08094BE4:
- ldr r0, _08094BF8 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _08094BFC
- movs r3, 0xD
- movs r4, 0x1
- b _08094C00
- .align 2, 0
-_08094BF8: .4byte sBoxCursorArea
-_08094BFC:
- movs r3, 0x15
- movs r4, 0x2
-_08094C00:
- ldr r0, _08094C54 @ =gUnknown_83D3524
- movs r1, 0
- movs r2, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _08094C68
- ldr r5, _08094C58 @ =sPSSData
- ldr r2, [r5]
- ldr r3, _08094C5C @ =0x00000cb4
- adds r2, r3
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08094C60 @ =gSprites
- adds r1, r0
- str r1, [r2]
- lsls r3, r4, 2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldr r0, _08094C64 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08094C74
- ldr r0, [r5]
- ldr r4, _08094C5C @ =0x00000cb4
- adds r0, r4
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- b _08094C74
- .align 2, 0
-_08094C54: .4byte gUnknown_83D3524
-_08094C58: .4byte sPSSData
-_08094C5C: .4byte 0x00000cb4
-_08094C60: .4byte gSprites
-_08094C64: .4byte sBoxCursorArea
-_08094C68:
- ldr r0, _08094C7C @ =sPSSData
- ldr r0, [r0]
- ldr r5, _08094C80 @ =0x00000cb4
- adds r0, r5
- movs r1, 0
- str r1, [r0]
-_08094C74:
- add sp, 0x2C
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08094C7C: .4byte sPSSData
-_08094C80: .4byte 0x00000cb4
- thumb_func_end sub_8094AD8
-
- thumb_func_start sub_8094C84
-sub_8094C84: @ 8094C84
- push {lr}
- ldr r2, _08094CBC @ =sCanOnlyMove
- movs r1, 0
- ldrb r0, [r2]
- cmp r0, 0
- bne _08094C92
- movs r1, 0x1
-_08094C92:
- strb r1, [r2]
- ldr r0, _08094CC0 @ =sPSSData
- ldr r0, [r0]
- movs r3, 0xCB
- lsls r3, 4
- adds r1, r0, r3
- ldr r3, [r1]
- ldr r1, _08094CC4 @ =0x00000cd4
- adds r0, r1
- ldrb r2, [r2]
- adds r0, r2
- ldrb r1, [r0]
- lsls r1, 4
- ldrb r2, [r3, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x5]
- pop {r0}
- bx r0
- .align 2, 0
-_08094CBC: .4byte sCanOnlyMove
-_08094CC0: .4byte sPSSData
-_08094CC4: .4byte 0x00000cd4
- thumb_func_end sub_8094C84
-
- thumb_func_start sub_8094CC8
-sub_8094CC8: @ 8094CC8
- ldr r0, _08094CD0 @ =sBoxCursorPosition
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08094CD0: .4byte sBoxCursorPosition
- thumb_func_end sub_8094CC8
-
- thumb_func_start sub_8094CD4
-sub_8094CD4: @ 8094CD4
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- ldr r0, _08094D00 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _08094D08
- ldr r4, _08094D04 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x6
- bl __modsi3
- strb r0, [r5]
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x6
- bl __divsi3
- b _08094D0C
- .align 2, 0
-_08094D00: .4byte sBoxCursorArea
-_08094D04: .4byte sBoxCursorPosition
-_08094D08:
- movs r0, 0
- strb r0, [r5]
-_08094D0C:
- strb r0, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8094CD4
-
- thumb_func_start sub_8094D14
-sub_8094D14: @ 8094D14
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08094D30 @ =sPSSData
- ldr r0, [r0]
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r2
- ldr r0, [r0]
- bl StartSpriteAnim
- pop {r0}
- bx r0
- .align 2, 0
-_08094D30: .4byte sPSSData
- thumb_func_end sub_8094D14
-
- thumb_func_start sub_8094D34
-sub_8094D34: @ 8094D34
- ldr r0, _08094D3C @ =sMovingMonOrigBoxId
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08094D3C: .4byte sMovingMonOrigBoxId
- thumb_func_end sub_8094D34
-
- thumb_func_start sub_8094D40
-sub_8094D40: @ 8094D40
- ldr r0, _08094D5C @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r2, [r0]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x5]
- bx lr
- .align 2, 0
-_08094D5C: .4byte sPSSData
- thumb_func_end sub_8094D40
-
- thumb_func_start sub_8094D60
-sub_8094D60: @ 8094D60
- push {lr}
- ldr r0, _08094D7C @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _08094D78
- ldr r0, _08094D80 @ =sBoxCursorPosition
- ldrb r1, [r0]
- movs r0, 0
- bl sub_8095D44
-_08094D78:
- pop {r0}
- bx r0
- .align 2, 0
-_08094D7C: .4byte sBoxCursorArea
-_08094D80: .4byte sBoxCursorPosition
- thumb_func_end sub_8094D60
-
- thumb_func_start sub_8094D84
-sub_8094D84: @ 8094D84
- push {lr}
- ldr r0, _08094DA0 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _08094D9C
- ldr r0, _08094DA4 @ =sBoxCursorPosition
- ldrb r1, [r0]
- movs r0, 0
- bl sub_8095C84
-_08094D9C:
- pop {r0}
- bx r0
- .align 2, 0
-_08094DA0: .4byte sBoxCursorArea
-_08094DA4: .4byte sBoxCursorPosition
- thumb_func_end sub_8094D84
-
- thumb_func_start sub_8094DA8
-sub_8094DA8: @ 8094DA8
- ldr r2, _08094DDC @ =sPSSData
- ldr r0, [r2]
- ldr r1, _08094DE0 @ =0x00000ca8
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r2]
- ldr r3, _08094DE4 @ =0x00000ca9
- adds r0, r3
- strb r1, [r0]
- ldr r0, [r2]
- subs r3, 0x41
- adds r0, r3
- strb r1, [r0]
- ldr r0, [r2]
- ldr r1, _08094DE8 @ =0x00000c6d
- adds r0, r1
- movs r1, 0xF
- strb r1, [r0]
- ldr r0, [r2]
- adds r3, 0x6
- adds r0, r3
- movs r1, 0x5C
- strh r1, [r0]
- bx lr
- .align 2, 0
-_08094DDC: .4byte sPSSData
-_08094DE0: .4byte 0x00000ca8
-_08094DE4: .4byte 0x00000ca9
-_08094DE8: .4byte 0x00000c6d
- thumb_func_end sub_8094DA8
-
- thumb_func_start sub_8094DEC
-sub_8094DEC: @ 8094DEC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r4, _08094E40 @ =sPSSData
- ldr r2, [r4]
- ldr r5, _08094E44 @ =0x00000ca8
- adds r1, r2, r5
- ldrb r0, [r1]
- cmp r0, 0x6
- bhi _08094E38
- adds r1, r0, 0
- lsls r1, 3
- movs r0, 0xC7
- lsls r0, 4
- adds r1, r0
- adds r1, r2, r1
- ldr r2, _08094E48 @ =gUnknown_83D353C
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- str r0, [r1]
- str r3, [r1, 0x4]
- bl StringLength
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, [r4]
- ldr r2, _08094E4C @ =0x00000ca9
- adds r0, r2
- ldrb r2, [r0]
- cmp r1, r2
- bls _08094E2E
- strb r1, [r0]
-_08094E2E:
- ldr r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08094E38:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08094E40: .4byte sPSSData
-_08094E44: .4byte 0x00000ca8
-_08094E48: .4byte gUnknown_83D353C
-_08094E4C: .4byte 0x00000ca9
- thumb_func_end sub_8094DEC
-
- thumb_func_start sub_8094E50
-sub_8094E50: @ 8094E50
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08094E74 @ =sPSSData
- ldr r1, [r0]
- ldr r3, _08094E78 @ =0x00000ca8
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r2, r0
- bcs _08094E80
- lsls r0, r2, 3
- ldr r2, _08094E7C @ =0x00000c74
- adds r1, r2
- adds r1, r0
- movs r0, 0
- ldrsb r0, [r1, r0]
- b _08094E84
- .align 2, 0
-_08094E74: .4byte sPSSData
-_08094E78: .4byte 0x00000ca8
-_08094E7C: .4byte 0x00000c74
-_08094E80:
- movs r0, 0x1
- negs r0, r0
-_08094E84:
- pop {r1}
- bx r1
- thumb_func_end sub_8094E50
-
- thumb_func_start sub_8094E88
-sub_8094E88: @ 8094E88
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0xC
- ldr r5, _08094F6C @ =sPSSData
- ldr r1, [r5]
- ldr r2, _08094F70 @ =0x00000ca9
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r0, 0x2
- subs r2, 0x3E
- adds r1, r2
- movs r3, 0
- mov r10, r3
- strb r0, [r1]
- ldr r1, [r5]
- ldr r0, _08094F74 @ =0x00000ca8
- mov r8, r0
- adds r0, r1, r0
- ldrb r0, [r0]
- lsls r0, 1
- ldr r3, _08094F78 @ =0x00000c6c
- adds r1, r3
- strb r0, [r1]
- ldr r1, [r5]
- adds r2, r1, r2
- ldrb r2, [r2]
- movs r0, 0x1D
- subs r0, r2
- ldr r2, _08094F7C @ =0x00000c69
- adds r1, r2
- strb r0, [r1]
- ldr r1, [r5]
- adds r3, r1, r3
- ldrb r2, [r3]
- movs r0, 0xF
- subs r0, r2
- ldr r3, _08094F80 @ =0x00000c6a
- adds r1, r3
- strb r0, [r1]
- ldr r0, [r5]
- ldr r1, _08094F84 @ =0x00000c68
- adds r0, r1
- bl AddWindow
- ldr r1, [r5]
- ldr r4, _08094F88 @ =0x00000cac
- adds r1, r4
- movs r2, 0
- mov r9, r2
- strh r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- bl ClearWindowTilemap
- ldr r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- movs r2, 0xB
- movs r3, 0xE
- bl DrawStdFrameWithCustomTileAndPalette
- ldr r2, [r5]
- adds r0, r2, r4
- ldrb r0, [r0]
- movs r6, 0x10
- str r6, [sp]
- mov r3, r8
- adds r1, r2, r3
- ldrb r1, [r1]
- str r1, [sp, 0x4]
- movs r1, 0xC7
- lsls r1, 4
- adds r2, r1
- str r2, [sp, 0x8]
- movs r1, 0x1
- movs r2, 0x8
- movs r3, 0x2
- bl PrintTextArray
- ldr r1, [r5]
- adds r4, r1, r4
- ldrb r0, [r4]
- str r6, [sp]
- add r1, r8
- ldrb r1, [r1]
- str r1, [sp, 0x4]
- mov r2, r10
- str r2, [sp, 0x8]
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x2
- bl Menu_InitCursor
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- ldr r0, [r5]
- ldr r3, _08094F8C @ =0x00000caa
- adds r0, r3
- mov r1, r9
- strb r1, [r0]
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08094F6C: .4byte sPSSData
-_08094F70: .4byte 0x00000ca9
-_08094F74: .4byte 0x00000ca8
-_08094F78: .4byte 0x00000c6c
-_08094F7C: .4byte 0x00000c69
-_08094F80: .4byte 0x00000c6a
-_08094F84: .4byte 0x00000c68
-_08094F88: .4byte 0x00000cac
-_08094F8C: .4byte 0x00000caa
- thumb_func_end sub_8094E88
-
- thumb_func_start sub_8094F90
-sub_8094F90: @ 8094F90
- movs r0, 0
- bx lr
- thumb_func_end sub_8094F90
-
- thumb_func_start sub_8094F94
-sub_8094F94: @ 8094F94
- push {r4,r5,lr}
- movs r5, 0x2
- negs r5, r5
- ldr r4, _08094FD0 @ =gMain
- ldrh r1, [r4, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08094FEA
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08094FB6
- movs r0, 0x5
- bl PlaySE
- adds r5, 0x1
-_08094FB6:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08094FD4
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl Menu_MoveCursor
- b _08094FF2
- .align 2, 0
-_08094FD0: .4byte gMain
-_08094FD4:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08094FF2
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl Menu_MoveCursor
- b _08094FF2
-_08094FEA:
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r5, r0, 24
-_08094FF2:
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- beq _08094FFE
- bl sub_8095024
-_08094FFE:
- cmp r5, 0
- blt _08095010
- ldr r0, _0809501C @ =sPSSData
- ldr r0, [r0]
- lsls r1, r5, 3
- ldr r2, _08095020 @ =0x00000c74
- adds r0, r2
- adds r0, r1
- ldr r5, [r0]
-_08095010:
- lsls r0, r5, 16
- asrs r0, 16
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0809501C: .4byte sPSSData
-_08095020: .4byte 0x00000c74
- thumb_func_end sub_8094F94
-
- thumb_func_start sub_8095024
-sub_8095024: @ 8095024
- push {r4,r5,lr}
- ldr r5, _08095048 @ =sPSSData
- ldr r0, [r5]
- ldr r4, _0809504C @ =0x00000cac
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0x1
- bl ClearStdWindowAndFrameToTransparent
- ldr r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl RemoveWindow
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08095048: .4byte sPSSData
-_0809504C: .4byte 0x00000cac
- thumb_func_end sub_8095024
-
- thumb_func_start sub_8095050
-sub_8095050: @ 8095050
- push {r4,lr}
- ldr r4, _08095088 @ =gUnknown_2039828
- ldr r0, _0809508C @ =0x00000974
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _0809509C
- ldr r0, _08095090 @ =gUnknown_83D35D4
- bl AddWindow8Bit
- adds r1, r0, 0
- ldr r0, _08095094 @ =sPSSData
- ldr r0, [r0]
- ldr r2, _08095098 @ =0x000021f0
- adds r0, r2
- strh r1, [r0]
- lsls r0, r1, 16
- lsrs r0, 16
- cmp r0, 0xFF
- beq _0809509C
- lsls r0, r1, 24
- lsrs r0, 24
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- b _0809509E
- .align 2, 0
-_08095088: .4byte gUnknown_2039828
-_0809508C: .4byte 0x00000974
-_08095090: .4byte gUnknown_83D35D4
-_08095094: .4byte sPSSData
-_08095098: .4byte 0x000021f0
-_0809509C:
- movs r0, 0
-_0809509E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8095050
-
- thumb_func_start sub_80950A4
-sub_80950A4: @ 80950A4
- push {lr}
- ldr r0, _080950B8 @ =gUnknown_2039828
- ldr r0, [r0]
- cmp r0, 0
- beq _080950B2
- bl Free
-_080950B2:
- pop {r0}
- bx r0
- .align 2, 0
-_080950B8: .4byte gUnknown_2039828
- thumb_func_end sub_80950A4
-
- thumb_func_start sub_80950BC
-sub_80950BC: @ 80950BC
- ldr r2, _080950CC @ =gUnknown_2039828
- ldr r1, [r2]
- movs r3, 0
- strb r0, [r1]
- ldr r0, [r2]
- strb r3, [r0, 0x1]
- bx lr
- .align 2, 0
-_080950CC: .4byte gUnknown_2039828
- thumb_func_end sub_80950BC
-
- thumb_func_start sub_80950D0
-sub_80950D0: @ 80950D0
- push {lr}
- ldr r0, _080950E8 @ =gUnknown_2039828
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _08095130
- lsls r0, 2
- ldr r1, _080950EC @ =_080950F0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080950E8: .4byte gUnknown_2039828
-_080950EC: .4byte _080950F0
- .align 2, 0
-_080950F0:
- .4byte _08095108
- .4byte _0809510E
- .4byte _08095114
- .4byte _0809511A
- .4byte _08095120
- .4byte _08095126
-_08095108:
- bl sub_8095138
- b _0809512A
-_0809510E:
- bl sub_8095234
- b _0809512A
-_08095114:
- bl sub_80952A0
- b _0809512A
-_0809511A:
- bl sub_8095314
- b _0809512A
-_08095120:
- bl sub_8095394
- b _0809512A
-_08095126:
- bl sub_80953BC
-_0809512A:
- lsls r0, 24
- lsrs r0, 24
- b _08095132
-_08095130:
- movs r0, 0
-_08095132:
- pop {r1}
- bx r1
- thumb_func_end sub_80950D0
-
- thumb_func_start sub_8095138
-sub_8095138: @ 8095138
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r6, _08095150 @ =gUnknown_2039828
- ldr r1, [r6]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x1
- beq _08095168
- cmp r0, 0x1
- bgt _08095154
- cmp r0, 0
- beq _0809515A
- b _08095228
- .align 2, 0
-_08095150: .4byte gUnknown_2039828
-_08095154:
- cmp r0, 0x2
- beq _08095214
- b _08095228
-_0809515A:
- movs r0, 0
- bl HideBg
- movs r0, 0x80
- bl LoadMonIconPalettesAt
- b _080951F8
-_08095168:
- adds r0, r1, 0x2
- adds r1, 0x3
- bl sub_8094CD4
- ldr r1, [r6]
- ldrb r0, [r1, 0x2]
- strb r0, [r1, 0x4]
- ldr r1, [r6]
- ldrb r0, [r1, 0x3]
- strb r0, [r1, 0x5]
- ldr r4, _08095204 @ =0xfffffc00
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- ldr r5, _08095208 @ =sPSSData
- ldr r0, [r5]
- ldr r4, _0809520C @ =0x000021f0
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- bl FillWindowPixelBuffer8Bit
- ldr r1, [r6]
- ldrb r0, [r1, 0x2]
- ldrb r1, [r1, 0x3]
- bl sub_80956A4
- movs r0, 0
- movs r1, 0x4
- movs r2, 0x1
- bl SetBgAttribute
- ldr r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl PutWindowTilemap
- ldr r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0x3
- bl CopyWindowToVram8Bit
- movs r0, 0xFC
- lsls r0, 6
- ldr r2, _08095210 @ =0x00007fff
- movs r1, 0x8
- bl BlendPalettes
- movs r0, 0x2
- bl sub_8094D14
- movs r0, 0x8
- movs r1, 0x80
- bl SetGpuRegBits
-_080951F8:
- ldr r1, [r6]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _08095228
- .align 2, 0
-_08095204: .4byte 0xfffffc00
-_08095208: .4byte sPSSData
-_0809520C: .4byte 0x000021f0
-_08095210: .4byte 0x00007fff
-_08095214:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08095228
- movs r0, 0
- bl ShowBg
- movs r0, 0
- b _0809522A
-_08095228:
- movs r0, 0x1
-_0809522A:
- add sp, 0x8
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8095138
-
- thumb_func_start sub_8095234
-sub_8095234: @ 8095234
- push {r4,lr}
- ldr r4, _0809524C @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- beq _0809525E
- cmp r0, 0x1
- bgt _08095250
- cmp r0, 0
- beq _08095256
- b _08095298
- .align 2, 0
-_0809524C: .4byte gUnknown_2039828
-_08095250:
- cmp r0, 0x2
- beq _08095272
- b _08095298
-_08095256:
- movs r0, 0
- bl HideBg
- b _08095268
-_0809525E:
- bl sub_8095A58
- movs r0, 0
- bl sub_8094D14
-_08095268:
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _08095298
-_08095272:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08095298
- bl sub_8094D40
- movs r0, 0x3
- bl stdpal_get
- movs r1, 0xD0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0
- bl ShowBg
- movs r0, 0
- b _0809529A
-_08095298:
- movs r0, 0x1
-_0809529A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8095234
-
- thumb_func_start sub_80952A0
-sub_80952A0: @ 80952A0
- push {r4,lr}
- ldr r4, _080952B4 @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080952B8
- cmp r0, 0x1
- beq _08095300
- b _0809530A
- .align 2, 0
-_080952B4: .4byte gUnknown_2039828
-_080952B8:
- bl sub_80924A8
- lsls r0, 24
- cmp r0, 0
- bne _0809530A
- ldr r1, [r4]
- adds r0, r1, 0x6
- adds r1, 0x7
- bl sub_8094CD4
- bl sub_8095520
- ldr r1, [r4]
- ldrb r0, [r1, 0x6]
- strb r0, [r1, 0x4]
- ldr r1, [r4]
- ldrb r0, [r1, 0x7]
- strb r0, [r1, 0x5]
- ldr r0, _080952F8 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080952FC @ =0x000021f0
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0x2
- bl CopyWindowToVram8Bit
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _0809530A
- .align 2, 0
-_080952F8: .4byte sPSSData
-_080952FC: .4byte 0x000021f0
-_08095300:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0809530C
-_0809530A:
- movs r0, 0x1
-_0809530C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80952A0
-
- thumb_func_start sub_8095314
-sub_8095314: @ 8095314
- push {r4,lr}
- ldr r4, _0809532C @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- beq _08095342
- cmp r0, 0x1
- bgt _08095330
- cmp r0, 0
- beq _08095336
- b _0809538C
- .align 2, 0
-_0809532C: .4byte gUnknown_2039828
-_08095330:
- cmp r0, 0x2
- beq _0809536E
- b _0809538C
-_08095336:
- bl sub_80957C8
- bl sub_80958A0
- movs r0, 0
- b _08095360
-_08095342:
- bl sub_8092BF8
- lsls r0, 24
- cmp r0, 0
- bne _0809538C
- movs r0, 0x3
- bl sub_8094D14
- movs r1, 0x80
- lsls r1, 1
- movs r0, 0
- movs r2, 0x8
- bl sub_8095780
- movs r0, 0x1
-_08095360:
- bl sub_8092BAC
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _0809538C
-_0809536E:
- bl sub_8095790
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8092BF8
- lsls r0, 24
- lsrs r0, 24
- cmp r4, 0
- bne _0809538C
- cmp r0, 0
- bne _0809538C
- movs r0, 0
- b _0809538E
-_0809538C:
- movs r0, 0x1
-_0809538E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8095314
-
- thumb_func_start sub_8095394
-sub_8095394: @ 8095394
- push {r4,lr}
- bl sub_80924A8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8095790
- lsls r0, 24
- lsrs r0, 24
- cmp r4, 0
- bne _080953B4
- cmp r0, 0
- bne _080953B4
- movs r0, 0
- b _080953B6
-_080953B4:
- movs r0, 0x1
-_080953B6:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8095394
-
- thumb_func_start sub_80953BC
-sub_80953BC: @ 80953BC
- push {r4,lr}
- ldr r4, _080953D4 @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- beq _080953FA
- cmp r0, 0x1
- bgt _080953D8
- cmp r0, 0
- beq _080953E2
- b _0809546A
- .align 2, 0
-_080953D4: .4byte gUnknown_2039828
-_080953D8:
- cmp r0, 0x2
- beq _08095426
- cmp r0, 0x3
- beq _08095444
- b _0809546A
-_080953E2:
- bl sub_80959A8
- movs r1, 0xFF
- lsls r1, 8
- movs r0, 0
- movs r2, 0x8
- bl sub_8095780
- movs r0, 0
- bl sub_8092BAC
- b _0809543A
-_080953FA:
- bl sub_8092BF8
- lsls r0, 24
- cmp r0, 0
- bne _0809546A
- bl sub_8095790
- lsls r0, 24
- cmp r0, 0
- bne _0809546A
- bl sub_8095918
- movs r0, 0x2
- bl sub_8094D14
- movs r0, 0x1
- bl sub_8092BAC
- movs r0, 0
- bl HideBg
- b _0809543A
-_08095426:
- bl sub_8092BF8
- lsls r0, 24
- cmp r0, 0
- bne _0809546A
- movs r0, 0
- bl sub_8094D14
- bl sub_8095A58
-_0809543A:
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _0809546A
-_08095444:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0809546A
- movs r0, 0x3
- bl stdpal_get
- movs r1, 0xD0
- movs r2, 0x20
- bl LoadPalette
- bl sub_8094D40
- movs r0, 0
- bl ShowBg
- movs r0, 0
- b _0809546C
-_0809546A:
- movs r0, 0x1
-_0809546C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80953BC
-
- thumb_func_start sub_8095474
-sub_8095474: @ 8095474
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0x1
- beq _080954B0
- cmp r0, 0x1
- bgt _0809548A
- cmp r0, 0
- beq _08095494
- b _08095518
-_0809548A:
- cmp r1, 0x2
- beq _080954D0
- cmp r1, 0x3
- beq _080954F0
- b _08095518
-_08095494:
- ldr r0, _080954AC @ =gUnknown_2039828
- ldr r1, [r0]
- ldrb r0, [r1, 0x9]
- cmp r0, 0
- beq _080954FE
- subs r0, 0x1
- strb r0, [r1, 0x9]
- movs r1, 0x80
- lsls r1, 3
- movs r0, 0
- b _080954E4
- .align 2, 0
-_080954AC: .4byte gUnknown_2039828
-_080954B0:
- ldr r0, _080954CC @ =gUnknown_2039828
- ldr r1, [r0]
- ldrb r2, [r1, 0x9]
- ldrb r0, [r1, 0xB]
- adds r0, r2, r0
- cmp r0, 0x4
- bgt _080954FE
- adds r0, r2, 0x1
- strb r0, [r1, 0x9]
- movs r1, 0xFC
- lsls r1, 8
- movs r0, 0
- b _080954E4
- .align 2, 0
-_080954CC: .4byte gUnknown_2039828
-_080954D0:
- ldr r0, _080954EC @ =gUnknown_2039828
- ldr r1, [r0]
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- beq _080954FE
- subs r0, 0x1
- strb r0, [r1, 0x8]
- movs r0, 0x80
- lsls r0, 3
- movs r1, 0
-_080954E4:
- movs r2, 0x6
- bl sub_8095780
- b _08095518
- .align 2, 0
-_080954EC: .4byte gUnknown_2039828
-_080954F0:
- ldr r0, _08095504 @ =gUnknown_2039828
- ldr r1, [r0]
- ldrb r2, [r1, 0x8]
- ldrb r0, [r1, 0xA]
- adds r0, r2, r0
- cmp r0, 0x5
- ble _08095508
-_080954FE:
- movs r0, 0
- b _0809551A
- .align 2, 0
-_08095504: .4byte gUnknown_2039828
-_08095508:
- adds r0, r2, 0x1
- strb r0, [r1, 0x8]
- movs r0, 0xFC
- lsls r0, 8
- movs r1, 0
- movs r2, 0x6
- bl sub_8095780
-_08095518:
- movs r0, 0x1
-_0809551A:
- pop {r1}
- bx r1
- thumb_func_end sub_8095474
-
- thumb_func_start sub_8095520
-sub_8095520: @ 8095520
- push {r4-r7,lr}
- ldr r6, _080955C0 @ =gUnknown_2039828
- ldr r2, [r6]
- ldrb r3, [r2, 0x2]
- ldrb r5, [r2, 0x6]
- subs r1, r3, r5
- cmp r1, 0
- bge _08095532
- negs r1, r1
-_08095532:
- ldrb r0, [r2, 0x4]
- subs r0, r3, r0
- cmp r0, 0
- bge _0809553C
- negs r0, r0
-_0809553C:
- subs r0, r1, r0
- lsls r0, 16
- lsrs r4, r0, 16
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x7]
- subs r3, r1, r0
- cmp r3, 0
- bge _0809554E
- negs r3, r3
-_0809554E:
- ldrb r2, [r2, 0x5]
- subs r0, r1, r2
- cmp r0, 0
- bge _08095558
- negs r0, r0
-_08095558:
- subs r0, r3, r0
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r0, r4, 16
- asrs r4, r0, 16
- cmp r4, 0
- ble _0809556C
- adds r0, r5, 0
- bl sub_80955C4
-_0809556C:
- cmp r4, 0
- bge _08095588
- ldr r2, [r6]
- ldrb r0, [r2, 0x4]
- ldrb r1, [r2, 0x3]
- ldrb r2, [r2, 0x5]
- bl sub_8095634
- ldr r2, [r6]
- ldrb r0, [r2, 0x6]
- ldrb r1, [r2, 0x3]
- ldrb r2, [r2, 0x5]
- bl sub_80955C4
-_08095588:
- lsls r0, r7, 16
- asrs r4, r0, 16
- cmp r4, 0
- ble _0809559C
- ldr r2, [r6]
- ldrb r0, [r2, 0x7]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x4]
- bl sub_80955FC
-_0809559C:
- cmp r4, 0
- bge _080955B8
- ldr r2, [r6]
- ldrb r0, [r2, 0x5]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x4]
- bl sub_809566C
- ldr r2, [r6]
- ldrb r0, [r2, 0x7]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x4]
- bl sub_80955FC
-_080955B8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080955C0: .4byte gUnknown_2039828
- thumb_func_end sub_8095520
-
- thumb_func_start sub_80955C4
-sub_80955C4: @ 80955C4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r4, 0
- lsls r2, 24
- lsrs r5, r2, 24
- adds r0, r5, 0
- cmp r4, r5
- bls _080955E2
- adds r4, r5, 0
- adds r5, r1, 0
- cmp r0, r5
- bhi _080955F4
-_080955E2:
- adds r1, r4, 0
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r6, 0
- bl sub_80956A4
- cmp r4, r5
- bls _080955E2
-_080955F4:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80955C4
-
- thumb_func_start sub_80955FC
-sub_80955FC: @ 80955FC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r4, 0
- lsls r2, 24
- lsrs r5, r2, 24
- adds r0, r5, 0
- cmp r4, r5
- bls _0809561A
- adds r4, r5, 0
- adds r5, r1, 0
- cmp r0, r5
- bhi _0809562C
-_0809561A:
- adds r0, r4, 0
- adds r1, r0, 0x1
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r6, 0
- bl sub_80956A4
- cmp r4, r5
- bls _0809561A
-_0809562C:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80955FC
-
- thumb_func_start sub_8095634
-sub_8095634: @ 8095634
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r4, 0
- lsls r2, 24
- lsrs r5, r2, 24
- adds r0, r5, 0
- cmp r4, r5
- bls _08095652
- adds r4, r5, 0
- adds r5, r1, 0
- cmp r0, r5
- bhi _08095664
-_08095652:
- adds r1, r4, 0
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r6, 0
- bl sub_809572C
- cmp r4, r5
- bls _08095652
-_08095664:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8095634
-
- thumb_func_start sub_809566C
-sub_809566C: @ 809566C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r4, 0
- lsls r2, 24
- lsrs r5, r2, 24
- adds r0, r5, 0
- cmp r4, r5
- bls _0809568A
- adds r4, r5, 0
- adds r5, r1, 0
- cmp r0, r5
- bhi _0809569C
-_0809568A:
- adds r0, r4, 0
- adds r1, r0, 0x1
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r6, 0
- bl sub_809572C
- cmp r4, r5
- bls _0809568A
-_0809569C:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_809566C
-
- thumb_func_start sub_80956A4
-sub_80956A4: @ 80956A4
- push {r4-r7,lr}
- sub sp, 0x1C
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 1
- adds r7, r0, r1
- lsls r4, r7, 1
- adds r4, r6, r4
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x41
- bl GetBoxMonDataFromSelectedBox
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0
- bl GetBoxMonDataFromSelectedBox
- adds r1, r0, 0
- cmp r5, 0
- beq _0809571A
- adds r0, r5, 0
- movs r2, 0x1
- bl GetMonIconPtr
- adds r4, r0, 0
- adds r0, r5, 0
- bl GetValidMonIconPalIndex
- adds r0, 0x8
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08095724 @ =sPSSData
- ldr r1, [r1]
- ldr r2, _08095728 @ =0x000021f0
- adds r1, r2
- ldrb r3, [r1]
- movs r2, 0x20
- str r2, [sp]
- str r2, [sp, 0x4]
- lsls r1, r6, 1
- adds r1, r6
- lsls r1, 3
- str r1, [sp, 0x8]
- lsls r1, r7, 3
- str r1, [sp, 0xC]
- str r2, [sp, 0x10]
- str r2, [sp, 0x14]
- str r0, [sp, 0x18]
- adds r0, r3, 0
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl BlitBitmapRectToWindow4BitTo8Bit
-_0809571A:
- add sp, 0x1C
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095724: .4byte sPSSData
-_08095728: .4byte 0x000021f0
- thumb_func_end sub_80956A4
-
- thumb_func_start sub_809572C
-sub_809572C: @ 809572C
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 1
- adds r5, r0, r1
- lsls r0, r5, 1
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x41
- bl GetBoxMonDataFromSelectedBox
- lsls r0, 16
- cmp r0, 0
- beq _0809576E
- ldr r0, _08095778 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _0809577C @ =0x000021f0
- adds r0, r1
- ldrb r0, [r0]
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 3
- lsls r3, r5, 3
- movs r1, 0x20
- str r1, [sp]
- str r1, [sp, 0x4]
- movs r1, 0
- bl FillWindowPixelRect8Bit
-_0809576E:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08095778: .4byte sPSSData
-_0809577C: .4byte 0x000021f0
- thumb_func_end sub_809572C
-
- thumb_func_start sub_8095780
-sub_8095780: @ 8095780
- ldr r3, _0809578C @ =gUnknown_2039828
- ldr r3, [r3]
- strh r0, [r3, 0xC]
- strh r1, [r3, 0xE]
- strh r2, [r3, 0x10]
- bx lr
- .align 2, 0
-_0809578C: .4byte gUnknown_2039828
- thumb_func_end sub_8095780
-
- thumb_func_start sub_8095790
-sub_8095790: @ 8095790
- push {r4,lr}
- ldr r4, _080957C4 @ =gUnknown_2039828
- ldr r1, [r4]
- ldrh r0, [r1, 0x10]
- cmp r0, 0
- beq _080957BA
- ldrh r1, [r1, 0xC]
- movs r0, 0
- movs r2, 0x1
- bl ChangeBgX
- ldr r0, [r4]
- ldrh r1, [r0, 0xE]
- movs r0, 0
- movs r2, 0x1
- bl ChangeBgY
- ldr r1, [r4]
- ldrh r0, [r1, 0x10]
- subs r0, 0x1
- strh r0, [r1, 0x10]
-_080957BA:
- ldr r0, [r4]
- ldrb r0, [r0, 0x10]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080957C4: .4byte gUnknown_2039828
- thumb_func_end sub_8095790
-
- thumb_func_start sub_80957C8
-sub_80957C8: @ 80957C8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, _0809589C @ =gUnknown_2039828
- ldr r1, [r4]
- ldrb r0, [r1, 0x4]
- ldrb r2, [r1, 0x2]
- cmp r0, r2
- bls _080957E0
- adds r0, r2, 0
-_080957E0:
- strb r0, [r1, 0x8]
- ldr r1, [r4]
- ldrb r0, [r1, 0x5]
- ldrb r2, [r1, 0x3]
- cmp r0, r2
- bls _080957EE
- adds r0, r2, 0
-_080957EE:
- strb r0, [r1, 0x9]
- ldr r2, [r4]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x4]
- subs r0, r1, r0
- cmp r0, 0
- bge _080957FE
- negs r0, r0
-_080957FE:
- adds r0, 0x1
- strb r0, [r2, 0xA]
- ldr r2, [r4]
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x5]
- subs r0, r1, r0
- cmp r0, 0
- bge _08095810
- negs r0, r0
-_08095810:
- adds r0, 0x1
- strb r0, [r2, 0xB]
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- movs r6, 0
- ldr r0, [r4]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r2, r1
- mov r8, r2
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r0, r1
- mov r9, r0
- adds r2, r1, 0
- cmp r2, r9
- bge _0809588C
-_08095838:
- lsls r0, r2, 1
- adds r0, r2
- ldr r3, _0809589C @ =gUnknown_2039828
- ldr r1, [r3]
- lsls r0, 1
- ldrb r3, [r1, 0x8]
- adds r0, r3
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r4, [r1, 0x8]
- adds r7, r2, 0x1
- cmp r4, r8
- bge _08095886
- mov r0, r8
- subs r4, r0, r4
-_08095856:
- mov r0, r10
- adds r1, r5, 0
- bl GetBoxedMonPtr
- adds r1, r0, 0
- ldr r2, _0809589C @ =gUnknown_2039828
- ldr r0, [r2]
- lsls r2, r6, 2
- adds r2, r6
- lsls r2, 4
- adds r0, r2
- adds r0, 0x14
- movs r2, 0x50
- bl memcpy
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- subs r4, 0x1
- cmp r4, 0
- bne _08095856
-_08095886:
- adds r2, r7, 0
- cmp r2, r9
- blt _08095838
-_0809588C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809589C: .4byte gUnknown_2039828
- thumb_func_end sub_80957C8
-
- thumb_func_start sub_80958A0
-sub_80958A0: @ 80958A0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r4, _08095914 @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r7, r2, r1
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r1, r0
- mov r9, r1
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, [r4]
- ldrb r2, [r0, 0x9]
- cmp r2, r9
- bge _08095908
-_080958CC:
- lsls r0, r2, 1
- adds r0, r2
- ldr r1, _08095914 @ =gUnknown_2039828
- ldr r1, [r1]
- lsls r0, 1
- ldrb r3, [r1, 0x8]
- adds r0, r3
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r4, [r1, 0x8]
- adds r6, r2, 0x1
- cmp r4, r7
- bge _08095902
- subs r4, r7, r4
-_080958E8:
- adds r0, r5, 0
- bl sub_809081C
- mov r0, r8
- adds r1, r5, 0
- bl sub_808BCB4
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- subs r4, 0x1
- cmp r4, 0
- bne _080958E8
-_08095902:
- adds r2, r6, 0
- cmp r2, r9
- blt _080958CC
-_08095908:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095914: .4byte gUnknown_2039828
- thumb_func_end sub_80958A0
-
- thumb_func_start sub_8095918
-sub_8095918: @ 8095918
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _080959A4 @ =gUnknown_2039828
- ldr r0, [r0]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r2, r1
- mov r8, r2
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r0, r1
- mov r10, r0
- movs r6, 0
- adds r2, r1, 0
- cmp r2, r10
- bge _08095994
-_0809593E:
- lsls r0, r2, 1
- adds r0, r2
- ldr r3, _080959A4 @ =gUnknown_2039828
- ldr r1, [r3]
- lsls r0, 1
- ldrb r4, [r1, 0x8]
- adds r0, r4
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r4, [r1, 0x8]
- adds r7, r2, 0x1
- cmp r4, r8
- bge _0809598E
- mov r9, r3
- mov r0, r8
- subs r4, r0, r4
-_0809595E:
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 4
- adds r1, 0x14
- mov r2, r9
- ldr r0, [r2]
- adds r0, r1
- movs r1, 0x5
- bl GetBoxMonData
- cmp r0, 0
- beq _0809597C
- adds r0, r5, 0
- bl sub_80901EC
-_0809597C:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- subs r4, 0x1
- cmp r4, 0
- bne _0809595E
-_0809598E:
- adds r2, r7, 0
- cmp r2, r10
- blt _0809593E
-_08095994:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080959A4: .4byte gUnknown_2039828
- thumb_func_end sub_8095918
-
- thumb_func_start sub_80959A8
-sub_80959A8: @ 80959A8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r4, _08095A54 @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r2, r1
- mov r10, r2
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r1, r0
- str r1, [sp]
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r7, 0
- ldr r0, [r4]
- ldrb r3, [r0, 0x9]
- ldr r0, [sp]
- cmp r3, r0
- bge _08095A42
-_080959DE:
- lsls r0, r3, 1
- adds r0, r3
- ldr r2, _08095A54 @ =gUnknown_2039828
- ldr r1, [r2]
- lsls r0, 1
- ldrb r4, [r1, 0x8]
- adds r0, r4
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r5, [r1, 0x8]
- adds r3, 0x1
- mov r9, r3
- cmp r5, r10
- bge _08095A3A
- mov r8, r2
- mov r0, r10
- subs r5, r0, r5
-_08095A00:
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 4
- adds r4, r0, 0
- adds r4, 0x14
- mov r1, r8
- ldr r0, [r1]
- adds r0, r4
- movs r1, 0x5
- bl GetBoxMonData
- cmp r0, 0
- beq _08095A28
- mov r0, r8
- ldr r2, [r0]
- adds r2, r4
- ldr r0, [sp, 0x4]
- adds r1, r6, 0
- bl CopyBoxMonFromAnyBox
-_08095A28:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- subs r5, 0x1
- cmp r5, 0
- bne _08095A00
-_08095A3A:
- mov r3, r9
- ldr r1, [sp]
- cmp r3, r1
- blt _080959DE
-_08095A42:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095A54: .4byte gUnknown_2039828
- thumb_func_end sub_80959A8
-
- thumb_func_start sub_8095A58
-sub_8095A58: @ 8095A58
- push {lr}
- sub sp, 0x8
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0
- movs r1, 0x4
- movs r2, 0
- bl SetBgAttribute
- movs r0, 0x8
- movs r1, 0x80
- bl ClearGpuRegBits
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_8095A58
-
- thumb_func_start sub_8095AA0
-sub_8095AA0: @ 8095AA0
- ldr r0, _08095AB8 @ =gUnknown_2039828
- ldr r2, [r0]
- ldrb r1, [r2, 0x3]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 1
- ldrb r2, [r2, 0x2]
- adds r0, r2
- lsls r0, 24
- lsrs r0, 24
- bx lr
- .align 2, 0
-_08095AB8: .4byte gUnknown_2039828
- thumb_func_end sub_8095AA0
-
- thumb_func_start sub_8095ABC
-sub_8095ABC: @ 8095ABC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _08095B28 @ =gUnknown_2039828
- ldr r0, [r0]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r2, r1
- mov r9, r2
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r0, r1, r0
- str r0, [sp]
- movs r7, 0
- adds r6, r1, 0
- cmp r6, r0
- bge _08095B4A
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 1
- mov r8, r0
-_08095AEC:
- ldr r2, _08095B28 @ =gUnknown_2039828
- ldr r1, [r2]
- ldrb r0, [r1, 0x8]
- add r0, r8
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r4, [r1, 0x8]
- cmp r4, r9
- bge _08095B3E
- mov r10, r2
-_08095B00:
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 4
- adds r1, 0x14
- mov r2, r10
- ldr r0, [r2]
- adds r0, r1
- movs r1, 0x5
- bl GetBoxMonData
- cmp r0, 0
- beq _08095B2C
- adds r0, r5, 0
- movs r1, 0x5
- bl GetBoxMonDataFromSelectedBox
- cmp r0, 0
- beq _08095B2C
- movs r0, 0
- b _08095B4C
- .align 2, 0
-_08095B28: .4byte gUnknown_2039828
-_08095B2C:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x1
- cmp r4, r9
- blt _08095B00
-_08095B3E:
- movs r0, 0x6
- add r8, r0
- adds r6, 0x1
- ldr r2, [sp]
- cmp r6, r2
- blt _08095AEC
-_08095B4A:
- movs r0, 0x1
-_08095B4C:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8095ABC
-
- thumb_func_start sub_8095B5C
-sub_8095B5C: @ 8095B5C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- ldr r3, _08095C58 @ =sPSSData
- ldr r0, [r3]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _08095C3C
- ldr r0, _08095C5C @ =gUnknown_3000FE8
- str r0, [sp, 0x18]
- ldr r1, _08095C60 @ =0xffff0000
- add r2, sp, 0x18
- ldr r0, [r2, 0x4]
- ands r0, r1
- movs r1, 0x80
- lsls r1, 2
- orrs r0, r1
- str r0, [r2, 0x4]
- mov r1, sp
- ldr r0, _08095C64 @ =gUnknown_83D3728
- ldm r0!, {r4-r6}
- stm r1!, {r4-r6}
- ldm r0!, {r4-r6}
- stm r1!, {r4-r6}
- movs r7, 0
- mov r9, r2
- mov r8, r3
- movs r0, 0
- mov r10, r0
-_08095B9C:
- adds r6, r7, 0x7
- lsls r1, r6, 16
- mov r2, r9
- ldrh r0, [r2, 0x4]
- orrs r0, r1
- str r0, [r2, 0x4]
- mov r0, r9
- bl LoadCompressedSpriteSheet
- mov r4, r9
- ldrh r0, [r4, 0x6]
- bl GetSpriteTileStartByTag
- mov r5, r8
- ldr r1, [r5]
- lsls r5, r7, 4
- ldr r2, _08095C68 @ =0x000021f8
- adds r1, r2
- adds r1, r5
- lsls r0, 16
- lsrs r0, 11
- ldr r4, _08095C6C @ =0x06010000
- adds r0, r4
- str r0, [r1]
- ldr r0, _08095C70 @ =0xffffdacb
- adds r4, r7, r0
- lsls r0, r4, 16
- lsrs r0, 16
- bl AllocSpritePalette
- mov r2, r8
- ldr r1, [r2]
- adds r1, r5
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08095C74 @ =0x000021fc
- adds r1, r2
- strh r0, [r1]
- ldrh r0, [r1]
- lsls r0, 4
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2
- strh r0, [r1]
- mov r0, sp
- strh r6, [r0]
- strh r4, [r0, 0x2]
- movs r1, 0
- movs r2, 0
- movs r3, 0xB
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- mov r4, r8
- ldr r2, [r4]
- ldr r6, _08095C78 @ =0x000021f4
- adds r2, r6
- adds r2, r5
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08095C7C @ =gSprites
- adds r1, r0
- str r1, [r2]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, r5
- movs r1, 0x88
- lsls r1, 6
- adds r0, r1
- mov r2, r10
- strb r2, [r0]
- adds r7, 0x1
- cmp r7, 0x2
- ble _08095B9C
-_08095C3C:
- ldr r0, _08095C58 @ =sPSSData
- ldr r0, [r0]
- ldr r4, _08095C80 @ =0x00002224
- adds r0, r4
- movs r1, 0
- strh r1, [r0]
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095C58: .4byte sPSSData
-_08095C5C: .4byte gUnknown_3000FE8
-_08095C60: .4byte 0xffff0000
-_08095C64: .4byte gUnknown_83D3728
-_08095C68: .4byte 0x000021f8
-_08095C6C: .4byte 0x06010000
-_08095C70: .4byte 0xffffdacb
-_08095C74: .4byte 0x000021fc
-_08095C78: .4byte 0x000021f4
-_08095C7C: .4byte gSprites
-_08095C80: .4byte 0x00002224
- thumb_func_end sub_8095B5C
-
- thumb_func_start sub_8095C84
-sub_8095C84: @ 8095C84
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 24
- lsrs r7, r1, 24
- ldr r0, _08095CB8 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _08095D36
- mov r0, r8
- adds r1, r7, 0
- bl sub_8096210
- cmp r0, 0
- bne _08095D36
- mov r0, r8
- cmp r0, 0
- beq _08095CBC
- cmp r0, 0x1
- beq _08095CD2
- b _08095D36
- .align 2, 0
-_08095CB8: .4byte sPSSData
-_08095CBC:
- adds r0, r7, 0
- movs r1, 0x5
- bl GetBoxMonDataFromSelectedBox
- cmp r0, 0
- beq _08095D36
- adds r0, r7, 0
- movs r1, 0xC
- bl GetBoxMonDataFromSelectedBox
- b _08095CF0
-_08095CD2:
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _08095D40 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x5
- bl GetMonData
- cmp r0, 0
- beq _08095D36
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
-_08095CF0:
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _08095D36
- adds r0, r4, 0
- bl GetItemIconPic
- adds r6, r0, 0
- adds r0, r4, 0
- bl GetItemIconPalette
- adds r5, r0, 0
- bl sub_80961D8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- mov r1, r8
- adds r2, r7, 0
- bl sub_80962F0
- adds r0, r4, 0
- adds r1, r6, 0
- adds r2, r5, 0
- bl sub_8096408
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_80964B8
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_8096624
-_08095D36:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095D40: .4byte gPlayerParty
- thumb_func_end sub_8095C84
-
- thumb_func_start sub_8095D44
-sub_8095D44: @ 8095D44
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _08095D80 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _08095D7A
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_8096258
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x2
- bl sub_80964B8
- adds r0, r4, 0
- movs r1, 0
- adds r2, r6, 0
- adds r3, r5, 0
- bl sub_80964E8
-_08095D7A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08095D80: .4byte sPSSData
- thumb_func_end sub_8095D44
-
- thumb_func_start sub_8095D84
-sub_8095D84: @ 8095D84
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- adds r7, r5, 0
- ldr r0, _08095DE8 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _08095E14
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_8096258
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r1, 0
- mov r0, sp
- strh r1, [r0]
- adds r0, r4, 0
- movs r1, 0x3
- bl sub_80964B8
- adds r0, r4, 0
- movs r1, 0x1
- adds r2, r6, 0
- adds r3, r5, 0
- bl sub_80964E8
- adds r0, r4, 0
- movs r1, 0x2
- movs r2, 0
- bl sub_80962F0
- cmp r6, 0
- bne _08095DEC
- adds r0, r5, 0
- movs r1, 0xC
- mov r2, sp
- bl SetBoxMonDataFromSelectedBox
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8090850
- b _08095E04
- .align 2, 0
-_08095DE8: .4byte sPSSData
-_08095DEC:
- movs r0, 0x64
- muls r0, r7
- ldr r1, _08095E1C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- adds r0, r7, 0
- movs r1, 0x1
- bl sub_8090C84
-_08095E04:
- ldr r0, _08095E20 @ =sPSSData
- ldr r0, [r0]
- ldr r2, _08095E24 @ =0x00000ce2
- adds r1, r0, r2
- ldrh r1, [r1]
- ldr r2, _08095E28 @ =0x00002224
- adds r0, r2
- strh r1, [r0]
-_08095E14:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095E1C: .4byte gPlayerParty
-_08095E20: .4byte sPSSData
-_08095E24: .4byte 0x00000ce2
-_08095E28: .4byte 0x00002224
- thumb_func_end sub_8095D84
-
- thumb_func_start sub_8095E2C
-sub_8095E2C: @ 8095E2C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r5, 0
- bl GetItemIconPic
- mov r8, r0
- adds r0, r5, 0
- bl GetItemIconPalette
- adds r6, r0, 0
- bl sub_80961D8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- mov r1, r8
- adds r2, r6, 0
- bl sub_8096408
- adds r0, r4, 0
- movs r1, 0x6
- bl sub_80964B8
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0
- movs r3, 0
- bl sub_80964E8
- adds r0, r4, 0
- movs r1, 0x2
- movs r2, 0
- bl sub_80962F0
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_8096624
- ldr r0, _08095E98 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08095E9C @ =0x00002224
- adds r0, r1
- strh r5, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08095E98: .4byte sPSSData
-_08095E9C: .4byte 0x00002224
- thumb_func_end sub_8095E2C
-
- thumb_func_start sub_8095EA0
-sub_8095EA0: @ 8095EA0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, 24
- lsrs r7, r1, 24
- ldr r0, _08095F08 @ =sPSSData
- mov r8, r0
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _08095F5E
- mov r0, r9
- adds r1, r7, 0
- bl sub_8096258
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- movs r1, 0x3
- bl sub_80964B8
- adds r0, r4, 0
- movs r1, 0x3
- movs r2, 0x2
- movs r3, 0
- bl sub_80964E8
- mov r1, r9
- cmp r1, 0
- bne _08095F10
- adds r0, r7, 0
- movs r1, 0xC
- bl GetBoxMonDataFromSelectedBox
- lsls r0, 16
- lsrs r6, r0, 16
- mov r0, r8
- ldr r2, [r0]
- ldr r4, _08095F0C @ =0x00002224
- adds r2, r4
- adds r0, r7, 0
- movs r1, 0xC
- bl SetBoxMonDataFromSelectedBox
- mov r1, r8
- ldr r0, [r1]
- adds r0, r4
- b _08095F3C
- .align 2, 0
-_08095F08: .4byte sPSSData
-_08095F0C: .4byte 0x00002224
-_08095F10:
- movs r0, 0x64
- adds r4, r7, 0
- muls r4, r0
- ldr r0, _08095F6C @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r6, r0, 16
- mov r0, r8
- ldr r2, [r0]
- ldr r5, _08095F70 @ =0x00002224
- adds r2, r5
- adds r0, r4, 0
- movs r1, 0xC
- bl SetMonData
- mov r1, r8
- ldr r0, [r1]
- adds r0, r5
-_08095F3C:
- strh r6, [r0]
- movs r0, 0x2
- movs r1, 0
- bl sub_8096258
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- movs r1, 0x4
- bl sub_80964B8
- adds r0, r4, 0
- movs r1, 0x4
- mov r2, r9
- adds r3, r7, 0
- bl sub_80964E8
-_08095F5E:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095F6C: .4byte gPlayerParty
-_08095F70: .4byte 0x00002224
- thumb_func_end sub_8095EA0
-
- thumb_func_start sub_8095F74
-sub_8095F74: @ 8095F74
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- mov r8, r5
- ldr r6, _08095FCC @ =sPSSData
- ldr r0, [r6]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _08095FF4
- movs r0, 0x2
- movs r1, 0
- bl sub_8096258
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x4
- bl sub_80964B8
- adds r0, r4, 0
- movs r1, 0x2
- adds r2, r7, 0
- adds r3, r5, 0
- bl sub_80964E8
- cmp r7, 0
- bne _08095FD4
- ldr r2, [r6]
- ldr r0, _08095FD0 @ =0x00002224
- adds r2, r0
- adds r0, r5, 0
- movs r1, 0xC
- bl SetBoxMonDataFromSelectedBox
- adds r0, r5, 0
- movs r1, 0
- bl sub_8090850
- b _08095FF4
- .align 2, 0
-_08095FCC: .4byte sPSSData
-_08095FD0: .4byte 0x00002224
-_08095FD4:
- movs r0, 0x64
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- ldr r1, _08096000 @ =gPlayerParty
- adds r0, r1
- ldr r2, [r6]
- ldr r1, _08096004 @ =0x00002224
- adds r2, r1
- movs r1, 0xC
- bl SetMonData
- mov r0, r8
- movs r1, 0
- bl sub_8090C84
-_08095FF4:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08096000: .4byte gPlayerParty
-_08096004: .4byte 0x00002224
- thumb_func_end sub_8095F74
-
- thumb_func_start sub_8096008
-sub_8096008: @ 8096008
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- adds r7, r5, 0
- ldr r0, _08096060 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _0809607C
- movs r1, 0
- mov r0, sp
- strh r1, [r0]
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_8096258
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x2
- bl sub_80964B8
- adds r0, r4, 0
- movs r1, 0
- adds r2, r6, 0
- adds r3, r5, 0
- bl sub_80964E8
- cmp r6, 0
- bne _08096064
- adds r0, r5, 0
- movs r1, 0xC
- mov r2, sp
- bl SetBoxMonDataFromSelectedBox
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8090850
- b _0809607C
- .align 2, 0
-_08096060: .4byte sPSSData
-_08096064:
- movs r0, 0x64
- muls r0, r7
- ldr r1, _08096084 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- adds r0, r7, 0
- movs r1, 0x1
- bl sub_8090C84
-_0809607C:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08096084: .4byte gPlayerParty
- thumb_func_end sub_8096008
-
- thumb_func_start sub_8096088
-sub_8096088: @ 8096088
- push {r4,lr}
- ldr r0, _080960BC @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _080960B6
- movs r0, 0x2
- movs r1, 0
- bl sub_8096258
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x5
- bl sub_80964B8
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x2
- movs r3, 0
- bl sub_80964E8
-_080960B6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080960BC: .4byte sPSSData
- thumb_func_end sub_8096088
-
- thumb_func_start sub_80960C0
-sub_80960C0: @ 80960C0
- push {r4,lr}
- ldr r0, _08096108 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _08096100
- movs r4, 0
-_080960CE:
- ldr r0, _08096108 @ =sPSSData
- ldr r1, [r0]
- lsls r0, r4, 4
- adds r1, r0
- movs r2, 0x88
- lsls r2, 6
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _080960FA
- subs r2, 0x2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080960FA
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0x7
- movs r2, 0x2
- movs r3, 0
- bl sub_80964E8
-_080960FA:
- adds r4, 0x1
- cmp r4, 0x2
- ble _080960CE
-_08096100:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08096108: .4byte sPSSData
- thumb_func_end sub_80960C0
-
- thumb_func_start sub_809610C
-sub_809610C: @ 809610C
- push {r4,r5,lr}
- movs r5, 0
- ldr r0, _08096148 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _0809614C @ =0x000021f4
- adds r4, r0, r1
- adds r3, r0, 0
-_0809611A:
- movs r1, 0x88
- lsls r1, 6
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08096158
- ldr r2, [r4]
- adds r0, r2, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x28
- ands r0, r1
- cmp r0, 0x8
- beq _08096144
- ldr r1, [r2, 0x1C]
- ldr r0, _08096150 @ =SpriteCallbackDummy
- cmp r1, r0
- beq _08096158
- ldr r0, _08096154 @ =sub_80969BC
- cmp r1, r0
- beq _08096158
-_08096144:
- movs r0, 0x1
- b _08096164
- .align 2, 0
-_08096148: .4byte sPSSData
-_0809614C: .4byte 0x000021f4
-_08096150: .4byte SpriteCallbackDummy
-_08096154: .4byte sub_80969BC
-_08096158:
- adds r4, 0x10
- adds r3, 0x10
- adds r5, 0x1
- cmp r5, 0x2
- ble _0809611A
- movs r0, 0
-_08096164:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_809610C
-
- thumb_func_start sub_809616C
-sub_809616C: @ 809616C
- push {lr}
- ldr r0, _08096190 @ =sPSSData
- ldr r1, [r0]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x3
- bne _080961A0
- movs r2, 0
- ldr r0, _08096194 @ =0x000021fe
- adds r1, r0
-_0809617E:
- ldrb r0, [r1, 0x2]
- cmp r0, 0
- beq _08096198
- ldrb r0, [r1]
- cmp r0, 0x2
- bne _08096198
- movs r0, 0x1
- b _080961A2
- .align 2, 0
-_08096190: .4byte sPSSData
-_08096194: .4byte 0x000021fe
-_08096198:
- adds r1, 0x10
- adds r2, 0x1
- cmp r2, 0x2
- ble _0809617E
-_080961A0:
- movs r0, 0
-_080961A2:
- pop {r1}
- bx r1
- thumb_func_end sub_809616C
-
- thumb_func_start sub_80961A8
-sub_80961A8: @ 80961A8
- push {lr}
- ldr r0, _080961BC @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080961C0 @ =0x00002224
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetName
- pop {r1}
- bx r1
- .align 2, 0
-_080961BC: .4byte sPSSData
-_080961C0: .4byte 0x00002224
- thumb_func_end sub_80961A8
-
- thumb_func_start sub_80961C4
-sub_80961C4: @ 80961C4
- ldr r0, _080961D0 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080961D4 @ =0x00002224
- adds r0, r1
- ldrh r0, [r0]
- bx lr
- .align 2, 0
-_080961D0: .4byte sPSSData
-_080961D4: .4byte 0x00002224
- thumb_func_end sub_80961C4
-
- thumb_func_start sub_80961D8
-sub_80961D8: @ 80961D8
- push {r4,r5,lr}
- movs r2, 0
- ldr r5, _080961F8 @ =sPSSData
- movs r3, 0x88
- lsls r3, 6
- movs r4, 0x1
-_080961E4:
- ldr r0, [r5]
- lsls r1, r2, 4
- adds r0, r1
- adds r1, r0, r3
- ldrb r0, [r1]
- cmp r0, 0
- bne _080961FC
- strb r4, [r1]
- adds r0, r2, 0
- b _08096208
- .align 2, 0
-_080961F8: .4byte sPSSData
-_080961FC:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x2
- bls _080961E4
- movs r0, 0x3
-_08096208:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80961D8
-
- thumb_func_start sub_8096210
-sub_8096210: @ 8096210
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r1, 24
- movs r3, 0
- ldr r0, _08096244 @ =sPSSData
- ldr r2, [r0]
-_08096220:
- movs r5, 0x88
- lsls r5, 6
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, 0
- beq _08096248
- subs r5, 0x2
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, r4
- bne _08096248
- adds r5, 0x1
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, r1
- bne _08096248
- movs r0, 0x1
- b _08096252
- .align 2, 0
-_08096244: .4byte sPSSData
-_08096248:
- adds r2, 0x10
- adds r3, 0x1
- cmp r3, 0x2
- ble _08096220
- movs r0, 0
-_08096252:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8096210
-
- thumb_func_start sub_8096258
-sub_8096258: @ 8096258
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- movs r3, 0
- ldr r0, _08096290 @ =sPSSData
- ldr r1, [r0]
-_08096268:
- lsls r0, r3, 4
- adds r2, r1, r0
- movs r6, 0x88
- lsls r6, 6
- adds r0, r2, r6
- ldrb r0, [r0]
- cmp r0, 0
- beq _08096294
- subs r6, 0x2
- adds r0, r2, r6
- ldrb r0, [r0]
- cmp r0, r5
- bne _08096294
- adds r6, 0x1
- adds r0, r2, r6
- ldrb r0, [r0]
- cmp r0, r4
- bne _08096294
- adds r0, r3, 0
- b _080962A0
- .align 2, 0
-_08096290: .4byte sPSSData
-_08096294:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x2
- bls _08096268
- movs r0, 0x3
-_080962A0:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8096258
-
- thumb_func_start sub_80962A8
-sub_80962A8: @ 80962A8
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r2, 0
- ldr r0, _080962D4 @ =sPSSData
- ldr r3, [r0]
- ldr r0, _080962D8 @ =0x000021f4
- adds r4, r3, r0
- movs r6, 0x88
- lsls r6, 6
-_080962BA:
- lsls r1, r2, 4
- adds r0, r3, r1
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0
- beq _080962DC
- adds r0, r4, r1
- ldr r0, [r0]
- cmp r0, r5
- bne _080962DC
- adds r0, r2, 0
- b _080962E8
- .align 2, 0
-_080962D4: .4byte sPSSData
-_080962D8: .4byte 0x000021f4
-_080962DC:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x2
- bls _080962BA
- movs r0, 0x3
-_080962E8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80962A8
-
- thumb_func_start sub_80962F0
-sub_80962F0: @ 80962F0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- lsls r2, 24
- lsrs r7, r2, 24
- cmp r5, 0x2
- bhi _080963EE
- cmp r1, 0
- beq _0809631C
- cmp r1, 0x1
- beq _08096378
- ldr r4, _08096318 @ =sPSSData
- lsls r3, r5, 4
- b _080963D8
- .align 2, 0
-_08096318: .4byte sPSSData
-_0809631C:
- adds r0, r7, 0
- movs r1, 0x6
- bl __umodsi3
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r7, 0
- movs r1, 0x6
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _08096370 @ =sPSSData
- ldr r2, [r6]
- lsls r5, 4
- ldr r1, _08096374 @ =0x000021f4
- adds r2, r1
- adds r2, r5
- ldr r3, [r2]
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 3
- adds r1, 0x70
- strh r1, [r3, 0x20]
- ldr r3, [r2]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 3
- adds r1, 0x38
- strh r1, [r3, 0x22]
- ldr r2, [r2]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2, 0x5]
- adds r4, r6, 0
- adds r3, r5, 0
- b _080963D8
- .align 2, 0
-_08096370: .4byte sPSSData
-_08096374: .4byte 0x000021f4
-_08096378:
- cmp r7, 0
- bne _080963A0
- ldr r4, _08096398 @ =sPSSData
- ldr r0, [r4]
- lsls r3, r5, 4
- ldr r1, _0809639C @ =0x000021f4
- adds r0, r1
- adds r0, r3
- ldr r2, [r0]
- movs r1, 0x74
- strh r1, [r2, 0x20]
- ldr r1, [r0]
- movs r0, 0x4C
- strh r0, [r1, 0x22]
- b _080963C0
- .align 2, 0
-_08096398: .4byte sPSSData
-_0809639C: .4byte 0x000021f4
-_080963A0:
- ldr r4, _080963F8 @ =sPSSData
- ldr r0, [r4]
- lsls r3, r5, 4
- ldr r1, _080963FC @ =0x000021f4
- adds r0, r1
- adds r0, r3
- ldr r2, [r0]
- movs r1, 0xA4
- strh r1, [r2, 0x20]
- ldr r2, [r0]
- subs r1, r7, 0x1
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, 0x1C
- strh r0, [r2, 0x22]
-_080963C0:
- ldr r0, [r4]
- ldr r1, _080963FC @ =0x000021f4
- adds r0, r1
- adds r0, r3
- ldr r2, [r0]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x5]
-_080963D8:
- ldr r0, [r4]
- adds r0, r3
- ldr r1, _08096400 @ =0x000021fe
- adds r0, r1
- mov r1, r8
- strb r1, [r0]
- ldr r0, [r4]
- adds r0, r3
- ldr r1, _08096404 @ =0x000021ff
- adds r0, r1
- strb r7, [r0]
-_080963EE:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080963F8: .4byte sPSSData
-_080963FC: .4byte 0x000021f4
-_08096400: .4byte 0x000021fe
-_08096404: .4byte 0x000021ff
- thumb_func_end sub_80962F0
-
- thumb_func_start sub_8096408
-sub_8096408: @ 8096408
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- mov r8, r1
- mov r9, r2
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x2
- bhi _08096490
- movs r0, 0
- str r0, [sp]
- ldr r4, _080964A0 @ =sPSSData
- ldr r1, [r4]
- ldr r6, _080964A4 @ =0x000042bc
- adds r1, r6
- ldr r2, _080964A8 @ =0x01000080
- mov r0, sp
- bl CpuFastSet
- ldr r1, [r4]
- ldr r5, _080964AC @ =0x000022bc
- adds r1, r5
- mov r0, r8
- bl LZ77UnCompWram
- lsls r7, 4
- mov r8, r7
- adds r7, r4, 0
- movs r4, 0x2
-_08096446:
- ldr r1, [r7]
- adds r0, r1, r5
- adds r1, r6
- movs r2, 0x18
- bl CpuFastSet
- adds r6, 0x80
- adds r5, 0x60
- subs r4, 0x1
- cmp r4, 0
- bge _08096446
- ldr r5, _080964A0 @ =sPSSData
- ldr r1, [r5]
- ldr r4, _080964A4 @ =0x000042bc
- adds r0, r1, r4
- ldr r2, _080964B0 @ =0x000021f8
- adds r1, r2
- add r1, r8
- ldr r1, [r1]
- movs r2, 0x80
- bl CpuFastSet
- ldr r1, [r5]
- adds r1, r4
- mov r0, r9
- bl LZ77UnCompWram
- ldr r0, [r5]
- adds r4, r0, r4
- add r0, r8
- ldr r1, _080964B4 @ =0x000021fc
- adds r0, r1
- ldrh r1, [r0]
- adds r0, r4, 0
- movs r2, 0x20
- bl LoadPalette
-_08096490:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080964A0: .4byte sPSSData
-_080964A4: .4byte 0x000042bc
-_080964A8: .4byte 0x01000080
-_080964AC: .4byte 0x000022bc
-_080964B0: .4byte 0x000021f8
-_080964B4: .4byte 0x000021fc
- thumb_func_end sub_8096408
-
- thumb_func_start sub_80964B8
-sub_80964B8: @ 80964B8
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- cmp r2, 0x2
- bhi _080964DA
- ldr r0, _080964E0 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r2, 4
- ldr r2, _080964E4 @ =0x000021f4
- adds r0, r2
- adds r0, r1
- ldr r0, [r0]
- adds r1, r3, 0
- bl StartSpriteAffineAnim
-_080964DA:
- pop {r0}
- bx r0
- .align 2, 0
-_080964E0: .4byte sPSSData
-_080964E4: .4byte 0x000021f4
- thumb_func_end sub_80964B8
-
- thumb_func_start sub_80964E8
-sub_80964E8: @ 80964E8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r0, r1, 24
- lsls r2, 24
- lsrs r5, r2, 24
- lsls r3, 24
- lsrs r3, 24
- cmp r4, 0x2
- bls _08096500
- b _08096612
-_08096500:
- cmp r0, 0x7
- bls _08096506
- b _08096612
-_08096506:
- lsls r0, 2
- ldr r1, _08096510 @ =_08096514
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08096510: .4byte _08096514
- .align 2, 0
-_08096514:
- .4byte _08096534
- .4byte _08096558
- .4byte _0809657C
- .4byte _080965A8
- .4byte _080965D4
- .4byte _08096612
- .4byte _08096612
- .4byte _08096600
-_08096534:
- ldr r0, _0809654C @ =sPSSData
- ldr r0, [r0]
- lsls r1, r4, 4
- ldr r2, _08096550 @ =0x000021f4
- adds r0, r2
- adds r0, r1
- ldr r1, [r0]
- strh r4, [r1, 0x2E]
- ldr r1, [r0]
- ldr r0, _08096554 @ =sub_809692C
- b _08096610
- .align 2, 0
-_0809654C: .4byte sPSSData
-_08096550: .4byte 0x000021f4
-_08096554: .4byte sub_809692C
-_08096558:
- ldr r0, _08096570 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r4, 4
- ldr r2, _08096574 @ =0x000021f4
- adds r0, r2
- adds r0, r1
- ldr r2, [r0]
- movs r1, 0
- strh r1, [r2, 0x2E]
- ldr r1, [r0]
- ldr r0, _08096578 @ =sub_8096958
- b _08096610
- .align 2, 0
-_08096570: .4byte sPSSData
-_08096574: .4byte 0x000021f4
-_08096578: .4byte sub_8096958
-_0809657C:
- ldr r0, _0809659C @ =sPSSData
- ldr r0, [r0]
- lsls r1, r4, 4
- ldr r2, _080965A0 @ =0x000021f4
- adds r0, r2
- adds r0, r1
- ldr r2, [r0]
- movs r1, 0
- strh r1, [r2, 0x2E]
- ldr r1, [r0]
- strh r5, [r1, 0x3A]
- ldr r1, [r0]
- strh r3, [r1, 0x3C]
- ldr r1, [r0]
- ldr r0, _080965A4 @ =sub_80969F4
- b _08096610
- .align 2, 0
-_0809659C: .4byte sPSSData
-_080965A0: .4byte 0x000021f4
-_080965A4: .4byte sub_80969F4
-_080965A8:
- ldr r0, _080965C8 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r4, 4
- ldr r2, _080965CC @ =0x000021f4
- adds r0, r2
- adds r0, r1
- ldr r2, [r0]
- movs r1, 0
- strh r1, [r2, 0x2E]
- ldr r2, [r0]
- ldr r1, _080965D0 @ =sub_8096A74
- str r1, [r2, 0x1C]
- strh r5, [r2, 0x3A]
- ldr r0, [r0]
- strh r3, [r0, 0x3C]
- b _08096612
- .align 2, 0
-_080965C8: .4byte sPSSData
-_080965CC: .4byte 0x000021f4
-_080965D0: .4byte sub_8096A74
-_080965D4:
- ldr r0, _080965F4 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r4, 4
- ldr r2, _080965F8 @ =0x000021f4
- adds r0, r2
- adds r0, r1
- ldr r2, [r0]
- movs r1, 0
- strh r1, [r2, 0x2E]
- ldr r1, [r0]
- strh r5, [r1, 0x3A]
- ldr r1, [r0]
- strh r3, [r1, 0x3C]
- ldr r1, [r0]
- ldr r0, _080965FC @ =sub_8096B10
- b _08096610
- .align 2, 0
-_080965F4: .4byte sPSSData
-_080965F8: .4byte 0x000021f4
-_080965FC: .4byte sub_8096B10
-_08096600:
- ldr r0, _08096618 @ =sPSSData
- ldr r0, [r0]
- lsls r1, r4, 4
- ldr r2, _0809661C @ =0x000021f4
- adds r0, r2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, _08096620 @ =sub_8096BAC
-_08096610:
- str r0, [r1, 0x1C]
-_08096612:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08096618: .4byte sPSSData
-_0809661C: .4byte 0x000021f4
-_08096620: .4byte sub_8096BAC
- thumb_func_end sub_80964E8
-
- thumb_func_start sub_8096624
-sub_8096624: @ 8096624
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- cmp r2, 0x2
- bhi _08096666
- ldr r1, _0809666C @ =sPSSData
- ldr r0, [r1]
- lsls r2, 4
- adds r0, r2
- movs r3, 0x88
- lsls r3, 6
- adds r0, r3
- strb r4, [r0]
- ldr r0, [r1]
- ldr r1, _08096670 @ =0x000021f4
- adds r0, r1
- adds r0, r2
- ldr r0, [r0]
- movs r3, 0
- cmp r4, 0
- bne _08096654
- movs r3, 0x1
-_08096654:
- adds r2, r0, 0
- adds r2, 0x3E
- lsls r3, 2
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- orrs r0, r3
- strb r0, [r2]
-_08096666:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809666C: .4byte sPSSData
-_08096670: .4byte 0x000021f4
- thumb_func_end sub_8096624
-
- thumb_func_start GetItemIconPic
-GetItemIconPic: @ 8096674
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0
- bl GetItemIconGfxPtr
- pop {r1}
- bx r1
- thumb_func_end GetItemIconPic
-
- thumb_func_start GetItemIconPalette
-GetItemIconPalette: @ 8096684
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetItemIconGfxPtr
- pop {r1}
- bx r1
- thumb_func_end GetItemIconPalette
-
- thumb_func_start sub_8096694
-sub_8096694: @ 8096694
- push {r4,lr}
- sub sp, 0x14
- bl sub_809616C
- lsls r0, 24
- cmp r0, 0
- beq _080966B4
- ldr r0, _080966AC @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080966B0 @ =0x00002224
- b _080966BA
- .align 2, 0
-_080966AC: .4byte sPSSData
-_080966B0: .4byte 0x00002224
-_080966B4:
- ldr r0, _080966EC @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080966F0 @ =0x00000ce2
-_080966BA:
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetDescription
- adds r4, r0, 0
- movs r0, 0x2
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x2
- movs r1, 0x2
- adds r2, r4, 0
- movs r3, 0x2
- bl AddTextPrinterParameterized5
- add sp, 0x14
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080966EC: .4byte sPSSData
-_080966F0: .4byte 0x00000ce2
- thumb_func_end sub_8096694
-
- thumb_func_start sub_80966F4
-sub_80966F4: @ 80966F4
- push {lr}
- ldr r0, _0809671C @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08096720 @ =0x00002226
- adds r0, r1
- movs r1, 0x19
- strh r1, [r0]
- ldr r1, _08096724 @ =gUnknown_83D35DC
- movs r3, 0xD2
- lsls r3, 1
- movs r0, 0
- movs r2, 0x80
- bl LoadBgTiles
- movs r0, 0
- bl sub_8096898
- pop {r0}
- bx r0
- .align 2, 0
-_0809671C: .4byte sPSSData
-_08096720: .4byte 0x00002226
-_08096724: .4byte gUnknown_83D35DC
- thumb_func_end sub_80966F4
-
- thumb_func_start sub_8096728
-sub_8096728: @ 8096728
- push {r4,r5,lr}
- sub sp, 0x10
- ldr r0, _08096740 @ =sPSSData
- ldr r0, [r0]
- ldr r2, _08096744 @ =0x00002226
- adds r1, r0, r2
- ldrh r0, [r1]
- cmp r0, 0
- bne _08096748
- movs r0, 0
- b _080967AE
- .align 2, 0
-_08096740: .4byte sPSSData
-_08096744: .4byte 0x00002226
-_08096748:
- subs r0, 0x1
- strh r0, [r1]
- ldrh r1, [r1]
- movs r0, 0x19
- subs r5, r0, r1
- movs r4, 0
- cmp r4, r5
- bge _08096798
-_08096758:
- movs r0, 0
- movs r1, 0xA
- bl GetBgAttribute
- adds r1, r0, 0
- ldr r0, _080967B8 @ =sPSSData
- ldr r0, [r0]
- ldr r2, _080967BC @ =0x00002226
- adds r0, r2
- adds r1, 0x14
- ldrh r0, [r0]
- adds r1, r0
- adds r1, r4
- lsls r1, 16
- lsrs r1, 16
- lsls r2, r4, 24
- lsrs r2, 24
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x8
- str r0, [sp, 0x4]
- movs r0, 0xF
- str r0, [sp, 0x8]
- movs r0, 0x19
- str r0, [sp, 0xC]
- movs r0, 0
- movs r3, 0xC
- bl WriteSequenceToBgTilemapBuffer
- adds r4, 0x1
- cmp r4, r5
- blt _08096758
-_08096798:
- adds r0, r5, 0
- bl sub_8096898
- ldr r0, _080967B8 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080967BC @ =0x00002226
- adds r0, r1
- ldrh r1, [r0]
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
-_080967AE:
- add sp, 0x10
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080967B8: .4byte sPSSData
-_080967BC: .4byte 0x00002226
- thumb_func_end sub_8096728
-
- thumb_func_start sub_80967C0
-sub_80967C0: @ 80967C0
- push {r4,r5,lr}
- sub sp, 0x10
- ldr r5, _080967D8 @ =sPSSData
- ldr r0, [r5]
- ldr r4, _080967DC @ =0x00002226
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0x19
- bne _080967E0
- movs r0, 0
- b _08096886
- .align 2, 0
-_080967D8: .4byte sPSSData
-_080967DC: .4byte 0x00002226
-_080967E0:
- cmp r0, 0
- bne _080967FC
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xA
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0x19
- movs r3, 0xB
- bl FillBgTilemapBufferRect
-_080967FC:
- ldr r1, [r5]
- adds r1, r4
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- ldrh r1, [r1]
- movs r0, 0x19
- subs r5, r0, r1
- movs r4, 0
- cmp r4, r5
- bge _08096852
-_08096812:
- movs r0, 0
- movs r1, 0xA
- bl GetBgAttribute
- adds r1, r0, 0
- ldr r0, _08096890 @ =sPSSData
- ldr r0, [r0]
- ldr r2, _08096894 @ =0x00002226
- adds r0, r2
- adds r1, 0x14
- ldrh r0, [r0]
- adds r1, r0
- adds r1, r4
- lsls r1, 16
- lsrs r1, 16
- lsls r2, r4, 24
- lsrs r2, 24
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x8
- str r0, [sp, 0x4]
- movs r0, 0xF
- str r0, [sp, 0x8]
- movs r0, 0x19
- str r0, [sp, 0xC]
- movs r0, 0
- movs r3, 0xC
- bl WriteSequenceToBgTilemapBuffer
- adds r4, 0x1
- cmp r4, r5
- blt _08096812
-_08096852:
- adds r0, r5, 0
- bl sub_8096898
- lsls r2, r5, 24
- lsrs r2, 24
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xA
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r3, 0xB
- bl FillBgTilemapBufferRect
- ldr r0, _08096890 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08096894 @ =0x00002226
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x19
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
-_08096886:
- add sp, 0x10
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08096890: .4byte sPSSData
-_08096894: .4byte 0x00002226
- thumb_func_end sub_80967C0
-
- thumb_func_start sub_8096898
-sub_8096898: @ 8096898
- push {r4-r7,lr}
- sub sp, 0xC
- adds r7, r0, 0
- cmp r7, 0
- beq _080968D0
- movs r1, 0xD2
- lsls r1, 1
- lsls r4, r7, 24
- lsrs r4, 24
- str r4, [sp]
- movs r6, 0x1
- str r6, [sp, 0x4]
- movs r5, 0xF
- str r5, [sp, 0x8]
- movs r0, 0
- movs r2, 0
- movs r3, 0xB
- bl FillBgTilemapBufferRect
- ldr r1, _08096920 @ =0x000009a4
- str r4, [sp]
- str r6, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0
- movs r2, 0
- movs r3, 0x14
- bl FillBgTilemapBufferRect
-_080968D0:
- ldr r1, _08096924 @ =0x000001a5
- lsls r5, r7, 24
- lsrs r5, 24
- movs r4, 0x1
- str r4, [sp]
- movs r0, 0x8
- str r0, [sp, 0x4]
- movs r6, 0xF
- str r6, [sp, 0x8]
- movs r0, 0
- adds r2, r5, 0
- movs r3, 0xC
- bl FillBgTilemapBufferRect
- movs r1, 0xD3
- lsls r1, 1
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- adds r2, r5, 0
- movs r3, 0xB
- bl FillBgTilemapBufferRect
- ldr r1, _08096928 @ =0x000001a7
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0
- adds r2, r5, 0
- movs r3, 0x14
- bl FillBgTilemapBufferRect
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08096920: .4byte 0x000009a4
-_08096924: .4byte 0x000001a5
-_08096928: .4byte 0x000001a7
- thumb_func_end sub_8096898
-
- thumb_func_start sub_809692C
-sub_809692C: @ 809692C
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0809694C
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_8096624
- ldr r0, _08096954 @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_0809694C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08096954: .4byte SpriteCallbackDummy
- thumb_func_end sub_809692C
-
- thumb_func_start sub_8096958
-sub_8096958: @ 8096958
- push {lr}
- adds r3, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- cmp r1, 0
- beq _0809696A
- cmp r1, 0x1
- beq _08096986
- b _080969B4
-_0809696A:
- ldrh r0, [r3, 0x20]
- lsls r0, 4
- strh r0, [r3, 0x30]
- ldrh r0, [r3, 0x22]
- lsls r0, 4
- strh r0, [r3, 0x32]
- movs r0, 0xA
- strh r0, [r3, 0x34]
- movs r0, 0x15
- strh r0, [r3, 0x36]
- strh r1, [r3, 0x38]
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
-_08096986:
- ldrh r1, [r3, 0x30]
- ldrh r0, [r3, 0x34]
- subs r1, r0
- strh r1, [r3, 0x30]
- ldrh r0, [r3, 0x32]
- ldrh r2, [r3, 0x36]
- subs r0, r2
- strh r0, [r3, 0x32]
- lsls r1, 16
- asrs r1, 20
- strh r1, [r3, 0x20]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r3, 0x22]
- ldrh r0, [r3, 0x38]
- adds r0, 0x1
- strh r0, [r3, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- ble _080969B4
- ldr r0, _080969B8 @ =sub_80969BC
- str r0, [r3, 0x1C]
-_080969B4:
- pop {r0}
- bx r0
- .align 2, 0
-_080969B8: .4byte sub_80969BC
- thumb_func_end sub_8096958
-
- thumb_func_start sub_80969BC
-sub_80969BC: @ 80969BC
- ldr r1, _080969F0 @ =sPSSData
- ldr r3, [r1]
- movs r1, 0xCB
- lsls r1, 4
- adds r3, r1
- ldr r1, [r3]
- ldrh r1, [r1, 0x20]
- adds r1, 0x4
- strh r1, [r0, 0x20]
- ldr r2, [r3]
- ldrh r1, [r2, 0x26]
- ldrh r2, [r2, 0x22]
- adds r1, r2
- adds r1, 0x8
- strh r1, [r0, 0x22]
- ldr r1, [r3]
- ldrb r1, [r1, 0x5]
- movs r2, 0xC
- ands r2, r1
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- bx lr
- .align 2, 0
-_080969F0: .4byte sPSSData
- thumb_func_end sub_80969BC
-
- thumb_func_start sub_80969F4
-sub_80969F4: @ 80969F4
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- cmp r1, 0
- beq _08096A06
- cmp r1, 0x1
- beq _08096A22
- b _08096A6A
-_08096A06:
- ldrh r0, [r4, 0x20]
- lsls r0, 4
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- lsls r0, 4
- strh r0, [r4, 0x32]
- movs r0, 0xA
- strh r0, [r4, 0x34]
- movs r0, 0x15
- strh r0, [r4, 0x36]
- strh r1, [r4, 0x38]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_08096A22:
- ldrh r0, [r4, 0x34]
- ldrh r1, [r4, 0x30]
- adds r0, r1
- strh r0, [r4, 0x30]
- ldrh r1, [r4, 0x36]
- ldrh r2, [r4, 0x32]
- adds r1, r2
- strh r1, [r4, 0x32]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r4, 0x20]
- lsls r1, 16
- asrs r1, 20
- strh r1, [r4, 0x22]
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- ble _08096A6A
- adds r0, r4, 0
- bl sub_80962A8
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x3A]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x3C]
- lsls r2, 24
- lsrs r2, 24
- bl sub_80962F0
- ldr r0, _08096A70 @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_08096A6A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08096A70: .4byte SpriteCallbackDummy
- thumb_func_end sub_80969F4
-
- thumb_func_start sub_8096A74
-sub_8096A74: @ 8096A74
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- cmp r1, 0
- beq _08096A86
- cmp r1, 0x1
- beq _08096AA2
- b _08096B00
-_08096A86:
- ldrh r0, [r4, 0x20]
- lsls r0, 4
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- lsls r0, 4
- strh r0, [r4, 0x32]
- movs r0, 0xA
- strh r0, [r4, 0x34]
- movs r0, 0x15
- strh r0, [r4, 0x36]
- strh r1, [r4, 0x38]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_08096AA2:
- ldrh r1, [r4, 0x30]
- ldrh r0, [r4, 0x34]
- subs r1, r0
- strh r1, [r4, 0x30]
- ldrh r0, [r4, 0x32]
- ldrh r2, [r4, 0x36]
- subs r0, r2
- strh r0, [r4, 0x32]
- lsls r1, 16
- asrs r1, 20
- strh r1, [r4, 0x20]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r4, 0x22]
- ldr r1, _08096B08 @ =gSineTable
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- lsls r0, 4
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- ble _08096B00
- adds r0, r4, 0
- bl sub_80962A8
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x3A]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x3C]
- lsls r2, 24
- lsrs r2, 24
- bl sub_80962F0
- movs r0, 0
- strh r0, [r4, 0x24]
- ldr r0, _08096B0C @ =sub_80969BC
- str r0, [r4, 0x1C]
-_08096B00:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08096B08: .4byte gSineTable
-_08096B0C: .4byte sub_80969BC
- thumb_func_end sub_8096A74
-
- thumb_func_start sub_8096B10
-sub_8096B10: @ 8096B10
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- cmp r1, 0
- beq _08096B22
- cmp r1, 0x1
- beq _08096B3E
- b _08096B9E
-_08096B22:
- ldrh r0, [r4, 0x20]
- lsls r0, 4
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- lsls r0, 4
- strh r0, [r4, 0x32]
- movs r0, 0xA
- strh r0, [r4, 0x34]
- movs r0, 0x15
- strh r0, [r4, 0x36]
- strh r1, [r4, 0x38]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_08096B3E:
- ldrh r0, [r4, 0x34]
- ldrh r1, [r4, 0x30]
- adds r0, r1
- strh r0, [r4, 0x30]
- ldrh r1, [r4, 0x36]
- ldrh r2, [r4, 0x32]
- adds r1, r2
- strh r1, [r4, 0x32]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r4, 0x20]
- lsls r1, 16
- asrs r1, 20
- strh r1, [r4, 0x22]
- ldr r1, _08096BA4 @ =gSineTable
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- lsls r0, 4
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 16
- asrs r0, 20
- negs r0, r0
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- ble _08096B9E
- adds r0, r4, 0
- bl sub_80962A8
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x3A]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x3C]
- lsls r2, 24
- lsrs r2, 24
- bl sub_80962F0
- ldr r0, _08096BA8 @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
- movs r0, 0
- strh r0, [r4, 0x24]
-_08096B9E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08096BA4: .4byte gSineTable
-_08096BA8: .4byte SpriteCallbackDummy
- thumb_func_end sub_8096B10
-
- thumb_func_start sub_8096BAC
-sub_8096BAC: @ 8096BAC
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x22]
- subs r0, 0x8
- strh r0, [r2, 0x22]
- movs r1, 0x22
- ldrsh r0, [r2, r1]
- movs r3, 0x26
- ldrsh r1, [r2, r3]
- adds r0, r1
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- bge _08096BDC
- ldr r0, _08096BE0 @ =SpriteCallbackDummy
- str r0, [r2, 0x1C]
- adds r0, r2, 0
- bl sub_80962A8
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_8096624
-_08096BDC:
- pop {r0}
- bx r0
- .align 2, 0
-_08096BE0: .4byte SpriteCallbackDummy
- thumb_func_end sub_8096BAC
-
- thumb_func_start sub_8096BE4
-sub_8096BE4: @ 8096BE4
- ldr r3, _08096BF4 @ =gUnknown_203982C
- str r0, [r3]
- str r1, [r0]
- movs r1, 0
- strb r2, [r0, 0x5]
- strb r1, [r0, 0x4]
- bx lr
- .align 2, 0
-_08096BF4: .4byte gUnknown_203982C
- thumb_func_end sub_8096BE4
-
- thumb_func_start sub_8096BF8
-sub_8096BF8: @ 8096BF8
- push {r4,r5,lr}
- ldr r2, _08096C3C @ =gUnknown_203982C
- ldr r1, [r2]
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _08096C36
- movs r4, 0
- ldrb r1, [r1, 0x4]
- cmp r4, r1
- bcs _08096C2E
- adds r5, r2, 0
-_08096C0E:
- ldr r0, [r5]
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 2
- ldr r0, [r0]
- adds r0, r1
- ldr r1, [r0, 0x10]
- bl _call_via_r1
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, [r5]
- ldrb r0, [r0, 0x4]
- cmp r4, r0
- bcc _08096C0E
-_08096C2E:
- ldr r0, _08096C3C @ =gUnknown_203982C
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x4]
-_08096C36:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08096C3C: .4byte gUnknown_203982C
- thumb_func_end sub_8096BF8
-
- thumb_func_start sub_8096C40
-sub_8096C40: @ 8096C40
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r9, r0
- mov r10, r3
- ldr r0, [sp, 0x24]
- ldr r3, [sp, 0x28]
- ldr r4, [sp, 0x2C]
- ldr r5, [sp, 0x30]
- ldr r6, [sp, 0x34]
- lsls r1, 16
- lsrs r1, 16
- mov r12, r1
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp]
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r3, 16
- lsrs r3, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- ldr r0, _08096CC0 @ =gUnknown_203982C
- ldr r2, [r0]
- ldrb r0, [r2, 0x4]
- adds r1, r0, 0
- ldrb r7, [r2, 0x5]
- cmp r1, r7
- bcs _08096CC8
- adds r0, 0x1
- strb r0, [r2, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- ldr r1, [r2]
- adds r1, r0
- lsls r0, r4, 1
- strh r0, [r1, 0x8]
- ldr r2, [sp]
- lsls r0, r2, 5
- add r0, r12
- lsls r0, 1
- add r0, r9
- str r0, [r1, 0x4]
- adds r0, r3, 0
- muls r0, r6
- add r0, r8
- lsls r0, 1
- add r0, r10
- str r0, [r1]
- strh r5, [r1, 0xC]
- strh r6, [r1, 0xA]
- ldr r0, _08096CC4 @ =sub_8096CDC
- str r0, [r1, 0x10]
- movs r0, 0x1
- b _08096CCA
- .align 2, 0
-_08096CC0: .4byte gUnknown_203982C
-_08096CC4: .4byte sub_8096CDC
-_08096CC8:
- movs r0, 0
-_08096CCA:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8096C40
-
- thumb_func_start sub_8096CDC
-sub_8096CDC: @ 8096CDC
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r5, 0
- b _08096D06
-_08096CE4:
- ldr r0, [r4]
- ldr r1, [r4, 0x4]
- ldrh r2, [r4, 0x8]
- lsrs r2, 1
- bl CpuSet
- ldr r0, [r4, 0x4]
- adds r0, 0x40
- str r0, [r4, 0x4]
- ldrh r1, [r4, 0xA]
- lsls r1, 1
- ldr r0, [r4]
- adds r0, r1
- str r0, [r4]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
-_08096D06:
- ldrh r0, [r4, 0xC]
- cmp r5, r0
- bcc _08096CE4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8096CDC
-
- thumb_func_start sub_8096D14
-sub_8096D14: @ 8096D14
- push {r4-r7,lr}
- mov r12, r0
- ldr r0, [sp, 0x14]
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 16
- lsrs r4, r2, 16
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _08096D60 @ =gUnknown_203982C
- ldr r2, [r0]
- ldrb r0, [r2, 0x4]
- adds r1, r0, 0
- ldrb r7, [r2, 0x5]
- cmp r1, r7
- bcs _08096D68
- adds r0, 0x1
- strb r0, [r2, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- ldr r1, [r2]
- adds r1, r0
- lsls r0, r3, 1
- strh r0, [r1, 0x8]
- lsls r0, r4, 5
- adds r0, r6
- lsls r0, 1
- add r0, r12
- str r0, [r1, 0x4]
- strh r5, [r1, 0xC]
- ldr r0, _08096D64 @ =sub_8096D70
- str r0, [r1, 0x10]
- movs r0, 0x1
- b _08096D6A
- .align 2, 0
-_08096D60: .4byte gUnknown_203982C
-_08096D64: .4byte sub_8096D70
-_08096D68:
- movs r0, 0
-_08096D6A:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8096D14
-
- thumb_func_start sub_8096D70
-sub_8096D70: @ 8096D70
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r6, r0, 0
- movs r0, 0
- ldrh r1, [r6, 0xC]
- cmp r0, r1
- bcs _08096DFE
- movs r7, 0x80
- lsls r7, 5
- mov r5, sp
- ldr r2, _08096DBC @ =0x040000d4
- mov r8, r2
- movs r1, 0x81
- lsls r1, 24
- mov r10, r1
-_08096D96:
- ldr r2, [r6, 0x4]
- ldrh r3, [r6, 0x8]
- mov r12, r2
- adds r0, 0x1
- mov r9, r0
- cmp r3, r7
- bhi _08096DC0
- movs r0, 0
- strh r0, [r5]
- mov r2, sp
- mov r0, r8
- str r2, [r0]
- mov r1, r12
- str r1, [r0, 0x4]
- lsrs r0, r3, 1
- mov r2, r10
- orrs r0, r2
- mov r1, r8
- b _08096DE8
- .align 2, 0
-_08096DBC: .4byte 0x040000d4
-_08096DC0:
- movs r4, 0
- strh r4, [r5]
- ldr r1, _08096E10 @ =0x040000d4
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- ldr r0, _08096E14 @ =0x81000800
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r7
- subs r3, r7
- cmp r3, r7
- bhi _08096DC0
- strh r4, [r5]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 1
- mov r2, r10
- orrs r0, r2
-_08096DE8:
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- mov r0, r12
- adds r0, 0x40
- str r0, [r6, 0x4]
- mov r1, r9
- lsls r0, r1, 16
- lsrs r0, 16
- ldrh r2, [r6, 0xC]
- cmp r0, r2
- bcc _08096D96
-_08096DFE:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08096E10: .4byte 0x040000d4
-_08096E14: .4byte 0x81000800
- thumb_func_end sub_8096D70
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index b0c2b9a87..bcb9fa04b 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -13235,7 +13235,7 @@ _0813B16C:
ldrb r2, [r0]
adds r3, r5, 0
adds r0, r4, 0
- bl sub_808BDE8
+ bl SeekToNextMonInBox
b _0813B1CC
.align 2, 0
_0813B190: .4byte 0x000032f4
diff --git a/data/field_weather.s b/data/field_weather.s
deleted file mode 100644
index d872998bf..000000000
--- a/data/field_weather.s
+++ /dev/null
@@ -1,392 +0,0 @@
-#include "constants/region_map_sections.h"
-#include "constants/flags.h"
-#include "constants/moves.h"
-#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_83BFBE4:: @ 83BFBE4
- .incbin "graphics/field_effects/unk_83BFBE4.bin.lz"
-
-gUnknown_83C0408::
- .incbin "graphics/field_effects/unk_83C0408.bin.lz"
-
-gUnknown_83C0C00::
- .incbin "graphics/field_effects/unk_83C0C00.bin.lz"
-
-gUnknown_83C139C::
- .incbin "graphics/field_effects/unk_83C139C.bin.lz"
-
-gUnknown_83C1BB8::
- .incbin "graphics/field_effects/unk_83C1BB8.bin.lz"
-
-gUnknown_83C2380::
- .incbin "graphics/field_effects/unk_83C2380.bin.lz"
-
-gUnknown_83C2BA4::
- .4byte gUnknown_83BFBE4
- .4byte gUnknown_83C0408
- .4byte gUnknown_83C0C00
- .4byte gUnknown_83C139C
- .4byte gUnknown_83C1BB8
- .4byte gUnknown_83C2380
-
-gUnknown_83C2BBC:: @ 83C2BBC
- .4byte gUnknown_2037F34
-
-gUnknown_83C2BC0:: @ 83C2BC0
- .4byte sub_8079EC0
- .4byte nullsub_45
- .4byte sub_8079EC0
- .4byte sub_8079EE4
- .4byte Clouds_InitVars
- .4byte Clouds_Main
- .4byte Clouds_InitAll
- .4byte Clouds_Finish
- .4byte Weather2_InitVars
- .4byte nullsub_48
- .4byte Weather2_InitAll
- .4byte sub_807B434
- .4byte LightRain_InitVars
- .4byte LightRain_Main
- .4byte LightRain_InitAll
- .4byte LightRain_Finish
- .4byte Snow_InitVars
- .4byte snowflakes_progress2
- .4byte Snow_InitAll
- .4byte Snow_Finish
- .4byte sub_807C2E4
- .4byte Rain_Main
- .4byte sub_807C358
- .4byte Rain_Finish
- .4byte Fog1_InitVars
- .4byte Fog1_Main
- .4byte Fog1_InitAll
- .4byte Fog1_Finish
- .4byte Ash_InitVars
- .4byte Ash_Main
- .4byte Ash_InitAll
- .4byte Ash_Finish
- .4byte Sandstorm_InitVars
- .4byte Sandstorm_Main
- .4byte Sandstorm_InitAll
- .4byte Sandstorm_Finish
- .4byte Fog2_InitVars
- .4byte Fog2_Main
- .4byte Fog2_InitAll
- .4byte Fog2_Finish
- .4byte Fog1_InitVars
- .4byte Fog1_Main
- .4byte Fog1_InitAll
- .4byte Fog1_Finish
- .4byte Weather11_InitVars
- .4byte nullsub_49
- .4byte Weather11_InitAll
- .4byte sub_807D8D0
- .4byte Drought_InitVars
- .4byte Drought_Main
- .4byte Drought_InitAll
- .4byte sub_807B6BC
- .4byte sub_807C388
- .4byte Rain_Main
- .4byte sub_807C3F4
- .4byte Rain_Finish
- .4byte Bubbles_InitVars
- .4byte Bubbles_Main
- .4byte Bubbles_InitAll
- .4byte Bubbles_Finish
-
-gUnknown_83C2CB0:: @ 83C2CB0
- .4byte sub_8079FFC
- .4byte sub_807A084
- .4byte nullsub_46
- .4byte nullsub_46
-
-gUnknown_83C2CC0:: @ 83C2CC0
- .byte 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01
-
-gUnknown_83C2CE0:: @ 83C2CE0
- .incbin "graphics/field_effects/unk_83C2CE0.gbapal"
-
-gUnknown_83C2D00:: @ 83C2D00
- .incbin "graphics/field_effects/unk_83C2D00.gbapal"
-
-gUnknown_83C2D20:: @ 83C2D20
- .incbin "graphics/field_effects/unk_83C2D20.gbapal"
-
-gUnknown_83C2D40::
- .incbin "graphics/field_effects/unk_83C2D40.4bpp"
-
-gWeatherFog1Tiles:: @ 83C3540
- .incbin "graphics/field_effects/unk_83C3540.4bpp"
-
-gUnknown_83C3D40::
- .incbin "graphics/field_effects/unk_83C3D40.4bpp"
-
-gUnknown_83C4540::
- .incbin "graphics/field_effects/unk_83C4540.4bpp"
-
-gUnknown_83C4580::
- .incbin "graphics/field_effects/unk_83C4580.4bpp"
-
-gUnknown_83C45C0::
- .incbin "graphics/field_effects/unk_83C45C0.4bpp"
-
-gUnknown_83C55C0::
- .incbin "graphics/field_effects/unk_83C55C0.4bpp"
-
-gUnknown_83C5BC0::
- .incbin "graphics/field_effects/unk_83C5BC0.4bpp"
-
-gUnknown_83C65C0:: @ 83C65C0
- .byte 0x02, 0x03, 0x05, 0x03
-
-gUnknown_83C65C4:: @ 83C65C4
- .byte 0x02, 0x02, 0x03, 0x02
-
-gUnknown_83C65C8:: @ 83C65C8
- .2byte 0x0000, 0x0042, 0x0005, 0x0049, 0x000a, 0x004e
-
-gUnknown_83C65D4:: @ 83C65D4
- obj_tiles gUnknown_83C3D40, 0x0800, 4608
-
-gUnknown_83C65DC::
- .4byte 0xc0000400, 0x00000c00
-
-gUnknown_83C65E4::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_end
-
-gUnknown_83C65EC::
- .4byte gUnknown_83C65E4
-
-gUnknown_83C65F0:: @ 83C65F0
- spr_template 4608, 4608, gUnknown_83C65DC, gUnknown_83C65EC, NULL, gDummySpriteAffineAnimTable, sub_807B558
-
-gUnknown_83C6608:: @ 83C6608
- .2byte 0x0000, 0x0000
- .2byte 0x0000, 0x00a0
- .2byte 0x0000, 0x0040
- .2byte 0x0090, 0x00e0
- .2byte 0x0090, 0x0080
- .2byte 0x0020, 0x0020
- .2byte 0x0020, 0x00c0
- .2byte 0x0020, 0x0060
- .2byte 0x0048, 0x0080
- .2byte 0x0048, 0x0020
- .2byte 0x0048, 0x00c0
- .2byte 0x00d8, 0x0060
- .2byte 0x00d8, 0x0000
- .2byte 0x0068, 0x00a0
- .2byte 0x0068, 0x0040
- .2byte 0x0068, 0x00e0
- .2byte 0x0090, 0x0000
- .2byte 0x0090, 0x00a0
- .2byte 0x0090, 0x0040
- .2byte 0x0020, 0x00e0
- .2byte 0x0020, 0x0080
- .2byte 0x0048, 0x0020
- .2byte 0x0048, 0x00c0
- .2byte 0x0030, 0x0060
-
-gUnknown_83C6668::
- .4byte 0x80008000, 0x00002400
-
-gUnknown_83C6670::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_jump 0
-
-gUnknown_83C6678::
- obj_image_anim_frame 0x0008, 3
- obj_image_anim_frame 0x0020, 2
- obj_image_anim_frame 0x0028, 2
- obj_image_anim_end
-
-gUnknown_83C6688::
- obj_image_anim_frame 0x0008, 3
- obj_image_anim_frame 0x0010, 3
- obj_image_anim_frame 0x0018, 4
- obj_image_anim_end
-
-gUnknown_83C6698::
- .4byte gUnknown_83C6670
- .4byte gUnknown_83C6678
- .4byte gUnknown_83C6688
-
-gUnknown_83C66A4:: @ 83C66A4
- spr_template 4614, 4608, gUnknown_83C6668, gUnknown_83C6698, NULL, gDummySpriteAffineAnimTable, sub_807BA24
-
-gUnknown_83C66BC:: @ 83C66BC
- .2byte 0xff98, 0x00d0
- .2byte 0xff60, 0x0140
-
-gUnknown_83C66C4:: @ 83C66C4
- .2byte 0x0012, 0x0007
- .2byte 0x000c, 0x000a
-
-gUnknown_83C66CC:: @ 83C66CC
- obj_tiles gUnknown_83C55C0, 0x0600, 4614
-
-gUnknown_83C66D4::
- .4byte 0x00000000, 0x00000400
-
-gUnknown_83C66DC::
- obj_frame_tiles gUnknown_83C4540 + 0x00, 0x0020
- obj_frame_tiles gUnknown_83C4540 + 0x20, 0x0020
-
-gUnknown_83C66EC::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_end
-
-gUnknown_83C66F4::
- obj_image_anim_frame 0x0001, 16
- obj_image_anim_end
-
-gUnknown_83C66FC::
- .4byte gUnknown_83C66EC
- .4byte gUnknown_83C66F4
-
-gUnknown_83C6704:: @ 83C6704
- spr_template 65535, 4608, gUnknown_83C66D4, gUnknown_83C66FC, gUnknown_83C66DC, gDummySpriteAffineAnimTable, sub_807C1AC
-
-gUnknown_83C671C::
- .2byte 0x0000, 0x0006, 0x0006, 0x000c, 0x0012, 0x002a, 0x012c, 0x012c
-
-gUnknown_83C672C::
- .4byte 0xc0000400, 0x00000800
-
-gUnknown_83C6734::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_end
-
-gUnknown_83C673C::
- obj_image_anim_frame 0x0020, 16
- obj_image_anim_end
-
-gUnknown_83C6744::
- obj_image_anim_frame 0x0040, 16
- obj_image_anim_end
-
-gUnknown_83C674C::
- obj_image_anim_frame 0x0060, 16
- obj_image_anim_end
-
-gUnknown_83C6754::
- obj_image_anim_frame 0x0080, 16
- obj_image_anim_end
-
-gUnknown_83C675C::
- obj_image_anim_frame 0x00a0, 16
- obj_image_anim_end
-
-gUnknown_83C6764::
- .4byte gUnknown_83C6734
- .4byte gUnknown_83C673C
- .4byte gUnknown_83C6744
- .4byte gUnknown_83C674C
- .4byte gUnknown_83C6754
- .4byte gUnknown_83C675C
-
-gUnknown_83C677C::
- obj_rot_scal_anim_frame 512, 512, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_83C678C::
- .4byte gUnknown_83C677C
-
-gUnknown_83C6790:: @ 83C6790
- spr_template 4609, 4608, gUnknown_83C672C, gUnknown_83C6764, NULL, gUnknown_83C678C, Fog1SpriteCallback
-
-gUnknown_83C67A8:: @ 83C67A8
- obj_tiles gWeatherFog1Tiles, 0x0800, 4609
-
-gUnknown_83C67B0:: @ 83C67B0
- obj_tiles gUnknown_83C45C0, 0x1000, 4610
-
-gUknown_83C67B8::
- .4byte 0xc0000400, 0x0000f400
-
-gUnknown_83C67C0::
- obj_image_anim_frame 0x0000, 60
- obj_image_anim_frame 0x0040, 60
- obj_image_anim_jump 0
-
-gUnknown_83C67CC::
- .4byte gUnknown_83C67C0
-
-gUnknown_83C67D0:: @ 83C67D0
- spr_template 4610, 4608, gUknown_83C67B8, gUnknown_83C67CC, NULL, gDummySpriteAffineAnimTable, sub_807CF08
-
-gUnknown_83C67E8:: @ 83C67E8
- obj_tiles gUnknown_83C2D40, 0x0800, 4611
-
-gUnknown_83C67F0::
- .4byte 0xc0000400, 0x00000800
-
-gUnknown_83C67F8::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_end
-
-gUnknown_83C6800::
- .4byte gUnknown_83C67F8
-
-gUnknown_83C6804:: @ 83C6804
- spr_template 4611, 4608, gUnknown_83C67F0, gUnknown_83C6800, NULL, gDummySpriteAffineAnimTable, Fog2SpriteCallback
-
-gUnknown_83C681C::
- .4byte 0xc0000400, 0x00000400
-
-gUnknown_83C6824::
- obj_image_anim_frame 0x0000, 3
- obj_image_anim_end
-
-gUnknown_83C682C::
- obj_image_anim_frame 0x0040, 3
- obj_image_anim_end
-
-gUnknown_83C6834::
- .4byte gUnknown_83C6824
- .4byte gUnknown_83C682C
-
-gUnknown_83C683C:: @ 83C683C
- spr_template 4612, 4608, gUnknown_83C681C, gUnknown_83C6834, NULL, gDummySpriteAffineAnimTable, SandstormSpriteCallback1
-
-gUnknown_83C6854:: @ 83C6854
- obj_tiles gUnknown_83C5BC0, 0x0a00, 4612
-
-gUnknown_83C685C:: @ 83C685C
- .2byte 0x0000, 0x0078, 0x0050, 0x00a0, 0x0028, 0x0000
-
-gUnknown_83C6868:: @ 83C6868
- .byte 0x28, 0x5a, 0x3c, 0x5a, 0x02, 0x3c, 0x28, 0x1e
-
-gUnknown_83C6870:: @ 83C6870
- obj_tiles gUnknown_83C4580, 0x0040, 4613
-
-gUnknown_83C6878:: @ 83C6878
- .2byte 0x0078, 0x00a0
- .2byte 0x0178, 0x00a0
- .2byte 0x0028, 0x008c
- .2byte 0x0128, 0x008c
- .2byte 0x00b4, 0x0082
- .2byte 0x01b4, 0x0082
- .2byte 0x003c, 0x00a0
- .2byte 0x01b4, 0x00a0
- .2byte 0x00dc, 0x00b4
- .2byte 0x01dc, 0x00b4
- .2byte 0x000a, 0x005a
- .2byte 0x010a, 0x005a
- .2byte 0x0100, 0x00a0
-
-gUnknown_83C68AC::
- obj_image_anim_frame 0x0000, 16
- obj_image_anim_frame 0x0001, 16
- obj_image_anim_end
-
-gUnknown_83C68B8::
- .4byte gUnknown_83C68AC
-
-gUnknown_83C68BC:: @ 83C68BC
- spr_template 4613, 4608, gOamData_AffineOff_ObjNormal_8x8, gUnknown_83C68B8, NULL, gDummySpriteAffineAnimTable, unc_0807DAB4
diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s
deleted file mode 100644
index 0ac3268b6..000000000
--- a/data/pokemon_storage_system.s
+++ /dev/null
@@ -1,692 +0,0 @@
-#include "constants/maps.h"
-#include "constants/species.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnknown_83CDA20:: @ 83CDA20
- .4byte gUnknown_841856C, gUnknown_84185AD
- .4byte gUnknown_841857D, gUnknown_84185E2
- .4byte gUnknown_841858D, gUnknown_8418611
- .4byte gUnknown_841859A, gUnknown_8418642
- .4byte gUnknown_84185A5, gUnknown_8418681
-
-gUnknown_83CDA48:: @ 83CDA48
- .byte 0, 1, 1, 17, 10, 15
- .2byte 0x0001
-
-gUnknown_83CDA50::
- obj_image_anim_frame 0x0000, 5
- obj_image_anim_end
-
-gUnknown_83CDA58::
- obj_image_anim_frame 0x0004, 5
- obj_image_anim_end
-
-gUnknown_83CDA60::
- obj_image_anim_frame 0x0006, 5
- obj_image_anim_end
-
-gUnknown_83CDA68::
- obj_image_anim_frame 0x000a, 5
- obj_image_anim_end
-
-gUnknown_83CDA70:: @ 83CDA70
- .4byte gUnknown_83CDA50
- .4byte gUnknown_83CDA58
- .4byte gUnknown_83CDA60
- .4byte gUnknown_83CDA68
-
-gUnknown_83CDA80::
- obj_rot_scal_anim_frame 224, 224, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_83CDA90::
- .4byte gUnknown_83CDA80
-
-gUnknown_83CDA94:: @ 83CDA94
- .string "/30$"
-
-gUnknown_83CDA98:: @ 83CDA98 gbapal
- .incbin "graphics/interface/pss_unk_83CDA98.gbapal"
-
-gUnknown_83CDAB8:: @ 83CDAB8 4bpp
- .incbin "graphics/interface/pss_unk_83CDAB8.4bpp"
-
-gUnknown_83CE2B8:: @ 83CE2B8 4bpp
- .incbin "graphics/interface/pss_unk_83CE2B8.4bpp"
-
-gUnknown_83CE438:: @ 83CE438 4bpp.lz
- .incbin "graphics/interface/pss_unk_83CE438.4bpp.lz"
-
-gUnknown_83CE4D0:: @ 83CE4D0 bin.lz
- .incbin "graphics/interface/pss_unk_83CE4D0.bin.lz"
- .incbin "graphics/interface/pss_unk_83CE5DC.gbapal"
-
-gUnknown_83CE5FC:: @ 83CE5FC bin.lz
- .incbin "graphics/interface/pss_unk_83CE5FC.bin.lz"
-
-gUnknown_83CE6F8:: @ 83CE6F8 @ raw8
- .byte 0x01, 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x01, 0x11, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15, 0x01, 0x16, 0x01, 0x17, 0x01, 0x18, 0x01
- .byte 0x01, 0x21, 0x02, 0x21, 0x03, 0x21, 0x04, 0x21, 0x05, 0x21, 0x06, 0x21, 0x07, 0x21, 0x08, 0x21, 0x11, 0x21, 0x12, 0x21, 0x13, 0x21, 0x14, 0x21, 0x15, 0x21, 0x16, 0x21, 0x17, 0x21, 0x18, 0x21
-
-gUnknown_83CE738:: @ 83CE738 gbapal
- .incbin "graphics/interface/pss_unk_83CE738.gbapal"
-
-gUnknown_83CE758:: @ 83CE758 gbapal
- .incbin "graphics/interface/pss_unk_83CE758.gbapal"
-
-gUnknown_83CE778:: @ 83CE778 @ raw16
- .2byte 0x014c, 0x014d, 0x014e, 0x014f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x015c, 0x015d, 0x015e, 0x015f, 0x0180, 0x0181, 0x0182
- .2byte 0x0183, 0x0184, 0x0175, 0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189
- .2byte 0x018a, 0x018b, 0x018c, 0x018d
-
-gUnknown_83CE7C0:: @ 83CE7C0 @ raw8
- .byte 0x40, 0x11, 0x41, 0x11, 0x41, 0x11, 0x42, 0x11, 0x50, 0x11, 0x51, 0x11, 0x51, 0x11, 0x52, 0x11, 0x60, 0x11, 0x61, 0x11, 0x61, 0x11, 0x62, 0x11
-
-gUnknown_83CE7D8:: @ 83CE7D8 @ raw8
- .byte 0x43, 0x11, 0x44, 0x11, 0x44, 0x11, 0x45, 0x11, 0x53, 0x11, 0x54, 0x11, 0x54, 0x11, 0x55, 0x11, 0x63, 0x11, 0x64, 0x11, 0x64, 0x11, 0x65, 0x11
-
-gUnknown_83CE7F0:: @ 83CE7F0 gbapal
- .incbin "graphics/interface/pss_unk_83CE810.gbapal"
-
-gUnknown_83CE810:: @ 83CE810 4bpp
- .incbin "graphics/interface/pss_unk_83CE810.4bpp"
- .incbin "graphics/interface/pss_unk_83CE9D0.gbapal"
-
-gUnknown_83CEA10:: @ 83CEA10 gbapal
- .incbin "graphics/interface/pss_unk_83CEA10.gbapal"
-
-gUnknown_83CEA30:: @ 83CEA30 gbapal
- .incbin "graphics/interface/pss_unk_83CEA30.gbapal"
-
-gUnknown_83CEA50:: @ 83CEA50 bg_template
- .4byte 0x000001d0
- @ {
- @ .bg = 0,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 29,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 0,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x004011e5
- @ {
- @ .bg = 1,
- @ .charBaseIndex = 1,
- @ .mapBaseIndex = 30,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 1,
- @ .baseTile = 0x0100
- @ }
- .4byte 0x000023ba
- @ {
- @ .bg = 2,
- @ .charBaseIndex = 2,
- @ .mapBaseIndex = 27,
- @ .screenSize = 1,
- @ .paletteMode = 0,
- @ .priority = 2,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000031ff
- @ {
- @ .bg = 3,
- @ .charBaseIndex = 3,
- @ .mapBaseIndex = 31,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 3,
- @ .baseTile = 0x0000
- @ }
-
-gUnknown_83CEA60:: @ 83CEA60 sprite_palette
- obj_pal gUnknown_83CE7F0, 56010
-
-gUnknown_83CEA68:: @ 83CEA68 sprite_sheet
- obj_tiles gUnknown_83CE810, 0x01c0, 5
-
-gUnknown_83CEA70:: @ 83CEA70 spr_template
- spr_template 2, 56006, gUnknown_83CEB88, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_83CEA88:: @ 83CEA88 struct {const u8 *; u8;}
- .4byte gUnknown_8418208
- .byte 0
- .align 2
- .4byte gUnknown_841821B
- .byte 0
- .align 2
- .4byte gUnknown_8418233
- .byte 0
- .align 2
- .4byte gUnknown_8418248
- .byte 0
- .align 2
- .4byte gUnknown_841825C
- .byte 1
- .align 2
- .4byte gUnknown_841826C
- .byte 0
- .align 2
- .4byte gUnknown_841827F
- .byte 0
- .align 2
- .4byte gUnknown_8418295
- .byte 1
- .align 2
- .4byte gUnknown_84182A7
- .byte 0
- .align 2
- .4byte gUnknown_84182B8
- .byte 0
- .align 2
- .4byte gUnknown_84182CE
- .byte 4
- .align 2
- .4byte gUnknown_84182DF
- .byte 6
- .align 2
- .4byte gUnknown_84182EC
- .byte 0
- .align 2
- .4byte gUnknown_84182FF
- .byte 0
- .align 2
- .4byte gUnknown_8418319
- .byte 0
- .align 2
- .4byte gUnknown_841832C
- .byte 0
- .align 2
- .4byte gUnknown_8418346
- .byte 0
- .align 2
- .4byte gUnknown_841835F
- .byte 0
- .align 2
- .4byte gUnknown_8418379
- .byte 0
- .align 2
- .4byte gUnknown_8418392
- .byte 1
- .align 2
- .4byte gUnknown_84183A0
- .byte 0
- .align 2
- .4byte gUnknown_84183BA
- .byte 0
- .align 2
- .4byte gUnknown_84183C5
- .byte 0
- .align 2
- .4byte gUnknown_841825C
- .byte 7
- .align 2
- .4byte gUnknown_84183DD
- .byte 0
- .align 2
- .4byte gUnknown_84183F0
- .byte 7
- .align 2
- .4byte gUnknown_8418408
- .byte 0
- .align 2
- .4byte gUnknown_8418419
- .byte 0
- .align 2
- .4byte gUnknown_8418433
- .byte 7
- .align 2
- .4byte gUnknown_8418443
- .byte 7
- .align 2
- .4byte gUnknown_8418452
- .byte 0
- .align 2
-
-gUnknown_83CEB80:: @ 83CEB80 window_template
- .byte 0, 24, 11, 5, 4, 15
- .2byte 0x005c
-
-gUnknown_83CEB88::
- .4byte 0xc0000000, 0x00000000
-
-gUnknown_83CEB90::
- .4byte 0x00004000, 0x00000000
-
-gUnknown_83CEB98::
- obj_image_anim_frame 0x0000, 5
- obj_image_anim_end
-
-gUnknown_83CEBA0::
- obj_image_anim_frame 0x0002, 8
- obj_image_anim_frame 0x0004, 8
- obj_image_anim_frame 0x0006, 8
- obj_image_anim_jump 0
-
-gUnknown_83CEBB0::
- obj_image_anim_frame 0x0008, 5
- obj_image_anim_end
-
-gUnknown_83CEBB8::
- obj_image_anim_frame 0x000a, 8
- obj_image_anim_frame 0x0004, 8
- obj_image_anim_frame 0x000c, 8
- obj_image_anim_jump 0
-
-gUnknown_83CEBC8::
- .4byte gUnknown_83CEB98
- .4byte gUnknown_83CEBA0
- .4byte gUnknown_83CEBB0
- .4byte gUnknown_83CEBB8
-
-gUnknown_83CEBD8:: @ 83CEBD8 spr_template
- spr_template 5, 56010, gUnknown_83CEB90, gUnknown_83CEBC8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_83CEBF0:: @ 83CEBF0 spr_template
- spr_template 18, 56000, gUnknown_83CEC08, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_83CEC08::
- .4byte 0x80000000, 0x00000000
-
-gUnknown_83CEC10::
- obj_rot_scal_anim_frame -2, -2, 0, 120
- obj_rot_scal_anim_end
-
-gUnknown_83CEC20::
- obj_rot_scal_anim_frame 16, 16, 0, 0
- obj_rot_scal_anim_frame 16, 16, 0, 15
- obj_rot_scal_anim_end
-
-gUnknown_83CEC38:: @ 83CEC38 dataptr
- .4byte gUnknown_83CEC10
- .4byte gUnknown_83CEC20
-
-gUnknown_83CEC40:: @ 83CEC40
- .incbin "graphics/interface/pss_unk_83CEC40.gbapal"
-
-gUnknown_83CEC80:: @ 83CEC80
- .incbin "graphics/interface/pss_unk_83CEC80.4bpp.lz"
-
-gUnknown_83CF050:: @ 83CF050
- .incbin "graphics/interface/pss_unk_83CF050.bin.lz"
-
-gUnknown_83CF12C:: @ 83CF12C
- .incbin "graphics/interface/pss_unk_83CF12C.gbapal"
-
-gUnknown_83CF16C:: @ 83CF16C
- .incbin "graphics/interface/pss_unk_83CF16C.4bpp.lz"
-
-gUnknown_83CF374:: @ 83CF374
- .incbin "graphics/interface/pss_unk_83CF374.bin.lz"
-
-gUnknown_83CF424:: @ 83CF424
- .incbin "graphics/interface/pss_unk_83CF424.gbapal"
-
-gUnknown_83CF464:: @ 83CF464
- .incbin "graphics/interface/pss_unk_83CF464.4bpp.lz"
-
-gUnknown_83CF750:: @ 83CF750
- .incbin "graphics/interface/pss_unk_83CF750.bin.lz"
-
-gUnknown_83CF834:: @ 83CF834
- .incbin "graphics/interface/pss_unk_83CF834.gbapal"
-
-gUnknown_83CF874:: @ 83CF874
- .incbin "graphics/interface/pss_unk_83CF874.4bpp.lz"
-
-gUnknown_83CFA94:: @ 83CFA94
- .incbin "graphics/interface/pss_unk_83CFA94.bin.lz"
-
-gUnknown_83CFB60:: @ 83CFB60
- .incbin "graphics/interface/pss_unk_83CFB60.gbapal"
-
-gUnknown_83CFBA0:: @ 83CFBA0
- .incbin "graphics/interface/pss_unk_83CFBA0.4bpp.lz"
-
-gUnknown_83CFEF0:: @ 83CFEF0
- .incbin "graphics/interface/pss_unk_83CFEF0.bin.lz"
-
-gUnknown_83CFFC8:: @ 83CFFC8
- .incbin "graphics/interface/pss_unk_83CFFC8.gbapal"
-
-gUnknown_83D0008:: @ 83D0008
- .incbin "graphics/interface/pss_unk_83D0008.4bpp.lz"
- .space 4
-
-gUnknown_83D033C:: @ 83D033C
- .incbin "graphics/interface/pss_unk_83D033C.bin.lz"
-
-gUnknown_83D0414:: @ 83D0414
- .incbin "graphics/interface/pss_unk_83D0414.gbapal"
-
-gUnknown_83D0454:: @ 83D0454
- .incbin "graphics/interface/pss_unk_83D0454.4bpp.lz"
-
-gUnknown_83D070C:: @ 83D070C
- .incbin "graphics/interface/pss_unk_83D070C.bin.lz"
-
-gUnknown_83D07D8:: @ 83D07D8
- .incbin "graphics/interface/pss_unk_83D07D8.gbapal"
-
-gUnknown_83D0818:: @ 83D0818
- .incbin "graphics/interface/pss_unk_83D0818.4bpp.lz"
-
-gUnknown_83D0B5C:: @ 83D0B5C
- .incbin "graphics/interface/pss_unk_83D0B5C.bin.lz"
-
-gUnknown_83D0C38:: @ 83D0C38
- .incbin "graphics/interface/pss_unk_83D0C38.gbapal"
-
-gUnknown_83D0C78:: @ 83D0C78
- .incbin "graphics/interface/pss_unk_83D0C78.4bpp.lz"
-
-gUnknown_83D0FFC:: @ 83D0FFC
- .incbin "graphics/interface/pss_unk_83D0FFC.bin.lz"
-
-gUnknown_83D10E4:: @ 83D10E4
- .incbin "graphics/interface/pss_unk_83D10E4.gbapal"
-
-gUnknown_83D1124:: @ 83D1124
- .incbin "graphics/interface/pss_unk_83D1124.4bpp.lz"
-
-gUnknown_83D13D8:: @ 83D13D8
- .incbin "graphics/interface/pss_unk_83D13D8.bin.lz"
-
-gUnknown_83D14B4:: @ 83D14B4
- .incbin "graphics/interface/pss_unk_83D14B4.gbapal"
-
-gUnknown_83D14F4:: @ 83D14F4
- .incbin "graphics/interface/pss_unk_83D14F4.4bpp.lz"
-
-gUnknown_83D1788:: @ 83D1788
- .incbin "graphics/interface/pss_unk_83D1788.bin.lz"
-
-gUnknown_83D1874:: @ 83D1874
- .incbin "graphics/interface/pss_unk_83D1874.gbapal"
-
-gUnknown_83D18B4:: @ 83D18B4
- .incbin "graphics/interface/pss_unk_83D18B4.4bpp.lz"
-
-gUnknown_83D1B4C:: @ 83D1B4C
- .incbin "graphics/interface/pss_unk_83D1B4C.bin.lz"
-
-gUnknown_83D1C2C:: @ 83D1C2C
- .incbin "graphics/interface/pss_unk_83D1C2C.gbapal"
-
- .space 32
-
-gUnknown_83D1C8C:: @ 83D1C8C
- .incbin "graphics/interface/pss_unk_83D1C8C.4bpp.lz"
-
-gUnknown_83D1EC4:: @ 83D1EC4
- .incbin "graphics/interface/pss_unk_83D1EC4.bin.lz"
-
-gUnknown_83D1F94:: @ 83D1F94
- .incbin "graphics/interface/pss_unk_83D1F94.gbapal"
-
-gUnknown_83D1FD4:: @ 83D1FD4
- .incbin "graphics/interface/pss_unk_83D1FD4.4bpp.lz"
-
-gUnknown_83D22B8:: @ 83D22B8
- .incbin "graphics/interface/pss_unk_83D22B8.bin.lz"
-
-gUnknown_83D239C:: @ 83D239C
- .incbin "graphics/interface/pss_unk_83D239C.gbapal"
-
-gUnknown_83D23DC:: @ 83D23DC
- .incbin "graphics/interface/pss_unk_83D23DC.4bpp.lz"
-
-gUnknown_83D256C:: @ 83D256C
- .incbin "graphics/interface/pss_unk_83D256C.bin.lz"
-
-gUnknown_83D2614:: @ 83D2614
- .incbin "graphics/interface/pss_unk_83D2614.gbapal"
-
-gUnknown_83D2654:: @ 83D2654
- .incbin "graphics/interface/pss_unk_83D2654.4bpp.lz"
-
-gUnknown_83D277C:: @ 83D277C
- .incbin "graphics/interface/pss_unk_83D277C.bin.lz"
-
- .incbin "graphics/interface/pss_unk_83D2820.bin"
-
-gUnknown_83D29D0:: @ 83D29D0
- .incbin "graphics/interface/pss_unk_83D29D0.gbapal"
-
-gUnknown_83D2A10:: @ 83D2A10
- .4byte gUnknown_83CEC80, gUnknown_83CF050, gUnknown_83CEC40
- .4byte gUnknown_83CF16C, gUnknown_83CF374, gUnknown_83CF12C
- .4byte gUnknown_83CF464, gUnknown_83CF750, gUnknown_83CF424
- .4byte gUnknown_83CF874, gUnknown_83CFA94, gUnknown_83CF834
- .4byte gUnknown_83CFBA0, gUnknown_83CFEF0, gUnknown_83CFB60
- .4byte gUnknown_83D0008, gUnknown_83D033C, gUnknown_83CFFC8
- .4byte gUnknown_83D0454, gUnknown_83D070C, gUnknown_83D0414
- .4byte gUnknown_83D0818, gUnknown_83D0B5C, gUnknown_83D07D8
- .4byte gUnknown_83D0C78, gUnknown_83D0FFC, gUnknown_83D0C38
- .4byte gUnknown_83D1124, gUnknown_83D13D8, gUnknown_83D10E4
- .4byte gUnknown_83D14F4, gUnknown_83D1788, gUnknown_83D14B4
- .4byte gUnknown_83D18B4, gUnknown_83D1B4C, gUnknown_83D1874
- .4byte gUnknown_83D1C8C, gUnknown_83D1EC4, gUnknown_83D1C2C
- .4byte gUnknown_83D1FD4, gUnknown_83D22B8, gUnknown_83D1F94
- .4byte gUnknown_83D23DC, gUnknown_83D256C, gUnknown_83D239C
- .4byte gUnknown_83D2654, gUnknown_83D277C, gUnknown_83D2614
-
-gUnknown_83D2AD0::
- .incbin "graphics/interface/pss_unk_83D2AD0.4bpp"
- .4byte 0x000023ba
-
-gUnknown_83D2B54:: @ 83D2B54
- obj_tiles gUnknown_83D2AD0, 0x0080, 6
-
-gUnknown_83D2B5C::
- .4byte 0x80004000, 0x00000800
-
-gUnknown_83D2B64::
- obj_image_anim_frame 0x0000, 5
- obj_image_anim_end
-
-gUnknown_83D2B6C::
- obj_image_anim_frame 0x0008, 5
- obj_image_anim_end
-
-gUnknown_83D2B74::
- .4byte gUnknown_83D2B64
- .4byte gUnknown_83D2B6C
-
-gUnknown_83D2B7C:: @ 83D2B7C
- spr_template 3, 56009, gUnknown_83D2B5C, gUnknown_83D2B74, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_83D2B94::
- .4byte 0x00008000, 0x00000800
-
-gUnknown_83D2B9C::
- obj_image_anim_frame 0x0000, 5
- obj_image_anim_end
-
-gUnknown_83D2BA4::
- obj_image_anim_frame 0x0002, 5
- obj_image_anim_end
-
-gUnknown_83D2BAC::
- .4byte gUnknown_83D2B9C
- .4byte gUnknown_83D2BA4
-
-gUnknown_83D2BB4:: @ 83D2BB4
- spr_template 6, 56010, gUnknown_83D2B94, gUnknown_83D2BAC, NULL, gDummySpriteAffineAnimTable, sub_8092164
-
-gUnknown_83D2BCC::
- .incbin "graphics/interface/pss_unk_83D2BCC.gbapal"
-
-gUnknown_83D2BEC::
- .incbin "graphics/interface/pss_unk_83D2BEC.4bpp"
-
-gUnknown_83D33EC::
- .incbin "graphics/interface/pss_unk_83D33EC.4bpp"
-
-gUnknown_83D346C:: @ 83D346C
- .4byte sub_8092C18
- .4byte sub_8092CA4
- .4byte sub_8092D20
-
-gUnknown_83D3478:: @ 83D3478
- .4byte sub_8093F98
- .byte 0
- .align 2
- .4byte sub_809448C
- .byte 1
- .align 2
- .4byte sub_80946AC
- .byte 2
- .align 2
- .4byte sub_80947A0
- .byte 3
- .align 2
- .4byte NULL
- .byte 0
- .align 2
-
-gUnknown_83D34A0:: @ 83D34A0
- obj_tiles gUnknown_83D2BEC, 0x0800, 0
- obj_tiles gUnknown_83D33EC, 0x0080, 1
- null_obj_tiles
-
-gUnknown_83D34B8:: @ 83D34B8
- obj_pal gUnknown_83D2BCC, 56007
- null_obj_pal
-
-gUnknown_83D34C8::
- .4byte 0x80000000, 0x00000400
-
-gUnknown_83D34D0::
- .4byte 0x40000000, 0x00000400
-
-gUnknown_83D34D8::
- obj_image_anim_frame 0x0000, 30
- obj_image_anim_frame 0x0010, 30
- obj_image_anim_jump 0
-
-gUnknown_83D34E4::
- obj_image_anim_frame 0x0000, 5
- obj_image_anim_end
-
-gUnknown_83D34EC::
- obj_image_anim_frame 0x0020, 5
- obj_image_anim_end
-
-gUnknown_83D34F4::
- obj_image_anim_frame 0x0030, 5
- obj_image_anim_end
-
-gUnknown_83D34FC::
- .4byte gUnknown_83D34D8
- .4byte gUnknown_83D34E4
- .4byte gUnknown_83D34EC
- .4byte gUnknown_83D34F4
-
-gUnknown_83D350C:: @ 83D350C
- spr_template 0, 56010, gUnknown_83D34C8, gUnknown_83D34FC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_83D3524:: @ 83D3524
- spr_template 1, 56010, gUnknown_83D34D0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8094AB8
-
-gUnknown_83D353C:: @ 83D353C
- .4byte gUnknown_8418468
- .4byte gUnknown_841846F
- .4byte gUnknown_8418475
- .4byte gUnknown_8418484
- .4byte gUnknown_841847E
- .4byte gUnknown_8418489
- .4byte gUnknown_841848F
- .4byte gUnknown_8418497
- .4byte gUnknown_841849F
- .4byte gUnknown_84184A9
- .4byte gUnknown_84184AE
- .4byte gUnknown_84184A4
- .4byte gUnknown_84184B8
- .4byte gUnknown_84184BD
- .4byte gUnknown_84184BD
- .4byte gUnknown_84184C2
- .4byte gUnknown_84184C9
- .4byte gUnknown_84184CD
- .4byte gUnknown_84184D2
- .4byte gUnknown_84184DC
- .4byte gUnknown_84184E6
- .4byte gUnknown_84184F0
- .4byte gUnknown_84184F9
- .4byte gUnknown_8418500
- .4byte gUnknown_8418505
- .4byte gUnknown_841850C
- .4byte gUnknown_8418514
- .4byte gUnknown_8418519
- .4byte gUnknown_8418521
- .4byte gUnknown_8418526
- .4byte gUnknown_841852B
- .4byte gUnknown_8418531
- .4byte gUnknown_841853A
- .4byte gUnknown_8418540
- .4byte gUnknown_8418544
- .4byte gUnknown_841854A
- .4byte gUnknown_8418555
- .4byte gUnknown_841855B
-
-gUnknown_83D35D4:: @ 83D35D4
- .byte 0, 10, 3, 20, 18, 9
- .2byte 0x000a
-
-gUnknown_83D35DC:: @ 83D35DC
- .incbin "graphics/interface/pss_unk_83D35DC.4bpp"
-
-gUnknown_83D365C::
- .4byte 0x80000100, 0x00000400
-
-gUnknown_83D3664::
- obj_rot_scal_anim_frame 128, 128, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_83D3674::
- obj_rot_scal_anim_frame 88, 88, 0, 0
- obj_rot_scal_anim_frame 5, 5, 0, 8
- obj_rot_scal_anim_end
-
-gUnknown_83D368C::
- obj_rot_scal_anim_frame 128, 128, 0, 0
- obj_rot_scal_anim_frame -5, -5, 0, 8
- obj_rot_scal_anim_end
-
-gUnknown_83D36A4::
- obj_rot_scal_anim_frame 128, 128, 0, 0
- obj_rot_scal_anim_frame 10, 10, 0, 12
- obj_rot_scal_anim_frame 256, 256, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_83D36C4::
- obj_rot_scal_anim_frame 256, 256, 0, 0
- obj_rot_scal_anim_frame -10, -10, 0, 12
- obj_rot_scal_anim_frame 128, 128, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_83D36E4::
- obj_rot_scal_anim_frame 256, 256, 0, 0
- obj_rot_scal_anim_frame -5, -5, 0, 16
- obj_rot_scal_anim_end
-
-gUnknown_83D36FC::
- obj_rot_scal_anim_frame 256, 256, 0, 0
- obj_rot_scal_anim_end
-
-gUnknown_83D370C::
- .4byte gUnknown_83D3664
- .4byte gUnknown_83D3674
- .4byte gUnknown_83D368C
- .4byte gUnknown_83D36A4
- .4byte gUnknown_83D36C4
- .4byte gUnknown_83D36E4
- .4byte gUnknown_83D36FC
-
-gUnknown_83D3728:: @ 83D3728
- spr_template 7, 56011, gUnknown_83D365C, gDummySpriteAnimTable, NULL, gUnknown_83D370C, SpriteCallbackDummy
diff --git a/data/scripts/pc.inc b/data/scripts/pc.inc
index 0c71b9c76..a3190ea26 100644
--- a/data/scripts/pc.inc
+++ b/data/scripts/pc.inc
@@ -48,7 +48,7 @@ EventScript_AccessPokemonStorage:: @ 81A6A05
call_if_unset FLAG_SYS_NOT_SOMEONES_PC, EventScript_AccessSomeonesPC
call_if_set FLAG_SYS_NOT_SOMEONES_PC, EventScript_AccessBillsPC
msgbox Text_OpenedPkmnStorage
- special ShowPokemonStorageSystem
+ special ShowPokemonStorageSystemPC
waitstate
setvar VAR_0x8004, HELPCONTEXT_PC
special Script_SetHelpContext
diff --git a/data/specials.inc b/data/specials.inc
index 0d7670f63..dbe9deebc 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -68,7 +68,7 @@ gSpecials:: @ 815FD60
def_special ShouldTryRematchBattle
def_special IsTrainerReadyForRematch
def_special StartRematchBattle
- def_special ShowPokemonStorageSystem
+ def_special ShowPokemonStorageSystemPC
def_special HasEnoughMonsForDoubleBattle
def_special NullFieldSpecial @ Hoenn TV specials
def_special NullFieldSpecial
diff --git a/graphics/field_effects/unk_83C2D00.pal b/graphics/field_effects/unk_83C2D00.pal
deleted file mode 100644
index fe57a8c7f..000000000
--- a/graphics/field_effects/unk_83C2D00.pal
+++ /dev/null
@@ -1,19 +0,0 @@
-JASC-PAL
-0100
-16
-65 148 255
-180 222 255
-115 205 246
-131 197 255
-82 189 246
-172 238 246
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
diff --git a/graphics/field_effects/unk_83C2D20.pal b/graphics/field_effects/unk_83C2D20.pal
deleted file mode 100644
index 9516c7a19..000000000
--- a/graphics/field_effects/unk_83C2D20.pal
+++ /dev/null
@@ -1,19 +0,0 @@
-JASC-PAL
-0100
-16
-0 0 0
-255 230 139
-189 131 74
-238 197 123
-213 164 98
-164 106 49
-255 246 164
-222 205 164
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
diff --git a/graphics/field_effects/unk_83C3540.png b/graphics/field_effects/unk_83C3540.png
deleted file mode 100644
index 891e395ad..000000000
--- a/graphics/field_effects/unk_83C3540.png
+++ /dev/null
Binary files differ
diff --git a/graphics/field_effects/unk_83C4540.png b/graphics/field_effects/unk_83C4540.png
deleted file mode 100644
index 14cf009e5..000000000
--- a/graphics/field_effects/unk_83C4540.png
+++ /dev/null
Binary files differ
diff --git a/graphics/field_effects/unk_83C4580.png b/graphics/field_effects/unk_83C4580.png
deleted file mode 100644
index 6bc714152..000000000
--- a/graphics/field_effects/unk_83C4580.png
+++ /dev/null
Binary files differ
diff --git a/graphics/field_effects/unk_83C55C0.png b/graphics/field_effects/unk_83C55C0.png
deleted file mode 100644
index a367de4e7..000000000
--- a/graphics/field_effects/unk_83C55C0.png
+++ /dev/null
Binary files differ
diff --git a/graphics/interface/pss_unk_83CEA30.pal b/graphics/interface/pss_unk_83CEA30.pal
deleted file mode 100644
index dcc6395db..000000000
--- a/graphics/interface/pss_unk_83CEA30.pal
+++ /dev/null
@@ -1,19 +0,0 @@
-JASC-PAL
-0100
-16
-8 0 0
-90 65 16
-57 197 0
-0 49 0
-0 197 16
-139 131 32
-16 65 24
-164 0 0
-0 0 0
-98 65 49
-65 197 24
-164 0 0
-255 57 0
-0 0 0
-0 0 0
-0 0 0
diff --git a/graphics/field_effects/unk_83BFBE4.bin b/graphics/title_screen/unk_83BFBE4.bin
index 54748ea04..54748ea04 100644
--- a/graphics/field_effects/unk_83BFBE4.bin
+++ b/graphics/title_screen/unk_83BFBE4.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C0408.bin b/graphics/title_screen/unk_83C0408.bin
index 932da7b46..932da7b46 100644
--- a/graphics/field_effects/unk_83C0408.bin
+++ b/graphics/title_screen/unk_83C0408.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C0C00.bin b/graphics/title_screen/unk_83C0C00.bin
index 7271feda4..7271feda4 100644
--- a/graphics/field_effects/unk_83C0C00.bin
+++ b/graphics/title_screen/unk_83C0C00.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C139C.bin b/graphics/title_screen/unk_83C139C.bin
index f983e37a5..f983e37a5 100644
--- a/graphics/field_effects/unk_83C139C.bin
+++ b/graphics/title_screen/unk_83C139C.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C1BB8.bin b/graphics/title_screen/unk_83C1BB8.bin
index bba7a0909..bba7a0909 100644
--- a/graphics/field_effects/unk_83C1BB8.bin
+++ b/graphics/title_screen/unk_83C1BB8.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C2380.bin b/graphics/title_screen/unk_83C2380.bin
index 9e13c930b..9e13c930b 100644
--- a/graphics/field_effects/unk_83C2380.bin
+++ b/graphics/title_screen/unk_83C2380.bin
Binary files differ
diff --git a/graphics/field_effects/unk_83C45C0.png b/graphics/weather/ash.png
index f5ee4ce9c..901605078 100644
--- a/graphics/field_effects/unk_83C45C0.png
+++ b/graphics/weather/ash.png
Binary files differ
diff --git a/graphics/weather/bubble.png b/graphics/weather/bubble.png
new file mode 100644
index 000000000..05885a11d
--- /dev/null
+++ b/graphics/weather/bubble.png
Binary files differ
diff --git a/graphics/field_effects/unk_83C3D40.png b/graphics/weather/cloud.png
index 882fc213f..7eb3c61d9 100644
--- a/graphics/field_effects/unk_83C3D40.png
+++ b/graphics/weather/cloud.png
Binary files differ
diff --git a/graphics/field_effects/unk_83C2D40.png b/graphics/weather/fog_diagonal.png
index b3d52b9e6..198c6f494 100644
--- a/graphics/field_effects/unk_83C2D40.png
+++ b/graphics/weather/fog_diagonal.png
Binary files differ
diff --git a/graphics/weather/fog_horizontal.png b/graphics/weather/fog_horizontal.png
new file mode 100644
index 000000000..02e3cd3cb
--- /dev/null
+++ b/graphics/weather/fog_horizontal.png
Binary files differ
diff --git a/graphics/weather/rain.png b/graphics/weather/rain.png
new file mode 100644
index 000000000..eaaa0b4e3
--- /dev/null
+++ b/graphics/weather/rain.png
Binary files differ
diff --git a/graphics/field_effects/unk_83C5BC0.png b/graphics/weather/sandstorm.png
index 9896daac7..aeb03f59f 100644
--- a/graphics/field_effects/unk_83C5BC0.png
+++ b/graphics/weather/sandstorm.png
Binary files differ
diff --git a/graphics/weather/snow0.png b/graphics/weather/snow0.png
new file mode 100644
index 000000000..1e3553172
--- /dev/null
+++ b/graphics/weather/snow0.png
Binary files differ
diff --git a/graphics/weather/snow1.png b/graphics/weather/snow1.png
new file mode 100644
index 000000000..7277d51d4
--- /dev/null
+++ b/graphics/weather/snow1.png
Binary files differ
diff --git a/include/blend_palette.h b/include/blend_palette.h
index 4ece15d69..7f0826187 100644
--- a/include/blend_palette.h
+++ b/include/blend_palette.h
@@ -10,5 +10,6 @@
// Exported ROM declarations
void BlendPalette(u16, u16, u8, u16);
+void sub_8045314(u16 * palbuff, u16 blend_pal, u32 coefficient, s32 size);
#endif //GUARD_BLEND_PALETTE_H
diff --git a/include/box_party_pokemon_dropdown.h b/include/box_party_pokemon_dropdown.h
index e1ca7256f..52e620956 100644
--- a/include/box_party_pokemon_dropdown.h
+++ b/include/box_party_pokemon_dropdown.h
@@ -1,14 +1,24 @@
#ifndef GUARD_BOX_PARTY_POKEMON_DROPDOWN_H
#define GUARD_BOX_PARTY_POKEMON_DROPDOWN_H
-void sub_80F7AD8(u8 num);
-void sub_80F7B2C(void);
-void sub_80F7B40(void);
-void sub_80F7B80(u8 a0, u8 a1, const void * a2, u16 a3, u16 a4);
-void sub_80F7C7C(u8 a0, const void * a1);
-void sub_80F7CAC(u8 a0, u16 a1, u16 a2);
-void sub_80F7CE8(u8 a0, u16 a1, u16 a2, u16 a3, u16 a4);
-void sub_80F7D30(u8 a0, u8 a1, s8 a2);
-void sub_80F7E54(u8 a0);
+enum
+{
+ BPPD_MOVE_INNER_LEFT = 0,
+ BPPD_MOVE_OUTER_LEFT,
+ BPPD_MOVE_INNER_TOP,
+ BPPD_MOVE_OUTER_TOP,
+ BPPD_MOVE_INNER_X,
+ BPPD_MOVE_INNER_Y
+};
+
+void AllocBoxPartyPokemonDropdowns(u8 num);
+void FreeBoxPartyPokemonDropdowns(void);
+void CopyAllBoxPartyPokemonDropdownsToVram(void);
+void SetBoxPartyPokemonDropdownMap2(u8 idx, u8 bgId, const void * src, u16 width, u16 height);
+void SetBoxPartyPokemonDropdownMap1Tiles(u8 idx, const void * src);
+void SetBoxPartyPokemonDropdownMap2Pos(u8 idx, u16 x, u16 y);
+void SetBoxPartyPokemonDropdownMap2Rect(u8 idx, u16 x, u16 y, u16 width, u16 height);
+void AdjustBoxPartyPokemonDropdownPos(u8 a0, u8 a1, s8 a2);
+void CopyBoxPartyPokemonDropdownToBgTilemapBuffer(u8 idx);
#endif //GUARD_BOX_PARTY_POKEMON_DROPDOWN_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 85d704680..0bc96eb35 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -1365,7 +1365,7 @@
#define FLAG_SYS_NATIONAL_DEX (SYS_FLAGS + 0x40)
#define FLAG_SYS_PC_STORAGE_DISABLED (SYS_FLAGS + 0x41)
#define FLAG_SYS_INFORMED_OF_LOCAL_WIRELESS_PLAYER (SYS_FLAGS + 0x42)
-#define FLAG_SYS_CHANGED_BOX_TO_STORE_MON (SYS_FLAGS + 0x43)
+#define FLAG_SHOWN_BOX_WAS_FULL_MESSAGE (SYS_FLAGS + 0x43)
#define FLAG_SYS_CAN_LINK_WITH_RS (SYS_FLAGS + 0x44)
#define FLAG_SYS_SEVII_MAP_123 (SYS_FLAGS + 0x45)
#define FLAG_SYS_SEVII_MAP_4567 (SYS_FLAGS + 0x46)
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index a8009f1ff..bc02bffdd 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -212,5 +212,6 @@
#define MAX_TOTAL_EVS 510
#define UNOWN_FORM_COUNT 28
#define MAX_MON_LEVEL 100
+#define BOX_NAME_LENGTH 8
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/constants/weather.h b/include/constants/weather.h
index 77be45c51..241dc5e2a 100644
--- a/include/constants/weather.h
+++ b/include/constants/weather.h
@@ -16,5 +16,7 @@
#define WEATHER_DROUGHT 12 // unused and broken in overworld
#define WEATHER_DOWNPOUR 13 // unused
#define WEATHER_UNDERWATER_BUBBLES 14 // unused
+#define WEATHER_ROUTE119_CYCLE 20 // unused
+#define WEATHER_ROUTE123_CYCLE 21 // unused
#endif // GUARD_CONSTANTS_WEATHER_H
diff --git a/include/field_weather.h b/include/field_weather.h
index 6b62f0edd..432c8c100 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -2,6 +2,114 @@
#define GUARD_WEATHER_H
#include "global.h"
+#include "constants/field_weather.h"
+
+struct Weather
+{
+ union
+ {
+ struct
+ {
+ struct Sprite *rainSprites[MAX_RAIN_SPRITES];
+ struct Sprite *snowflakeSprites[101];
+ struct Sprite *cloudSprites[NUM_CLOUD_SPRITES];
+ } s1;
+ struct
+ {
+ u8 filler0[0xA0];
+ struct Sprite *fogHSprites[NUM_FOG_HORIZONTAL_SPRITES];
+ struct Sprite *ashSprites[NUM_ASH_SPRITES];
+ struct Sprite *fogDSprites[NUM_FOG_DIAGONAL_SPRITES];
+ struct Sprite *sandstormSprites1[NUM_SANDSTORM_SPRITES];
+ struct Sprite *sandstormSprites2[NUM_SWIRL_SANDSTORM_SPRITES];
+ } s2;
+ } sprites;
+ u8 gammaShifts[19][32];
+ u8 altGammaShifts[19][32];
+ s8 gammaIndex;
+ s8 gammaTargetIndex;
+ u8 gammaStepDelay;
+ u8 gammaStepFrameCounter;
+ u16 fadeDestColor;
+ u8 palProcessingState;
+ u8 fadeScreenCounter;
+ bool8 readyForInit;
+ u8 taskId;
+ u8 unknown_6CA;
+ u8 unknown_6CB;
+ u16 initStep;
+ u16 finishStep;
+ u8 currWeather;
+ u8 nextWeather;
+ u8 weatherGfxLoaded;
+ bool8 weatherChangeComplete;
+ u8 weatherPicSpritePalIndex;
+ u8 altGammaSpritePalIndex;
+ u16 rainSpriteVisibleCounter;
+ u8 curRainSpriteIndex;
+ u8 targetRainSpriteCount;
+ u8 rainSpriteCount;
+ u8 rainSpriteVisibleDelay;
+ u8 isDownpour;
+ u8 rainStrength;
+ bool8 cloudSpritesCreated;
+ u16 snowflakeVisibleCounter;
+ u16 unknown_6E2;
+ u8 snowflakeSpriteCount;
+ u8 targetSnowflakeSpriteCount;
+ u16 unknown_6E6;
+ u16 thunderCounter;
+ u8 unknown_6EA;
+ u8 unknown_6EB;
+ u8 unknown_6EC;
+ bool8 thunderTriggered;
+ u16 fogHScrollPosX;
+ u16 fogHScrollCounter;
+ u16 fogHScrollOffset;
+ u8 lightenedFogSpritePals[6];
+ u8 lightenedFogSpritePalsCount;
+ bool8 fogHSpritesCreated;
+ u16 ashBaseSpritesX;
+ u16 unknown_6FE;
+ bool8 ashSpritesCreated;
+ u32 sandstormXOffset;
+ u32 sandstormYOffset;
+ u8 filler_70C[2];
+ u16 sandstormBaseSpritesX;
+ u16 sandstormPosY;
+ u16 sandstormWaveIndex;
+ u16 sandstormWaveCounter;
+ bool8 sandstormSpritesCreated;
+ bool8 sandstormSwirlSpritesCreated;
+ u16 fogDBaseSpritesX;
+ u16 fogDPosY;
+ u16 fogDScrollXCounter;
+ u16 fogDScrollYCounter;
+ u16 fogDXOffset;
+ u16 fogDYOffset;
+ bool8 fogDSpritesCreated;
+ u16 bubblesDelayCounter;
+ u16 bubblesDelayIndex;
+ u16 bubblesCoordsIndex;
+ u16 bubblesSpriteCount;
+ bool8 bubblesSpritesCreated;
+ u16 currBlendEVA;
+ u16 currBlendEVB;
+ u16 targetBlendEVA;
+ u16 targetBlendEVB;
+ u8 blendUpdateCounter;
+ u8 blendFrameCounter;
+ u8 blendDelay;
+ s16 unknown_73C;
+ s16 unknown_73E;
+ s16 unknown_740;
+ s16 unknown_742;
+ u8 filler_744[0xD-4];
+ s8 loadDroughtPalsIndex;
+ u8 loadDroughtPalsOffset;
+};
+
+extern struct Weather *const gWeatherPtr;
void FadeScreen(u8 mode, s8 delay);
@@ -17,9 +125,35 @@ bool8 IsWeatherNotFadingIn(void);
void SetWeatherScreenFadeOut(void);
void sub_807B070(void);
u8 GetCurrentWeather(void);
-void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32);
+void delay(u8, u8, u32);
void UpdateSpritePaletteWithWeather(u8 palIdx);
void ResetPreservedPalettesInWeather(void);
void PreservePaletteInWeather(u8 palIdx);
+void SetNextWeather(u8 weather);
+void SetCurrentAndNextWeather(u8 weather);
+void Weather_SetBlendCoeffs(u8 eva, u8 evb);
+void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay);
+bool8 Weather_UpdateBlend(void);
+void LoadCustomWeatherSpritePalette(const u16 *palette);
+void ResetDroughtWeatherPaletteLoading(void);
+bool8 LoadDroughtWeatherPalettes(void);
+void sub_807AC60(void);
+void sub_807AC98(void);
+void SetRainStrengthFromSoundEffect(u16 soundEffect);
+void sub_807A790(s8 gammaIndex);
+void sub_807A7C4(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay);
+
+extern const u16 gCloudsWeatherPalette[];
+extern const u16 gSandstormWeatherPalette[];
+extern const u8 gWeatherFogDiagonalTiles[];
+extern const u8 gWeatherFogHorizontalTiles[];
+extern const u8 gWeatherCloudTiles[];
+extern const u8 gWeatherSnow1Tiles[];
+extern const u8 gWeatherSnow2Tiles[];
+extern const u8 gWeatherBubbleTiles[];
+extern const u8 gWeatherAshTiles[];
+extern const u8 gWeatherRainTiles[];
+extern const u8 gWeatherSandstormTiles[];
+
#endif // GUARD_WEATHER_H
diff --git a/include/field_weather_effects.h b/include/field_weather_effects.h
new file mode 100644
index 000000000..8ff3bae9c
--- /dev/null
+++ b/include/field_weather_effects.h
@@ -0,0 +1,55 @@
+#ifndef GUARD_FIELD_WEATHER_EFFECTS_H
+#define GUARD_FIELD_WEATHER_EFFECTS_H
+
+bool8 Ash_Finish(void);
+bool8 Bubbles_Finish(void);
+bool8 Clouds_Finish(void);
+bool8 FogHorizontal_Finish(void);
+bool8 FogDiagonal_Finish(void);
+bool8 Rain_Finish(void);
+bool8 Thunderstorm_Finish(void);
+bool8 Sandstorm_Finish(void);
+bool8 Snow_Finish(void);
+bool8 Sunny_Finish(void);
+bool8 Drought_Finish(void);
+bool8 Shade_Finish(void);
+void Ash_InitAll(void);
+void Ash_InitVars(void);
+void Ash_Main(void);
+void Bubbles_InitAll(void);
+void Bubbles_InitVars(void);
+void Bubbles_Main(void);
+void Clouds_InitAll(void);
+void Clouds_InitVars(void);
+void Clouds_Main(void);
+void Drought_InitAll(void);
+void Drought_InitVars(void);
+void Drought_Main(void);
+void FogHorizontal_InitAll(void);
+void FogHorizontal_InitVars(void);
+void FogHorizontal_Main(void);
+void FogDiagonal_InitAll(void);
+void FogDiagonal_InitVars(void);
+void FogDiagonal_Main(void);
+void Rain_InitAll(void);
+void Rain_InitVars(void);
+void Rain_Main(void);
+void Thunderstorm_Main(void);
+void Sandstorm_InitAll(void);
+void Sandstorm_InitVars(void);
+void Sandstorm_Main(void);
+void Snow_InitAll(void);
+void Snow_InitVars(void);
+void Shade_InitAll(void);
+void Shade_InitVars(void);
+void Sunny_InitAll(void);
+void Sunny_InitVars(void);
+void Sunny_Main(void);
+void Shade_Main(void);
+void Snow_Main(void);
+void Thunderstorm_InitVars(void);
+void Thunderstorm_InitAll(void);
+void Downpour_InitVars(void);
+void Downpour_InitAll(void);
+
+#endif //GUARD_FIELD_WEATHER_EFFECTS_H
diff --git a/include/field_weather_util.h b/include/field_weather_util.h
new file mode 100644
index 000000000..da49d3869
--- /dev/null
+++ b/include/field_weather_util.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_FIELD_WEATHER_UTIL_H
+#define GUARD_FIELD_WEATHER_UTIL_H
+
+void SetWeather(u8 weather);
+
+#endif //GUARD_FIELD_WEATHER_UTIL_H
diff --git a/include/global.h b/include/global.h
index 8a8877143..b2fd67b4b 100644
--- a/include/global.h
+++ b/include/global.h
@@ -749,7 +749,7 @@ struct SaveBlock1
/*0x0024*/ struct WarpData escapeWarp;
/*0x002C*/ u16 savedMusic;
/*0x002E*/ u8 weather;
- /*0x002F*/ u8 filler_2F;
+ /*0x002F*/ u8 weatherCycleStage;
/*0x0030*/ u8 flashLevel;
/*0x0032*/ u16 mapLayoutId;
/*0x0034*/ u8 playerPartyCount;
diff --git a/include/graphics.h b/include/graphics.h
index d84371e3a..8978719a8 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4322,7 +4322,7 @@ extern const u32 gSubstituteDollTilemap[];
extern const u32 gSubstituteDollPal[];
// ice
-extern const u8 gWeatherFog1Tiles[];
+extern const u8 gWeatherFogHorizontalTiles[];
extern const u32 gBattleAnimFogTilemap[];
extern const u16 gUnknown_83C2CE0[];
@@ -4917,4 +4917,11 @@ extern const u16 gUnknown_8E98F38[];
extern const u16 gUnknown_8E990D8[];
extern const u16 gUnknown_8E990F8[];
+// pokemon_storage_system
+extern const u32 gPSSMenu_Gfx[];
+extern const u32 gUnknown_8E9CAEC[];
+extern const u16 gPSSMenu_Pal[];
+extern const u16 gUnknown_8E9C3F8[];
+extern const u16 gUnknown_8E9C418[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/pc_screen_effect.h b/include/pc_screen_effect.h
index 6d68de2d3..7bb190774 100644
--- a/include/pc_screen_effect.h
+++ b/include/pc_screen_effect.h
@@ -1,9 +1,9 @@
#ifndef GUARD_PC_SCREEN_EFFECT_H
#define GUARD_PC_SCREEN_EFFECT_H
-void sub_80A0A48(u16, u16, u8);
-void sub_80A0A70(u16, u16, u8);
-bool8 sub_80A0AAC(void);
-bool8 sub_80A0A98(void);
+void BeginPCScreenEffect_TurnOn(u16 xspeed, u16 yspeed, u8 priority);
+void BeginPCScreenEffect_TurnOff(u16 xspeed, u16 yspeed, u8 priority);
+bool8 IsPCScreenEffectRunning_TurnOff(void);
+bool8 IsPCScreenEffectRunning_TurnOn(void);
#endif //GUARD_PC_SCREEN_EFFECT_H
diff --git a/include/pokemon.h b/include/pokemon.h
index be0a35877..3cefcfcf2 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -126,7 +126,7 @@ struct PokemonStorage
{
/*0x0000*/ u8 currentBox;
/*0x0001*/ struct BoxPokemon boxes[14][30];
- /*0x8344*/ u8 boxNames[14][9];
+ /*0x8344*/ u8 boxNames[14][BOX_NAME_LENGTH + 1];
/*0x83C2*/ u8 boxWallpapers[14];
};
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index 5b9876677..e2eebc62b 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -4,6 +4,7 @@
#include "global.h"
extern const u16 gMonIconPalettes[][16];
+extern const u8 gMonIconPaletteIndices[];
const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);
const u8 *GetMonIconTiles(u16 iconSpecies, bool32 extra);
@@ -26,5 +27,8 @@ void LoadMonIconPalette(u16 iconId);
void FreeMonIconPalette(u16 iconId);
void SetPartyHPBarSprite(struct Sprite * sprite, u8 animNum);
u8 GetMonIconPaletteIndexFromSpecies(u16 species);
+u16 GetIconSpecies(u16 species, u32 personality);
+void LoadMonIconPalettesAt(u16 offset);
+u8 GetValidMonIconPalIndex(u16 species);
#endif // GUARD_POKEMON_ICON_H
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index c636651f3..7422b4522 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -6,15 +6,36 @@
#define TOTAL_BOXES_COUNT 14
#define IN_BOX_COUNT 30
+enum
+{
+ WALLPAPER_FOREST,
+ WALLPAPER_CITY,
+ WALLPAPER_DESERT,
+ WALLPAPER_SAVANNA,
+ WALLPAPER_CRAG,
+ WALLPAPER_VOLCANO,
+ WALLPAPER_SNOW,
+ WALLPAPER_CAVE,
+ WALLPAPER_BEACH,
+ WALLPAPER_SEAFLOOR,
+ WALLPAPER_RIVER,
+ WALLPAPER_SKY,
+ WALLPAPER_POLKADOT,
+ WALLPAPER_POKECENTER,
+ WALLPAPER_MACHINE,
+ WALLPAPER_PLAIN,
+ WALLPAPER_COUNT
+};
+
u8 *GetBoxNamePtr(u8 boxNumber);
struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 monPosition);
-void SetBoxMonNickFromAnyBox(u8 boxId, u8 monPosition, u8 * newNick);
-void CompactPartySlots(void);
-u32 GetBoxMonDataFromAnyBox(u8 boxId, u8 monPosition, u32 request);
-void sub_808BCB4(u8 boxId, u8 monPosition);
-void sub_808CE60(void);
+void SetBoxMonNickAt(u8 boxId, u8 monPosition, const u8 *newNick);
+s16 CompactPartySlots(void);
+u32 GetBoxMonDataAt(u8 boxId, u8 monPosition, s32 request);
+void ZeroBoxMonAt(u8 boxId, u8 monPosition);
+void Cb2_ReturnToPSS(void);
void ResetPokemonStorageSystem(void);
u8 StorageGetCurrentBox(void);
-void PSS_RenderTextToVramViaBuffer(const u8 *name, u8 *a1, u8 a2, u8 a3, u8 *buffer, u8 a5);
+void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, u8 *buffer, s32 bytesToBuffer);
#endif // GUARD_POKEMON_STORAGE_SYSTEM_H
diff --git a/include/pokemon_storage_system_internal.h b/include/pokemon_storage_system_internal.h
new file mode 100644
index 000000000..ba109640b
--- /dev/null
+++ b/include/pokemon_storage_system_internal.h
@@ -0,0 +1,516 @@
+#ifndef GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H
+#define GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H
+
+#include "pokemon_storage_system.h"
+#include "mon_markings.h"
+
+#define IN_BOX_COLUMNS 5
+#define IN_BOX_ROWS 6
+
+#define MAX_MON_ICONS 40
+#define MAX_ITEM_ICONS 3
+#define MAX_MENU_ITEMS 7
+
+enum
+{
+ MODE_PARTY,
+ MODE_BOX,
+ MODE_2,
+};
+
+enum
+{
+ BOX_OPTION_WITHDRAW,
+ BOX_OPTION_DEPOSIT,
+ BOX_OPTION_MOVE_MONS,
+ BOX_OPTION_MOVE_ITEMS,
+ BOX_OPTION_EXIT,
+};
+
+enum
+{
+ PC_TEXT_EXIT_BOX,
+ PC_TEXT_WHAT_YOU_DO,
+ PC_TEXT_PICK_A_THEME,
+ PC_TEXT_PICK_A_WALLPAPER,
+ PC_TEXT_IS_SELECTED,
+ PC_TEXT_JUMP_TO_WHICH_BOX,
+ PC_TEXT_DEPOSIT_IN_WHICH_BOX,
+ PC_TEXT_WAS_DEPOSITED,
+ PC_TEXT_BOX_IS_FULL,
+ PC_TEXT_RELEASE_POKE,
+ PC_TEXT_WAS_RELEASED,
+ PC_TEXT_BYE_BYE,
+ PC_TEXT_MARK_POKE,
+ PC_TEXT_LAST_POKE,
+ PC_TEXT_PARTY_FULL,
+ PC_TEXT_HOLDING_POKE,
+ PC_TEXT_WHICH_ONE_WILL_TAKE,
+ PC_TEXT_CANT_RELEASE_EGG,
+ PC_TEXT_CONTINUE_BOX,
+ PC_TEXT_CAME_BACK,
+ PC_TEXT_WORRIED,
+ PC_TEXT_SURPRISE,
+ PC_TEXT_PLEASE_REMOVE_MAIL,
+ PC_TEXT_IS_SELECTED2,
+ PC_TEXT_GIVE_TO_MON,
+ PC_TEXT_PLACED_IN_BAG,
+ PC_TEXT_BAG_FULL,
+ PC_TEXT_PUT_IN_BAG,
+ PC_TEXT_ITEM_IS_HELD,
+ PC_TEXT_CHANGED_TO_ITEM,
+ PC_TEXT_CANT_STORE_MAIL,
+};
+
+enum
+{
+ PC_TEXT_FMT_NORMAL,
+ PC_TEXT_FMT_MON_NAME_1,
+ PC_TEXT_FMT_MON_NAME_2,
+ PC_TEXT_FMT_MON_NAME_3,
+ PC_TEXT_FMT_MON_NAME_4,
+ PC_TEXT_FMT_MON_NAME_5,
+ PC_TEXT_FMT_MON_NAME_6,
+ PC_TEXT_FMT_ITEM_NAME,
+};
+
+enum
+{
+ PC_TEXT_CANCEL,
+ PC_TEXT_STORE,
+ PC_TEXT_WITHDRAW,
+ PC_TEXT_MOVE,
+ PC_TEXT_SHIFT,
+ PC_TEXT_PLACE,
+ PC_TEXT_SUMMARY,
+ PC_TEXT_RELEASE,
+ PC_TEXT_MARK,
+ PC_TEXT_JUMP,
+ PC_TEXT_WALLPAPER,
+ PC_TEXT_NAME,
+ PC_TEXT_TAKE,
+ PC_TEXT_GIVE,
+ PC_TEXT_GIVE2,
+ PC_TEXT_SWITCH,
+ PC_TEXT_BAG,
+ PC_TEXT_INFO,
+ PC_TEXT_SCENERY1,
+ PC_TEXT_SCENERY2,
+ PC_TEXT_SCENERY3,
+ PC_TEXT_ETCETERA,
+ PC_TEXT_FOREST,
+ PC_TEXT_CITY,
+ PC_TEXT_DESERT,
+ PC_TEXT_SAVANNA,
+ PC_TEXT_CRAG,
+ PC_TEXT_VOLCANO,
+ PC_TEXT_SNOW,
+ PC_TEXT_CAVE,
+ PC_TEXT_BEACH,
+ PC_TEXT_SEAFLOOR,
+ PC_TEXT_RIVER,
+ PC_TEXT_SKY,
+ PC_TEXT_POLKADOT,
+ PC_TEXT_POKECENTER,
+ PC_TEXT_MACHINE,
+ PC_TEXT_SIMPLE,
+};
+
+enum
+{
+ CURSOR_AREA_IN_BOX,
+ CURSOR_AREA_IN_PARTY,
+ CURSOR_AREA_BOX,
+ CURSOR_AREA_BUTTONS, // Party Pokemon and Close Box
+};
+
+enum
+{
+ SCREEN_CHANGE_EXIT_BOX,
+ SCREEN_CHANGE_SUMMARY_SCREEN,
+ SCREEN_CHANGE_NAME_BOX,
+ SCREEN_CHANGE_ITEM_FROM_BAG,
+};
+
+#define TAG_PAL_WAVEFORM 0xDACA
+#define TAG_PAL_DAC8 0xDAC8
+#define TAG_PAL_DAC6 0xDAC6
+#define TAG_PAL_DACE 0xDACE
+#define TAG_PAL_DAC7 0xDAC7
+#define TAG_PAL_DAC9 0xDAC9
+#define TAG_PAL_DAC0 0xDAC0
+#define TAG_PAL_DACB 0xDACB
+
+#define TAG_TILE_WAVEFORM 0x5
+#define TAG_TILE_10 0x10
+#define TAG_TILE_2 0x2
+#define TAG_TILE_D 0xD
+#define TAG_TILE_A 0xA
+#define TAG_TILE_3 0x3
+#define TAG_TILE_4 0x4
+#define TAG_TILE_12 0x12
+#define TAG_TILE_7 0x7
+#define TAG_TILE_0 0x0
+#define TAG_TILE_1 0x1
+#define TAG_TILE_6 0x6
+
+struct WallpaperTable
+{
+ const u32 *tiles;
+ const u32 *tileMap;
+ const u16 *palettes;
+};
+
+struct StorageAction
+{
+ const u8 *text;
+ u8 format;
+};
+
+struct UnkPSSStruct_2002370
+{
+ struct Sprite *unk_0000;
+ struct Sprite *unk_0004[4];
+ u32 unk_0014[3]; // unused
+ struct Sprite *unk_0020[2];
+ u8 buffer[0x200]; // passed but not used
+ u8 strbuf[20];
+ bool32 loadPal;
+ u16 tilesTag;
+ u16 paletteTag;
+ u8 curBox;
+ u8 unk_0245; // unused
+ u8 subpriority;
+};
+
+struct StorageMenu
+{
+ const u8 *text;
+ int textId;
+};
+
+struct UnkStruct_2000028
+{
+ const u8 *unk_00;
+ u8 *unk_04;
+ u16 unk_08;
+ u16 unk_0a;
+ u16 newField;
+ void (*unk_0c)(struct UnkStruct_2000028 *data);
+};
+
+struct UnkStruct_2000020
+{
+ struct UnkStruct_2000028 *unk_00;
+ u8 unk_04;
+ u8 unk_05;
+};
+
+struct PSS_ItemIconSprite
+{
+ struct Sprite *sprite;
+ u8 *tiles;
+ u16 palIndex;
+ u8 cursorArea;
+ u8 cursorPos;
+ u8 active;
+};
+
+struct PssQuestLogBuffer
+{
+ u16 species;
+ u16 species2;
+ u8 fromBox;
+ u8 toBox;
+};
+
+struct PokemonStorageSystemData
+{
+ u8 state;
+ u8 boxOption;
+ u8 screenChangeType;
+ bool8 isReshowingPSS;
+ u8 taskId;
+ struct UnkStruct_2000020 unk_0020;
+ struct UnkStruct_2000028 unk_0028[8];
+ u16 field_B0[528 / 2];
+ u16 field_2C0;
+ u16 field_2C2;
+ u8 field_2C4;
+ u8 field_2C5;
+ u8 showPartyMenuState;
+ bool8 unk_02C7;
+ u8 unk_02C8;
+ bool8 unk_02C9;
+ s16 newCurrBoxId;
+ u16 bg2_X;
+ s16 field_2CE;
+ u16 field_2D0;
+ u8 field_2D2;
+ u8 field_2D3;
+ u8 field_2D4;
+ u16 field_2D6;
+ s16 field_2D8;
+ u16 field_2DA;
+ u16 field_2DC;
+ u16 field_2DE;
+ u16 field_2E0;
+ u8 filler[22];
+ u8 field_2F8[512];
+ u8 field_4F8[512];
+ u8 field_6F8;
+ u8 field_6F9;
+ u8 field_6FA;
+ s8 field_6FB;
+ u16 field_6FC[16];
+ u16 field_71C;
+ u16 field_71E;
+ struct Sprite *field_720[2];
+ struct Sprite *field_728[2];
+ struct Sprite *field_730[2];
+ u32 field_738;
+ u8 field_73C[80];
+ u16 field_78C;
+ s16 wallpaperSetId;
+ s16 wallpaperId;
+ u16 field_792[360];
+ u8 wallpaperChangeState;
+ u8 field_A63;
+ u8 field_A64;
+ s8 field_A65;
+ // u8 *wallpaperTiles; // used only in Emerald for Walda
+ /* 0a68 */ struct Sprite *movingMonSprite;
+ /* 0a6c */ struct Sprite *partySprites[PARTY_SIZE];
+ /* 0a84 */ struct Sprite *boxMonsSprites[IN_BOX_COUNT];
+ /* 0afc */ struct Sprite **field_B00;
+ /* 0b00 */ struct Sprite **field_B04;
+ /* 0b04 */ u16 field_B08[MAX_MON_ICONS];
+ /* 0b54 */ u16 field_B58[MAX_MON_ICONS];
+ /* 0ba4 */ u16 boxSpecies[IN_BOX_COUNT];
+ /* 0be0 */ u32 boxPersonalities[IN_BOX_COUNT];
+ /* 0c58 */ u8 field_C5C;
+ /* 0c59 */ u8 field_C5D;
+ /* 0c5a */ u8 field_C5E;
+ /* 0c5c */ u16 field_C60;
+ /* 0c5e */ s16 field_C62;
+ /* 0c60 */ s16 field_C64;
+ /* 0c62 */ u16 field_C66;
+ /* 0c64 */ u8 field_C68;
+ /* 0c65 */ s8 field_C69;
+ /* 0c66 */ u8 field_C6A;
+ /* 0c67 */ u8 field_C6B;
+ /* 0c68 */ struct WindowTemplate menuWindow;
+ /* 0c70 */ struct StorageMenu menuItems[MAX_MENU_ITEMS];
+ /* 0ca8 */ u8 menuItemsCount;
+ /* 0ca9 */ u8 menuWidth;
+ /* 0caa */ u8 field_CAE;
+ /* 0cac */ u16 field_CB0;
+ /* 0cb0 */ struct Sprite *field_CB4;
+ /* 0cb4 */ struct Sprite *field_CB8;
+ /* 0cb8 */ s32 field_CBC;
+ /* 0cbc */ s32 field_CC0;
+ /* 0cc0 */ u32 field_CC4;
+ /* 0cc4 */ u32 field_CC8;
+ /* 0cc8 */ s16 field_CCC;
+ /* 0cca */ s16 field_CCE;
+ /* 0ccc */ u16 field_CD0;
+ /* 0cce */ s8 field_CD2;
+ /* 0ccf */ s8 field_CD3;
+ /* 0cd0 */ u8 field_CD4;
+ /* 0cd1 */ u8 field_CD5;
+ /* 0cd2 */ u8 field_CD6;
+ /* 0cd3 */ u8 field_CD7;
+ /* 0cd4 */ u8 field_CD8[2];
+ /* 0cd8 */ const u32 *cursorMonPalette;
+ /* 0cdc */ u32 cursorMonPersonality;
+ /* 0ce0 */ u16 cursorMonSpecies;
+ /* 0ce2 */ u16 cursorMonItem;
+ /* 0ce4 */ u16 field_CE8;
+ /* 0ce6 */ bool8 setMosaic;
+ /* 0ce7 */ u8 cursorMonMarkings;
+ /* 0ce8 */ u8 cursorMonLevel;
+ /* 0ce9 */ bool8 cursorMonIsEgg;
+ /* 0cea */ u8 cursorMonNick[POKEMON_NAME_LENGTH + 1];
+ /* 0cf5 */ u8 cursorMonTexts[4][36];
+ /* 0d88 */ bool8 (*monPlaceChangeFunc)(void);
+ /* 0d8c */ u8 monPlaceChangeState;
+ /* 0d8d */ u8 field_D91;
+ /* 0d90 */ struct Sprite *field_D94;
+ /* 0d94 */ struct Sprite *field_D98[2];
+ /* 0d9c */ u16 *field_DA0;
+ /* 0da0 */ struct PokemonMarkMenu field_DA4;
+ /* 1e58 */ struct UnkPSSStruct_2002370 field_1E5C;
+ /* 20a0 */ struct Pokemon movingMon;
+ /* 2104 */ struct Pokemon field_2108;
+ /* 2168 */ u8 field_216C;
+ /* 2169 */ u8 field_216D;
+ /* 216c */ bool8 isSurfMon;
+ /* 216d */ bool8 isDiveMon;
+ /* 216a */ s8 field_216E;
+ /* 216b */ s8 field_216F;
+ /* 216e */ s8 field_2170;
+ /* 216f */ s8 field_2171;
+ /* 2170 */ u16 field_2172;
+ /* 2172 */ u16 field_2176[3];
+ /* 2178 */ u8 field_2186;
+ /* 2179 */ u8 field_2187;
+ /* 217a */ u8 field_2188;
+ /* 217c */ union
+ {
+ struct Pokemon *mon;
+ struct BoxPokemon *box;
+ } field_218C;
+ /* 2180 */ u8 field_2190[40];
+ /* 21a8 */ u8 field_21B8[40];
+ /* 21d0 */ u8 field_21E0[POKEMON_NAME_LENGTH + 1];
+ /* 21db */ u8 itemName[20];
+ /* 21ef */ u8 inBoxMovingMode;
+ /* 21f0 */ u16 field_2200;
+ /* 21f4 */ struct PSS_ItemIconSprite itemIconSprites[MAX_ITEM_ICONS];
+ /* 2224 */ u16 movingItem;
+ /* 2226 */ u16 field_2236;
+ /* 2228 */ struct PssQuestLogBuffer qlogBuffer;
+ /* 2230 */ u16 field_2238;
+ /* 2232 */ u16 field_223A;
+ /* 2234 */ u16 *field_223C;
+ /* 2238 */ struct Sprite *cursorMonSprite;
+ /* 223c */ u16 field_2244[0x40];
+ /* 22bc */ u8 field_22C4[0x800];
+ /* 2abc */ u8 field_2AC4[0x1800];
+ /* 42bc */ u8 field_42C4[0x800];
+ /* 4abc */ u8 field_4AC4[0x1000];
+ /* 5abc */ u8 field_5AC4[0x800];
+}; // size=62bc
+
+extern struct PokemonStorageSystemData *gPSSData;
+
+void Cb2_EnterPSS(u8 a0);
+u8 GetCurrentBoxOption(void);
+struct Sprite *sub_809223C(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority);
+void SetBoxWallpaper(u8 boxId, u8 wallpaperId);
+void SetCurrentBox(u8 boxId);
+void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon * dst);
+void SetBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon * src);
+
+void Cb2_ExitPSS(void);
+void FreeBoxSelectionPopupSpriteGfx(void);
+void sub_808C940(u8 curBox);
+void sub_808C950(void);
+u8 HandleBoxChooseSelectionInput(void);
+void LoadBoxSelectionPopupSpriteGfx(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal);
+void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value);
+u32 GetCurrentBoxMonData(u8 boxPosition, s32 request);
+u32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst);
+
+void sub_80922C0(void);
+void sub_8092340(void);
+bool8 sub_80924A8(void);
+void sub_8092AE4(void);
+void sub_8092B3C(u8 a0);
+void sub_8092B50(void);
+void sub_8092B5C(void);
+u8 sub_8092B70(void);
+void sub_8092F54(void);
+void sub_8093174(void);
+void sub_8093194(void);
+bool8 sub_80931EC(void);
+void sub_8093264(void);
+void sub_8093630(void);
+void sub_8093660(void);
+void sub_80936B8(void);
+void sub_80937B4(void);
+void sub_8094D14(u8 a0);
+u8 sub_8094D34(void);
+void sub_8094D60(void);
+void sub_8094D84(void);
+bool8 sub_8094F90(void);
+s16 sub_8094F94(void);
+void sub_8095024(void);
+bool8 sub_8095050(void);
+void sub_80950A4(void);
+void sub_80950BC(u8 a0);
+bool8 sub_80950D0(void);
+void sub_8095B5C(void);
+void sub_8096088(void);
+void sub_80960C0(void);
+bool8 sub_809610C(void);
+const u8 *GetMovingItemName(void);
+void sub_80966F4(void);
+bool8 sub_8096728(void);
+bool8 sub_80967C0(void);
+void sub_8096BE4(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u32 arg2);
+void sub_8096BF8(void);
+void AddMenu(void);
+bool8 CanMovePartyMon(void);
+bool8 CanShiftMon(void);
+bool8 DoMonPlaceChange(void);
+bool8 DoWallpaperGfxChange(void);
+u8 GetBoxCursorPosition(void);
+u16 GetMovingItem(void);
+u8 HandleInput(void);
+void InitCanReleaseMonVars(void);
+void InitMonPlaceChange(u8 a0);
+bool8 IsActiveItemMoving(void);
+bool8 IsCursorOnCloseBox(void);
+bool8 IsMonBeingMoved(void);
+void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos);
+void Item_GiveMovingToMon(u8 cursorArea, u8 cursorPos);
+void Item_SwitchMonsWithMoving(u8 cursorArea, u8 cursorPos);
+void Item_TakeMons(u8 cursorArea, u8 cursorPos);
+void PrintItemDescription(void);
+void ReleaseMon(void);
+s8 RunCanReleaseMon(void);
+bool8 ScrollToBox(void);
+void SetMonMarkings(u8 markings);
+void SetMovingMonPriority(u8 priority);
+void SetUpScrollToBox(u8 targetBox);
+void SetWallpaperForCurrentBox(u8 wallpaper);
+bool8 TryStorePartyMonInBox(u8 boxId);
+void InitMenu(void);
+void SetMenuText(u8 textId);
+void sub_8095C84(u8 cursorArea, u8 cursorPos);
+void sub_8095E2C(u16 itemId);
+u8 GetBoxWallpaper(u8 boxId);
+bool8 IsCursorOnBox(void);
+bool8 IsCursorInBox(void);
+
+void sub_808FFAC(void);
+struct Sprite * CreateMonIconSprite(u16 species, u32 pid, s16 x, s16 y, u8 priority, u8 subpriority);
+void CreatePartyMonsSprites(bool8 species);
+void sub_80909F4(void);
+bool8 sub_8090A60(void);
+void sub_8090B98(s16 yDelta);
+void DestroyAllPartyMonIcons(void);
+void sub_8091114(void);
+bool8 sub_8091150(void);
+void sub_80913DC(u8 box);
+bool8 sub_809140C(void);
+void sub_80920FC(bool8 species);
+void CreateMovingMonIcon(void);
+void sub_8090E08(u8 boxId, u8 cursorPos);
+bool8 sub_8090E74(void);
+void sub_8090CC0(u8 cursorArea, u8 cursorPos);
+void sub_8090D58(u8 cursorArea, u8 cursorPos);
+void DestroyPartyMonIcon(u8 partyId);
+void DestroyMovingMonIcon(void);
+s16 GetFirstFreeBoxSpot(u8 boxId);
+void sub_80901EC(u8 boxPosition);
+void sub_8090FC4(u8 mode, u8 position);
+bool8 sub_8091084(void);
+void sub_80910CC(void);
+u8 CountPartyMons(void);
+u8 CountPartyAliveNonEggMonsExcept(u8 slotToIgnore);
+
+s8 sub_8094E50(u8 a0);
+bool8 sub_8095474(u8 action);
+u8 sub_8095AA0(void);
+bool8 sub_8095ABC(void);
+void sub_8095D44(u8 cursorArea, u8 cursorPos);
+void sub_8094CD4(u8 *arg0, u8 *arg1);
+void sub_8094D40(void);
+void sub_8092BAC(bool8 arg0);
+void DestroyBoxMonIconAtPosition(u8 boxPosition);
+void SetBoxMonIconObjMode(u8 cursorPos, u8 objMode);
+void SetPartyMonIconObjMode(u8 cursorPos, u8 objMode);
+
+#endif //GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H
diff --git a/include/sprite.h b/include/sprite.h
index c53919159..8f95eb788 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -254,6 +254,7 @@ extern const struct SpriteTemplate gDummySpriteTemplate;
extern struct Sprite gSprites[];
extern struct OamMatrix gOamMatrices[];
extern bool8 gAffineAnimsDisabled;
+extern u16 gReservedSpriteTileCount;
void ResetSpriteData(void);
void AnimateSprites(void);
diff --git a/include/string_util.h b/include/string_util.h
index 32e74e031..45adac78d 100644
--- a/include/string_util.h
+++ b/include/string_util.h
@@ -30,8 +30,8 @@ u8 *GetExpandedPlaceholder(u32 id);
u8 *StringFill(u8 *dest, u8 c, u16 n);
u8 *StringCopyPadded(u8 *dest, const u8 *src, u8 c, u16 n);
u8 *StringFillWithTerminator(u8 *dest, u16 n);
-u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n);
-u32 StringLength_Multibyte(u8 *str);
+u8 *StringCopyN_Multibyte(u8 *dest, const u8 *src, u32 n);
+u32 StringLength_Multibyte(const u8 *str);
u8 *WriteColorChangeControlCode(u8 *dest, u32 colorType, u8 color);
bool32 IsStringJapanese(u8 *str);
bool32 sub_800924C(u8 *str, s32 n);
diff --git a/include/strings.h b/include/strings.h
index be3555780..6016dc3e3 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1358,4 +1358,87 @@ extern const u8 gText_BoxName[];
extern const u8 gText_PkmnsNickname[];
extern const u8 gText_RivalsName[];
+// pokemon_storage_system
+extern const u8 gText_WithdrawPokemon[];
+extern const u8 gText_WithdrawMonDescription[];
+extern const u8 gText_DepositPokemon[];
+extern const u8 gText_DepositMonDescription[];
+extern const u8 gText_MovePokemon[];
+extern const u8 gText_MoveMonDescription[];
+extern const u8 gText_MoveItems[];
+extern const u8 gText_MoveItemsDescription[];
+extern const u8 gText_SeeYa[];
+extern const u8 gText_SeeYaDescription[];
+extern const u8 gText_PartyFull[];
+extern const u8 gText_JustOnePkmn[];
+extern const u8 gText_Box[];
+extern const u8 gText_ExitFromBox[];
+extern const u8 gText_WhatDoYouWantToDo[];
+extern const u8 gText_PleasePickATheme[];
+extern const u8 gText_PickTheWallpaper[];
+extern const u8 gText_PkmnIsSelected[];
+extern const u8 gText_JumpToWhichBox[];
+extern const u8 gText_DepositInWhichBox[];
+extern const u8 gText_PkmnWasDeposited[];
+extern const u8 gText_BoxIsFull2[];
+extern const u8 gText_ReleaseThisPokemon[];
+extern const u8 gText_PkmnWasReleased[];
+extern const u8 gText_ByeByePkmn[];
+extern const u8 gText_MarkYourPkmn[];
+extern const u8 gText_ThatsYourLastPkmn[];
+extern const u8 gText_YourPartysFull[];
+extern const u8 gText_YoureHoldingAPkmn[];
+extern const u8 gText_WhichOneWillYouTake[];
+extern const u8 gText_YouCantReleaseAnEgg[];
+extern const u8 gText_ContinueBoxOperations[];
+extern const u8 gText_PkmnCameBack[];
+extern const u8 gText_WasItWorriedAboutYou[];
+extern const u8 gText_FourEllipsesExclamation[];
+extern const u8 gText_PleaseRemoveTheMail[];
+extern const u8 gText_PkmnIsSelected[];
+extern const u8 gText_GiveToAPkmn[];
+extern const u8 gText_PlacedItemInBag[];
+extern const u8 gText_BagIsFull2[];
+extern const u8 gText_PutItemInBag[];
+extern const u8 gText_ItemIsNowHeld[];
+extern const u8 gText_ChangedToNewItem[];
+extern const u8 gText_MailCantBeStored[];
+extern const u8 gPCText_Cancel[];
+extern const u8 gPCText_Store[];
+extern const u8 gPCText_Withdraw[];
+extern const u8 gPCText_Move[];
+extern const u8 gPCText_Shift[];
+extern const u8 gPCText_Place[];
+extern const u8 gPCText_Summary[];
+extern const u8 gPCText_Release[];
+extern const u8 gPCText_Mark[];
+extern const u8 gPCText_Jump[];
+extern const u8 gPCText_Wallpaper[];
+extern const u8 gPCText_Name[];
+extern const u8 gPCText_Take[];
+extern const u8 gPCText_Give[];
+extern const u8 gPCText_Switch[];
+extern const u8 gPCText_Bag[];
+extern const u8 gPCText_Info[];
+extern const u8 gPCText_Scenery1[];
+extern const u8 gPCText_Scenery2[];
+extern const u8 gPCText_Scenery3[];
+extern const u8 gPCText_Etcetera[];
+extern const u8 gPCText_Forest[];
+extern const u8 gPCText_City[];
+extern const u8 gPCText_Desert[];
+extern const u8 gPCText_Savanna[];
+extern const u8 gPCText_Crag[];
+extern const u8 gPCText_Volcano[];
+extern const u8 gPCText_Snow[];
+extern const u8 gPCText_Cave[];
+extern const u8 gPCText_Beach[];
+extern const u8 gPCText_Seafloor[];
+extern const u8 gPCText_River[];
+extern const u8 gPCText_Sky[];
+extern const u8 gPCText_PolkaDot[];
+extern const u8 gPCText_Pokecenter[];
+extern const u8 gPCText_Machine[];
+extern const u8 gPCText_Simple[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index ff8b033e9..f1bf8b942 100644
--- a/include/text.h
+++ b/include/text.h
@@ -128,6 +128,7 @@
#define EXT_CTRL_CODE_COLOR 0x1
#define EXT_CTRL_CODE_HIGHLIGHT 0x2
#define EXT_CTRL_CODE_SHADOW 0x3
+#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x4
//
#define EXT_CTRL_CODE_UNKNOWN_7 0x7
//
diff --git a/include/window.h b/include/window.h
index 5f3630afb..c8b83af7a 100644
--- a/include/window.h
+++ b/include/window.h
@@ -69,10 +69,10 @@ void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue);
void CallWindowFunction(u8 windowId, WindowFunc func);
bool8 SetWindowAttribute(u8 windowId, u8 attributeId, u32 value);
u32 GetWindowAttribute(u8 windowId, u8 attributeId);
-u16 AddWindow8Bit(struct WindowTemplate *template);
-u16 AddWindow8Bit(struct WindowTemplate *template);
+u16 AddWindow8Bit(const struct WindowTemplate *template);
+void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue);
void FillWindowPixelRect8Bit(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum);
+void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum);
void CopyWindowToVram8Bit(u8 windowId, u8 mode);
extern void *gWindowBgTilemapBuffers[];
diff --git a/ld_script.txt b/ld_script.txt
index 0e0409a33..01e1d0eb3 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -114,8 +114,9 @@ SECTIONS {
src/battle_anim_status_effects.o(.text);
src/title_screen.o(.text);
src/reset_save_heap.o(.text);
- asm/field_weather.o(.text);
- asm/field_weather_effects.o(.text);
+ src/field_weather.o(.text);
+ src/field_weather_util.o(.text);
+ src/field_weather_effects.o(.text);
src/field_fadetransition.o(.text);
src/field_screen_effect.o(.text);
src/battle_setup.o(.text);
@@ -127,7 +128,15 @@ SECTIONS {
src/option_menu.o(.text);
src/pokedex.o(.text);
src/trainer_card.o(.text);
- asm/pokemon_storage_system.o(.text);
+ src/pokemon_storage_system.o(.text);
+ src/pokemon_storage_system_2.o(.text);
+ src/pokemon_storage_system_3.o(.text);
+ src/pokemon_storage_system_4.o(.text);
+ src/pokemon_storage_system_5.o(.text);
+ src/pokemon_storage_system_6.o(.text);
+ src/pokemon_storage_system_7.o(.text);
+ src/pokemon_storage_system_8.o(.text);
+ src/pokemon_storage_system_9.o(.text);
src/pokemon_icon.o(.text);
src/script_movement.o(.text);
src/fldeff_cut.o(.text);
@@ -438,7 +447,9 @@ SECTIONS {
data/map_events.o(.rodata);
src/battle_anim_status_effects.o(.rodata);
src/title_screen.o(.rodata);
- data/field_weather.o(.rodata);
+ src/field_weather.o(.rodata);
+ src/field_weather_util.o(.rodata);
+ src/field_weather_effects.o(.rodata);
src/field_screen_effect.o(.rodata);
src/battle_setup.o(.rodata);
src/cable_club.o(.rodata);
@@ -447,7 +458,13 @@ SECTIONS {
src/field_effect.o(.rodata);
src/option_menu.o(.rodata);
src/trainer_card.o(.rodata);
- data/pokemon_storage_system.o(.rodata);
+ src/pokemon_storage_system_2.o(.rodata);
+ src/pokemon_storage_system_3.o(.rodata);
+ src/pokemon_storage_system_4.o(.rodata);
+ src/pokemon_storage_system_5.o(.rodata);
+ src/pokemon_storage_system_6.o(.rodata);
+ src/pokemon_storage_system_7.o(.rodata);
+ src/pokemon_storage_system_8.o(.rodata);
src/pokemon_icon.o(.rodata);
src/fldeff_cut.o(.rodata);
src/map_name_popup.o(.rodata);
diff --git a/src/berry_pouch.c b/src/berry_pouch.c
index a0b2c03a3..01a94c075 100644
--- a/src/berry_pouch.c
+++ b/src/berry_pouch.c
@@ -1258,7 +1258,7 @@ static void Task_ContextMenu_FromPartyGiveMenu(u8 taskId)
static void Task_ContextMenu_FromPokemonPC(u8 taskId)
{
- sResources->exitCallback = sub_808CE60;
+ sResources->exitCallback = Cb2_ReturnToPSS;
gTasks[taskId].func = BerryPouch_StartFadeToExitCallback;
}
diff --git a/src/bg.c b/src/bg.c
index 4ad2bebd6..2acba9d26 100644
--- a/src/bg.c
+++ b/src/bg.c
@@ -553,21 +553,21 @@ u16 GetBgAttribute(u8 bg, u8 attributeId)
{
switch (attributeId)
{
- case 1:
+ case BG_ATTR_CHARBASEINDEX:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX);
- case 2:
+ case BG_ATTR_MAPBASEINDEX:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_MAPBASEINDEX);
- case 3:
+ case BG_ATTR_SCREENSIZE:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
- case 4:
+ case BG_ATTR_PALETTEMODE:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE);
- case 7:
+ case BG_ATTR_PRIORITY:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_PRIORITY);
- case 5:
+ case BG_ATTR_MOSAIC:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_MOSAIC);
- case 6:
+ case BG_ATTR_WRAPAROUND:
return GetBgControlAttribute(bg, BG_CTRL_ATTR_WRAPAROUND);
- case 8:
+ case BG_ATTR_TEXTORAFFINEMODE:
switch (GetBgType(bg))
{
case 0:
@@ -577,9 +577,9 @@ u16 GetBgAttribute(u8 bg, u8 attributeId)
default:
return 0;
}
- case 9:
+ case BG_ATTR_BGTYPE:
return GetBgType(bg);
- case 10:
+ case BG_ATTR_BASETILE:
return sGpuBgConfigs2[bg].baseTile;
default:
return -1;
diff --git a/src/box_party_pokemon_dropdown.c b/src/box_party_pokemon_dropdown.c
index a74f1611c..b194777f3 100644
--- a/src/box_party_pokemon_dropdown.c
+++ b/src/box_party_pokemon_dropdown.c
@@ -3,7 +3,7 @@
#include "box_party_pokemon_dropdown.h"
#include "malloc.h"
-struct UnkStruct_203ABE4_Sub
+struct BPPD_MapRect
{
s16 destX;
s16 destY;
@@ -13,27 +13,27 @@ struct UnkStruct_203ABE4_Sub
s16 destY2;
};
-struct UnkStruct_203ABE4
+struct BPPD_Struct
{
- struct UnkStruct_203ABE4_Sub map1Rect;
- struct UnkStruct_203ABE4_Sub map2Rect;
+ struct BPPD_MapRect map1Rect;
+ struct BPPD_MapRect map2Rect;
const void * src1;
const void * src2;
u16 src1Height;
u16 src1Width;
+ u16 src2Width;
u16 src2Height;
- u16 unk_26;
- u16 unk_28;
+ u16 bytesPerRow;
u8 mapSize;
u8 bgId;
bool8 bgUpdateScheduled;
};
-static EWRAM_DATA struct UnkStruct_203ABE4 * sBoxPartyPokemonDropdownPtr = NULL;
+static EWRAM_DATA struct BPPD_Struct * sBoxPartyPokemonDropdownPtr = NULL;
static EWRAM_DATA u16 sBoxPartyPokemonDropdownCount = 0;
-static void PushMap1(u8 a0);
-static void PushMap2(u8 a0);
+static void PushMap1(u8 idx);
+static void PushMap2(u8 idx);
static const struct {
u16 height;
@@ -52,10 +52,10 @@ static const struct {
}
};
-void sub_80F7AD8(u8 num)
+void AllocBoxPartyPokemonDropdowns(u8 num)
{
u16 i;
- sBoxPartyPokemonDropdownPtr = Alloc(num * sizeof(struct UnkStruct_203ABE4));
+ sBoxPartyPokemonDropdownPtr = Alloc(num * sizeof(struct BPPD_Struct));
sBoxPartyPokemonDropdownCount = sBoxPartyPokemonDropdownPtr == NULL ? 0 : num;
for (i = 0; i < sBoxPartyPokemonDropdownCount; i++)
{
@@ -64,149 +64,149 @@ void sub_80F7AD8(u8 num)
}
}
-void sub_80F7B2C(void)
+void FreeBoxPartyPokemonDropdowns(void)
{
Free(sBoxPartyPokemonDropdownPtr);
}
-void sub_80F7B40(void)
+void CopyAllBoxPartyPokemonDropdownsToVram(void)
{
int i;
for (i = 0; i < sBoxPartyPokemonDropdownCount; i++)
{
if (sBoxPartyPokemonDropdownPtr[i].bgUpdateScheduled == TRUE)
- sub_80F7E54(i);
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(i);
}
}
-void sub_80F7B80(u8 a0, u8 a1, const void * a2, u16 a3, u16 a4)
+void SetBoxPartyPokemonDropdownMap2(u8 idx, u8 bgId, const void * src, u16 width, u16 height)
{
u16 screenSize;
u16 bgType;
- if (a0 < sBoxPartyPokemonDropdownCount)
+ if (idx < sBoxPartyPokemonDropdownCount)
{
- sBoxPartyPokemonDropdownPtr[a0].src1 = NULL;
- sBoxPartyPokemonDropdownPtr[a0].src2 = a2;
- sBoxPartyPokemonDropdownPtr[a0].bgId = a1;
- sBoxPartyPokemonDropdownPtr[a0].src2Height = a3;
- sBoxPartyPokemonDropdownPtr[a0].unk_26 = a4;
- screenSize = GetBgAttribute(a1, BG_ATTR_SCREENSIZE);
- bgType = GetBgAttribute(a1, BG_ATTR_BGTYPE);
- sBoxPartyPokemonDropdownPtr[a0].src1Height = sBGdims[bgType][screenSize].height;
- sBoxPartyPokemonDropdownPtr[a0].src1Width = sBGdims[bgType][screenSize].width;
+ sBoxPartyPokemonDropdownPtr[idx].src1 = NULL;
+ sBoxPartyPokemonDropdownPtr[idx].src2 = src;
+ sBoxPartyPokemonDropdownPtr[idx].bgId = bgId;
+ sBoxPartyPokemonDropdownPtr[idx].src2Width = width;
+ sBoxPartyPokemonDropdownPtr[idx].src2Height = height;
+ screenSize = GetBgAttribute(bgId, BG_ATTR_SCREENSIZE);
+ bgType = GetBgAttribute(bgId, BG_ATTR_BGTYPE);
+ sBoxPartyPokemonDropdownPtr[idx].src1Height = sBGdims[bgType][screenSize].height;
+ sBoxPartyPokemonDropdownPtr[idx].src1Width = sBGdims[bgType][screenSize].width;
if (bgType != 0)
- sBoxPartyPokemonDropdownPtr[a0].mapSize = 1;
+ sBoxPartyPokemonDropdownPtr[idx].mapSize = 1;
else
- sBoxPartyPokemonDropdownPtr[a0].mapSize = 2;
- sBoxPartyPokemonDropdownPtr[a0].unk_28 = a3 * sBoxPartyPokemonDropdownPtr[a0].mapSize;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.width = a3;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.height = a4;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX = 0;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY = 0;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2 = 0;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 = 0;
- sBoxPartyPokemonDropdownPtr[a0].map1Rect = sBoxPartyPokemonDropdownPtr[a0].map2Rect;
- sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ sBoxPartyPokemonDropdownPtr[idx].mapSize = 2;
+ sBoxPartyPokemonDropdownPtr[idx].bytesPerRow = width * sBoxPartyPokemonDropdownPtr[idx].mapSize;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.width = width;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.height = height;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX = 0;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY = 0;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2 = 0;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 = 0;
+ sBoxPartyPokemonDropdownPtr[idx].map1Rect = sBoxPartyPokemonDropdownPtr[idx].map2Rect;
+ sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
-void sub_80F7C7C(u8 a0, const void * a1)
+void SetBoxPartyPokemonDropdownMap1Tiles(u8 idx, const void * src)
{
- if (a0 < sBoxPartyPokemonDropdownCount)
+ if (idx < sBoxPartyPokemonDropdownCount)
{
- sBoxPartyPokemonDropdownPtr[a0].src1 = a1;
- sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ sBoxPartyPokemonDropdownPtr[idx].src1 = src;
+ sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
-void sub_80F7CAC(u8 a0, u16 a1, u16 a2)
+void SetBoxPartyPokemonDropdownMap2Pos(u8 idx, u16 x, u16 y)
{
- if (a0 < sBoxPartyPokemonDropdownCount)
+ if (idx < sBoxPartyPokemonDropdownCount)
{
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2 = a1;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 = a2;
- sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2 = x;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 = y;
+ sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
-void sub_80F7CE8(u8 a0, u16 a1, u16 a2, u16 a3, u16 a4)
+void SetBoxPartyPokemonDropdownMap2Rect(u8 idx, u16 x, u16 y, u16 width, u16 height)
{
- if (a0 < sBoxPartyPokemonDropdownCount)
+ if (idx < sBoxPartyPokemonDropdownCount)
{
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX = a1;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY = a2;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.width = a3;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.height = a4;
- sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX = x;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY = y;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.width = width;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.height = height;
+ sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
-void sub_80F7D30(u8 a0, u8 a1, s8 a2)
+void AdjustBoxPartyPokemonDropdownPos(u8 idx, u8 op, s8 param)
{
- if (a0 < sBoxPartyPokemonDropdownCount)
+ if (idx < sBoxPartyPokemonDropdownCount)
{
- switch (a1)
+ switch (op)
{
- case 0:
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2 += a2;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.width -= a2;
+ case BPPD_MOVE_INNER_LEFT:
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2 += param;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.width -= param;
break;
- case 1:
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX += a2;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.width += a2;
+ case BPPD_MOVE_OUTER_LEFT:
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX += param;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.width += param;
break;
- case 2:
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 += a2;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.height -= a2;
+ case BPPD_MOVE_INNER_TOP:
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 += param;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.height -= param;
break;
- case 3:
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY -= a2;
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.height += a2;
+ case BPPD_MOVE_OUTER_TOP:
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY -= param;
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.height += param;
break;
- case 4:
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2 += a2;
+ case BPPD_MOVE_INNER_X:
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2 += param;
break;
- case 5:
- sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 += a2;
+ case BPPD_MOVE_INNER_Y:
+ sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 += param;
break;
}
- sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ sBoxPartyPokemonDropdownPtr[idx].bgUpdateScheduled = TRUE;
}
}
-void sub_80F7E54(u8 a0)
+void CopyBoxPartyPokemonDropdownToBgTilemapBuffer(u8 idx)
{
- if (a0 < sBoxPartyPokemonDropdownCount)
+ if (idx < sBoxPartyPokemonDropdownCount)
{
- if (sBoxPartyPokemonDropdownPtr[a0].src1 != NULL)
- PushMap1(a0);
- PushMap2(a0);
- sBoxPartyPokemonDropdownPtr[a0].map1Rect = sBoxPartyPokemonDropdownPtr[a0].map2Rect;
+ if (sBoxPartyPokemonDropdownPtr[idx].src1 != NULL)
+ PushMap1(idx);
+ PushMap2(idx);
+ sBoxPartyPokemonDropdownPtr[idx].map1Rect = sBoxPartyPokemonDropdownPtr[idx].map2Rect;
}
}
-static void PushMap1(u8 a0)
+static void PushMap1(u8 idx)
{
int i;
- int r9 = sBoxPartyPokemonDropdownPtr[a0].mapSize * sBoxPartyPokemonDropdownPtr[a0].src1Height;
- const void * addr = sBoxPartyPokemonDropdownPtr[a0].src1 + r9 * sBoxPartyPokemonDropdownPtr[a0].map1Rect.destY2 + sBoxPartyPokemonDropdownPtr[a0].map1Rect.destX2 * sBoxPartyPokemonDropdownPtr[a0].mapSize;
- for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map1Rect.height; i++)
+ int run = sBoxPartyPokemonDropdownPtr[idx].mapSize * sBoxPartyPokemonDropdownPtr[idx].src1Height;
+ const void * addr = sBoxPartyPokemonDropdownPtr[idx].src1 + run * sBoxPartyPokemonDropdownPtr[idx].map1Rect.destY2 + sBoxPartyPokemonDropdownPtr[idx].map1Rect.destX2 * sBoxPartyPokemonDropdownPtr[idx].mapSize;
+ for (i = 0; i < sBoxPartyPokemonDropdownPtr[idx].map1Rect.height; i++)
{
- CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map1Rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map1Rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map1Rect.width, 1);
- addr += r9;
+ CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[idx].bgId, addr, sBoxPartyPokemonDropdownPtr[idx].map1Rect.destX2, sBoxPartyPokemonDropdownPtr[idx].map1Rect.destY2 + i, sBoxPartyPokemonDropdownPtr[idx].map1Rect.width, 1);
+ addr += run;
}
}
-static void PushMap2(u8 a0)
+static void PushMap2(u8 idx)
{
int i;
- int r9 = sBoxPartyPokemonDropdownPtr[a0].mapSize * sBoxPartyPokemonDropdownPtr[a0].src2Height;
- const void * addr = sBoxPartyPokemonDropdownPtr[a0].src2 + r9 * sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY + sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX * sBoxPartyPokemonDropdownPtr[a0].mapSize;
- for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map2Rect.height; i++)
+ int run = sBoxPartyPokemonDropdownPtr[idx].mapSize * sBoxPartyPokemonDropdownPtr[idx].src2Width;
+ const void * addr = sBoxPartyPokemonDropdownPtr[idx].src2 + run * sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY + sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX * sBoxPartyPokemonDropdownPtr[idx].mapSize;
+ for (i = 0; i < sBoxPartyPokemonDropdownPtr[idx].map2Rect.height; i++)
{
- CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map2Rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map2Rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map2Rect.width, 1);
- addr += r9;
+ CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[idx].bgId, addr, sBoxPartyPokemonDropdownPtr[idx].map2Rect.destX2, sBoxPartyPokemonDropdownPtr[idx].map2Rect.destY2 + i, sBoxPartyPokemonDropdownPtr[idx].map2Rect.width, 1);
+ addr += run;
}
}
diff --git a/src/credits.c b/src/credits.c
index e0d57a2a4..4d7bbd67b 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -910,7 +910,7 @@ static s32 RollCredits(void)
case CREDITSSCRCMD_MAPNEXT:
sCreditsMgr->mainseqno = CREDITSSCENE_MAPNEXT_DESTROYWINDOW;
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
- FieldWeather_StartFadingOutCreditsMap(1, 0, 0x3FFFFFFF);
+ FadeSelectedPals(1, 0, 0x3FFFFFFF);
break;
case CREDITSSCRCMD_MAP:
sCreditsMgr->mainseqno = CREDITSSCENE_MAP_LOADMAP_CREATESPRITES;
@@ -1305,7 +1305,7 @@ static s32 RollCredits(void)
"\tldr r2, _080F3E0C @ =0x3fffffff\n"
"\tmovs r0, 0x1\n"
"\tmovs r1, 0\n"
- "\tbl FieldWeather_StartFadingOutCreditsMap\n"
+ "\tbl FadeSelectedPals\n"
"\tb _080F3E94\n"
"\t.align 2, 0\n"
"_080F3E04: .4byte sCreditsMgr\n"
diff --git a/src/field_specials.c b/src/field_specials.c
index 5be7a4d1c..474fcd081 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -442,7 +442,7 @@ bool8 IsThereRoomInAnyBoxForMorePokemon(void)
{
for (j = 0; j < IN_BOX_COUNT; j++)
{
- if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SPECIES) == SPECIES_NONE)
+ if (GetBoxMonDataAt(i, j, MON_DATA_SPECIES) == SPECIES_NONE)
return TRUE;
}
}
@@ -1642,7 +1642,7 @@ void ChangeBoxPokemonNickname(void)
static void ChangeBoxPokemonNickname_CB(void)
{
- SetBoxMonNickFromAnyBox(gSpecialVar_MonBoxId, gSpecialVar_MonBoxPos, gStringVar2);
+ SetBoxMonNickAt(gSpecialVar_MonBoxId, gSpecialVar_MonBoxPos, gStringVar2);
CB2_ReturnToFieldContinueScriptPlayMapMusic();
}
@@ -1980,11 +1980,11 @@ u16 GetPCBoxToSendMon(void)
bool8 ShouldShowBoxWasFullMessage(void)
{
- if (FlagGet(FLAG_SYS_CHANGED_BOX_TO_STORE_MON))
+ if (FlagGet(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE))
return FALSE;
if (StorageGetCurrentBox() == VarGet(VAR_PC_BOX_TO_SEND_MON))
return FALSE;
- FlagSet(FLAG_SYS_CHANGED_BOX_TO_STORE_MON);
+ FlagSet(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
return TRUE;
}
@@ -2001,7 +2001,7 @@ bool8 IsDestinationBoxFull(void)
if (GetBoxMonData(GetBoxedMonPtr(i, j), MON_DATA_SPECIES, NULL) == SPECIES_NONE)
{
if (GetPCBoxToSendMon() != i)
- FlagClear(FLAG_SYS_CHANGED_BOX_TO_STORE_MON);
+ FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
VarSet(VAR_PC_BOX_TO_SEND_MON, i);
return ShouldShowBoxWasFullMessage();
}
diff --git a/src/field_weather.c b/src/field_weather.c
new file mode 100644
index 000000000..1185f5763
--- /dev/null
+++ b/src/field_weather.c
@@ -0,0 +1,1169 @@
+#include "global.h"
+#include "gflib.h"
+#include "blend_palette.h"
+#include "field_effect.h"
+#include "field_weather.h"
+#include "field_weather_util.h"
+#include "field_weather_effects.h"
+#include "task.h"
+#include "trig.h"
+#include "constants/field_weather.h"
+#include "constants/weather.h"
+#include "constants/songs.h"
+
+#define DROUGHT_COLOR_INDEX(color) ((((color) >> 1) & 0xF) | (((color) >> 2) & 0xF0) | (((color) >> 3) & 0xF00))
+
+enum
+{
+ GAMMA_NONE,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+};
+
+struct RGBColor
+{
+ u16 r:5;
+ u16 g:5;
+ u16 b:5;
+};
+
+struct WeatherPaletteData
+{
+ u16 gammaShiftColors[8][0x1000]; // 0x1000 is the number of bytes that make up all palettes.
+};
+
+struct WeatherCallbacks
+{
+ void (*initVars)(void);
+ void (*main)(void);
+ void (*initAll)(void);
+ bool8 (*finish)(void);
+};
+
+static EWRAM_DATA struct Weather sWeather = {};
+static EWRAM_DATA u8 sFieldEffectPaletteGammaTypes[32] = {};
+static EWRAM_DATA const u8 *sPaletteGammaTypes = NULL;
+static EWRAM_DATA u16 gUnknown_20386A8 = 0;
+
+static void Task_WeatherMain(u8 taskId);
+static void Task_WeatherInit(u8 taskId);
+static void None_Init(void);
+static void None_Main(void);
+static bool8 None_Finish(void);
+static void BuildGammaShiftTables(void);
+static void UpdateWeatherGammaShift(void);
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex);
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void FadeInScreenWithWeather(void);
+static bool8 FadeInScreen_RainShowShade(void);
+static bool8 FadeInScreen_Drought(void);
+static bool8 FadeInScreen_FogHorizontal(void);
+static void DoNothing(void);
+static void ApplyFogBlend(u8 blendCoeff, u16 blendColor);
+static bool8 LightenSpritePaletteInFog(u8 paletteIndex);
+
+struct Weather *const gWeatherPtr = &sWeather;
+
+static const struct WeatherCallbacks sWeatherFuncs[] = {
+ {None_Init, None_Main, None_Init, None_Finish},
+ {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish},
+ {Sunny_InitVars, Sunny_Main, Sunny_InitAll, Sunny_Finish},
+ {Rain_InitVars, Rain_Main, Rain_InitAll, Rain_Finish},
+ {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish},
+ {Thunderstorm_InitVars, Thunderstorm_Main, Thunderstorm_InitAll, Thunderstorm_Finish},
+ {FogHorizontal_InitVars, FogHorizontal_Main, FogHorizontal_InitAll, FogHorizontal_Finish},
+ {Ash_InitVars, Ash_Main, Ash_InitAll, Ash_Finish},
+ {Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish},
+ {FogDiagonal_InitVars, FogDiagonal_Main, FogDiagonal_InitAll, FogDiagonal_Finish},
+ {FogHorizontal_InitVars, FogHorizontal_Main, FogHorizontal_InitAll, FogHorizontal_Finish},
+ {Shade_InitVars, Shade_Main, Shade_InitAll, Shade_Finish},
+ {Drought_InitVars, Drought_Main, Drought_InitAll, Drought_Finish},
+ {Downpour_InitVars, Thunderstorm_Main, Downpour_InitAll, Thunderstorm_Finish},
+ {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish},
+};
+
+static void (*const sWeatherPalStateFuncs[])(void) = {
+ UpdateWeatherGammaShift,
+ FadeInScreenWithWeather,
+ DoNothing,
+ DoNothing
+};
+
+static const u8 sBasePaletteGammaTypes[32] = {
+ // background palettes
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NONE,
+ GAMMA_NONE,
+ GAMMA_NONE,
+ // sprite palettes
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+};
+
+const u16 gUnknown_83C2CE0[] = INCBIN_U16("graphics/field_effects/unk_83C2CE0.gbapal");
+const u16 gCloudsWeatherPalette[] = INCBIN_U16("graphics/weather/cloud.gbapal");
+const u16 gSandstormWeatherPalette[] = INCBIN_U16("graphics/weather/sandstorm.gbapal");
+const u8 gWeatherFogDiagonalTiles[] = INCBIN_U8("graphics/weather/fog_diagonal.4bpp");
+const u8 gWeatherFogHorizontalTiles[] = INCBIN_U8("graphics/weather/fog_horizontal.4bpp");
+const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp");
+const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp");
+const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp");
+const u8 gWeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp");
+const u8 gWeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp");
+const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp");
+const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp");
+
+// code
+void StartWeather(void)
+{
+ if (!FuncIsActiveTask(Task_WeatherMain))
+ {
+ u8 index = AllocSpritePalette(0x1200);
+ CpuCopy32(gUnknown_83C2CE0, &gPlttBufferUnfaded[0x100 + index * 16], 32);
+ sub_8083598(index);
+ BuildGammaShiftTables();
+ gWeatherPtr->altGammaSpritePalIndex = index;
+ gWeatherPtr->weatherPicSpritePalIndex = index;
+ gWeatherPtr->rainSpriteCount = 0;
+ gWeatherPtr->curRainSpriteIndex = 0;
+ gWeatherPtr->cloudSpritesCreated = FALSE;
+ gWeatherPtr->snowflakeSpriteCount = 0;
+ gWeatherPtr->ashSpritesCreated = FALSE;
+ gWeatherPtr->fogHSpritesCreated = FALSE;
+ gWeatherPtr->fogDSpritesCreated = FALSE;
+ gWeatherPtr->sandstormSpritesCreated = FALSE;
+ gWeatherPtr->sandstormSwirlSpritesCreated = FALSE;
+ gWeatherPtr->bubblesSpritesCreated = FALSE;
+ gWeatherPtr->lightenedFogSpritePalsCount = 0;
+ Weather_SetBlendCoeffs(16, 0);
+ gWeatherPtr->currWeather = WEATHER_NONE;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ gWeatherPtr->readyForInit = FALSE;
+ gWeatherPtr->weatherChangeComplete = TRUE;
+ gWeatherPtr->taskId = CreateTask(Task_WeatherInit, 80);
+ }
+}
+
+void SetNextWeather(u8 weather)
+{
+ if (weather != WEATHER_RAIN && weather != WEATHER_RAIN_THUNDERSTORM && weather != WEATHER_DOWNPOUR)
+ {
+ PlayRainStoppingSoundEffect();
+ }
+
+ if (gWeatherPtr->nextWeather != weather && gWeatherPtr->currWeather == weather)
+ {
+ sWeatherFuncs[weather].initVars();
+ }
+
+ gWeatherPtr->weatherChangeComplete = FALSE;
+ gWeatherPtr->nextWeather = weather;
+ gWeatherPtr->finishStep = 0;
+}
+
+
+void SetCurrentAndNextWeather(u8 weather)
+{
+ PlayRainStoppingSoundEffect();
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
+}
+
+static void SetCurrentAndNextWeatherNoDelay(u8 weather)
+{
+ PlayRainStoppingSoundEffect();
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
+ // Overrides the normal delay during screen fading.
+ gWeatherPtr->readyForInit = TRUE;
+}
+
+static void Task_WeatherInit(u8 taskId)
+{
+ // Waits until it's ok to initialize weather.
+ // When the screen fades in, this is set to TRUE.
+ if (gWeatherPtr->readyForInit)
+ {
+ sWeatherFuncs[gWeatherPtr->currWeather].initAll();
+ gTasks[taskId].func = Task_WeatherMain;
+ }
+}
+
+static void Task_WeatherMain(u8 taskId)
+{
+ if (gWeatherPtr->currWeather != gWeatherPtr->nextWeather)
+ {
+ if (!sWeatherFuncs[gWeatherPtr->currWeather].finish()
+ /*&& gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT*/)
+ {
+ // Finished cleaning up previous weather. Now transition to next weather.
+ sWeatherFuncs[gWeatherPtr->nextWeather].initVars();
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
+ gWeatherPtr->currWeather = gWeatherPtr->nextWeather;
+ gWeatherPtr->weatherChangeComplete = TRUE;
+ }
+ }
+ else
+ {
+ sWeatherFuncs[gWeatherPtr->currWeather].main();
+ }
+
+ sWeatherPalStateFuncs[gWeatherPtr->palProcessingState]();
+}
+
+
+static void None_Init(void)
+{
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
+}
+
+static void None_Main(void)
+{
+}
+
+static u8 None_Finish(void)
+{
+ return 0;
+}
+
+// Builds two tables that contain gamma shifts for palette colors.
+// It's unclear why the two tables aren't declared as const arrays, since
+// this function always builds the same two tables.
+static void BuildGammaShiftTables(void)
+{
+ u16 v0;
+ u8 (*gammaTable)[32];
+ u16 v2;
+ u16 v4;
+ u16 v5;
+ u16 gammaIndex;
+ u16 v9;
+ u32 v10;
+ u16 v11;
+ s16 dunno;
+
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
+ for (v0 = 0; v0 <= 1; v0++)
+ {
+ if (v0 == 0)
+ gammaTable = gWeatherPtr->gammaShifts;
+ else
+ gammaTable = gWeatherPtr->altGammaShifts;
+
+ for (v2 = 0; v2 < 32; v2++)
+ {
+ v4 = v2 << 8;
+ if (v0 == 0)
+ v5 = (v2 << 8) / 16;
+ else
+ v5 = 0;
+ for (gammaIndex = 0; gammaIndex <= 2; gammaIndex++)
+ {
+ v4 = (v4 - v5);
+ gammaTable[gammaIndex][v2] = v4 >> 8;
+ }
+ v9 = v4;
+ v10 = 0x1f00 - v4;
+ if ((0x1f00 - v4) < 0)
+ {
+ v10 += 0xf;
+ }
+ v11 = v10 >> 4;
+ if (v2 < 12)
+ {
+ for (; gammaIndex < 19; gammaIndex++)
+ {
+ v4 += v11;
+ dunno = v4 - v9;
+ if (dunno > 0)
+ v4 -= (dunno + ((u16)dunno >> 15)) >> 1;
+ gammaTable[gammaIndex][v2] = v4 >> 8;
+ if (gammaTable[gammaIndex][v2] > 0x1f)
+ gammaTable[gammaIndex][v2] = 0x1f;
+ }
+ }
+ else
+ {
+ for (; gammaIndex < 19; gammaIndex++)
+ {
+ v4 += v11;
+ gammaTable[gammaIndex][v2] = v4 >> 8;
+ if (gammaTable[gammaIndex][v2] > 0x1f)
+ gammaTable[gammaIndex][v2] = 0x1f;
+ }
+ }
+ }
+ }
+}
+
+// When the weather is changing, it gradually updates the palettes
+// towards the desired gamma shift.
+static void UpdateWeatherGammaShift(void)
+{
+ if (gWeatherPtr->gammaIndex == gWeatherPtr->gammaTargetIndex)
+ {
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ else
+ {
+ if (++gWeatherPtr->gammaStepFrameCounter >= gWeatherPtr->gammaStepDelay)
+ {
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ if (gWeatherPtr->gammaIndex < gWeatherPtr->gammaTargetIndex)
+ gWeatherPtr->gammaIndex++;
+ else
+ gWeatherPtr->gammaIndex--;
+
+ ApplyGammaShift(0, 32, gWeatherPtr->gammaIndex);
+ }
+ }
+}
+
+static void FadeInScreenWithWeather(void)
+{
+ if (++gWeatherPtr->unknown_6CB > 1)
+ gWeatherPtr->unknown_6CA = 0;
+
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ case WEATHER_SNOW:
+ case WEATHER_SHADE:
+ if (FadeInScreen_RainShowShade() == FALSE)
+ {
+ gWeatherPtr->gammaIndex = 3;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ case WEATHER_DROUGHT:
+ if (FadeInScreen_Drought() == FALSE)
+ {
+ gWeatherPtr->gammaIndex = -6;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ case WEATHER_FOG_HORIZONTAL:
+ if (FadeInScreen_FogHorizontal() == FALSE)
+ {
+ gWeatherPtr->gammaIndex = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ case WEATHER_VOLCANIC_ASH:
+ case WEATHER_SANDSTORM:
+ case WEATHER_FOG_DIAGONAL:
+ case WEATHER_UNDERWATER:
+ default:
+ if (!gPaletteFade.active)
+ {
+ gWeatherPtr->gammaIndex = gWeatherPtr->gammaTargetIndex;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ }
+}
+
+static bool8 FadeInScreen_RainShowShade(void)
+{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
+ {
+ ApplyGammaShift(0, 32, 3);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
+ }
+
+ ApplyGammaShiftWithBlend(0, 32, 3, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
+}
+
+static bool8 FadeInScreen_Drought(void)
+{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
+ {
+ ApplyGammaShift(0, 32, -6);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
+ }
+
+ ApplyDroughtGammaShiftWithBlend(-6, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
+}
+
+static bool8 FadeInScreen_FogHorizontal(void)
+{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ gWeatherPtr->fadeScreenCounter++;
+ ApplyFogBlend(16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
+}
+
+static void DoNothing(void)
+{ }
+
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex)
+{
+ u16 curPalIndex;
+ u16 palOffset;
+ u8 *gammaTable;
+ u16 i;
+
+ if (gammaIndex > 0)
+ {
+ gammaIndex--;
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ curPalIndex = startPalIndex;
+
+ // Loop through the speficied palette range and apply necessary gamma shifts to the colors.
+ while (curPalIndex < numPalettes)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No palette change.
+ CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ palOffset += 16;
+ }
+ else
+ {
+ u8 r, g, b;
+
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_ALT || curPalIndex - 16 == gWeatherPtr->altGammaSpritePalIndex)
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
+ else
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
+
+ for (i = 0; i < 16; i++)
+ {
+ // Apply gamma shift to the original color.
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r = gammaTable[baseColor.r];
+ g = gammaTable[baseColor.g];
+ b = gammaTable[baseColor.b];
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
+ }
+
+ curPalIndex++;
+ }
+ }
+ else if (gammaIndex < 0)
+ {
+ // A negative gammIndex value means that the blending will come from the special Drought weather's palette tables.
+ // Dummied out in FRLG
+
+ // gammaIndex = -gammaIndex - 1;
+ // palOffset = startPalIndex * 16;
+ // numPalettes += startPalIndex;
+ // curPalIndex = startPalIndex;
+ //
+ // CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ // while (curPalIndex < numPalettes)
+ // {
+ // if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ // {
+ // // No palette change.
+ // palOffset += 16;
+ // }
+ // else
+ // {
+ //
+ // for (i = 0; i < 16; i++)
+ // {
+ // gPlttBufferFaded[palOffset] = sDroughtWeatherColors[gammaIndex][DROUGHT_COLOR_INDEX(gPlttBufferUnfaded[palOffset])];
+ // palOffset++;
+ // }
+ // }
+ //
+ // curPalIndex++;
+ // }
+ }
+ else
+ {
+ // No palette blending.
+ CpuFastCopy(gPlttBufferUnfaded + startPalIndex * 16, gPlttBufferFaded + startPalIndex * 16, numPalettes * 16 * sizeof(u16));
+ }
+}
+
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor)
+{
+ u16 palOffset;
+ u16 curPalIndex;
+ u16 i;
+ struct RGBColor color = *(struct RGBColor *)&blendColor;
+ u8 rBlend = color.r;
+ u8 gBlend = color.g;
+ u8 bBlend = color.b;
+
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ gammaIndex--;
+ curPalIndex = startPalIndex;
+
+ while (curPalIndex < numPalettes)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
+ palOffset += 16;
+ }
+ else
+ {
+ u8 *gammaTable;
+
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NORMAL)
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
+ else
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
+
+ for (i = 0; i < 16; i++)
+ {
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = gammaTable[baseColor.r];
+ u8 g = gammaTable[baseColor.g];
+ u8 b = gammaTable[baseColor.b];
+
+ // Apply gamma shift and target blend color to the original color.
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
+ }
+
+ curPalIndex++;
+ }
+}
+
+static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor)
+{
+ struct RGBColor color;
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
+ u16 palOffset;
+ u16 i;
+
+ gammaIndex = -gammaIndex - 1;
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
+ palOffset = 0;
+ for (curPalIndex = 0; curPalIndex < 32; curPalIndex++)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
+ palOffset += 16;
+ }
+ else
+ {
+ for (i = 0; i < 16; i++)
+ {
+ u32 offset;
+ struct RGBColor color1;
+ struct RGBColor color2;
+ u8 r1, g1, b1;
+ u8 r2, g2, b2;
+
+ color1 = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r1 = color1.r;
+ g1 = color1.g;
+ b1 = color1.b;
+
+ r1 += ((rBlend - r1) * blendCoeff) >> 4;
+ g1 += ((gBlend - g1) * blendCoeff) >> 4;
+ b1 += ((bBlend - b1) * blendCoeff) >> 4;
+
+ gPlttBufferFaded[palOffset++] = (b1 << 10) | (g1 << 5) | r1;
+ }
+ }
+ }
+}
+
+static void ApplyFogBlend(u8 blendCoeff, u16 blendColor)
+{
+ struct RGBColor color;
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
+
+ BlendPalette(0, 256, blendCoeff, blendColor);
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
+
+ for (curPalIndex = 16; curPalIndex < 32; curPalIndex++)
+ {
+ if (LightenSpritePaletteInFog(curPalIndex))
+ {
+ u16 palEnd = (curPalIndex + 1) * 16;
+ u16 palOffset = curPalIndex * 16;
+
+ while (palOffset < palEnd)
+ {
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = color.r;
+ u8 g = color.g;
+ u8 b = color.b;
+
+ r += ((28 - r) * 3) >> 2;
+ g += ((31 - g) * 3) >> 2;
+ b += ((28 - b) * 3) >> 2;
+
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
+
+ gPlttBufferFaded[palOffset] = (b << 10) | (g << 5) | r;
+ palOffset++;
+ }
+ }
+ else
+ {
+ BlendPalette(curPalIndex * 16, 16, blendCoeff, blendColor);
+ }
+ }
+}
+
+static void MarkFogSpritePalToLighten(u8 paletteIndex)
+{
+ if (gWeatherPtr->lightenedFogSpritePalsCount < 6)
+ {
+ gWeatherPtr->lightenedFogSpritePals[gWeatherPtr->lightenedFogSpritePalsCount] = paletteIndex;
+ gWeatherPtr->lightenedFogSpritePalsCount++;
+ }
+}
+
+static bool8 LightenSpritePaletteInFog(u8 paletteIndex)
+{
+ u16 i;
+
+ for (i = 0; i < gWeatherPtr->lightenedFogSpritePalsCount; i++)
+ {
+ if (gWeatherPtr->lightenedFogSpritePals[i] == paletteIndex)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void sub_807A790(s8 gammaIndex)
+{
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
+ {
+ ApplyGammaShift(0, 32, gammaIndex);
+ gWeatherPtr->gammaIndex = gammaIndex;
+ }
+}
+
+void sub_807A7C4(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay)
+{
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
+ {
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
+ gWeatherPtr->gammaIndex = gammaIndex;
+ gWeatherPtr->gammaTargetIndex = gammaTargetIndex;
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->gammaStepDelay = gammaStepDelay;
+ sub_807A790(gammaIndex);
+ }
+}
+
+void FadeScreen(u8 mode, s8 delay)
+{
+ u32 fadeColor;
+ bool8 fadeOut;
+ bool8 useWeatherPal;
+
+ switch (mode)
+ {
+ case FADE_FROM_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = FALSE;
+ break;
+ case FADE_FROM_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = FALSE;
+ break;
+ case FADE_TO_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = TRUE;
+ break;
+ case FADE_TO_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = TRUE;
+ break;
+ default:
+ return;
+ }
+
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ case WEATHER_SNOW:
+ case WEATHER_FOG_HORIZONTAL:
+ case WEATHER_SHADE:
+ case WEATHER_DROUGHT:
+ useWeatherPal = TRUE;
+ break;
+ default:
+ useWeatherPal = FALSE;
+ break;
+ }
+
+ if (fadeOut)
+ {
+ if (useWeatherPal)
+ CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+
+ BeginNormalPaletteFade(0xFFFFFFFF, delay, 0, 16, fadeColor);
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
+ }
+ else
+ {
+ gWeatherPtr->fadeDestColor = fadeColor;
+ if (useWeatherPal)
+ gWeatherPtr->fadeScreenCounter = 0;
+ else
+ BeginNormalPaletteFade(0xFFFFFFFF, delay, 16, 0, fadeColor);
+
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_IN;
+ gWeatherPtr->unknown_6CA = 1;
+ gWeatherPtr->unknown_6CB = 0;
+ Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
+ gWeatherPtr->readyForInit = TRUE;
+ }
+}
+
+void FadeSelectedPals(u8 mode, s8 delay, u32 selectedPalettes)
+{
+ u32 fadeColor;
+ bool8 fadeOut;
+ bool8 useWeatherPal;
+
+ switch (mode)
+ {
+ case FADE_FROM_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = FALSE;
+ break;
+ case FADE_FROM_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = FALSE;
+ break;
+ case FADE_TO_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = TRUE;
+ break;
+ case FADE_TO_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = TRUE;
+ break;
+ default:
+ return;
+ }
+
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ case WEATHER_SNOW:
+ case WEATHER_FOG_HORIZONTAL:
+ case WEATHER_SHADE:
+ case WEATHER_DROUGHT:
+ useWeatherPal = TRUE;
+ break;
+ default:
+ useWeatherPal = FALSE;
+ break;
+ }
+
+ if (fadeOut)
+ {
+ if (useWeatherPal)
+ CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+
+ BeginNormalPaletteFade(selectedPalettes, delay, 0, 16, fadeColor);
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
+ }
+ else
+ {
+ gWeatherPtr->fadeDestColor = fadeColor;
+ if (useWeatherPal)
+ gWeatherPtr->fadeScreenCounter = 0;
+ else
+ BeginNormalPaletteFade(selectedPalettes, delay, 16, 0, fadeColor);
+
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_IN;
+ gWeatherPtr->unknown_6CA = 1;
+ gWeatherPtr->unknown_6CB = 0;
+ Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
+ gWeatherPtr->readyForInit = TRUE;
+ }
+}
+
+
+bool8 IsWeatherNotFadingIn(void)
+{
+ return (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_IN);
+}
+
+void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex)
+{
+ u16 paletteIndex = 16 + spritePaletteIndex;
+ u16 i;
+
+ switch (gWeatherPtr->palProcessingState)
+ {
+ case WEATHER_PAL_STATE_SCREEN_FADING_IN:
+ if (gWeatherPtr->unknown_6CA != 0)
+ {
+ if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL)
+ MarkFogSpritePalToLighten(paletteIndex);
+ paletteIndex *= 16;
+ for (i = 0; i < 16; i++)
+ gPlttBufferFaded[paletteIndex + i] = gWeatherPtr->fadeDestColor;
+ }
+ break;
+ case WEATHER_PAL_STATE_SCREEN_FADING_OUT:
+ paletteIndex *= 16;
+ CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, 32);
+ BlendPalette(paletteIndex, 16, gPaletteFade.y, gPaletteFade.blendColor);
+ break;
+ // WEATHER_PAL_STATE_CHANGING_WEATHER
+ // WEATHER_PAL_STATE_CHANGING_IDLE
+ default:
+ if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL)
+ {
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
+ }
+ else
+ {
+ paletteIndex *= 16;
+ BlendPalette(paletteIndex, 16, 12, RGB(28, 31, 28));
+ }
+ break;
+ }
+}
+
+void ApplyWeatherGammaShiftToPal(u8 paletteIndex)
+{
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
+}
+
+static u8 sub_80ABF20(void)
+{
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_SCREEN_FADING_IN)
+ return gWeatherPtr->unknown_6CA;
+ else
+ return 0;
+}
+
+void LoadCustomWeatherSpritePalette(const u16 *palette)
+{
+ LoadPalette(palette, 0x100 + gWeatherPtr->weatherPicSpritePalIndex * 16, 32);
+ UpdateSpritePaletteWithWeather(gWeatherPtr->weatherPicSpritePalIndex);
+}
+
+static void LoadDroughtWeatherPalette(u8 *gammaIndexPtr, u8 *a1)
+{
+ // Dummied out in FRLG
+ // *gammaIndexPtr = 0x20;
+ // *a1 = 0x20;
+}
+
+void ResetDroughtWeatherPaletteLoading(void)
+{
+ gWeatherPtr->loadDroughtPalsIndex = 1;
+ gWeatherPtr->loadDroughtPalsOffset = 1;
+}
+
+bool8 LoadDroughtWeatherPalettes(void)
+{
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
+ {
+ LoadDroughtWeatherPalette(&gWeatherPtr->loadDroughtPalsIndex, &gWeatherPtr->loadDroughtPalsOffset);
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_807AC50(s8 gammaIndex)
+{
+ sub_807A790(-gammaIndex - 1);
+}
+
+void sub_807AC60(void)
+{
+ gWeatherPtr->unknown_73C = 0;
+ gWeatherPtr->unknown_740 = 0;
+ gWeatherPtr->unknown_742 = 0;
+ gWeatherPtr->unknown_73E = 0;
+ gUnknown_20386A8 = 5;
+}
+
+void sub_807AC98(void)
+{
+ switch (gWeatherPtr->unknown_742)
+ {
+ case 0:
+ if (++gWeatherPtr->unknown_740 > gUnknown_20386A8)
+ {
+ gWeatherPtr->unknown_740 = 0;
+ sub_807AC50(gWeatherPtr->unknown_73C++);
+ if (gWeatherPtr->unknown_73C > 5)
+ {
+ gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
+ gWeatherPtr->unknown_742 = 1;
+ gWeatherPtr->unknown_740 = 0x3C;
+ }
+ }
+ break;
+ case 1:
+ gWeatherPtr->unknown_740 = (gWeatherPtr->unknown_740 + 3) & 0x7F;
+ gWeatherPtr->unknown_73C = ((gSineTable[gWeatherPtr->unknown_740] - 1) >> 6) + 2;
+ if (gWeatherPtr->unknown_73C != gWeatherPtr->unknown_73E)
+ sub_807AC50(gWeatherPtr->unknown_73C);
+ gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
+ break;
+ case 2:
+ if (++gWeatherPtr->unknown_740 > gUnknown_20386A8)
+ {
+ gWeatherPtr->unknown_740 = 0;
+ sub_807AC50(--gWeatherPtr->unknown_73C);
+ if (gWeatherPtr->unknown_73C == 3)
+ gWeatherPtr->unknown_742 = 0;
+ }
+ break;
+ }
+}
+
+void Weather_SetBlendCoeffs(u8 eva, u8 evb)
+{
+ gWeatherPtr->currBlendEVA = eva;
+ gWeatherPtr->currBlendEVB = evb;
+ gWeatherPtr->targetBlendEVA = eva;
+ gWeatherPtr->targetBlendEVB = evb;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(eva, evb));
+}
+
+void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay)
+{
+ gWeatherPtr->targetBlendEVA = eva;
+ gWeatherPtr->targetBlendEVB = evb;
+ gWeatherPtr->blendDelay = delay;
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter = 0;
+}
+
+bool8 Weather_UpdateBlend(void)
+{
+ if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
+ && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
+ return TRUE;
+
+ if (++gWeatherPtr->blendFrameCounter > gWeatherPtr->blendDelay)
+ {
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter++;
+
+ // Update currBlendEVA and currBlendEVB on alternate frames
+ if (gWeatherPtr->blendUpdateCounter & 1)
+ {
+ if (gWeatherPtr->currBlendEVA < gWeatherPtr->targetBlendEVA)
+ gWeatherPtr->currBlendEVA++;
+ else if (gWeatherPtr->currBlendEVA > gWeatherPtr->targetBlendEVA)
+ gWeatherPtr->currBlendEVA--;
+ }
+ else
+ {
+ if (gWeatherPtr->currBlendEVB < gWeatherPtr->targetBlendEVB)
+ gWeatherPtr->currBlendEVB++;
+ else if (gWeatherPtr->currBlendEVB > gWeatherPtr->targetBlendEVB)
+ gWeatherPtr->currBlendEVB--;
+ }
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB));
+
+ if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
+ && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
+ return TRUE;
+
+ return FALSE;
+}
+
+static void sub_807AF00(u8 a)
+{
+ switch (a)
+ {
+ case 1:
+ SetWeather(WEATHER_SUNNY_CLOUDS);
+ break;
+ case 2:
+ SetWeather(WEATHER_SUNNY);
+ break;
+ case 3:
+ SetWeather(WEATHER_RAIN);
+ break;
+ case 4:
+ SetWeather(WEATHER_SNOW);
+ break;
+ case 5:
+ SetWeather(WEATHER_RAIN_THUNDERSTORM);
+ break;
+ case 6:
+ SetWeather(WEATHER_FOG_HORIZONTAL);
+ break;
+ case 7:
+ SetWeather(WEATHER_FOG_DIAGONAL);
+ break;
+ case 8:
+ SetWeather(WEATHER_VOLCANIC_ASH);
+ break;
+ case 9:
+ SetWeather(WEATHER_SANDSTORM);
+ break;
+ case 10:
+ SetWeather(WEATHER_SHADE);
+ break;
+ }
+}
+
+u8 GetCurrentWeather(void)
+{
+ return gWeatherPtr->currWeather;
+}
+
+void SetRainStrengthFromSoundEffect(u16 soundEffect)
+{
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT)
+ {
+ switch (soundEffect)
+ {
+ case SE_T_KOAME:
+ gWeatherPtr->rainStrength = 0;
+ break;
+ case SE_T_OOAME:
+ gWeatherPtr->rainStrength = 1;
+ break;
+ case SE_T_AME:
+ gWeatherPtr->rainStrength = 2;
+ break;
+ default:
+ return;
+ }
+
+ PlaySE(soundEffect);
+ }
+}
+
+void PlayRainStoppingSoundEffect(void)
+{
+ if (IsSpecialSEPlaying())
+ {
+ switch (gWeatherPtr->rainStrength)
+ {
+ case 0:
+ PlaySE(SE_T_KOAME_E);
+ break;
+ case 1:
+ PlaySE(SE_T_OOAME_E);
+ break;
+ case 2:
+ default:
+ PlaySE(SE_T_AME_E);
+ break;
+ }
+ }
+}
+
+u8 IsWeatherChangeComplete(void)
+{
+ return gWeatherPtr->weatherChangeComplete;
+}
+
+void SetWeatherScreenFadeOut(void)
+{
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
+}
+
+void sub_807B070(void)
+{
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+}
+
+void PreservePaletteInWeather(u8 preservedPalIndex)
+{
+ CpuCopy16(sBasePaletteGammaTypes, sFieldEffectPaletteGammaTypes, 32);
+ sFieldEffectPaletteGammaTypes[preservedPalIndex] = GAMMA_NONE;
+ sPaletteGammaTypes = sFieldEffectPaletteGammaTypes;
+}
+
+void ResetPreservedPalettesInWeather(void)
+{
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
+}
+
+void sub_807B0C4(u16 *palbuf, u16 *unused, u32 size)
+{
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN:
+ case WEATHER_SNOW:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_SHADE:
+ case WEATHER_DOWNPOUR:
+ sub_8045314(palbuf, RGB_BLACK, 3, size);
+ break;
+ }
+}
diff --git a/src/field_weather_effects.c b/src/field_weather_effects.c
new file mode 100644
index 000000000..e6f4bfacf
--- /dev/null
+++ b/src/field_weather_effects.c
@@ -0,0 +1,2320 @@
+#include "global.h"
+#include "gflib.h"
+#include "battle_anim.h"
+#include "event_object_movement.h"
+#include "field_weather.h"
+#include "field_weather_effects.h"
+#include "overworld.h"
+#include "random.h"
+#include "script.h"
+#include "constants/weather.h"
+#include "constants/songs.h"
+#include "task.h"
+#include "trig.h"
+
+//------------------------------------------------------------------------------
+// WEATHER_SUNNY_CLOUDS
+//------------------------------------------------------------------------------
+
+static void CreateCloudSprites(void);
+static void DestroyCloudSprites(void);
+static void UpdateCloudSprite(struct Sprite *);
+
+// The clouds are positioned on the map's grid.
+// These coordinates are for the lower half of Route 120.
+static const struct Coords16 sCloudSpriteMapCoords[] = {
+ { 0, 66},
+ { 5, 73},
+ {10, 78},
+};
+
+static const struct SpriteSheet sCloudSpriteSheet = {
+ .data = gWeatherCloudTiles,
+ .size = 0x0800,
+ .tag = 0x1200
+};
+
+static const struct OamData sCloudSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sCloudSpriteAnimCmd[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sCloudSpriteAnimCmds[] = {
+ sCloudSpriteAnimCmd,
+};
+
+static const struct SpriteTemplate sCloudSpriteTemplate = {
+ .tileTag = 0x1200,
+ .paletteTag = 0x1200,
+ .oam = &sCloudSpriteOamData,
+ .anims = sCloudSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateCloudSprite,
+};
+
+void Clouds_InitVars(void)
+{
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->initStep = 0;
+ if (!gWeatherPtr->cloudSpritesCreated)
+ Weather_SetBlendCoeffs(0, 16);
+}
+
+void Clouds_InitAll(void)
+{
+ Clouds_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Clouds_Main();
+}
+
+void Clouds_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateCloudSprites();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(12, 8, 1);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 Clouds_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ return TRUE;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ DestroyCloudSprites();
+ gWeatherPtr->finishStep++;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void Sunny_InitVars(void)
+{
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+}
+
+void Sunny_InitAll(void)
+{
+ Sunny_InitVars();
+}
+
+void Sunny_Main(void)
+{
+}
+
+bool8 Sunny_Finish(void)
+{
+ return FALSE;
+}
+
+static void CreateCloudSprites(void)
+{
+ u16 i;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (gWeatherPtr->cloudSpritesCreated == TRUE)
+ return;
+
+ LoadSpriteSheet(&sCloudSpriteSheet);
+ LoadCustomWeatherSpritePalette(gCloudsWeatherPalette);
+ for (i = 0; i < NUM_CLOUD_SPRITES; i++)
+ {
+ spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF);
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s1.cloudSprites[i] = &gSprites[spriteId];
+ sprite = gWeatherPtr->sprites.s1.cloudSprites[i];
+ SetSpritePosToMapCoords(sCloudSpriteMapCoords[i].x + 7, sCloudSpriteMapCoords[i].y + 7, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->coordOffsetEnabled = TRUE;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s1.cloudSprites[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->cloudSpritesCreated = TRUE;
+}
+
+static void DestroyCloudSprites(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->cloudSpritesCreated)
+ return;
+
+ for (i = 0; i < NUM_CLOUD_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s1.cloudSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s1.cloudSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1200);
+ gWeatherPtr->cloudSpritesCreated = FALSE;
+}
+
+static void UpdateCloudSprite(struct Sprite *sprite)
+{
+ // Move 1 pixel left every 2 frames.
+ sprite->data[0] = (sprite->data[0] + 1) & 1;
+ if (sprite->data[0])
+ sprite->pos1.x--;
+}
+
+//------------------------------------------------------------------------------
+// WEATHER_DROUGHT
+//------------------------------------------------------------------------------
+
+static void UpdateDroughtBlend(u8);
+
+void Drought_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
+}
+
+void Drought_InitAll(void)
+{
+ Drought_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Drought_Main();
+}
+
+void Drought_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_CHANGING_WEATHER)
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ ResetDroughtWeatherPaletteLoading();
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!LoadDroughtWeatherPalettes())
+ gWeatherPtr->initStep++;
+ break;
+ case 3:
+ sub_807AC60();
+ gWeatherPtr->initStep++;
+ break;
+ case 4:
+ sub_807AC98();
+ if (gWeatherPtr->unknown_73C == 6)
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ default:
+ sub_807AC98();
+ break;
+ }
+}
+
+bool8 Drought_Finish(void)
+{
+ return FALSE;
+}
+
+void StartDroughtWeatherBlend(void)
+{
+ CreateTask(UpdateDroughtBlend, 0x50);
+}
+
+#define tState data[0]
+#define tBlendY data[1]
+#define tBlendDelay data[2]
+#define tWinRange data[3]
+
+static void UpdateDroughtBlend(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->tState)
+ {
+ case 0:
+ task->tBlendY = 0;
+ task->tBlendDelay = 0;
+ task->tWinRange = GetGpuReg(REG_OFFSET_WININ);
+ SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(63, 63));
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ task->tState++;
+ // fall through
+ case 1:
+ task->tBlendY += 3;
+ if (task->tBlendY > 16)
+ task->tBlendY = 16;
+ SetGpuReg(REG_OFFSET_BLDY, task->tBlendY);
+ if (task->tBlendY >= 16)
+ task->tState++;
+ break;
+ case 2:
+ task->tBlendDelay++;
+ if (task->tBlendDelay > 9)
+ {
+ task->tBlendDelay = 0;
+ task->tBlendY--;
+ if (task->tBlendY <= 0)
+ {
+ task->tBlendY = 0;
+ task->tState++;
+ }
+ SetGpuReg(REG_OFFSET_BLDY, task->tBlendY);
+ }
+ break;
+ case 3:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_WININ, task->tWinRange);
+ task->tState++;
+ break;
+ case 4:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+#undef tState
+#undef tBlendY
+#undef tBlendDelay
+#undef tWinRange
+
+//------------------------------------------------------------------------------
+// WEATHER_RAIN
+//------------------------------------------------------------------------------
+
+static void LoadRainSpriteSheet(void);
+static bool8 CreateRainSprite(void);
+static void UpdateRainSprite(struct Sprite *sprite);
+static bool8 UpdateVisibleRainSprites(void);
+static void DestroyRainSprites(void);
+
+static const struct Coords16 sRainSpriteCoords[] = {
+ { 0, 0},
+ { 0, 160},
+ { 0, 64},
+ {144, 224},
+ {144, 128},
+ { 32, 32},
+ { 32, 192},
+ { 32, 96},
+ { 72, 128},
+ { 72, 32},
+ { 72, 192},
+ {216, 96},
+ {216, 0},
+ {104, 160},
+ {104, 64},
+ {104, 224},
+ {144, 0},
+ {144, 160},
+ {144, 64},
+ { 32, 224},
+ { 32, 128},
+ { 72, 32},
+ { 72, 192},
+ { 48, 96},
+};
+
+static const struct OamData sRainSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x32),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 2,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sRainSpriteFallAnimCmd[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sRainSpriteSplashAnimCmd[] = {
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(40, 2),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sRainSpriteHeavySplashAnimCmd[] = {
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sRainSpriteAnimCmds[] = {
+ sRainSpriteFallAnimCmd,
+ sRainSpriteSplashAnimCmd,
+ sRainSpriteHeavySplashAnimCmd,
+};
+
+static const struct SpriteTemplate sRainSpriteTemplate = {
+ .tileTag = 0x1206,
+ .paletteTag = 0x1200,
+ .oam = &sRainSpriteOamData,
+ .anims = sRainSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateRainSprite,
+};
+
+// Q28.4 fixed-point format values
+static const s16 sRainSpriteMovement[][2] = {
+ {-0x68, 0xD0},
+ {-0xA0, 0x140},
+};
+
+// First byte is the number of frames a raindrop falls before it splashes.
+// Second byte is the maximum number of frames a raindrop can "wait" before
+// it appears and starts falling. (This is only for the initial raindrop spawn.)
+static const u16 sRainSpriteFallingDurations[][2] = {
+ {18, 7},
+ {12, 10},
+};
+
+static const struct SpriteSheet sRainSpriteSheet = {
+ .data = gWeatherRainTiles,
+ .size = 0x0600,
+ .tag = 0x1206,
+};
+
+void Rain_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->rainSpriteVisibleCounter = 0;
+ gWeatherPtr->rainSpriteVisibleDelay = 8;
+ gWeatherPtr->isDownpour = FALSE;
+ gWeatherPtr->targetRainSpriteCount = 10;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ SetRainStrengthFromSoundEffect(SE_T_KOAME);
+}
+
+void Rain_InitAll(void)
+{
+ Rain_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Rain_Main();
+}
+
+void Rain_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadRainSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (!CreateRainSprite())
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!UpdateVisibleRainSprites())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 Rain_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_THUNDERSTORM
+ || gWeatherPtr->nextWeather == WEATHER_DOWNPOUR)
+ {
+ gWeatherPtr->finishStep = 0xFF;
+ return FALSE;
+ }
+ else
+ {
+ gWeatherPtr->targetRainSpriteCount = 0;
+ gWeatherPtr->finishStep++;
+ }
+ // fall through
+ case 1:
+ if (!UpdateVisibleRainSprites())
+ {
+ DestroyRainSprites();
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+#define tCounter data[0]
+#define tRandom data[1]
+#define tPosX data[2]
+#define tPosY data[3]
+#define tState data[4]
+#define tActive data[5]
+#define tWaiting data[6]
+
+static void StartRainSpriteFall(struct Sprite *sprite)
+{
+ u32 rand;
+ u16 numFallingFrames;
+ int tileX;
+ int tileY;
+
+ if (sprite->tRandom == 0)
+ sprite->tRandom = 361;
+
+ // Standard RNG sequence.
+ rand = sprite->tRandom * 1103515245 + 12345;
+ sprite->tRandom = ((rand & 0x7FFF0000) >> 16) % 600;
+
+ numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isDownpour][0];
+
+ tileX = sprite->tRandom % 30;
+ sprite->tPosX = tileX * 8; // Useless assignment, leftover from before fixed-point values were used
+
+ tileY = sprite->tRandom / 30;
+ sprite->tPosY = tileY * 8; // Useless assignment, leftover from before fixed-point values were used
+
+ sprite->tPosX = tileX;
+ sprite->tPosX <<= 7; // This is tileX * 8, using a fixed-point value with 4 decimal places
+
+ sprite->tPosY = tileY;
+ sprite->tPosY <<= 7; // This is tileX * 8, using a fixed-point value with 4 decimal places
+
+ // "Rewind" the rain sprites, from their ending position.
+ sprite->tPosX -= sRainSpriteMovement[gWeatherPtr->isDownpour][0] * numFallingFrames;
+ sprite->tPosY -= sRainSpriteMovement[gWeatherPtr->isDownpour][1] * numFallingFrames;
+
+ StartSpriteAnim(sprite, 0);
+ sprite->tState = 0;
+ sprite->coordOffsetEnabled = FALSE;
+ sprite->tCounter = numFallingFrames;
+}
+
+static void UpdateRainSprite(struct Sprite *sprite)
+{
+ if (sprite->tState == 0)
+ {
+ // Raindrop is in its "falling" motion.
+ sprite->tPosX += sRainSpriteMovement[gWeatherPtr->isDownpour][0];
+ sprite->tPosY += sRainSpriteMovement[gWeatherPtr->isDownpour][1];
+ sprite->pos1.x = sprite->tPosX >> 4;
+ sprite->pos1.y = sprite->tPosY >> 4;
+
+ if (sprite->tActive
+ && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248)
+ && sprite->pos1.y >= -16 && sprite->pos1.y <= 176)
+ sprite->invisible = FALSE;
+ else
+ sprite->invisible = TRUE;
+
+ if (--sprite->tCounter == 0)
+ {
+ // Make raindrop splash on the ground
+ StartSpriteAnim(sprite, gWeatherPtr->isDownpour + 1);
+ sprite->tState = 1;
+ sprite->pos1.x -= gSpriteCoordOffsetX;
+ sprite->pos1.y -= gSpriteCoordOffsetY;
+ sprite->coordOffsetEnabled = TRUE;
+ }
+ }
+ else if (sprite->animEnded)
+ {
+ // The splashing animation ended.
+ sprite->invisible = TRUE;
+ StartRainSpriteFall(sprite);
+ }
+}
+
+static void WaitRainSprite(struct Sprite *sprite)
+{
+ if (sprite->tCounter == 0)
+ {
+ StartRainSpriteFall(sprite);
+ sprite->callback = UpdateRainSprite;
+ }
+ else
+ {
+ sprite->tCounter--;
+ }
+}
+
+static void InitRainSpriteMovement(struct Sprite *sprite, u16 val)
+{
+ u16 numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isDownpour][0];
+ u16 numAdvanceRng = val / (sRainSpriteFallingDurations[gWeatherPtr->isDownpour][1] + numFallingFrames);
+ u16 frameVal = val % (sRainSpriteFallingDurations[gWeatherPtr->isDownpour][1] + numFallingFrames);
+
+ while (--numAdvanceRng != 0xFFFF)
+ StartRainSpriteFall(sprite);
+
+ if (frameVal < numFallingFrames)
+ {
+ while (--frameVal != 0xFFFF)
+ UpdateRainSprite(sprite);
+
+ sprite->tWaiting = FALSE;
+ }
+ else
+ {
+ sprite->tCounter = frameVal - numFallingFrames;
+ sprite->invisible = TRUE;
+ sprite->tWaiting = TRUE;
+ }
+}
+
+static void LoadRainSpriteSheet(void)
+{
+ LoadSpriteSheet(&sRainSpriteSheet);
+}
+
+static bool8 CreateRainSprite(void)
+{
+ u8 spriteIndex;
+ u8 spriteId;
+
+ if (gWeatherPtr->rainSpriteCount == MAX_RAIN_SPRITES)
+ return FALSE;
+
+ spriteIndex = gWeatherPtr->rainSpriteCount;
+ spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate,
+ sRainSpriteCoords[spriteIndex].x, sRainSpriteCoords[spriteIndex].y, 78);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].tActive = 0;
+ gSprites[spriteId].tRandom = spriteIndex * 145;
+ while (gSprites[spriteId].tRandom >= 600)
+ gSprites[spriteId].tRandom -= 600;
+
+ StartRainSpriteFall(&gSprites[spriteId]);
+ InitRainSpriteMovement(&gSprites[spriteId], spriteIndex * 9);
+ gSprites[spriteId].invisible = TRUE;
+ gWeatherPtr->sprites.s1.rainSprites[spriteIndex] = &gSprites[spriteId];
+ }
+ else
+ {
+ gWeatherPtr->sprites.s1.rainSprites[spriteIndex] = NULL;
+ }
+
+ if (++gWeatherPtr->rainSpriteCount == MAX_RAIN_SPRITES)
+ {
+ u16 i;
+ for (i = 0; i < MAX_RAIN_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i])
+ {
+ if (!gWeatherPtr->sprites.s1.rainSprites[i]->tWaiting)
+ gWeatherPtr->sprites.s1.rainSprites[i]->callback = UpdateRainSprite;
+ else
+ gWeatherPtr->sprites.s1.rainSprites[i]->callback = WaitRainSprite;
+ }
+ }
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 UpdateVisibleRainSprites(void)
+{
+ if (gWeatherPtr->curRainSpriteIndex == gWeatherPtr->targetRainSpriteCount)
+ return FALSE;
+
+ if (++gWeatherPtr->rainSpriteVisibleCounter > gWeatherPtr->rainSpriteVisibleDelay)
+ {
+ gWeatherPtr->rainSpriteVisibleCounter = 0;
+ if (gWeatherPtr->curRainSpriteIndex < gWeatherPtr->targetRainSpriteCount)
+ {
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex++]->tActive = 1;
+ }
+ else
+ {
+ gWeatherPtr->curRainSpriteIndex--;
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex]->tActive = 0;
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex]->invisible = TRUE;
+ }
+ }
+ return TRUE;
+}
+
+static void DestroyRainSprites(void)
+{
+ u16 i;
+
+ for (i = 0; i < gWeatherPtr->rainSpriteCount; i++)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s1.rainSprites[i]);
+ }
+ gWeatherPtr->rainSpriteCount = 0;
+ FreeSpriteTilesByTag(0x1206);
+}
+
+#undef tCounter
+#undef tRandom
+#undef tPosX
+#undef tPosY
+#undef tState
+#undef tActive
+#undef tWaiting
+
+//------------------------------------------------------------------------------
+// Snow
+//------------------------------------------------------------------------------
+
+static void UpdateSnowflakeSprite(struct Sprite *);
+static bool8 UpdateVisibleSnowflakeSprites(void);
+static bool8 CreateSnowflakeSprite(void);
+static bool8 DestroySnowflakeSprite(void);
+static void InitSnowflakeSpriteMovement(struct Sprite *);
+
+void Snow_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->targetSnowflakeSpriteCount = 16;
+ gWeatherPtr->snowflakeVisibleCounter = 0;
+}
+
+void Snow_InitAll(void)
+{
+ u16 i;
+
+ Snow_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ {
+ Snow_Main();
+ for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++)
+ UpdateSnowflakeSprite(gWeatherPtr->sprites.s1.snowflakeSprites[i]);
+ }
+}
+
+void Snow_Main(void)
+{
+ if (gWeatherPtr->initStep == 0 && !UpdateVisibleSnowflakeSprites())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+}
+
+bool8 Snow_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ gWeatherPtr->targetSnowflakeSpriteCount = 0;
+ gWeatherPtr->snowflakeVisibleCounter = 0;
+ gWeatherPtr->finishStep++;
+ // fall through
+ case 1:
+ if (!UpdateVisibleSnowflakeSprites())
+ {
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 UpdateVisibleSnowflakeSprites(void)
+{
+ if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->targetSnowflakeSpriteCount)
+ return FALSE;
+
+ if (++gWeatherPtr->snowflakeVisibleCounter > 36)
+ {
+ gWeatherPtr->snowflakeVisibleCounter = 0;
+ if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->targetSnowflakeSpriteCount)
+ CreateSnowflakeSprite();
+ else
+ DestroySnowflakeSprite();
+ }
+
+ return gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->targetSnowflakeSpriteCount;
+}
+
+static const struct OamData sSnowflakeSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteFrameImage sSnowflakeSpriteImages[] = {
+ {gWeatherSnow1Tiles, 0x20},
+ {gWeatherSnow2Tiles, 0x20},
+};
+
+static const union AnimCmd sSnowflakeAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sSnowflakeAnimCmd1[] = {
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sSnowflakeAnimCmds[] = {
+ sSnowflakeAnimCmd0,
+ sSnowflakeAnimCmd1,
+};
+
+static const struct SpriteTemplate sSnowflakeSpriteTemplate = {
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1200,
+ .oam = &sSnowflakeSpriteOamData,
+ .anims = sSnowflakeAnimCmds,
+ .images = sSnowflakeSpriteImages,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateSnowflakeSprite,
+};
+
+#define tPosY data[0]
+#define tDeltaY data[1]
+#define tWaveDelta data[2]
+#define tWaveIndex data[3]
+#define tSnowflakeId data[4]
+#define tFallCounter data[5]
+#define tFallDuration data[6]
+#define tDeltaY2 data[7]
+
+static bool8 CreateSnowflakeSprite(void)
+{
+ u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78);
+ if (spriteId == MAX_SPRITES)
+ return FALSE;
+
+ gSprites[spriteId].tSnowflakeId = gWeatherPtr->snowflakeSpriteCount;
+ InitSnowflakeSpriteMovement(&gSprites[spriteId]);
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gWeatherPtr->sprites.s1.snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId];
+ return TRUE;
+}
+
+static bool8 DestroySnowflakeSprite(void)
+{
+ if (gWeatherPtr->snowflakeSpriteCount)
+ {
+ DestroySprite(gWeatherPtr->sprites.s1.snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void InitSnowflakeSpriteMovement(struct Sprite *sprite)
+{
+ u16 rand;
+ u16 x = ((sprite->tSnowflakeId * 5) & 7) * 30 + (Random() % 30);
+
+ sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->pos1.x = x - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+ sprite->tPosY = sprite->pos1.y * 128;
+ sprite->pos2.x = 0;
+ rand = Random();
+ sprite->tDeltaY = (rand & 3) * 5 + 64;
+ sprite->tDeltaY2 = sprite->tDeltaY;
+ StartSpriteAnim(sprite, (rand & 1) ? 0 : 1);
+ sprite->tWaveIndex = 0;
+ sprite->tWaveDelta = ((rand & 3) == 0) ? 2 : 1;
+ sprite->tFallDuration = (rand & 0x1F) + 210;
+ sprite->tFallCounter = 0;
+}
+
+static void WaitSnowflakeSprite(struct Sprite *sprite)
+{
+ if (gWeatherPtr->unknown_6E2 > 18)
+ {
+ sprite->invisible = FALSE;
+ sprite->callback = UpdateSnowflakeSprite;
+ sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->tPosY = sprite->pos1.y * 128;
+ gWeatherPtr->unknown_6E2 = 0;
+ }
+}
+
+static void UpdateSnowflakeSprite(struct Sprite *sprite)
+{
+ s16 x;
+ s16 y;
+
+ sprite->tPosY += sprite->tDeltaY;
+ sprite->pos1.y = sprite->tPosY >> 7;
+ sprite->tWaveIndex += sprite->tWaveDelta;
+ sprite->tWaveIndex &= 0xFF;
+ sprite->pos2.x = gSineTable[sprite->tWaveIndex] / 64;
+
+ x = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF;
+ if (x & 0x100)
+ x |= -0x100;
+
+ if (x < -3)
+ sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+ else if (x > 242)
+ sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+
+ y = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF;
+ if (y > 163 && y < 171)
+ {
+ sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->tPosY = sprite->pos1.y * 128;
+ sprite->tFallCounter = 0;
+ sprite->tFallDuration = 220;
+ }
+ else if (y > 242 && y < 250)
+ {
+ sprite->pos1.y = 163;
+ sprite->tPosY = sprite->pos1.y * 128;
+ sprite->tFallCounter = 0;
+ sprite->tFallDuration = 220;
+ sprite->invisible = TRUE;
+ sprite->callback = WaitSnowflakeSprite;
+ }
+
+ if (++sprite->tFallCounter == sprite->tFallDuration)
+ {
+ InitSnowflakeSpriteMovement(sprite);
+ sprite->pos1.y = 250;
+ sprite->invisible = TRUE;
+ sprite->callback = WaitSnowflakeSprite;
+ }
+}
+
+#undef tPosY
+#undef tDeltaY
+#undef tWaveDelta
+#undef tWaveIndex
+#undef tSnowflakeId
+#undef tFallCounter
+#undef tFallDuration
+#undef tDeltaY2
+
+//------------------------------------------------------------------------------
+// WEATHER_RAIN_THUNDERSTORM
+//------------------------------------------------------------------------------
+
+void Thunderstorm_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->rainSpriteVisibleCounter = 0;
+ gWeatherPtr->rainSpriteVisibleDelay = 4;
+ gWeatherPtr->isDownpour = FALSE;
+ gWeatherPtr->targetRainSpriteCount = 16;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
+ gWeatherPtr->thunderTriggered = FALSE;
+ SetRainStrengthFromSoundEffect(SE_T_AME);
+}
+
+void Thunderstorm_InitAll(void)
+{
+ Thunderstorm_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Thunderstorm_Main();
+}
+
+//------------------------------------------------------------------------------
+// WEATHER_DOWNPOUR
+//------------------------------------------------------------------------------
+
+static void UpdateThunderSound(void);
+static void SetThunderCounter(u16);
+
+void Downpour_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->rainSpriteVisibleCounter = 0;
+ gWeatherPtr->rainSpriteVisibleDelay = 4;
+ gWeatherPtr->isDownpour = TRUE;
+ gWeatherPtr->targetRainSpriteCount = 24;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
+ SetRainStrengthFromSoundEffect(SE_T_OOAME);
+}
+
+void Downpour_InitAll(void)
+{
+ Downpour_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Thunderstorm_Main();
+}
+
+void Thunderstorm_Main(void)
+{
+ UpdateThunderSound();
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadRainSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (!CreateRainSprite())
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!UpdateVisibleRainSprites())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ case 3:
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_CHANGING_WEATHER)
+ gWeatherPtr->initStep = 6;
+ break;
+ case 4:
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->unknown_6E6 = (Random() % 360) + 360;
+ gWeatherPtr->initStep++;
+ // fall through
+ case 5:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ gWeatherPtr->initStep++;
+ break;
+ case 6:
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->unknown_6EB = Random() % 2;
+ gWeatherPtr->initStep++;
+ break;
+ case 7:
+ gWeatherPtr->unknown_6EC = (Random() & 1) + 1;
+ gWeatherPtr->initStep++;
+ // fall through
+ case 8:
+ sub_807A790(19);
+ if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1)
+ SetThunderCounter(20);
+
+ gWeatherPtr->unknown_6E6 = (Random() % 3) + 6;
+ gWeatherPtr->initStep++;
+ break;
+ case 9:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ {
+ sub_807A790(3);
+ gWeatherPtr->unknown_6EA = 1;
+ if (--gWeatherPtr->unknown_6EC != 0)
+ {
+ gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
+ gWeatherPtr->initStep = 10;
+ }
+ else if (gWeatherPtr->unknown_6EB == 0)
+ {
+ gWeatherPtr->initStep = 4;
+ }
+ else
+ {
+ gWeatherPtr->initStep = 11;
+ }
+ }
+ break;
+ case 10:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ gWeatherPtr->initStep = 8;
+ break;
+ case 11:
+ gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
+ gWeatherPtr->initStep++;
+ break;
+ case 12:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ {
+ SetThunderCounter(100);
+ sub_807A790(19);
+ gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ case 13:
+ if (--gWeatherPtr->unknown_6E6 == 0)
+ {
+ sub_807A7C4(19, 3, 5);
+ gWeatherPtr->initStep++;
+ }
+ break;
+ case 14:
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
+ {
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->initStep = 4;
+ }
+ break;
+ }
+}
+
+bool8 Thunderstorm_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ gWeatherPtr->unknown_6EA = 0;
+ gWeatherPtr->finishStep++;
+ // fall through
+ case 1:
+ Thunderstorm_Main();
+ if (gWeatherPtr->unknown_6EA)
+ {
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_THUNDERSTORM
+ || gWeatherPtr->nextWeather == WEATHER_DOWNPOUR)
+ return FALSE;
+
+ gWeatherPtr->targetRainSpriteCount = 0;
+ gWeatherPtr->finishStep++;
+ }
+ break;
+ case 2:
+ if (!UpdateVisibleRainSprites())
+ {
+ DestroyRainSprites();
+ gWeatherPtr->thunderTriggered = FALSE;
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void SetThunderCounter(u16 max)
+{
+ if (!gWeatherPtr->thunderTriggered)
+ {
+ gWeatherPtr->thunderCounter = Random() % max;
+ gWeatherPtr->thunderTriggered = TRUE;
+ }
+}
+
+static void UpdateThunderSound(void)
+{
+ if (gWeatherPtr->thunderTriggered == TRUE)
+ {
+ if (gWeatherPtr->thunderCounter == 0)
+ {
+ if (IsSEPlaying())
+ return;
+
+ if (Random() & 1)
+ PlaySE(SE_T_KAMI);
+ else
+ PlaySE(SE_T_KAMI2);
+
+ gWeatherPtr->thunderTriggered = FALSE;
+ }
+ else
+ {
+ gWeatherPtr->thunderCounter--;
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+// WEATHER_FOG_HORIZONTAL and WEATHER_UNDERWATER
+//------------------------------------------------------------------------------
+
+// unused data
+static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300};
+
+static const struct OamData gOamData_839AB2C = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gSpriteAnim_839AB34[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB3C[] = {
+ ANIMCMD_FRAME(32, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB44[] = {
+ ANIMCMD_FRAME(64, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB4C[] = {
+ ANIMCMD_FRAME(96, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB54[] = {
+ ANIMCMD_FRAME(128, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB5C[] = {
+ ANIMCMD_FRAME(160, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839AB64[] = {
+ gSpriteAnim_839AB34,
+ gSpriteAnim_839AB3C,
+ gSpriteAnim_839AB44,
+ gSpriteAnim_839AB4C,
+ gSpriteAnim_839AB54,
+ gSpriteAnim_839AB5C,
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = {
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = {
+ gSpriteAffineAnim_839AB7C,
+};
+
+static void FogHorizontalSpriteCallback(struct Sprite *);
+static const struct SpriteTemplate sFogHorizontalSpriteTemplate = {
+ .tileTag = 0x1201,
+ .paletteTag = 0x1200,
+ .oam = &gOamData_839AB2C,
+ .anims = gSpriteAnimTable_839AB64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_839AB8C,
+ .callback = FogHorizontalSpriteCallback,
+};
+
+static void CreateFogHorizontalSprites(void);
+static void DestroyFogHorizontalSprites(void);
+
+void FogHorizontal_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ if (!gWeatherPtr->fogHSpritesCreated)
+ {
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset = 0;
+ gWeatherPtr->fogHScrollPosX = 0;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void FogHorizontal_InitAll(void)
+{
+ FogHorizontal_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ FogHorizontal_Main();
+}
+
+void FogHorizontal_Main(void)
+{
+ gWeatherPtr->fogHScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fogHScrollOffset) & 0xFF;
+ if (++gWeatherPtr->fogHScrollCounter > 3)
+ {
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset++;
+ }
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateFogHorizontalSprites();
+ if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL)
+ Weather_SetTargetBlendCoeffs(12, 8, 3);
+ else
+ Weather_SetTargetBlendCoeffs(4, 16, 0);
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 FogHorizontal_Finish(void)
+{
+ gWeatherPtr->fogHScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fogHScrollOffset) & 0xFF;
+ if (++gWeatherPtr->fogHScrollCounter > 3)
+ {
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset++;
+ }
+
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 3);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroyFogHorizontalSprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+#define tSpriteColumn data[0]
+
+static void FogHorizontalSpriteCallback(struct Sprite *sprite)
+{
+ sprite->pos2.y = (u8)gSpriteCoordOffsetY;
+ sprite->pos1.x = gWeatherPtr->fogHScrollPosX + 32 + sprite->tSpriteColumn * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = 480 + gWeatherPtr->fogHScrollPosX - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+static void CreateFogHorizontalSprites(void)
+{
+ u16 i;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (!gWeatherPtr->fogHSpritesCreated)
+ {
+ struct SpriteSheet fogHorizontalSpriteSheet = {
+ .data = gWeatherFogHorizontalTiles,
+ .size = 0x0800,
+ .tag = 0x1201,
+ };
+ LoadSpriteSheet(&fogHorizontalSpriteSheet);
+ for (i = 0; i < NUM_FOG_HORIZONTAL_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sFogHorizontalSpriteTemplate, 0, 0, 0xFF);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->tSpriteColumn = i % 5;
+ sprite->pos1.x = (i % 5) * 64 + 32;
+ sprite->pos1.y = (i / 5) * 64 + 32;
+ gWeatherPtr->sprites.s2.fogHSprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.fogHSprites[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->fogHSpritesCreated = TRUE;
+ }
+}
+
+static void DestroyFogHorizontalSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->fogHSpritesCreated)
+ {
+ for (i = 0; i < NUM_FOG_HORIZONTAL_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.fogHSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.fogHSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1201);
+ gWeatherPtr->fogHSpritesCreated = FALSE;
+ }
+}
+
+#undef tSpriteColumn
+
+//------------------------------------------------------------------------------
+// WEATHER_VOLCANIC_ASH
+//------------------------------------------------------------------------------
+
+static void LoadAshSpriteSheet(void);
+static void CreateAshSprites(void);
+static void DestroyAshSprites(void);
+static void UpdateAshSprite(struct Sprite *);
+
+void Ash_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->unknown_6FE = 20;
+ if (!gWeatherPtr->ashSpritesCreated)
+ {
+ Weather_SetBlendCoeffs(0, 16);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(64, 63)); // These aren't valid blend coefficients!
+ }
+}
+
+void Ash_InitAll(void)
+{
+ Ash_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Ash_Main();
+}
+
+void Ash_Main(void)
+{
+ gWeatherPtr->ashBaseSpritesX = gSpriteCoordOffsetX & 0x1FF;
+ while (gWeatherPtr->ashBaseSpritesX >= 240)
+ gWeatherPtr->ashBaseSpritesX -= 240;
+
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadAshSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (!gWeatherPtr->ashSpritesCreated)
+ CreateAshSprites();
+
+ Weather_SetTargetBlendCoeffs(16, 0, 1);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ default:
+ Weather_UpdateBlend();
+ break;
+ }
+}
+
+bool8 Ash_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ DestroyAshSprites();
+ gWeatherPtr->finishStep++;
+ }
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static const struct SpriteSheet sAshSpriteSheet = {
+ .data = gWeatherAshTiles,
+ .size = 0x1000,
+ .tag = 0x1202,
+};
+
+static void LoadAshSpriteSheet(void)
+{
+ LoadSpriteSheet(&sAshSpriteSheet);
+}
+
+static const struct OamData sAshSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 15,
+};
+
+static const union AnimCmd sAshSpriteAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 60),
+ ANIMCMD_FRAME(64, 60),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const sAshSpriteAnimCmds[] = {
+ sAshSpriteAnimCmd0,
+};
+
+static const struct SpriteTemplate sAshSpriteTemplate = {
+ .tileTag = 0x1202,
+ .paletteTag = 0x1200,
+ .oam = &sAshSpriteOamData,
+ .anims = sAshSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateAshSprite,
+};
+
+#define tOffsetY data[0]
+#define tCounterY data[1]
+#define tSpriteColumn data[2]
+#define tSpriteRow data[3]
+
+static void CreateAshSprites(void)
+{
+ u8 i;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (!gWeatherPtr->ashSpritesCreated)
+ {
+ for (i = 0; i < NUM_ASH_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sAshSpriteTemplate, 0, 0, 0x4E);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->tCounterY = 0;
+ sprite->tSpriteColumn = (u8)(i % 5);
+ sprite->tSpriteRow = (u8)(i / 5);
+ sprite->tOffsetY = sprite->tSpriteRow * 64 + 32;
+ gWeatherPtr->sprites.s2.ashSprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->ashSpritesCreated = TRUE;
+ }
+}
+
+static void DestroyAshSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->ashSpritesCreated)
+ {
+ for (i = 0; i < NUM_ASH_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.ashSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1202);
+ gWeatherPtr->ashSpritesCreated = FALSE;
+ }
+}
+
+static void UpdateAshSprite(struct Sprite *sprite)
+{
+ if (++sprite->tCounterY > 5)
+ {
+ sprite->tCounterY = 0;
+ sprite->tOffsetY++;
+ }
+
+ sprite->pos1.y = gSpriteCoordOffsetY + sprite->tOffsetY;
+ sprite->pos1.x = gWeatherPtr->ashBaseSpritesX + 32 + sprite->tSpriteColumn * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->ashBaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+#undef tOffsetY
+#undef tCounterY
+#undef tSpriteColumn
+#undef tSpriteRow
+
+//------------------------------------------------------------------------------
+// WEATHER_FOG_DIAGONAL
+//------------------------------------------------------------------------------
+
+static void UpdateFogDiagonalMovement(void);
+static void CreateFogDiagonalSprites(void);
+static void DestroyFogDiagonalSprites(void);
+static void UpdateFogDiagonalSprite(struct Sprite *);
+
+void FogDiagonal_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset = 1;
+ if (!gWeatherPtr->fogDSpritesCreated)
+ {
+ gWeatherPtr->fogDScrollXCounter = 0;
+ gWeatherPtr->fogDScrollYCounter = 0;
+ gWeatherPtr->fogDXOffset = 0;
+ gWeatherPtr->fogDYOffset = 0;
+ gWeatherPtr->fogDBaseSpritesX = 0;
+ gWeatherPtr->fogDPosY = 0;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void FogDiagonal_InitAll(void)
+{
+ FogDiagonal_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ FogDiagonal_Main();
+}
+
+void FogDiagonal_Main(void)
+{
+ UpdateFogDiagonalMovement();
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateFogDiagonalSprites();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(12, 8, 8);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ }
+}
+
+bool8 FogDiagonal_Finish(void)
+{
+ UpdateFogDiagonalMovement();
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroyFogDiagonalSprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void UpdateFogDiagonalMovement(void)
+{
+ if (++gWeatherPtr->fogDScrollXCounter > 2)
+ {
+ gWeatherPtr->fogDXOffset++;
+ gWeatherPtr->fogDScrollXCounter = 0;
+ }
+
+ if (++gWeatherPtr->fogDScrollYCounter > 4)
+ {
+ gWeatherPtr->fogDYOffset++;
+ gWeatherPtr->fogDScrollYCounter = 0;
+ }
+
+ gWeatherPtr->fogDBaseSpritesX = (gSpriteCoordOffsetX - gWeatherPtr->fogDXOffset) & 0xFF;
+ gWeatherPtr->fogDPosY = gSpriteCoordOffsetY + gWeatherPtr->fogDYOffset;
+}
+
+static const struct SpriteSheet gFogDiagonalSpriteSheet = {
+ .data = gWeatherFogDiagonalTiles,
+ .size = 0x0800,
+ .tag = 0x1203,
+};
+
+static const struct OamData sFogDiagonalSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+};
+
+static const union AnimCmd sFogDiagonalSpriteAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sFogDiagonalSpriteAnimCmds[] = {
+ sFogDiagonalSpriteAnimCmd0,
+};
+
+static const struct SpriteTemplate sFogDiagonalSpriteTemplate = {
+ .tileTag = 0x1203,
+ .paletteTag = 0x1200,
+ .oam = &sFogDiagonalSpriteOamData,
+ .anims = sFogDiagonalSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateFogDiagonalSprite,
+};
+
+#define tSpriteColumn data[0]
+#define tSpriteRow data[1]
+
+static void CreateFogDiagonalSprites(void)
+{
+ u16 i;
+ struct SpriteSheet fogDiagonalSpriteSheet;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (!gWeatherPtr->fogDSpritesCreated)
+ {
+ fogDiagonalSpriteSheet = gFogDiagonalSpriteSheet;
+ LoadSpriteSheet(&fogDiagonalSpriteSheet);
+ for (i = 0; i < NUM_FOG_DIAGONAL_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sFogDiagonalSpriteTemplate, 0, (i / 5) * 64, 0xFF);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->tSpriteColumn = i % 5;
+ sprite->tSpriteRow = i / 5;
+ gWeatherPtr->sprites.s2.fogDSprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.fogDSprites[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->fogDSpritesCreated = TRUE;
+ }
+}
+
+static void DestroyFogDiagonalSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->fogDSpritesCreated)
+ {
+ for (i = 0; i < NUM_FOG_DIAGONAL_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.fogDSprites[i])
+ DestroySprite(gWeatherPtr->sprites.s2.fogDSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1203);
+ gWeatherPtr->fogDSpritesCreated = FALSE;
+ }
+}
+
+static void UpdateFogDiagonalSprite(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->fogDPosY;
+ sprite->pos1.x = gWeatherPtr->fogDBaseSpritesX + 32 + sprite->tSpriteColumn * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->fogDBaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+#undef tSpriteColumn
+#undef tSpriteRow
+
+//------------------------------------------------------------------------------
+// WEATHER_SANDSTORM
+//------------------------------------------------------------------------------
+
+static void UpdateSandstormWaveIndex(void);
+static void UpdateSandstormMovement(void);
+static void CreateSandstormSprites(void);
+static void CreateSwirlSandstormSprites(void);
+static void DestroySandstormSprites(void);
+static void UpdateSandstormSprite(struct Sprite *);
+static void WaitSandSwirlSpriteEntrance(struct Sprite *);
+static void UpdateSandstormSwirlSprite(struct Sprite *);
+
+#define MIN_SANDSTORM_WAVE_INDEX 0x20
+
+void Sandstorm_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ if (!gWeatherPtr->sandstormSpritesCreated)
+ {
+ gWeatherPtr->sandstormXOffset = gWeatherPtr->sandstormYOffset = 0;
+ gWeatherPtr->sandstormWaveIndex = 8;
+ gWeatherPtr->sandstormWaveCounter = 0;
+ // Dead code. How does the compiler not optimize this out?
+ if (gWeatherPtr->sandstormWaveIndex >= 0x80 - MIN_SANDSTORM_WAVE_INDEX)
+ gWeatherPtr->sandstormWaveIndex = 0x80 - gWeatherPtr->sandstormWaveIndex;
+
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void Sandstorm_InitAll(void)
+{
+ Sandstorm_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Sandstorm_Main();
+}
+
+void Sandstorm_Main(void)
+{
+ UpdateSandstormMovement();
+ UpdateSandstormWaveIndex();
+ if (gWeatherPtr->sandstormWaveIndex >= 0x80 - MIN_SANDSTORM_WAVE_INDEX)
+ gWeatherPtr->sandstormWaveIndex = MIN_SANDSTORM_WAVE_INDEX;
+
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateSandstormSprites();
+ CreateSwirlSandstormSprites();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(16, 0, 0);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 Sandstorm_Finish(void)
+{
+ UpdateSandstormMovement();
+ UpdateSandstormWaveIndex();
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 0);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroySandstormSprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void UpdateSandstormWaveIndex(void)
+{
+ if (gWeatherPtr->sandstormWaveCounter++ > 4)
+ {
+ gWeatherPtr->sandstormWaveIndex++;
+ gWeatherPtr->sandstormWaveCounter = 0;
+ }
+}
+
+static void UpdateSandstormMovement(void)
+{
+ gWeatherPtr->sandstormXOffset -= gSineTable[gWeatherPtr->sandstormWaveIndex] * 4;
+ gWeatherPtr->sandstormYOffset -= gSineTable[gWeatherPtr->sandstormWaveIndex];
+ gWeatherPtr->sandstormBaseSpritesX = (gSpriteCoordOffsetX + (gWeatherPtr->sandstormXOffset >> 8)) & 0xFF;
+ gWeatherPtr->sandstormPosY = gSpriteCoordOffsetY + (gWeatherPtr->sandstormYOffset >> 8);
+}
+
+static void DestroySandstormSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->sandstormSpritesCreated)
+ {
+ for (i = 0; i < NUM_SANDSTORM_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.sandstormSprites1[i])
+ DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites1[i]);
+ }
+
+ gWeatherPtr->sandstormSpritesCreated = FALSE;
+ FreeSpriteTilesByTag(0x1204);
+ }
+
+ if (gWeatherPtr->sandstormSwirlSpritesCreated)
+ {
+ for (i = 0; i < NUM_SWIRL_SANDSTORM_SPRITES; i++)
+ {
+ if (gWeatherPtr->sprites.s2.sandstormSprites2[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites2[i]);
+ }
+
+ gWeatherPtr->sandstormSwirlSpritesCreated = FALSE;
+ }
+}
+
+static const struct OamData sSandstormSpriteOamData = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+};
+
+static const union AnimCmd sSandstormSpriteAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sSandstormSpriteAnimCmd1[] = {
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sSandstormSpriteAnimCmds[] = {
+ sSandstormSpriteAnimCmd0,
+ sSandstormSpriteAnimCmd1,
+};
+
+static const struct SpriteTemplate sSandstormSpriteTemplate = {
+ .tileTag = 0x1204,
+ .paletteTag = 0x1200,
+ .oam = &sSandstormSpriteOamData,
+ .anims = sSandstormSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateSandstormSprite,
+};
+
+static const struct SpriteSheet sSandstormSpriteSheet = {
+ .data = gWeatherSandstormTiles,
+ .size = 0x0a00,
+ .tag = 0x1204,
+};
+
+// Regular sandstorm sprites
+#define tSpriteColumn data[0]
+#define tSpriteRow data[1]
+
+// Swirly sandstorm sprites
+#define tRadius data[0]
+#define tWaveIndex data[1]
+#define tRadiusCounter data[2]
+#define tEntranceDelay data[3]
+
+static void CreateSandstormSprites(void)
+{
+ u16 i;
+ u8 spriteId;
+
+ if (!gWeatherPtr->sandstormSpritesCreated)
+ {
+ LoadSpriteSheet(&sSandstormSpriteSheet);
+ LoadCustomWeatherSpritePalette(gSandstormWeatherPalette);
+ for (i = 0; i < NUM_SANDSTORM_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1);
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites1[i] = &gSprites[spriteId];
+ gWeatherPtr->sprites.s2.sandstormSprites1[i]->tSpriteColumn = i % 5;
+ gWeatherPtr->sprites.s2.sandstormSprites1[i]->tSpriteRow = i / 5;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites1[i] = NULL;
+ }
+ }
+
+ gWeatherPtr->sandstormSpritesCreated = TRUE;
+ }
+}
+
+static const u16 sSwirlEntranceDelays[] = {0, 120, 80, 160, 40, 0};
+
+static void CreateSwirlSandstormSprites(void)
+{
+ u16 i;
+ u8 spriteId;
+
+ if (!gWeatherPtr->sandstormSwirlSpritesCreated)
+ {
+ for (i = 0; i < NUM_SWIRL_SANDSTORM_SPRITES; i++)
+ {
+ spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, i * 48 + 24, 208, 1);
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites2[i] = &gSprites[spriteId];
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->oam.size = ST_OAM_SIZE_2;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->tSpriteRow = i * 51;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->tRadius = 8;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->tRadiusCounter = 0;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[4] = 0x6730; // unused value
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->tEntranceDelay = sSwirlEntranceDelays[i];
+ StartSpriteAnim(gWeatherPtr->sprites.s2.sandstormSprites2[i], 1);
+ CalcCenterToCornerVec(gWeatherPtr->sprites.s2.sandstormSprites2[i], SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), ST_OAM_AFFINE_OFF);
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->callback = WaitSandSwirlSpriteEntrance;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites2[i] = NULL;
+ }
+
+ gWeatherPtr->sandstormSwirlSpritesCreated = TRUE;
+ }
+ }
+}
+
+static void UpdateSandstormSprite(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->sandstormPosY;
+ sprite->pos1.x = gWeatherPtr->sandstormBaseSpritesX + 32 + sprite->tSpriteColumn * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->sandstormBaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+static void WaitSandSwirlSpriteEntrance(struct Sprite *sprite)
+{
+ if (--sprite->tEntranceDelay == -1)
+ sprite->callback = UpdateSandstormSwirlSprite;
+}
+
+static void UpdateSandstormSwirlSprite(struct Sprite *sprite)
+{
+ u32 x, y;
+
+ if (--sprite->pos1.y < -48)
+ {
+ sprite->pos1.y = 208;
+ sprite->tRadius = 4;
+ }
+
+ x = sprite->tRadius * gSineTable[sprite->tWaveIndex];
+ y = sprite->tRadius * gSineTable[sprite->tWaveIndex + 0x40];
+ sprite->pos2.x = x >> 8;
+ sprite->pos2.y = y >> 8;
+ sprite->tWaveIndex = (sprite->tWaveIndex + 10) & 0xFF;
+ if (++sprite->tRadiusCounter > 8)
+ {
+ sprite->tRadiusCounter = 0;
+ sprite->tRadius++;
+ }
+}
+
+#undef tSpriteColumn
+#undef tSpriteRow
+
+#undef tRadius
+#undef tWaveIndex
+#undef tRadiusCounter
+#undef tEntranceDelay
+
+//------------------------------------------------------------------------------
+// WEATHER_SHADE
+//------------------------------------------------------------------------------
+
+void Shade_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+}
+
+void Shade_InitAll(void)
+{
+ Shade_InitVars();
+}
+
+void Shade_Main(void)
+{
+}
+
+bool8 Shade_Finish(void)
+{
+ return FALSE;
+}
+
+//------------------------------------------------------------------------------
+// WEATHER_UNDERWATER_BUBBLES
+//------------------------------------------------------------------------------
+
+static void CreateBubbleSprite(u16);
+static void DestroyBubbleSprites(void);
+static void UpdateBubbleSprite(struct Sprite *);
+
+static const u8 sBubbleStartDelays[] = {40, 90, 60, 90, 2, 60, 40, 30};
+
+static const struct SpriteSheet sWeatherBubbleSpriteSheet = {
+ .data = gWeatherBubbleTiles,
+ .size = 0x0040,
+ .tag = 0x1205,
+};
+
+static const s16 sBubbleStartCoords[][2] = {
+ {120, 160},
+ {376, 160},
+ { 40, 140},
+ {296, 140},
+ {180, 130},
+ {436, 130},
+ { 60, 160},
+ {436, 160},
+ {220, 180},
+ {476, 180},
+ { 10, 90},
+ {266, 90},
+ {256, 160},
+};
+
+void Bubbles_InitVars(void)
+{
+ FogHorizontal_InitVars();
+ if (!gWeatherPtr->bubblesSpritesCreated)
+ {
+ LoadSpriteSheet(&sWeatherBubbleSpriteSheet);
+ gWeatherPtr->bubblesDelayIndex = 0;
+ gWeatherPtr->bubblesDelayCounter = sBubbleStartDelays[0];
+ gWeatherPtr->bubblesCoordsIndex = 0;
+ gWeatherPtr->bubblesSpriteCount = 0;
+ }
+}
+
+void Bubbles_InitAll(void)
+{
+ Bubbles_InitVars();
+ while (!gWeatherPtr->weatherGfxLoaded)
+ Bubbles_Main();
+}
+
+void Bubbles_Main(void)
+{
+ FogHorizontal_Main();
+ if (++gWeatherPtr->bubblesDelayCounter > sBubbleStartDelays[gWeatherPtr->bubblesDelayIndex])
+ {
+ gWeatherPtr->bubblesDelayCounter = 0;
+ if (++gWeatherPtr->bubblesDelayIndex > NELEMS(sBubbleStartDelays) - 1)
+ gWeatherPtr->bubblesDelayIndex = 0;
+
+ CreateBubbleSprite(gWeatherPtr->bubblesCoordsIndex);
+ if (++gWeatherPtr->bubblesCoordsIndex > NELEMS(sBubbleStartCoords) - 1)
+ gWeatherPtr->bubblesCoordsIndex = 0;
+ }
+}
+
+bool8 Bubbles_Finish(void)
+{
+ if (!FogHorizontal_Finish())
+ {
+ DestroyBubbleSprites();
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static const union AnimCmd sBubbleSpriteAnimCmd0[] = {
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sBubbleSpriteAnimCmds[] = {
+ sBubbleSpriteAnimCmd0,
+};
+
+static const struct SpriteTemplate sBubbleSpriteTemplate = {
+ .tileTag = 0x1205,
+ .paletteTag = 0x1200,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sBubbleSpriteAnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = UpdateBubbleSprite,
+};
+
+#define tScrollXCounter data[0]
+#define tScrollXDir data[1]
+#define tCounter data[2]
+
+static void CreateBubbleSprite(u16 coordsIndex)
+{
+ s16 x = sBubbleStartCoords[coordsIndex][0];
+ s16 y = sBubbleStartCoords[coordsIndex][1] - gSpriteCoordOffsetY;
+ u8 spriteId = CreateSpriteAtEnd(&sBubbleSpriteTemplate, x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].tScrollXCounter = 0;
+ gSprites[spriteId].tScrollXDir = 0;
+ gSprites[spriteId].tCounter = 0;
+ gWeatherPtr->bubblesSpriteCount++;
+ }
+}
+
+static void DestroyBubbleSprites(void)
+{
+ u16 i;
+
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].template == &sBubbleSpriteTemplate)
+ DestroySprite(&gSprites[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1205);
+}
+
+static void UpdateBubbleSprite(struct Sprite *sprite)
+{
+ ++sprite->tScrollXCounter;
+ if (++sprite->tScrollXCounter > 8) // double increment
+ {
+ sprite->tScrollXCounter = 0;
+ if (sprite->tScrollXDir == 0)
+ {
+ if (++sprite->pos2.x > 4)
+ sprite->tScrollXDir = 1;
+ }
+ else
+ {
+ if (--sprite->pos2.x <= 0)
+ sprite->tScrollXDir = 0;
+ }
+ }
+
+ sprite->pos1.y -= 3;
+ if (++sprite->tCounter >= 120)
+ DestroySprite(sprite);
+}
+
+#undef tScrollXCounter
+#undef tScrollXDir
+#undef tCounter
diff --git a/src/field_weather_util.c b/src/field_weather_util.c
new file mode 100644
index 000000000..459071736
--- /dev/null
+++ b/src/field_weather_util.c
@@ -0,0 +1,105 @@
+#include "global.h"
+#include "field_weather.h"
+#include "overworld.h"
+#include "constants/weather.h"
+
+static u8 TranslateWeatherNum(u8 weather);
+static void UpdateRainCounter(u8 newWeather, u8 oldWeather);
+
+void SetSav1Weather(u32 weather)
+{
+ u8 oldWeather = gSaveBlock1Ptr->weather;
+ gSaveBlock1Ptr->weather = TranslateWeatherNum(weather);
+ UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather);
+}
+
+u8 GetSav1Weather(void)
+{
+ return gSaveBlock1Ptr->weather;
+}
+
+void SetSav1WeatherFromCurrMapHeader(void)
+{
+ u8 oldWeather = gSaveBlock1Ptr->weather;
+ gSaveBlock1Ptr->weather = TranslateWeatherNum(gMapHeader.weather);
+ UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather);
+}
+
+void SetWeather(u32 weather)
+{
+ SetSav1Weather(weather);
+ SetNextWeather(GetSav1Weather());
+}
+
+void SetWeather_Unused(u32 weather)
+{
+ SetSav1Weather(weather);
+ SetCurrentAndNextWeather(GetSav1Weather());
+}
+
+void DoCurrentWeather(void)
+{
+ u8 weather = GetSav1Weather();
+
+ SetNextWeather(weather);
+}
+
+void ResumePausedWeather(void)
+{
+ u8 weather = GetSav1Weather();
+
+ SetCurrentAndNextWeather(weather);
+}
+
+static const u8 sWeatherCycleRoute119[] = {
+ WEATHER_SUNNY,
+ WEATHER_RAIN,
+ WEATHER_RAIN_THUNDERSTORM,
+ WEATHER_RAIN,
+};
+
+static const u8 sWeatherCycleRoute123[] = {
+ WEATHER_SUNNY,
+ WEATHER_SUNNY,
+ WEATHER_RAIN,
+ WEATHER_SUNNY,
+};
+
+static u8 TranslateWeatherNum(u8 weather)
+{
+ switch (weather)
+ {
+ case WEATHER_NONE: return WEATHER_NONE;
+ case WEATHER_SUNNY_CLOUDS: return WEATHER_SUNNY_CLOUDS;
+ case WEATHER_SUNNY: return WEATHER_SUNNY;
+ case WEATHER_RAIN: return WEATHER_RAIN;
+ case WEATHER_SNOW: return WEATHER_SNOW;
+ case WEATHER_RAIN_THUNDERSTORM: return WEATHER_RAIN_THUNDERSTORM;
+ case WEATHER_FOG_HORIZONTAL: return WEATHER_FOG_HORIZONTAL;
+ case WEATHER_VOLCANIC_ASH: return WEATHER_VOLCANIC_ASH;
+ case WEATHER_SANDSTORM: return WEATHER_SANDSTORM;
+ case WEATHER_FOG_DIAGONAL: return WEATHER_FOG_DIAGONAL;
+ case WEATHER_UNDERWATER: return WEATHER_UNDERWATER;
+ case WEATHER_SHADE: return WEATHER_SHADE;
+ case WEATHER_DROUGHT: return WEATHER_DROUGHT;
+ case WEATHER_DOWNPOUR: return WEATHER_DOWNPOUR;
+ case WEATHER_UNDERWATER_BUBBLES: return WEATHER_UNDERWATER_BUBBLES;
+ case WEATHER_ROUTE119_CYCLE: return sWeatherCycleRoute119[gSaveBlock1Ptr->weatherCycleStage];
+ case WEATHER_ROUTE123_CYCLE: return sWeatherCycleRoute123[gSaveBlock1Ptr->weatherCycleStage];
+ default: return WEATHER_NONE;
+ }
+}
+
+void UpdateWeatherPerDay(u16 increment)
+{
+ u16 weatherStage = gSaveBlock1Ptr->weatherCycleStage + increment;
+ weatherStage %= 4;
+ gSaveBlock1Ptr->weatherCycleStage = weatherStage;
+}
+
+static void UpdateRainCounter(u8 newWeather, u8 oldWeather)
+{
+ if (newWeather != oldWeather
+ && (newWeather == WEATHER_RAIN || newWeather == WEATHER_RAIN_THUNDERSTORM))
+ IncrementGameStat(GAME_STAT_GOT_RAINED_ON);
+}
diff --git a/src/graphics.c b/src/graphics.c
index 69e804fd9..5a802cd35 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1247,10 +1247,10 @@ const u32 gUnknown_8E9BF48[] = INCBIN_U32("graphics/interface/link_rfu_status.4b
const u16 gUnknown_8E9C14C[] = INCBIN_U16("graphics/interface/pokedex_abc.gbapal");
const u32 gUnknown_8E9C16C[] = INCBIN_U32("graphics/interface/pokedex_abc.4bpp.lz");
-const u16 gUnknown_8E9C3D8[] = INCBIN_U16("graphics/interface/box_tiles_pal1.gbapal");
+const u16 gPSSMenu_Pal[] = INCBIN_U16("graphics/interface/box_tiles_pal1.gbapal");
const u16 gUnknown_8E9C3F8[] = INCBIN_U16("graphics/interface/box_tiles_pal2.gbapal");
const u16 gUnknown_8E9C418[] = INCBIN_U16("graphics/interface/box_tiles_pal3.gbapal");
-const u32 gUnknown_8E9C438[] = INCBIN_U32("graphics/interface/box_tiles.4bpp.lz");
+const u32 gPSSMenu_Gfx[] = INCBIN_U32("graphics/interface/box_tiles.4bpp.lz");
const u32 gUnknown_8E9CAEC[] = INCBIN_U32("graphics/unknown/unknown_E9CAEC.bin.lz");
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index 4ed0d3f04..2284cbc3f 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -738,7 +738,7 @@ void CB2_InitHofPC(void)
case 3:
if (!DrawHofBackground())
{
- sub_80A0A48(0, 0, 0);
+ BeginPCScreenEffect_TurnOn(0, 0, 0);
SetVBlankCallback(VBlankCB_HofIdle);
gMain.state++;
}
@@ -748,7 +748,7 @@ void CB2_InitHofPC(void)
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
- if (!sub_80A0A98())
+ if (!IsPCScreenEffectRunning_TurnOn())
gMain.state++;
break;
case 5:
@@ -946,13 +946,13 @@ static void Task_HofPC_HandlePaletteOnExit(u8 taskId)
struct HallofFameTeam* fameTeam;
CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
- sub_80A0A70(0, 0, 0);
+ BeginPCScreenEffect_TurnOff(0, 0, 0);
gTasks[taskId].func = Task_HofPC_HandleExit;
}
static void Task_HofPC_HandleExit(u8 taskId)
{
- if (!sub_80A0AAC())
+ if (!IsPCScreenEffectRunning_TurnOff())
{
HideBg(0);
HideBg(1);
diff --git a/src/ice.c b/src/ice.c
index 6843538f9..8b4269a95 100644
--- a/src/ice.c
+++ b/src/ice.c
@@ -944,7 +944,7 @@ void AnimTask_Haze1(u8 taskId)
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
sub_80752A0(&animBg);
- LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset);
+ LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap);
LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32);
if (IsContest())
@@ -1042,7 +1042,7 @@ void AnimTask_LoadMistTiles(u8 taskId)
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
sub_80752A0(&animBg);
- LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset);
+ LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap);
LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32);
if (IsContest())
diff --git a/src/item_menu.c b/src/item_menu.c
index 4131e7fd5..e048b4b78 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -1784,7 +1784,7 @@ static void GoToBerryPouch_PCBox(void)
static void ReturnToBagMenuFromSubmenu_PCBox(void)
{
- GoToBagMenu(ITEMMENULOCATION_PCBOX, OPEN_BAG_LAST, sub_808CE60);
+ GoToBagMenu(ITEMMENULOCATION_PCBOX, OPEN_BAG_LAST, Cb2_ReturnToPSS);
}
static void Task_ItemContext_Sell(u8 taskId)
diff --git a/src/item_pc.c b/src/item_pc.c
index 46419f2f3..af57d9f03 100644
--- a/src/item_pc.c
+++ b/src/item_pc.c
@@ -378,7 +378,7 @@ static bool8 ItemPc_DoGfxSetup(void)
}
else
{
- sub_80A0A48(0, 0, 0);
+ BeginPCScreenEffect_TurnOn(0, 0, 0);
ItemPc_SetInitializedFlag(1);
PlaySE(SE_PC_LOGIN);
}
@@ -642,7 +642,7 @@ static void Task_ItemPcTurnOff1(u8 taskId)
}
else
{
- sub_80A0A70(0, 0, 0);
+ BeginPCScreenEffect_TurnOff(0, 0, 0);
PlaySE(SE_PC_OFF);
}
gTasks[taskId].func = Task_ItemPcTurnOff2;
@@ -652,7 +652,7 @@ static void Task_ItemPcTurnOff2(u8 taskId)
{
s16 * data = gTasks[taskId].data;
- if (!gPaletteFade.active && !sub_80A0AAC())
+ if (!gPaletteFade.active && !IsPCScreenEffectRunning_TurnOff())
{
DestroyListMenuTask(data[0], &sListMenuState.scroll, &sListMenuState.row);
if (sStateDataPtr->savedCallback != NULL)
@@ -726,7 +726,7 @@ static void Task_ItemPcMain(u8 taskId)
u16 row;
s32 input;
- if (!gPaletteFade.active && !sub_80A0A98())
+ if (!gPaletteFade.active && !IsPCScreenEffectRunning_TurnOn())
{
if (JOY_NEW(SELECT_BUTTON))
{
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 364fc3fe6..b8b121535 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -1986,7 +1986,7 @@ static const struct NamingScreenTemplate sPlayerNamingScreenTemplate = {
static const struct NamingScreenTemplate sPcBoxNamingScreenTemplate = {
.copyExistingString = FALSE,
- .maxChars = 8/*BOX_NAME_LENGTH*/,
+ .maxChars = BOX_NAME_LENGTH,
.iconFunction = 2,
.addGenderIcon = 0,
.initialPage = KBPAGE_LETTERS_UPPER,
diff --git a/src/pc_screen_effect.c b/src/pc_screen_effect.c
index 5cc09df71..5ee8e2b7b 100644
--- a/src/pc_screen_effect.c
+++ b/src/pc_screen_effect.c
@@ -3,146 +3,160 @@
#include "gpu_regs.h"
#include "palette.h"
-static void sub_80A0AC0(TaskFunc func, u16 a2, UNUSED u16 a3, u8 priority);
-static void sub_80A0B0C(u8 taskId);
-static void sub_80A0C78(u8 taskId);
+/*
+ * Animates the screen as though it was a CRT monitor turning on or off.
+ */
-void sub_80A0A48(u16 a1, u16 a2, u8 a3)
+#define tState data[0]
+#define tXSpeed data[1]
+#define tYSpeed data[2]
+#define tWin0Left data[3]
+#define tWin0Right data[4]
+#define tWin0Top data[5]
+#define tWin0Bottom data[6]
+#define tBldCntBak data[7]
+#define tBldYBak data[8]
+
+static void BeginPCScreenEffect(TaskFunc func, u16 a2, UNUSED u16 a3, u8 priority);
+static void Task_PCScreenEffect_TurnOn(u8 taskId);
+static void Task_PCScreenEffect_TurnOff(u8 taskId);
+
+void BeginPCScreenEffect_TurnOn(u16 xspeed, u16 yspeed, u8 priority)
{
- sub_80A0AC0(sub_80A0B0C, a1, a2, a3);
+ BeginPCScreenEffect(Task_PCScreenEffect_TurnOn, xspeed, yspeed, priority);
}
-void sub_80A0A70(u16 a1, u16 a2, u8 a3)
+void BeginPCScreenEffect_TurnOff(u16 xspeed, u16 yspeed, u8 priority)
{
- sub_80A0AC0(sub_80A0C78, a1, a2, a3);
+ BeginPCScreenEffect(Task_PCScreenEffect_TurnOff, xspeed, yspeed, priority);
}
-bool8 sub_80A0A98(void)
+bool8 IsPCScreenEffectRunning_TurnOn(void)
{
- return FuncIsActiveTask(sub_80A0B0C);
+ return FuncIsActiveTask(Task_PCScreenEffect_TurnOn);
}
-bool8 sub_80A0AAC(void)
+bool8 IsPCScreenEffectRunning_TurnOff(void)
{
- return FuncIsActiveTask(sub_80A0C78);
+ return FuncIsActiveTask(Task_PCScreenEffect_TurnOff);
}
-static void sub_80A0AC0(TaskFunc func, u16 a2, UNUSED u16 a3, u8 priority)
+static void BeginPCScreenEffect(TaskFunc func, u16 speed, UNUSED u16 unused, u8 priority)
{
u8 taskId = CreateTask(func, priority);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = a2 == 0 ? 16 : a2;
- gTasks[taskId].data[2] = a2 == 0 ? 20 : a2;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tXSpeed = speed == 0 ? 16 : speed;
+ gTasks[taskId].tYSpeed = speed == 0 ? 20 : speed; // Bug? should be the unused param, not speed
gTasks[taskId].func(taskId);
}
-static void sub_80A0B0C(u8 taskId)
+static void Task_PCScreenEffect_TurnOn(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
- task->data[3] = 120;
- task->data[4] = 120;
- task->data[5] = 80;
- task->data[6] = 81;
+ task->tWin0Left = 120;
+ task->tWin0Right = 120;
+ task->tWin0Top = 80;
+ task->tWin0Bottom = 81;
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWin0Left, task->tWin0Right));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWin0Top, task->tWin0Bottom));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, 0);
break;
case 1:
- task->data[7] = GetGpuReg(REG_OFFSET_BLDCNT);
- task->data[8] = GetGpuReg(REG_OFFSET_BLDY);
+ task->tBldCntBak = GetGpuReg(REG_OFFSET_BLDCNT);
+ task->tBldYBak = GetGpuReg(REG_OFFSET_BLDY);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN);
SetGpuReg(REG_OFFSET_BLDY, 16);
break;
case 2:
- task->data[3] -= task->data[1];
- task->data[4] += task->data[1];
- if (task->data[3] <= 0 || task->data[4] >= DISPLAY_WIDTH)
+ task->tWin0Left -= task->tXSpeed;
+ task->tWin0Right += task->tXSpeed;
+ if (task->tWin0Left <= 0 || task->tWin0Right >= DISPLAY_WIDTH)
{
- task->data[3] = 0;
- task->data[4] = DISPLAY_WIDTH;
+ task->tWin0Left = 0;
+ task->tWin0Right = DISPLAY_WIDTH;
SetGpuReg(REG_OFFSET_BLDY, 0);
- SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]);
+ SetGpuReg(REG_OFFSET_BLDCNT, task->tBldCntBak);
BlendPalettes(0xFFFFFFFF, 0, RGB_BLACK);
gPlttBufferFaded[0] = 0;
}
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
- if (task->data[3])
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWin0Left, task->tWin0Right));
+ if (task->tWin0Left)
return;
break;
case 3:
- task->data[5] -= task->data[2];
- task->data[6] += task->data[2];
- if (task->data[5] <= 0 || task->data[6] >= DISPLAY_HEIGHT)
+ task->tWin0Top -= task->tYSpeed;
+ task->tWin0Bottom += task->tYSpeed;
+ if (task->tWin0Top <= 0 || task->tWin0Bottom >= DISPLAY_HEIGHT)
{
- task->data[5] = 0;
- task->data[6] = DISPLAY_HEIGHT;
+ task->tWin0Top = 0;
+ task->tWin0Bottom = DISPLAY_HEIGHT;
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
}
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
- if (task->data[5])
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWin0Top, task->tWin0Bottom));
+ if (task->tWin0Top)
return;
break;
default:
- SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]);
+ SetGpuReg(REG_OFFSET_BLDCNT, task->tBldCntBak);
DestroyTask(taskId);
return;
}
- ++task->data[0];
+ ++task->tState;
}
-static void sub_80A0C78(u8 taskId)
+static void Task_PCScreenEffect_TurnOff(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
gPlttBufferFaded[0] = 0;
break;
case 1:
- task->data[3] = 0;
- task->data[4] = DISPLAY_WIDTH;
- task->data[5] = 0;
- task->data[6] = DISPLAY_HEIGHT;
+ task->tWin0Left = 0;
+ task->tWin0Right = DISPLAY_WIDTH;
+ task->tWin0Top = 0;
+ task->tWin0Bottom = DISPLAY_HEIGHT;
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWin0Left, task->tWin0Right));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWin0Top, task->tWin0Bottom));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, 0);
break;
case 2:
- task->data[5] += task->data[2];
- task->data[6] -= task->data[2];
- if (task->data[5] >= 80 || task->data[6] <= 81)
+ task->tWin0Top += task->tYSpeed;
+ task->tWin0Bottom -= task->tYSpeed;
+ if (task->tWin0Top >= 80 || task->tWin0Bottom <= 81)
{
- task->data[5] = 80;
- task->data[6] = 81;
+ task->tWin0Top = 80;
+ task->tWin0Bottom = 81;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN);
SetGpuReg(REG_OFFSET_BLDY, 16);
}
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
- if (task->data[5] != 80)
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWin0Top, task->tWin0Bottom));
+ if (task->tWin0Top != 80)
return;
break;
case 3:
- task->data[3] += task->data[1];
- task->data[4] -= task->data[1];
- if (task->data[3] >= 120 || task->data[4] <= 120)
+ task->tWin0Left += task->tXSpeed;
+ task->tWin0Right -= task->tXSpeed;
+ if (task->tWin0Left >= 120 || task->tWin0Right <= 120)
{
- task->data[3] = 120;
- task->data[4] = 120;
+ task->tWin0Left = 120;
+ task->tWin0Right = 120;
BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
gPlttBufferFaded[0] = 0;
}
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
- if (task->data[3] != 120)
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWin0Left, task->tWin0Right));
+ if (task->tWin0Left != 120)
return;
break;
default:
@@ -152,5 +166,15 @@ static void sub_80A0C78(u8 taskId)
DestroyTask(taskId);
return;
}
- ++task->data[0];
+ ++task->tState;
}
+
+#undef tBldYBak
+#undef tBldCntBak
+#undef tWin0Bottom
+#undef tWin0Top
+#undef tWin0Right
+#undef tWin0Left
+#undef tYSpeed
+#undef tXSpeed
+#undef tState
diff --git a/src/pokemon.c b/src/pokemon.c
index f1f7834b1..b9e62502d 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -3661,7 +3661,7 @@ static u8 SendMonToPC(struct Pokemon* mon)
gSpecialVar_MonBoxId = boxNo;
gSpecialVar_MonBoxPos = boxPos;
if (GetPCBoxToSendMon() != boxNo)
- FlagClear(FLAG_SYS_CHANGED_BOX_TO_STORE_MON);
+ FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
VarSet(VAR_PC_BOX_TO_SEND_MON, boxNo);
return MON_GIVEN_TO_PC;
}
@@ -3806,7 +3806,7 @@ static bool8 IsPokemonStorageFull(void)
for (i = 0; i < 14; i++)
for (j = 0; j < 30; j++)
- if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SPECIES) == SPECIES_NONE)
+ if (GetBoxMonDataAt(i, j, MON_DATA_SPECIES) == SPECIES_NONE)
return FALSE;
return TRUE;
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
new file mode 100644
index 000000000..b69fe7de4
--- /dev/null
+++ b/src/pokemon_storage_system.c
@@ -0,0 +1,172 @@
+#include "global.h"
+#include "gflib.h"
+#include "pokemon_storage_system_internal.h"
+#include "constants/species.h"
+
+void BackupPokemonStorage(struct PokemonStorage * dest)
+{
+ *dest = *gPokemonStoragePtr;
+}
+
+void RestorePokemonStorage(struct PokemonStorage * src)
+{
+ *gPokemonStoragePtr = *src;
+}
+
+// Functions here are general utility functions.
+u8 StorageGetCurrentBox(void)
+{
+ return gPokemonStoragePtr->currentBox;
+}
+
+void SetCurrentBox(u8 boxId)
+{
+ if (boxId < TOTAL_BOXES_COUNT)
+ gPokemonStoragePtr->currentBox = boxId;
+}
+
+u32 GetBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ return GetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], request);
+ else
+ return 0;
+}
+
+void SetBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, const void *value)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ SetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], request, value);
+}
+
+u32 GetCurrentBoxMonData(u8 boxPosition, s32 request)
+{
+ return GetBoxMonDataAt(gPokemonStoragePtr->currentBox, boxPosition, request);
+}
+
+void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value)
+{
+ SetBoxMonDataAt(gPokemonStoragePtr->currentBox, boxPosition, request, value);
+}
+
+void GetBoxMonNickAt(u8 boxId, u8 boxPosition, u8 *dst)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ GetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], MON_DATA_NICKNAME, dst);
+ else
+ *dst = EOS;
+}
+
+void SetBoxMonNickAt(u8 boxId, u8 boxPosition, const u8 *nick)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ SetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], MON_DATA_NICKNAME, nick);
+}
+
+u32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ return GetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], request, dst);
+ else
+ return 0;
+}
+
+void SetBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon * src)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ gPokemonStoragePtr->boxes[boxId][boxPosition] = *src;
+}
+
+void CopyBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon * dst)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ *dst = gPokemonStoragePtr->boxes[boxId][boxPosition];
+}
+
+void CreateBoxMonAt(u8 boxId, u8 boxPosition, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 personality, u8 otIDType, u32 otID)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ {
+ CreateBoxMon(&gPokemonStoragePtr->boxes[boxId][boxPosition],
+ species,
+ level,
+ fixedIV,
+ hasFixedPersonality, personality,
+ otIDType, otID);
+ }
+}
+
+void ZeroBoxMonAt(u8 boxId, u8 boxPosition)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ ZeroBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition]);
+}
+
+void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon * dst)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ BoxMonToMon(&gPokemonStoragePtr->boxes[boxId][boxPosition], dst);
+}
+
+struct BoxPokemon * GetBoxedMonPtr(u8 boxId, u8 boxPosition)
+{
+ if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT)
+ return &gPokemonStoragePtr->boxes[boxId][boxPosition];
+ else
+ return NULL;
+}
+
+u8 *GetBoxNamePtr(u8 boxId)
+{
+ if (boxId < TOTAL_BOXES_COUNT)
+ return gPokemonStoragePtr->boxNames[boxId];
+ else
+ return NULL;
+}
+
+u8 GetBoxWallpaper(u8 boxId)
+{
+ if (boxId < TOTAL_BOXES_COUNT)
+ return gPokemonStoragePtr->boxWallpapers[boxId];
+ else
+ return 0;
+}
+
+void SetBoxWallpaper(u8 boxId, u8 wallpaperId)
+{
+ if (boxId < TOTAL_BOXES_COUNT && wallpaperId < WALLPAPER_COUNT)
+ gPokemonStoragePtr->boxWallpapers[boxId] = wallpaperId;
+}
+
+s16 SeekToNextMonInBox(struct BoxPokemon * boxMons, s8 currIndex, u8 maxIndex, u8 flags)
+{
+ // flags:
+ // bit 0: Allow eggs
+ // bit 1: Search backwards
+ s16 i;
+ s16 adder;
+ if (flags == 0 || flags == 1)
+ adder = 1;
+ else
+ adder = -1;
+
+ if (flags == 1 || flags == 3)
+ {
+ for (i = currIndex + adder; i >= 0 && i <= maxIndex; i += adder)
+ {
+ if (GetBoxMonData(&boxMons[i], MON_DATA_SPECIES) != SPECIES_NONE)
+ return i;
+ }
+ }
+ else
+ {
+ for (i = currIndex + adder; i >= 0 && i <= maxIndex; i += adder)
+ {
+ if (GetBoxMonData(&boxMons[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetBoxMonData(&boxMons[i], MON_DATA_IS_EGG))
+ return i;
+ }
+ }
+
+ return -1;
+}
diff --git a/src/pokemon_storage_system_2.c b/src/pokemon_storage_system_2.c
new file mode 100644
index 000000000..b806e7afa
--- /dev/null
+++ b/src/pokemon_storage_system_2.c
@@ -0,0 +1,653 @@
+#include "global.h"
+#include "gflib.h"
+#include "event_data.h"
+#include "field_fadetransition.h"
+#include "field_weather.h"
+#include "help_system.h"
+#include "menu.h"
+#include "new_menu_helpers.h"
+#include "overworld.h"
+#include "pokemon_storage_system_internal.h"
+#include "script.h"
+#include "strings.h"
+#include "task.h"
+#include "constants/species.h"
+#include "constants/songs.h"
+#include "constants/field_weather.h"
+#include "constants/help_system.h"
+
+struct PSS_MenuStringPtrs
+{
+ const u8 *text;
+ const u8 *desc;
+};
+
+static EWRAM_DATA u8 sPreviousBoxOption = 0;
+static EWRAM_DATA struct UnkPSSStruct_2002370 *sBoxSelectionPopupSpriteManager = NULL;
+
+static void PSS_CreatePCMenu(u8 whichMenu, s16 *windowIdPtr);
+static void sub_808C9C4(u8 curBox);
+static void sub_808CBA4(void);
+static void UpdateBoxNameAndCountSprite_WraparoundRight(void);
+static void UpdateBoxNameAndCountSprite_WraparoundLeft(void);
+static void PrintBoxNameAndCountToSprite(void);
+static void PrintToSpriteWithTagUnk0240(const u8 *a0, u16 x, u16 y);
+static void sub_808CD64(struct Sprite * sprite);
+
+// Forward declarations
+
+static const u16 sBoxSelectionPopupPalette[];
+static const u16 sBoxSelectionPopupCenterTiles[];
+static const u16 sBoxSelectionPopupSidesTiles[];
+
+static const struct PSS_MenuStringPtrs sUnknown_83CDA20[] = {
+ {gText_WithdrawPokemon, gText_WithdrawMonDescription},
+ {gText_DepositPokemon, gText_DepositMonDescription },
+ {gText_MovePokemon, gText_MoveMonDescription },
+ {gText_MoveItems, gText_MoveItemsDescription },
+ {gText_SeeYa, gText_SeeYaDescription }
+};
+
+void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, u8 *buffer, s32 bytesToBuffer)
+{
+ s32 i, tileBytesToBuffer, remainingBytes;
+ u16 windowId;
+ u8 txtColor[3];
+ u8 *tileData1, *tileData2;
+ struct WindowTemplate winTemplate = {0};
+
+ winTemplate.width = 24;
+ winTemplate.height = 2;
+ windowId = AddWindow(&winTemplate);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(zero2));
+ tileData1 = (u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA);
+ tileData2 = (winTemplate.width * 32) + tileData1;
+
+ if (!zero1)
+ txtColor[0] = TEXT_COLOR_TRANSPARENT;
+ else
+ txtColor[0] = zero2;
+ txtColor[1] = TEXT_DYNAMIC_COLOR_6;
+ txtColor[2] = TEXT_DYNAMIC_COLOR_5;
+ AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, txtColor, -1, string);
+
+ tileBytesToBuffer = bytesToBuffer;
+ if (tileBytesToBuffer > 6)
+ tileBytesToBuffer = 6;
+ remainingBytes = bytesToBuffer - 6;
+ if (tileBytesToBuffer > 0)
+ {
+ for (i = tileBytesToBuffer; i != 0; i--)
+ {
+ CpuCopy16(tileData1, dst, 0x80);
+ CpuCopy16(tileData2, dst + 0x80, 0x80);
+ tileData1 += 0x80;
+ tileData2 += 0x80;
+ dst += 0x100;
+ }
+ }
+
+ // Never used. bytesToBuffer is always passed <= 6, so remainingBytes is always <= 0 here
+ if (remainingBytes > 0)
+ CpuFill16((zero2 << 4) | zero2, dst, (u32)(remainingBytes) * 0x100);
+
+ RemoveWindow(windowId);
+}
+
+static void PrintStringToBufferCopyNow(const u8 *string, void *dst, u16 rise, u8 bgClr, u8 fgClr, u8 shClr, u8 *buffer)
+{
+ u32 var;
+ u8 windowId;
+ u8 txtColor[3];
+ u8 *tileData1, *tileData2;
+ struct WindowTemplate winTemplate = {0};
+
+ winTemplate.width = StringLength_Multibyte(string);
+ winTemplate.height = 2;
+ var = winTemplate.width * 32;
+ windowId = AddWindow(&winTemplate);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(bgClr));
+ tileData1 = (u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA);
+ tileData2 = (winTemplate.width * 32) + tileData1;
+ txtColor[0] = bgClr;
+ txtColor[1] = fgClr;
+ txtColor[2] = shClr;
+ AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, txtColor, -1, string);
+ CpuCopy16(tileData1, dst, var);
+ CpuCopy16(tileData2, dst + rise, var);
+ RemoveWindow(windowId);
+}
+
+static u8 CountMonsInBox(u8 boxId)
+{
+ u16 i, count;
+
+ for (i = 0, count = 0; i < IN_BOX_COUNT; i++)
+ {
+ if (GetBoxMonDataAt(boxId, i, MON_DATA_SPECIES) != SPECIES_NONE)
+ count++;
+ }
+
+ return count;
+}
+
+s16 GetFirstFreeBoxSpot(u8 boxId)
+{
+ u16 i;
+
+ for (i = 0; i < IN_BOX_COUNT; i++)
+ {
+ if (GetBoxMonDataAt(boxId, i, MON_DATA_SPECIES) == SPECIES_NONE)
+ return i;
+ }
+
+ return -1; // all spots are taken
+}
+
+u8 CountPartyNonEggMons(void)
+{
+ u16 i, count;
+
+ for (i = 0, count = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ {
+ count++;
+ }
+ }
+
+ return count;
+}
+
+u8 CountPartyAliveNonEggMonsExcept(u8 slotToIgnore)
+{
+ u16 i, count;
+
+ for (i = 0, count = 0; i < PARTY_SIZE; i++)
+ {
+ if (i != slotToIgnore
+ && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)
+ && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0)
+ {
+ count++;
+ }
+ }
+
+ return count;
+}
+
+u16 CountPartyAliveNonEggMons_IgnoreVar0x8004Slot(void)
+{
+ return CountPartyAliveNonEggMonsExcept(gSpecialVar_0x8004);
+}
+
+u8 CountPartyMons(void)
+{
+ u16 i, count;
+
+ for (i = 0, count = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ count++;
+ }
+ }
+
+ return count;
+}
+
+static u8 *StringCopyAndFillWithSpaces(u8 *dst, const u8 *src, u16 n)
+{
+ u8 *str;
+
+ for (str = StringCopy(dst, src); str < dst + n; str++)
+ *str = CHAR_SPACE;
+
+ *str = EOS;
+ return str;
+}
+
+static void sub_808C25C(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width)
+{
+ u16 i;
+
+ dest_width *= 2;
+ dest += dest_top * 0x20 + dest_left;
+ src += src_top * src_width + src_left;
+ for (i = 0; i < dest_height; i++)
+ {
+ CpuCopy16(src, dest, dest_width);
+ dest += 0x20;
+ src += src_width;
+ }
+}
+
+static void sub_808C2D8(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height)
+{
+ u16 i;
+
+ dest += dest_top * 0x20 + dest_left;
+ width *= 2;
+ for (i = 0; i < height; dest += 0x20, i++)
+ Dma3FillLarge16_(0, dest, width);
+}
+
+static void Task_PokemonStorageSystemPC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ SetHelpContext(HELPCONTEXT_BILLS_PC);
+ PSS_CreatePCMenu(task->data[1], &task->data[15]);
+ LoadStdWindowFrameGfx();
+ DrawDialogueFrame(0, 0);
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, TEXT_SPEED_FF, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ CopyWindowToVram(0, 3);
+ CopyWindowToVram(task->data[15], 3);
+ task->data[0]++;
+ break;
+ case 1:
+ if (IsWeatherNotFadingIn())
+ {
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ task->data[2] = Menu_ProcessInput();
+ switch(task->data[2])
+ {
+ case MENU_NOTHING_CHOSEN:
+ task->data[3] = task->data[1];
+ if (JOY_NEW(DPAD_UP) && --task->data[3] < 0)
+ task->data[3] = 4;
+
+ if (JOY_NEW(DPAD_DOWN) && ++task->data[3] > 4)
+ task->data[3] = 0;
+ if (task->data[1] != task->data[3])
+ {
+ task->data[1] = task->data[3];
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, 0, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ }
+ break;
+ case MENU_B_PRESSED:
+ case 4:
+ ClearStdWindowAndFrame(0, TRUE);
+ ClearStdWindowAndFrame(task->data[15], TRUE);
+ ScriptContext2_Disable();
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ break;
+ default:
+ if (task->data[2] == 0 && CountPartyMons() == PARTY_SIZE)
+ {
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->data[0] = 3;
+ }
+ else if (task->data[2] == 1 && CountPartyMons() == 1)
+ {
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, gText_JustOnePkmn, 0, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->data[0] = 3;
+ }
+ else
+ {
+ FadeScreen(FADE_TO_BLACK, 0);
+ task->data[0] = 4;
+ }
+ break;
+ }
+ break;
+ case 3:
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
+ {
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, 0, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->data[0] = 2;
+ }
+ else if (JOY_NEW(DPAD_UP))
+ {
+ if (--task->data[1] < 0)
+ task->data[1] = 4;
+ Menu_MoveCursor(-1);
+ task->data[1] = Menu_GetCursorPos();
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, 0, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->data[0] = 2;
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ if (++task->data[1] > 3)
+ task->data[1] = 0;
+ Menu_MoveCursor(1);
+ task->data[1] = Menu_GetCursorPos();
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, sUnknown_83CDA20[task->data[1]].desc, 0, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->data[0] = 2;
+ }
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ CleanupOverworldWindowsAndTilemaps();
+ Cb2_EnterPSS(task->data[2]);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void ShowPokemonStorageSystemPC(void)
+{
+ u8 taskId = CreateTask(Task_PokemonStorageSystemPC, 80);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ ScriptContext2_Enable();
+}
+
+static void FieldCb_ReturnToPcMenu(void)
+{
+ u8 taskId;
+ MainCallback vblankCb = gMain.vblankCallback;
+
+ SetVBlankCallback(NULL);
+ taskId = CreateTask(Task_PokemonStorageSystemPC, 80);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = sPreviousBoxOption;
+ Task_PokemonStorageSystemPC(taskId);
+ SetVBlankCallback(vblankCb);
+ FadeInFromBlack();
+}
+
+static const struct WindowTemplate sUnknown_83CDA48 = {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 17,
+ .height = 10,
+ .paletteNum = 15,
+ .baseBlock = 0x001
+};
+
+static void PSS_CreatePCMenu(u8 whichMenu, s16 *windowIdPtr)
+{
+ s16 windowId;
+ windowId = AddWindow(&sUnknown_83CDA48);
+
+ DrawStdWindowFrame(windowId, FALSE);
+ PrintTextArray(windowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, NELEMS(sUnknown_83CDA20), (void *)sUnknown_83CDA20);
+ Menu_InitCursor(windowId, 2, 0, 2, 16, NELEMS(sUnknown_83CDA20), whichMenu);
+ *windowIdPtr = windowId;
+}
+
+void Cb2_ExitPSS(void)
+{
+ sPreviousBoxOption = GetCurrentBoxOption();
+ gFieldCallback = FieldCb_ReturnToPcMenu;
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+void ResetPokemonStorageSystem(void)
+{
+ u16 boxId, boxPosition;
+
+ SetCurrentBox(0);
+ for (boxId = 0; boxId < TOTAL_BOXES_COUNT; boxId++)
+ {
+ for (boxPosition = 0; boxPosition < IN_BOX_COUNT; boxPosition++)
+ ZeroBoxMonAt(boxId, boxPosition);
+ }
+ for (boxId = 0; boxId < TOTAL_BOXES_COUNT; boxId++)
+ {
+ u8 *dest = StringCopy(GetBoxNamePtr(boxId), gText_Box);
+ ConvertIntToDecimalStringN(dest, boxId + 1, STR_CONV_MODE_LEFT_ALIGN, 2);
+ }
+ for (boxId = 0; boxId < TOTAL_BOXES_COUNT; boxId++)
+ {
+ SetBoxWallpaper(boxId, boxId % 4);
+ }
+}
+
+void LoadBoxSelectionPopupSpriteGfx(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal)
+{
+ struct SpritePalette palette = {
+ sBoxSelectionPopupPalette, palTag
+ };
+ struct SpriteSheet sheets[] = {
+ {sBoxSelectionPopupCenterTiles, 0x800, tileTag},
+ {sBoxSelectionPopupSidesTiles, 0x180, tileTag + 1},
+ {}
+ };
+
+ if (loadPal)
+ LoadSpritePalette(&palette);
+
+ LoadSpriteSheets(sheets);
+ sBoxSelectionPopupSpriteManager = a0;
+ a0->tilesTag = tileTag;
+ a0->paletteTag = palTag;
+ a0->subpriority = a3;
+ a0->loadPal = loadPal;
+}
+
+void FreeBoxSelectionPopupSpriteGfx(void)
+{
+ if (sBoxSelectionPopupSpriteManager->loadPal)
+ FreeSpritePaletteByTag(sBoxSelectionPopupSpriteManager->paletteTag);
+ FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tilesTag);
+ FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tilesTag + 1);
+}
+
+void sub_808C940(u8 curBox)
+{
+ sub_808C9C4(curBox);
+}
+
+void sub_808C950(void)
+{
+ sub_808CBA4();
+}
+
+u8 HandleBoxChooseSelectionInput(void)
+{
+ if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return 201;
+ }
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ return sBoxSelectionPopupSpriteManager->curBox;
+ }
+ if (JOY_NEW(DPAD_LEFT))
+ {
+ PlaySE(SE_SELECT);
+ UpdateBoxNameAndCountSprite_WraparoundLeft();
+ }
+ else if (JOY_NEW(DPAD_RIGHT))
+ {
+ PlaySE(SE_SELECT);
+ UpdateBoxNameAndCountSprite_WraparoundRight();
+ }
+ return 200;
+}
+
+static const union AnimCmd gUnknown_83CDA50[] = {
+ ANIMCMD_FRAME( 0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_83CDA58[] = {
+ ANIMCMD_FRAME( 4, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_83CDA60[] = {
+ ANIMCMD_FRAME( 6, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_83CDA68[] = {
+ ANIMCMD_FRAME(10, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gUnknown_83CDA70[] = {
+ gUnknown_83CDA50,
+ gUnknown_83CDA58,
+ gUnknown_83CDA60,
+ gUnknown_83CDA68
+};
+
+static const union AffineAnimCmd gUnknown_83CDA80[] = {
+ AFFINEANIMCMD_FRAME(224, 224, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const gUnknown_83CDA90[] = {
+ gUnknown_83CDA80
+};
+
+static void sub_808C9C4(u8 curBox)
+{
+ u16 i;
+ u8 spriteId;
+ struct SpriteTemplate template;
+ struct OamData oamData = {};
+ oamData.size = SPRITE_SIZE(64x64);
+ oamData.paletteNum = 1;
+ template = (struct SpriteTemplate){
+ 0, 0, &oamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ };
+ {
+ const u8 gUnknown_83CDA94[] = _("/30");
+
+ sBoxSelectionPopupSpriteManager->curBox = curBox;
+ template.tileTag = sBoxSelectionPopupSpriteManager->tilesTag;
+ template.paletteTag = sBoxSelectionPopupSpriteManager->paletteTag;
+
+ spriteId = CreateSprite(&template, 160, 96, 0);
+ sBoxSelectionPopupSpriteManager->unk_0000 = gSprites + spriteId;
+
+ // Manual subsprites
+ oamData.shape = SPRITE_SHAPE(8x32);
+ oamData.size = SPRITE_SIZE(8x32);
+ template.tileTag = sBoxSelectionPopupSpriteManager->tilesTag + 1;
+ template.anims = gUnknown_83CDA70;
+ for (i = 0; i < 4; i++)
+ {
+ u16 r5;
+ spriteId = CreateSprite(&template, 124, 80, sBoxSelectionPopupSpriteManager->subpriority);
+ sBoxSelectionPopupSpriteManager->unk_0004[i] = gSprites + spriteId;
+ r5 = 0;
+ if (i & 2)
+ {
+ sBoxSelectionPopupSpriteManager->unk_0004[i]->pos1.x = 196;
+ r5 = 2;
+ }
+ if (i & 1)
+ {
+ sBoxSelectionPopupSpriteManager->unk_0004[i]->pos1.y = 112;
+ sBoxSelectionPopupSpriteManager->unk_0004[i]->oam.size = SPRITE_SIZE(8x16);
+ r5++;
+ }
+ StartSpriteAnim(sBoxSelectionPopupSpriteManager->unk_0004[i], r5);
+ }
+ for (i = 0; i < 2; i++)
+ {
+ sBoxSelectionPopupSpriteManager->unk_0020[i] = sub_809223C(72 * i + 0x7c, 0x58, i, 0, sBoxSelectionPopupSpriteManager->subpriority);
+ if (sBoxSelectionPopupSpriteManager->unk_0020[i])
+ {
+ sBoxSelectionPopupSpriteManager->unk_0020[i]->data[0] = (i == 0 ? -1 : 1);
+ sBoxSelectionPopupSpriteManager->unk_0020[i]->callback = sub_808CD64;
+ }
+ }
+ PrintBoxNameAndCountToSprite();
+ PrintToSpriteWithTagUnk0240(gUnknown_83CDA94, 5, 3);
+ }
+}
+
+static void sub_808CBA4(void)
+{
+ u16 i;
+ if (sBoxSelectionPopupSpriteManager->unk_0000)
+ {
+ DestroySprite(sBoxSelectionPopupSpriteManager->unk_0000);
+ sBoxSelectionPopupSpriteManager->unk_0000 = NULL;
+ }
+ for (i = 0; i < 4; i++)
+ {
+ if (sBoxSelectionPopupSpriteManager->unk_0004[i])
+ {
+ DestroySprite(sBoxSelectionPopupSpriteManager->unk_0004[i]);
+ sBoxSelectionPopupSpriteManager->unk_0004[i] = NULL;
+ }
+ }
+ for (i = 0; i < 2; i++)
+ {
+ if (sBoxSelectionPopupSpriteManager->unk_0020[i])
+ DestroySprite(sBoxSelectionPopupSpriteManager->unk_0020[i]);
+ }
+}
+
+static void UpdateBoxNameAndCountSprite_WraparoundRight(void)
+{
+ if (++sBoxSelectionPopupSpriteManager->curBox >= TOTAL_BOXES_COUNT)
+ sBoxSelectionPopupSpriteManager->curBox = 0;
+ PrintBoxNameAndCountToSprite();
+}
+
+static void UpdateBoxNameAndCountSprite_WraparoundLeft(void)
+{
+ sBoxSelectionPopupSpriteManager->curBox = (sBoxSelectionPopupSpriteManager->curBox == 0 ? TOTAL_BOXES_COUNT - 1 : sBoxSelectionPopupSpriteManager->curBox - 1);
+ PrintBoxNameAndCountToSprite();
+}
+
+static void PrintBoxNameAndCountToSprite(void)
+{
+ u8 nPokemonInBox = CountMonsInBox(sBoxSelectionPopupSpriteManager->curBox);
+ u8 *boxName = StringCopy(sBoxSelectionPopupSpriteManager->strbuf, GetBoxNamePtr(sBoxSelectionPopupSpriteManager->curBox));
+
+ while (boxName < sBoxSelectionPopupSpriteManager->strbuf + BOX_NAME_LENGTH)
+ *boxName++ = CHAR_SPACE;
+ *boxName = EOS;
+
+ PrintToSpriteWithTagUnk0240(sBoxSelectionPopupSpriteManager->strbuf, 0, 1);
+
+ ConvertIntToDecimalStringN(sBoxSelectionPopupSpriteManager->strbuf, nPokemonInBox, STR_CONV_MODE_RIGHT_ALIGN, 2);
+
+ PrintToSpriteWithTagUnk0240(sBoxSelectionPopupSpriteManager->strbuf, 3, 3);
+}
+
+static void PrintToSpriteWithTagUnk0240(const u8 *str, u16 x, u16 y)
+{
+ u16 tileStart = GetSpriteTileStartByTag(sBoxSelectionPopupSpriteManager->tilesTag);
+ PrintStringToBufferCopyNow(str, (void *)(OBJ_VRAM0 + tileStart * 32 + 256 * y + 32 * x), 0x100, TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5, sBoxSelectionPopupSpriteManager->buffer);
+}
+
+static void sub_808CD64(struct Sprite *sprite)
+{
+ if (++sprite->data[1] > 3)
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.x += sprite->data[0];
+ if (++sprite->data[2] > 5)
+ {
+ sprite->data[2] = 0;
+ sprite->pos2.x = 0;
+ }
+ }
+}
+
+// Forward-declared rodata
+
+static const u16 sBoxSelectionPopupPalette[] = INCBIN_U16("graphics/interface/pss_unk_83CDA98.gbapal");
+static const u16 sBoxSelectionPopupCenterTiles[] = INCBIN_U16("graphics/interface/pss_unk_83CDAB8.4bpp");
+static const u16 sBoxSelectionPopupSidesTiles[] = INCBIN_U16("graphics/interface/pss_unk_83CE2B8.4bpp");
diff --git a/src/pokemon_storage_system_3.c b/src/pokemon_storage_system_3.c
new file mode 100644
index 000000000..7ae451b69
--- /dev/null
+++ b/src/pokemon_storage_system_3.c
@@ -0,0 +1,2779 @@
+#include "global.h"
+#include "gflib.h"
+#include "box_party_pokemon_dropdown.h"
+#include "data.h"
+#include "decompress.h"
+#include "dynamic_placeholder_text_util.h"
+#include "event_data.h"
+#include "graphics.h"
+#include "help_system.h"
+#include "item.h"
+#include "item_menu.h"
+#include "mail_data.h"
+#include "menu.h"
+#include "naming_screen.h"
+#include "new_menu_helpers.h"
+#include "pc_screen_effect.h"
+#include "pokemon_icon.h"
+#include "pokemon_storage_system_internal.h"
+#include "pokemon_summary_screen.h"
+#include "quest_log.h"
+#include "strings.h"
+#include "task.h"
+#include "text_window.h"
+#include "trig.h"
+#include "constants/items.h"
+#include "constants/help_system.h"
+#include "constants/songs.h"
+#include "constants/flags.h"
+#include "constants/vars.h"
+
+EWRAM_DATA struct PokemonStorageSystemData *gPSSData = NULL;
+static EWRAM_DATA bool8 sInPartyMenu = 0;
+static EWRAM_DATA u8 sCurrentBoxOption = 0;
+static EWRAM_DATA u8 gUnknown_20397B6 = 0;
+static EWRAM_DATA u8 sWhichToReshow = 0;
+static EWRAM_DATA u8 sLastUsedBox = 0;
+static EWRAM_DATA u16 gUnknown_20397BA = ITEM_NONE;
+
+static void Cb_InitPSS(u8 taskId);
+static void Cb_ShowPSS(u8 taskId);
+static void Cb_ReshowPSS(u8 taskId);
+static void Cb_MainPSS(u8 taskId);
+static void Cb_ShowPartyPokemon(u8 taskId);
+static void Cb_HidePartyPokemon(u8 taskId);
+static void Cb_OnSelectedMon(u8 taskId);
+static void Cb_MoveMon(u8 taskId);
+static void Cb_PlaceMon(u8 taskId);
+static void Cb_ShiftMon(u8 taskId);
+static void Cb_WithdrawMon(u8 taskId);
+static void Cb_DepositMenu(u8 taskId);
+static void Cb_ReleaseMon(u8 taskId);
+static void Cb_ShowMarkMenu(u8 taskId);
+static void Cb_TakeItemForMoving(u8 taskId);
+static void Cb_GiveMovingItemToMon(u8 taskId);
+static void Cb_ItemToBag(u8 taskId);
+static void Cb_SwitchSelectedItem(u8 taskId);
+static void Cb_ShowItemInfo(u8 taskId);
+static void Cb_HandleMovingMonFromParty(u8 taskId);
+static void Cb_PrintCantStoreMail(u8 taskId);
+static void Cb_HandleBoxOptions(u8 taskId);
+static void Cb_HandleWallpapers(u8 taskId);
+static void Cb_JumpBox(u8 taskId);
+static void Cb_NameBox(u8 taskId);
+static void Cb_ShowMonSummary(u8 taskId);
+static void Cb_GiveItemFromBag(u8 taskId);
+static void Cb_OnCloseBoxPressed(u8 taskId);
+static void Cb_OnBPressed(u8 taskId);
+static void Cb_ChangeScreen(u8 taskId);
+static void GiveChosenBagItem(void);
+static void FreePSSData(void);
+static void SetScrollingBackground(void);
+static void ScrollBackground(void);
+static void LoadPSSMenuGfx(void);
+static bool8 InitPSSWindows(void);
+static void LoadWaveformSpritePalette(void);
+static void sub_808F078(void);
+static void sub_808F0F4(void);
+static void sub_808F164(void);
+static void RefreshCursorMonData(void);
+static void BoxSetMosaic(void);
+static void SpriteCB_CursorMon_Mosaic(struct Sprite * sprite);
+static bool8 BoxGetMosaic(void);
+static void LoadCursorMonSprite(void);
+static void LoadCursorMonGfx(u16 species, u32 pid);
+static void PrintCursorMonInfo(void);
+static void sub_808F5E8(void);
+static void sub_808F68C(void);
+static void SetUpHidePartyMenu(void);
+static bool8 HidePartyMenu(void);
+static void sub_808F90C(bool8 species);
+static void sub_808F948(void);
+static void sub_808F974(void);
+static void sub_808F99C(void);
+static void sub_808F9FC(void);
+static void sub_808FA30(u8 pos, bool8 isPartyMon);
+static void sub_808FAA8(void);
+static void SetUpDoShowPartyMenu(void);
+static bool8 DoShowPartyMenu(void);
+static void sub_808FB68(void);
+static void PrintStorageActionText(u8 textId);
+static void ShowYesNoWindow(s8 species);
+static void ClearBottomWindow(void);
+static void AddWallpaperSetsMenu(void);
+static void AddWallpapersMenu(u8 wallpaperSet);
+static void sub_808FDFC(void);
+static void sub_808FE54(u8 species);
+static void sub_808FF70(void);
+
+static const u32 sPokemonStorageScrollingBGTileset[] = INCBIN_U32("graphics/interface/pss_unk_83CE438.4bpp.lz");
+static const u32 sPokemonStorageScrollingBGTilemap[] = INCBIN_U32("graphics/interface/pss_unk_83CE4D0.bin.lz");
+static const u16 sPokemonStorageScrollingBGPalette[] = INCBIN_U16("graphics/interface/pss_unk_83CE5DC.gbapal");
+static const u32 gUnknown_83CE5FC[] = INCBIN_U32("graphics/interface/pss_unk_83CE5FC.bin.lz");
+
+static const u16 gUnknown_83CE6F8[] = {
+ 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108,
+ 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118,
+ 0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, 0x2108,
+ 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117, 0x2118,
+};
+
+static const u16 gUnknown_83CE738[] = INCBIN_U16("graphics/interface/pss_unk_83CE738.gbapal");
+static const u16 gUnknown_83CE758[] = INCBIN_U16("graphics/interface/pss_unk_83CE758.gbapal");
+
+static const u16 gUnknown_83CE778[] = {
+ 0x014c, 0x014d, 0x014e, 0x014f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174,
+ 0x015c, 0x015d, 0x015e, 0x015f, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184,
+ 0x0175, 0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d,
+ 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018a, 0x018b, 0x018c, 0x018d,
+};
+
+static const u16 gUnknown_83CE7C0[] = {
+ 0x1140, 0x1141, 0x1141, 0x1142,
+ 0x1150, 0x1151, 0x1151, 0x1152,
+ 0x1160, 0x1161, 0x1161, 0x1162,
+};
+
+static const u16 gUnknown_83CE7D8[] = {
+ 0x1143, 0x1144, 0x1144, 0x1145,
+ 0x1153, 0x1154, 0x1154, 0x1155,
+ 0x1163, 0x1164, 0x1164, 0x1165,
+};
+
+static const u16 gUnknown_83CE7F0[] = INCBIN_U16("graphics/interface/pss_unk_83CE810.gbapal");
+static const u16 gUnknown_83CE810[] = INCBIN_U16("graphics/interface/pss_unk_83CE810.4bpp");
+static const u16 gUnknown_83CE9D0[] = INCBIN_U16("graphics/interface/pss_unk_83CE9D0.gbapal");
+static const u16 gUnknown_83CEA10[] = INCBIN_U16("graphics/interface/pss_unk_83CEA10.gbapal");
+
+static const struct WindowTemplate gUnknown_83CEA30[] = {
+ {
+ .bg = 1,
+ .tilemapLeft = 0,
+ .tilemapTop = 11,
+ .width = 9,
+ .height = 7,
+ .paletteNum = 3,
+ .baseBlock = 0x0c0
+ }, {
+ .bg = 0,
+ .tilemapLeft = 11,
+ .tilemapTop = 17,
+ .width = 18,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 0x014
+ }, {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 12,
+ .width = 25,
+ .height = 8,
+ .paletteNum = 15,
+ .baseBlock = 0x014
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const struct BgTemplate gUnknown_83CEA50[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 29,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0x000
+ }, {
+ .bg = 1,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0x100
+ }, {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 27,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0x000
+ }, {
+ .bg = 3,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0x000
+ }
+};
+
+static const struct SpritePalette sWaveformSpritePalette = {
+ gUnknown_83CE7F0, TAG_PAL_WAVEFORM
+};
+
+static const struct SpriteSheet sWaveformSpriteSheet = {
+ gUnknown_83CE810, 0x01c0, TAG_TILE_WAVEFORM
+};
+
+static const struct OamData gUnknown_83CEB88;
+
+static const struct SpriteTemplate sSpriteTemplate_CursorMon = {
+ .tileTag = TAG_TILE_2,
+ .paletteTag = TAG_PAL_DAC6,
+ .oam = &gUnknown_83CEB88,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct StorageAction sPCStorageActionTexts[] = {
+ [PC_TEXT_EXIT_BOX] = {gText_ExitFromBox, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_WHAT_YOU_DO] = {gText_WhatDoYouWantToDo, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_PICK_A_THEME] = {gText_PleasePickATheme, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_PICK_A_WALLPAPER] = {gText_PickTheWallpaper, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_IS_SELECTED] = {gText_PkmnIsSelected, PC_TEXT_FMT_MON_NAME_1},
+ [PC_TEXT_JUMP_TO_WHICH_BOX] = {gText_JumpToWhichBox, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_DEPOSIT_IN_WHICH_BOX] = {gText_DepositInWhichBox, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_WAS_DEPOSITED] = {gText_PkmnWasDeposited, PC_TEXT_FMT_MON_NAME_1},
+ [PC_TEXT_BOX_IS_FULL] = {gText_BoxIsFull2, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_RELEASE_POKE] = {gText_ReleaseThisPokemon, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_WAS_RELEASED] = {gText_PkmnWasReleased, PC_TEXT_FMT_MON_NAME_4},
+ [PC_TEXT_BYE_BYE] = {gText_ByeByePkmn, PC_TEXT_FMT_MON_NAME_6},
+ [PC_TEXT_MARK_POKE] = {gText_MarkYourPkmn, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_LAST_POKE] = {gText_ThatsYourLastPkmn, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_PARTY_FULL] = {gText_YourPartysFull, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_HOLDING_POKE] = {gText_YoureHoldingAPkmn, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_WHICH_ONE_WILL_TAKE] = {gText_WhichOneWillYouTake, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_CANT_RELEASE_EGG] = {gText_YouCantReleaseAnEgg, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_CONTINUE_BOX] = {gText_ContinueBoxOperations, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_CAME_BACK] = {gText_PkmnCameBack, PC_TEXT_FMT_MON_NAME_1},
+ [PC_TEXT_WORRIED] = {gText_WasItWorriedAboutYou, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_SURPRISE] = {gText_FourEllipsesExclamation, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_PLEASE_REMOVE_MAIL] = {gText_PleaseRemoveTheMail, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_IS_SELECTED2] = {gText_PkmnIsSelected, PC_TEXT_FMT_ITEM_NAME},
+ [PC_TEXT_GIVE_TO_MON] = {gText_GiveToAPkmn, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_PLACED_IN_BAG] = {gText_PlacedItemInBag, PC_TEXT_FMT_ITEM_NAME},
+ [PC_TEXT_BAG_FULL] = {gText_BagIsFull2, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_PUT_IN_BAG] = {gText_PutItemInBag, PC_TEXT_FMT_NORMAL},
+ [PC_TEXT_ITEM_IS_HELD] = {gText_ItemIsNowHeld, PC_TEXT_FMT_ITEM_NAME},
+ [PC_TEXT_CHANGED_TO_ITEM] = {gText_ChangedToNewItem, PC_TEXT_FMT_ITEM_NAME},
+ [PC_TEXT_CANT_STORE_MAIL] = {gText_MailCantBeStored, PC_TEXT_FMT_NORMAL},
+};
+
+// Yes/No menu
+static const struct WindowTemplate sYesNoWindowTemplate = {
+ .bg = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 11,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x05c
+};
+
+static const struct OamData gUnknown_83CEB88 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0
+};
+
+// Waveform
+
+static const struct OamData gUnknown_83CEB90 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x8),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0
+};
+
+static const union AnimCmd gUnknown_83CEB98[] = {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_83CEBA0[] = {
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(6, 8),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_83CEBB0[] = {
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_83CEBB8[] = {
+ ANIMCMD_FRAME(10, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(12, 8),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd *const gUnknown_83CEBC8[] = {
+ gUnknown_83CEB98,
+ gUnknown_83CEBA0,
+ gUnknown_83CEBB0,
+ gUnknown_83CEBB8
+};
+
+static const struct SpriteTemplate sSpriteTemplate_Waveform = {
+ .tileTag = TAG_TILE_WAVEFORM,
+ .paletteTag = TAG_PAL_WAVEFORM,
+ .oam = &gUnknown_83CEB90,
+ .anims = gUnknown_83CEBC8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static void VblankCb_PSS(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ sub_8096BF8();
+ TransferPlttBuffer();
+ SetGpuReg(REG_OFFSET_BG2HOFS, gPSSData->bg2_X);
+}
+
+static void Cb2_PSS(void)
+{
+ RunTasks();
+ DoScheduledBgTilemapCopiesToVram();
+ ScrollBackground();
+ sub_808F99C();
+ AnimateSprites();
+ BuildOamBuffer();
+}
+
+void Cb2_EnterPSS(u8 boxOption)
+{
+ ResetTasks();
+ sCurrentBoxOption = boxOption;
+ gPSSData = Alloc(sizeof(struct PokemonStorageSystemData));
+ if (gPSSData == NULL)
+ SetMainCallback2(Cb2_ExitPSS);
+ else
+ {
+ gPSSData->boxOption = boxOption;
+ gPSSData->isReshowingPSS = FALSE;
+ gUnknown_20397BA = 0;
+ gPSSData->state = 0;
+ gPSSData->taskId = CreateTask(Cb_InitPSS, 3);
+ SetHelpContext(HELPCONTEXT_BILLS_PC);
+ sLastUsedBox = StorageGetCurrentBox();
+ SetMainCallback2(Cb2_PSS);
+ }
+}
+
+void Cb2_ReturnToPSS(void)
+{
+ ResetTasks();
+ gPSSData = Alloc(sizeof(struct PokemonStorageSystemData));
+ if (gPSSData == NULL)
+ SetMainCallback2(Cb2_ExitPSS);
+ else
+ {
+ gPSSData->boxOption = sCurrentBoxOption;
+ gPSSData->isReshowingPSS = TRUE;
+ gPSSData->state = 0;
+ gPSSData->taskId = CreateTask(Cb_InitPSS, 3);
+ SetHelpContext(HELPCONTEXT_BILLS_PC);
+ SetMainCallback2(Cb2_PSS);
+ }
+}
+
+static void ResetAllBgCoords(void)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+}
+
+static void sub_808CF10(void)
+{
+ ResetPaletteFade();
+ ResetSpriteData();
+ FreeSpriteTileRanges();
+ FreeAllSpritePalettes();
+ ClearDma3Requests();
+ gReservedSpriteTileCount = 0x280;
+ sub_8096BE4(&gPSSData->unk_0020, gPSSData->unk_0028, 8);
+ gKeyRepeatStartDelay = 20;
+ ClearScheduledBgCopiesToVram();
+ AllocBoxPartyPokemonDropdowns(3);
+ SetBoxPartyPokemonDropdownMap2(0, 1, gUnknown_83CE6F8, 8, 4);
+ SetBoxPartyPokemonDropdownMap2Pos(0, 1, 0);
+ gPSSData->unk_02C7 = FALSE;
+}
+
+static void sub_808CF94(void)
+{
+ sub_8092B50();
+ sInPartyMenu = gPSSData->boxOption == BOX_OPTION_DEPOSIT;
+ gUnknown_20397B6 = 0;
+}
+
+static void sub_808CFC4(void)
+{
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(7, 11));
+ }
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP);
+}
+
+static void SetPSSCallback(TaskFunc newFunc)
+{
+ gTasks[gPSSData->taskId].func = newFunc;
+ gPSSData->state = 0;
+}
+
+static void Cb_InitPSS(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ sub_808CF10();
+ if (gPSSData->isReshowingPSS)
+ {
+ switch (sWhichToReshow)
+ {
+ case 1:
+ sub_8093660();
+ break;
+ case 0:
+ sub_80937B4();
+ break;
+ case 2:
+ GiveChosenBagItem();
+ break;
+ }
+ }
+ LoadPSSMenuGfx();
+ LoadWaveformSpritePalette();
+ break;
+ case 1:
+ if (!InitPSSWindows())
+ {
+ SetPSSCallback(Cb_ChangeScreen);
+ return;
+ }
+ break;
+ case 2:
+ PutWindowTilemap(0);
+ ClearWindowTilemap(1);
+ CpuFill32(0, (void *)VRAM, 0x200);
+ TextWindow_SetUserSelectedFrame(1, 0xB, 0xE0);
+ break;
+ case 3:
+ ResetAllBgCoords();
+ if (!gPSSData->isReshowingPSS)
+ sub_808CF94();
+ break;
+ case 4:
+ sub_808FFAC();
+ if (!gPSSData->isReshowingPSS)
+ sub_80922C0();
+ else
+ sub_8092340();
+ break;
+ case 5:
+ if (!sub_8095050())
+ {
+ SetPSSCallback(Cb_ChangeScreen);
+ return;
+ }
+ else
+ {
+ SetScrollingBackground();
+ sub_808FB68();
+ }
+ break;
+ case 6:
+ sub_808F078();
+ break;
+ case 7:
+ sub_808F68C();
+ break;
+ case 8:
+ sub_80913DC(StorageGetCurrentBox());
+ break;
+ case 9:
+ if (sub_809140C())
+ return;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ gPSSData->field_DA4.baseTileTag = TAG_TILE_D;
+ gPSSData->field_DA4.basePaletteTag = TAG_PAL_DACE;
+ SetMonMarkingsMenuPointer(&gPSSData->field_DA4);
+ LoadMonMarkingsFrameGfx();
+ }
+ else
+ {
+ sub_8095B5C();
+ sub_808FDFC();
+ }
+ break;
+ case 10:
+ sub_808CFC4();
+ if (!gPSSData->isReshowingPSS)
+ {
+ BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
+ SetPSSCallback(Cb_ShowPSS);
+ }
+ else
+ {
+ BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
+ SetPSSCallback(Cb_ReshowPSS);
+ }
+ SetVBlankCallback(VblankCb_PSS);
+ return;
+ default:
+ return;
+ }
+
+ gPSSData->state++;
+}
+
+static void Cb_ShowPSS(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ PlaySE(SE_PC_LOGIN);
+ BeginPCScreenEffect_TurnOn(20, 0, 1);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!IsPCScreenEffectRunning_TurnOn())
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ }
+}
+
+static void Cb_ReshowPSS(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x10, 0, RGB_BLACK);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!UpdatePaletteFade())
+ {
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_MainPSS(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ switch (HandleInput())
+ {
+ case 1:
+ PlaySE(SE_SELECT);
+ gPSSData->state = 1;
+ break;
+ case 5:
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_MONS && gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ PrintStorageActionText(PC_TEXT_WHICH_ONE_WILL_TAKE);
+ gPSSData->state = 3;
+ }
+ else
+ {
+ sub_8092B50();
+ SetPSSCallback(Cb_ShowPartyPokemon);
+ }
+ break;
+ case 6:
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_MONS)
+ {
+ if (IsMonBeingMoved() && ItemIsMail(gPSSData->cursorMonItem))
+ gPSSData->state = 5;
+ else
+ SetPSSCallback(Cb_HidePartyPokemon);
+ }
+ else if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ SetPSSCallback(Cb_HidePartyPokemon);
+ }
+ break;
+ case 4:
+ SetPSSCallback(Cb_OnCloseBoxPressed);
+ break;
+ case 19:
+ SetPSSCallback(Cb_OnBPressed);
+ break;
+ case 7:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_HandleBoxOptions);
+ break;
+ case 8:
+ SetPSSCallback(Cb_OnSelectedMon);
+ break;
+ case 9:
+ PlaySE(SE_SELECT);
+ gPSSData->newCurrBoxId = StorageGetCurrentBox() + 1;
+ if (gPSSData->newCurrBoxId >= TOTAL_BOXES_COUNT)
+ gPSSData->newCurrBoxId = 0;
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ SetUpScrollToBox(gPSSData->newCurrBoxId);
+ gPSSData->state = 2;
+ }
+ else
+ {
+ sub_8094D60();
+ gPSSData->state = 10;
+ }
+ break;
+ case 10:
+ PlaySE(SE_SELECT);
+ gPSSData->newCurrBoxId = StorageGetCurrentBox() - 1;
+ if (gPSSData->newCurrBoxId < 0)
+ gPSSData->newCurrBoxId = TOTAL_BOXES_COUNT - 1;
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ SetUpScrollToBox(gPSSData->newCurrBoxId);
+ gPSSData->state = 2;
+ }
+ else
+ {
+ sub_8094D60();
+ gPSSData->state = 10;
+ }
+ break;
+ case 11:
+ if (!CanMovePartyMon())
+ {
+ if (ItemIsMail(gPSSData->cursorMonItem))
+ {
+ gPSSData->state = 5;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_DepositMenu);
+ }
+ }
+ else
+ {
+ gPSSData->state = 4;
+ }
+ break;
+ case 13:
+ if (CanMovePartyMon())
+ {
+ gPSSData->state = 4;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_MoveMon);
+ }
+ break;
+ case 14:
+ if (!CanShiftMon())
+ {
+ gPSSData->state = 4;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_ShiftMon);
+ }
+ break;
+ case 12:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_WithdrawMon);
+ break;
+ case 15:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_PlaceMon);
+ break;
+ case 16:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_TakeItemForMoving);
+ break;
+ case 17:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_GiveMovingItemToMon);
+ break;
+ case 18:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_SwitchSelectedItem);
+ break;
+ case 20:
+ PlaySE(SE_SELECT);
+ sub_80950BC(0);
+ gPSSData->state = 7;
+ break;
+ case 22:
+ sub_80950BC(1);
+ gPSSData->state = 8;
+ break;
+ case 21:
+ PlaySE(SE_SELECT);
+ sub_80950BC(2);
+ gPSSData->state = 9;
+ break;
+ case 23:
+ sub_80950BC(3);
+ gPSSData->state = 7;
+ break;
+ case 25:
+ PlaySE(SE_SELECT);
+ sub_80950BC(4);
+ gPSSData->state = 9;
+ break;
+ case 26:
+ PlaySE(SE_SELECT);
+ sub_808FE54(3);
+ sub_80950BC(5);
+ gPSSData->state = 7;
+ break;
+ case 24:
+ PlaySE(SE_HAZURE);
+ break;
+ }
+ break;
+ case 1:
+ if (!sub_80924A8())
+ {
+ if (IsCursorOnCloseBox())
+ sub_808F948();
+ else
+ sub_808F974();
+
+ if (gPSSData->setMosaic)
+ BoxSetMosaic();
+ gPSSData->state = 0;
+ }
+ break;
+ case 2:
+ if (!ScrollToBox())
+ {
+ SetCurrentBox(gPSSData->newCurrBoxId);
+ if (!sInPartyMenu && !IsMonBeingMoved())
+ {
+ sub_8092F54();
+ BoxSetMosaic();
+ }
+
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ sub_8094D84();
+ gPSSData->state = 11;
+ }
+ else
+ {
+ gPSSData->state = 0;
+ }
+ }
+ break;
+ case 3:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ gPSSData->state = 0;
+ }
+ break;
+ case 4:
+ PlaySE(SE_HAZURE);
+ PrintStorageActionText(PC_TEXT_LAST_POKE);
+ gPSSData->state = 6;
+ break;
+ case 5:
+ PlaySE(SE_HAZURE);
+ PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL);
+ gPSSData->state = 6;
+ break;
+ case 6:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ case 7:
+ if (!sub_80950D0())
+ gPSSData->state = 0;
+ break;
+ case 8:
+ if (!sub_80950D0())
+ SetPSSCallback(Cb_MoveMon);
+ break;
+ case 9:
+ if (!sub_80950D0())
+ {
+ if (gPSSData->setMosaic)
+ BoxSetMosaic();
+ gPSSData->state = 0;
+ }
+ break;
+ case 10:
+ if (!sub_809610C())
+ {
+ SetUpScrollToBox(gPSSData->newCurrBoxId);
+ gPSSData->state = 2;
+ }
+ break;
+ case 11:
+ if (!sub_809610C())
+ gPSSData->state = 0;
+ break;
+ }
+}
+
+static void Cb_ShowPartyPokemon(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ SetUpDoShowPartyMenu();
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!DoShowPartyMenu())
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ }
+}
+
+static void Cb_HidePartyPokemon(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ PlaySE(SE_SELECT);
+ SetUpHidePartyMenu();
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!HidePartyMenu())
+ {
+ sub_8092B3C(sub_8092B70());
+ gPSSData->state++;
+ }
+ break;
+ case 2:
+ if (!sub_80924A8())
+ {
+ if (gPSSData->setMosaic)
+ BoxSetMosaic();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_OnSelectedMon(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ if (!BoxGetMosaic())
+ {
+ PlaySE(SE_SELECT);
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ PrintStorageActionText(PC_TEXT_IS_SELECTED);
+ else if (IsActiveItemMoving() || gPSSData->cursorMonItem != 0)
+ PrintStorageActionText(PC_TEXT_IS_SELECTED2);
+ else
+ PrintStorageActionText(PC_TEXT_GIVE_TO_MON);
+
+ AddMenu();
+ gPSSData->state = 1;
+ }
+ break;
+ case 1: // debug?
+ if (!sub_8094F90())
+ gPSSData->state = 2;
+ break;
+ case 2:
+ switch (sub_8094F94())
+ {
+ case -1:
+ case 0:
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ case 3:
+ if (CanMovePartyMon())
+ {
+ gPSSData->state = 3;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MoveMon);
+ }
+ break;
+ case 5:
+ PlaySE(SE_SELECT);
+ ClearBottomWindow();
+ SetPSSCallback(Cb_PlaceMon);
+ break;
+ case 4:
+ if (!CanShiftMon())
+ {
+ gPSSData->state = 3;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ ClearBottomWindow();
+ SetPSSCallback(Cb_ShiftMon);
+ }
+ break;
+ case 2:
+ PlaySE(SE_SELECT);
+ ClearBottomWindow();
+ SetPSSCallback(Cb_WithdrawMon);
+ break;
+ case 1:
+ if (CanMovePartyMon())
+ {
+ gPSSData->state = 3;
+ }
+ else if (ItemIsMail(gPSSData->cursorMonItem))
+ {
+ gPSSData->state = 4;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ ClearBottomWindow();
+ SetPSSCallback(Cb_DepositMenu);
+ }
+ break;
+ case 7:
+ if (CanMovePartyMon())
+ {
+ gPSSData->state = 3;
+ }
+ else if (gPSSData->cursorMonIsEgg)
+ {
+ gPSSData->state = 5; // Cannot release an Egg.
+ }
+ else if (ItemIsMail(gPSSData->cursorMonItem))
+ {
+ gPSSData->state = 4;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_ReleaseMon);
+ }
+ break;
+ case 6:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_ShowMonSummary);
+ break;
+ case 8:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_ShowMarkMenu);
+ break;
+ case 12:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_TakeItemForMoving);
+ break;
+ case 13:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_GiveMovingItemToMon);
+ break;
+ case 16:
+ SetPSSCallback(Cb_ItemToBag);
+ break;
+ case 15:
+ SetPSSCallback(Cb_SwitchSelectedItem);
+ break;
+ case 14:
+ SetPSSCallback(Cb_GiveItemFromBag);
+ break;
+ case 17:
+ SetPSSCallback(Cb_ShowItemInfo);
+ break;
+ }
+ break;
+ case 3:
+ PlaySE(SE_HAZURE);
+ PrintStorageActionText(PC_TEXT_LAST_POKE);
+ gPSSData->state = 6;
+ break;
+ case 5:
+ PlaySE(SE_HAZURE);
+ PrintStorageActionText(PC_TEXT_CANT_RELEASE_EGG);
+ gPSSData->state = 6;
+ break;
+ case 4:
+ PlaySE(SE_HAZURE);
+ PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL);
+ gPSSData->state = 6;
+ break;
+ case 6:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_MoveMon(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ InitMonPlaceChange(0);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!DoMonPlaceChange())
+ {
+ if (sInPartyMenu)
+ SetPSSCallback(Cb_HandleMovingMonFromParty);
+ else
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_PlaceMon(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ sub_808FE54(1);
+ InitMonPlaceChange(1);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!DoMonPlaceChange())
+ {
+ if (sInPartyMenu)
+ SetPSSCallback(Cb_HandleMovingMonFromParty);
+ else
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_ShiftMon(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ sub_808FE54(0);
+ InitMonPlaceChange(2);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!DoMonPlaceChange())
+ {
+ BoxSetMosaic();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_WithdrawMon(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ if (CalculatePlayerPartyCount() == PARTY_SIZE)
+ {
+ PrintStorageActionText(PC_TEXT_PARTY_FULL);
+ gPSSData->state = 1;
+ }
+ else
+ {
+ sub_8092B5C();
+ InitMonPlaceChange(0);
+ gPSSData->state = 2;
+ }
+ break;
+ case 1:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ case 2:
+ if (!DoMonPlaceChange())
+ {
+ SetMovingMonPriority(1);
+ SetUpDoShowPartyMenu();
+ gPSSData->state++;
+ }
+ break;
+ case 3:
+ if (!DoShowPartyMenu())
+ {
+ sub_808FE54(1);
+ InitMonPlaceChange(1);
+ gPSSData->state++;
+ }
+ break;
+ case 4:
+ if (!DoMonPlaceChange())
+ {
+ sub_808FAA8();
+ gPSSData->state++;
+ }
+ break;
+ case 5:
+ SetPSSCallback(Cb_HidePartyPokemon);
+ break;
+ }
+}
+
+static void Cb_DepositMenu(u8 taskId)
+{
+ u8 boxId;
+
+ switch (gPSSData->state)
+ {
+ case 0:
+ PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX);
+ LoadBoxSelectionPopupSpriteGfx(&gPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE);
+ sub_808C940(gUnknown_20397B6);
+ gPSSData->state++;
+ break;
+ case 1:
+ boxId = HandleBoxChooseSelectionInput();
+ if (boxId == 200)
+ {
+ // no box chosen yet
+ }
+ else if (boxId == 201)
+ {
+ ClearBottomWindow();
+ sub_808C950();
+ FreeBoxSelectionPopupSpriteGfx();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ else
+ {
+ if (TryStorePartyMonInBox(boxId))
+ {
+ gUnknown_20397B6 = boxId;
+ sub_808FE54(2);
+ ClearBottomWindow();
+ sub_808C950();
+ FreeBoxSelectionPopupSpriteGfx();
+ gPSSData->state = 2;
+ }
+ else
+ {
+ PrintStorageActionText(PC_TEXT_BOX_IS_FULL);
+ gPSSData->state = 4;
+ }
+ }
+ break;
+ case 2:
+ CompactPartySlots();
+ sub_80909F4();
+ gPSSData->state++;
+ break;
+ case 3:
+ if (!sub_8090A60())
+ {
+ sub_8093174();
+ BoxSetMosaic();
+ sub_808FAA8();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ case 4:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX);
+ gPSSData->state = 1;
+ }
+ break;
+ }
+}
+
+static void Cb_ReleaseMon(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ PrintStorageActionText(PC_TEXT_RELEASE_POKE);
+ ShowYesNoWindow(1);
+ gPSSData->state++;
+ // fallthrough
+ case 1:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case MENU_B_PRESSED:
+ case 1:
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ case 0:
+ ClearBottomWindow();
+ InitCanReleaseMonVars();
+ sub_8093194();
+ gPSSData->state++;
+ break;
+ }
+ break;
+ case 2:
+ RunCanReleaseMon();
+ if (!sub_80931EC())
+ {
+ while (1)
+ {
+ s8 r0 = RunCanReleaseMon();
+ if (r0 == 1)
+ {
+ gPSSData->state++;
+ break;
+ }
+ else if (r0 == 0)
+ {
+ gPSSData->state = 8; // Can't release the mon.
+ break;
+ }
+ }
+ }
+ break;
+ case 3:
+ ReleaseMon();
+ RefreshCursorMonData();
+ PrintStorageActionText(PC_TEXT_WAS_RELEASED);
+ gPSSData->state++;
+ break;
+ case 4:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ PrintStorageActionText(PC_TEXT_BYE_BYE);
+ gPSSData->state++;
+ }
+ break;
+ case 5:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ if (sInPartyMenu)
+ {
+ CompactPartySlots();
+ sub_80909F4();
+ gPSSData->state++;
+ }
+ else
+ {
+ gPSSData->state = 7;
+ }
+ }
+ break;
+ case 6:
+ if (!sub_8090A60())
+ {
+ sub_8092F54();
+ BoxSetMosaic();
+ sub_808FAA8();
+ gPSSData->state++;
+ }
+ break;
+ case 7:
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ case 8:
+ PrintStorageActionText(PC_TEXT_WAS_RELEASED);
+ gPSSData->state++;
+ break;
+ case 9:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ PrintStorageActionText(PC_TEXT_SURPRISE);
+ gPSSData->state++;
+ }
+ break;
+ case 10:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ sub_8091114();
+ gPSSData->state++;
+ }
+ break;
+ case 11:
+ if (!sub_8091150())
+ {
+ sub_8093264();
+ PrintStorageActionText(PC_TEXT_CAME_BACK);
+ gPSSData->state++;
+ }
+ break;
+ case 12:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ PrintStorageActionText(PC_TEXT_WORRIED);
+ gPSSData->state++;
+ }
+ break;
+ case 13:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_ShowMarkMenu(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ PrintStorageActionText(PC_TEXT_MARK_POKE);
+ gPSSData->field_DA4.markings = gPSSData->cursorMonMarkings;
+ DrawMonMarkingsMenu(gPSSData->cursorMonMarkings, 0xb0, 0x10);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!MonMarkingsHandleInput())
+ {
+ TeardownMonMarkingsMenu();
+ ClearBottomWindow();
+ SetMonMarkings(gPSSData->field_DA4.markings);
+ RefreshCursorMonData();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_TakeItemForMoving(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ if (!ItemIsMail(gPSSData->cursorMonItem))
+ {
+ ClearBottomWindow();
+ gPSSData->state++;
+ }
+ else
+ {
+ SetPSSCallback(Cb_PrintCantStoreMail);
+ }
+ break;
+ case 1:
+ sub_8094D14(2);
+ Item_FromMonToMoving(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
+ gPSSData->state++;
+ break;
+ case 2:
+ if (!sub_809610C())
+ {
+ sub_8094D14(3);
+ ClearBottomWindow();
+ sub_8092F54();
+ PrintCursorMonInfo();
+ gPSSData->state++;
+ }
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ }
+}
+
+static void Cb_GiveMovingItemToMon(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ ClearBottomWindow();
+ gPSSData->state++;
+ break;
+ case 1:
+ sub_8094D14(2);
+ Item_GiveMovingToMon(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
+ gPSSData->state++;
+ break;
+ case 2:
+ if (!sub_809610C())
+ {
+ sub_8094D14(0);
+ sub_8092F54();
+ PrintCursorMonInfo();
+ PrintStorageActionText(PC_TEXT_ITEM_IS_HELD);
+ gPSSData->state++;
+ }
+ break;
+ case 3:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ gPSSData->state++;
+ }
+ break;
+ case 4:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ }
+}
+
+static void Cb_ItemToBag(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ if (!AddBagItem(gPSSData->cursorMonItem, 1))
+ {
+ PlaySE(SE_HAZURE);
+ PrintStorageActionText(PC_TEXT_BAG_FULL);
+ gPSSData->state = 3;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ Item_TakeMons(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
+ gPSSData->state = 1;
+ }
+ break;
+ case 1:
+ if (!sub_809610C())
+ {
+ PrintStorageActionText(PC_TEXT_PLACED_IN_BAG);
+ gPSSData->state = 2;
+ }
+ break;
+ case 2:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ sub_8092F54();
+ PrintCursorMonInfo();
+ gPSSData->state = 4;
+ }
+ break;
+ case 4:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ case 3:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_SwitchSelectedItem(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ if (!ItemIsMail(gPSSData->cursorMonItem))
+ {
+ ClearBottomWindow();
+ gPSSData->state++;
+ }
+ else
+ {
+ SetPSSCallback(Cb_PrintCantStoreMail);
+ }
+ break;
+ case 1:
+ sub_8094D14(2);
+ Item_SwitchMonsWithMoving(sInPartyMenu ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
+ gPSSData->state++;
+ break;
+ case 2:
+ if (!sub_809610C())
+ {
+ sub_8094D14(3);
+ sub_8092F54();
+ PrintCursorMonInfo();
+ PrintStorageActionText(PC_TEXT_CHANGED_TO_ITEM);
+ gPSSData->state++;
+ }
+ break;
+ case 3:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ gPSSData->state++;
+ }
+ break;
+ case 4:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ }
+}
+
+static void Cb_ShowItemInfo(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ ClearBottomWindow();
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ PlaySE(SE_WIN_OPEN);
+ PrintItemDescription();
+ sub_80966F4();
+ gPSSData->state++;
+ }
+ break;
+ case 2:
+ if (!sub_8096728())
+ gPSSData->state++;
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ gPSSData->state++;
+ break;
+ case 4:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ PlaySE(SE_WIN_OPEN);
+ gPSSData->state++;
+ }
+ break;
+ case 5:
+ if (!sub_80967C0())
+ gPSSData->state++;
+ break;
+ case 6:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ }
+}
+
+static void Cb_CloseBoxWhileHoldingItem(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ PlaySE(SE_SELECT);
+ PrintStorageActionText(PC_TEXT_PUT_IN_BAG);
+ ShowYesNoWindow(0);
+ gPSSData->state = 1;
+ break;
+ case 1:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case MENU_B_PRESSED:
+ case 1:
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ case 0:
+ if (AddBagItem(gPSSData->movingItem, 1) == TRUE)
+ {
+ ClearBottomWindow();
+ gPSSData->state = 3;
+ }
+ else
+ {
+ PrintStorageActionText(PC_TEXT_BAG_FULL);
+ gPSSData->state = 2;
+ }
+ break;
+ }
+ break;
+ case 2:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ gPSSData->state = 5;
+ }
+ break;
+ case 3:
+ sub_8096088();
+ gPSSData->state = 4;
+ break;
+ case 4:
+ if (!sub_809610C())
+ {
+ sub_8094D14(0);
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ case 5:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ }
+}
+
+static void Cb_HandleMovingMonFromParty(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ CompactPartySlots();
+ sub_80909F4();
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!sub_8090A60())
+ {
+ sub_808FAA8();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_PrintCantStoreMail(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ PrintStorageActionText(PC_TEXT_CANT_STORE_MAIL);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ gPSSData->state++;
+ break;
+ case 2:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ gPSSData->state++;
+ }
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ }
+}
+
+static void Cb_HandleBoxOptions(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ PrintStorageActionText(PC_TEXT_WHAT_YOU_DO);
+ AddMenu();
+ gPSSData->state++;
+ break;
+ case 1:
+ if (sub_8094F90())
+ return;
+ gPSSData->state++;
+ case 2:
+ switch (sub_8094F94())
+ {
+ case -1:
+ case 0:
+ sub_80920FC(TRUE);
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ case 11:
+ PlaySE(SE_SELECT);
+ SetPSSCallback(Cb_NameBox);
+ break;
+ case 10:
+ PlaySE(SE_SELECT);
+ ClearBottomWindow();
+ SetPSSCallback(Cb_HandleWallpapers);
+ break;
+ case 9:
+ PlaySE(SE_SELECT);
+ ClearBottomWindow();
+ SetPSSCallback(Cb_JumpBox);
+ break;
+ }
+ break;
+ }
+}
+
+static void Cb_HandleWallpapers(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ AddWallpaperSetsMenu();
+ PrintStorageActionText(PC_TEXT_PICK_A_THEME);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!sub_8094F90())
+ gPSSData->state++;
+ break;
+ case 2:
+ gPSSData->wallpaperSetId = sub_8094F94();
+ switch (gPSSData->wallpaperSetId)
+ {
+ case -1:
+ sub_80920FC(TRUE);
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ case 18 ... 21:
+ PlaySE(SE_SELECT);
+ sub_8095024();
+ gPSSData->wallpaperSetId -= 18;
+ gPSSData->state++;
+ break;
+ }
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ AddWallpapersMenu(gPSSData->wallpaperSetId);
+ PrintStorageActionText(PC_TEXT_PICK_A_WALLPAPER);
+ gPSSData->state++;
+ }
+ break;
+ case 4:
+ gPSSData->wallpaperId = sub_8094F94();
+ switch (gPSSData->wallpaperId)
+ {
+ case MENU_NOTHING_CHOSEN:
+ break;
+ case MENU_B_PRESSED:
+ ClearBottomWindow();
+ gPSSData->state = 0;
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ ClearBottomWindow();
+ gPSSData->wallpaperId -= 22;
+ SetWallpaperForCurrentBox(gPSSData->wallpaperId);
+ gPSSData->state++;
+ break;
+ }
+ break;
+ case 5:
+ if (!DoWallpaperGfxChange())
+ {
+ sub_80920FC(TRUE);
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_JumpBox(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX);
+ LoadBoxSelectionPopupSpriteGfx(&gPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE);
+ sub_808C940(StorageGetCurrentBox());
+ gPSSData->state++;
+ break;
+ case 1:
+ gPSSData->newCurrBoxId = HandleBoxChooseSelectionInput();
+ switch (gPSSData->newCurrBoxId)
+ {
+ case 200:
+ break;
+ default:
+ ClearBottomWindow();
+ sub_808C950();
+ FreeBoxSelectionPopupSpriteGfx();
+ if (gPSSData->newCurrBoxId == 201 || gPSSData->newCurrBoxId == StorageGetCurrentBox())
+ {
+ sub_80920FC(TRUE);
+ SetPSSCallback(Cb_MainPSS);
+ }
+ else
+ {
+ gPSSData->state++;
+ }
+ break;
+ }
+ break;
+ case 2:
+ SetUpScrollToBox(gPSSData->newCurrBoxId);
+ gPSSData->state++;
+ break;
+ case 3:
+ if (!ScrollToBox())
+ {
+ SetCurrentBox(gPSSData->newCurrBoxId);
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ }
+}
+
+static void Cb_NameBox(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ sub_8093630();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!UpdatePaletteFade())
+ {
+ sWhichToReshow = 1;
+ gPSSData->screenChangeType = SCREEN_CHANGE_NAME_BOX;
+ SetPSSCallback(Cb_ChangeScreen);
+ }
+ break;
+ }
+}
+
+static void Cb_ShowMonSummary(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ sub_80936B8();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!UpdatePaletteFade())
+ {
+ sWhichToReshow = 0;
+ gPSSData->screenChangeType = SCREEN_CHANGE_SUMMARY_SCREEN;
+ SetPSSCallback(Cb_ChangeScreen);
+ }
+ break;
+ }
+}
+
+static void Cb_GiveItemFromBag(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gPSSData->state++;
+ break;
+ case 1:
+ if (!UpdatePaletteFade())
+ {
+ sWhichToReshow = 2;
+ gPSSData->screenChangeType = SCREEN_CHANGE_ITEM_FROM_BAG;
+ SetPSSCallback(Cb_ChangeScreen);
+ }
+ break;
+ }
+}
+
+static void Cb_OnCloseBoxPressed(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ if (IsMonBeingMoved())
+ {
+ PlaySE(SE_HAZURE);
+ PrintStorageActionText(PC_TEXT_HOLDING_POKE);
+ gPSSData->state = 1;
+ }
+ else if (IsActiveItemMoving())
+ {
+ SetPSSCallback(Cb_CloseBoxWhileHoldingItem);
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ PrintStorageActionText(PC_TEXT_EXIT_BOX);
+ ShowYesNoWindow(0);
+ gPSSData->state = 2;
+ }
+ break;
+ case 1:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ case 2:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case MENU_B_PRESSED:
+ case 1:
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ case 0:
+ PlaySE(SE_PC_OFF);
+ ClearBottomWindow();
+ gPSSData->state++;
+ break;
+ }
+ break;
+ case 3:
+ BeginPCScreenEffect_TurnOff(20, 0, 1);
+ gPSSData->state++;
+ break;
+ case 4:
+ if (!IsPCScreenEffectRunning_TurnOff())
+ {
+ sub_808FF70();
+ gPlayerPartyCount = CalculatePlayerPartyCount();
+ gPSSData->screenChangeType = SCREEN_CHANGE_EXIT_BOX;
+ SetPSSCallback(Cb_ChangeScreen);
+ }
+ break;
+ }
+}
+
+static void Cb_OnBPressed(u8 taskId)
+{
+ switch (gPSSData->state)
+ {
+ case 0:
+ if (IsMonBeingMoved())
+ {
+ PlaySE(SE_HAZURE);
+ PrintStorageActionText(PC_TEXT_HOLDING_POKE);
+ gPSSData->state = 1;
+ }
+ else if (IsActiveItemMoving())
+ {
+ SetPSSCallback(Cb_CloseBoxWhileHoldingItem);
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ PrintStorageActionText(PC_TEXT_CONTINUE_BOX);
+ ShowYesNoWindow(0);
+ gPSSData->state = 2;
+ }
+ break;
+ case 1:
+ if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
+ {
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ }
+ break;
+ case 2:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ ClearBottomWindow();
+ SetPSSCallback(Cb_MainPSS);
+ break;
+ case 1:
+ case MENU_B_PRESSED:
+ PlaySE(SE_PC_OFF);
+ ClearBottomWindow();
+ gPSSData->state++;
+ break;
+ }
+ break;
+ case 3:
+ BeginPCScreenEffect_TurnOff(20, 0, 0);
+ gPSSData->state++;
+ break;
+ case 4:
+ if (!IsPCScreenEffectRunning_TurnOff())
+ {
+ sub_808FF70();
+ gPlayerPartyCount = CalculatePlayerPartyCount();
+ gPSSData->screenChangeType = SCREEN_CHANGE_EXIT_BOX;
+ SetPSSCallback(Cb_ChangeScreen);
+ }
+ break;
+ }
+}
+
+static void Cb_ChangeScreen(u8 taskId)
+{
+ struct Pokemon * partyMon;
+ u8 mode, monIndex, maxMonIndex;
+ u8 screenChangeType = gPSSData->screenChangeType;
+
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS && IsActiveItemMoving() == TRUE)
+ gUnknown_20397BA = GetMovingItem();
+ else
+ gUnknown_20397BA = ITEM_NONE;
+
+ switch (screenChangeType)
+ {
+ case SCREEN_CHANGE_EXIT_BOX:
+ default:
+ FreePSSData();
+ SetMainCallback2(Cb2_ExitPSS);
+ break;
+ case SCREEN_CHANGE_SUMMARY_SCREEN:
+ partyMon = gPSSData->field_218C.mon;
+ monIndex = gPSSData->field_2187;
+ maxMonIndex = gPSSData->field_2186;
+ mode = gPSSData->field_2188;
+ FreePSSData();
+ ShowPokemonSummaryScreen(partyMon, monIndex, maxMonIndex, Cb2_ReturnToPSS, mode);
+ break;
+ case SCREEN_CHANGE_NAME_BOX:
+ FreePSSData();
+ DoNamingScreen(NAMING_SCREEN_BOX, GetBoxNamePtr(StorageGetCurrentBox()), 0, 0, 0, Cb2_ReturnToPSS);
+ break;
+ case SCREEN_CHANGE_ITEM_FROM_BAG:
+ FreePSSData();
+ GoToBagMenu(ITEMMENULOCATION_PCBOX, OPEN_BAG_ITEMS, Cb2_ReturnToPSS);
+ break;
+ }
+
+ DestroyTask(taskId);
+}
+
+static void GiveChosenBagItem(void)
+{
+ u16 item = gSpecialVar_ItemId;
+
+ if (item != ITEM_NONE)
+ {
+ u8 id = GetBoxCursorPosition();
+
+ if (sInPartyMenu)
+ SetMonData(&gPlayerParty[id], MON_DATA_HELD_ITEM, &item);
+ else
+ SetCurrentBoxMonData(id, MON_DATA_HELD_ITEM, &item);
+
+ RemoveBagItem(item, 1);
+ }
+}
+
+static void FreePSSData(void)
+{
+ FreeBoxPartyPokemonDropdowns();
+ sub_80950A4();
+ FREE_AND_SET_NULL(gPSSData);
+ FreeAllWindowBuffers();
+}
+
+// ******************************************************************
+// Graphics util
+// ******************************************************************
+
+static void SetScrollingBackground(void)
+{
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(31));
+ DecompressAndLoadBgGfxUsingHeap(3, sPokemonStorageScrollingBGTileset, 0, 0, 0);
+ LZ77UnCompVram(sPokemonStorageScrollingBGTilemap, (void *)BG_SCREEN_ADDR(31));
+}
+
+static void ScrollBackground(void)
+{
+ ChangeBgX(3, 128, 1);
+ ChangeBgY(3, 128, 2);
+}
+
+static void LoadPSSMenuGfx(void)
+{
+ InitBgsFromTemplates(0, gUnknown_83CEA50, NELEMS(gUnknown_83CEA50));
+ DecompressAndLoadBgGfxUsingHeap(1, gPSSMenu_Gfx, 0, 0, 0);
+ LZ77UnCompWram(gUnknown_83CE5FC, gPSSData->field_5AC4);
+ SetBgTilemapBuffer(1, gPSSData->field_5AC4);
+ ShowBg(1);
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+static bool8 InitPSSWindows(void)
+{
+ if (!InitWindows(gUnknown_83CEA30))
+ {
+ return FALSE;
+ }
+ else
+ {
+ DeactivateAllTextPrinters();
+ return TRUE;
+ }
+}
+
+static void LoadWaveformSpritePalette(void)
+{
+ LoadSpritePalette(&sWaveformSpritePalette);
+}
+
+static void sub_808F078(void)
+{
+ LoadPalette(gUnknown_8E9C3F8, 0, 0x20);
+ LoadPalette(gUnknown_8E9C418, 0x20, 0x20);
+ LoadPalette(gUnknown_83CEA10, 0xF0, 0x20);
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ LoadPalette(gUnknown_83CE738, 0x30, 0x20);
+ else
+ LoadPalette(gUnknown_83CE758, 0x30, 0x20);
+
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_16COLOR | BGCNT_SCREENBASE(30));
+ LoadCursorMonSprite();
+ sub_808F0F4();
+ sub_808F164();
+ RefreshCursorMonData();
+}
+
+static void sub_808F0F4(void)
+{
+ gPSSData->field_D94 = CreateMonMarkingSprite_AllOff(TAG_TILE_10, TAG_PAL_DAC8, NULL);
+ gPSSData->field_D94->oam.priority = 1;
+ gPSSData->field_D94->subpriority = 1;
+ gPSSData->field_D94->pos1.x = 40;
+ gPSSData->field_D94->pos1.y = 150;
+ gPSSData->field_DA0 = (void *)OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(TAG_TILE_10);
+}
+
+static void sub_808F164(void)
+{
+ u16 i;
+ struct SpriteSheet sheet = sWaveformSpriteSheet;
+
+ LoadSpriteSheet(&sheet);
+ for (i = 0; i < 2; i++)
+ {
+ u8 spriteId = CreateSprite(&sSpriteTemplate_Waveform, i * 63 + 8, 9, 2);
+ gPSSData->field_D98[i] = &gSprites[spriteId];
+ }
+}
+
+static void RefreshCursorMonData(void)
+{
+ LoadCursorMonGfx(gPSSData->cursorMonSpecies, gPSSData->cursorMonPersonality);
+ PrintCursorMonInfo();
+ sub_808F5E8();
+ ScheduleBgCopyTilemapToVram(0);
+}
+
+static void BoxSetMosaic(void)
+{
+ RefreshCursorMonData();
+ if (gPSSData->cursorMonSprite)
+ {
+ gPSSData->cursorMonSprite->oam.mosaic = TRUE;
+ gPSSData->cursorMonSprite->data[0] = 10;
+ gPSSData->cursorMonSprite->data[1] = 1;
+ gPSSData->cursorMonSprite->callback = SpriteCB_CursorMon_Mosaic;
+ SetGpuReg(REG_OFFSET_MOSAIC, (gPSSData->cursorMonSprite->data[0] << 12) | (gPSSData->cursorMonSprite->data[0] << 8));
+ }
+}
+
+static u8 BoxGetMosaic(void)
+{
+ return gPSSData->cursorMonSprite->oam.mosaic;
+}
+
+static void SpriteCB_CursorMon_Mosaic(struct Sprite *sprite)
+{
+ sprite->data[0] -= sprite->data[1];
+ if (sprite->data[0] < 0)
+ sprite->data[0] = 0;
+ SetGpuReg(REG_OFFSET_MOSAIC, (sprite->data[0] << 12) | (sprite->data[0] << 8));
+ if (sprite->data[0] == 0)
+ {
+ sprite->oam.mosaic = FALSE;
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void LoadCursorMonSprite(void)
+{
+ u16 i;
+ u16 tileStart;
+ u8 palSlot;
+ u8 spriteId;
+ struct SpriteSheet sheet = {gPSSData->field_22C4, 0x800, TAG_TILE_2};
+ struct SpritePalette palette = {gPSSData->field_2244, TAG_PAL_DAC6};
+ struct SpriteTemplate template = sSpriteTemplate_CursorMon;
+
+ for (i = 0; i < 0x800; i++)
+ gPSSData->field_22C4[i] = 0;
+ for (i = 0; i < 0x10; i++)
+ gPSSData->field_2244[i] = 0;
+
+ gPSSData->cursorMonSprite = NULL;
+
+ do
+ {
+ tileStart = LoadSpriteSheet(&sheet);
+ if (tileStart == 0)
+ break;
+
+ palSlot = LoadSpritePalette(&palette);
+ if (palSlot == 0xFF)
+ break;
+
+ spriteId = CreateSprite(&template, 40, 48, 0);
+ if (spriteId == MAX_SPRITES)
+ break;
+
+ gPSSData->cursorMonSprite = &gSprites[spriteId];
+ gPSSData->field_223A = palSlot * 16 + 0x100;
+ gPSSData->field_223C = (void *)OBJ_VRAM0 + tileStart * 32;
+ } while (0);
+
+ if (gPSSData->cursorMonSprite == NULL)
+ {
+ FreeSpriteTilesByTag(TAG_TILE_2);
+ FreeSpritePaletteByTag(TAG_PAL_DAC6);
+ }
+}
+
+static void LoadCursorMonGfx(u16 species, u32 pid)
+{
+ if (gPSSData->cursorMonSprite == NULL)
+ return;
+
+ if (species != SPECIES_NONE)
+ {
+ HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gPSSData->field_22C4, species, pid);
+ LZ77UnCompWram(gPSSData->cursorMonPalette, gPSSData->field_2244);
+ CpuCopy32(gPSSData->field_22C4, gPSSData->field_223C, 0x800);
+ LoadPalette(gPSSData->field_2244, gPSSData->field_223A, 0x20);
+ gPSSData->cursorMonSprite->invisible = FALSE;
+ }
+ else
+ {
+ gPSSData->cursorMonSprite->invisible = TRUE;
+ }
+}
+
+static void PrintCursorMonInfo(void)
+{
+ u16 i;
+ u16 y;
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ for (i = 0, y = 0; i < 3; i++, y += 14)
+ {
+ AddTextPrinterParameterized(0, 2, gPSSData->cursorMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SPEED_FF, NULL);
+ }
+ AddTextPrinterParameterized(0, 0, gPSSData->cursorMonTexts[3], 6, y + 2, TEXT_SPEED_FF, NULL);
+ }
+ else
+ {
+ AddTextPrinterParameterized(0, 0, gPSSData->cursorMonTexts[3], 6, 0, TEXT_SPEED_FF, NULL);
+ for (i = 0, y = 15; i < 3; i++, y += 14)
+ {
+ AddTextPrinterParameterized(0, 2, gPSSData->cursorMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SPEED_FF, NULL);
+ }
+ }
+
+ CopyWindowToVram(0, 2);
+ if (gPSSData->cursorMonSpecies != SPECIES_NONE)
+ {
+ sub_80BEBD0(gPSSData->cursorMonMarkings, gPSSData->field_DA0);
+ gPSSData->field_D94->invisible = FALSE;
+ }
+ else
+ {
+ gPSSData->field_D94->invisible = TRUE;
+ }
+}
+
+static void sub_808F5E8(void)
+{
+ u16 i;
+
+ if (gPSSData->cursorMonSpecies != SPECIES_NONE)
+ {
+ SetBoxPartyPokemonDropdownMap2Rect(0, 0, 0, 8, 2);
+ for (i = 0; i < 2; i++)
+ StartSpriteAnimIfDifferent(gPSSData->field_D98[i], i * 2 + 1);
+ }
+ else
+ {
+ SetBoxPartyPokemonDropdownMap2Rect(0, 0, 2, 8, 2);
+ for (i = 0; i < 2; i++)
+ StartSpriteAnim(gPSSData->field_D98[i], i * 2);
+ }
+
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(0);
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+static void sub_808F68C(void)
+{
+ LZ77UnCompWram(gUnknown_8E9CAEC, gPSSData->field_B0);
+ LoadPalette(gPSSMenu_Pal, 0x10, 0x20);
+ SetBoxPartyPokemonDropdownMap2(1, 1, gPSSData->field_B0, 12, 22);
+ SetBoxPartyPokemonDropdownMap2(2, 1, gUnknown_83CE778, 9, 4);
+ SetBoxPartyPokemonDropdownMap2Pos(1, 10, 0);
+ SetBoxPartyPokemonDropdownMap2Pos(2, 21, 0);
+ sub_808F9FC();
+ if (sInPartyMenu)
+ {
+ sub_808F90C(TRUE);
+ CreatePartyMonsSprites(TRUE);
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(2);
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(1);
+ }
+ else
+ {
+ SetBoxPartyPokemonDropdownMap2Rect(1, 0, 20, 12, 2);
+ sub_808F90C(TRUE);
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(1);
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(2);
+ }
+
+ ScheduleBgCopyTilemapToVram(1);
+ gPSSData->unk_02C7 = FALSE;
+}
+
+static void SetUpShowPartyMenu(void)
+{
+ gPSSData->field_2C0 = 20;
+ gPSSData->field_2C2 = 2;
+ gPSSData->field_2C5 = 0;
+ CreatePartyMonsSprites(FALSE);
+}
+
+static bool8 ShowPartyMenu(void)
+{
+ if (gPSSData->field_2C5 == 20)
+ return FALSE;
+
+ gPSSData->field_2C0--;
+ gPSSData->field_2C2++;
+ AdjustBoxPartyPokemonDropdownPos(1, 3, 1);
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(1);
+ ScheduleBgCopyTilemapToVram(1);
+ sub_8090B98(8);
+ if (++gPSSData->field_2C5 == 20)
+ {
+ sInPartyMenu = TRUE;
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+static void SetUpHidePartyMenu(void)
+{
+ gPSSData->field_2C0 = 0;
+ gPSSData->field_2C2 = 22;
+ gPSSData->field_2C5 = 0;
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ sub_80960C0();
+}
+
+static bool8 HidePartyMenu(void)
+{
+ if (gPSSData->field_2C5 != 20)
+ {
+ gPSSData->field_2C0++;
+ gPSSData->field_2C2--;
+ AdjustBoxPartyPokemonDropdownPos(1, 3, -1);
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(1);
+ FillBgTilemapBufferRect_Palette0(1, 0x100, 10, gPSSData->field_2C2, 12, 1);
+ sub_8090B98(-8);
+ if (++gPSSData->field_2C5 != 20)
+ {
+ ScheduleBgCopyTilemapToVram(1);
+ return TRUE;
+ }
+ else
+ {
+ sInPartyMenu = FALSE;
+ DestroyAllPartyMonIcons();
+ CompactPartySlots();
+ SetBoxPartyPokemonDropdownMap2Rect(2, 0, 0, 9, 2);
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(2);
+ ScheduleBgCopyTilemapToVram(1);
+ return FALSE;
+ }
+ }
+
+ return FALSE;
+}
+
+static void sub_808F90C(bool8 arg0)
+{
+ if (arg0)
+ SetBoxPartyPokemonDropdownMap2Rect(2, 0, 0, 9, 2);
+ else
+ SetBoxPartyPokemonDropdownMap2Rect(2, 0, 2, 9, 2);
+
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(2);
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+static void sub_808F948(void)
+{
+ gPSSData->unk_02C7 = TRUE;
+ gPSSData->unk_02C8 = 30;
+ gPSSData->unk_02C9 = TRUE;
+}
+
+static void sub_808F974(void)
+{
+ if (gPSSData->unk_02C7)
+ {
+ gPSSData->unk_02C7 = FALSE;
+ sub_808F90C(TRUE);
+ }
+}
+
+static void sub_808F99C(void)
+{
+ if (gPSSData->unk_02C7 && ++gPSSData->unk_02C8 > 30)
+ {
+ gPSSData->unk_02C8 = 0;
+ gPSSData->unk_02C9 = (gPSSData->unk_02C9 == FALSE);
+ sub_808F90C(gPSSData->unk_02C9);
+ }
+}
+
+static void sub_808F9FC(void)
+{
+ u8 i;
+
+ for (i = 1; i < PARTY_SIZE; i++)
+ {
+ s32 species = GetMonData(gPlayerParty + i, MON_DATA_SPECIES);
+ sub_808FA30(i, (species != SPECIES_NONE));
+ }
+}
+
+static void sub_808FA30(u8 pos, bool8 isPartyMon)
+{
+ u16 i, j, index;
+ const u16 *data;
+
+ if (isPartyMon)
+ data = gUnknown_83CE7C0;
+ else
+ data = gUnknown_83CE7D8;
+
+ index = 3 * (3 * (pos - 1) + 1);
+ index *= 4;
+ index += 7;
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ gPSSData->field_B0[index + j] = data[j];
+ }
+ data += 4;
+ index += 12;
+ }
+}
+
+static void sub_808FAA8(void)
+{
+ sub_808F9FC();
+ SetBoxPartyPokemonDropdownMap2Rect(1, 0, 0, 12, 22);
+ CopyBoxPartyPokemonDropdownToBgTilemapBuffer(1);
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+static void SetUpDoShowPartyMenu(void)
+{
+ gPSSData->showPartyMenuState = 0;
+ PlaySE(SE_WIN_OPEN);
+ SetUpShowPartyMenu();
+}
+
+static bool8 DoShowPartyMenu(void)
+{
+ switch (gPSSData->showPartyMenuState)
+ {
+ case 0:
+ if (!ShowPartyMenu())
+ {
+ sub_8092AE4();
+ gPSSData->showPartyMenuState++;
+ }
+ break;
+ case 1:
+ if (!sub_80924A8())
+ {
+ if (gPSSData->setMosaic)
+ BoxSetMosaic();
+ gPSSData->showPartyMenuState++;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void sub_808FB68(void)
+{
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(29));
+ TextWindow_SetStdFrame0_WithPal(1, 2, 208);
+ FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17);
+ CopyBgTilemapBufferToVram(0);
+}
+
+static void PrintStorageActionText(u8 id)
+{
+ u8 *txtPtr;
+
+ DynamicPlaceholderTextUtil_Reset();
+ switch (sPCStorageActionTexts[id].format)
+ {
+ case PC_TEXT_FMT_NORMAL:
+ break;
+ case PC_TEXT_FMT_MON_NAME_1:
+ case PC_TEXT_FMT_MON_NAME_2:
+ case PC_TEXT_FMT_MON_NAME_3:
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gPSSData->cursorMonNick);
+ break;
+ case PC_TEXT_FMT_MON_NAME_4:
+ case PC_TEXT_FMT_MON_NAME_5:
+ case PC_TEXT_FMT_MON_NAME_6:
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gPSSData->field_21E0);
+ break;
+ case PC_TEXT_FMT_ITEM_NAME:
+ if (IsActiveItemMoving())
+ txtPtr = StringCopy(gPSSData->itemName, GetMovingItemName());
+ else
+ txtPtr = StringCopy(gPSSData->itemName, gPSSData->cursorMonTexts[3]);
+
+ while (*(txtPtr - 1) == CHAR_SPACE)
+ txtPtr--;
+
+ *txtPtr = EOS;
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gPSSData->itemName);
+ break;
+ }
+
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gPSSData->field_2190, sPCStorageActionTexts[id].text);
+ FillWindowPixelBuffer(1, PIXEL_FILL(1));
+ AddTextPrinterParameterized(1, 1, gPSSData->field_2190, 0, 2, TEXT_SPEED_FF, NULL);
+ DrawTextBorderOuter(1, 2, 13);
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 2);
+ ScheduleBgCopyTilemapToVram(0);
+}
+
+static void ShowYesNoWindow(s8 cursorPos)
+{
+ CreateYesNoMenu(&sYesNoWindowTemplate, 1, 0, 2, 0x00b, 14, 1);
+ Menu_MoveCursorNoWrapAround(cursorPos);
+}
+
+static void ClearBottomWindow(void)
+{
+ ClearStdWindowAndFrameToTransparent(1, FALSE);
+ ScheduleBgCopyTilemapToVram(0);
+}
+
+static void AddWallpaperSetsMenu(void)
+{
+ InitMenu();
+ SetMenuText(PC_TEXT_SCENERY1);
+ SetMenuText(PC_TEXT_SCENERY2);
+ SetMenuText(PC_TEXT_SCENERY3);
+ SetMenuText(PC_TEXT_ETCETERA);
+ AddMenu();
+}
+
+static void AddWallpapersMenu(u8 wallpaperSet)
+{
+ InitMenu();
+ switch (wallpaperSet)
+ {
+ case 0:
+ SetMenuText(PC_TEXT_FOREST);
+ SetMenuText(PC_TEXT_CITY);
+ SetMenuText(PC_TEXT_DESERT);
+ SetMenuText(PC_TEXT_SAVANNA);
+ break;
+ case 1:
+ SetMenuText(PC_TEXT_CRAG);
+ SetMenuText(PC_TEXT_VOLCANO);
+ SetMenuText(PC_TEXT_SNOW);
+ SetMenuText(PC_TEXT_CAVE);
+ break;
+ case 2:
+ SetMenuText(PC_TEXT_BEACH);
+ SetMenuText(PC_TEXT_SEAFLOOR);
+ SetMenuText(PC_TEXT_RIVER);
+ SetMenuText(PC_TEXT_SKY);
+ break;
+ case 3:
+ SetMenuText(PC_TEXT_POLKADOT);
+ SetMenuText(PC_TEXT_POKECENTER);
+ SetMenuText(PC_TEXT_MACHINE);
+ SetMenuText(PC_TEXT_SIMPLE);
+ break;
+ }
+ AddMenu();
+}
+
+u8 GetCurrentBoxOption(void)
+{
+ return sCurrentBoxOption;
+}
+
+static void sub_808FDFC(void)
+{
+ if (!IsCursorOnBox())
+ {
+ if (sInPartyMenu)
+ sub_8095C84(CURSOR_AREA_IN_PARTY, GetBoxCursorPosition());
+ else
+ sub_8095C84(CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
+ }
+
+ if (gUnknown_20397BA != ITEM_NONE)
+ {
+ sub_8095E2C(gUnknown_20397BA);
+ sub_8094D14(3);
+ }
+}
+
+static void sub_808FE54(u8 action)
+{
+ u16 event;
+ u8 fromBox = sub_8094D34();
+ u16 species = gPSSData->cursorMonSpecies;
+ u16 species2;
+ u8 toBox;
+ struct PssQuestLogBuffer * qlogBuffer;
+ if (sInPartyMenu)
+ {
+ toBox = TOTAL_BOXES_COUNT;
+ species2 = GetMonData(&gPlayerParty[GetBoxCursorPosition()], MON_DATA_SPECIES2);
+ }
+ else
+ {
+ toBox = StorageGetCurrentBox();
+ species2 = GetCurrentBoxMonData(GetBoxCursorPosition(), MON_DATA_SPECIES2);
+ }
+ qlogBuffer = &gPSSData->qlogBuffer;
+
+ switch (action)
+ {
+ default:
+ return;
+ case 0:
+ if (sInPartyMenu)
+ {
+ if (fromBox == TOTAL_BOXES_COUNT)
+ return;
+ else
+ event = QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON;
+ }
+ else
+ {
+ if (fromBox == TOTAL_BOXES_COUNT)
+ // Should upmerge but doesn't
+ event = QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON;
+ else
+ event = fromBox != toBox ? QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES : QL_EVENT_SWITCHED_MONS_WITHIN_BOX;
+ }
+ qlogBuffer->species = species;
+ qlogBuffer->species2 = species2;
+ qlogBuffer->fromBox = fromBox;
+ qlogBuffer->toBox = toBox;
+ break;
+ case 1:
+ qlogBuffer->species = species;
+ qlogBuffer->species2 = SPECIES_NONE;
+ qlogBuffer->fromBox = fromBox;
+ qlogBuffer->toBox = 0xFF;
+ if (sInPartyMenu)
+ {
+ if (fromBox == TOTAL_BOXES_COUNT)
+ return;
+ else
+ event = QL_EVENT_WITHDREW_MON_PC;
+ }
+ else
+ {
+ if (fromBox == TOTAL_BOXES_COUNT)
+ {
+ event = QL_EVENT_DEPOSITED_MON_PC;
+ qlogBuffer->fromBox = toBox;
+ }
+ else if (fromBox != toBox)
+ {
+ event = QL_EVENT_MOVED_MON_BETWEEN_BOXES;
+ qlogBuffer->toBox = toBox;
+ }
+ else
+ event = QL_EVENT_MOVED_MON_WITHIN_BOX;
+ }
+ break;
+ case 2:
+ event = QL_EVENT_DEPOSITED_MON_PC;
+ qlogBuffer->species = species;
+ qlogBuffer->species2 = SPECIES_NONE;
+ qlogBuffer->fromBox = gUnknown_20397B6;
+ qlogBuffer->toBox = 0xFF;
+ break;
+ case 3:
+ event = QL_EVENT_SWITCHED_MULTIPLE_MONS;
+ qlogBuffer->species = SPECIES_NONE;
+ qlogBuffer->species2 = SPECIES_NONE;
+ qlogBuffer->fromBox = fromBox;
+ qlogBuffer->toBox = toBox;
+ break;
+ }
+ SetQuestLogEvent(event, (const void *)qlogBuffer);
+}
+
+static void sub_808FF70(void)
+{
+ if (sLastUsedBox != StorageGetCurrentBox())
+ {
+ FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
+ VarSet(VAR_PC_BOX_TO_SEND_MON, StorageGetCurrentBox());
+ }
+}
diff --git a/src/pokemon_storage_system_4.c b/src/pokemon_storage_system_4.c
new file mode 100644
index 000000000..392d17574
--- /dev/null
+++ b/src/pokemon_storage_system_4.c
@@ -0,0 +1,1489 @@
+#include "global.h"
+#include "gflib.h"
+#include "event_data.h"
+#include "graphics.h"
+#include "new_menu_helpers.h"
+#include "pokemon_icon.h"
+#include "pokemon_storage_system_internal.h"
+#include "strings.h"
+#include "task.h"
+#include "trig.h"
+#include "constants/species.h"
+#include "constants/vars.h"
+#include "constants/flags.h"
+
+static void sub_8090324(struct Sprite * sprite);
+static void SetBoxSpeciesAndPersonalities(u8 boxId);
+static void sub_8090A74(struct Sprite * sprite, u16 idx);
+static void sub_8090AE0(struct Sprite * sprite);
+static void DestroyBoxMonIcon(struct Sprite * sprite);
+static void sub_80911B0(struct Sprite * sprite);
+static void sub_8091420(u8 taskId);
+static s8 sub_80916F4(u8 boxId);
+static void LoadWallpaperGfx(u8 wallpaperId, s8 direction);
+static bool32 WaitForWallpaperGfxLoad(void);
+static void sub_8091984(void *buffer, const void *buffer2, s8 direction, u8 baseBlock);
+static void sub_8091A24(void *buffer);
+static void sub_8091A94(u8 wallpaperId);
+static void sub_8091C48(u8 wallpaperId, s8 direction);
+static void sub_8091E84(struct Sprite * sprite);
+static void sub_8091EB8(struct Sprite * sprite);
+static s16 sub_8091F60(const u8 *boxName);
+static void sub_8091E34(void);
+static void sub_8091EF0(void);
+static void sub_8091F80(void);
+static void sub_809200C(s8 direction);
+static void sub_80920AC(void);
+static void sub_8092164(struct Sprite * sprite);
+
+static const struct OamData gUnknown_83CEC08;
+
+static const struct SpriteTemplate gUnknown_83CEBF0 = {
+ .tileTag = TAG_TILE_12,
+ .paletteTag = TAG_PAL_DAC0,
+ .oam = &gUnknown_83CEC08,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct OamData gUnknown_83CEC08 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0
+};
+
+static const union AffineAnimCmd gUnknown_83CEC10[] = {
+ AFFINEANIMCMD_FRAME(-2, -2, 0, 120),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gUnknown_83CEC20[] = {
+ AFFINEANIMCMD_FRAME(16, 16, 0, 0),
+ AFFINEANIMCMD_FRAME(16, 16, 0, 15),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const gUnknown_83CEC38[] = {
+ gUnknown_83CEC10,
+ gUnknown_83CEC20
+};
+
+static const u16 gUnknown_83CEC40[] = INCBIN_U16("graphics/interface/pss_unk_83CEC40.gbapal");
+static const u32 gUnknown_83CEC80[] = INCBIN_U32("graphics/interface/pss_unk_83CEC80.4bpp.lz");
+static const u32 gUnknown_83CF050[] = INCBIN_U32("graphics/interface/pss_unk_83CF050.bin.lz");
+static const u16 gUnknown_83CF12C[] = INCBIN_U16("graphics/interface/pss_unk_83CF12C.gbapal");
+static const u32 gUnknown_83CF16C[] = INCBIN_U32("graphics/interface/pss_unk_83CF16C.4bpp.lz");
+static const u32 gUnknown_83CF374[] = INCBIN_U32("graphics/interface/pss_unk_83CF374.bin.lz");
+static const u16 gUnknown_83CF424[] = INCBIN_U16("graphics/interface/pss_unk_83CF424.gbapal");
+static const u32 gUnknown_83CF464[] = INCBIN_U32("graphics/interface/pss_unk_83CF464.4bpp.lz");
+static const u32 gUnknown_83CF750[] = INCBIN_U32("graphics/interface/pss_unk_83CF750.bin.lz");
+static const u16 gUnknown_83CF834[] = INCBIN_U16("graphics/interface/pss_unk_83CF834.gbapal");
+static const u32 gUnknown_83CF874[] = INCBIN_U32("graphics/interface/pss_unk_83CF874.4bpp.lz");
+static const u32 gUnknown_83CFA94[] = INCBIN_U32("graphics/interface/pss_unk_83CFA94.bin.lz");
+static const u16 gUnknown_83CFB60[] = INCBIN_U16("graphics/interface/pss_unk_83CFB60.gbapal");
+static const u32 gUnknown_83CFBA0[] = INCBIN_U32("graphics/interface/pss_unk_83CFBA0.4bpp.lz");
+static const u32 gUnknown_83CFEF0[] = INCBIN_U32("graphics/interface/pss_unk_83CFEF0.bin.lz");
+static const u16 gUnknown_83CFFC8[] = INCBIN_U16("graphics/interface/pss_unk_83CFFC8.gbapal");
+static const u32 gUnknown_83D0008[] = INCBIN_U32("graphics/interface/pss_unk_83D0008.4bpp.lz");
+static const u8 sSpace_83D0338[4] = {};
+static const u32 gUnknown_83D033C[] = INCBIN_U32("graphics/interface/pss_unk_83D033C.bin.lz");
+static const u16 gUnknown_83D0414[] = INCBIN_U16("graphics/interface/pss_unk_83D0414.gbapal");
+static const u32 gUnknown_83D0454[] = INCBIN_U32("graphics/interface/pss_unk_83D0454.4bpp.lz");
+static const u32 gUnknown_83D070C[] = INCBIN_U32("graphics/interface/pss_unk_83D070C.bin.lz");
+static const u16 gUnknown_83D07D8[] = INCBIN_U16("graphics/interface/pss_unk_83D07D8.gbapal");
+static const u32 gUnknown_83D0818[] = INCBIN_U32("graphics/interface/pss_unk_83D0818.4bpp.lz");
+static const u32 gUnknown_83D0B5C[] = INCBIN_U32("graphics/interface/pss_unk_83D0B5C.bin.lz");
+static const u16 gUnknown_83D0C38[] = INCBIN_U16("graphics/interface/pss_unk_83D0C38.gbapal");
+static const u32 gUnknown_83D0C78[] = INCBIN_U32("graphics/interface/pss_unk_83D0C78.4bpp.lz");
+static const u32 gUnknown_83D0FFC[] = INCBIN_U32("graphics/interface/pss_unk_83D0FFC.bin.lz");
+static const u16 gUnknown_83D10E4[] = INCBIN_U16("graphics/interface/pss_unk_83D10E4.gbapal");
+static const u32 gUnknown_83D1124[] = INCBIN_U32("graphics/interface/pss_unk_83D1124.4bpp.lz");
+static const u32 gUnknown_83D13D8[] = INCBIN_U32("graphics/interface/pss_unk_83D13D8.bin.lz");
+static const u16 gUnknown_83D14B4[] = INCBIN_U16("graphics/interface/pss_unk_83D14B4.gbapal");
+static const u32 gUnknown_83D14F4[] = INCBIN_U32("graphics/interface/pss_unk_83D14F4.4bpp.lz");
+static const u32 gUnknown_83D1788[] = INCBIN_U32("graphics/interface/pss_unk_83D1788.bin.lz");
+static const u16 gUnknown_83D1874[] = INCBIN_U16("graphics/interface/pss_unk_83D1874.gbapal");
+static const u32 gUnknown_83D18B4[] = INCBIN_U32("graphics/interface/pss_unk_83D18B4.4bpp.lz");
+static const u32 gUnknown_83D1B4C[] = INCBIN_U32("graphics/interface/pss_unk_83D1B4C.bin.lz");
+static const u16 gUnknown_83D1C2C[] = INCBIN_U16("graphics/interface/pss_unk_83D1C2C.gbapal");
+static const u8 sSpace_83D1C6C[32] = {};
+static const u32 gUnknown_83D1C8C[] = INCBIN_U32("graphics/interface/pss_unk_83D1C8C.4bpp.lz");
+static const u32 gUnknown_83D1EC4[] = INCBIN_U32("graphics/interface/pss_unk_83D1EC4.bin.lz");
+static const u16 gUnknown_83D1F94[] = INCBIN_U16("graphics/interface/pss_unk_83D1F94.gbapal");
+static const u32 gUnknown_83D1FD4[] = INCBIN_U32("graphics/interface/pss_unk_83D1FD4.4bpp.lz");
+static const u32 gUnknown_83D22B8[] = INCBIN_U32("graphics/interface/pss_unk_83D22B8.bin.lz");
+static const u16 gUnknown_83D239C[] = INCBIN_U16("graphics/interface/pss_unk_83D239C.gbapal");
+static const u32 gUnknown_83D23DC[] = INCBIN_U32("graphics/interface/pss_unk_83D23DC.4bpp.lz");
+static const u32 gUnknown_83D256C[] = INCBIN_U32("graphics/interface/pss_unk_83D256C.bin.lz");
+static const u16 gUnknown_83D2614[] = INCBIN_U16("graphics/interface/pss_unk_83D2614.gbapal");
+static const u32 gUnknown_83D2654[] = INCBIN_U32("graphics/interface/pss_unk_83D2654.4bpp.lz");
+static const u32 gUnknown_83D277C[] = INCBIN_U32("graphics/interface/pss_unk_83D277C.bin.lz");
+static const u16 gUnknown_83D2820[] = INCBIN_U16("graphics/interface/pss_unk_83D2820.bin");
+
+static const u16 gUnknown_83D29D0[][2] = {
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)},
+ {RGB( 7, 7, 7), RGB(31, 31, 31)}
+};
+
+static const struct WallpaperTable sWallpaperTable[] = {
+ {gUnknown_83CEC80, gUnknown_83CF050, gUnknown_83CEC40},
+ {gUnknown_83CF16C, gUnknown_83CF374, gUnknown_83CF12C},
+ {gUnknown_83CF464, gUnknown_83CF750, gUnknown_83CF424},
+ {gUnknown_83CF874, gUnknown_83CFA94, gUnknown_83CF834},
+ {gUnknown_83CFBA0, gUnknown_83CFEF0, gUnknown_83CFB60},
+ {gUnknown_83D0008, gUnknown_83D033C, gUnknown_83CFFC8},
+ {gUnknown_83D0454, gUnknown_83D070C, gUnknown_83D0414},
+ {gUnknown_83D0818, gUnknown_83D0B5C, gUnknown_83D07D8},
+ {gUnknown_83D0C78, gUnknown_83D0FFC, gUnknown_83D0C38},
+ {gUnknown_83D1124, gUnknown_83D13D8, gUnknown_83D10E4},
+ {gUnknown_83D14F4, gUnknown_83D1788, gUnknown_83D14B4},
+ {gUnknown_83D18B4, gUnknown_83D1B4C, gUnknown_83D1874},
+ {gUnknown_83D1C8C, gUnknown_83D1EC4, gUnknown_83D1C2C},
+ {gUnknown_83D1FD4, gUnknown_83D22B8, gUnknown_83D1F94},
+ {gUnknown_83D23DC, gUnknown_83D256C, gUnknown_83D239C},
+ {gUnknown_83D2654, gUnknown_83D277C, gUnknown_83D2614},
+};
+
+static const u16 gUnknown_83D2AD0[] = INCBIN_U16("graphics/interface/pss_unk_83D2AD0.4bpp");
+static const u8 sUnref_83D2B50[] = {0xba, 0x23};
+
+static const struct SpriteSheet gUnknown_83D2B54 = {
+ gUnknown_83D2AD0, 0x0080, TAG_TILE_6
+};
+
+static const struct OamData gUnknown_83D2B5C = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x16),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0
+};
+
+static const union AnimCmd gUnknown_83D2B64[] = {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_83D2B6C[] = {
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gUnknown_83D2B74[] = {
+ gUnknown_83D2B64,
+ gUnknown_83D2B6C
+};
+
+static const struct SpriteTemplate gUnknown_83D2B7C = {
+ .tileTag = TAG_TILE_3,
+ .paletteTag = TAG_PAL_DAC9,
+ .oam = &gUnknown_83D2B5C,
+ .anims = gUnknown_83D2B74,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct OamData gUnknown_83D2B94 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x16),
+ .tileNum = 0x000,
+ .priority = 2,
+ .paletteNum = 0
+};
+
+static const union AnimCmd gUnknown_83D2B9C[] = {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_83D2BA4[] = {
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gUnknown_83D2BAC[] = {
+ gUnknown_83D2B9C,
+ gUnknown_83D2BA4
+};
+
+static const struct SpriteTemplate gUnknown_83D2BB4 = {
+ .tileTag = TAG_TILE_6,
+ .paletteTag = TAG_PAL_WAVEFORM,
+ .oam = &gUnknown_83D2B94,
+ .anims = gUnknown_83D2BAC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8092164
+};
+
+void sub_808FFAC(void)
+{
+ u16 i;
+
+ LoadMonIconPalettes();
+ for (i = 0; i < MAX_MON_ICONS; i++)
+ gPSSData->field_B08[i] = 0;
+ for (i = 0; i < MAX_MON_ICONS; i++)
+ gPSSData->field_B58[i] = 0;
+ for (i = 0; i < PARTY_SIZE; i++)
+ gPSSData->partySprites[i] = NULL;
+ for (i = 0; i < IN_BOX_COUNT; i++)
+ gPSSData->boxMonsSprites[i] = NULL;
+
+ gPSSData->movingMonSprite = NULL;
+ gPSSData->field_78C = 0;
+}
+
+static u8 sub_8090058(void)
+{
+ return (IsCursorInBox() ? 2 : 1);
+}
+
+void CreateMovingMonIcon(void)
+{
+ u32 personality = GetMonData(&gPSSData->movingMon, MON_DATA_PERSONALITY);
+ u16 species = GetMonData(&gPSSData->movingMon, MON_DATA_SPECIES2);
+ u8 priority = sub_8090058();
+
+ gPSSData->movingMonSprite = CreateMonIconSprite(species, personality, 0, 0, priority, 7);
+ gPSSData->movingMonSprite->callback = sub_80911B0;
+}
+
+static void sub_80900D4(u8 boxId)
+{
+ u8 boxPosition;
+ u16 i, j, count;
+ u16 species;
+ u32 personality;
+
+ count = 0;
+ boxPosition = 0;
+ for (i = 0; i < IN_BOX_COLUMNS; i++)
+ {
+ for (j = 0; j < IN_BOX_ROWS; j++)
+ {
+ species = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2);
+ if (species != SPECIES_NONE)
+ {
+ personality = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY);
+ gPSSData->boxMonsSprites[count] = CreateMonIconSprite(species, personality, 8 * (3 * j) + 100, 8 * (3 * i) + 44, 2, 19 - j);
+ }
+ else
+ {
+ gPSSData->boxMonsSprites[count] = NULL;
+ }
+ boxPosition++;
+ count++;
+ }
+ }
+
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ for (boxPosition = 0; boxPosition < IN_BOX_COUNT; boxPosition++)
+ {
+ if (GetBoxMonDataAt(boxId, boxPosition, MON_DATA_HELD_ITEM) == 0)
+ gPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
+ }
+ }
+}
+
+void sub_80901EC(u8 boxPosition)
+{
+ u16 species = GetCurrentBoxMonData(boxPosition, MON_DATA_SPECIES2);
+
+ if (species != SPECIES_NONE)
+ {
+ s16 x = 8 * (3 * (boxPosition % IN_BOX_ROWS)) + 100;
+ s16 y = 8 * (3 * (boxPosition / IN_BOX_ROWS)) + 44;
+ u32 personality = GetCurrentBoxMonData(boxPosition, MON_DATA_PERSONALITY);
+
+ gPSSData->boxMonsSprites[boxPosition] = CreateMonIconSprite(species, personality, x, y, 2, 19 - (boxPosition % IN_BOX_ROWS));
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ gPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
+ }
+}
+
+static void sub_809029C(s16 arg0)
+{
+ u16 i;
+
+ for (i = 0; i < IN_BOX_COUNT; i++)
+ {
+ if (gPSSData->boxMonsSprites[i] != NULL)
+ {
+ gPSSData->boxMonsSprites[i]->data[2] = arg0;
+ gPSSData->boxMonsSprites[i]->data[4] = 1;
+ gPSSData->boxMonsSprites[i]->callback = sub_8090324;
+ }
+ }
+}
+
+static void sub_80902E0(struct Sprite *sprite)
+{
+ if (sprite->data[1] != 0)
+ {
+ sprite->data[1]--;
+ sprite->pos1.x += sprite->data[2];
+ }
+ else
+ {
+ gPSSData->field_C66--;
+ sprite->pos1.x = sprite->data[3];
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void sub_8090324(struct Sprite *sprite)
+{
+ if (sprite->data[4] != 0)
+ {
+ sprite->data[4]--;
+ }
+ else
+ {
+ sprite->pos1.x += sprite->data[2];
+ sprite->data[5] = sprite->pos1.x + sprite->pos2.x;
+ if (sprite->data[5] <= 68 || sprite->data[5] >= 252)
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void DestroyAllIconsInRow(u8 row)
+{
+ u16 column;
+ u8 boxPosition = row;
+
+ for (column = 0; column < IN_BOX_COLUMNS; column++)
+ {
+ if (gPSSData->boxMonsSprites[boxPosition] != NULL)
+ {
+ DestroyBoxMonIcon(gPSSData->boxMonsSprites[boxPosition]);
+ gPSSData->boxMonsSprites[boxPosition] = NULL;
+ }
+ boxPosition += IN_BOX_ROWS;
+ }
+}
+
+static u8 sub_80903A4(u8 row, u16 times, s16 xDelta)
+{
+ s32 i;
+ u16 y = 44;
+ s16 xDest = 8 * (3 * row) + 100;
+ u16 x = xDest - ((times + 1) * xDelta);
+ u8 subpriority = 19 - row;
+ u8 count = 0;
+ u8 boxPosition = row;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ for (i = 0; i < IN_BOX_COLUMNS; i++)
+ {
+ if (gPSSData->boxSpecies[boxPosition] != SPECIES_NONE)
+ {
+ gPSSData->boxMonsSprites[boxPosition] = CreateMonIconSprite(gPSSData->boxSpecies[boxPosition],
+ gPSSData->boxPersonalities[boxPosition],
+ x, y, 2, subpriority);
+ if (gPSSData->boxMonsSprites[boxPosition] != NULL)
+ {
+ gPSSData->boxMonsSprites[boxPosition]->data[1] = times;
+ gPSSData->boxMonsSprites[boxPosition]->data[2] = xDelta;
+ gPSSData->boxMonsSprites[boxPosition]->data[3] = xDest;
+ gPSSData->boxMonsSprites[boxPosition]->callback = sub_80902E0;
+ count++;
+ }
+ }
+ boxPosition += IN_BOX_ROWS;
+ y += 24;
+ }
+ }
+ else
+ {
+ for (i = 0; i < IN_BOX_COLUMNS; i++)
+ {
+ if (gPSSData->boxSpecies[boxPosition] != SPECIES_NONE)
+ {
+ gPSSData->boxMonsSprites[boxPosition] = CreateMonIconSprite(gPSSData->boxSpecies[boxPosition],
+ gPSSData->boxPersonalities[boxPosition],
+ x, y, 2, subpriority);
+ if (gPSSData->boxMonsSprites[boxPosition] != NULL)
+ {
+ gPSSData->boxMonsSprites[boxPosition]->data[1] = times;
+ gPSSData->boxMonsSprites[boxPosition]->data[2] = xDelta;
+ gPSSData->boxMonsSprites[boxPosition]->data[3] = xDest;
+ gPSSData->boxMonsSprites[boxPosition]->callback = sub_80902E0;
+ if (GetBoxMonDataAt(gPSSData->field_C5C, boxPosition, MON_DATA_HELD_ITEM) == 0)
+ gPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
+ count++;
+ }
+ }
+ boxPosition += IN_BOX_ROWS;
+ y += 24;
+ }
+ }
+
+ return count;
+}
+
+static void sub_8090574(u8 boxId, s8 direction)
+{
+ gPSSData->field_C6A = 0;
+ gPSSData->field_C6B = boxId;
+ gPSSData->field_C69 = direction;
+ gPSSData->field_C60 = 32;
+ gPSSData->field_C64 = -(6 * direction);
+ gPSSData->field_C66 = 0;
+ SetBoxSpeciesAndPersonalities(boxId);
+ if (direction > 0)
+ gPSSData->field_C68 = 0;
+ else
+ gPSSData->field_C68 = IN_BOX_ROWS - 1;
+
+ gPSSData->field_C62 = (24 * gPSSData->field_C68) + 100;
+ sub_809029C(gPSSData->field_C64);
+}
+
+static bool8 sub_809062C(void)
+{
+ if (gPSSData->field_C60 != 0)
+ gPSSData->field_C60--;
+
+ switch (gPSSData->field_C6A)
+ {
+ case 0:
+ gPSSData->field_C62 += gPSSData->field_C64;
+ if (gPSSData->field_C62 <= 64 || gPSSData->field_C62 >= 252)
+ {
+ DestroyAllIconsInRow(gPSSData->field_C68);
+ gPSSData->field_C62 += gPSSData->field_C69 * 24;
+ gPSSData->field_C6A++;
+ }
+ break;
+ case 1:
+ gPSSData->field_C62 += gPSSData->field_C64;
+ gPSSData->field_C66 += sub_80903A4(gPSSData->field_C68, gPSSData->field_C60, gPSSData->field_C64);
+ if ((gPSSData->field_C69 > 0 && gPSSData->field_C68 == IN_BOX_ROWS - 1)
+ || (gPSSData->field_C69 < 0 && gPSSData->field_C68 == 0))
+ {
+ gPSSData->field_C6A++;
+ }
+ else
+ {
+ gPSSData->field_C68 += gPSSData->field_C69;
+ gPSSData->field_C6A = 0;
+ }
+ break;
+ case 2:
+ if (gPSSData->field_C66 == 0)
+ {
+ gPSSData->field_C60++;
+ return FALSE;
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void SetBoxSpeciesAndPersonalities(u8 boxId)
+{
+ s32 i, j, boxPosition;
+
+ boxPosition = 0;
+ for (i = 0; i < IN_BOX_COLUMNS; i++)
+ {
+ for (j = 0; j < IN_BOX_ROWS; j++)
+ {
+ gPSSData->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2);
+ if (gPSSData->boxSpecies[boxPosition] != SPECIES_NONE)
+ gPSSData->boxPersonalities[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY);
+ boxPosition++;
+ }
+ }
+
+ gPSSData->field_C5C = boxId;
+}
+
+void DestroyBoxMonIconAtPosition(u8 boxPosition)
+{
+ if (gPSSData->boxMonsSprites[boxPosition] != NULL)
+ {
+ DestroyBoxMonIcon(gPSSData->boxMonsSprites[boxPosition]);
+ gPSSData->boxMonsSprites[boxPosition] = NULL;
+ }
+}
+
+void SetBoxMonIconObjMode(u8 boxPosition, u8 objMode)
+{
+ if (gPSSData->boxMonsSprites[boxPosition] != NULL)
+ {
+ gPSSData->boxMonsSprites[boxPosition]->oam.objMode = objMode;
+ }
+}
+
+void CreatePartyMonsSprites(bool8 arg0)
+{
+ u16 i, count;
+ u16 species = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES2);
+ u32 personality = GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY);
+
+ gPSSData->partySprites[0] = CreateMonIconSprite(species, personality, 104, 64, 1, 12);
+ count = 1;
+ for (i = 1; i < PARTY_SIZE; i++)
+ {
+ species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ if (species != SPECIES_NONE)
+ {
+ personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
+ gPSSData->partySprites[i] = CreateMonIconSprite(species, personality, 152, 8 * (3 * (i - 1)) + 16, 1, 12);
+ count++;
+ }
+ else
+ {
+ gPSSData->partySprites[i] = NULL;
+ }
+ }
+
+ if (!arg0)
+ {
+ for (i = 0; i < count; i++)
+ {
+ gPSSData->partySprites[i]->pos1.y -= 160;
+ gPSSData->partySprites[i]->invisible = TRUE;
+ }
+ }
+
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (gPSSData->partySprites[i] != NULL && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == 0)
+ gPSSData->partySprites[i]->oam.objMode = ST_OAM_OBJ_BLEND;
+ }
+ }
+}
+
+void sub_80909F4(void)
+{
+ u16 i, count;
+
+ gPSSData->field_C5E = 0;
+ for (i = 0, count = 0; i < PARTY_SIZE; i++)
+ {
+ if (gPSSData->partySprites[i] != NULL)
+ {
+ if (i != count)
+ {
+ sub_8090A74(gPSSData->partySprites[i], count);
+ gPSSData->partySprites[i] = NULL;
+ gPSSData->field_C5E++;
+ }
+ count++;
+ }
+ }
+}
+
+u8 sub_8090A60(void)
+{
+ return gPSSData->field_C5E;
+}
+
+static void sub_8090A74(struct Sprite *sprite, u16 partyId)
+{
+ s16 x, y;
+
+ sprite->data[1] = partyId;
+ if (partyId == 0)
+ x = 104, y = 64;
+ else
+ x = 152, y = 8 * (3 * (partyId - 1)) + 16;
+
+ sprite->data[2] = (u16)(sprite->pos1.x) * 8;
+ sprite->data[3] = (u16)(sprite->pos1.y) * 8;
+ sprite->data[4] = ((x * 8) - sprite->data[2]) / 8;
+ sprite->data[5] = ((y * 8) - sprite->data[3]) / 8;
+ sprite->data[6] = 8;
+ sprite->callback = sub_8090AE0;
+}
+
+static void sub_8090AE0(struct Sprite *sprite)
+{
+ if (sprite->data[6] != 0)
+ {
+ s16 x = sprite->data[2] += sprite->data[4];
+ s16 y = sprite->data[3] += sprite->data[5];
+ sprite->pos1.x = x / 8u;
+ sprite->pos1.y = y / 8u;
+ sprite->data[6]--;
+ }
+ else
+ {
+ if (sprite->data[1] == 0)
+ {
+ sprite->pos1.x = 104;
+ sprite->pos1.y = 64;
+ }
+ else
+ {
+ sprite->pos1.x = 152;
+ sprite->pos1.y = 8 * (3 * (sprite->data[1] - 1)) + 16;
+ }
+ sprite->callback = SpriteCallbackDummy;
+ gPSSData->partySprites[sprite->data[1]] = sprite;
+ gPSSData->field_C5E--;
+ }
+}
+
+void DestroyMovingMonIcon(void)
+{
+ if (gPSSData->movingMonSprite != NULL)
+ {
+ DestroyBoxMonIcon(gPSSData->movingMonSprite);
+ gPSSData->movingMonSprite = NULL;
+ }
+}
+
+void sub_8090B98(s16 yDelta)
+{
+ u16 i, posY;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (gPSSData->partySprites[i] != NULL)
+ {
+ gPSSData->partySprites[i]->pos1.y += yDelta;
+ posY = gPSSData->partySprites[i]->pos1.y + gPSSData->partySprites[i]->pos2.y + gPSSData->partySprites[i]->centerToCornerVecY;
+ posY += 16;
+ if (posY > 192)
+ gPSSData->partySprites[i]->invisible = TRUE;
+ else
+ gPSSData->partySprites[i]->invisible = FALSE;
+ }
+ }
+}
+
+void DestroyPartyMonIcon(u8 partyId)
+{
+ if (gPSSData->partySprites[partyId] != NULL)
+ {
+ DestroyBoxMonIcon(gPSSData->partySprites[partyId]);
+ gPSSData->partySprites[partyId] = NULL;
+ }
+}
+
+void DestroyAllPartyMonIcons(void)
+{
+ u16 i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (gPSSData->partySprites[i] != NULL)
+ {
+ DestroyBoxMonIcon(gPSSData->partySprites[i]);
+ gPSSData->partySprites[i] = NULL;
+ }
+ }
+}
+
+void SetPartyMonIconObjMode(u8 partyId, u8 objMode)
+{
+ if (gPSSData->partySprites[partyId] != NULL)
+ {
+ gPSSData->partySprites[partyId]->oam.objMode = objMode;
+ }
+}
+
+void sub_8090CC0(u8 mode, u8 id)
+{
+ if (mode == MODE_PARTY)
+ {
+ gPSSData->movingMonSprite = gPSSData->partySprites[id];
+ gPSSData->partySprites[id] = NULL;
+ }
+ else if (mode == MODE_BOX)
+ {
+ gPSSData->movingMonSprite = gPSSData->boxMonsSprites[id];
+ gPSSData->boxMonsSprites[id] = NULL;
+ }
+ else
+ {
+ return;
+ }
+
+ gPSSData->movingMonSprite->callback = sub_80911B0;
+ gPSSData->movingMonSprite->oam.priority = sub_8090058();
+ gPSSData->movingMonSprite->subpriority = 7;
+}
+
+void sub_8090D58(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT) // party mon
+ {
+ gPSSData->partySprites[position] = gPSSData->movingMonSprite;
+ gPSSData->partySprites[position]->oam.priority = 1;
+ gPSSData->partySprites[position]->subpriority = 12;
+ }
+ else
+ {
+ gPSSData->boxMonsSprites[position] = gPSSData->movingMonSprite;
+ gPSSData->boxMonsSprites[position]->oam.priority = 2;
+ gPSSData->boxMonsSprites[position]->subpriority = 19 - (position % IN_BOX_ROWS);
+ }
+ gPSSData->movingMonSprite->callback = SpriteCallbackDummy;
+ gPSSData->movingMonSprite = NULL;
+}
+
+void sub_8090E08(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT) // party mon
+ gPSSData->field_B00 = &gPSSData->partySprites[position];
+ else
+ gPSSData->field_B00 = &gPSSData->boxMonsSprites[position];
+
+ gPSSData->movingMonSprite->callback = SpriteCallbackDummy;
+ gPSSData->field_C5D = 0;
+}
+
+bool8 sub_8090E74(void)
+{
+ if (gPSSData->field_C5D == 16)
+ return FALSE;
+
+ gPSSData->field_C5D++;
+ if (gPSSData->field_C5D & 1)
+ {
+ (*gPSSData->field_B00)->pos1.y--;
+ gPSSData->movingMonSprite->pos1.y++;
+ }
+
+ (*gPSSData->field_B00)->pos2.x = gSineTable[gPSSData->field_C5D * 8] / 16;
+ gPSSData->movingMonSprite->pos2.x = -(gSineTable[gPSSData->field_C5D * 8] / 16);
+ if (gPSSData->field_C5D == 8)
+ {
+ gPSSData->movingMonSprite->oam.priority = (*gPSSData->field_B00)->oam.priority;
+ gPSSData->movingMonSprite->subpriority = (*gPSSData->field_B00)->subpriority;
+ (*gPSSData->field_B00)->oam.priority = sub_8090058();
+ (*gPSSData->field_B00)->subpriority = 7;
+ }
+
+ if (gPSSData->field_C5D == 16)
+ {
+ struct Sprite *sprite = gPSSData->movingMonSprite;
+ gPSSData->movingMonSprite = (*gPSSData->field_B00);
+ *gPSSData->field_B00 = sprite;
+
+ gPSSData->movingMonSprite->callback = sub_80911B0;
+ (*gPSSData->field_B00)->callback = SpriteCallbackDummy;
+ }
+
+ return TRUE;
+}
+
+void sub_8090FC4(u8 mode, u8 position)
+{
+ switch (mode)
+ {
+ case MODE_PARTY:
+ gPSSData->field_B04 = &gPSSData->partySprites[position];
+ break;
+ case MODE_BOX:
+ gPSSData->field_B04 = &gPSSData->boxMonsSprites[position];
+ break;
+ case MODE_2:
+ gPSSData->field_B04 = &gPSSData->movingMonSprite;
+ break;
+ default:
+ return;
+ }
+
+ if (*gPSSData->field_B04 != NULL)
+ {
+ InitSpriteAffineAnim(*gPSSData->field_B04);
+ (*gPSSData->field_B04)->oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ (*gPSSData->field_B04)->affineAnims = gUnknown_83CEC38;
+ StartSpriteAffineAnim(*gPSSData->field_B04, 0);
+ }
+}
+
+bool8 sub_8091084(void)
+{
+ if (*gPSSData->field_B04 == NULL || (*gPSSData->field_B04)->invisible)
+ return FALSE;
+
+ if ((*gPSSData->field_B04)->affineAnimEnded)
+ (*gPSSData->field_B04)->invisible = TRUE;
+
+ return TRUE;
+}
+
+void sub_80910CC(void)
+{
+ if (*gPSSData->field_B04 != NULL)
+ {
+ FreeOamMatrix((*gPSSData->field_B04)->oam.matrixNum);
+ DestroyBoxMonIcon(*gPSSData->field_B04);
+ *gPSSData->field_B04 = NULL;
+ }
+}
+
+void sub_8091114(void)
+{
+ if (*gPSSData->field_B04 != NULL)
+ {
+ (*gPSSData->field_B04)->invisible = FALSE;
+ StartSpriteAffineAnim(*gPSSData->field_B04, 1);
+ }
+}
+
+bool8 sub_8091150(void)
+{
+ if (gPSSData->field_B04 == NULL)
+ return FALSE;
+
+ if ((*gPSSData->field_B04)->affineAnimEnded)
+ gPSSData->field_B04 = NULL;
+
+ return TRUE;
+}
+
+void SetMovingMonPriority(u8 priority)
+{
+ gPSSData->movingMonSprite->oam.priority = priority;
+}
+
+static void sub_80911B0(struct Sprite *sprite)
+{
+ sprite->pos1.x = gPSSData->field_CB4->pos1.x;
+ sprite->pos1.y = gPSSData->field_CB4->pos1.y + gPSSData->field_CB4->pos2.y + 4;
+}
+
+static u16 sub_80911D4(u16 species)
+{
+ u16 i, var;
+
+ // Find the currently-allocated slot
+ for (i = 0; i < MAX_MON_ICONS; i++)
+ {
+ if (gPSSData->field_B58[i] == species)
+ break;
+ }
+
+ if (i == MAX_MON_ICONS)
+ {
+ // Find the first empty slot
+ for (i = 0; i < MAX_MON_ICONS; i++)
+ {
+ if (gPSSData->field_B58[i] == SPECIES_NONE)
+ break;
+ }
+ if (i == MAX_MON_ICONS)
+ return 0xFFFF;
+ }
+
+ gPSSData->field_B58[i] = species;
+ gPSSData->field_B08[i]++;
+ var = 16 * i;
+ CpuCopy32(GetMonIconTiles(species, TRUE), (void*)(OBJ_VRAM0) + var * 32, 0x200);
+
+ return var;
+}
+
+static void sub_8091290(u16 species)
+{
+ u16 i;
+
+ for (i = 0; i < MAX_MON_ICONS; i++)
+ {
+ if (gPSSData->field_B58[i] == species)
+ {
+ if (--gPSSData->field_B08[i] == 0)
+ gPSSData->field_B58[i] = 0;
+ break;
+ }
+ }
+}
+
+struct Sprite *CreateMonIconSprite(u16 species, u32 personality, s16 x, s16 y, u8 oamPriority, u8 subpriority)
+{
+ u16 tileNum;
+ u8 spriteId;
+ struct SpriteTemplate template = gUnknown_83CEBF0;
+
+ species = GetIconSpecies(species, personality);
+ template.paletteTag = 0xDAC0 + gMonIconPaletteIndices[species];
+ tileNum = sub_80911D4(species);
+ if (tileNum == 0xFFFF)
+ return NULL;
+
+ spriteId = CreateSprite(&template, x, y, subpriority);
+ if (spriteId == MAX_SPRITES)
+ {
+ sub_8091290(species);
+ return NULL;
+ }
+
+ gSprites[spriteId].oam.tileNum = tileNum;
+ gSprites[spriteId].oam.priority = oamPriority;
+ gSprites[spriteId].data[0] = species;
+ return &gSprites[spriteId];
+}
+
+static void DestroyBoxMonIcon(struct Sprite *sprite)
+{
+ sub_8091290(sprite->data[0]);
+ DestroySprite(sprite);
+}
+
+void sub_80913DC(u8 boxId)
+{
+ u8 taskId = CreateTask(sub_8091420, 2);
+
+ gTasks[taskId].data[2] = boxId;
+}
+
+bool8 sub_809140C(void)
+{
+ return FuncIsActiveTask(sub_8091420);
+}
+
+static void sub_8091420(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ gPSSData->field_2D2 = 0;
+ gPSSData->bg2_X = 0;
+ task->data[1] = RequestDma3Fill(0, gPSSData->field_4AC4, 0x1000, 1);
+ break;
+ case 1:
+ if (CheckForSpaceForDma3Request(task->data[1]) == -1)
+ return;
+
+ SetBgTilemapBuffer(2, gPSSData->field_4AC4);
+ ShowBg(2);
+ break;
+ case 2:
+ LoadWallpaperGfx(task->data[2], 0);
+ break;
+ case 3:
+ if (!WaitForWallpaperGfxLoad())
+ return;
+
+ sub_8091A94(task->data[2]);
+ sub_8091F80();
+ sub_80900D4(task->data[2]);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(27) | BGCNT_TXT512x256);
+ break;
+ case 4:
+ DestroyTask(taskId);
+ break;
+ default:
+ task->data[0] = 0;
+ return;
+ }
+
+ task->data[0]++;
+}
+
+void SetUpScrollToBox(u8 boxId)
+{
+ s8 direction = sub_80916F4(boxId);
+
+ gPSSData->field_2CE = (direction > 0) ? 6 : -6;
+ gPSSData->field_2D3 = (direction > 0) ? 1 : 2;
+ gPSSData->field_2D0 = 32;
+ gPSSData->field_2D4 = boxId;
+ gPSSData->field_2D6 = (direction <= 0) ? 5 : 0;
+ gPSSData->field_2D8 = direction;
+ gPSSData->field_2DA = (direction > 0) ? 264 : 56;
+ gPSSData->field_2DC = (direction <= 0) ? 5 : 0;
+ gPSSData->field_2DE = 0;
+ gPSSData->field_2E0 = 2;
+ gPSSData->field_A64 = boxId;
+ gPSSData->field_A65 = direction;
+ gPSSData->field_A63 = 0;
+}
+
+bool8 ScrollToBox(void)
+{
+ bool8 var;
+
+ switch (gPSSData->field_A63)
+ {
+ case 0:
+ LoadWallpaperGfx(gPSSData->field_A64, gPSSData->field_A65);
+ gPSSData->field_A63++;
+ case 1:
+ if (!WaitForWallpaperGfxLoad())
+ return TRUE;
+
+ sub_8090574(gPSSData->field_A64, gPSSData->field_A65);
+ sub_8091C48(gPSSData->field_A64, gPSSData->field_A65);
+ sub_809200C(gPSSData->field_A65);
+ break;
+ case 2:
+ var = sub_809062C();
+ if (gPSSData->field_2D0 != 0)
+ {
+ gPSSData->bg2_X += gPSSData->field_2CE;
+ if (--gPSSData->field_2D0 != 0)
+ return TRUE;
+ sub_8091E34();
+ sub_80920AC();
+ }
+ return var;
+ }
+
+ gPSSData->field_A63++;
+ return TRUE;
+}
+
+static s8 sub_80916F4(u8 boxId)
+{
+ u8 i;
+ u8 currentBox = StorageGetCurrentBox();
+
+ for (i = 0; currentBox != boxId; i++)
+ {
+ currentBox++;
+ if (currentBox >= TOTAL_BOXES_COUNT)
+ currentBox = 0;
+ }
+
+ return (i < TOTAL_BOXES_COUNT / 2) ? 1 : -1;
+}
+
+void SetWallpaperForCurrentBox(u8 wallpaperId)
+{
+ u8 boxId = StorageGetCurrentBox();
+ SetBoxWallpaper(boxId, wallpaperId);
+ gPSSData->wallpaperChangeState = 0;
+}
+
+bool8 DoWallpaperGfxChange(void)
+{
+ switch (gPSSData->wallpaperChangeState)
+ {
+ case 0:
+ BeginNormalPaletteFade(gPSSData->field_738, 1, 0, 16, RGB_WHITEALPHA);
+ gPSSData->wallpaperChangeState++;
+ break;
+ case 1:
+ if (!UpdatePaletteFade())
+ {
+ u8 curBox = StorageGetCurrentBox();
+ LoadWallpaperGfx(curBox, 0);
+ gPSSData->wallpaperChangeState++;
+ }
+ break;
+ case 2:
+ if (WaitForWallpaperGfxLoad() == TRUE)
+ {
+ sub_8091EF0();
+ BeginNormalPaletteFade(gPSSData->field_738, 1, 16, 0, RGB_WHITEALPHA);
+ gPSSData->wallpaperChangeState++;
+ }
+ break;
+ case 3:
+ if (!UpdatePaletteFade())
+ gPSSData->wallpaperChangeState++;
+ break;
+ case 4:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void LoadWallpaperGfx(u8 boxId, s8 direction)
+{
+ u8 wallpaperId;
+ const struct WallpaperTable *wallpaperGfx;
+ void *iconGfx;
+ u32 size1, size2;
+
+ gPSSData->field_6F9 = 0;
+ gPSSData->field_6FA = boxId;
+ gPSSData->field_6FB = direction;
+ if (gPSSData->field_6FB != 0)
+ {
+ gPSSData->field_2D2 = (gPSSData->field_2D2 == 0);
+ sub_8091A24(gPSSData->field_4AC4);
+ }
+
+ wallpaperId = GetBoxWallpaper(gPSSData->field_6FA);
+ wallpaperGfx = &sWallpaperTable[wallpaperId];
+ LZ77UnCompWram(wallpaperGfx->tileMap, gPSSData->field_792);
+ sub_8091984(gPSSData->field_4AC4, gPSSData->field_792, gPSSData->field_6FB, gPSSData->field_2D2);
+
+ if (gPSSData->field_6FB != 0)
+ LoadPalette(wallpaperGfx->palettes, (gPSSData->field_2D2 * 32) + 0x40, 0x40);
+ else
+ CpuCopy16(wallpaperGfx->palettes, &gPlttBufferUnfaded[(gPSSData->field_2D2 * 32) + 0x40], 0x40);
+
+ DecompressAndLoadBgGfxUsingHeap(2, wallpaperGfx->tiles, 0, 256 * gPSSData->field_2D2, 0);
+
+ CopyBgTilemapBufferToVram(2);
+}
+
+static bool32 WaitForWallpaperGfxLoad(void)
+{
+ if (IsDma3ManagerBusyWithBgCopy() == TRUE)
+ return FALSE;
+
+ return TRUE;
+}
+
+static void sub_8091984(void *buffer, const void *tilemap, s8 direction, u8 arg2)
+{
+ s16 var = (arg2 * 2) + 3;
+ s16 x = ((gPSSData->bg2_X / 8 + 10) + (direction * 24)) & 0x3F;
+
+ CopyRectToBgTilemapBufferRect(2, tilemap, 0, 0, 0x14, 0x12, x, 2, 0x14, 0x12, 0x11, arg2 << 8, var);
+
+ if (direction == 0)
+ return;
+ else if (direction > 0)
+ x *= 1, x += 0x14; // x * 1 is needed to match, but can be safely removed as it makes no functional difference
+ else
+ x -= 4;
+
+ FillBgTilemapBufferRect(2, 0, x, 2, 4, 0x12, 0x11);
+}
+
+static void sub_8091A24(void *arg0)
+{
+ u16 i;
+ u16 *dest = arg0;
+ s16 r3 = ((gPSSData->bg2_X / 8) + 30) & 0x3F;
+
+ if (r3 <= 31)
+ dest += r3 + 0x260;
+ else
+ dest += r3 + 0x640;
+
+ for (i = 0; i < 0x2C; i++)
+ {
+ *dest++ = 0;
+ r3 = (r3 + 1) & 0x3F;
+ if (r3 == 0)
+ dest -= 0x420;
+ if (r3 == 0x20)
+ dest += 0x3e0;
+ }
+}
+
+static void sub_8091A94(u8 boxId)
+{
+ u8 tagIndex;
+ s16 r6;
+ u16 i;
+
+ struct SpriteSheet spriteSheet = {gPSSData->field_2F8, 0x200, TAG_TILE_3};
+ struct SpritePalette palettes[] = {
+ {gPSSData->field_6FC, TAG_PAL_DAC9},
+ {}
+ };
+
+ u16 wallpaperId = GetBoxWallpaper(boxId);
+
+ gPSSData->field_6FC[14] = gUnknown_83D29D0[wallpaperId][0];
+ gPSSData->field_6FC[15] = gUnknown_83D29D0[wallpaperId][1];
+ LoadSpritePalettes(palettes);
+ gPSSData->field_738 = 0x3f0;
+
+ tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9);
+ gPSSData->field_71C = 0x10e + 16 * tagIndex;
+ gPSSData->field_738 |= 0x10000 << tagIndex;
+
+ tagIndex = IndexOfSpritePaletteTag(TAG_PAL_DAC9);
+ gPSSData->field_71E = 0x10e + 16 * tagIndex;
+ gPSSData->field_738 |= 0x10000 << tagIndex;
+
+ StringCopyPadded(gPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8);
+ DrawTextWindowAndBufferTiles(gPSSData->field_21B8, gPSSData->field_2F8, 0, 0, gPSSData->field_4F8, 2);
+ LoadSpriteSheet(&spriteSheet);
+ r6 = sub_8091F60(GetBoxNamePtr(boxId));
+
+ for (i = 0; i < 2; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_83D2B7C, r6 + i * 32, 28, 24);
+ gPSSData->field_720[i] = &gSprites[spriteId];
+ StartSpriteAnim(gPSSData->field_720[i], i);
+ }
+ gPSSData->field_6F8 = 0;
+}
+
+static void sub_8091C48(u8 boxId, s8 direction)
+{
+ u16 r8;
+ s16 x, x2;
+ u16 i;
+ struct SpriteSheet spriteSheet = {gPSSData->field_2F8, 0x200, TAG_TILE_3};
+ struct SpriteTemplate template = gUnknown_83D2B7C;
+
+ gPSSData->field_6F8 = (gPSSData->field_6F8 == 0);
+ if (gPSSData->field_6F8 == 0)
+ {
+ spriteSheet.tag = TAG_TILE_3;
+ r8 = gPSSData->field_71C;
+ }
+ else
+ {
+ spriteSheet.tag = TAG_TILE_4;
+ r8 = gPSSData->field_71C;
+ template.tileTag = TAG_TILE_4;
+ template.paletteTag = TAG_PAL_DAC9;
+ }
+
+ StringCopyPadded(gPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8);
+ DrawTextWindowAndBufferTiles(gPSSData->field_21B8, gPSSData->field_2F8, 0, 0, gPSSData->field_4F8, 2);
+ LoadSpriteSheet(&spriteSheet);
+ LoadPalette(gUnknown_83D29D0[GetBoxWallpaper(boxId)], r8, 4);
+ x = sub_8091F60(GetBoxNamePtr(boxId));
+ x2 = x;
+ x2 += direction * 192;
+
+ for (i = 0; i < 2; i++)
+ {
+ u8 spriteId = CreateSprite(&template, i * 32 + x2, 28, 24);
+
+ gPSSData->field_728[i] = &gSprites[spriteId];
+ gPSSData->field_728[i]->data[0] = (-direction) * 6;
+ gPSSData->field_728[i]->data[1] = i * 32 + x;
+ gPSSData->field_728[i]->data[2] = 0;
+ gPSSData->field_728[i]->callback = sub_8091E84;
+ StartSpriteAnim(gPSSData->field_728[i], i);
+
+ gPSSData->field_720[i]->data[0] = (-direction) * 6;
+ gPSSData->field_720[i]->data[1] = 1;
+ gPSSData->field_720[i]->callback = sub_8091EB8;
+ }
+}
+
+static void sub_8091E34(void)
+{
+ if (gPSSData->field_6F8 == 0)
+ FreeSpriteTilesByTag(TAG_TILE_4);
+ else
+ FreeSpriteTilesByTag(TAG_TILE_3);
+
+ gPSSData->field_720[0] = gPSSData->field_728[0];
+ gPSSData->field_720[1] = gPSSData->field_728[1];
+}
+
+static void sub_8091E84(struct Sprite *sprite)
+{
+ if (sprite->data[2] != 0)
+ sprite->data[2]--;
+ else if ((sprite->pos1.x += sprite->data[0]) == sprite->data[1])
+ sprite->callback = SpriteCallbackDummy;
+}
+
+static void sub_8091EB8(struct Sprite *sprite)
+{
+ if (sprite->data[1] != 0)
+ {
+ sprite->data[1]--;
+ }
+ else
+ {
+ sprite->pos1.x += sprite->data[0];
+ sprite->data[2] = sprite->pos1.x + sprite->pos2.x;
+ if (sprite->data[2] < 0x40 || sprite->data[2] > 0x100)
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_8091EF0(void)
+{
+ u8 boxId = StorageGetCurrentBox();
+ u8 wallpaperId = GetBoxWallpaper(boxId);
+ if (gPSSData->field_6F8 == 0)
+ CpuCopy16(gUnknown_83D29D0[wallpaperId], gPlttBufferUnfaded + gPSSData->field_71C, 4);
+ else
+ CpuCopy16(gUnknown_83D29D0[wallpaperId], gPlttBufferUnfaded + gPSSData->field_71E, 4);
+}
+
+static s16 sub_8091F60(const u8 *string)
+{
+ return 0xB0 - GetStringWidth(1, string, 0) / 2;
+}
+
+static void sub_8091F80(void)
+{
+ u16 i;
+
+ LoadSpriteSheet(&gUnknown_83D2B54);
+ for (i = 0; i < 2; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_83D2BB4, 0x5c + i * 0x88, 28, 22);
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+ StartSpriteAnim(sprite, i);
+ sprite->data[3] = (i == 0) ? -1 : 1;
+ gPSSData->field_730[i] = sprite;
+ }
+ }
+ if (IsCursorOnBox())
+ sub_80920FC(TRUE);
+}
+
+static void sub_809200C(s8 direction)
+{
+ u16 i;
+
+ for (i = 0; i < 2; i++)
+ {
+ gPSSData->field_730[i]->pos2.x = 0;
+ gPSSData->field_730[i]->data[0] = 2;
+ }
+ if (direction < 0)
+ {
+ gPSSData->field_730[0]->data[1] = 29;
+ gPSSData->field_730[1]->data[1] = 5;
+ gPSSData->field_730[0]->data[2] = 0x48;
+ gPSSData->field_730[1]->data[2] = 0x48;
+ }
+ else
+ {
+ gPSSData->field_730[0]->data[1] = 5;
+ gPSSData->field_730[1]->data[1] = 29;
+ gPSSData->field_730[0]->data[2] = 0xF8;
+ gPSSData->field_730[1]->data[2] = 0xF8;
+ }
+ gPSSData->field_730[0]->data[7] = 0;
+ gPSSData->field_730[1]->data[7] = 1;
+}
+
+static void sub_80920AC(void)
+{
+ u16 i;
+
+ for (i = 0; i < 2; i++)
+ {
+ gPSSData->field_730[i]->pos1.x = 0x88 * i + 0x5c;
+ gPSSData->field_730[i]->pos2.x = 0;
+ gPSSData->field_730[i]->invisible = FALSE;
+ }
+ sub_80920FC(TRUE);
+}
+
+void sub_80920FC(bool8 a0)
+{
+ u16 i;
+
+ if (a0)
+ {
+ for (i = 0; i < 2; i++)
+ {
+ gPSSData->field_730[i]->data[0] = 1;
+ gPSSData->field_730[i]->data[1] = 0;
+ gPSSData->field_730[i]->data[2] = 0;
+ gPSSData->field_730[i]->data[4] = 0;
+ }
+ }
+ else
+ {
+ for (i = 0; i < 2; i++)
+ {
+ gPSSData->field_730[i]->data[0] = 0;
+ }
+ }
+}
+
+static void sub_8092164(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos2.x = 0;
+ break;
+ case 1:
+ if (++sprite->data[1] > 3)
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.x += sprite->data[3];
+ if (++sprite->data[2] > 5)
+ {
+ sprite->data[2] = 0;
+ sprite->pos2.x = 0;
+ }
+ }
+ break;
+ case 2:
+ sprite->data[0] = 3;
+ break;
+ case 3:
+ sprite->pos1.x -= gPSSData->field_2CE;
+ if (sprite->pos1.x < 73 || sprite->pos1.x > 247)
+ sprite->invisible = TRUE;
+ if (--sprite->data[1] == 0)
+ {
+ sprite->pos1.x = sprite->data[2];
+ sprite->invisible = FALSE;
+ sprite->data[0] = 4;
+ }
+ break;
+ case 4:
+ sprite->pos1.x -= gPSSData->field_2CE;
+ break;
+ }
+}
+
+struct Sprite *sub_809223C(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority)
+{
+ u8 spriteId = CreateSprite(&gUnknown_83D2BB4, x, y, subpriority);
+ if (spriteId == MAX_SPRITES)
+ return NULL;
+
+ animId %= 2;
+ StartSpriteAnim(&gSprites[spriteId], animId);
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ return &gSprites[spriteId];
+}
diff --git a/src/pokemon_storage_system_5.c b/src/pokemon_storage_system_5.c
new file mode 100644
index 000000000..a977d0118
--- /dev/null
+++ b/src/pokemon_storage_system_5.c
@@ -0,0 +1,2036 @@
+#include "global.h"
+#include "gflib.h"
+#include "data.h"
+#include "item.h"
+#include "mail_data.h"
+#include "pokemon_storage_system_internal.h"
+#include "pokemon_summary_screen.h"
+#include "strings.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+
+static EWRAM_DATA struct Pokemon gUnknown_20397BC = {};
+static EWRAM_DATA s8 sBoxCursorArea = 0;
+static EWRAM_DATA s8 sBoxCursorPosition = 0;
+static EWRAM_DATA bool8 sIsMonBeingMoved = FALSE;
+static EWRAM_DATA u8 sMovingMonOrigBoxId = 0;
+static EWRAM_DATA u8 sMovingMonOrigBoxPos = 0;
+static EWRAM_DATA bool8 sCanOnlyMove = FALSE;
+static EWRAM_DATA u8 gUnknown_2039826 = 0;
+
+static void sub_80929B0(void);
+static bool8 MonPlaceChange_Move(void);
+static bool8 MonPlaceChange_Place(void);
+static bool8 MonPlaceChange_Shift(void);
+static bool8 sub_8092E00(void);
+static bool8 sub_8092E10(void);
+static bool8 sub_8092E20(void);
+static bool8 sub_8092E54(void);
+static void MoveMon(void);
+static void PlaceMon(void);
+static void SetMovedMonData(u8 boxId, u8 cursorPos);
+static void SetPlacedMonData(u8 boxId, u8 cursorPos);
+static void PurgeMonOrBoxMon(u8 boxId, u8 cursorPos);
+static void SetShiftedMonData(u8 boxId, u8 cursorPos);
+static void sub_8093A10(void);
+static void SetCursorMonData(void * cursorMon, u8 mode);
+static void sub_8093AAC(void);
+static u8 InBoxInput_Normal(void);
+static u8 InBoxInput_GrabbingMultiple(void);
+static u8 InBoxInput_MovingMultiple(void);
+static void AddBoxMenu(void);
+static bool8 sub_8094924(void);
+static bool8 sub_809494C(void);
+static bool8 sub_8094A0C(void);
+static void sub_8094AD8(void);
+static void sub_8094C84(void);
+
+static const u16 sHandCursorPalette[] = INCBIN_U16("graphics/interface/pss_unk_83D2BCC.gbapal");
+static const u16 sHandCursorTiles[] = INCBIN_U16("graphics/interface/pss_unk_83D2BEC.4bpp");
+static const u16 sHandCursorShadowTiles[] = INCBIN_U16("graphics/interface/pss_unk_83D33EC.4bpp");
+
+void sub_80922C0(void)
+{
+ if (gPSSData->boxOption != BOX_OPTION_DEPOSIT)
+ sBoxCursorArea = CURSOR_AREA_IN_BOX;
+ else
+ sBoxCursorArea = CURSOR_AREA_IN_PARTY;
+
+ sBoxCursorPosition = 0;
+ sIsMonBeingMoved = FALSE;
+ sMovingMonOrigBoxId = 0;
+ sMovingMonOrigBoxPos = 0;
+ sCanOnlyMove = FALSE;
+ sub_8092B50();
+ sub_8094AD8();
+ gPSSData->field_CD6 = 1;
+ gPSSData->inBoxMovingMode = 0;
+ sub_8093A10();
+}
+
+void sub_8092340(void)
+{
+ sub_8094AD8();
+ sub_8093AAC();
+ gPSSData->field_CD6 = 1;
+ gPSSData->inBoxMovingMode = 0;
+ if (sIsMonBeingMoved)
+ {
+ gPSSData->movingMon = gUnknown_20397BC;
+ CreateMovingMonIcon();
+ }
+}
+
+static void sub_8092398(u8 cursorArea, u8 cursorPosition, u16 *x, u16 *y)
+{
+ switch (cursorArea)
+ {
+ case CURSOR_AREA_IN_BOX:
+ *x = (cursorPosition % IN_BOX_ROWS) * 24 + 100;
+ *y = (cursorPosition / IN_BOX_ROWS) * 24 + 32;
+ break;
+ case CURSOR_AREA_IN_PARTY:
+ if (cursorPosition == 0)
+ {
+ *x = 0x68;
+ *y = 0x34;
+ }
+ else if (cursorPosition == PARTY_SIZE)
+ {
+ *x = 0x98;
+ *y = 0x84;
+ }
+ else
+ {
+ *x = 0x98;
+ *y = (cursorPosition - 1) * 24 + 4;
+ }
+ break;
+ case CURSOR_AREA_BOX:
+ *x = 0xa2;
+ *y = 0x0c;
+ break;
+ case CURSOR_AREA_BUTTONS:
+ *y = sIsMonBeingMoved ? 8 : 14;
+ *x = cursorPosition * 0x58 + 0x78;
+ break;
+ case 4:
+ *x = 0xa0;
+ *y = 0x60;
+ break;
+ }
+}
+
+static u16 sub_8092458(void)
+{
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ return GetMonData(&gPlayerParty[sBoxCursorPosition], MON_DATA_SPECIES);
+ case CURSOR_AREA_IN_BOX:
+ return GetCurrentBoxMonData(sBoxCursorPosition, MON_DATA_SPECIES);
+ default:
+ return SPECIES_NONE;
+ }
+}
+
+bool8 sub_80924A8(void)
+{
+ s16 tmp;
+
+ if (gPSSData->field_CD0 == 0)
+ {
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return FALSE;
+ else
+ return sub_809610C();
+ }
+ else if (--gPSSData->field_CD0 != 0)
+ {
+ gPSSData->field_CBC += gPSSData->field_CC4;
+ gPSSData->field_CC0 += gPSSData->field_CC8;
+ gPSSData->field_CB4->pos1.x = gPSSData->field_CBC >> 8;
+ gPSSData->field_CB4->pos1.y = gPSSData->field_CC0 >> 8;
+ if (gPSSData->field_CB4->pos1.x > 0x100)
+ {
+ tmp = gPSSData->field_CB4->pos1.x - 0x100;
+ gPSSData->field_CB4->pos1.x = tmp + 0x40;
+ }
+ if (gPSSData->field_CB4->pos1.x < 0x40)
+ {
+ tmp = 0x40 - gPSSData->field_CB4->pos1.x;
+ gPSSData->field_CB4->pos1.x = 0x100 - tmp;
+ }
+ if (gPSSData->field_CB4->pos1.y > 0xb0)
+ {
+ tmp = gPSSData->field_CB4->pos1.y - 0xb0;
+ gPSSData->field_CB4->pos1.y = tmp - 0x10;
+ }
+ if (gPSSData->field_CB4->pos1.y < -0x10)
+ {
+ tmp = -0x10 - gPSSData->field_CB4->pos1.y;
+ gPSSData->field_CB4->pos1.y = 0xb0 - tmp;
+ }
+ if (gPSSData->field_CD7 && --gPSSData->field_CD7 == 0)
+ gPSSData->field_CB4->vFlip = (gPSSData->field_CB4->vFlip == FALSE);
+ }
+ else
+ {
+ gPSSData->field_CB4->pos1.x = gPSSData->field_CCC;
+ gPSSData->field_CB4->pos1.y = gPSSData->field_CCE;
+ sub_80929B0();
+ }
+
+ return TRUE;
+}
+
+static void sub_8092604(u8 newCurosrArea, u8 newCursorPosition)
+{
+ u16 x, y;
+
+ sub_8092398(newCurosrArea, newCursorPosition, &x, &y);
+ gPSSData->field_CD4 = newCurosrArea;
+ gPSSData->field_CD5 = newCursorPosition;
+ gPSSData->field_CCC = x;
+ gPSSData->field_CCE = y;
+}
+
+static void sub_8092660(void)
+{
+ int r7, r0;
+
+ if (gPSSData->field_CD2 != 0 || gPSSData->field_CD3 != 0)
+ gPSSData->field_CD0 = 12;
+ else
+ gPSSData->field_CD0 = 6;
+
+ if (gPSSData->field_CD7)
+ gPSSData->field_CD7 = gPSSData->field_CD0 >> 1;
+
+ switch (gPSSData->field_CD2)
+ {
+ default:
+ r7 = gPSSData->field_CCE - gPSSData->field_CB4->pos1.y;
+ break;
+ case -1:
+ r7 = gPSSData->field_CCE - 0xc0 - gPSSData->field_CB4->pos1.y;
+ break;
+ case 1:
+ r7 = gPSSData->field_CCE + 0xc0 - gPSSData->field_CB4->pos1.y;
+ break;
+ }
+
+ switch (gPSSData->field_CD3)
+ {
+ default:
+ r0 = gPSSData->field_CCC - gPSSData->field_CB4->pos1.x;
+ break;
+ case -1:
+ r0 = gPSSData->field_CCC - 0xc0 - gPSSData->field_CB4->pos1.x;
+ break;
+ case 1:
+ r0 = gPSSData->field_CCC + 0xc0 - gPSSData->field_CB4->pos1.x;
+ break;
+ }
+
+ r7 <<= 8;
+ r0 <<= 8;
+ gPSSData->field_CC4 = r0 / gPSSData->field_CD0;
+ gPSSData->field_CC8 = r7 / gPSSData->field_CD0;
+ gPSSData->field_CBC = gPSSData->field_CB4->pos1.x << 8;
+ gPSSData->field_CC0 = gPSSData->field_CB4->pos1.y << 8;
+}
+
+static void sub_80927E8(u8 newCurosrArea, u8 newCursorPosition)
+{
+ sub_8092604(newCurosrArea, newCursorPosition);
+ sub_8092660();
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ if (gPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved)
+ StartSpriteAnim(gPSSData->field_CB4, 1);
+ }
+ else
+ {
+ if (!IsActiveItemMoving())
+ StartSpriteAnim(gPSSData->field_CB4, 1);
+ }
+
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
+ sub_8095D44(CURSOR_AREA_IN_BOX, sBoxCursorPosition);
+ else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ sub_8095D44(CURSOR_AREA_IN_PARTY, sBoxCursorPosition);
+
+ if (newCurosrArea == CURSOR_AREA_IN_BOX)
+ sub_8095C84(newCurosrArea, newCursorPosition);
+ else if (newCurosrArea == CURSOR_AREA_IN_PARTY)
+ sub_8095C84(newCurosrArea, newCursorPosition);
+ }
+
+ if (newCurosrArea == CURSOR_AREA_IN_PARTY && sBoxCursorArea != CURSOR_AREA_IN_PARTY)
+ {
+ gPSSData->field_CD6 = newCurosrArea;
+ gPSSData->field_CB8->invisible = TRUE;
+ }
+
+ switch (newCurosrArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ case CURSOR_AREA_BOX:
+ case CURSOR_AREA_BUTTONS:
+ gPSSData->field_CB4->oam.priority = 1;
+ gPSSData->field_CB8->invisible = TRUE;
+ gPSSData->field_CB8->oam.priority = 1;
+ break;
+ case CURSOR_AREA_IN_BOX:
+ if (gPSSData->inBoxMovingMode != 0)
+ {
+ gPSSData->field_CB4->oam.priority = 0;
+ gPSSData->field_CB8->invisible = TRUE;
+ }
+ else
+ {
+ gPSSData->field_CB4->oam.priority = 2;
+ if (sBoxCursorArea == CURSOR_AREA_IN_BOX && sIsMonBeingMoved)
+ SetMovingMonPriority(2);
+ }
+ break;
+ }
+}
+
+static void sub_80929B0(void)
+{
+ sBoxCursorArea = gPSSData->field_CD4;
+ sBoxCursorPosition = gPSSData->field_CD5;
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ if (gPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved)
+ StartSpriteAnim(gPSSData->field_CB4, 1);
+ }
+ else
+ {
+ if (!IsActiveItemMoving())
+ StartSpriteAnim(gPSSData->field_CB4, 1);
+ }
+
+ sub_8093A10();
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_BUTTONS:
+ SetMovingMonPriority(1);
+ break;
+ case CURSOR_AREA_BOX:
+ sub_80920FC(TRUE);
+ break;
+ case CURSOR_AREA_IN_PARTY:
+ gPSSData->field_CB8->subpriority = 13;
+ SetMovingMonPriority(1);
+ break;
+ case CURSOR_AREA_IN_BOX:
+ if (gPSSData->inBoxMovingMode == 0)
+ {
+ gPSSData->field_CB4->oam.priority = 1;
+ gPSSData->field_CB8->oam.priority = 2;
+ gPSSData->field_CB8->subpriority = 21;
+ gPSSData->field_CB8->invisible = FALSE;
+ SetMovingMonPriority(2);
+ }
+ break;
+ }
+}
+
+void sub_8092AE4(void)
+{
+ u8 partyCount;
+
+ if (!sIsMonBeingMoved)
+ {
+ partyCount = 0;
+ }
+ else
+ {
+ partyCount = CalculatePlayerPartyCount();
+ if (partyCount >= PARTY_SIZE)
+ partyCount = PARTY_SIZE - 1;
+ }
+ if (gPSSData->field_CB4->vFlip)
+ gPSSData->field_CD7 = 1;
+ sub_80927E8(CURSOR_AREA_IN_PARTY, partyCount);
+}
+
+void sub_8092B3C(u8 cursorBoxPosition)
+{
+ sub_80927E8(CURSOR_AREA_IN_BOX, cursorBoxPosition);
+}
+
+void sub_8092B50(void)
+{
+ gUnknown_2039826 = 0;
+}
+
+void sub_8092B5C(void)
+{
+ gUnknown_2039826 = sBoxCursorPosition;
+}
+
+u8 sub_8092B70(void)
+{
+ return gUnknown_2039826;
+}
+
+void InitMonPlaceChange(u8 a0)
+{
+ static bool8 (*const placeChangeFuncs[])(void) = {
+ MonPlaceChange_Move,
+ MonPlaceChange_Place,
+ MonPlaceChange_Shift,
+ };
+
+ gPSSData->monPlaceChangeFunc = placeChangeFuncs[a0];
+ gPSSData->monPlaceChangeState = 0;
+}
+
+void sub_8092BAC(bool8 arg0)
+{
+ if (!arg0)
+ gPSSData->monPlaceChangeFunc = sub_8092E00;
+ else
+ gPSSData->monPlaceChangeFunc = sub_8092E10;
+
+ gPSSData->monPlaceChangeState = 0;
+}
+
+bool8 DoMonPlaceChange(void)
+{
+ return gPSSData->monPlaceChangeFunc();
+}
+
+static bool8 MonPlaceChange_Move(void)
+{
+ switch (gPSSData->monPlaceChangeState)
+ {
+ case 0:
+ if (sIsMonBeingMoved)
+ return FALSE;
+ StartSpriteAnim(gPSSData->field_CB4, 2);
+ gPSSData->monPlaceChangeState++;
+ break;
+ case 1:
+ if (!sub_8092E20())
+ {
+ StartSpriteAnim(gPSSData->field_CB4, 3);
+ MoveMon();
+ gPSSData->monPlaceChangeState++;
+ }
+ break;
+ case 2:
+ if (!sub_8092E54())
+ gPSSData->monPlaceChangeState++;
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 MonPlaceChange_Place(void)
+{
+ switch (gPSSData->monPlaceChangeState)
+ {
+ case 0:
+ if (!sub_8092E20())
+ {
+ StartSpriteAnim(gPSSData->field_CB4, 2);
+ PlaceMon();
+ gPSSData->monPlaceChangeState++;
+ }
+ break;
+ case 1:
+ if (!sub_8092E54())
+ {
+ StartSpriteAnim(gPSSData->field_CB4, 0);
+ gPSSData->monPlaceChangeState++;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 MonPlaceChange_Shift(void)
+{
+ switch (gPSSData->monPlaceChangeState)
+ {
+ case 0:
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ gPSSData->field_D91 = TOTAL_BOXES_COUNT;
+ break;
+ case CURSOR_AREA_IN_BOX:
+ gPSSData->field_D91 = StorageGetCurrentBox();
+ break;
+ default:
+ return FALSE;
+ }
+ StartSpriteAnim(gPSSData->field_CB4, 2);
+ sub_8090E08(gPSSData->field_D91, sBoxCursorPosition);
+ gPSSData->monPlaceChangeState++;
+ break;
+ case 1:
+ if (!sub_8090E74())
+ {
+ StartSpriteAnim(gPSSData->field_CB4, 3);
+ SetShiftedMonData(gPSSData->field_D91, sBoxCursorPosition);
+ gPSSData->monPlaceChangeState++;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_8092E00(void)
+{
+ return sub_8092E20();
+}
+
+static bool8 sub_8092E10(void)
+{
+ return sub_8092E54();
+}
+
+static bool8 sub_8092E20(void)
+{
+ switch (gPSSData->field_CB4->pos2.y)
+ {
+ default:
+ gPSSData->field_CB4->pos2.y++;
+ break;
+ case 0:
+ gPSSData->field_CB4->pos2.y++;
+ break;
+ case 8:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_8092E54(void)
+{
+ switch (gPSSData->field_CB4->pos2.y)
+ {
+ case 0:
+ return FALSE;
+ default:
+ gPSSData->field_CB4->pos2.y--;
+ break;
+ }
+
+ return TRUE;
+}
+
+static void MoveMon(void)
+{
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ SetMovedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ sub_8090CC0(MODE_PARTY, sBoxCursorPosition);
+ break;
+ case CURSOR_AREA_IN_BOX:
+ if (gPSSData->inBoxMovingMode == 0)
+ {
+ SetMovedMonData(StorageGetCurrentBox(), sBoxCursorPosition);
+ sub_8090CC0(MODE_BOX, sBoxCursorPosition);
+ }
+ break;
+ default:
+ return;
+ }
+
+ sIsMonBeingMoved = TRUE;
+}
+
+static void PlaceMon(void)
+{
+ u8 boxId;
+
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ SetPlacedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ sub_8090D58(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ break;
+ case CURSOR_AREA_IN_BOX:
+ boxId = StorageGetCurrentBox();
+ SetPlacedMonData(boxId, sBoxCursorPosition);
+ sub_8090D58(boxId, sBoxCursorPosition);
+ break;
+ default:
+ return;
+ }
+
+ sIsMonBeingMoved = FALSE;
+}
+
+void sub_8092F54(void)
+{
+ sub_8093A10();
+}
+
+static void SetMovedMonData(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT)
+ gPSSData->movingMon = gPlayerParty[sBoxCursorPosition];
+ else
+ BoxMonAtToMon(boxId, position, &gPSSData->movingMon);
+
+ PurgeMonOrBoxMon(boxId, position);
+ sMovingMonOrigBoxId = boxId;
+ sMovingMonOrigBoxPos = position;
+}
+
+static void SetPlacedMonData(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT)
+ {
+ gPlayerParty[position] = gPSSData->movingMon;
+ }
+ else
+ {
+ BoxMonRestorePP(&gPSSData->movingMon.box);
+ SetBoxMonAt(boxId, position, &gPSSData->movingMon.box);
+ }
+}
+
+static void PurgeMonOrBoxMon(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT)
+ ZeroMonData(&gPlayerParty[position]);
+ else
+ ZeroBoxMonAt(boxId, position);
+}
+
+static void SetShiftedMonData(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT)
+ gPSSData->field_2108 = gPlayerParty[position];
+ else
+ BoxMonAtToMon(boxId, position, &gPSSData->field_2108);
+
+ SetPlacedMonData(boxId, position);
+ gPSSData->movingMon = gPSSData->field_2108;
+ SetCursorMonData(&gPSSData->movingMon, MODE_PARTY);
+ sMovingMonOrigBoxId = boxId;
+ sMovingMonOrigBoxPos = position;
+}
+
+bool8 TryStorePartyMonInBox(u8 boxId)
+{
+ s16 boxPosition = GetFirstFreeBoxSpot(boxId);
+ if (boxPosition == -1)
+ return FALSE;
+
+ if (sIsMonBeingMoved)
+ {
+ SetPlacedMonData(boxId, boxPosition);
+ DestroyMovingMonIcon();
+ sIsMonBeingMoved = FALSE;
+ }
+ else
+ {
+ SetMovedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ SetPlacedMonData(boxId, boxPosition);
+ DestroyPartyMonIcon(sBoxCursorPosition);
+ }
+
+ if (boxId == StorageGetCurrentBox())
+ sub_80901EC(boxPosition);
+
+ StartSpriteAnim(gPSSData->field_CB4, 1);
+ return TRUE;
+}
+
+void sub_8093174(void)
+{
+ StartSpriteAnim(gPSSData->field_CB4, 0);
+ sub_8093A10();
+}
+
+void sub_8093194(void)
+{
+ u8 mode;
+
+ if (sIsMonBeingMoved)
+ mode = MODE_2;
+ else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ mode = MODE_PARTY;
+ else
+ mode = MODE_BOX;
+
+ sub_8090FC4(mode, sBoxCursorPosition);
+ StringCopy(gPSSData->field_21E0, gPSSData->cursorMonNick);
+}
+
+bool8 sub_80931EC(void)
+{
+ if (!sub_8091084())
+ {
+ StartSpriteAnim(gPSSData->field_CB4, 0);
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+void ReleaseMon(void)
+{
+ u8 boxId;
+
+ sub_80910CC();
+ if (sIsMonBeingMoved)
+ {
+ sIsMonBeingMoved = FALSE;
+ }
+ else
+ {
+ if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ boxId = TOTAL_BOXES_COUNT;
+ else
+ boxId = StorageGetCurrentBox();
+
+ PurgeMonOrBoxMon(boxId, sBoxCursorPosition);
+ }
+ sub_8093A10();
+}
+
+void sub_8093264(void)
+{
+ if (sIsMonBeingMoved)
+ StartSpriteAnim(gPSSData->field_CB4, 3);
+}
+
+void InitCanReleaseMonVars(void)
+{
+ u16 knownIdx;
+ if (sIsMonBeingMoved)
+ {
+ gPSSData->field_2108 = gPSSData->movingMon;
+ gPSSData->field_2170 = -1;
+ gPSSData->field_2171 = -1;
+ }
+ else
+ {
+ if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ {
+ gPSSData->field_2108 = gPlayerParty[sBoxCursorPosition];
+ gPSSData->field_2170 = TOTAL_BOXES_COUNT;
+ }
+ else
+ {
+ BoxMonAtToMon(StorageGetCurrentBox(), sBoxCursorPosition, &gPSSData->field_2108);
+ gPSSData->field_2170 = StorageGetCurrentBox();
+ }
+ gPSSData->field_2171 = sBoxCursorPosition;
+ }
+
+ gPSSData->isSurfMon = FALSE;
+ gPSSData->isDiveMon = FALSE;
+ gPSSData->field_2176[0] = MOVE_SURF;
+ gPSSData->field_2176[1] = MOVE_DIVE;
+ gPSSData->field_2176[2] = MOVES_COUNT;
+ knownIdx = GetMonData(&gPSSData->field_2108, MON_DATA_KNOWN_MOVES, (u8*)gPSSData->field_2176);
+ gPSSData->isSurfMon = knownIdx & 1;
+ gPSSData->isDiveMon = (knownIdx >> 1) & 1;
+ if (gPSSData->isSurfMon || gPSSData->isDiveMon)
+ {
+ gPSSData->field_216D = 0;
+ }
+ else
+ {
+ gPSSData->field_216D = 1;
+ gPSSData->field_216C = 1;
+ }
+
+ gPSSData->field_2172 = 0;
+}
+
+s8 RunCanReleaseMon(void)
+{
+ u16 i;
+ u16 knownMoves;
+
+ if (gPSSData->field_216D)
+ return gPSSData->field_216C;
+
+ switch (gPSSData->field_2172)
+ {
+ case 0:
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (gPSSData->field_2170 != TOTAL_BOXES_COUNT || gPSSData->field_2171 != i)
+ {
+ knownMoves = GetMonData(gPlayerParty + i, MON_DATA_KNOWN_MOVES, (u8*)gPSSData->field_2176);
+ if (knownMoves & 1)
+ gPSSData->isSurfMon = FALSE;
+ if (knownMoves & 2)
+ gPSSData->isDiveMon = FALSE;
+ }
+ }
+ if (!(gPSSData->isSurfMon || gPSSData->isDiveMon))
+ {
+ gPSSData->field_216D = 1;
+ gPSSData->field_216C = 1;
+ }
+ else
+ {
+ gPSSData->field_216E = 0;
+ gPSSData->field_216F = 0;
+ gPSSData->field_2172++;
+ }
+ break;
+ case 1:
+ for (i = 0; i < 5; i++)
+ {
+ knownMoves = GetAndCopyBoxMonDataAt(gPSSData->field_216E, gPSSData->field_216F, MON_DATA_KNOWN_MOVES, (u8*)gPSSData->field_2176);
+ if (knownMoves != 0
+ && !(gPSSData->field_2170 == gPSSData->field_216E && gPSSData->field_2171 == gPSSData->field_216F))
+ {
+ if (knownMoves & 1)
+ gPSSData->isSurfMon = FALSE;
+ if (knownMoves & 2)
+ gPSSData->isDiveMon = FALSE;
+ }
+ if (++gPSSData->field_216F >= IN_BOX_COUNT)
+ {
+ gPSSData->field_216F = 0;
+ if (++gPSSData->field_216E >= TOTAL_BOXES_COUNT)
+ {
+ gPSSData->field_216D = 1;
+ gPSSData->field_216C = 0;
+ break;
+ }
+ }
+ }
+ if (!(gPSSData->isSurfMon || gPSSData->isDiveMon))
+ {
+ gPSSData->field_216D = 1;
+ gPSSData->field_216C = 1;
+ }
+ break;
+ }
+
+ return -1;
+}
+
+void sub_8093630(void)
+{
+ if (sIsMonBeingMoved)
+ gUnknown_20397BC = gPSSData->movingMon;
+}
+
+void sub_8093660(void)
+{
+ if (sIsMonBeingMoved)
+ {
+ if (sMovingMonOrigBoxId == TOTAL_BOXES_COUNT)
+ gPSSData->movingMon = gUnknown_20397BC;
+ else
+ gPSSData->movingMon.box = gUnknown_20397BC.box;
+ }
+}
+
+void sub_80936B8(void)
+{
+ if (sIsMonBeingMoved)
+ {
+ sub_8093630();
+ gPSSData->field_218C.mon = &gUnknown_20397BC;
+ gPSSData->field_2187 = 0;
+ gPSSData->field_2186 = 0;
+ gPSSData->field_2188 = 0;
+ }
+ else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ {
+ gPSSData->field_218C.mon = gPlayerParty;
+ gPSSData->field_2187 = sBoxCursorPosition;
+ gPSSData->field_2186 = CountPartyMons() - 1;
+ gPSSData->field_2188 = 0;
+ }
+ else
+ {
+ gPSSData->field_218C.box = GetBoxedMonPtr(StorageGetCurrentBox(), 0);
+ gPSSData->field_2187 = sBoxCursorPosition;
+ gPSSData->field_2186 = IN_BOX_COUNT - 1;
+ gPSSData->field_2188 = 5;
+ }
+}
+
+void sub_80937B4(void)
+{
+ if (sIsMonBeingMoved)
+ sub_8093660();
+ else
+ sBoxCursorPosition = GetLastViewedMonIndex();
+}
+
+// file boundary maybe?
+
+s16 CompactPartySlots(void)
+{
+ s16 retVal = -1;
+ u16 i, last;
+
+ for (i = 0, last = 0; i < PARTY_SIZE; i++)
+ {
+ u16 species = GetMonData(gPlayerParty + i, MON_DATA_SPECIES);
+ if (species != SPECIES_NONE)
+ {
+ if (i != last)
+ gPlayerParty[last] = gPlayerParty[i];
+ last++;
+ }
+ else if (retVal == -1)
+ {
+ retVal = i;
+ }
+ }
+ for (; last < PARTY_SIZE; last++)
+ ZeroMonData(gPlayerParty + last);
+
+ return retVal;
+}
+
+void SetMonMarkings(u8 markings)
+{
+ gPSSData->cursorMonMarkings = markings;
+ if (sIsMonBeingMoved)
+ {
+ SetMonData(&gPSSData->movingMon, MON_DATA_MARKINGS, &markings);
+ }
+ else
+ {
+ if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ SetMonData(gPlayerParty + sBoxCursorPosition, MON_DATA_MARKINGS, &markings);
+ if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
+ SetCurrentBoxMonData(sBoxCursorPosition, MON_DATA_MARKINGS, &markings);
+ }
+}
+
+bool8 CanMovePartyMon(void)
+{
+ if (sBoxCursorArea == CURSOR_AREA_IN_PARTY && !sIsMonBeingMoved && CountPartyAliveNonEggMonsExcept(sBoxCursorPosition) == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 CanShiftMon(void)
+{
+ if (sIsMonBeingMoved)
+ {
+ if (sBoxCursorArea == CURSOR_AREA_IN_PARTY && CountPartyAliveNonEggMonsExcept(sBoxCursorPosition) == 0)
+ {
+ if (gPSSData->cursorMonIsEgg || GetMonData(&gPSSData->movingMon, MON_DATA_HP) == 0)
+ return FALSE;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 IsMonBeingMoved(void)
+{
+ return sIsMonBeingMoved;
+}
+
+bool8 IsCursorOnBox(void)
+{
+ return (sBoxCursorArea == CURSOR_AREA_BOX);
+}
+
+bool8 IsCursorOnCloseBox(void)
+{
+ return (sBoxCursorArea == CURSOR_AREA_BUTTONS && sBoxCursorPosition == 1);
+}
+
+bool8 IsCursorInBox(void)
+{
+ return (sBoxCursorArea == CURSOR_AREA_IN_BOX);
+}
+
+static void sub_8093A10(void)
+{
+ gPSSData->setMosaic = (sIsMonBeingMoved == FALSE);
+ if (!sIsMonBeingMoved)
+ {
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ if (sBoxCursorPosition < PARTY_SIZE)
+ {
+ SetCursorMonData(&gPlayerParty[sBoxCursorPosition], MODE_PARTY);
+ break;
+ }
+ // fallthrough
+ case CURSOR_AREA_BUTTONS:
+ case CURSOR_AREA_BOX:
+ SetCursorMonData(NULL, MODE_2);
+ break;
+ case CURSOR_AREA_IN_BOX:
+ SetCursorMonData(GetBoxedMonPtr(StorageGetCurrentBox(), sBoxCursorPosition), MODE_BOX);
+ break;
+ }
+ }
+}
+
+static void sub_8093AAC(void)
+{
+ if (sIsMonBeingMoved)
+ SetCursorMonData(&gUnknown_20397BC, MODE_PARTY);
+ else
+ sub_8093A10();
+}
+
+static void SetCursorMonData(void *pokemon, u8 mode)
+{
+ u8 *txtPtr;
+ u16 gender;
+ bool8 sanityIsBagEgg;
+
+ gPSSData->cursorMonItem = 0;
+ gender = MON_MALE;
+ sanityIsBagEgg = FALSE;
+ if (mode == MODE_PARTY)
+ {
+ struct Pokemon *mon = (struct Pokemon *)pokemon;
+
+ gPSSData->cursorMonSpecies = GetMonData(mon, MON_DATA_SPECIES2);
+ if (gPSSData->cursorMonSpecies != SPECIES_NONE)
+ {
+ sanityIsBagEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG);
+ if (sanityIsBagEgg)
+ gPSSData->cursorMonIsEgg = TRUE;
+ else
+ gPSSData->cursorMonIsEgg = GetMonData(mon, MON_DATA_IS_EGG);
+
+ GetMonData(mon, MON_DATA_NICKNAME, gPSSData->cursorMonNick);
+ StringGetEnd10(gPSSData->cursorMonNick);
+ gPSSData->cursorMonLevel = GetMonData(mon, MON_DATA_LEVEL);
+ gPSSData->cursorMonMarkings = GetMonData(mon, MON_DATA_MARKINGS);
+ gPSSData->cursorMonPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
+ gPSSData->cursorMonPalette = GetMonFrontSpritePal(mon);
+ gender = GetMonGender(mon);
+ gPSSData->cursorMonItem = GetMonData(mon, MON_DATA_HELD_ITEM);
+ }
+ }
+ else if (mode == MODE_BOX)
+ {
+ struct BoxPokemon *boxMon = (struct BoxPokemon *)pokemon;
+
+ gPSSData->cursorMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES2);
+ if (gPSSData->cursorMonSpecies != SPECIES_NONE)
+ {
+ u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID);
+ sanityIsBagEgg = GetBoxMonData(boxMon, MON_DATA_SANITY_IS_BAD_EGG);
+ if (sanityIsBagEgg)
+ gPSSData->cursorMonIsEgg = TRUE;
+ else
+ gPSSData->cursorMonIsEgg = GetBoxMonData(boxMon, MON_DATA_IS_EGG);
+
+
+ GetBoxMonData(boxMon, MON_DATA_NICKNAME, gPSSData->cursorMonNick);
+ StringGetEnd10(gPSSData->cursorMonNick);
+ gPSSData->cursorMonLevel = GetLevelFromBoxMonExp(boxMon);
+ gPSSData->cursorMonMarkings = GetBoxMonData(boxMon, MON_DATA_MARKINGS);
+ gPSSData->cursorMonPersonality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY);
+ gPSSData->cursorMonPalette = GetMonSpritePalFromSpeciesAndPersonality(gPSSData->cursorMonSpecies, otId, gPSSData->cursorMonPersonality);
+ gender = GetGenderFromSpeciesAndPersonality(gPSSData->cursorMonSpecies, gPSSData->cursorMonPersonality);
+ gPSSData->cursorMonItem = GetBoxMonData(boxMon, MON_DATA_HELD_ITEM);
+ }
+ }
+ else
+ {
+ gPSSData->cursorMonSpecies = SPECIES_NONE;
+ gPSSData->cursorMonItem = 0;
+ }
+
+ if (gPSSData->cursorMonSpecies == SPECIES_NONE)
+ {
+ StringFill(gPSSData->cursorMonNick, CHAR_SPACE, 5);
+ StringFill(gPSSData->cursorMonTexts[0], CHAR_SPACE, 8);
+ StringFill(gPSSData->cursorMonTexts[1], CHAR_SPACE, 8);
+ StringFill(gPSSData->cursorMonTexts[2], CHAR_SPACE, 8);
+ StringFill(gPSSData->cursorMonTexts[3], CHAR_SPACE, 8);
+ }
+ else if (gPSSData->cursorMonIsEgg)
+ {
+ if (sanityIsBagEgg)
+ StringCopyPadded(gPSSData->cursorMonTexts[0], gPSSData->cursorMonNick, CHAR_SPACE, 5);
+ else
+ StringCopyPadded(gPSSData->cursorMonTexts[0], gText_EggNickname, CHAR_SPACE, 8);
+
+ StringFill(gPSSData->cursorMonTexts[1], CHAR_SPACE, 8);
+ StringFill(gPSSData->cursorMonTexts[2], CHAR_SPACE, 8);
+ StringFill(gPSSData->cursorMonTexts[3], CHAR_SPACE, 8);
+ }
+ else
+ {
+ if (gPSSData->cursorMonSpecies == SPECIES_NIDORAN_F || gPSSData->cursorMonSpecies == SPECIES_NIDORAN_M)
+ gender = MON_GENDERLESS;
+
+ StringCopyPadded(gPSSData->cursorMonTexts[0], gPSSData->cursorMonNick, CHAR_SPACE, 5);
+
+ txtPtr = gPSSData->cursorMonTexts[1];
+ *(txtPtr)++ = CHAR_SLASH;
+ StringCopyPadded(txtPtr, gSpeciesNames[gPSSData->cursorMonSpecies], CHAR_SPACE, 5);
+
+ txtPtr = gPSSData->cursorMonTexts[2];
+ *(txtPtr)++ = EXT_CTRL_CODE_BEGIN;
+ *(txtPtr)++ = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ switch (gender)
+ {
+ case MON_MALE:
+ *(txtPtr)++ = TEXT_COLOR_RED;
+ *(txtPtr)++ = TEXT_COLOR_WHITE;
+ *(txtPtr)++ = TEXT_COLOR_LIGHT_RED;
+ *(txtPtr)++ = CHAR_MALE;
+ break;
+ case MON_FEMALE:
+ *(txtPtr)++ = TEXT_COLOR_GREEN;
+ *(txtPtr)++ = TEXT_COLOR_WHITE;
+ *(txtPtr)++ = TEXT_COLOR_LIGHT_GREEN;
+ *(txtPtr)++ = CHAR_FEMALE;
+ break;
+ default:
+ *(txtPtr)++ = TEXT_COLOR_DARK_GREY;
+ *(txtPtr)++ = TEXT_COLOR_WHITE;
+ *(txtPtr)++ = TEXT_COLOR_LIGHT_GREY;
+ *(txtPtr)++ = CHAR_SPACE;
+ break;
+ }
+
+ *(txtPtr++) = EXT_CTRL_CODE_BEGIN;
+ *(txtPtr++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW;
+ *(txtPtr++) = TEXT_COLOR_DARK_GREY;
+ *(txtPtr++) = TEXT_COLOR_WHITE;
+ *(txtPtr++) = TEXT_COLOR_LIGHT_GREY;
+ *(txtPtr++) = CHAR_SPACE;
+ *(txtPtr++) = CHAR_EXTRA_EMOJI;
+ *(txtPtr++) = 5; // LV_2
+
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, gPSSData->cursorMonLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
+ txtPtr[0] = CHAR_SPACE;
+ txtPtr[1] = EOS;
+
+ if (gPSSData->cursorMonItem != 0)
+ StringCopyPadded(gPSSData->cursorMonTexts[3], ItemId_GetName(gPSSData->cursorMonItem), CHAR_SPACE, 8);
+ else
+ StringFill(gPSSData->cursorMonTexts[3], CHAR_SPACE, 8);
+ }
+}
+
+static u8 HandleInput_InBox(void)
+{
+ switch (gPSSData->inBoxMovingMode)
+ {
+ case 0:
+ default:
+ return InBoxInput_Normal();
+ case 1:
+ return InBoxInput_GrabbingMultiple();
+ case 2:
+ return InBoxInput_MovingMultiple();
+ }
+}
+
+static u8 InBoxInput_Normal(void)
+{
+ u8 retVal;
+ s8 cursorArea;
+ s8 cursorPosition;
+
+ do
+ {
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ gPSSData->field_CD2 = 0;
+ gPSSData->field_CD3 = 0;
+ gPSSData->field_CD7 = 0;
+ if (JOY_REPT(DPAD_UP))
+ {
+ retVal = TRUE;
+ if (sBoxCursorPosition >= IN_BOX_ROWS)
+ {
+ cursorPosition -= IN_BOX_ROWS;
+ }
+ else
+ {
+ cursorArea = CURSOR_AREA_BOX;
+ cursorPosition = 0;
+ }
+ break;
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ retVal = TRUE;
+ cursorPosition += IN_BOX_ROWS;
+ if (cursorPosition >= IN_BOX_COUNT)
+ {
+ cursorArea = CURSOR_AREA_BUTTONS;
+ cursorPosition -= IN_BOX_COUNT;
+ cursorPosition /= 3;
+ gPSSData->field_CD2 = 1;
+ gPSSData->field_CD7 = 1;
+ }
+ break;
+ }
+ else if (JOY_REPT(DPAD_LEFT))
+ {
+ retVal = TRUE;
+ if (sBoxCursorPosition % IN_BOX_ROWS != 0)
+ {
+ cursorPosition--;
+ }
+ else
+ {
+ gPSSData->field_CD3 = -1;
+ cursorPosition += (IN_BOX_ROWS - 1);
+ }
+ break;
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ retVal = TRUE;
+ if ((sBoxCursorPosition + 1) % IN_BOX_ROWS != 0)
+ {
+ cursorPosition++;
+ }
+ else
+ {
+ gPSSData->field_CD3 = 1;
+ cursorPosition -= (IN_BOX_ROWS - 1);
+ }
+ break;
+ }
+ else if (JOY_NEW(START_BUTTON))
+ {
+ retVal = TRUE;
+ cursorArea = CURSOR_AREA_BOX;
+ cursorPosition = 0;
+ break;
+ }
+
+ if ((JOY_NEW(A_BUTTON)) && sub_8094924())
+ {
+ if (!sCanOnlyMove)
+ return 8;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_MONS || sIsMonBeingMoved == TRUE)
+ {
+ switch (sub_8094E50(0))
+ {
+ case PC_TEXT_STORE:
+ return 11;
+ case PC_TEXT_WITHDRAW:
+ return 12;
+ case PC_TEXT_MOVE:
+ return 13;
+ case PC_TEXT_SHIFT:
+ return 14;
+ case PC_TEXT_PLACE:
+ return 15;
+ case PC_TEXT_TAKE:
+ return 16;
+ case PC_TEXT_GIVE:
+ return 17;
+ case PC_TEXT_SWITCH:
+ return 18;
+ }
+ }
+ else
+ {
+ gPSSData->inBoxMovingMode = 1;
+ return 20;
+ }
+ }
+
+ if (JOY_NEW(B_BUTTON))
+ return 19;
+
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (JOY_HELD(L_BUTTON))
+ return 10;
+ if (JOY_HELD(R_BUTTON))
+ return 9;
+ }
+
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_8094C84();
+ return 0;
+ }
+
+ retVal = 0;
+
+ } while (0);
+
+ if (retVal)
+ sub_80927E8(cursorArea, cursorPosition);
+
+ return retVal;
+}
+
+static u8 InBoxInput_GrabbingMultiple(void)
+{
+ if (JOY_HELD(A_BUTTON))
+ {
+ if (JOY_REPT(DPAD_UP))
+ {
+ if (sBoxCursorPosition / IN_BOX_ROWS != 0)
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition - IN_BOX_ROWS);
+ return 21;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ if (sBoxCursorPosition + IN_BOX_ROWS < IN_BOX_COUNT)
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition + IN_BOX_ROWS);
+ return 21;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_LEFT))
+ {
+ if (sBoxCursorPosition % IN_BOX_ROWS != 0)
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition - 1);
+ return 21;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ if ((sBoxCursorPosition + 1) % IN_BOX_ROWS != 0)
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition + 1);
+ return 21;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ else
+ {
+ if (sub_8095AA0() == sBoxCursorPosition)
+ {
+ gPSSData->inBoxMovingMode = 0;
+ gPSSData->field_CB8->invisible = FALSE;
+ return 22;
+ }
+ else
+ {
+ sIsMonBeingMoved = (gPSSData->cursorMonSpecies != SPECIES_NONE);
+ gPSSData->inBoxMovingMode = 2;
+ sMovingMonOrigBoxId = StorageGetCurrentBox();
+ return 23;
+ }
+ }
+}
+
+static u8 InBoxInput_MovingMultiple(void)
+{
+ if (JOY_REPT(DPAD_UP))
+ {
+ if (sub_8095474(0))
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition - IN_BOX_ROWS);
+ return 25;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ if (sub_8095474(1))
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition + IN_BOX_ROWS);
+ return 25;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_LEFT))
+ {
+ if (sub_8095474(2))
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition - 1);
+ return 25;
+ }
+ else
+ {
+ return 10;
+ }
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ if (sub_8095474(3))
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition + 1);
+ return 25;
+ }
+ else
+ {
+ return 9;
+ }
+ }
+ else if (JOY_NEW(A_BUTTON))
+ {
+ if (sub_8095ABC())
+ {
+ sIsMonBeingMoved = FALSE;
+ gPSSData->inBoxMovingMode = 0;
+ return 26;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return 24;
+ }
+ else
+ {
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (JOY_HELD(L_BUTTON))
+ return 10;
+ if (JOY_HELD(R_BUTTON))
+ return 9;
+ }
+
+ return 0;
+ }
+}
+
+static u8 HandleInput_InParty(void)
+{
+ u8 retVal;
+ bool8 gotoBox;
+ s8 cursorArea;
+ s8 cursorPosition;
+
+ do
+ {
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ gPSSData->field_CD3 = 0;
+ gPSSData->field_CD2 = 0;
+ gPSSData->field_CD7 = 0;
+ gotoBox = FALSE;
+ retVal = 0;
+
+ if (JOY_REPT(DPAD_UP))
+ {
+ if (--cursorPosition < 0)
+ cursorPosition = PARTY_SIZE;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ if (++cursorPosition > PARTY_SIZE)
+ cursorPosition = 0;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_LEFT) && sBoxCursorPosition != 0)
+ {
+ retVal = 1;
+ gPSSData->field_CD6 = sBoxCursorPosition;
+ cursorPosition = 0;
+ break;
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ if (sBoxCursorPosition == 0)
+ {
+ retVal = 1;
+ cursorPosition = gPSSData->field_CD6;
+ }
+ else
+ {
+ retVal = 6;
+ cursorArea = CURSOR_AREA_IN_BOX;
+ cursorPosition = 0;
+ }
+ break;
+ }
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ if (sBoxCursorPosition == PARTY_SIZE)
+ {
+ if (gPSSData->boxOption == BOX_OPTION_DEPOSIT)
+ return 4;
+
+ gotoBox = TRUE;
+ }
+ else if (sub_8094924())
+ {
+ if (!sCanOnlyMove)
+ return 8;
+
+ switch (sub_8094E50(0))
+ {
+ case PC_TEXT_STORE:
+ return 11;
+ case PC_TEXT_WITHDRAW:
+ return 12;
+ case PC_TEXT_MOVE:
+ return 13;
+ case PC_TEXT_SHIFT:
+ return 14;
+ case PC_TEXT_PLACE:
+ return 15;
+ case PC_TEXT_TAKE:
+ return 16;
+ case PC_TEXT_GIVE:
+ return 17;
+ case PC_TEXT_SWITCH:
+ return 18;
+ }
+ }
+ }
+
+ if (JOY_NEW(B_BUTTON))
+ {
+ if (gPSSData->boxOption == BOX_OPTION_DEPOSIT)
+ return 19;
+
+ gotoBox = TRUE;
+ }
+
+ if (gotoBox)
+ {
+ retVal = 6;
+ cursorArea = CURSOR_AREA_IN_BOX;
+ cursorPosition = 0;
+ }
+ else if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_8094C84();
+ return 0;
+ }
+
+ } while (0);
+
+ if (retVal != 0)
+ {
+ if (retVal != 6)
+ sub_80927E8(cursorArea, cursorPosition);
+ }
+
+ return retVal;
+}
+
+static u8 HandleInput_OnBox(void)
+{
+ u8 retVal;
+ s8 cursorArea;
+ s8 cursorPosition;
+
+ do
+ {
+ gPSSData->field_CD3 = 0;
+ gPSSData->field_CD2 = 0;
+ gPSSData->field_CD7 = 0;
+
+ if (JOY_REPT(DPAD_UP))
+ {
+ retVal = 1;
+ cursorArea = CURSOR_AREA_BUTTONS;
+ cursorPosition = 0;
+ gPSSData->field_CD7 = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ retVal = 1;
+ cursorArea = CURSOR_AREA_IN_BOX;
+ cursorPosition = 2;
+ break;
+ }
+
+ if (JOY_HELD(DPAD_LEFT))
+ return 10;
+ if (JOY_HELD(DPAD_RIGHT))
+ return 9;
+
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (JOY_HELD(L_BUTTON))
+ return 10;
+ if (JOY_HELD(R_BUTTON))
+ return 9;
+ }
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ sub_80920FC(FALSE);
+ AddBoxMenu();
+ return 7;
+ }
+
+ if (JOY_NEW(B_BUTTON))
+ return 19;
+
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_8094C84();
+ return 0;
+ }
+
+ retVal = 0;
+
+ } while (0);
+
+ if (retVal)
+ {
+ if (cursorArea != CURSOR_AREA_BOX)
+ sub_80920FC(FALSE);
+ sub_80927E8(cursorArea, cursorPosition);
+ }
+
+ return retVal;
+}
+
+static u8 HandleInput_OnButtons(void)
+{
+ u8 retVal;
+ s8 cursorArea;
+ s8 cursorPosition;
+ s8 prevPos;
+
+ do
+ {
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ gPSSData->field_CD3 = 0;
+ gPSSData->field_CD2 = 0;
+ gPSSData->field_CD7 = 0;
+
+ if (JOY_REPT(DPAD_UP))
+ {
+ retVal = 1;
+ cursorArea = CURSOR_AREA_IN_BOX;
+ gPSSData->field_CD2 = -1;
+ if (sBoxCursorPosition == 0)
+ cursorPosition = IN_BOX_COUNT - 1 - 5;
+ else
+ cursorPosition = IN_BOX_COUNT - 1;
+ gPSSData->field_CD7 = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_DOWN | START_BUTTON))
+ {
+ retVal = 1;
+ cursorArea = CURSOR_AREA_BOX;
+ cursorPosition = 0;
+ gPSSData->field_CD7 = 1;
+ break;
+ }
+
+ if (JOY_REPT(DPAD_LEFT))
+ {
+ retVal = 1;
+ if (--cursorPosition < 0)
+ cursorPosition = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ retVal = 1;
+ if (++cursorPosition > 1)
+ cursorPosition = 0;
+ break;
+ }
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ return cursorPosition == 0 ? 5 : 4;
+ }
+ if (JOY_NEW(B_BUTTON))
+ return 19;
+
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_8094C84();
+ return 0;
+ }
+
+ retVal = 0;
+ } while (0);
+
+ if (retVal != 0)
+ sub_80927E8(cursorArea, cursorPosition);
+
+ return retVal;
+}
+
+u8 HandleInput(void)
+{
+ struct
+ {
+ u8 (*func)(void);
+ s8 area;
+ }
+ static const inputFuncs[] = {
+ {HandleInput_InBox, CURSOR_AREA_IN_BOX},
+ {HandleInput_InParty, CURSOR_AREA_IN_PARTY},
+ {HandleInput_OnBox, CURSOR_AREA_BOX},
+ {HandleInput_OnButtons, CURSOR_AREA_BUTTONS},
+ {NULL, 0},
+ };
+
+ u16 i = 0;
+ while (inputFuncs[i].func != NULL)
+ {
+ if (inputFuncs[i].area == sBoxCursorArea)
+ return inputFuncs[i].func();
+ i++;
+ }
+
+ return 0;
+}
+
+static void AddBoxMenu(void)
+{
+ InitMenu();
+ SetMenuText(PC_TEXT_JUMP);
+ SetMenuText(PC_TEXT_WALLPAPER);
+ SetMenuText(PC_TEXT_NAME);
+ SetMenuText(PC_TEXT_CANCEL);
+}
+
+static bool8 sub_8094924(void)
+{
+ InitMenu();
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return sub_809494C();
+ else
+ return sub_8094A0C();
+}
+
+static bool8 sub_809494C(void)
+{
+ u16 var0 = sub_8092458();
+
+ switch (gPSSData->boxOption)
+ {
+ case BOX_OPTION_DEPOSIT:
+ if (var0)
+ SetMenuText(PC_TEXT_STORE);
+ else
+ return FALSE;
+ break;
+ case BOX_OPTION_WITHDRAW:
+ if (var0)
+ SetMenuText(PC_TEXT_WITHDRAW);
+ else
+ return FALSE;
+ break;
+ case BOX_OPTION_MOVE_MONS:
+ if (sIsMonBeingMoved)
+ {
+ if (var0)
+ SetMenuText(PC_TEXT_SHIFT);
+ else
+ SetMenuText(PC_TEXT_PLACE);
+ }
+ else
+ {
+ if (var0)
+ SetMenuText(PC_TEXT_MOVE);
+ else
+ return FALSE;
+ }
+ break;
+ case BOX_OPTION_MOVE_ITEMS:
+ default:
+ return FALSE;
+ }
+
+ SetMenuText(PC_TEXT_SUMMARY);
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_MONS)
+ {
+ if (!sBoxCursorArea)
+ SetMenuText(PC_TEXT_WITHDRAW);
+ else
+ SetMenuText(PC_TEXT_STORE);
+ }
+
+ SetMenuText(PC_TEXT_MARK);
+ SetMenuText(PC_TEXT_RELEASE);
+ SetMenuText(PC_TEXT_CANCEL);
+ return TRUE;
+}
+
+static bool8 sub_8094A0C(void)
+{
+ if (gPSSData->cursorMonSpecies == SPECIES_EGG)
+ return FALSE;
+
+ if (!IsActiveItemMoving())
+ {
+ if (gPSSData->cursorMonItem == ITEM_NONE)
+ {
+ if (gPSSData->cursorMonSpecies == SPECIES_NONE)
+ return FALSE;
+
+ SetMenuText(PC_TEXT_GIVE2);
+ }
+ else
+ {
+ if (!ItemIsMail(gPSSData->cursorMonItem))
+ {
+ SetMenuText(PC_TEXT_TAKE);
+ SetMenuText(PC_TEXT_BAG);
+ }
+ SetMenuText(PC_TEXT_INFO);
+ }
+ }
+ else
+ {
+ if (gPSSData->cursorMonItem == ITEM_NONE)
+ {
+ if (gPSSData->cursorMonSpecies == SPECIES_NONE)
+ return FALSE;
+
+ SetMenuText(PC_TEXT_GIVE);
+ }
+ else
+ {
+ if (ItemIsMail(gPSSData->cursorMonItem) == TRUE)
+ return FALSE;
+
+ SetMenuText(PC_TEXT_SWITCH);
+ }
+ }
+
+ SetMenuText(PC_TEXT_CANCEL);
+ return TRUE;
+}
+
+static void sub_8094AB8(struct Sprite *sprite)
+{
+ sprite->pos1.x = gPSSData->field_CB4->pos1.x;
+ sprite->pos1.y = gPSSData->field_CB4->pos1.y + 20;
+}
+
+static void sub_8094AD8(void)
+{
+ u16 x, y;
+ u8 spriteId;
+ u8 priority, subpriority;
+ struct SpriteSheet spriteSheets[] = {
+ {sHandCursorTiles, 0x800, TAG_TILE_0},
+ {sHandCursorShadowTiles, 0x80, TAG_TILE_1},
+ {}
+ };
+
+ struct SpritePalette spritePalettes[] = {
+ {sHandCursorPalette, TAG_PAL_DAC7},
+ {}
+ };
+
+ static const struct OamData sOamData_857BA0C = {
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .priority = 1,
+ };
+ static const struct OamData sOamData_857BA14 = {
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .priority = 1,
+ };
+
+ static const union AnimCmd sSpriteAnim_857BA1C[] = {
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_FRAME(16, 30),
+ ANIMCMD_JUMP(0)
+ };
+ static const union AnimCmd sSpriteAnim_857BA28[] = {
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+ };
+ static const union AnimCmd sSpriteAnim_857BA30[] = {
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+ };
+ static const union AnimCmd sSpriteAnim_857BA38[] = {
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END
+ };
+
+ static const union AnimCmd *const sSpriteAnimTable_857BA40[] = {
+ sSpriteAnim_857BA1C,
+ sSpriteAnim_857BA28,
+ sSpriteAnim_857BA30,
+ sSpriteAnim_857BA38
+ };
+
+ static const struct SpriteTemplate gSpriteTemplate_857BA50 = {
+ .tileTag = TAG_TILE_0,
+ .paletteTag = TAG_PAL_WAVEFORM,
+ .oam = &sOamData_857BA0C,
+ .anims = sSpriteAnimTable_857BA40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ };
+
+ static const struct SpriteTemplate gSpriteTemplate_857BA68 = {
+ .tileTag = TAG_TILE_1,
+ .paletteTag = TAG_PAL_WAVEFORM,
+ .oam = &sOamData_857BA14,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8094AB8,
+ };
+
+ LoadSpriteSheets(spriteSheets);
+ LoadSpritePalettes(spritePalettes);
+ gPSSData->field_CD8[0] = IndexOfSpritePaletteTag(TAG_PAL_WAVEFORM);
+ gPSSData->field_CD8[1] = IndexOfSpritePaletteTag(TAG_PAL_DAC7);
+
+ sub_8092398(sBoxCursorArea, sBoxCursorPosition, &x, &y);
+ spriteId = CreateSprite(&gSpriteTemplate_857BA50, x, y, 6);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPSSData->field_CB4 = &gSprites[spriteId];
+ gPSSData->field_CB4->oam.paletteNum = gPSSData->field_CD8[sCanOnlyMove];
+ gPSSData->field_CB4->oam.priority = 1;
+ if (sIsMonBeingMoved)
+ StartSpriteAnim(gPSSData->field_CB4, 3);
+ }
+ else
+ {
+ gPSSData->field_CB4 = NULL;
+ }
+
+ if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ {
+ subpriority = 13;
+ priority = 1;
+ }
+ else
+ {
+ subpriority = 21;
+ priority = 2;
+ }
+
+ spriteId = CreateSprite(&gSpriteTemplate_857BA68, 0, 0, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPSSData->field_CB8 = &gSprites[spriteId];
+ gPSSData->field_CB8->oam.priority = priority;
+ if (sBoxCursorArea)
+ gPSSData->field_CB8->invisible = 1;
+ }
+ else
+ {
+ gPSSData->field_CB8 = NULL;
+ }
+}
+
+static void sub_8094C84(void)
+{
+ sCanOnlyMove = !sCanOnlyMove;
+ gPSSData->field_CB4->oam.paletteNum = gPSSData->field_CD8[sCanOnlyMove];
+}
+
+u8 GetBoxCursorPosition(void)
+{
+ return sBoxCursorPosition;
+}
+
+void sub_8094CD4(u8 *arg0, u8 *arg1)
+{
+ if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
+ {
+ *arg0 = sBoxCursorPosition % IN_BOX_ROWS;
+ *arg1 = sBoxCursorPosition / IN_BOX_ROWS;
+ }
+ else
+ {
+ *arg0 = 0;
+ *arg1 = 0;
+ }
+}
+
+void sub_8094D14(u8 animNum)
+{
+ StartSpriteAnim(gPSSData->field_CB4, animNum);
+}
+
+u8 sub_8094D34(void)
+{
+ return sMovingMonOrigBoxId;
+}
+
+void sub_8094D40(void)
+{
+ gPSSData->field_CB4->oam.priority = 1;
+}
+
+void sub_8094D60(void)
+{
+ if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
+ sub_8095D44(CURSOR_AREA_IN_BOX, sBoxCursorPosition);
+}
+
+void sub_8094D84(void)
+{
+ if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
+ sub_8095C84(CURSOR_AREA_IN_BOX, sBoxCursorPosition);
+}
diff --git a/src/pokemon_storage_system_6.c b/src/pokemon_storage_system_6.c
new file mode 100644
index 000000000..a1d3af8f2
--- /dev/null
+++ b/src/pokemon_storage_system_6.c
@@ -0,0 +1,147 @@
+#include "global.h"
+#include "gflib.h"
+#include "menu.h"
+#include "new_menu_helpers.h"
+#include "pokemon_storage_system_internal.h"
+#include "strings.h"
+#include "constants/songs.h"
+
+void InitMenu(void)
+{
+ gPSSData->menuItemsCount = 0;
+ gPSSData->menuWidth = 0;
+ gPSSData->menuWindow.bg = 0;
+ gPSSData->menuWindow.paletteNum = 15;
+ gPSSData->menuWindow.baseBlock = 92;
+}
+
+static const u8 *const sMenuTexts[] = {
+ [PC_TEXT_CANCEL] = gPCText_Cancel,
+ [PC_TEXT_STORE] = gPCText_Store,
+ [PC_TEXT_WITHDRAW] = gPCText_Withdraw,
+ [PC_TEXT_MOVE] = gPCText_Move,
+ [PC_TEXT_SHIFT] = gPCText_Shift,
+ [PC_TEXT_PLACE] = gPCText_Place,
+ [PC_TEXT_SUMMARY] = gPCText_Summary,
+ [PC_TEXT_RELEASE] = gPCText_Release,
+ [PC_TEXT_MARK] = gPCText_Mark,
+ [PC_TEXT_JUMP] = gPCText_Jump,
+ [PC_TEXT_WALLPAPER] = gPCText_Wallpaper,
+ [PC_TEXT_NAME] = gPCText_Name,
+ [PC_TEXT_TAKE] = gPCText_Take,
+ [PC_TEXT_GIVE] = gPCText_Give,
+ [PC_TEXT_GIVE2] = gPCText_Give,
+ [PC_TEXT_SWITCH] = gPCText_Switch,
+ [PC_TEXT_BAG] = gPCText_Bag,
+ [PC_TEXT_INFO] = gPCText_Info,
+ [PC_TEXT_SCENERY1] = gPCText_Scenery1,
+ [PC_TEXT_SCENERY2] = gPCText_Scenery2,
+ [PC_TEXT_SCENERY3] = gPCText_Scenery3,
+ [PC_TEXT_ETCETERA] = gPCText_Etcetera,
+ [PC_TEXT_FOREST] = gPCText_Forest,
+ [PC_TEXT_CITY] = gPCText_City,
+ [PC_TEXT_DESERT] = gPCText_Desert,
+ [PC_TEXT_SAVANNA] = gPCText_Savanna,
+ [PC_TEXT_CRAG] = gPCText_Crag,
+ [PC_TEXT_VOLCANO] = gPCText_Volcano,
+ [PC_TEXT_SNOW] = gPCText_Snow,
+ [PC_TEXT_CAVE] = gPCText_Cave,
+ [PC_TEXT_BEACH] = gPCText_Beach,
+ [PC_TEXT_SEAFLOOR] = gPCText_Seafloor,
+ [PC_TEXT_RIVER] = gPCText_River,
+ [PC_TEXT_SKY] = gPCText_Sky,
+ [PC_TEXT_POLKADOT] = gPCText_PolkaDot,
+ [PC_TEXT_POKECENTER] = gPCText_Pokecenter,
+ [PC_TEXT_MACHINE] = gPCText_Machine,
+ [PC_TEXT_SIMPLE] = gPCText_Simple,
+};
+
+void SetMenuText(u8 textId)
+{
+ if (gPSSData->menuItemsCount < MAX_MENU_ITEMS)
+ {
+ u8 len;
+ struct StorageMenu *menu = &gPSSData->menuItems[gPSSData->menuItemsCount];
+
+ menu->text = sMenuTexts[textId];
+ menu->textId = textId;
+ len = StringLength(menu->text);
+ if (len > gPSSData->menuWidth)
+ gPSSData->menuWidth = len;
+
+ gPSSData->menuItemsCount++;
+ }
+}
+
+s8 sub_8094E50(u8 arg0)
+{
+ if (arg0 >= gPSSData->menuItemsCount)
+ return -1;
+ else
+ return gPSSData->menuItems[arg0].textId;
+}
+
+void AddMenu(void)
+{
+ gPSSData->menuWindow.width = gPSSData->menuWidth + 2;
+ gPSSData->menuWindow.height = 2 * gPSSData->menuItemsCount;
+ gPSSData->menuWindow.tilemapLeft = 29 - gPSSData->menuWindow.width;
+ gPSSData->menuWindow.tilemapTop = 15 - gPSSData->menuWindow.height;
+ gPSSData->field_CB0 = AddWindow(&gPSSData->menuWindow);
+ ClearWindowTilemap(gPSSData->field_CB0);
+ DrawStdFrameWithCustomTileAndPalette(gPSSData->field_CB0, FALSE, 0x00b, 14);
+ PrintTextArray(gPSSData->field_CB0, 1, 8, 2, 16, gPSSData->menuItemsCount, (void*)gPSSData->menuItems);
+ Menu_InitCursor(gPSSData->field_CB0, 1, 0, 2, 16, gPSSData->menuItemsCount, 0);
+ ScheduleBgCopyTilemapToVram(0);
+ gPSSData->field_CAE = 0;
+}
+
+bool8 sub_8094F90(void)
+{
+ // Some debug flag?
+ return FALSE;
+}
+
+s16 sub_8094F94(void)
+{
+ s32 textId = -2;
+
+ do
+ {
+ if (JOY_NEW(A_BUTTON))
+ {
+ textId = Menu_GetCursorPos();
+ break;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ textId = -1;
+ }
+
+ if (JOY_NEW(DPAD_UP))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(-1);
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(1);
+ }
+ } while (0);
+
+ if (textId != -2)
+ sub_8095024();
+
+ if (textId >= 0)
+ textId = gPSSData->menuItems[textId].textId;
+
+ return textId;
+}
+
+void sub_8095024(void)
+{
+ ClearStdWindowAndFrameToTransparent(gPSSData->field_CB0, TRUE);
+ RemoveWindow(gPSSData->field_CB0);
+}
diff --git a/src/pokemon_storage_system_7.c b/src/pokemon_storage_system_7.c
new file mode 100644
index 000000000..367477a89
--- /dev/null
+++ b/src/pokemon_storage_system_7.c
@@ -0,0 +1,582 @@
+#include <stdlib.h> // to declare abs
+#include "global.h"
+#include "gflib.h"
+#include "pokemon_icon.h"
+#include "pokemon_storage_system_internal.h"
+#include "text_window.h"
+#include "constants/species.h"
+
+struct MoveMons
+{
+ u8 field_0;
+ u8 state;
+ u8 fromRow;
+ u8 fromColumn;
+ u8 toRow;
+ u8 toColumn;
+ u8 field_6;
+ u8 field_7;
+ u8 minRow;
+ u8 minColumn;
+ u8 rowsTotal;
+ u8 columsTotal;
+ u16 bgX;
+ u16 bgY;
+ u16 field_10;
+ struct BoxPokemon boxMons[IN_BOX_COUNT];
+};
+
+static EWRAM_DATA struct MoveMons *sMoveMonsPtr = NULL;
+
+static bool8 sub_8095138(void);
+static bool8 sub_8095234(void);
+static bool8 sub_80952A0(void);
+static bool8 sub_8095314(void);
+static bool8 sub_8095394(void);
+static bool8 sub_80953BC(void);
+static void sub_8095520(void);
+static void sub_80955C4(u8 arg0, u8 arg1, u8 arg2);
+static void sub_80955FC(u8 arg0, u8 arg1, u8 arg2);
+static void sub_8095634(u8 arg0, u8 arg1, u8 arg2);
+static void sub_809566C(u8 arg0, u8 arg1, u8 arg2);
+static void sub_80956A4(u8 x, u8 y);
+static void sub_809572C(u8 x, u8 y);
+static void sub_8095780(u16 bgX, u16 bgY, u16 duration);
+static u8 sub_8095790(void);
+static void sub_80957C8(void);
+static void sub_80958A0(void);
+static void sub_8095918(void);
+static void sub_80959A8(void);
+static void sub_8095A58(void);
+
+static const struct WindowTemplate gUnknown_83D35D4 = {
+ .bg = 0,
+ .tilemapLeft = 10,
+ .tilemapTop = 3,
+ .width = 20,
+ .height = 18,
+ .paletteNum = 9,
+ .baseBlock = 0x00a
+};
+
+bool8 sub_8095050(void)
+{
+ sMoveMonsPtr = Alloc(sizeof(*sMoveMonsPtr));
+ if (sMoveMonsPtr != NULL)
+ {
+ gPSSData->field_2200 = AddWindow8Bit(&gUnknown_83D35D4);
+ if (gPSSData->field_2200 != 0xFF)
+ {
+ FillWindowPixelBuffer(gPSSData->field_2200, PIXEL_FILL(0));
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+void sub_80950A4(void)
+{
+ if (sMoveMonsPtr != NULL)
+ Free(sMoveMonsPtr);
+}
+
+void sub_80950BC(u8 arg0)
+{
+ sMoveMonsPtr->field_0 = arg0;
+ sMoveMonsPtr->state = 0;
+}
+
+bool8 sub_80950D0(void)
+{
+ switch (sMoveMonsPtr->field_0)
+ {
+ case 0:
+ return sub_8095138();
+ case 1:
+ return sub_8095234();
+ case 2:
+ return sub_80952A0();
+ case 3:
+ return sub_8095314();
+ case 4:
+ return sub_8095394();
+ case 5:
+ return sub_80953BC();
+ }
+
+ return FALSE;
+}
+
+static bool8 sub_8095138(void)
+{
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ HideBg(0);
+ LoadMonIconPalettesAt(0x80);
+ sMoveMonsPtr->state++;
+ break;
+ case 1:
+ sub_8094CD4(&sMoveMonsPtr->fromRow, &sMoveMonsPtr->fromColumn);
+ sMoveMonsPtr->toRow = sMoveMonsPtr->fromRow;
+ sMoveMonsPtr->toColumn = sMoveMonsPtr->fromColumn;
+ ChangeBgX(0, -1024, 0);
+ ChangeBgY(0, -1024, 0);
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
+ FillWindowPixelBuffer8Bit(gPSSData->field_2200, PIXEL_FILL(0));
+ sub_80956A4(sMoveMonsPtr->fromRow, sMoveMonsPtr->fromColumn);
+ SetBgAttribute(0, BG_ATTR_PALETTEMODE, 1);
+ PutWindowTilemap(gPSSData->field_2200);
+ CopyWindowToVram8Bit(gPSSData->field_2200, 3);
+ BlendPalettes(0x3F00, 8, RGB_WHITE);
+ sub_8094D14(2);
+ SetGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR);
+ sMoveMonsPtr->state++;
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ ShowBg(0);
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_8095234(void)
+{
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ HideBg(0);
+ sMoveMonsPtr->state++;
+ break;
+ case 1:
+ sub_8095A58();
+ sub_8094D14(0);
+ sMoveMonsPtr->state++;
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_8094D40();
+ LoadPalette(stdpal_get(3), 0xD0, 0x20);
+ ShowBg(0);
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_80952A0(void)
+{
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ if (!sub_80924A8())
+ {
+ sub_8094CD4(&sMoveMonsPtr->field_6, &sMoveMonsPtr->field_7);
+ sub_8095520();
+ sMoveMonsPtr->toRow = sMoveMonsPtr->field_6;
+ sMoveMonsPtr->toColumn = sMoveMonsPtr->field_7;
+ CopyWindowToVram8Bit(gPSSData->field_2200, 2);
+ sMoveMonsPtr->state++;
+ }
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_8095314(void)
+{
+ u8 var1, var2;
+
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ sub_80957C8();
+ sub_80958A0();
+ sub_8092BAC(FALSE);
+ sMoveMonsPtr->state++;
+ break;
+ case 1:
+ if (!DoMonPlaceChange())
+ {
+ sub_8094D14(3);
+ sub_8095780(0, 256, 8);
+ sub_8092BAC(TRUE);
+ sMoveMonsPtr->state++;
+ }
+ break;
+ case 2:
+ var1 = sub_8095790();
+ var2 = DoMonPlaceChange();
+ if (!var1 && !var2)
+ return FALSE;
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_8095394(void)
+{
+ u8 var1 = sub_80924A8();
+ u8 var2 = sub_8095790();
+
+ if (!var1 && !var2)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static bool8 sub_80953BC(void)
+{
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ sub_80959A8();
+ sub_8095780(0, -256, 8);
+ sub_8092BAC(FALSE);
+ sMoveMonsPtr->state++;
+ break;
+ case 1:
+ if (!DoMonPlaceChange() && !sub_8095790())
+ {
+ sub_8095918();
+ sub_8094D14(2);
+ sub_8092BAC(TRUE);
+ HideBg(0);
+ sMoveMonsPtr->state++;
+ }
+ break;
+ case 2:
+ if (!DoMonPlaceChange())
+ {
+ sub_8094D14(0);
+ sub_8095A58();
+ sMoveMonsPtr->state++;
+ }
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ LoadPalette(stdpal_get(3), 0xD0, 0x20);
+ sub_8094D40();
+ ShowBg(0);
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+bool8 sub_8095474(u8 arg0)
+{
+ switch (arg0)
+ {
+ case 0: // up
+ if (sMoveMonsPtr->minColumn == 0)
+ return FALSE;
+ sMoveMonsPtr->minColumn--;
+ sub_8095780(0, 1024, 6);
+ break;
+ case 1: // down
+ if (sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal >= 5)
+ return FALSE;
+ sMoveMonsPtr->minColumn++;
+ sub_8095780(0, -1024, 6);
+ break;
+ case 2: // left
+ if (sMoveMonsPtr->minRow == 0)
+ return FALSE;
+ sMoveMonsPtr->minRow--;
+ sub_8095780(1024, 0, 6);
+ break;
+ case 3: // right
+ if (sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal > 5)
+ return FALSE;
+ sMoveMonsPtr->minRow++;
+ sub_8095780(-1024, 0, 6);
+ break;
+ }
+
+ return TRUE;
+}
+
+static void sub_8095520(void)
+{
+ s16 var = (abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->field_6)) - (abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->toRow));
+ s16 var2 = (abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->field_7)) - (abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->toColumn));
+
+ if (var > 0)
+ sub_80955C4(sMoveMonsPtr->field_6, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+
+ if (var < 0)
+ {
+ sub_8095634(sMoveMonsPtr->toRow, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+ sub_80955C4(sMoveMonsPtr->field_6, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+ }
+
+ if (var2 > 0)
+ sub_80955FC(sMoveMonsPtr->field_7, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+
+ if (var2 < 0)
+ {
+ sub_809566C(sMoveMonsPtr->toColumn, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+ sub_80955FC(sMoveMonsPtr->field_7, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+ }
+}
+
+static void sub_80955C4(u8 arg0, u8 arg1, u8 arg2)
+{
+ u8 var1 = arg1;
+
+ if (arg1 > arg2)
+ {
+ arg1 = arg2;
+ arg2 = var1;
+ }
+
+ while (arg1 <= arg2)
+ sub_80956A4(arg0, arg1++);
+}
+
+static void sub_80955FC(u8 arg0, u8 arg1, u8 arg2)
+{
+ u8 var1 = arg1;
+
+ if (arg1 > arg2)
+ {
+ arg1 = arg2;
+ arg2 = var1;
+ }
+
+ while (arg1 <= arg2)
+ sub_80956A4(arg1++, arg0);
+}
+
+static void sub_8095634(u8 arg0, u8 arg1, u8 arg2)
+{
+ u8 var1 = arg1;
+
+ if (arg1 > arg2)
+ {
+ arg1 = arg2;
+ arg2 = var1;
+ }
+
+ while (arg1 <= arg2)
+ sub_809572C(arg0, arg1++);
+}
+
+static void sub_809566C(u8 arg0, u8 arg1, u8 arg2)
+{
+ u8 var1 = arg1;
+
+ if (arg1 > arg2)
+ {
+ arg1 = arg2;
+ arg2 = var1;
+ }
+
+ while (arg1 <= arg2)
+ sub_809572C(arg1++, arg0);
+}
+
+static void sub_80956A4(u8 x, u8 y)
+{
+ u8 position = x + (IN_BOX_ROWS * y);
+ u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2);
+ u32 personality = GetCurrentBoxMonData(position, MON_DATA_PERSONALITY);
+
+ if (species != SPECIES_NONE)
+ {
+ const u8 *iconGfx = GetMonIconPtr(species, personality, 1);
+ u8 index = GetValidMonIconPalIndex(species) + 8;
+
+ BlitBitmapRectToWindow4BitTo8Bit(gPSSData->field_2200,
+ iconGfx,
+ 0,
+ 0,
+ 32,
+ 32,
+ 24 * x,
+ 24 * y,
+ 32,
+ 32,
+ index);
+ }
+}
+
+static void sub_809572C(u8 x, u8 y)
+{
+ u8 position = x + (IN_BOX_ROWS * y);
+ u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2);
+
+ if (species != SPECIES_NONE)
+ {
+ FillWindowPixelRect8Bit(gPSSData->field_2200,
+ PIXEL_FILL(0),
+ 24 * x,
+ 24 * y,
+ 32,
+ 32);
+ }
+}
+
+static void sub_8095780(u16 bgX, u16 bgY, u16 duration)
+{
+ sMoveMonsPtr->bgX = bgX;
+ sMoveMonsPtr->bgY = bgY;
+ sMoveMonsPtr->field_10 = duration;
+}
+
+static u8 sub_8095790(void)
+{
+ if (sMoveMonsPtr->field_10 != 0)
+ {
+ ChangeBgX(0, sMoveMonsPtr->bgX, 1);
+ ChangeBgY(0, sMoveMonsPtr->bgY, 1);
+ sMoveMonsPtr->field_10--;
+ }
+
+ return sMoveMonsPtr->field_10;
+}
+
+static void sub_80957C8(void)
+{
+ s32 i, j;
+ s32 rowCount, columnCount;
+ u8 boxId;
+ u8 monArrayId;
+
+ sMoveMonsPtr->minRow = min(sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+ sMoveMonsPtr->minColumn = min(sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+ sMoveMonsPtr->rowsTotal = abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->toRow) + 1;
+ sMoveMonsPtr->columsTotal = abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->toColumn) + 1;
+ boxId = StorageGetCurrentBox();
+ monArrayId = 0;
+ rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ struct BoxPokemon *boxMon = GetBoxedMonPtr(boxId, boxPosition);
+
+ sMoveMonsPtr->boxMons[monArrayId] = *boxMon;
+ monArrayId++;
+ boxPosition++;
+ }
+ }
+}
+
+static void sub_80958A0(void)
+{
+ s32 i, j;
+ s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ u8 boxId = StorageGetCurrentBox();
+
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ DestroyBoxMonIconAtPosition(boxPosition);
+ ZeroBoxMonAt(boxId, boxPosition);
+ boxPosition++;
+ }
+ }
+}
+
+static void sub_8095918(void)
+{
+ s32 i, j;
+ s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ u8 monArrayId = 0;
+
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
+ sub_80901EC(boxPosition);
+ monArrayId++;
+ boxPosition++;
+ }
+ }
+}
+
+static void sub_80959A8(void)
+{
+ s32 i, j;
+ s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ u8 boxId = StorageGetCurrentBox();
+ u8 monArrayId = 0;
+
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
+ SetBoxMonAt(boxId, boxPosition, &sMoveMonsPtr->boxMons[monArrayId]);
+ boxPosition++;
+ monArrayId++;
+ }
+ }
+}
+
+static void sub_8095A58(void)
+{
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ SetBgAttribute(0, BG_ATTR_PALETTEMODE, 0);
+ ClearGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR);
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
+ CopyBgTilemapBufferToVram(0);
+}
+
+u8 sub_8095AA0(void)
+{
+ return (IN_BOX_ROWS * sMoveMonsPtr->fromColumn) + sMoveMonsPtr->fromRow;
+}
+
+bool8 sub_8095ABC(void)
+{
+ s32 i, j;
+ s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ u8 monArrayId = 0;
+
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES)
+ && GetCurrentBoxMonData(boxPosition, MON_DATA_SANITY_HAS_SPECIES))
+ return FALSE;
+
+ monArrayId++;
+ boxPosition++;
+ }
+ }
+
+ return TRUE;
+}
diff --git a/src/pokemon_storage_system_8.c b/src/pokemon_storage_system_8.c
new file mode 100644
index 000000000..3e9c27555
--- /dev/null
+++ b/src/pokemon_storage_system_8.c
@@ -0,0 +1,755 @@
+#include "global.h"
+#include "gflib.h"
+#include "decompress.h"
+#include "item.h"
+#include "item_menu_icons.h"
+#include "menu.h"
+#include "new_menu_helpers.h"
+#include "pokemon_storage_system_internal.h"
+#include "trig.h"
+#include "constants/items.h"
+
+static u8 sub_80961D8(void);
+static bool32 sub_8096210(u8 cursorArea, u8 cursorPos);
+static u8 sub_8096258(u8 cursorArea, u8 cursorPos);
+static void sub_80962F0(u8 id, u8 cursorArea, u8 cursorPos);
+static void sub_8096408(u8 id, const u32 * tiles, const u32 * pal);
+static void sub_80964B8(u8 id, u8 affineAnimNo);
+static void sub_80964E8(u8 id, u8 command, u8 cursorArea, u8 cursorPos);
+static void sub_8096624(u8 id, bool8 show);
+static const u32 *GetItemIconPic(u16 itemId);
+static const u32 *GetItemIconPalette(u16 itemId);
+static void sub_8096898(u32 x);
+static void sub_809692C(struct Sprite * sprite);
+static void sub_8096958(struct Sprite * sprite);
+static void sub_80969BC(struct Sprite * sprite);
+static void sub_80969F4(struct Sprite * sprite);
+static void sub_8096A74(struct Sprite * sprite);
+static void sub_8096B10(struct Sprite * sprite);
+static void sub_8096BAC(struct Sprite * sprite);
+
+static const u32 gUnknown_83D35DC[] = INCBIN_U32("graphics/interface/pss_unk_83D35DC.4bpp");
+
+static const struct OamData gUnknown_83D365C = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_NORMAL,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0x000,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AffineAnimCmd gUnknown_83D3664[] = {
+ AFFINEANIMCMD_FRAME(128, 128, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gUnknown_83D3674[] = {
+ AFFINEANIMCMD_FRAME(88, 88, 0, 0),
+ AFFINEANIMCMD_FRAME(5, 5, 0, 8),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gUnknown_83D368C[] = {
+ AFFINEANIMCMD_FRAME(128, 128, 0, 0),
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 8),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gUnknown_83D36A4[] = {
+ AFFINEANIMCMD_FRAME(128, 128, 0, 0),
+ AFFINEANIMCMD_FRAME(10, 10, 0, 12),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gUnknown_83D36C4[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 12),
+ AFFINEANIMCMD_FRAME(128, 128, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gUnknown_83D36E4[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 16),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gUnknown_83D36FC[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const gUnknown_83D370C[] = {
+ gUnknown_83D3664,
+ gUnknown_83D3674,
+ gUnknown_83D368C,
+ gUnknown_83D36A4,
+ gUnknown_83D36C4,
+ gUnknown_83D36E4,
+ gUnknown_83D36FC
+};
+
+static const struct SpriteTemplate gUnknown_83D3728 = {
+ .tileTag = TAG_TILE_7,
+ .paletteTag = TAG_PAL_DACB,
+ .oam = &gUnknown_83D365C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_83D370C,
+ .callback = SpriteCallbackDummy,
+};
+
+void sub_8095B5C(void)
+{
+ s32 i;
+ u8 spriteId;
+ struct CompressedSpriteSheet spriteSheet;
+ struct SpriteTemplate spriteTemplate;
+ static u32 gUnknown_3000FE8[0x61];
+
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ spriteSheet.data = gUnknown_3000FE8;
+ spriteSheet.size = 0x200;
+ spriteTemplate = gUnknown_83D3728;
+
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
+ {
+ spriteSheet.tag = TAG_TILE_7 + i;
+ LoadCompressedSpriteSheet(&spriteSheet);
+ gPSSData->itemIconSprites[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * 32 + (void*)(OBJ_VRAM0);
+ gPSSData->itemIconSprites[i].palIndex = AllocSpritePalette(TAG_PAL_DACB + i);
+ gPSSData->itemIconSprites[i].palIndex *= 16;
+ gPSSData->itemIconSprites[i].palIndex += 0x100;
+ spriteTemplate.tileTag = TAG_TILE_7 + i;
+ spriteTemplate.paletteTag = TAG_PAL_DACB + i;
+ spriteId = CreateSprite(&spriteTemplate, 0, 0, 11);
+ gPSSData->itemIconSprites[i].sprite = &gSprites[spriteId];
+ gPSSData->itemIconSprites[i].sprite->invisible = TRUE;
+ gPSSData->itemIconSprites[i].active = 0;
+ }
+ }
+ gPSSData->movingItem = ITEM_NONE;
+}
+
+void sub_8095C84(u8 cursorArea, u8 cursorPos)
+{
+ u16 heldItem;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return;
+ if (sub_8096210(cursorArea, cursorPos))
+ return;
+
+ switch (cursorArea)
+ {
+ case CURSOR_AREA_IN_BOX:
+ if (!GetCurrentBoxMonData(cursorPos, MON_DATA_SANITY_HAS_SPECIES))
+ return;
+ heldItem = GetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM);
+ break;
+ case CURSOR_AREA_IN_PARTY:
+ if (!GetMonData(&gPlayerParty[cursorPos], MON_DATA_SANITY_HAS_SPECIES))
+ return;
+ heldItem = GetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM);
+ break;
+ default:
+ return;
+ }
+
+ if (heldItem != ITEM_NONE)
+ {
+ const u32 *tiles = GetItemIconPic(heldItem);
+ const u32 *pal = GetItemIconPalette(heldItem);
+ u8 id = sub_80961D8();
+
+ sub_80962F0(id, cursorArea, cursorPos);
+ sub_8096408(id, tiles, pal);
+ sub_80964B8(id, 1);
+ sub_8096624(id, TRUE);
+ }
+}
+
+void sub_8095D44(u8 cursorArea, u8 cursorPos)
+{
+ u8 id;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return;
+
+ id = sub_8096258(cursorArea, cursorPos);
+ sub_80964B8(id, 2);
+ sub_80964E8(id, 0, cursorArea, cursorPos);
+}
+
+void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos)
+{
+ u8 id;
+ u16 item;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return;
+
+ id = sub_8096258(cursorArea, cursorPos);
+ item = 0;
+ sub_80964B8(id, 3);
+ sub_80964E8(id, 1, cursorArea, cursorPos);
+ sub_80962F0(id, 2, 0);
+ if (cursorArea == CURSOR_AREA_IN_BOX)
+ {
+ SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &item);
+ SetBoxMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND);
+ }
+ else
+ {
+ SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &item);
+ SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND);
+ }
+
+ gPSSData->movingItem = gPSSData->cursorMonItem;
+}
+
+void sub_8095E2C(u16 item)
+{
+ const u32 *tiles = GetItemIconPic(item);
+ const u32 *pal = GetItemIconPalette(item);
+ u8 id = sub_80961D8();
+
+ sub_8096408(id, tiles, pal);
+ sub_80964B8(id, 6);
+ sub_80964E8(id, 1, CURSOR_AREA_IN_BOX, 0);
+ sub_80962F0(id, CURSOR_AREA_BOX, 0);
+ sub_8096624(id, TRUE);
+ gPSSData->movingItem = item;
+}
+
+void Item_SwitchMonsWithMoving(u8 cursorArea, u8 cursorPos)
+{
+ u8 id;
+ u16 item;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return;
+
+ id = sub_8096258(cursorArea, cursorPos);
+ sub_80964B8(id, 3);
+ sub_80964E8(id, 3, CURSOR_AREA_BOX, 0);
+ if (cursorArea == CURSOR_AREA_IN_BOX)
+ {
+ item = GetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM);
+ SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &gPSSData->movingItem);
+ gPSSData->movingItem = item;
+ }
+ else
+ {
+ item = GetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM);
+ SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &gPSSData->movingItem);
+ gPSSData->movingItem = item;
+ }
+
+ id = sub_8096258(2, 0);
+ sub_80964B8(id, 4);
+ sub_80964E8(id, 4, cursorArea, cursorPos);
+}
+
+void Item_GiveMovingToMon(u8 cursorArea, u8 cursorPos)
+{
+ u8 id;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return;
+
+ id = sub_8096258(2, 0);
+ sub_80964B8(id, 4);
+ sub_80964E8(id, 2, cursorArea, cursorPos);
+ if (cursorArea == CURSOR_AREA_IN_BOX)
+ {
+ SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &gPSSData->movingItem);
+ SetBoxMonIconObjMode(cursorPos, ST_OAM_OBJ_NORMAL);
+ }
+ else
+ {
+ SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &gPSSData->movingItem);
+ SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_NORMAL);
+ }
+}
+
+void Item_TakeMons(u8 cursorArea, u8 cursorPos)
+{
+ u8 id;
+ u16 item;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return;
+
+ item = 0;
+ id = sub_8096258(cursorArea, cursorPos);
+ sub_80964B8(id, 2);
+ sub_80964E8(id, 0, cursorArea, cursorPos);
+ if (cursorArea == CURSOR_AREA_IN_BOX)
+ {
+ SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &item);
+ SetBoxMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND);
+ }
+ else
+ {
+ SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &item);
+ SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND);
+ }
+}
+
+void sub_8096088(void)
+{
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ u8 id = sub_8096258(2, 0);
+ sub_80964B8(id, 5);
+ sub_80964E8(id, 0, CURSOR_AREA_BOX, 0);
+ }
+}
+
+void sub_80960C0(void)
+{
+ s32 i;
+
+ if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return;
+
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
+ {
+ if (gPSSData->itemIconSprites[i].active && gPSSData->itemIconSprites[i].cursorArea == CURSOR_AREA_IN_PARTY)
+ sub_80964E8(i, 7, CURSOR_AREA_BOX, 0);
+ }
+}
+
+bool8 sub_809610C(void)
+{
+ s32 i;
+
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
+ {
+ if (gPSSData->itemIconSprites[i].active)
+ {
+ if (!gPSSData->itemIconSprites[i].sprite->affineAnimEnded && gPSSData->itemIconSprites[i].sprite->affineAnimBeginning)
+ return TRUE;
+ if (gPSSData->itemIconSprites[i].sprite->callback != SpriteCallbackDummy && gPSSData->itemIconSprites[i].sprite->callback != sub_80969BC)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool8 IsActiveItemMoving(void)
+{
+ s32 i;
+
+ if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
+ {
+ if (gPSSData->itemIconSprites[i].active && gPSSData->itemIconSprites[i].cursorArea == CURSOR_AREA_BOX)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+const u8 *GetMovingItemName(void)
+{
+ return ItemId_GetName(gPSSData->movingItem);
+}
+
+u16 GetMovingItem(void)
+{
+ return gPSSData->movingItem;
+}
+
+static u8 sub_80961D8(void)
+{
+ u8 i;
+
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
+ {
+ if (!gPSSData->itemIconSprites[i].active)
+ {
+ gPSSData->itemIconSprites[i].active = TRUE;
+ return i;
+ }
+ }
+
+ return MAX_ITEM_ICONS;
+}
+
+static bool32 sub_8096210(u8 cursorArea, u8 cursorPos)
+{
+ s32 i;
+
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
+ {
+ if (gPSSData->itemIconSprites[i].active
+ && gPSSData->itemIconSprites[i].cursorArea == cursorArea
+ && gPSSData->itemIconSprites[i].cursorPos == cursorPos)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static u8 sub_8096258(u8 cursorArea, u8 cursorPos)
+{
+ u8 i;
+
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
+ {
+ if (gPSSData->itemIconSprites[i].active
+ && gPSSData->itemIconSprites[i].cursorArea == cursorArea
+ && gPSSData->itemIconSprites[i].cursorPos == cursorPos)
+ return i;
+ }
+
+ return MAX_ITEM_ICONS;
+}
+
+static u8 sub_80962A8(struct Sprite *sprite)
+{
+ u8 i;
+
+ for (i = 0; i < MAX_ITEM_ICONS; i++)
+ {
+ if (gPSSData->itemIconSprites[i].active
+ && gPSSData->itemIconSprites[i].sprite == sprite)
+ return i;
+ }
+
+ return MAX_ITEM_ICONS;
+}
+
+static void sub_80962F0(u8 id, u8 cursorArea, u8 cursorPos)
+{
+ u8 row, column;
+
+ if (id >= MAX_ITEM_ICONS)
+ return;
+
+ switch (cursorArea)
+ {
+ case CURSOR_AREA_IN_BOX:
+ row = cursorPos % IN_BOX_ROWS;
+ column = cursorPos / IN_BOX_ROWS;
+ gPSSData->itemIconSprites[id].sprite->pos1.x = (24 * row) + 112;
+ gPSSData->itemIconSprites[id].sprite->pos1.y = (24 * column) + 56;
+ gPSSData->itemIconSprites[id].sprite->oam.priority = 2;
+ break;
+ case CURSOR_AREA_IN_PARTY:
+ if (cursorPos == 0)
+ {
+ gPSSData->itemIconSprites[id].sprite->pos1.x = 116;
+ gPSSData->itemIconSprites[id].sprite->pos1.y = 76;
+ }
+ else
+ {
+ gPSSData->itemIconSprites[id].sprite->pos1.x = 164;
+ gPSSData->itemIconSprites[id].sprite->pos1.y = 24 * (cursorPos - 1) + 28;
+ }
+ gPSSData->itemIconSprites[id].sprite->oam.priority = 1;
+ break;
+ }
+
+ gPSSData->itemIconSprites[id].cursorArea = cursorArea;
+ gPSSData->itemIconSprites[id].cursorPos = cursorPos;
+}
+
+static void sub_8096408(u8 id, const u32 *itemTiles, const u32 *itemPal)
+{
+ s32 i;
+
+ if (id >= MAX_ITEM_ICONS)
+ return;
+
+ CpuFastFill(0, gPSSData->field_42C4, 0x200);
+ LZ77UnCompWram(itemTiles, gPSSData->field_22C4);
+ for (i = 0; i < 3; i++)
+ CpuFastCopy(gPSSData->field_22C4 + (i * 0x60), gPSSData->field_42C4 + (i * 0x80), 0x60);
+
+ CpuFastCopy(gPSSData->field_42C4, gPSSData->itemIconSprites[id].tiles, 0x200);
+ LZ77UnCompWram(itemPal, gPSSData->field_42C4);
+ LoadPalette(gPSSData->field_42C4, gPSSData->itemIconSprites[id].palIndex, 0x20);
+}
+
+static void sub_80964B8(u8 id, u8 animNum)
+{
+ if (id >= MAX_ITEM_ICONS)
+ return;
+
+ StartSpriteAffineAnim(gPSSData->itemIconSprites[id].sprite, animNum);
+}
+
+static void sub_80964E8(u8 id, u8 command, u8 cursorArea, u8 cursorPos)
+{
+ if (id >= MAX_ITEM_ICONS)
+ return;
+
+ switch (command)
+ {
+ case 0:
+ gPSSData->itemIconSprites[id].sprite->data[0] = id;
+ gPSSData->itemIconSprites[id].sprite->callback = sub_809692C;
+ break;
+ case 1:
+ gPSSData->itemIconSprites[id].sprite->data[0] = 0;
+ gPSSData->itemIconSprites[id].sprite->callback = sub_8096958;
+ break;
+ case 2:
+ gPSSData->itemIconSprites[id].sprite->data[0] = 0;
+ gPSSData->itemIconSprites[id].sprite->data[6] = cursorArea;
+ gPSSData->itemIconSprites[id].sprite->data[7] = cursorPos;
+ gPSSData->itemIconSprites[id].sprite->callback = sub_80969F4;
+ break;
+ case 3:
+ gPSSData->itemIconSprites[id].sprite->data[0] = 0;
+ gPSSData->itemIconSprites[id].sprite->callback = sub_8096A74;
+ gPSSData->itemIconSprites[id].sprite->data[6] = cursorArea;
+ gPSSData->itemIconSprites[id].sprite->data[7] = cursorPos;
+ break;
+ case 4:
+ gPSSData->itemIconSprites[id].sprite->data[0] = 0;
+ gPSSData->itemIconSprites[id].sprite->data[6] = cursorArea;
+ gPSSData->itemIconSprites[id].sprite->data[7] = cursorPos;
+ gPSSData->itemIconSprites[id].sprite->callback = sub_8096B10;
+ break;
+ case 7:
+ gPSSData->itemIconSprites[id].sprite->callback = sub_8096BAC;
+ break;
+ }
+}
+
+static void sub_8096624(u8 id, bool8 show)
+{
+ if (id >= MAX_ITEM_ICONS)
+ return;
+
+ gPSSData->itemIconSprites[id].active = show;
+ gPSSData->itemIconSprites[id].sprite->invisible = (show == FALSE);
+}
+
+static const u32 *GetItemIconPic(u16 itemId)
+{
+ return GetItemIconGfxPtr(itemId, 0);
+}
+
+static const u32 *GetItemIconPalette(u16 itemId)
+{
+ return GetItemIconGfxPtr(itemId, 1);
+}
+
+void PrintItemDescription(void)
+{
+ const u8 *description;
+
+ if (IsActiveItemMoving())
+ description = ItemId_GetDescription(gPSSData->movingItem);
+ else
+ description = ItemId_GetDescription(gPSSData->cursorMonItem);
+
+ FillWindowPixelBuffer(2, PIXEL_FILL(1));
+ AddTextPrinterParameterized5(2, 2, description, 2, 0, 0, NULL, 0, 0);
+}
+
+void sub_80966F4(void)
+{
+ gPSSData->field_2236 = 25;
+ LoadBgTiles(0, gUnknown_83D35DC, 0x80, 0x1A4);
+ sub_8096898(0);
+}
+
+bool8 sub_8096728(void)
+{
+ s32 i, var;
+
+ if (gPSSData->field_2236 == 0)
+ return FALSE;
+
+ gPSSData->field_2236--;
+ var = 25 - gPSSData->field_2236;
+ for (i = 0; i < var; i++)
+ {
+ WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + gPSSData->field_2236 + i, i, 12, 1, 8, 15, 25);
+ }
+
+ sub_8096898(var);
+ return (gPSSData->field_2236 != 0);
+}
+
+bool8 sub_80967C0(void)
+{
+ s32 i, var;
+
+ if (gPSSData->field_2236 == 25)
+ return FALSE;
+
+ if (gPSSData->field_2236 == 0)
+ FillBgTilemapBufferRect(0, 0, 25, 11, 1, 10, 17);
+
+ gPSSData->field_2236++;
+ var = 25 - gPSSData->field_2236;
+ for (i = 0; i < var; i++)
+ {
+ WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + gPSSData->field_2236 + i, i, 12, 1, 8, 15, 25);
+ }
+
+ sub_8096898(var);
+
+ FillBgTilemapBufferRect(0, 0, var, 11, 1, 10, 0x11);
+ return (gPSSData->field_2236 != 25);
+}
+
+static void sub_8096898(u32 x)
+{
+ if (x != 0)
+ {
+ FillBgTilemapBufferRect(0, 0x1A4, 0, 0xB, x, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x9A4, 0, 0x14, x, 1, 0xFu);
+ }
+ FillBgTilemapBufferRect(0, 0x1A5, x, 0xC, 1, 8, 0xFu);
+ FillBgTilemapBufferRect(0, 0x1A6, x, 0xB, 1, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x1A7, x, 0x14, 1, 1, 0xFu);
+ ScheduleBgCopyTilemapToVram(0);
+}
+
+static void sub_809692C(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ sub_8096624(sprite->data[0], FALSE);
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void sub_8096958(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = sprite->pos1.x << 4;
+ sprite->data[2] = sprite->pos1.y << 4;
+ sprite->data[3] = 10;
+ sprite->data[4] = 21;
+ sprite->data[5] = 0;
+ sprite->data[0]++;
+ case 1:
+ sprite->data[1] -= sprite->data[3];
+ sprite->data[2] -= sprite->data[4];
+ sprite->pos1.x = sprite->data[1] >> 4;
+ sprite->pos1.y = sprite->data[2] >> 4;
+ if (++sprite->data[5] > 11)
+ sprite->callback = sub_80969BC;
+ break;
+ }
+}
+
+static void sub_80969BC(struct Sprite *sprite)
+{
+ sprite->pos1.x = gPSSData->field_CB4->pos1.x + 4;
+ sprite->pos1.y = gPSSData->field_CB4->pos1.y + gPSSData->field_CB4->pos2.y + 8;
+ sprite->oam.priority = gPSSData->field_CB4->oam.priority;
+}
+
+static void sub_80969F4(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = sprite->pos1.x << 4;
+ sprite->data[2] = sprite->pos1.y << 4;
+ sprite->data[3] = 10;
+ sprite->data[4] = 21;
+ sprite->data[5] = 0;
+ sprite->data[0]++;
+ case 1:
+ sprite->data[1] += sprite->data[3];
+ sprite->data[2] += sprite->data[4];
+ sprite->pos1.x = sprite->data[1] >> 4;
+ sprite->pos1.y = sprite->data[2] >> 4;
+ if (++sprite->data[5] > 11)
+ {
+ sub_80962F0(sub_80962A8(sprite), sprite->data[6], sprite->data[7]);
+ sprite->callback = SpriteCallbackDummy;
+ }
+ break;
+ }
+}
+
+static void sub_8096A74(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = sprite->pos1.x << 4;
+ sprite->data[2] = sprite->pos1.y << 4;
+ sprite->data[3] = 10;
+ sprite->data[4] = 21;
+ sprite->data[5] = 0;
+ sprite->data[0]++;
+ case 1:
+ sprite->data[1] -= sprite->data[3];
+ sprite->data[2] -= sprite->data[4];
+ sprite->pos1.x = sprite->data[1] >> 4;
+ sprite->pos1.y = sprite->data[2] >> 4;
+ sprite->pos2.x = gSineTable[sprite->data[5] * 8] >> 4;
+ if (++sprite->data[5] > 11)
+ {
+ sub_80962F0(sub_80962A8(sprite), sprite->data[6], sprite->data[7]);
+ sprite->pos2.x = 0;
+ sprite->callback = sub_80969BC;
+ }
+ break;
+ }
+}
+
+static void sub_8096B10(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = sprite->pos1.x << 4;
+ sprite->data[2] = sprite->pos1.y << 4;
+ sprite->data[3] = 10;
+ sprite->data[4] = 21;
+ sprite->data[5] = 0;
+ sprite->data[0]++;
+ case 1:
+ sprite->data[1] += sprite->data[3];
+ sprite->data[2] += sprite->data[4];
+ sprite->pos1.x = sprite->data[1] >> 4;
+ sprite->pos1.y = sprite->data[2] >> 4;
+ sprite->pos2.x = -(gSineTable[sprite->data[5] * 8] >> 4);
+ if (++sprite->data[5] > 11)
+ {
+ sub_80962F0(sub_80962A8(sprite), sprite->data[6], sprite->data[7]);
+ sprite->callback = SpriteCallbackDummy;
+ sprite->pos2.x = 0;
+ }
+ break;
+ }
+}
+
+static void sub_8096BAC(struct Sprite *sprite)
+{
+ sprite->pos1.y -= 8;
+ if (sprite->pos1.y + sprite->pos2.y < -16)
+ {
+ sprite->callback = SpriteCallbackDummy;
+ sub_8096624(sub_80962A8(sprite), FALSE);
+ }
+}
diff --git a/src/pokemon_storage_system_9.c b/src/pokemon_storage_system_9.c
new file mode 100644
index 000000000..42fecfd97
--- /dev/null
+++ b/src/pokemon_storage_system_9.c
@@ -0,0 +1,87 @@
+#include "global.h"
+#include "gflib.h"
+#include "pokemon_storage_system_internal.h"
+
+static EWRAM_DATA struct UnkStruct_2000020 *gUnknown_203982C = NULL;
+
+static void sub_8096CDC(struct UnkStruct_2000028 *unkStruct);
+static void sub_8096D70(struct UnkStruct_2000028 *unkStruct);
+
+void sub_8096BE4(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u32 arg2)
+{
+ gUnknown_203982C = arg0;
+ arg0->unk_00 = arg1;
+ arg0->unk_05 = arg2;
+ arg0->unk_04 = 0;
+}
+
+void sub_8096BF8(void)
+{
+ u16 i;
+
+ if (gUnknown_203982C->unk_04)
+ {
+ for (i = 0; i < gUnknown_203982C->unk_04; i++)
+ {
+ struct UnkStruct_2000028 *unkStruct = &gUnknown_203982C->unk_00[i];
+ unkStruct->unk_0c(unkStruct);
+ }
+
+ gUnknown_203982C->unk_04 = 0;
+ }
+}
+
+static bool8 sub_8096C40(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height, u16 unkArg)
+{
+ struct UnkStruct_2000028 *unkStruct;
+
+ if (gUnknown_203982C->unk_04 >= gUnknown_203982C->unk_05)
+ return FALSE;
+
+ unkStruct = &gUnknown_203982C->unk_00[gUnknown_203982C->unk_04++];
+ unkStruct->unk_08 = width * 2;
+ unkStruct->unk_04 = dest + 2 * (dTop * 32 + dLeft);
+ unkStruct->unk_00 = src + 2 * (sTop * unkArg + sLeft);
+ unkStruct->newField = height;
+ unkStruct->unk_0a = unkArg;
+ unkStruct->unk_0c = sub_8096CDC;
+ return TRUE;
+}
+
+static void sub_8096CDC(struct UnkStruct_2000028 *unkStruct)
+{
+ u16 i;
+
+ for (i = 0; i < unkStruct->newField; i++)
+ {
+ CpuCopy16(unkStruct->unk_00, unkStruct->unk_04, unkStruct->unk_08);
+ unkStruct->unk_04 += 64;
+ unkStruct->unk_00 += (unkStruct->unk_0a * 2);
+ }
+}
+
+static bool8 sub_8096D14(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height)
+{
+ struct UnkStruct_2000028 *unkStruct;
+
+ if (gUnknown_203982C->unk_04 >= gUnknown_203982C->unk_05)
+ return FALSE;
+
+ unkStruct = &gUnknown_203982C->unk_00[gUnknown_203982C->unk_04++];
+ unkStruct->unk_08 = width * 2;
+ unkStruct->unk_04 = dest + ((dTop * 32) + dLeft) * 2;
+ unkStruct->newField = height;
+ unkStruct->unk_0c = sub_8096D70;
+ return TRUE;
+}
+
+static void sub_8096D70(struct UnkStruct_2000028 *unkStruct)
+{
+ u16 i;
+
+ for (i = 0; i < unkStruct->newField; i++)
+ {
+ Dma3FillLarge_(0, unkStruct->unk_04, unkStruct->unk_08, 16);
+ unkStruct->unk_04 += 64;
+ }
+}
diff --git a/src/quest_log.c b/src/quest_log.c
index 91c07223e..bc8e67a6b 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -752,7 +752,7 @@ void sub_8111438(void)
{
for (r3 = 0; r3 < 5; r3++)
{
- sub_808BCB4(0, r3);
+ ZeroBoxMonAt(0, r3);
}
for (r3 = r5; r3 < r9->sanePartyCount; r3++)
{
@@ -767,9 +767,9 @@ void sub_8111438(void)
{
for (r6 = 0; r6 < 30; r6++)
{
- if (GetBoxMonDataFromAnyBox(r3, r6, MON_DATA_SANITY_HAS_SPECIES))
+ if (GetBoxMonDataAt(r3, r6, MON_DATA_SANITY_HAS_SPECIES))
{
- sub_808BCB4(r3, r6);
+ ZeroBoxMonAt(r3, r6);
r5--;
if (r5 == r9->saneBoxesCount)
break;
@@ -832,7 +832,7 @@ static u16 QuestLog_GetSaneBoxCount(void)
{
for (j = 0; j < IN_BOX_COUNT; j++)
{
- if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SANITY_HAS_SPECIES))
+ if (GetBoxMonDataAt(i, j, MON_DATA_SANITY_HAS_SPECIES))
count++;
}
}
diff --git a/src/string_util.c b/src/string_util.c
index 4c1106df8..0a2365d25 100644
--- a/src/string_util.c
+++ b/src/string_util.c
@@ -532,11 +532,11 @@ u8 *StringFillWithTerminator(u8 *dest, u16 n)
return StringFill(dest, EOS, n);
}
-u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n)
+u8 *StringCopyN_Multibyte(u8 *dest, const u8 *src, u32 n)
{
u32 i;
- for (i = n - 1; i != (u32)-1; i--)
+ for (i = n - 1; i != -1u; i--)
{
if (*src == EOS)
{
@@ -554,7 +554,7 @@ u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n)
return dest;
}
-u32 StringLength_Multibyte(u8 *str)
+u32 StringLength_Multibyte(const u8 *str)
{
u32 length = 0;
diff --git a/src/strings.c b/src/strings.c
index f5040838a..faf42c86a 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -601,87 +601,87 @@ const u8 gString_BattleRecords_4Dashes[] = _("----");
const u8 gFameCheckerText_FameCheckerWillBeClosed[] = _("The FAME CHECKER will be closed.");
const u8 gFameCheckerText_ClearTextbox[] = _("\n ");
const u8 gUnknown_8418204[] = _("やめる");
-const u8 gUnknown_8418208[] = _("Exit from the BOX.");
-const u8 gUnknown_841821B[] = _("What do you want to do?");
-const u8 gUnknown_8418233[] = _("Please pick a theme.");
-const u8 gUnknown_8418248[] = _("Pick the wallpaper.");
-const u8 gUnknown_841825C[] = _("{DYNAMIC 0x00} is selected.");
-const u8 gUnknown_841826C[] = _("Jump to which BOX?");
-const u8 gUnknown_841827F[] = _("Deposit in which BOX?");
-const u8 gUnknown_8418295[] = _("{DYNAMIC 0x00} was deposited.");
-const u8 gUnknown_84182A7[] = _("The BOX is full.");
-const u8 gUnknown_84182B8[] = _("Release this POKéMON?");
-const u8 gUnknown_84182CE[] = _("{DYNAMIC 0x00} was released.");
-const u8 gUnknown_84182DF[] = _("Bye-bye, {DYNAMIC 0x00}!");
-const u8 gUnknown_84182EC[] = _("Mark your POKéMON.");
-const u8 gUnknown_84182FF[] = _("That's your last POKéMON!");
-const u8 gUnknown_8418319[] = _("Your party's full!");
-const u8 gUnknown_841832C[] = _("You're holding a POKéMON!");
-const u8 gUnknown_8418346[] = _("Which one will you take?");
-const u8 gUnknown_841835F[] = _("You can't release an EGG.");
-const u8 gUnknown_8418379[] = _("Continue BOX operations?");
-const u8 gUnknown_8418392[] = _("{DYNAMIC 0x00} came back!");
-const u8 gUnknown_84183A0[] = _("Was it worried about you?");
-const u8 gUnknown_84183BA[] = _("‥ ‥ ‥ ‥ ‥!");
-const u8 gUnknown_84183C5[] = _("Please remove the MAIL.");
-const u8 gUnknown_84183DD[] = _("GIVE to a POKéMON?");
-const u8 gUnknown_84183F0[] = _("Placed item in the BAG.");
-const u8 gUnknown_8418408[] = _("The BAG is full.");
-const u8 gUnknown_8418419[] = _("Put this item in the BAG?");
-const u8 gUnknown_8418433[] = _("{DYNAMIC 0x00} is now held.");
-const u8 gUnknown_8418443[] = _("Changed to {DYNAMIC 0x00}.");
-const u8 gUnknown_8418452[] = _("MAIL can't be stored!");
-const u8 gUnknown_8418468[] = _("CANCEL");
-const u8 gUnknown_841846F[] = _("STORE");
-const u8 gUnknown_8418475[] = _("WITHDRAW");
-const u8 gUnknown_841847E[] = _("SHIFT");
-const u8 gUnknown_8418484[] = _("MOVE");
-const u8 gUnknown_8418489[] = _("PLACE");
-const u8 gUnknown_841848F[] = _("SUMMARY");
-const u8 gUnknown_8418497[] = _("RELEASE");
-const u8 gUnknown_841849F[] = _("MARK");
-const u8 gUnknown_84184A4[] = _("NAME");
-const u8 gUnknown_84184A9[] = _("JUMP");
-const u8 gUnknown_84184AE[] = _("WALLPAPER");
-const u8 gUnknown_84184B8[] = _("TAKE");
-const u8 gUnknown_84184BD[] = _("GIVE");
-const u8 gUnknown_84184C2[] = _("SWITCH");
-const u8 gUnknown_84184C9[] = _("BAG");
-const u8 gUnknown_84184CD[] = _("INFO");
-const u8 gUnknown_84184D2[] = _("SCENERY 1");
-const u8 gUnknown_84184DC[] = _("SCENERY 2");
-const u8 gUnknown_84184E6[] = _("SCENERY 3");
-const u8 gUnknown_84184F0[] = _("ETCETERA");
-const u8 gUnknown_84184F9[] = _("FOREST");
-const u8 gUnknown_8418500[] = _("CITY");
-const u8 gUnknown_8418505[] = _("DESERT");
-const u8 gUnknown_841850C[] = _("SAVANNA");
-const u8 gUnknown_8418514[] = _("CRAG");
-const u8 gUnknown_8418519[] = _("VOLCANO");
-const u8 gUnknown_8418521[] = _("SNOW");
-const u8 gUnknown_8418526[] = _("CAVE");
-const u8 gUnknown_841852B[] = _("BEACH");
-const u8 gUnknown_8418531[] = _("SEAFLOOR");
-const u8 gUnknown_841853A[] = _("RIVER");
-const u8 gUnknown_8418540[] = _("SKY");
-const u8 gUnknown_8418544[] = _("STARS");
-const u8 gUnknown_841854A[] = _("POKéCENTER");
-const u8 gUnknown_8418555[] = _("TILES");
-const u8 gUnknown_841855B[] = _("SIMPLE");
+const u8 gText_ExitFromBox[] = _("Exit from the BOX.");
+const u8 gText_WhatDoYouWantToDo[] = _("What do you want to do?");
+const u8 gText_PleasePickATheme[] = _("Please pick a theme.");
+const u8 gText_PickTheWallpaper[] = _("Pick the wallpaper.");
+const u8 gText_PkmnIsSelected[] = _("{DYNAMIC 0x00} is selected.");
+const u8 gText_JumpToWhichBox[] = _("Jump to which BOX?");
+const u8 gText_DepositInWhichBox[] = _("Deposit in which BOX?");
+const u8 gText_PkmnWasDeposited[] = _("{DYNAMIC 0x00} was deposited.");
+const u8 gText_BoxIsFull2[] = _("The BOX is full.");
+const u8 gText_ReleaseThisPokemon[] = _("Release this POKéMON?");
+const u8 gText_PkmnWasReleased[] = _("{DYNAMIC 0x00} was released.");
+const u8 gText_ByeByePkmn[] = _("Bye-bye, {DYNAMIC 0x00}!");
+const u8 gText_MarkYourPkmn[] = _("Mark your POKéMON.");
+const u8 gText_ThatsYourLastPkmn[] = _("That's your last POKéMON!");
+const u8 gText_YourPartysFull[] = _("Your party's full!");
+const u8 gText_YoureHoldingAPkmn[] = _("You're holding a POKéMON!");
+const u8 gText_WhichOneWillYouTake[] = _("Which one will you take?");
+const u8 gText_YouCantReleaseAnEgg[] = _("You can't release an EGG.");
+const u8 gText_ContinueBoxOperations[] = _("Continue BOX operations?");
+const u8 gText_PkmnCameBack[] = _("{DYNAMIC 0x00} came back!");
+const u8 gText_WasItWorriedAboutYou[] = _("Was it worried about you?");
+const u8 gText_FourEllipsesExclamation[] = _("‥ ‥ ‥ ‥ ‥!");
+const u8 gText_PleaseRemoveTheMail[] = _("Please remove the MAIL.");
+const u8 gText_GiveToAPkmn[] = _("GIVE to a POKéMON?");
+const u8 gText_PlacedItemInBag[] = _("Placed item in the BAG.");
+const u8 gText_BagIsFull2[] = _("The BAG is full.");
+const u8 gText_PutItemInBag[] = _("Put this item in the BAG?");
+const u8 gText_ItemIsNowHeld[] = _("{DYNAMIC 0x00} is now held.");
+const u8 gText_ChangedToNewItem[] = _("Changed to {DYNAMIC 0x00}.");
+const u8 gText_MailCantBeStored[] = _("MAIL can't be stored!");
+const u8 gPCText_Cancel[] = _("CANCEL");
+const u8 gPCText_Store[] = _("STORE");
+const u8 gPCText_Withdraw[] = _("WITHDRAW");
+const u8 gPCText_Shift[] = _("SHIFT");
+const u8 gPCText_Move[] = _("MOVE");
+const u8 gPCText_Place[] = _("PLACE");
+const u8 gPCText_Summary[] = _("SUMMARY");
+const u8 gPCText_Release[] = _("RELEASE");
+const u8 gPCText_Mark[] = _("MARK");
+const u8 gPCText_Name[] = _("NAME");
+const u8 gPCText_Jump[] = _("JUMP");
+const u8 gPCText_Wallpaper[] = _("WALLPAPER");
+const u8 gPCText_Take[] = _("TAKE");
+const u8 gPCText_Give[] = _("GIVE");
+const u8 gPCText_Switch[] = _("SWITCH");
+const u8 gPCText_Bag[] = _("BAG");
+const u8 gPCText_Info[] = _("INFO");
+const u8 gPCText_Scenery1[] = _("SCENERY 1");
+const u8 gPCText_Scenery2[] = _("SCENERY 2");
+const u8 gPCText_Scenery3[] = _("SCENERY 3");
+const u8 gPCText_Etcetera[] = _("ETCETERA");
+const u8 gPCText_Forest[] = _("FOREST");
+const u8 gPCText_City[] = _("CITY");
+const u8 gPCText_Desert[] = _("DESERT");
+const u8 gPCText_Savanna[] = _("SAVANNA");
+const u8 gPCText_Crag[] = _("CRAG");
+const u8 gPCText_Volcano[] = _("VOLCANO");
+const u8 gPCText_Snow[] = _("SNOW");
+const u8 gPCText_Cave[] = _("CAVE");
+const u8 gPCText_Beach[] = _("BEACH");
+const u8 gPCText_Seafloor[] = _("SEAFLOOR");
+const u8 gPCText_River[] = _("RIVER");
+const u8 gPCText_Sky[] = _("SKY");
+const u8 gPCText_PolkaDot[] = _("STARS");
+const u8 gPCText_Pokecenter[] = _("POKéCENTER");
+const u8 gPCText_Machine[] = _("TILES");
+const u8 gPCText_Simple[] = _("SIMPLE");
const u8 gUnknown_8418562[] = _("なにを しますか?");
-const u8 gUnknown_841856C[] = _("WITHDRAW POKéMON");
-const u8 gUnknown_841857D[] = _("DEPOSIT POKéMON");
-const u8 gUnknown_841858D[] = _("MOVE POKéMON");
-const u8 gUnknown_841859A[] = _("MOVE ITEMS");
-const u8 gUnknown_84185A5[] = _("SEE YA!");
-const u8 gUnknown_84185AD[] = _("You can withdraw a POKéMON if you\nhave any in a BOX.");
-const u8 gUnknown_84185E2[] = _("You can deposit your party\nPOKéMON in any BOX.");
-const u8 gUnknown_8418611[] = _("You can move POKéMON that are\nstored in any BOX.");
-const u8 gUnknown_8418642[] = _("You can move items held by any\nPOKéMON in a BOX or your party.");
-const u8 gUnknown_8418681[] = _("See you later!");
-const u8 gUnknown_8418690[] = _("Can't deposit the last POKéMON!");
-const u8 gUnknown_84186B0[] = _("Can't take any more POKéMON.");
-const u8 gUnknown_84186CD[] = _("BOX");
+const u8 gText_WithdrawPokemon[] = _("WITHDRAW POKéMON");
+const u8 gText_DepositPokemon[] = _("DEPOSIT POKéMON");
+const u8 gText_MovePokemon[] = _("MOVE POKéMON");
+const u8 gText_MoveItems[] = _("MOVE ITEMS");
+const u8 gText_SeeYa[] = _("SEE YA!");
+const u8 gText_WithdrawMonDescription[] = _("You can withdraw a POKéMON if you\nhave any in a BOX.");
+const u8 gText_DepositMonDescription[] = _("You can deposit your party\nPOKéMON in any BOX.");
+const u8 gText_MoveMonDescription[] = _("You can move POKéMON that are\nstored in any BOX.");
+const u8 gText_MoveItemsDescription[] = _("You can move items held by any\nPOKéMON in a BOX or your party.");
+const u8 gText_SeeYaDescription[] = _("See you later!");
+const u8 gText_JustOnePkmn[] = _("Can't deposit the last POKéMON!");
+const u8 gText_PartyFull[] = _("Can't take any more POKéMON.");
+const u8 gText_Box[] = _("BOX");
const u8 gUnknown_84186D1[] = _("Combine four words or phrases");
const u8 gUnknown_84186EF[] = _("and make your profile.");
const u8 gUnknown_8418706[] = _("Make a message of six phrases.");
diff --git a/src/title_screen.c b/src/title_screen.c
index 0ff0a6b96..e1bcf5dd2 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -305,6 +305,22 @@ static const u16 gUnknown_LG_83BFA10[] = {
};
#endif
+static const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/title_screen/unk_83BFBE4.bin.lz");
+static const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/title_screen/unk_83C0408.bin.lz");
+static const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/title_screen/unk_83C0C00.bin.lz");
+static const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/title_screen/unk_83C139C.bin.lz");
+static const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/title_screen/unk_83C1BB8.bin.lz");
+static const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/title_screen/unk_83C2380.bin.lz");
+
+static const u32 *const gUnknown_83C2BA4[] = {
+ gUnknown_83BFBE4,
+ gUnknown_83C0408,
+ gUnknown_83C0C00,
+ gUnknown_83C139C,
+ gUnknown_83C1BB8,
+ gUnknown_83C2380
+};
+
void CB2_InitTitleScreen(void)
{
switch (gMain.state)
diff --git a/src/tm_case.c b/src/tm_case.c
index 2f27cc0db..7bb471719 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -959,7 +959,7 @@ static void Task_SelectTMAction_Type3(u8 taskId)
if (!itemid_is_unique(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1])))
{
- sTMCaseDynamicResources->savedCallback = sub_808CE60;
+ sTMCaseDynamicResources->savedCallback = Cb2_ReturnToPSS;
Task_BeginFadeOutFromTMCase(taskId);
}
else
diff --git a/src/trade.c b/src/trade.c
index 30bfa8389..bd6860e85 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -882,10 +882,10 @@ static void sub_804C728(void)
gMain.state++;
break;
case 10:
- PSS_RenderTextToVramViaBuffer(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3);
+ DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3);
id = GetMultiplayerId();
- PSS_RenderTextToVramViaBuffer(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3);
- PSS_RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2);
+ DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3);
+ DrawTextWindowAndBufferTiles(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2);
RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], sSpriteTextTilePtrs[8], 24);
gMain.state++;
sTradeMenuResourcesPtr->unk_A8 = 0;
@@ -1080,10 +1080,10 @@ void sub_804CF14(void)
gMain.state++;
break;
case 10:
- PSS_RenderTextToVramViaBuffer(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3);
+ DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3);
id = GetMultiplayerId();
- PSS_RenderTextToVramViaBuffer(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3);
- PSS_RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2);
+ DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3);
+ DrawTextWindowAndBufferTiles(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2);
RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], sSpriteTextTilePtrs[8], 24);
gMain.state++;
sTradeMenuResourcesPtr->unk_A8 = 0;
@@ -2502,7 +2502,7 @@ static bool8 sub_804F610(void)
static void RenderTextToVramViaBuffer(const u8 *name, u8 *dest, u8 unused)
{
- PSS_RenderTextToVramViaBuffer(name, dest, 0, 0, gDecompressionBuffer, 6);
+ DrawTextWindowAndBufferTiles(name, dest, 0, 0, gDecompressionBuffer, 6);
}
static void sub_804F748(u8 who)
diff --git a/src/window_8bpp.c b/src/window_8bpp.c
index c58c13802..8977d61e4 100644
--- a/src/window_8bpp.c
+++ b/src/window_8bpp.c
@@ -13,7 +13,7 @@ static void nullsub_9(void)
{
}
-u16 AddWindow8Bit(struct WindowTemplate *template)
+u16 AddWindow8Bit(const struct WindowTemplate *template)
{
u16 windowId;
u8* memAddress;
@@ -81,7 +81,7 @@ void FillWindowPixelRect8Bit(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width,
FillBitmapRect8Bit(&pixelRect, x, y, width, height, fillValue);
}
-void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum)
+void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum)
{
struct Bitmap sourceRect;
struct Bitmap destRect;
diff --git a/sym_bss.txt b/sym_bss.txt
index 9195e3ee4..527efb982 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -47,12 +47,8 @@ gUnknown_3000E89: @ 3000E89
.include "src/sound.o"
.align 2
.include "src/field_effect.o"
-
.align 2
- @ .include "src/pokemon_storage_system.o"
-gUnknown_3000FE8: @ 3000FE8
- .space 0x184
-
+ .include "src/pokemon_storage_system_8.o"
.align 2
.include "src/easy_chat.o"
.align 2
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 27c580851..3da5bb78f 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -117,27 +117,8 @@ gPlayerAvatar: @ 2037078
.include "src/battle_anim_mons.o"
.align 2
.include "src/title_screen.o"
-
.align 2
- @ .include "src/field_weather.o"
-gUnknown_2037F34: @ 2037F34
- .space 0x200
-
-gUnknown_2038134: @ 2038134
- .space 0x260
-
-gUnknown_2038394: @ 2038394
- .space 0x2F0
-
-gUnknown_2038684: @ 2038684
- .space 0x20
-
-gUnknown_20386A4: @ 20386A4
- .space 0x4
-
-gUnknown_20386A8: @ 20386A8
- .space 0x4
-
+ .include "src/field_weather.o"
.align 2
.include "src/battle_setup.o"
.align 2
@@ -150,66 +131,16 @@ gUnknown_20386A8: @ 20386A8
.include "src/option_menu.o"
.align 2
.include "src/trainer_card.o"
-
.align 2
- @ .include "src/pokemon_storage_system.o"
-sPreviousBoxOption: @ 20397A8
- .space 0x4
-
-gUnknown_20397AC: @ 20397AC
- .space 0x4
-
-sPSSData: @ 20397B0
- .space 0x4
-
-sInPartyMenu: @ 20397B4
- .space 0x1
-
-sCurrentBoxOption: @ 20397B5
- .space 0x1
-
-gUnknown_20397B6: @ 20397B6
- .space 0x1
-
-sWhichToReshow: @ 20397B7
- .space 0x1
-
-sLastUsedBox: @ 20397B8
- .space 0x2
-
-gUnknown_20397BA: @ 20397BA
- .space 0x2
-
-gUnknown_20397BC: @ 20397BC
- .space 0x64
-
-sBoxCursorArea: @ 2039820
- .space 0x1
-
-sBoxCursorPosition: @ 2039821
- .space 0x1
-
-sIsMonBeingMoved: @ 2039822
- .space 0x1
-
-sMovingMonOrigBoxId: @ 2039823
- .space 0x1
-
-sMovingMonOrigBoxPos: @ 2039824
- .space 0x1
-
-sCanOnlyMove: @ 2039825
- .space 0x1
-
-gUnknown_2039826: @ 2039826
- .space 0x2
-
-gUnknown_2039828: @ 2039828
- .space 0x4
-
-gUnknown_203982C: @ 203982C
- .space 0x4
-
+ .include "src/pokemon_storage_system_2.o"
+ .align 2
+ .include "src/pokemon_storage_system_3.o"
+ .align 2
+ .include "src/pokemon_storage_system_5.o"
+ .align 2
+ .include "src/pokemon_storage_system_7.o"
+ .align 2
+ .include "src/pokemon_storage_system_9.o"
.align 2
.include "src/script_movement.o"
.align 2