summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2019-01-13 12:12:27 +0100
committerDizzyEggg <jajkodizzy@wp.pl>2019-01-13 12:12:27 +0100
commit11a49a7f0220ebbdfa43ebaa9158906cf38f6a4d (patch)
tree892376521c52ca906cd847b64e7828b933258885
parent37d7348e01e1d9afb79b5eb10ec28af948bbaf1e (diff)
Decompile trainer hill
-rw-r--r--asm/pokenav.s2248
-rw-r--r--include/battle_tower.h2
-rw-r--r--include/field_message_box.h1
-rw-r--r--include/global.h24
-rw-r--r--include/main.h2
-rw-r--r--include/pokemon.h4
-rw-r--r--ld_script.txt1
-rw-r--r--src/apprentice.c4
-rw-r--r--src/battle_anim.c8
-rw-r--r--src/battle_dome.c2
-rw-r--r--src/battle_factory.c4
-rw-r--r--src/battle_pike.c2
-rw-r--r--src/battle_pyramid.c2
-rw-r--r--src/battle_tower.c12
-rw-r--r--src/frontier_util.c2
-rw-r--r--src/link_rfu.c2
-rwxr-xr-xsrc/party_menu.c10
-rw-r--r--src/pokedex.c8
-rw-r--r--src/pokemon.c4
-rw-r--r--src/recorded_battle.c4
-rw-r--r--src/rom_8034C54.c2
-rw-r--r--src/script_menu.c2
-rw-r--r--src/trainer_hill.c927
-rw-r--r--src/trainer_pokemon_sprites.c4
24 files changed, 991 insertions, 2290 deletions
diff --git a/asm/pokenav.s b/asm/pokenav.s
index 91682a780..3d7dea4b3 100644
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -28009,2252 +28009,4 @@ _081D548A:
.pool
thumb_func_end sub_81D5084
- thumb_func_start sp194_trainer_tower
-sp194_trainer_tower: @ 81D5494
- push {lr}
- bl sub_81D56B0
- ldr r1, =gUnknown_0862A618
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- bl sub_81D5710
- pop {r0}
- bx r0
- .pool
- thumb_func_end sp194_trainer_tower
-
- thumb_func_start sub_81D54BC
-sub_81D54BC: @ 81D54BC
- push {r4-r6,lr}
- ldr r4, =gSaveBlock2Ptr
- ldr r1, [r4]
- ldr r3, =0x00000ef9
- adds r1, r3
- ldrb r2, [r1]
- movs r0, 0x7F
- ands r0, r2
- strb r0, [r1]
- ldr r1, [r4]
- adds r1, r3
- ldrb r2, [r1]
- movs r0, 0x80
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r2, =gSaveBlock1Ptr
- ldr r0, [r2]
- ldr r1, =0x00003d68
- adds r0, r1
- movs r1, 0
- str r1, [r0]
- adds r6, r2, 0
- ldr r5, =0x00003718
- movs r4, 0x3
-_081D54EE:
- ldr r0, [r6]
- adds r0, r5
- ldr r1, =0x00034bbf
- bl sub_81D5DF4
- adds r5, 0x4
- subs r4, 0x1
- cmp r4, 0
- bge _081D54EE
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D54BC
-
- thumb_func_start sub_81D5520
-sub_81D5520: @ 81D5520
- ldr r0, =gMapHeader
- ldrb r0, [r0, 0x12]
- adds r0, 0x61
- lsls r0, 24
- lsrs r0, 24
- bx lr
- .pool
- thumb_func_end sub_81D5520
-
- thumb_func_start GetTrainerHillOpponentClass
-GetTrainerHillOpponentClass: @ 81D5530
- lsls r0, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r1
- lsrs r0, 24
- ldr r2, =gFacilityClassToTrainerClass
- ldr r1, =gUnknown_0203CF58
- ldr r1, [r1]
- adds r1, 0x16
- adds r1, r0
- ldrb r0, [r1]
- adds r0, r2
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end GetTrainerHillOpponentClass
-
- thumb_func_start GetTrainerHillTrainerName
-GetTrainerHillTrainerName: @ 81D5554
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- movs r0, 0xFF
- lsls r0, 24
- adds r1, r0
- lsrs r1, 24
- movs r3, 0
- ldr r0, =gUnknown_0203CF58
- ldr r2, [r0]
- movs r0, 0xB
- muls r0, r1
- adds r2, r0, r2
-_081D556E:
- adds r1, r4, r3
- ldrb r0, [r2]
- strb r0, [r1]
- adds r2, 0x1
- adds r3, 0x1
- cmp r3, 0xA
- ble _081D556E
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end GetTrainerHillTrainerName
-
- thumb_func_start GetTrainerHillTrainerFrontSpriteId
-GetTrainerHillTrainerFrontSpriteId: @ 81D5588
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_81D56B0
- subs r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gUnknown_0203CF54
- ldr r3, [r0]
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r4
- ldrb r2, [r3]
- lsls r0, r2, 4
- subs r0, r2
- lsls r0, 3
- subs r0, r2
- adds r0, r1
- lsls r0, 3
- adds r3, r0
- ldrb r4, [r3, 0x1B]
- bl sub_81D5710
- ldr r0, =gFacilityClassToPicIndex
- adds r4, r0
- ldrb r0, [r4]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetTrainerHillTrainerFrontSpriteId
-
- thumb_func_start sub_81D55D0
-sub_81D55D0: @ 81D55D0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- bl sub_81D56B0
- ldr r4, =gUnknown_0203CF58
- movs r0, 0x18
- bl AllocZeroed
- str r0, [r4]
- movs r6, 0
- ldr r0, =gUnknown_0203CF54
- mov r10, r0
-_081D55EE:
- movs r5, 0
- lsls r1, r6, 2
- mov r8, r1
- adds r0, r6, 0x1
- mov r9, r0
- movs r0, 0xB
- adds r1, r6, 0
- muls r1, r0
- mov r12, r1
- mov r1, r8
- adds r0, r1, r6
- lsls r0, 3
- adds r0, r6
- lsls r7, r0, 3
-_081D560A:
- ldr r0, =gUnknown_0203CF58
- ldr r4, [r0]
- mov r1, r12
- adds r0, r5, r1
- adds r4, r0
- mov r0, r10
- ldr r2, [r0]
- adds r3, r5, r7
- ldrb r1, [r2]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 3
- subs r0, r1
- lsls r0, 3
- adds r3, r0
- adds r2, 0x10
- adds r2, r3
- ldrb r0, [r2]
- strb r0, [r4]
- adds r5, 0x1
- cmp r5, 0xA
- ble _081D560A
- ldr r1, =gUnknown_0203CF58
- ldr r4, [r1]
- adds r4, 0x16
- adds r4, r6
- mov r0, r10
- ldr r3, [r0]
- mov r1, r8
- adds r2, r1, r6
- lsls r2, 3
- adds r2, r6
- ldrb r1, [r3]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 3
- subs r0, r1
- adds r0, r2
- lsls r0, 3
- adds r3, r0
- ldrb r0, [r3, 0x1B]
- strb r0, [r4]
- mov r6, r9
- cmp r6, 0x1
- ble _081D55EE
- ldr r1, =gSaveBlock1Ptr
- ldr r0, [r1]
- ldr r1, =0x00003d64
- adds r0, r1
- bl sub_80008DC
- bl sub_81D5710
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D55D0
-
- thumb_func_start sub_81D5694
-sub_81D5694: @ 81D5694
- push {r4,lr}
- ldr r4, =gUnknown_0203CF58
- ldr r0, [r4]
- cmp r0, 0
- beq _081D56A6
- bl Free
- movs r0, 0
- str r0, [r4]
-_081D56A6:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5694
-
- thumb_func_start sub_81D56B0
-sub_81D56B0: @ 81D56B0
- push {r4,lr}
- ldr r4, =gUnknown_0203CF54
- ldr r0, [r4]
- cmp r0, 0
- bne _081D56EC
- ldr r0, =0x00000eec
- bl AllocZeroed
- str r0, [r4]
- ldr r1, =gMapHeader
- ldrb r1, [r1, 0x12]
- adds r1, 0x61
- strb r1, [r0]
- ldr r1, =gUnknown_0862A5F8
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00003d6e
- adds r0, r2
- ldrb r0, [r0]
- lsrs r0, 6
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, [r4]
- adds r1, 0x4
- ldr r2, =0x040003ba
- bl CpuSet
- bl nullsub_2
-_081D56EC:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D56B0
-
- thumb_func_start sub_81D5710
-sub_81D5710: @ 81D5710
- push {r4,lr}
- ldr r4, =gUnknown_0203CF54
- ldr r0, [r4]
- cmp r0, 0
- beq _081D5722
- bl Free
- movs r0, 0
- str r0, [r4]
-_081D5722:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5710
-
- thumb_func_start CopyTrainerHillTrainerText
-CopyTrainerHillTrainerText: @ 81D572C
- push {r4-r6,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_81D56B0
- bl sub_81D5520
- lsls r0, 24
- lsrs r2, r0, 24
- subs r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- cmp r5, 0x3
- beq _081D5790
- cmp r5, 0x3
- bgt _081D575A
- cmp r5, 0x2
- beq _081D5764
- b _081D580E
-_081D575A:
- cmp r6, 0x4
- beq _081D57BC
- cmp r6, 0x5
- beq _081D57E8
- b _081D580E
-_081D5764:
- ldr r0, =gUnknown_0203CF54
- lsls r1, r2, 4
- subs r1, r2
- lsls r1, 3
- subs r1, r2
- lsls r1, 3
- adds r1, 0xC
- ldr r0, [r0]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r4
- lsls r1, 3
- adds r1, 0x4
- adds r0, r1
- adds r0, 0x10
- bl FrontierSpeechToString
- b _081D580E
- .pool
-_081D5790:
- ldr r0, =gUnknown_0203CF54
- lsls r1, r2, 4
- subs r1, r2
- lsls r1, 3
- subs r1, r2
- lsls r1, 3
- adds r1, 0xC
- ldr r0, [r0]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r4
- lsls r1, 3
- adds r1, 0x4
- adds r0, r1
- adds r0, 0x1C
- bl FrontierSpeechToString
- b _081D580E
- .pool
-_081D57BC:
- ldr r0, =gUnknown_0203CF54
- lsls r1, r2, 4
- subs r1, r2
- lsls r1, 3
- subs r1, r2
- lsls r1, 3
- adds r1, 0xC
- ldr r0, [r0]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r4
- lsls r1, 3
- adds r1, 0x4
- adds r0, r1
- adds r0, 0x28
- bl FrontierSpeechToString
- b _081D580E
- .pool
-_081D57E8:
- ldr r0, =gUnknown_0203CF54
- lsls r1, r2, 4
- subs r1, r2
- lsls r1, 3
- subs r1, r2
- lsls r1, 3
- adds r1, 0xC
- ldr r0, [r0]
- adds r0, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r4
- lsls r1, 3
- adds r1, 0x4
- adds r0, r1
- adds r0, 0x34
- bl FrontierSpeechToString
-_081D580E:
- bl sub_81D5710
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CopyTrainerHillTrainerText
-
- thumb_func_start sub_81D581C
-sub_81D581C: @ 81D581C
- push {r4-r6,lr}
- bl nullsub_2
- bl sub_81D3B34
- cmp r0, 0
- bne _081D5844
- ldr r3, =gSaveBlock1Ptr
- ldr r1, [r3]
- ldr r0, =0x00003d6e
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x20
- orrs r0, r2
- b _081D5854
- .pool
-_081D5844:
- ldr r3, =gSaveBlock1Ptr
- ldr r1, [r3]
- ldr r0, =0x00003d6e
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
-_081D5854:
- strb r0, [r1]
- adds r6, r3, 0
- ldr r0, [r6]
- ldr r1, =0x00003d6c
- adds r0, r1
- movs r5, 0
- strb r5, [r0]
- ldr r0, [r6]
- ldr r4, =0x00003d64
- adds r0, r4
- bl sub_80008DC
- ldr r1, [r6]
- adds r4, r1, r4
- str r5, [r4]
- ldr r3, =0x00003d6e
- adds r1, r3
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, [r6]
- adds r1, r3
- ldrb r2, [r1]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, [r6]
- adds r1, r3
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- movs r1, 0xEE
- lsls r1, 4
- adds r0, r1
- strb r5, [r0]
- ldr r0, =gBattleOutcome
- strb r5, [r0]
- ldr r1, [r6]
- adds r1, r3
- ldrb r2, [r1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D581C
-
- thumb_func_start sub_81D58D8
-sub_81D58D8: @ 81D58D8
- push {lr}
- bl sub_80008E8
- ldr r3, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r3]
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00003d6e
- adds r2, r0, r1
- ldrb r1, [r2]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081D58FA
- movs r0, 0x1
- strh r0, [r3]
-_081D58FA:
- ldrb r1, [r2]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0x3
- bne _081D590A
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
-_081D590A:
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D58D8
-
- thumb_func_start sub_81D5924
-sub_81D5924: @ 81D5924
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl sub_81D6640
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, =gUnknown_0203CF54
- ldr r0, [r0]
- ldrb r0, [r0, 0x6]
- cmp r0, 0x4
- bne _081D5952
- ldr r0, =gSaveBlock1Ptr
- mov r8, r0
- ldr r0, [r0]
- ldr r7, =0x00003d6e
- adds r0, r7
- ldrb r0, [r0]
- movs r6, 0x1
- adds r4, r6, 0
- ands r4, r0
- cmp r4, 0
- beq _081D596C
-_081D5952:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x2
- strh r0, [r1]
- b _081D59C0
- .pool
-_081D596C:
- adds r0, r5, 0
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081D59BC
- ldr r1, =gStringVar2
- adds r0, r5, 0
- bl CopyItemName
- mov r0, r8
- ldr r1, [r0]
- adds r1, r7
- ldrb r0, [r1]
- movs r2, 0x1
- orrs r0, r2
- strb r0, [r1]
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- ldr r0, =0x00000ef9
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x80
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r0, =gSpecialVar_Result
- strh r4, [r0]
- b _081D59C0
- .pool
-_081D59BC:
- ldr r0, =gSpecialVar_Result
- strh r6, [r0]
-_081D59C0:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5924
-
- thumb_func_start sub_81D59D0
-sub_81D59D0: @ 81D59D0
- push {r4-r6,lr}
- ldr r4, =gSaveBlock1Ptr
- ldr r2, [r4]
- ldr r6, =0x00003d6e
- adds r0, r2, r6
- ldrb r1, [r0]
- movs r3, 0x2
- adds r0, r3, 0
- ands r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- beq _081D59FC
- ldr r0, =gSpecialVar_Result
- strh r3, [r0]
- b _081D5A4E
- .pool
-_081D59FC:
- ldr r1, =0x00003d68
- adds r0, r2, r1
- bl free_203F458
- ldr r2, [r4]
- ldr r3, =0x00003d64
- adds r1, r2, r3
- ldr r1, [r1]
- cmp r0, r1
- bls _081D5A48
- adds r3, 0x4
- adds r0, r2, r3
- bl sub_81D5DF4
- ldr r2, [r4]
- adds r0, r2, r6
- ldrb r0, [r0]
- lsrs r0, 6
- lsls r0, 2
- ldr r3, =0x00003718
- adds r1, r2, r3
- adds r1, r0
- ldr r0, =0x00003d68
- adds r2, r0
- ldr r0, [r2]
- str r0, [r1]
- ldr r0, =gSpecialVar_Result
- strh r5, [r0]
- b _081D5A4E
- .pool
-_081D5A48:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
-_081D5A4E:
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r3, =0x00003d6e
- adds r1, r3
- ldrb r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D59D0
-
- thumb_func_start sub_81D5A70
-sub_81D5A70: @ 81D5A70
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r1, =0x00003d6e
- adds r0, r2, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _081D5AAE
- ldr r0, =0x00003d64
- adds r2, r0
- ldr r1, [r2]
- ldr r0, =0x00034bbe
- cmp r1, r0
- bls _081D5AA8
- adds r0, 0x1
- str r0, [r2]
- b _081D5AAE
- .pool
-_081D5AA8:
- adds r0, r2, 0
- bl sub_80008DC
-_081D5AAE:
- pop {r0}
- bx r0
- thumb_func_end sub_81D5A70
-
- thumb_func_start sub_81D5AB4
-sub_81D5AB4: @ 81D5AB4
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, =0x00003d6e
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x8
- orrs r0, r2
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81D5AB4
-
- thumb_func_start sub_81D5AD0
-sub_81D5AD0: @ 81D5AD0
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00003d6e
- adds r2, r0, r1
- ldrb r1, [r2]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _081D5B00
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- b _081D5B20
- .pool
-_081D5B00:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _081D5B1C
- movs r0, 0x11
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- b _081D5B20
- .pool
-_081D5B1C:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x2
-_081D5B20:
- strh r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5AD0
-
- thumb_func_start sub_81D5B2C
-sub_81D5B2C: @ 81D5B2C
- push {r4-r7,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00003d64
- adds r0, r1
- ldr r7, [r0]
- ldr r0, =0x00034bbe
- cmp r7, r0
- ble _081D5B40
- ldr r7, =0x00034bbf
-_081D5B40:
- movs r4, 0xE1
- lsls r4, 4
- adds r0, r7, 0
- adds r1, r4, 0
- bl __divsi3
- adds r6, r0, 0
- adds r0, r7, 0
- adds r1, r4, 0
- bl __modsi3
- adds r7, r0, 0
- movs r1, 0x3C
- bl __divsi3
- adds r5, r0, 0
- adds r0, r7, 0
- movs r1, 0x3C
- bl __modsi3
- adds r7, r0, 0
- movs r0, 0xA8
- muls r0, r7
- movs r1, 0x64
- bl __divsi3
- adds r4, r0, 0
- ldr r0, =gStringVar1
- adds r1, r6, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, =gStringVar2
- adds r1, r5, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, =gStringVar3
- adds r1, r4, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5B2C
-
- thumb_func_start sub_81D5BBC
-sub_81D5BBC: @ 81D5BBC
- push {lr}
- bl sub_81D56B0
- ldr r0, =gUnknown_0203CF54
- ldr r1, [r0]
- ldrb r0, [r1, 0x6]
- cmp r0, 0x4
- beq _081D5BEC
- ldr r0, =gStringVar1
- ldrb r1, [r1, 0x6]
- movs r2, 0
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- b _081D5BF0
- .pool
-_081D5BEC:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
-_081D5BF0:
- strh r0, [r1]
- bl sub_81D5710
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5BBC
-
- thumb_func_start sub_81D5C00
-sub_81D5C00: @ 81D5C00
- push {lr}
- bl sub_81D56B0
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
- bl sub_81D5710
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5C00
-
- thumb_func_start sub_81D5C18
-sub_81D5C18: @ 81D5C18
- push {lr}
- ldr r0, =0x000040d6
- bl VarGet
- lsls r0, 16
- cmp r0, 0
- beq _081D5C42
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00003d6e
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _081D5C42
- bl GetCurrentTrainerHillMapId
- lsls r0, 24
- cmp r0, 0
- bne _081D5C54
-_081D5C42:
- movs r0, 0
- b _081D5C56
- .pool
-_081D5C54:
- movs r0, 0x1
-_081D5C56:
- pop {r1}
- bx r1
- thumb_func_end sub_81D5C18
-
- thumb_func_start sub_81D5C5C
-sub_81D5C5C: @ 81D5C5C
- push {lr}
- bl sub_81D5C18
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _081D5C74
- ldr r0, =gSpecialVar_Result
- strh r1, [r0]
- b _081D5C7A
- .pool
-_081D5C74:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
-_081D5C7A:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5C5C
-
- thumb_func_start nullsub_129
-nullsub_129: @ 81D5C84
- bx lr
- thumb_func_end nullsub_129
-
- thumb_func_start nullsub_2
-nullsub_2: @ 81D5C88
- bx lr
- thumb_func_end nullsub_2
-
- thumb_func_start PrintOnTrainerHillRecordsWindow
-PrintOnTrainerHillRecordsWindow: @ 81D5C8C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- bl sub_81D56B0
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r5, =gText_TimeBoard
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0xD0
- bl GetStringCenterAlignXOffset
- lsls r2, r0, 24
- lsrs r2, 24
- ldr r6, =gUnknown_0862A5F4
- str r6, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0
- movs r1, 0x1
- movs r3, 0x2
- bl AddTextPrinterParameterized3
- movs r7, 0x12
- movs r0, 0
- mov r8, r0
- mov r10, r4
- ldr r1, =gStringVar4
- mov r9, r1
-_081D5CD6:
- lsls r3, r7, 24
- lsrs r3, 24
- ldr r0, =gUnknown_0862A5F4
- str r0, [sp]
- mov r1, r10
- str r1, [sp, 0x4]
- ldr r0, =gUnknown_0862A660
- mov r1, r8
- lsls r4, r1, 2
- adds r0, r4, r0
- ldr r0, [r0]
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0x1
- movs r2, 0
- bl AddTextPrinterParameterized3
- adds r7, 0xF
- ldr r0, =gSaveBlock1Ptr
- ldr r1, =0x00003718
- adds r4, r1
- ldr r0, [r0]
- adds r0, r4
- bl free_203F458
- adds r4, r0, 0
- movs r5, 0xE1
- lsls r5, 4
- adds r1, r5, 0
- bl __udivsi3
- adds r6, r0, 0
- adds r0, r4, 0
- adds r1, r5, 0
- bl __umodsi3
- adds r5, r0, 0
- ldr r0, =gStringVar1
- adds r1, r6, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r0, r5, 0
- movs r1, 0x3C
- bl __udivsi3
- adds r4, r0, 0
- adds r0, r5, 0
- movs r1, 0x3C
- bl __umodsi3
- adds r5, r0, 0
- ldr r0, =gStringVar2
- adds r1, r4, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- movs r0, 0xA8
- muls r0, r5
- movs r1, 0x64
- bl __udivsi3
- adds r1, r0, 0
- ldr r0, =gStringVar3
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- mov r0, r9
- ldr r1, =gText_TimeCleared
- bl StringCopy
- ldr r1, =gText_XMinYDotZSec
- bl StringExpandPlaceholders
- movs r0, 0x1
- mov r1, r9
- movs r2, 0xD0
- bl GetStringRightAlignXOffset
- lsls r2, r0, 24
- lsrs r2, 24
- lsls r3, r7, 24
- lsrs r3, 24
- ldr r0, =gUnknown_0862A5F4
- str r0, [sp]
- mov r1, r10
- str r1, [sp, 0x4]
- mov r0, r9
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0x1
- bl AddTextPrinterParameterized3
- adds r7, 0x11
- movs r1, 0x1
- add r8, r1
- mov r0, r8
- cmp r0, 0x3
- ble _081D5CD6
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- bl sub_81D5710
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end PrintOnTrainerHillRecordsWindow
-
- thumb_func_start free_203F458
-free_203F458: @ 81D5DF0
- ldr r0, [r0]
- bx lr
- thumb_func_end free_203F458
-
- thumb_func_start sub_81D5DF4
-sub_81D5DF4: @ 81D5DF4
- str r1, [r0]
- bx lr
- thumb_func_end sub_81D5DF4
-
- thumb_func_start sub_81D5DF8
-sub_81D5DF8: @ 81D5DF8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xC7
- lsls r1, 4
- adds r1, r0, r1
- str r1, [sp, 0x4]
- bl sub_81D5F48
- cmp r0, 0
- beq _081D5F0E
- bl sub_81D56B0
- movs r7, 0
- ldr r4, =gSaveBlock2Ptr
- ldr r3, =0x00000cb4
- ldr r0, =0x0000ffff
- adds r2, r0, 0
-_081D5E26:
- ldr r1, [r4]
- lsls r0, r7, 1
- adds r1, r3
- adds r1, r0
- ldrh r0, [r1]
- orrs r0, r2
- strh r0, [r1]
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x1
- bls _081D5E26
- movs r0, 0
- str r0, [sp]
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r2, 0xC7
- lsls r2, 4
- adds r1, r2
- ldr r2, =0x05000180
- mov r0, sp
- bl CpuSet
- bl sub_81D5520
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r7, 0
- ldr r3, =gUnknown_0203CF54
- mov r10, r3
-_081D5E64:
- lsls r4, r7, 1
- mov r8, r4
- adds r5, r4, r7
- lsls r5, 3
- ldr r0, [sp, 0x4]
- adds r5, r0
- adds r1, r5, 0
- ldr r0, =gUnknown_0862A670
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- adds r6, r7, 0x1
- strb r6, [r5]
- mov r0, r10
- ldr r1, [r0]
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r7
- lsls r0, 3
- mov r2, r9
- lsls r4, r2, 4
- subs r4, r2
- lsls r4, 3
- subs r4, r2
- lsls r4, 3
- adds r0, r4
- adds r1, r0
- ldrb r0, [r1, 0x1B]
- bl sub_81660B8
- strb r0, [r5, 0x1]
- mov r0, r10
- ldr r3, [r0]
- adds r0, r7, r4
- movs r2, 0xF0
- lsls r2, 2
- adds r1, r3, r2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0xF
- ands r0, r2
- strh r0, [r5, 0x4]
- ldrb r0, [r1]
- lsrs r0, 4
- movs r1, 0xF
- ands r0, r1
- adds r0, 0x5
- strh r0, [r5, 0x6]
- lsls r1, r7, 26
- lsrs r1, 24
- adds r3, r4
- ldr r2, =0x000003c2
- adds r3, r2
- ldrb r0, [r3]
- asrs r0, r1
- movs r3, 0xF
- ands r0, r3
- adds r0, 0x7
- strb r0, [r5, 0x9]
- mov r2, r10
- ldr r0, [r2]
- adds r0, r4
- ldr r3, =0x000003c3
- adds r0, r3
- ldrb r0, [r0]
- asrs r0, r1
- movs r1, 0xF
- ands r0, r1
- strh r0, [r5, 0xE]
- ldr r0, =EventScript_2C83F0
- str r0, [r5, 0x10]
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r4, =0x00000cb4
- adds r0, r4
- add r0, r8
- strh r6, [r0]
- lsls r6, 24
- lsrs r7, r6, 24
- cmp r7, 0x1
- bls _081D5E64
- bl sub_81D5710
-_081D5F0E:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5DF8
-
- thumb_func_start sub_81D5F48
-sub_81D5F48: @ 81D5F48
- push {lr}
- bl sub_81D56B0
- bl sub_81D5710
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_81D5F48
-
- thumb_func_start sub_81D5F58
-sub_81D5F58: @ 81D5F58
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r4, =gUnknown_0203CF54
- ldr r4, [r4]
- mov r12, r4
- lsls r4, r2, 1
- lsls r5, r0, 4
- subs r5, r0
- lsls r5, 3
- subs r5, r0
- lsls r5, 3
- adds r4, r5
- movs r0, 0xE8
- lsls r0, 2
- add r0, r12
- adds r0, r4
- ldrh r0, [r0]
- movs r4, 0xF
- subs r4, r1
- asrs r0, r4
- movs r4, 0x1
- ands r0, r4
- muls r2, r3
- adds r2, r1
- adds r2, r5
- movs r1, 0xA8
- lsls r1, 2
- add r1, r12
- adds r1, r2
- ldrb r1, [r1]
- movs r2, 0x80
- lsls r2, 2
- adds r3, r2, 0
- movs r2, 0xC0
- lsls r2, 6
- lsls r0, 10
- orrs r0, r2
- orrs r1, r3
- orrs r0, r1
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81D5F58
-
- thumb_func_start sub_81D5FB4
-sub_81D5FB4: @ 81D5FB4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r4, r0, 0
- bl GetCurrentTrainerHillMapId
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0x6
- bne _081D5FD2
- bl InitMapFromSavedGame
- b _081D605E
-_081D5FD2:
- bl sub_81D56B0
- mov r0, r9
- cmp r0, 0x5
- bne _081D5FE6
- bl InitMapFromSavedGame
- bl sub_81D5710
- b _081D605E
-_081D5FE6:
- bl sub_81D5520
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, =gMapHeader
- ldr r0, [r0]
- ldr r2, [r0, 0xC]
- ldr r1, =gBackupMapLayout
- str r4, [r1, 0x8]
- movs r0, 0x1F
- str r0, [r1]
- movs r0, 0x23
- str r0, [r1, 0x4]
- movs r0, 0xE0
- lsls r0, 1
- adds r3, r4, r0
- movs r6, 0x4
-_081D600A:
- adds r4, r2, 0
- adds r4, 0x20
- adds r1, r3, 0
- movs r5, 0xF
-_081D6012:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r5, 0x1
- cmp r5, 0
- bge _081D6012
- adds r3, 0x3E
- adds r2, r4, 0
- subs r6, 0x1
- cmp r6, 0
- bge _081D600A
- movs r6, 0
-_081D602C:
- movs r5, 0
- adds r7, r3, 0
- adds r7, 0x3E
- adds r0, r6, 0x1
- mov r8, r0
- adds r4, r3, 0
-_081D6038:
- mov r0, r9
- adds r1, r5, 0
- adds r2, r6, 0
- movs r3, 0x10
- bl sub_81D5F58
- strh r0, [r4]
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0xF
- ble _081D6038
- adds r3, r7, 0
- mov r6, r8
- cmp r6, 0xF
- ble _081D602C
- bl mapheader_run_script_with_tag_x1
- bl sub_81D5710
-_081D605E:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D5FB4
-
- thumb_func_start InTrainerHill
-InTrainerHill: @ 81D6074
- push {lr}
- ldr r1, =gMapHeader
- ldr r2, =0xfffffe61
- adds r0, r2, 0
- ldrh r1, [r1, 0x12]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0
- cmp r0, 0x3
- bhi _081D608C
- movs r1, 0x1
-_081D608C:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end InTrainerHill
-
- thumb_func_start GetCurrentTrainerHillMapId
-@ u8 GetCurrentTrainerHillMapId()
-GetCurrentTrainerHillMapId: @ 81D609C
- push {lr}
- ldr r0, =gMapHeader
- ldrh r2, [r0, 0x12]
- ldr r0, =0x0000019f
- cmp r2, r0
- bne _081D60B4
- movs r1, 0x1
- b _081D60F8
- .pool
-_081D60B4:
- movs r0, 0xD0
- lsls r0, 1
- cmp r2, r0
- bne _081D60C0
- movs r1, 0x2
- b _081D60F8
-_081D60C0:
- ldr r0, =0x000001a1
- cmp r2, r0
- bne _081D60D0
- movs r1, 0x3
- b _081D60F8
- .pool
-_081D60D0:
- movs r0, 0xD1
- lsls r0, 1
- cmp r2, r0
- bne _081D60DC
- movs r1, 0x4
- b _081D60F8
-_081D60DC:
- ldr r0, =0x000001a3
- cmp r2, r0
- bne _081D60EC
- movs r1, 0x5
- b _081D60F8
- .pool
-_081D60EC:
- movs r0, 0xCF
- lsls r0, 1
- movs r1, 0
- cmp r2, r0
- bne _081D60F8
- movs r1, 0x6
-_081D60F8:
- adds r0, r1, 0
- pop {r1}
- bx r1
- thumb_func_end GetCurrentTrainerHillMapId
-
- thumb_func_start sub_81D6100
-sub_81D6100: @ 81D6100
- push {lr}
- ldr r0, =gMapHeader
- ldrh r1, [r0, 0x12]
- ldr r0, =0x000001a3
- movs r2, 0
- cmp r1, r0
- bne _081D6110
- movs r2, 0x1
-_081D6110:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81D6100
-
- thumb_func_start sub_81D6120
-sub_81D6120: @ 81D6120
- push {lr}
- movs r0, 0x1A
- movs r1, 0x40
- bl Overworld_GetMapHeaderByGroupAndId
- ldr r0, [r0, 0x4]
- ldr r0, [r0, 0x8]
- adds r0, 0x8
- pop {r1}
- bx r1
- thumb_func_end sub_81D6120
-
- thumb_func_start sub_81D6134
-sub_81D6134: @ 81D6134
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081D614C
- ldr r0, =gMapHeader
- ldr r0, [r0, 0x4]
- ldr r0, [r0, 0x8]
- adds r0, 0x8
- b _081D6176
- .pool
-_081D614C:
- bl sub_81D6490
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r1
- lsrs r0, 24
- cmp r0, 0x3
- bls _081D6162
- movs r2, 0x4
-_081D6162:
- ldr r1, =gUnknown_0862A688
- subs r0, r2, 0x1
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x1A
- bl Overworld_GetMapHeaderByGroupAndId
- ldr r0, [r0, 0x4]
- ldr r0, [r0, 0x8]
-_081D6176:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81D6134
-
- thumb_func_start sub_81D6180
-sub_81D6180: @ 81D6180
- lsls r0, 24
- ldr r1, =gSaveBlock2Ptr
- ldr r1, [r1]
- lsrs r0, 23
- adds r1, r0
- ldr r0, =0x00000cb2
- adds r1, r0
- ldrh r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81D6180
-
- thumb_func_start GetTrainerHillTrainerFlag
-@ u8 GetTrainerHillTrainerFlag(u8 eventObjectId)
-GetTrainerHillTrainerFlag: @ 81D619C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_81D5520
- lsls r0, 24
- lsrs r0, 23
- ldr r2, =gEventObjects
- lsls r1, r4, 3
- adds r1, r4
- lsls r1, 2
- adds r1, r2
- adds r0, 0xFF
- ldrb r1, [r1, 0x8]
- adds r0, r1
- lsls r0, 24
- ldr r1, =gSaveBlock2Ptr
- ldr r1, [r1]
- movs r2, 0xEE
- lsls r2, 4
- adds r1, r2
- ldr r2, =gBitTable
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ldrb r1, [r1]
- ands r0, r1
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetTrainerHillTrainerFlag
-
- thumb_func_start sub_81D61E8
-sub_81D61E8: @ 81D61E8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl sub_81D5520
- lsls r0, 25
- lsrs r4, r0, 24
- movs r3, 0
- ldr r0, =gTrainerBattleOpponent_A
- mov r8, r0
- ldr r6, =gSaveBlock2Ptr
- ldr r1, =gBitTable
- mov r12, r1
- adds r5, r6, 0
-_081D6204:
- ldr r2, [r5]
- lsls r0, r3, 1
- ldr r7, =0x00000cb4
- adds r1, r2, r7
- adds r1, r0
- ldrh r0, [r1]
- mov r1, r8
- ldrh r1, [r1]
- cmp r0, r1
- bne _081D6240
- movs r7, 0xEE
- lsls r7, 4
- adds r2, r7
- adds r0, r4, r3
- lsls r0, 2
- add r0, r12
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- b _081D624A
- .pool
-_081D6240:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1
- bls _081D6204
-_081D624A:
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _081D62A2
- movs r3, 0
- ldr r5, =gTrainerBattleOpponent_B
- ldr r0, =gBitTable
- mov r8, r0
-_081D6260:
- ldr r2, [r6]
- lsls r0, r3, 1
- ldr r7, =0x00000cb4
- adds r1, r2, r7
- adds r1, r0
- ldrh r0, [r1]
- ldrh r1, [r5]
- cmp r0, r1
- bne _081D6298
- movs r7, 0xEE
- lsls r7, 4
- adds r2, r7
- adds r0, r4, r3
- lsls r0, 2
- add r0, r8
- ldr r0, [r0]
- ldrb r1, [r2]
- orrs r0, r1
- strb r0, [r2]
- b _081D62A2
- .pool
-_081D6298:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1
- bls _081D6260
-_081D62A2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81D61E8
-
- thumb_func_start sub_81D62AC
-sub_81D62AC: @ 81D62AC
- ldr r0, =EventScript_2C83F0
- bx lr
- .pool
- thumb_func_end sub_81D62AC
-
- thumb_func_start sub_81D62B4
-sub_81D62B4: @ 81D62B4
- push {lr}
- ldr r0, =gSpecialVar_LastTalked
- ldrh r1, [r0]
- movs r0, 0x5
- bl CopyTrainerHillTrainerText
- bl sub_80982B8
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D62B4
-
- thumb_func_start sub_81D62CC
-sub_81D62CC: @ 81D62CC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- subs r1, r0, 0x1
- lsls r0, r1, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _081D636A
- lsls r0, r1, 24
- lsrs r6, r0, 24
- bl sub_81D56B0
- bl GetHighestLevelInPlayerParty
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- bl sub_81D5520
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- mov r5, r9
- adds r0, r5, 0x3
- cmp r5, r0
- bge _081D6366
- ldr r1, =gUnknown_0862A698
- lsls r0, r6, 1
- adds r0, r6
- adds r7, r0, r1
-_081D6316:
- ldrb r2, [r7]
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- ldr r0, =gEnemyParty
- adds r4, r0
- mov r1, r8
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 3
- subs r0, r1
- lsls r0, 3
- adds r0, 0xC
- ldr r3, =gUnknown_0203CF54
- ldr r1, [r3]
- adds r1, r0
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r6
- lsls r0, 3
- adds r0, 0x4
- adds r1, r0
- movs r0, 0x2C
- muls r0, r2
- adds r0, 0x40
- adds r1, r0
- adds r0, r4, 0
- bl sub_806819C
- adds r0, r4, 0
- mov r1, r10
- bl sub_81D642C
- adds r5, 0x1
- adds r7, 0x1
- mov r0, r9
- adds r0, 0x3
- cmp r5, r0
- blt _081D6316
-_081D6366:
- bl sub_81D5710
-_081D636A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D62CC
-
- thumb_func_start sub_81D6384
-sub_81D6384: @ 81D6384
- push {lr}
- bl ZeroEnemyPartyMons
- ldr r0, =gTrainerBattleOpponent_A
- ldrh r0, [r0]
- movs r1, 0
- bl sub_81D62CC
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D6384
-
- thumb_func_start sub_81D639C
-sub_81D639C: @ 81D639C
- push {lr}
- bl ZeroEnemyPartyMons
- ldr r0, =gTrainerBattleOpponent_A
- ldrh r0, [r0]
- movs r1, 0
- bl sub_81D62CC
- ldr r0, =gTrainerBattleOpponent_B
- ldrh r0, [r0]
- movs r1, 0x3
- bl sub_81D62CC
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D639C
-
- thumb_func_start sub_81D63C4
-sub_81D63C4: @ 81D63C4
- movs r0, 0x7
- bx lr
- thumb_func_end sub_81D63C4
-
- thumb_func_start sub_81D63C8
-sub_81D63C8: @ 81D63C8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_81D56B0
- subs r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gUnknown_0203CF54
- ldr r3, [r0]
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r4
- ldrb r2, [r3]
- lsls r0, r2, 4
- subs r0, r2
- lsls r0, 3
- subs r0, r2
- adds r0, r1
- lsls r0, 3
- adds r3, r0
- ldrb r4, [r3, 0x1B]
- bl sub_81D5710
- movs r2, 0
- ldr r0, =gFacilityClassToTrainerClass
- adds r4, r0
- ldrb r3, [r4]
- ldr r1, =gUnknown_0862A3B4
-_081D6406:
- ldrb r0, [r1]
- cmp r0, r3
- bne _081D641C
- ldrb r0, [r1, 0x1]
- b _081D6426
- .pool
-_081D641C:
- adds r1, 0x4
- adds r2, 0x1
- cmp r2, 0x35
- bls _081D6406
- movs r0, 0
-_081D6426:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81D63C8
-
- thumb_func_start sub_81D642C
-sub_81D642C: @ 81D642C
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- mov r0, sp
- strb r1, [r0]
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r5, =gExperienceTables
- mov r1, sp
- ldrb r2, [r1]
- lsls r2, 2
- ldr r3, =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r1, [r1, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r1
- adds r2, r0
- adds r2, r5
- ldr r0, [r2]
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r4, 0
- movs r1, 0x19
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x38
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- bl CalculateMonStats
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D642C
-
- thumb_func_start sub_81D6490
-sub_81D6490: @ 81D6490
- push {r4,lr}
- bl sub_81D56B0
- ldr r0, =gUnknown_0203CF54
- ldr r0, [r0]
- ldrb r4, [r0, 0x6]
- bl sub_81D5710
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81D6490
-
- thumb_func_start sub_81D64AC
-sub_81D64AC: @ 81D64AC
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- movs r1, 0xEE
- lsls r1, 4
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_81D64AC
-
- thumb_func_start sub_81D64C0
-sub_81D64C0: @ 81D64C0
- push {lr}
- bl sub_81D6534
- cmp r0, 0x1
- bne _081D64D4
- ldr r0, =gUnknown_0862A5D4
- movs r1, 0x70
- movs r2, 0x20
- bl LoadPalette
-_081D64D4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D64C0
-
- thumb_func_start sub_81D64DC
-sub_81D64DC: @ 81D64DC
- ldr r1, =gSpecialVar_Result
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r2, =0x00000ef9
- adds r0, r2
- ldrb r0, [r0]
- lsrs r0, 7
- strh r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81D64DC
-
- thumb_func_start sub_81D64FC
-sub_81D64FC: @ 81D64FC
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- ldr r0, =0x00000ef9
- adds r1, r0
- ldrb r0, [r1]
- movs r2, 0x80
- orrs r0, r2
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81D64FC
-
- thumb_func_start sub_81D6518
-sub_81D6518: @ 81D6518
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- ldr r0, =0x00000ef9
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x7F
- ands r0, r2
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81D6518
-
- thumb_func_start sub_81D6534
-sub_81D6534: @ 81D6534
- push {lr}
- bl sub_81D5C18
- lsls r0, 24
- cmp r0, 0
- beq _081D6560
- bl GetCurrentTrainerHillMapId
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- beq _081D6560
- bl sub_81D5C00
- ldr r0, =gSpecialVar_Result
- ldrh r0, [r0]
- cmp r0, 0
- beq _081D6560
- movs r0, 0x1
- b _081D6562
- .pool
-_081D6560:
- movs r0, 0
-_081D6562:
- pop {r1}
- bx r1
- thumb_func_end sub_81D6534
-
- thumb_func_start sub_81D6568
-sub_81D6568: @ 81D6568
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00003d6e
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _081D6590
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- b _081D6594
- .pool
-_081D6590:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
-_081D6594:
- strh r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D6568
-
- thumb_func_start sub_81D65A0
-sub_81D65A0: @ 81D65A0
- push {r4,r5,lr}
- ldr r4, =gSaveBlock1Ptr
- ldr r2, [r4]
- ldr r5, =gSpecialVar_0x8005
- ldr r0, =0x00003d6e
- adds r2, r0
- ldrb r1, [r5]
- lsls r1, 6
- ldrb r3, [r2]
- movs r0, 0x3F
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldr r1, [r4]
- ldr r3, =0x00003d68
- adds r2, r1, r3
- ldrh r0, [r5]
- lsls r0, 2
- ldr r3, =0x00003718
- adds r1, r3
- adds r1, r0
- ldr r0, [r1]
- str r0, [r2]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D65A0
-
- thumb_func_start sub_81D65E8
-sub_81D65E8: @ 81D65E8
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- movs r3, 0
- movs r4, 0
- ldr r0, =gUnknown_0203CF54
- ldr r6, [r0]
- movs r5, 0x1F
-_081D65F8:
- lsls r1, r4, 4
- subs r1, r4
- lsls r1, 3
- subs r1, r4
- lsls r1, 3
- adds r1, r6, r1
- ldrb r2, [r1, 0xC]
- adds r0, r5, 0
- ands r0, r2
- eors r3, r0
- ldrb r1, [r1, 0xD]
- adds r0, r5, 0
- ands r0, r1
- eors r3, r0
- lsls r0, r3, 24
- lsrs r3, r0, 24
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _081D65F8
- movs r1, 0x5
- cmp r7, 0
- beq _081D662A
- movs r1, 0xA
-_081D662A:
- adds r0, r3, 0
- bl __umodsi3
- lsls r0, 24
- lsrs r3, r0, 24
- adds r0, r3, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81D65E8
-
- thumb_func_start sub_81D6640
-sub_81D6640: @ 81D6640
- push {r4,r5,lr}
- movs r3, 0
- movs r2, 0
- ldr r0, =gUnknown_0203CF54
- ldr r4, [r0]
-_081D664A:
- lsls r0, r2, 4
- subs r0, r2
- lsls r0, 3
- subs r0, r2
- lsls r0, 3
- adds r0, r4, r0
- ldrb r1, [r0, 0xC]
- adds r1, r3, r1
- ldrb r0, [r0, 0xD]
- adds r3, r1, r0
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _081D664A
- adds r0, r3, 0
- cmp r0, 0
- bge _081D6670
- adds r0, 0xFF
-_081D6670:
- asrs r4, r0, 8
- lsrs r0, 31
- adds r0, r4, r0
- asrs r0, 1
- lsls r0, 1
- subs r4, r0
- ldr r0, =0x00000864 @ = FLAG_SYS_GAME_CLEAR
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081D66A0
- ldr r0, =gUnknown_0203CF54
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r0, 0x8
- bne _081D66A0
- movs r0, 0x1
- b _081D66A2
- .pool
-_081D66A0:
- movs r0, 0
-_081D66A2:
- bl sub_81D65E8
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gSaveBlock1Ptr
- ldr r5, [r0]
- ldr r1, =0x00003d6e
- adds r0, r5, r1
- ldrb r1, [r0]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0xC0
- bne _081D66C8
- adds r0, r2, 0x1
- movs r1, 0xA
- bl __modsi3
- lsls r0, 24
- lsrs r2, r0, 24
-_081D66C8:
- ldr r1, =gUnknown_0862A5CC
- lsls r0, r4, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r4, [r0]
- ldr r1, =0x00003d64
- adds r0, r5, r1
- ldr r0, [r0]
- movs r1, 0xE1
- lsls r1, 4
- bl __divsi3
- movs r1, 0
- cmp r0, 0xB
- ble _081D6704
- movs r1, 0x1
- cmp r0, 0xC
- ble _081D6704
- movs r1, 0x2
- cmp r0, 0xD
- ble _081D6704
- movs r1, 0x3
- cmp r0, 0xF
- ble _081D6704
- movs r1, 0x5
- cmp r0, 0x11
- bgt _081D6704
- movs r1, 0x4
-_081D6704:
- lsls r0, r1, 1
- adds r0, r4
- ldrh r0, [r0]
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81D6640
-
.align 2, 0 @ Don't pad with nop.
diff --git a/include/battle_tower.h b/include/battle_tower.h
index bd8e80fc1..12d6d2e9e 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -79,7 +79,7 @@ void GetBattleTowerTrainerLanguage(u8 *dst, u16 trainerId);
u8 SetFacilityPtrsGetLevel(void);
u8 GetFrontierEnemyMonLevel(u8 lvlMode);
s32 GetHighestLevelInPlayerParty(void);
-u8 sub_81660B8(u8 facilityClass);
+u8 FacilityClassToGraphicsId(u8 facilityClass);
bool32 ValidateBattleTowerRecord(u8 recordId); // unused
void sub_8166188(void);
diff --git a/include/field_message_box.h b/include/field_message_box.h
index e3deee4d6..9515a54fd 100644
--- a/include/field_message_box.h
+++ b/include/field_message_box.h
@@ -11,6 +11,7 @@ enum
bool8 ShowFieldMessage(const u8 *message);
bool8 sub_8098238(const u8 *message);
+bool8 sub_80982B8(void);
bool8 ShowFieldAutoScrollMessage(const u8 *message);
void HideFieldMessageBox(void);
bool8 IsFieldMessageBoxHidden(void);
diff --git a/include/global.h b/include/global.h
index c11bddc2d..d6a57320d 100644
--- a/include/global.h
+++ b/include/global.h
@@ -378,7 +378,8 @@ struct BattleFrontier
/*0xEE0*/ u8 field_EE0;
/*0xEE1*/ u8 field_EE1[2][PLAYER_NAME_LENGTH + 1];
/*0xEF1*/ u8 field_EF1[2][4];
- /*0xEF9*/ u8 field_EF9;
+ /*0xEF9*/ u8 field_EF9_0:7;
+ /*0xEF9*/ u8 field_EF9_1:1;
/*0xEFA*/ u8 field_EFA;
/*0xEFB*/ u8 field_EFB;
/*0xEFC*/ struct FrontierMonData field_EFC[3];
@@ -792,6 +793,21 @@ struct UnkSaveSubstruct_3b98
u8 trainerName[PLAYER_NAME_LENGTH + 1];
};
+struct SaveTrainerHill
+{
+ /*0x3D64*/ u32 field_3D64;
+ /*0x3D68*/ u32 field_3D68;
+ /*0x3D6C*/ u8 field_3D6C;
+ /*0x3D6D*/ u8 unused;
+ /*0x3D6E*/ u16 field_3D6E_0a:1; // 1
+ /*0x3D6E*/ u16 field_3D6E_0b:1; // 2
+ /*0x3D6E*/ u16 field_3D6E_0c:1; // 4
+ /*0x3D6E*/ u16 field_3D6E_0d:1; // 8
+ /*0x3D6E*/ u16 field_3D6E_0e:1; // x10
+ /*0x3D6E*/ u16 field_3D6E_0f:1; // x20
+ /*0x3D6E*/ u16 field_3D6E_1:2; // x40, x80 = xC0
+};
+
struct SaveBlock1
{
/*0x00*/ struct Coords16 pos;
@@ -869,13 +885,15 @@ struct SaveBlock1
/*0x31A8*/ u8 giftRibbons[52];
/*0x31DC*/ struct Roamer roamer;
/*0x31F8*/ struct EnigmaBerry enigmaBerry;
- /*0x322C*/ u8 field_322C[1276];
+ /*0x322C*/ u8 field_322C[1260];
+ /*0x3718*/ u32 field_3718[4];
/*0x3728*/ struct RamScript ramScript;
/*0x3B14*/ struct RecordMixingGift recordMixingGift;
/*0x3B24*/ u8 seen2[DEX_FLAGS_NO];
/*0x3B58*/ LilycoveLady lilycoveLady;
/*0x3B98*/ struct UnkSaveSubstruct_3b98 unk_3B98[20];
- /*0x3C88*/ u8 filler_3C88[0xE8];
+ /*0x3C88*/ u8 filler_3C88[0xDC];
+ /*0x3D64*/ struct SaveTrainerHill trainerHill;
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
// sizeof: 0x3D88
};
diff --git a/include/main.h b/include/main.h
index 0d441035d..2ed30307b 100644
--- a/include/main.h
+++ b/include/main.h
@@ -61,6 +61,8 @@ void SetHBlankCallback(IntrCallback callback);
void SetVCountCallback(IntrCallback callback);
void SetSerialCallback(IntrCallback callback);
void InitFlashTimer(void);
+void sub_80008DC(u32 *var);
+void sub_80008E8(void);
void DoSoftReset(void);
void ClearPokemonCrySongs(void);
void RestoreSerialTimer3IntrHandlers(void);
diff --git a/include/pokemon.h b/include/pokemon.h
index cfa5cc350..507497683 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -451,8 +451,8 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level);
void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality);
void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId);
void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread);
-void sub_806819C(struct Pokemon *mon, struct BattleTowerPokemon *src);
-void sub_8068338(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50);
+void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src);
+void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50);
void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId);
void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId);
void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest);
diff --git a/ld_script.txt b/ld_script.txt
index be59145a3..2551d884b 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -292,6 +292,7 @@ SECTIONS {
asm/pokenav.o(.text);
src/pokenav_match_call.o(.text);
asm/pokenav.o(.text.after.match.call);
+ src/trainer_hill.o(.text);
src/rayquaza_scene.o(.text);
src/walda_phrase.o(.text);
src/contest_link_81D9DE4.o(.text);
diff --git a/src/apprentice.c b/src/apprentice.c
index 5d636d05d..9cf8cd4b4 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -1080,7 +1080,7 @@ void ResetApprenticeStruct(struct Apprentice *apprentice)
u8 i;
for (i = 0; i < 6; i++)
- apprentice->easyChatWords[i] |= 0xFFFF;
+ apprentice->easyChatWords[i] = 0xFFFF;
apprentice->playerName[0] = EOS;
apprentice->id = 16;
@@ -1094,7 +1094,7 @@ void ResetAllApprenticeData(void)
for (i = 0; i < 4; i++)
{
for (j = 0; j < 6; j++)
- gSaveBlock2Ptr->apprentices[i].easyChatWords[j] |= 0xFFFF;
+ gSaveBlock2Ptr->apprentices[i].easyChatWords[j] = 0xFFFF;
gSaveBlock2Ptr->apprentices[i].id = 16;
gSaveBlock2Ptr->apprentices[i].playerName[0] = EOS;
gSaveBlock2Ptr->apprentices[i].lvlMode = 0;
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 7dd1526dd..1f4831c54 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -1450,7 +1450,7 @@ void ClearBattleAnimationVars(void)
// Clear index array.
for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++)
- sAnimSpriteIndexArray[i] |= 0xFFFF;
+ sAnimSpriteIndexArray[i] = 0xFFFF;
// Clear anim args.
for (i = 0; i < ANIM_ARGS_COUNT; i++)
@@ -1511,7 +1511,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
gAnimScriptCallback = RunAnimScriptCommand;
for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++)
- sAnimSpriteIndexArray[i] |= 0xFFFF;
+ sAnimSpriteIndexArray[i] = 0xFFFF;
if (isMoveAnim)
{
@@ -1572,7 +1572,7 @@ static void ClearSpriteIndex(u16 index)
{
if (sAnimSpriteIndexArray[i] == index)
{
- sAnimSpriteIndexArray[i] |= 0xFFFF;
+ sAnimSpriteIndexArray[i] = 0xFFFF;
return;
}
}
@@ -1779,7 +1779,7 @@ static void ScriptCmd_end(void)
{
FreeSpriteTilesByTag(gBattleAnimPicTable[sAnimSpriteIndexArray[i]].tag);
FreeSpritePaletteByTag(gBattleAnimPicTable[sAnimSpriteIndexArray[i]].tag);
- sAnimSpriteIndexArray[i] |= 0xFFFF; // set terminator.
+ sAnimSpriteIndexArray[i] = 0xFFFF; // set terminator.
}
}
diff --git a/src/battle_dome.c b/src/battle_dome.c
index efc69313e..b9e27675b 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -3548,7 +3548,7 @@ static void sub_8190400(u8 taskId)
SetVBlankCallback(VblankCb0_BattleDome);
sBattleDomeStruct = AllocZeroed(sizeof(*sBattleDomeStruct));
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
- sBattleDomeStruct->arr[i] |= 0xFF;
+ sBattleDomeStruct->arr[i] = 0xFF;
LoadMonIconPalettes();
i = CreateTask(sub_8190CD4, 0);
gTasks[i].data[0] = 0;
diff --git a/src/battle_factory.c b/src/battle_factory.c
index 0445d5dea..5793c78e9 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -198,9 +198,9 @@ static void sub_81A5E94(void)
gUnknown_03001288 = FALSE;
for (i = 0; i < 6; i++)
- gSaveBlock2Ptr->frontier.field_E70[i].monId |= 0xFFFF;
+ gSaveBlock2Ptr->frontier.field_E70[i].monId = 0xFFFF;
for (i = 0; i < 3; i++)
- gUnknown_03006298[i] |= 0xFFFF;
+ gUnknown_03006298[i] = 0xFFFF;
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
diff --git a/src/battle_pike.c b/src/battle_pike.c
index a4b429bd5..c12038efb 100644
--- a/src/battle_pike.c
+++ b/src/battle_pike.c
@@ -1446,7 +1446,7 @@ static void sub_81A84B4(void)
u8 i;
for (i = 0; i < 14; i++)
- gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF;
+ gSaveBlock2Ptr->frontier.field_CB4[i] = 0xFFFF;
}
static void sub_81A84EC(void)
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index 2f0d35feb..c0ff1ecf5 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -1537,7 +1537,7 @@ void sub_81AA1D8(void)
u8 var0, var1;
for (i = 0; i < 8; i++)
- gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF;
+ gSaveBlock2Ptr->frontier.field_CB4[i] = 0xFFFF;
id = sub_81AA9E4();
sub_81AA33C(&var0, &var1);
diff --git a/src/battle_tower.c b/src/battle_tower.c
index deb5acb2e..088ef7972 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -1888,7 +1888,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
else if (trainerId == TRAINER_EREADER)
{
for (i = firstMonId; i < firstMonId + 3; i++)
- sub_806819C(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]);
+ CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]);
return;
}
else if (trainerId == TRAINER_FRONTIER_BRAIN)
@@ -1904,7 +1904,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
if (gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[j].species != 0
&& gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[j].level <= level)
{
- sub_8068338(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[j], FALSE);
+ CreateBattleTowerMon2(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[j], FALSE);
}
}
return;
@@ -2075,7 +2075,7 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId)
else if (trainerId == TRAINER_EREADER)
{
for (i = firstMonId; i < firstMonId + 3; i++)
- sub_806819C(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]);
+ CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]);
return;
}
else if (trainerId == TRAINER_FRONTIER_BRAIN)
@@ -2276,7 +2276,7 @@ void DoSpecialTrainerBattle(void)
case SPECIAL_BATTLE_EREADER:
ZeroEnemyPartyMons();
for (i = 0; i < 3; i++)
- sub_806819C(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i]);
+ CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i]);
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_EREADER_TRAINER;
gTrainerBattleOpponent_A = 0;
CreateTask(Task_StartBattleAfterTransition, 1);
@@ -3258,7 +3258,7 @@ static void FillPartnerParty(u16 trainerId)
if (monData.nickname[0] == EXT_CTRL_CODE_BEGIN && monData.nickname[1] == EXT_CTRL_CODE_JPN)
trainerName[5] = EOS;
}
- sub_8068338(&gPlayerParty[3 + i], &monData, TRUE);
+ CreateBattleTowerMon2(&gPlayerParty[3 + i], &monData, TRUE);
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_NAME, trainerName);
j = IsFrontierTrainerFemale(trainerId + TRAINER_RECORD_MIXING_FRIEND);
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_GENDER, &j);
@@ -3663,7 +3663,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
}
}
-u8 sub_81660B8(u8 facilityClass)
+u8 FacilityClassToGraphicsId(u8 facilityClass)
{
u8 trainerObjectGfxId;
u8 i;
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 40b1edbe3..742b73858 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -1827,7 +1827,7 @@ void sub_81A3ACC(void)
s32 i;
for (i = 0; i < 20; i++)
- gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF;
+ gSaveBlock2Ptr->frontier.field_CB4[i] = 0xFFFF;
}
static void sub_81A3B00(void)
diff --git a/src/link_rfu.c b/src/link_rfu.c
index 0f997591f..ebfc802e0 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -4524,7 +4524,7 @@ void sub_80115EC(s32 a0)
if ((a0 >> i) & 1)
{
gUnknown_03005000.unk_cea[i] = 0;
- gUnknown_03005000.unk_cee[i] |= 0xFF;
+ gUnknown_03005000.unk_cee[i] = 0xFF;
}
}
}
diff --git a/src/party_menu.c b/src/party_menu.c
index 241df1c91..a8c98faec 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -1563,7 +1563,7 @@ static void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 e, TaskFunc task, MainCallb
for (i = 0; i <= 15; i++)
gUnknown_0203CEC4->data[i] = 0;
for (i = 0; i < 3; i++)
- gUnknown_0203CEC4->unkC[i] |= 0xFF;
+ gUnknown_0203CEC4->unkC[i] = 0xFF;
if (d == 0)
gUnknown_0203CEC8.unk9 = 0;
@@ -1851,10 +1851,10 @@ static void PartyMenuInitHelperStructs(u8 a)
gUnknown_0203CEDC[i].unk0 = &gUnknown_086156C4[1];
gUnknown_0203CEDC[i].unk4 = gUnknown_08615704[a][i];
gUnknown_0203CEDC[i].windowId = i;
- gUnknown_0203CEDC[i].unk9 |= 0xFF;
- gUnknown_0203CEDC[i].unkA |= 0xFF;
- gUnknown_0203CEDC[i].unkB |= 0xFF;
- gUnknown_0203CEDC[i].unkC |= 0xFF;
+ gUnknown_0203CEDC[i].unk9 = 0xFF;
+ gUnknown_0203CEDC[i].unkA = 0xFF;
+ gUnknown_0203CEDC[i].unkB = 0xFF;
+ gUnknown_0203CEDC[i].unkC = 0xFF;
}
gUnknown_0203CEDC[0].unk0 = &gUnknown_086156C4[0];
if (a == 3)
diff --git a/src/pokedex.c b/src/pokedex.c
index 755a46821..8c6ed3159 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -1264,7 +1264,7 @@ static void ResetPokedexView(struct PokedexView *pokedexView)
for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
- pokedexView->pokedexList[i].dexNum |= 0xFFFF;
+ pokedexView->pokedexList[i].dexNum = 0xFFFF;
pokedexView->pokedexList[i].seen = 0;
pokedexView->pokedexList[i].owned = 0;
}
@@ -1281,7 +1281,7 @@ static void ResetPokedexView(struct PokedexView *pokedexView)
pokedexView->seenCount = 0;
pokedexView->ownCount = 0;
for (i = 0; i < 4; i++)
- pokedexView->unk61E[i] |= 0xFFFF;
+ pokedexView->unk61E[i] = 0xFFFF;
pokedexView->unk628 = 0;
pokedexView->unk62A = 0;
pokedexView->unk62C = 0;
@@ -2030,7 +2030,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
for (i = sPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
{
- sPokedexView->pokedexList[i].dexNum |= 0xFFFF;
+ sPokedexView->pokedexList[i].dexNum = 0xFFFF;
sPokedexView->pokedexList[i].seen = FALSE;
sPokedexView->pokedexList[i].owned = FALSE;
}
@@ -2437,7 +2437,7 @@ u8 sub_80BDA40(void)
if (sPokedexView->unk61E[i] != 0xFFFF)
{
FreeAndDestroyMonPicSprite(sPokedexView->unk61E[i]);
- sPokedexView->unk61E[i] |= 0xFFFF;
+ sPokedexView->unk61E[i] = 0xFFFF;
}
}
return FALSE;
diff --git a/src/pokemon.c b/src/pokemon.c
index 580216b2c..10371842b 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2745,7 +2745,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI
CalculateMonStats(mon);
}
-void sub_806819C(struct Pokemon *mon, struct BattleTowerPokemon *src)
+void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src)
{
s32 i;
u8 nickname[30];
@@ -2799,7 +2799,7 @@ void sub_806819C(struct Pokemon *mon, struct BattleTowerPokemon *src)
CalculateMonStats(mon);
}
-void sub_8068338(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50)
+void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50)
{
s32 i;
u8 nickname[30];
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index 03823dd45..0dae76f02 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -124,7 +124,7 @@ void sub_8184DA4(u8 arg0)
{
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
{
- sBattleRecords[i][j] |= 0xFF;
+ sBattleRecords[i][j] = 0xFF;
}
sBattleFlags = gBattleTypeFlags;
sAI_Scripts = gBattleResources->ai->aiFlags;
@@ -206,7 +206,7 @@ void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
for (i = 0; i < bytesToClear; i++)
{
sRecordedBytesNo[battlerId]--;
- sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] |= 0xFF;
+ sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] = 0xFF;
if (sRecordedBytesNo[battlerId] == 0)
break;
}
diff --git a/src/rom_8034C54.c b/src/rom_8034C54.c
index cc875bd3f..a3707017e 100644
--- a/src/rom_8034C54.c
+++ b/src/rom_8034C54.c
@@ -82,7 +82,7 @@ bool32 sub_8034C54(u32 count)
for (i = 0; i < count; i++)
{
gUnknown_02022E10->array[i].isActive = FALSE;
- gUnknown_02022E10->array[i].firstOamId |= 0xFF;
+ gUnknown_02022E10->array[i].firstOamId = 0xFF;
}
return TRUE;
diff --git a/src/script_menu.c b/src/script_menu.c
index d415d65a9..4064e1810 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -1407,7 +1407,7 @@ static void sub_80E2578(void)
for (i = 0; i < ARRAY_COUNT(gUnknown_03001124); i++)
{
- gUnknown_03001124[i] |= 0xFF;
+ gUnknown_03001124[i] = 0xFF;
}
GetFontAttribute(1, FONTATTR_MAX_LETTER_WIDTH);
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
new file mode 100644
index 000000000..4f3645963
--- /dev/null
+++ b/src/trainer_hill.c
@@ -0,0 +1,927 @@
+#include "global.h"
+#include "alloc.h"
+#include "battle.h"
+#include "battle_tower.h"
+#include "battle_setup.h"
+#include "event_data.h"
+#include "fieldmap.h"
+#include "field_message_box.h"
+#include "international_string_util.h"
+#include "item.h"
+#include "main.h"
+#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "script.h"
+#include "string_util.h"
+#include "text.h"
+#include "window.h"
+#include "util.h"
+#include "constants/event_object_movement_constants.h"
+#include "constants/maps.h"
+
+#define HILL_TRAINER_NAME_LENGTH 11
+#define HILL_MAX_TIME 215999 // 60 * 60 * 60 - 1
+
+struct TrHillStruct1
+{
+ u8 name[2][HILL_TRAINER_NAME_LENGTH];
+ u8 facilityClass[2];
+};
+
+struct TrainerHillTrainer
+{
+ u8 name[HILL_TRAINER_NAME_LENGTH];
+ u8 facilityClass;
+ u32 field_18;
+ u16 speechBefore[6];
+ u16 speechWin[6];
+ u16 speechLose[6];
+ u16 speechAfter[6];
+ struct BattleTowerPokemon mons[PARTY_SIZE];
+};
+
+struct TrHillStruct5
+{
+ u8 unk0;
+ u8 unk1;
+ struct TrainerHillTrainer trainers[2];
+ u8 data[0x100];
+ u16 unk3A0[2];
+ u8 data2[0x20 - 4];
+ u8 coords[2]; // x first 4 bits, y last 4 bites
+ u8 direction; // array of 4 bites for each trainer
+ u8 range; // array of 4 bites for each trainer
+};
+
+struct TrHillStruct4
+{
+ u8 unkField_0;
+ u8 unkField_1;
+ u8 unkField_2;
+ u8 unkField_3;
+ u8 unkField_4;
+ u8 unkField_5;
+ u8 unkField_6;
+ struct TrHillStruct5 unk0[4];
+};
+
+struct TrHillStruct2
+{
+ u8 layoutId;
+ struct TrHillStruct4 unk4;
+};
+
+extern struct TrHillStruct2 *gUnknown_0203CF54;
+extern struct TrHillStruct1 *gUnknown_0203CF58;
+
+// This file's functions.
+void sub_81D56B0(void);
+void sub_81D5710(void);
+bool32 sub_81D5F48(void);
+void nullsub_2(void);
+void sub_81D5DF4(u32 *dst, u32 val);
+bool32 sub_81D3B34(void);
+u16 sub_81D6640(void);
+u32 sub_81D5DF0(u32 *src);
+u8 GetCurrentTrainerHillMapId(void);
+u8 sub_81D6490(void);
+void sub_81D642C(struct Pokemon *mon, u8 level);
+bool32 sub_81D6534(void);
+
+// const data
+extern void (* const gUnknown_0862A618[])(void);
+extern const struct TrHillStruct4 *const gUnknown_0862A5F8[];
+extern const u16 gUnknown_0862A5D4[];
+extern const u8 gText_TimeBoard[];
+extern const u8 gText_TimeCleared[];
+extern const u8 gText_XMinYDotZSec[];
+extern const u8 gUnknown_0862A5F4[];
+
+extern const u8 *const gUnknown_0862A660[];
+extern const struct EventObjectTemplate gUnknown_0862A670;
+extern const u32 gUnknown_0862A688[4];
+extern const u8 gUnknown_0862A698[][3];
+extern const u16 *const *const gUnknown_0862A5CC[];
+struct
+{
+ u8 trainerClass;
+ u8 musicId;
+} extern const gUnknown_0862A3B4[0x36];
+
+extern const u8 EventScript_2C83F0[];
+
+void sp194_trainer_tower(void)
+{
+ sub_81D56B0();
+ gUnknown_0862A618[gSpecialVar_0x8004]();
+ sub_81D5710();
+}
+
+void sub_81D54BC(void)
+{
+ s32 i;
+
+ gSaveBlock2Ptr->frontier.field_EF9_1 = 0;
+ gSaveBlock2Ptr->frontier.field_EF9_0 = 0;
+ gSaveBlock1Ptr->trainerHill.field_3D68 = 0;
+ for (i = 0; i < 4; i++)
+ sub_81D5DF4(&gSaveBlock1Ptr->field_3718[i], HILL_MAX_TIME);
+}
+
+u8 sub_81D5520(void)
+{
+ return gMapHeader.mapLayoutId - 159;
+}
+
+u8 GetTrainerHillOpponentClass(u16 trainerId)
+{
+ u8 id = trainerId - 1;
+
+ return gFacilityClassToTrainerClass[gUnknown_0203CF58->facilityClass[id]];
+}
+
+void GetTrainerHillTrainerName(u8 *dst, u16 trainerId)
+{
+ s32 i;
+ u8 id = trainerId - 1;
+
+ for (i = 0; i < HILL_TRAINER_NAME_LENGTH; i++)
+ dst[i] = gUnknown_0203CF58->name[id][i];
+}
+
+u8 GetTrainerHillTrainerFrontSpriteId(u16 trainerId)
+{
+ u8 id, facilityClass;
+
+ sub_81D56B0();
+ id = trainerId - 1;
+ facilityClass = gUnknown_0203CF54->unk4.unk0[gUnknown_0203CF54->layoutId].trainers[id].facilityClass;
+ sub_81D5710();
+
+ return gFacilityClassToPicIndex[facilityClass];
+}
+
+void sub_81D55D0(void)
+{
+ s32 i, j;
+
+ sub_81D56B0();
+ gUnknown_0203CF58 = AllocZeroed(sizeof(*gUnknown_0203CF58));
+
+ for (i = 0; i < 2; i++)
+ {
+ for (j = 0; j < HILL_TRAINER_NAME_LENGTH; j++)
+ {
+ gUnknown_0203CF58->name[i][j] = gUnknown_0203CF54->unk4.unk0[gUnknown_0203CF54->layoutId].trainers[i].name[j];
+ }
+ gUnknown_0203CF58->facilityClass[i] = gUnknown_0203CF54->unk4.unk0[gUnknown_0203CF54->layoutId].trainers[i].facilityClass;
+ }
+ sub_80008DC(&gSaveBlock1Ptr->trainerHill.field_3D64);
+ sub_81D5710();
+}
+
+void sub_81D5694(void)
+{
+ if (gUnknown_0203CF58 != NULL)
+ FREE_AND_SET_NULL(gUnknown_0203CF58);
+}
+
+void sub_81D56B0(void)
+{
+ if (gUnknown_0203CF54 == NULL)
+ {
+ gUnknown_0203CF54 = AllocZeroed(sizeof(*gUnknown_0203CF54));
+ gUnknown_0203CF54->layoutId = gMapHeader.mapLayoutId - 159;
+ CpuCopy32(gUnknown_0862A5F8[gSaveBlock1Ptr->trainerHill.field_3D6E_1], &gUnknown_0203CF54->unk4, sizeof(gUnknown_0203CF54->unk4));
+ nullsub_2();
+ }
+}
+
+void sub_81D5710(void)
+{
+ if (gUnknown_0203CF54 != NULL)
+ FREE_AND_SET_NULL(gUnknown_0203CF54);
+}
+
+void CopyTrainerHillTrainerText(u8 which, u16 trainerId)
+{
+ u8 id, layoutId;
+
+ sub_81D56B0();
+ layoutId = sub_81D5520();
+ id = trainerId - 1;
+
+ switch (which)
+ {
+ case 2:
+ FrontierSpeechToString(gUnknown_0203CF54->unk4.unk0[layoutId].trainers[id].speechBefore);
+ break;
+ case 3:
+ FrontierSpeechToString(gUnknown_0203CF54->unk4.unk0[layoutId].trainers[id].speechWin);
+ break;
+ case 4:
+ FrontierSpeechToString(gUnknown_0203CF54->unk4.unk0[layoutId].trainers[id].speechLose);
+ break;
+ case 5:
+ FrontierSpeechToString(gUnknown_0203CF54->unk4.unk0[layoutId].trainers[id].speechAfter);
+ break;
+ }
+
+ sub_81D5710();
+}
+
+void sub_81D581C(void)
+{
+ nullsub_2();
+ if (!sub_81D3B34())
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0f = 1;
+ else
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0f = 0;
+
+ gSaveBlock1Ptr->trainerHill.field_3D6C = 0;
+ sub_80008DC(&gSaveBlock1Ptr->trainerHill.field_3D64);
+ gSaveBlock1Ptr->trainerHill.field_3D64 = 0;
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0c = 0;
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0b = 0;
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0e = 0;
+ gSaveBlock2Ptr->frontier.field_EE0 = 0;
+ gBattleOutcome = 0;
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0a = 0;
+}
+
+void sub_81D58D8(void)
+{
+ sub_80008E8();
+ gSpecialVar_Result = 0;
+ if (gSaveBlock1Ptr->trainerHill.field_3D6E_0c)
+ gSpecialVar_Result++;
+ if (gSaveBlock1Ptr->trainerHill.field_3D6E_0a && gSaveBlock1Ptr->trainerHill.field_3D6E_0b)
+ gSpecialVar_Result++;
+
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0c = 1;
+}
+
+void sub_81D5924(void)
+{
+ u16 itemId = sub_81D6640();
+
+ if (gUnknown_0203CF54->unk4.unkField_2 != 4 || gSaveBlock1Ptr->trainerHill.field_3D6E_0a)
+ {
+ gSpecialVar_Result = 2;
+ }
+ else if (AddBagItem(itemId, 1) == TRUE)
+ {
+ CopyItemName(itemId, gStringVar2);
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0a = 1;
+ gSaveBlock2Ptr->frontier.field_EF9_0 = 0;
+ gSpecialVar_Result = 0;
+ }
+ else
+ {
+ gSpecialVar_Result = 1;
+ }
+}
+
+void sub_81D59D0(void)
+{
+ if (gSaveBlock1Ptr->trainerHill.field_3D6E_0b)
+ {
+ gSpecialVar_Result = 2;
+ }
+ else if (sub_81D5DF0(&gSaveBlock1Ptr->trainerHill.field_3D68) > gSaveBlock1Ptr->trainerHill.field_3D64)
+ {
+ sub_81D5DF4(&gSaveBlock1Ptr->trainerHill.field_3D68, gSaveBlock1Ptr->trainerHill.field_3D64);
+ gSaveBlock1Ptr->field_3718[gSaveBlock1Ptr->trainerHill.field_3D6E_1] = gSaveBlock1Ptr->trainerHill.field_3D68;
+ gSpecialVar_Result = 0;
+ }
+ else
+ {
+ gSpecialVar_Result = 1;
+ }
+
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0b = 1;
+}
+
+void sub_81D5A70(void)
+{
+ if (!gSaveBlock1Ptr->trainerHill.field_3D6E_0c)
+ {
+ if (gSaveBlock1Ptr->trainerHill.field_3D64 >= HILL_MAX_TIME)
+ gSaveBlock1Ptr->trainerHill.field_3D64 = HILL_MAX_TIME;
+ else
+ sub_80008DC(&gSaveBlock1Ptr->trainerHill.field_3D64);
+ }
+}
+
+void sub_81D5AB4(void)
+{
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0d = 1;
+}
+
+void sub_81D5AD0(void)
+{
+ if (gSaveBlock1Ptr->trainerHill.field_3D6E_0d)
+ {
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0d = 0;
+ gSpecialVar_Result = 0;
+ }
+ else if (gSaveBlock1Ptr->trainerHill.field_3D6E_0e)
+ {
+ gSaveBlock1Ptr->trainerHill.field_3D6E_0e = 0;
+ gSpecialVar_Result = 1;
+ }
+ else
+ {
+ gSpecialVar_Result = 2;
+ }
+}
+
+void sub_81D5B2C(void)
+{
+ s32 total, minutes, secondsWhole, secondsFraction;
+
+ total = gSaveBlock1Ptr->trainerHill.field_3D64;
+ if (total >= HILL_MAX_TIME)
+ total = HILL_MAX_TIME;
+
+ minutes = total / (60 * 60);
+ total %= (60 * 60);
+ secondsWhole = total / 60;
+ total %= 60;
+ secondsFraction = (total * 168) / 100;
+
+ ConvertIntToDecimalStringN(gStringVar1, minutes, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar2, secondsWhole, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar3, secondsFraction, STR_CONV_MODE_LEADING_ZEROS, 2);
+}
+
+void sub_81D5BBC(void)
+{
+ sub_81D56B0();
+ if (gUnknown_0203CF54->unk4.unkField_2 != 4)
+ {
+ ConvertIntToDecimalStringN(gStringVar1, gUnknown_0203CF54->unk4.unkField_2, STR_CONV_MODE_LEFT_ALIGN, 1);
+ gSpecialVar_Result = 0;
+ }
+ else
+ {
+ gSpecialVar_Result = 1;
+ }
+
+ sub_81D5710();
+}
+
+void sub_81D5C00(void)
+{
+ sub_81D56B0();
+ gSpecialVar_Result = 0;
+ sub_81D5710();
+}
+
+bool8 sub_81D5C18(void)
+{
+ if (VarGet(VAR_0x40D6) == 0)
+ return FALSE;
+ else if (gSaveBlock1Ptr->trainerHill.field_3D6E_0c)
+ return FALSE;
+ else if (GetCurrentTrainerHillMapId() != 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_81D5C5C(void)
+{
+ if (!sub_81D5C18())
+ gSpecialVar_Result = 0;
+ else
+ gSpecialVar_Result = 1;
+}
+
+void nullsub_129(void)
+{
+
+}
+
+void nullsub_2(void)
+{
+
+}
+
+void PrintOnTrainerHillRecordsWindow(void)
+{
+ s32 i, x, y;
+ u32 total, minutes, secondsWhole, secondsFraction;
+
+ sub_81D56B0();
+ FillWindowPixelBuffer(0, 0);
+ x = GetStringCenterAlignXOffset(1, gText_TimeBoard, 0xD0);
+ AddTextPrinterParameterized3(0, 1, x, 2, gUnknown_0862A5F4, TEXT_SPEED_FF, gText_TimeBoard);
+
+ y = 18;
+ for (i = 0; i < 4; i++)
+ {
+ AddTextPrinterParameterized3(0, 1, 0, y, gUnknown_0862A5F4, TEXT_SPEED_FF, gUnknown_0862A660[i]);
+ y += 15;
+ total = sub_81D5DF0(&gSaveBlock1Ptr->field_3718[i]);
+ minutes = total / (60 * 60);
+ total %= (60 * 60);
+ ConvertIntToDecimalStringN(gStringVar1, minutes, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ secondsWhole = total / 60;
+ total %= 60;
+ ConvertIntToDecimalStringN(gStringVar2, secondsWhole, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ secondsFraction = (total * 168) / 100;
+ ConvertIntToDecimalStringN(gStringVar3, secondsFraction, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringExpandPlaceholders(StringCopy(gStringVar4, gText_TimeCleared), gText_XMinYDotZSec);
+ x = GetStringRightAlignXOffset(1, gStringVar4, 0xD0);
+ AddTextPrinterParameterized3(0, 1, x, y, gUnknown_0862A5F4, TEXT_SPEED_FF, gStringVar4);
+ y += 17;
+ }
+
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+ sub_81D5710();
+}
+
+// In fire red the counter had to be xored by the encryption key in Sav2.
+u32 sub_81D5DF0(u32 *src)
+{
+ return *src;
+}
+
+void sub_81D5DF4(u32 *dst, u32 val)
+{
+ *dst = val;
+}
+
+void sub_81D5DF8(void)
+{
+ u8 i, layoutId;
+ struct EventObjectTemplate *eventTemplates = gSaveBlock1Ptr->eventObjectTemplates;
+
+ if (!sub_81D5F48())
+ return;
+
+ sub_81D56B0();
+ for (i = 0; i < 2; i++)
+ gSaveBlock2Ptr->frontier.field_CB4[i] = 0xFFFF;
+ CpuFill32(0, gSaveBlock1Ptr->eventObjectTemplates, sizeof(gSaveBlock1Ptr->eventObjectTemplates));
+
+ layoutId = sub_81D5520();
+ for (i = 0; i < 2; i++)
+ {
+ u8 bits;
+
+ eventTemplates[i] = gUnknown_0862A670;
+ eventTemplates[i].localId = i + 1;
+ eventTemplates[i].graphicsId = FacilityClassToGraphicsId(gUnknown_0203CF54->unk4.unk0[layoutId].trainers[i].facilityClass);
+ eventTemplates[i].x = gUnknown_0203CF54->unk4.unk0[layoutId].coords[i] & 0xF;
+ eventTemplates[i].y = ((gUnknown_0203CF54->unk4.unk0[layoutId].coords[i] >> 4) & 0xF) + 5;
+ bits = i << 2;
+ eventTemplates[i].movementType = ((gUnknown_0203CF54->unk4.unk0[layoutId].direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP;
+ eventTemplates[i].trainerRange_berryTreeId = (gUnknown_0203CF54->unk4.unk0[layoutId].range >> bits) & 0xF;
+ eventTemplates[i].script = EventScript_2C83F0;
+ gSaveBlock2Ptr->frontier.field_CB4[i] = i + 1;
+ }
+
+ sub_81D5710();
+}
+
+bool32 sub_81D5F48(void)
+{
+ sub_81D56B0();
+ sub_81D5710();
+ return TRUE;
+}
+
+// Functionally equivalent.
+#ifdef NONMATCHING
+u32 sub_81D5F58(u8 layoutId, u32 bit, u32 arg2, u32 arg3)
+{
+ u32 var0, var1, var2, var3;
+
+ var0 = (gUnknown_0203CF54->unk4.unk0[layoutId].unk3A0[arg2] >> (15 - bit)) & 1;
+ var1 = gUnknown_0203CF54->unk4.unk0[layoutId].data[arg2 * arg3 + bit];
+ var3 = 0x200;
+ var2 = 0x3000;
+
+ return ((var0 << 10) | var2) | (var1 | var3);
+}
+#else
+NAKED
+u32 sub_81D5F58(u8 layoutId, u32 bit, u32 arg2, u32 arg3)
+{
+ asm_unified("\n\
+ push {r4,r5,lr}\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ ldr r4, =gUnknown_0203CF54\n\
+ ldr r4, [r4]\n\
+ mov r12, r4\n\
+ lsls r4, r2, 1\n\
+ lsls r5, r0, 4\n\
+ subs r5, r0\n\
+ lsls r5, 3\n\
+ subs r5, r0\n\
+ lsls r5, 3\n\
+ adds r4, r5\n\
+ movs r0, 0xE8\n\
+ lsls r0, 2\n\
+ add r0, r12\n\
+ adds r0, r4\n\
+ ldrh r0, [r0]\n\
+ movs r4, 0xF\n\
+ subs r4, r1\n\
+ asrs r0, r4\n\
+ movs r4, 0x1\n\
+ ands r0, r4\n\
+ muls r2, r3\n\
+ adds r2, r1\n\
+ adds r2, r5\n\
+ movs r1, 0xA8\n\
+ lsls r1, 2\n\
+ add r1, r12\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ movs r2, 0x80\n\
+ lsls r2, 2\n\
+ adds r3, r2, 0\n\
+ movs r2, 0xC0\n\
+ lsls r2, 6\n\
+ lsls r0, 10\n\
+ orrs r0, r2\n\
+ orrs r1, r3\n\
+ orrs r0, r1\n\
+ pop {r4,r5}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .pool");
+}
+#endif // NONMATCHING
+
+void sub_81D5FB4(u16 *mapArg)
+{
+ s32 i, j;
+ u16 *src, *dst;
+ u8 layoutId = GetCurrentTrainerHillMapId();
+
+ if (layoutId == 6)
+ {
+ InitMapFromSavedGame();
+ return;
+ }
+
+ sub_81D56B0();
+ if (layoutId == 5)
+ {
+ InitMapFromSavedGame();
+ sub_81D5710();
+ return;
+ }
+
+ layoutId = sub_81D5520();
+ src = gMapHeader.mapLayout->map;
+ gBackupMapLayout.map = mapArg;
+ gBackupMapLayout.width = 31;
+ gBackupMapLayout.height = 35;
+ dst = mapArg + 224;
+ for (i = 0; i < 5; i++)
+ {
+ for (j = 0; j < 16; j++)
+ dst[j] = src[j];
+ dst += 31;
+ src += 16;
+ }
+
+ for (i = 0; i < 16; i++)
+ {
+ for (j = 0; j < 16; j++)
+ dst[j] = sub_81D5F58(layoutId, j, i, 0x10);
+ dst += 31;
+ }
+
+ mapheader_run_script_with_tag_x1();
+ sub_81D5710();
+}
+
+bool32 InTrainerHill(void)
+{
+ bool32 ret;
+
+ if (gMapHeader.mapLayoutId == 0x19F
+ || gMapHeader.mapLayoutId == 0x1A0
+ || gMapHeader.mapLayoutId == 0x1A1
+ || gMapHeader.mapLayoutId == 0x1A2)
+ ret = TRUE;
+ else
+ ret = FALSE;
+
+ return ret;
+}
+
+u8 GetCurrentTrainerHillMapId(void)
+{
+ u8 ret;
+
+ if (gMapHeader.mapLayoutId == 0x19F)
+ ret = 1;
+ else if (gMapHeader.mapLayoutId == 0x1A0)
+ ret = 2;
+ else if (gMapHeader.mapLayoutId == 0x1A1)
+ ret = 3;
+ else if (gMapHeader.mapLayoutId == 0x1A2)
+ ret = 4;
+ else if (gMapHeader.mapLayoutId == 0x1A3)
+ ret = 5;
+ else if (gMapHeader.mapLayoutId == 0x19E)
+ ret = 6;
+ else
+ ret = 0;
+
+ return ret;
+}
+
+bool32 sub_81D6100(void)
+{
+ bool32 ret;
+
+ if (gMapHeader.mapLayoutId == 0x1A3)
+ ret = TRUE;
+ else
+ ret = FALSE;
+
+ return ret;
+}
+
+const struct WarpEvent* sub_81D6120(void)
+{
+ const struct MapHeader *header = Overworld_GetMapHeaderByGroupAndId(MAP_GROUP(TRAINER_HILL_4F), MAP_NUM(TRAINER_HILL_4F));
+
+ return &header->events->warps[1];
+}
+
+const struct WarpEvent* sub_81D6134(u8 warpEventId)
+{
+ u8 id;
+ const struct MapHeader *header;
+
+ if (warpEventId == 1)
+ return &gMapHeader.events->warps[1];
+
+ id = sub_81D6490();
+ if ((u8)(id - 1) >= 4)
+ id = 4;
+
+ header = Overworld_GetMapHeaderByGroupAndId(MAP_GROUP(TRAINER_HILL_4F), gUnknown_0862A688[id - 1]);
+ return &header->events->warps[0];
+}
+
+u16 sub_81D6180(u8 localId)
+{
+ return gSaveBlock2Ptr->frontier.field_CB4[localId - 1];
+}
+
+bool8 GetTrainerHillTrainerFlag(u8 eventObjectId)
+{
+ u32 layoutId = sub_81D5520() * 2;
+ u8 bitId = gEventObjects[eventObjectId].localId - 1 + layoutId;
+
+ return gSaveBlock2Ptr->frontier.field_EE0 & gBitTable[bitId];
+}
+
+void sub_81D61E8(void)
+{
+ u8 i;
+ u8 layoutId = sub_81D5520() * 2;
+
+ for (i = 0; i < 2; i++)
+ {
+ if (gSaveBlock2Ptr->frontier.field_CB4[i] == gTrainerBattleOpponent_A)
+ {
+ gSaveBlock2Ptr->frontier.field_EE0 |= gBitTable[layoutId + i];
+ break;
+ }
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
+ {
+ for (i = 0; i < 2; i++)
+ {
+ if (gSaveBlock2Ptr->frontier.field_CB4[i] == gTrainerBattleOpponent_B)
+ {
+ gSaveBlock2Ptr->frontier.field_EE0 |= gBitTable[layoutId + i];
+ break;
+ }
+ }
+ }
+}
+
+const u8 *sub_81D62AC(void)
+{
+ return EventScript_2C83F0;
+}
+
+void sub_81D62B4(void)
+{
+ CopyTrainerHillTrainerText(5, gSpecialVar_LastTalked);
+ sub_80982B8();
+}
+
+void sub_81D62CC(u16 trainerId, u8 firstMonId)
+{
+ u8 trId, level;
+ s32 i, layoutId, arrId;
+
+ if ((u16)(trainerId - 1) > 1)
+ return;
+
+ trId = trainerId - 1;
+ sub_81D56B0();
+ level = GetHighestLevelInPlayerParty();
+ layoutId = sub_81D5520();
+ for (i = firstMonId, arrId = 0; i < firstMonId + 3; i++, arrId++)
+ {
+ u8 id = gUnknown_0862A698[trId][arrId];
+ struct Pokemon *mon = &gEnemyParty[i];
+
+ CreateBattleTowerMon(mon, &gUnknown_0203CF54->unk4.unk0[layoutId].trainers[trId].mons[id]);
+ sub_81D642C(mon, level);
+ }
+
+ sub_81D5710();
+}
+
+void sub_81D6384(void)
+{
+ ZeroEnemyPartyMons();
+ sub_81D62CC(gTrainerBattleOpponent_A, 0);
+}
+
+void sub_81D639C(void)
+{
+ ZeroEnemyPartyMons();
+ sub_81D62CC(gTrainerBattleOpponent_A, 0);
+ sub_81D62CC(gTrainerBattleOpponent_B, 3);
+}
+
+// This function is unused, but my best guess is
+// it was supposed to return AI scripts for trainer
+// hill trainers.
+u32 sub_81D63C4(void)
+{
+ return 7;
+}
+
+u8 sub_81D63C8(u16 trainerId)
+{
+ s32 i;
+ u8 trId, facilityClass;
+
+ sub_81D56B0();
+ trId = trainerId - 1;
+ facilityClass = gUnknown_0203CF54->unk4.unk0[gUnknown_0203CF54->layoutId].trainers[trId].facilityClass;
+ sub_81D5710();
+
+ for (i = 0; i < ARRAY_COUNT(gUnknown_0862A3B4); i++)
+ {
+ if (gUnknown_0862A3B4[i].trainerClass == gFacilityClassToTrainerClass[facilityClass])
+ return gUnknown_0862A3B4[i].musicId;
+ }
+
+ return 0;
+}
+
+void sub_81D642C(struct Pokemon *mon, u8 level)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ u32 exp = gExperienceTables[gBaseStats[species].growthRate][level];
+
+ SetMonData(mon, MON_DATA_EXP, &exp);
+ SetMonData(mon, MON_DATA_LEVEL, &level);
+ CalculateMonStats(mon);
+}
+
+u8 sub_81D6490(void)
+{
+ u8 ret;
+
+ sub_81D56B0();
+ ret = gUnknown_0203CF54->unk4.unkField_2;
+ sub_81D5710();
+
+ return ret;
+}
+
+void sub_81D64AC(void)
+{
+ gSaveBlock2Ptr->frontier.field_EE0 = 0xFF;
+}
+
+void sub_81D64C0(void)
+{
+ if (sub_81D6534() == TRUE)
+ LoadPalette(gUnknown_0862A5D4, 0x70, 0x20);
+}
+
+void sub_81D64DC(void)
+{
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_EF9_1;
+}
+
+void sub_81D64FC(void)
+{
+ gSaveBlock2Ptr->frontier.field_EF9_1 = 1;
+}
+
+void sub_81D6518(void)
+{
+ gSaveBlock2Ptr->frontier.field_EF9_1 = 0;
+}
+
+bool32 sub_81D6534(void)
+{
+ if (!sub_81D5C18() || GetCurrentTrainerHillMapId() == 6)
+ return FALSE;
+
+ sub_81D5C00();
+ if (gSpecialVar_Result == 0)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void sub_81D6568(void)
+{
+ if (gSaveBlock1Ptr->trainerHill.field_3D6E_0d)
+ gSpecialVar_Result = 0;
+ else
+ gSpecialVar_Result = 1;
+}
+
+void sub_81D65A0(void)
+{
+ gSaveBlock1Ptr->trainerHill.field_3D6E_1 = gSpecialVar_0x8005;
+ gSaveBlock1Ptr->trainerHill.field_3D68 = gSaveBlock1Ptr->field_3718[gSpecialVar_0x8005];
+}
+
+u8 sub_81D65E8(u8 arg0)
+{
+ u8 var, i, modBy;
+
+ var = 0;
+ for (i = 0; i < 4; i++)
+ {
+ var ^= gUnknown_0203CF54->unk4.unk0[i].unk0 & 0x1F;
+ var ^= gUnknown_0203CF54->unk4.unk0[i].unk1 & 0x1F;
+ }
+
+ if (arg0)
+ modBy = 10;
+ else
+ modBy = 5;
+
+ var %= modBy;
+ return var;
+}
+
+u16 sub_81D6640(void)
+{
+ u8 i;
+ const u16 *ptr;
+ s32 var = 0, var2, minutes, id;
+
+ for (i = 0; i < 4; i++)
+ {
+ var += gUnknown_0203CF54->unk4.unk0[i].unk0;
+ var += gUnknown_0203CF54->unk4.unk0[i].unk1;
+ }
+
+ var2 = var / 256;
+ var2 %= 2;
+ if (FlagGet(FLAG_SYS_GAME_CLEAR) && gUnknown_0203CF54->unk4.unkField_0 == 8)
+ i = sub_81D65E8(1);
+ else
+ i = sub_81D65E8(0);
+
+ if (gSaveBlock1Ptr->trainerHill.field_3D6E_1 == 3)
+ i = (i + 1) % 10;
+
+ ptr = gUnknown_0862A5CC[var2][i];
+ minutes = (signed)(gSaveBlock1Ptr->trainerHill.field_3D64) / (60 * 60);
+ if (minutes < 12)
+ id = 0;
+ else if (minutes < 13)
+ id = 1;
+ else if (minutes < 14)
+ id = 2;
+ else if (minutes < 16)
+ id = 3;
+ else if (minutes < 18)
+ id = 4;
+ else
+ id = 5;
+
+ return ptr[id];
+}
diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c
index 5ddae218b..d57685423 100644
--- a/src/trainer_pokemon_sprites.c
+++ b/src/trainer_pokemon_sprites.c
@@ -109,7 +109,7 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8
{
if (paletteTag == 0xFFFF)
{
- sCreatingSpriteTemplate.paletteTag |= 0xFFFF;
+ sCreatingSpriteTemplate.paletteTag = 0xFFFF;
LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20);
}
else
@@ -122,7 +122,7 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8
{
if (paletteTag == 0xFFFF)
{
- sCreatingSpriteTemplate.paletteTag |= 0xFFFF;
+ sCreatingSpriteTemplate.paletteTag = 0xFFFF;
LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, 0x100 + paletteSlot * 0x10, 0x20);
}
else