summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-10-28 22:18:48 -0700
committerMarcus Huderle <huderlem@gmail.com>2017-10-28 22:18:48 -0700
commitc677029e155aa5f0ef61de708588a36085fd36b4 (patch)
treea494df53e8de3fe675ad55d19b0341b129dd55ce
parent978ca50dad8de72a3940b5423fd5c3b87c13eb46 (diff)
More battle_tower decomp
-rw-r--r--asm/battle_tower.s380
-rw-r--r--include/battle_tower.h3
-rw-r--r--include/global.h7
-rw-r--r--include/tv.h1
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle/battle_controller_opponent.c2
-rw-r--r--src/battle/battle_message.c4
-rw-r--r--src/battle_tower.c285
-rw-r--r--src/de_rom_8040FE0.c2
-rw-r--r--src/engine/mystery_event_script.c2
10 files changed, 297 insertions, 390 deletions
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
deleted file mode 100644
index 6d66a8849..000000000
--- a/asm/battle_tower.s
+++ /dev/null
@@ -1,380 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start unref_sub_8135EE8
-unref_sub_8135EE8: @ 8135EE8
- push {r4-r7,lr}
- ldr r7, _08135F0C @ =gSaveBlock2 + 0x498
- ldr r0, _08135F10 @ =0xfffffb68
- adds r2, r7, r0
- ldrb r0, [r2, 0x8]
- cmp r0, 0
- beq _08135F18
- ldr r4, _08135F14 @ =gUnknown_08405E7E
- ldrb r0, [r2, 0xA]
- ldrb r1, [r2, 0xB]
- adds r0, r1
- ldrb r1, [r2, 0xC]
- adds r0, r1
- ldrb r1, [r2, 0xD]
- adds r0, r1
- movs r1, 0x14
- b _08135F2A
- .align 2, 0
-_08135F0C: .4byte gSaveBlock2 + 0x498
-_08135F10: .4byte 0xfffffb68
-_08135F14: .4byte gUnknown_08405E7E
-_08135F18:
- ldr r4, _08135FA8 @ =gUnknown_08405E60
- ldrb r0, [r2, 0xA]
- ldrb r1, [r2, 0xB]
- adds r0, r1
- ldrb r1, [r2, 0xC]
- adds r0, r1
- ldrb r1, [r2, 0xD]
- adds r0, r1
- movs r1, 0x1E
-_08135F2A:
- bl __umodsi3
- adds r0, r4
- ldrb r0, [r0]
- strb r0, [r7, 0x1]
- adds r0, r7, 0
- adds r0, 0xC
- ldr r4, _08135FAC @ =gSaveBlock2 + 0xA
- adds r1, r4, 0
- bl copy_word_to_mem
- adds r0, r7, 0x4
- subs r4, 0xA
- adds r1, r4, 0
- bl StringCopy8
- movs r0, 0x1
- strh r0, [r7, 0x2]
- movs r5, 0x7
- movs r4, 0
- ldr r0, _08135FB0 @ =gSaveBlock1
- ldr r1, _08135FB4 @ =0x00002b28
- adds r6, r0, r1
- adds r3, r7, 0
- adds r3, 0x10
- adds r2, r7, 0
- adds r2, 0x28
- adds r1, r7, 0
- adds r1, 0x1C
-_08135F64:
- ldrh r0, [r6]
- strh r0, [r3]
- strh r5, [r1]
- adds r0, r5, 0x6
- strh r0, [r2]
- adds r5, 0x1
- adds r6, 0x2
- adds r3, 0x2
- adds r2, 0x2
- adds r1, 0x2
- adds r4, 0x1
- cmp r4, 0x5
- ble _08135F64
- movs r4, 0
-_08135F80:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _08135FB8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2C
- muls r1, r4
- adds r1, 0x34
- adds r1, r7, r1
- bl sub_803AF78
- adds r4, 0x1
- cmp r4, 0x2
- ble _08135F80
- adds r0, r7, 0
- bl sub_8136088
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08135FA8: .4byte gUnknown_08405E60
-_08135FAC: .4byte gSaveBlock2 + 0xA
-_08135FB0: .4byte gSaveBlock1
-_08135FB4: .4byte 0x00002b28
-_08135FB8: .4byte gPlayerParty
- thumb_func_end unref_sub_8135EE8
-
- thumb_func_start sub_8135FBC
-sub_8135FBC: @ 8135FBC
- ldr r1, _08135FCC @ =gTrainerClassToPicIndex
- ldr r0, _08135FD0 @ =gSaveBlock2
- ldr r2, _08135FD4 @ =0x00000499
- adds r0, r2
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08135FCC: .4byte gTrainerClassToPicIndex
-_08135FD0: .4byte gSaveBlock2
-_08135FD4: .4byte 0x00000499
- thumb_func_end sub_8135FBC
-
- thumb_func_start sub_8135FD8
-sub_8135FD8: @ 8135FD8
- ldr r1, _08135FE8 @ =gTrainerClassToNameIndex
- ldr r0, _08135FEC @ =gSaveBlock2
- ldr r2, _08135FF0 @ =0x00000499
- adds r0, r2
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08135FE8: .4byte gTrainerClassToNameIndex
-_08135FEC: .4byte gSaveBlock2
-_08135FF0: .4byte 0x00000499
- thumb_func_end sub_8135FD8
-
- thumb_func_start sub_8135FF4
-sub_8135FF4: @ 8135FF4
- push {r4,lr}
- adds r3, r0, 0
- movs r2, 0
- ldr r4, _08136018 @ =gSaveBlock2 + 0x49C
-_08135FFC:
- adds r0, r3, r2
- adds r1, r2, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x6
- ble _08135FFC
- adds r1, r3, r2
- movs r0, 0xFF
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08136018: .4byte gSaveBlock2 + 0x49C
- thumb_func_end sub_8135FF4
-
- thumb_func_start sub_813601C
-sub_813601C: @ 813601C
- push {r4,r5,lr}
- ldr r1, _08136044 @ =gScriptResult
- movs r0, 0
- strh r0, [r1]
- ldr r5, _08136048 @ =gSaveBlock2 + 0x498
- movs r3, 0
- movs r2, 0
- adds r4, r1, 0
- adds r1, r5, 0
-_0813602E:
- ldm r1!, {r0}
- orrs r3, r0
- adds r2, 0x1
- cmp r2, 0x2D
- bls _0813602E
- cmp r3, 0
- bne _0813604C
- movs r0, 0x1
- strh r0, [r4]
- b _08136078
- .align 2, 0
-_08136044: .4byte gScriptResult
-_08136048: .4byte gSaveBlock2 + 0x498
-_0813604C:
- movs r3, 0
- movs r2, 0
- ldr r4, _08136080 @ =gSaveBlock2
- adds r1, r5, 0
-_08136054:
- ldm r1!, {r0}
- adds r3, r0
- adds r2, 0x1
- cmp r2, 0x2D
- bls _08136054
- movs r1, 0xAA
- lsls r1, 3
- adds r0, r4, r1
- ldr r0, [r0]
- cmp r0, r3
- beq _08136078
- subs r1, 0xB8
- adds r0, r4, r1
- bl sub_81360AC
- ldr r1, _08136084 @ =gScriptResult
- movs r0, 0x1
- strh r0, [r1]
-_08136078:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08136080: .4byte gSaveBlock2
-_08136084: .4byte gScriptResult
- thumb_func_end sub_813601C
-
- thumb_func_start sub_8136088
-sub_8136088: @ 8136088
- push {r4,lr}
- adds r2, r0, 0
- adds r2, 0xB8
- movs r1, 0
- str r1, [r2]
- movs r3, 0
- adds r4, r0, 0
-_08136096:
- ldr r0, [r2]
- ldm r4!, {r1}
- adds r0, r1
- str r0, [r2]
- adds r3, 0x1
- cmp r3, 0x2D
- bls _08136096
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8136088
-
- thumb_func_start sub_81360AC
-sub_81360AC: @ 81360AC
- push {lr}
- movs r1, 0
- movs r2, 0
-_081360B2:
- stm r0!, {r2}
- adds r1, 0x1
- cmp r1, 0x2E
- bls _081360B2
- pop {r0}
- bx r0
- thumb_func_end sub_81360AC
-
- thumb_func_start sub_81360C0
-sub_81360C0: @ 81360C0
- push {lr}
- ldr r0, _081360CC @ =gSaveBlock2 + 0x4A8
- bl sub_813545C
- pop {r0}
- bx r0
- .align 2, 0
-_081360CC: .4byte gSaveBlock2 + 0x4A8
- thumb_func_end sub_81360C0
-
- thumb_func_start sub_81360D0
-sub_81360D0: @ 81360D0
- push {lr}
- ldr r0, _081360E4 @ =gBattleOutcome
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _081360EC
- ldr r1, _081360E8 @ =gStringVar4
- movs r0, 0xFF
- strb r0, [r1]
- b _08136102
- .align 2, 0
-_081360E4: .4byte gBattleOutcome
-_081360E8: .4byte gStringVar4
-_081360EC:
- cmp r0, 0x1
- bne _081360FC
- ldr r0, _081360F8 @ =gSaveBlock2 + 0x4C0
- bl sub_813545C
- b _08136102
- .align 2, 0
-_081360F8: .4byte gSaveBlock2 + 0x4C0
-_081360FC:
- ldr r0, _08136108 @ =gSaveBlock2 + 0x4B4
- bl sub_813545C
-_08136102:
- pop {r0}
- bx r0
- .align 2, 0
-_08136108: .4byte gSaveBlock2 + 0x4B4
- thumb_func_end sub_81360D0
-
- thumb_func_start sub_813610C
-sub_813610C: @ 813610C
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _0813612C @ =gSaveBlock2 + 0x556
-_08136112:
- adds r0, r4, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0813611E
- bl sub_80BFD20
-_0813611E:
- adds r4, 0x1
- cmp r4, 0x1
- ble _08136112
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813612C: .4byte gSaveBlock2 + 0x556
- thumb_func_end sub_813610C
-
-.ifdef GERMAN
- thumb_func_start de_sub_81364AC
-de_sub_81364AC: @ 81364AC
- push {lr}
- ldr r2, _DE_081364C0 @ =gSaveBlock2
- ldr r0, _DE_081364C4 @ =0x00000564
- adds r1, r2, r0
- ldrb r0, [r1]
- cmp r0, 0xC8
- bne _DE_081364CC
- ldr r1, _DE_081364C8 @ =0x00000499
- adds r0, r2, r1
- b _DE_081364F2
- .align 2, 0
-_DE_081364C0: .4byte gSaveBlock2
-_DE_081364C4: .4byte 0x00000564
-_DE_081364C8: .4byte 0x00000499
-_DE_081364CC:
- cmp r0, 0x63
- bhi _DE_081364E4
- ldr r2, _DE_081364E0 @ =gBattleTowerTrainers
- ldrb r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- b _DE_081364F2
- .align 2, 0
-_DE_081364E0: .4byte gBattleTowerTrainers
-_DE_081364E4:
- ldrb r0, [r1]
- subs r0, 0x64
- movs r1, 0xA4
- muls r0, r1
- adds r0, r2
- adds r1, 0xA9
- adds r0, r1
-_DE_081364F2:
- ldrb r0, [r0]
- pop {r1}
- bx r1
- thumb_func_end de_sub_81364AC
-
- thumb_func_start de_sub_81364F8
-de_sub_81364F8: @ 81364F8
- ldr r0, _DE_08136504 @ =gSaveBlock2
- ldr r1, _DE_08136508 @ =0x00000499
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_DE_08136504: .4byte gSaveBlock2
-_DE_08136508: .4byte 0x00000499
- thumb_func_end de_sub_81364F8
-.endif
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 2f3be2763..5f6cd3b87 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -92,5 +92,8 @@ void sub_813461C(u8 levelType);
void sub_8134AC0(struct BattleTowerRecord *);
u16 sub_8135D3C(u8);
void sub_8135FF4(u8*);
+u8 sub_8135FBC(void);
+u8 sub_8135FD8(void);
+void sub_813601C(void);
#endif // GUARD_BATTLE_TOWER_H
diff --git a/include/global.h b/include/global.h
index 4cc5f6bcc..41cffe3c2 100644
--- a/include/global.h
+++ b/include/global.h
@@ -786,7 +786,12 @@ struct BattleTowerEReaderTrainer
/*0x10*/struct {
u16 easyChat[6];
} greeting;
- /*0x1C*/u8 filler_1C[0x18];
+ /*0x1C*/struct {
+ u16 easyChat[6];
+ } farewellPlayerLost;
+ /*0x28*/struct {
+ u16 easyChat[6];
+ } farewellPlayerWon;
/*0x34*/struct UnknownPokemonStruct party[3];
/*0xB8*/u32 checksum;
};
diff --git a/include/tv.h b/include/tv.h
index 3243fff2c..a933e1779 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -107,5 +107,6 @@ void sub_80BE3BC(void);
void UpdateTVShowsPerDay(u16);
void sub_80C045C();
void sub_80BF088(u8, s32);
+void sub_80BFD20(void);
#endif // GUARD_TV_H
diff --git a/ld_script.txt b/ld_script.txt
index a77356dd0..16b09ed87 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -232,7 +232,6 @@ SECTIONS {
src/field/decoration_inventory.o(.text);
src/field/roamer.o(.text);
src/battle_tower.o(.text);
- asm/battle_tower.o(.text);
src/field/use_pokeblock.o(.text);
src/battle/battle_controller_wally.o(.text);
src/field/player_pc.o(.text);
diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c
index 72b56b962..b6ada3b7b 100644
--- a/src/battle/battle_controller_opponent.c
+++ b/src/battle/battle_controller_opponent.c
@@ -4,6 +4,7 @@
#include "data2.h"
#include "battle_811DA74.h"
#include "battle_anim_813F0F4.h"
+#include "battle_tower.h"
#include "link.h"
#include "m4a.h"
#include "main.h"
@@ -76,7 +77,6 @@ extern u8 sub_8046400();
extern void sub_8032A08();
extern void sub_8043DB0();
extern void sub_8033160(void);
-extern u8 sub_8135FBC(void);
extern u8 get_trainer_class_pic_index(void);
extern void sub_80313A0(struct Sprite *);
extern void sub_8032B4C(void);
diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c
index a3cc320ad..9df153e0a 100644
--- a/src/battle/battle_message.c
+++ b/src/battle/battle_message.c
@@ -1,6 +1,7 @@
#include "global.h"
-#include "battle_message.h"
#include "battle.h"
+#include "battle_message.h"
+#include "battle_tower.h"
#include "item.h"
#include "items.h"
#include "pokemon.h"
@@ -127,7 +128,6 @@ u8 GetBankSide(u8 bank);
s32 sub_803FC34(u16);
void get_trainer_name(u8* dst);
u8 get_trainer_class_name_index(void);
-u8 sub_8135FD8(void);
u8 GetMultiplayerId(void);
u8 GetBankByPlayerAI(u8 ID);
u8 GetBankSide(u8 bank);
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 2513322cc..1ed893fdf 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -22,6 +22,7 @@
#include "task.h"
#include "text.h"
#include "trainer.h"
+#include "tv.h"
#include "vars.h"
#include "data/battle_tower/trainers.h"
@@ -261,11 +262,11 @@ extern u8 gBattleOutcome;
extern struct BattlePokemon gBattleMons[];
extern void ValidateBattleTowerRecordChecksums(void);
-extern void sub_813601C(void);
extern void sub_81349FC(u8);
-extern void sub_81360AC(struct BattleTowerEReaderTrainer *);
extern void sub_8135A3C(void);
extern void sub_8135CFC(void);
+static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *);
+//static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer);
static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *);
static void ClearBattleTowerRecord(struct BattleTowerRecord *);
@@ -2258,7 +2259,7 @@ void sub_8135668(void)
case 6:
if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200)
{
- sub_81360AC(&gSaveBlock2.filler_A8.ereaderTrainer);
+ ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer);
}
if (gSaveBlock2.filler_A8.totalBattleTowerWins < 9999)
@@ -2757,3 +2758,281 @@ void sub_8135E50()
IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS);
}
}
+
+__attribute__((naked))
+void unref_sub_8135EE8()
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ ldr r7, _08135F0C @ =gSaveBlock2 + 0x498\n\
+ ldr r0, _08135F10 @ =0xfffffb68\n\
+ adds r2, r7, r0\n\
+ ldrb r0, [r2, 0x8]\n\
+ cmp r0, 0\n\
+ beq _08135F18\n\
+ ldr r4, _08135F14 @ =gUnknown_08405E7E\n\
+ ldrb r0, [r2, 0xA]\n\
+ ldrb r1, [r2, 0xB]\n\
+ adds r0, r1\n\
+ ldrb r1, [r2, 0xC]\n\
+ adds r0, r1\n\
+ ldrb r1, [r2, 0xD]\n\
+ adds r0, r1\n\
+ movs r1, 0x14\n\
+ b _08135F2A\n\
+ .align 2, 0\n\
+_08135F0C: .4byte gSaveBlock2 + 0x498\n\
+_08135F10: .4byte 0xfffffb68\n\
+_08135F14: .4byte gUnknown_08405E7E\n\
+_08135F18:\n\
+ ldr r4, _08135FA8 @ =gUnknown_08405E60\n\
+ ldrb r0, [r2, 0xA]\n\
+ ldrb r1, [r2, 0xB]\n\
+ adds r0, r1\n\
+ ldrb r1, [r2, 0xC]\n\
+ adds r0, r1\n\
+ ldrb r1, [r2, 0xD]\n\
+ adds r0, r1\n\
+ movs r1, 0x1E\n\
+_08135F2A:\n\
+ bl __umodsi3\n\
+ adds r0, r4\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r7, 0x1]\n\
+ adds r0, r7, 0\n\
+ adds r0, 0xC\n\
+ ldr r4, _08135FAC @ =gSaveBlock2 + 0xA\n\
+ adds r1, r4, 0\n\
+ bl copy_word_to_mem\n\
+ adds r0, r7, 0x4\n\
+ subs r4, 0xA\n\
+ adds r1, r4, 0\n\
+ bl StringCopy8\n\
+ movs r0, 0x1\n\
+ strh r0, [r7, 0x2]\n\
+ movs r5, 0x7\n\
+ movs r4, 0\n\
+ ldr r0, _08135FB0 @ =gSaveBlock1\n\
+ ldr r1, _08135FB4 @ =0x00002b28\n\
+ adds r6, r0, r1\n\
+ adds r3, r7, 0\n\
+ adds r3, 0x10\n\
+ adds r2, r7, 0\n\
+ adds r2, 0x28\n\
+ adds r1, r7, 0\n\
+ adds r1, 0x1C\n\
+_08135F64:\n\
+ ldrh r0, [r6]\n\
+ strh r0, [r3]\n\
+ strh r5, [r1]\n\
+ adds r0, r5, 0x6\n\
+ strh r0, [r2]\n\
+ adds r5, 0x1\n\
+ adds r6, 0x2\n\
+ adds r3, 0x2\n\
+ adds r2, 0x2\n\
+ adds r1, 0x2\n\
+ adds r4, 0x1\n\
+ cmp r4, 0x5\n\
+ ble _08135F64\n\
+ movs r4, 0\n\
+_08135F80:\n\
+ movs r0, 0x64\n\
+ muls r0, r4\n\
+ ldr r1, _08135FB8 @ =gPlayerParty\n\
+ adds r0, r1\n\
+ movs r1, 0x2C\n\
+ muls r1, r4\n\
+ adds r1, 0x34\n\
+ adds r1, r7, r1\n\
+ bl sub_803AF78\n\
+ adds r4, 0x1\n\
+ cmp r4, 0x2\n\
+ ble _08135F80\n\
+ adds r0, r7, 0\n\
+ bl SetEReaderTrainerChecksum\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08135FA8: .4byte gUnknown_08405E60\n\
+_08135FAC: .4byte gSaveBlock2 + 0xA\n\
+_08135FB0: .4byte gSaveBlock1\n\
+_08135FB4: .4byte 0x00002b28\n\
+_08135FB8: .4byte gPlayerParty\n\
+.syntax divided\n");
+}
+
+u8 sub_8135FBC(void)
+{
+ return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass];
+}
+
+u8 sub_8135FD8(void)
+{
+ return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass];
+}
+
+void sub_8135FF4(u8 *text)
+{
+ s32 i;
+
+ for (i = 0; i < 7; i++)
+ {
+ text[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i];
+ }
+
+ text[i] = 0xFF;
+}
+
+void sub_813601C(void)
+{
+ u32 i;
+ u32 checksum;
+ struct BattleTowerEReaderTrainer *ereaderTrainer;
+
+ gScriptResult = 0;
+ ereaderTrainer = &gSaveBlock2.filler_A8.ereaderTrainer;
+
+ checksum = 0;
+ for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++)
+ {
+ checksum |= ((u32 *)ereaderTrainer)[i];
+ }
+
+ if (checksum == 0)
+ {
+ gScriptResult = 1;
+ return;
+ }
+
+ checksum = 0;
+ for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++)
+ {
+ checksum += ((u32 *)ereaderTrainer)[i];
+ }
+
+ if (gSaveBlock2.filler_A8.ereaderTrainer.checksum != checksum)
+ {
+ ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer);
+ gScriptResult = 1;
+ }
+}
+
+void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer)
+{
+ s32 i;
+
+ ereaderTrainer->checksum = 0;
+ for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++)
+ {
+ ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i];
+ }
+}
+
+void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer)
+{
+ u32 i;
+
+ for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++)
+ {
+ ((u32 *)ereaderTrainer)[i] = 0;
+ }
+}
+
+void sub_81360C0(void)
+{
+ sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat);
+}
+
+void sub_81360D0(void)
+{
+ if (gBattleOutcome == BATTLE_DREW)
+ {
+ gStringVar4[0] = 0xFF;
+ }
+ else if (gBattleOutcome == BATTLE_WON)
+ {
+ sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerWon.easyChat);
+ }
+ else
+ {
+ sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerLost.easyChat);
+ }
+}
+
+void sub_813610C(void)
+{
+ s32 i;
+
+ for (i = 0; i < 2; i++)
+ {
+ if (gSaveBlock2.filler_A8.var_4AE[i] == 1)
+ {
+ sub_80BFD20();
+ }
+ }
+}
+
+
+#if GERMAN
+__attribute__((naked))
+u8 de_sub_81364AC(void)
+{
+ asm(".syntax unified\n\
+ push {lr}\n\
+ ldr r2, _DE_081364C0 @ =gSaveBlock2\n\
+ ldr r0, _DE_081364C4 @ =0x00000564\n\
+ adds r1, r2, r0\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xC8\n\
+ bne _DE_081364CC\n\
+ ldr r1, _DE_081364C8 @ =0x00000499\n\
+ adds r0, r2, r1\n\
+ b _DE_081364F2\n\
+ .align 2, 0\n\
+_DE_081364C0: .4byte gSaveBlock2\n\
+_DE_081364C4: .4byte 0x00000564\n\
+_DE_081364C8: .4byte 0x00000499\n\
+_DE_081364CC:\n\
+ cmp r0, 0x63\n\
+ bhi _DE_081364E4\n\
+ ldr r2, _DE_081364E0 @ =gBattleTowerTrainers\n\
+ ldrb r1, [r1]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r2\n\
+ b _DE_081364F2\n\
+ .align 2, 0\n\
+_DE_081364E0: .4byte gBattleTowerTrainers\n\
+_DE_081364E4:\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0x64\n\
+ movs r1, 0xA4\n\
+ muls r0, r1\n\
+ adds r0, r2\n\
+ adds r1, 0xA9\n\
+ adds r0, r1\n\
+_DE_081364F2:\n\
+ ldrb r0, [r0]\n\
+ pop {r1}\n\
+ bx r1\n\
+.syntax divided\n");
+}
+
+__attribute__((naked))
+u8 de_sub_81364F8(void)
+{
+ asm(".syntax unified\n\
+ ldr r0, _DE_08136504 @ =gSaveBlock2\n\
+ ldr r1, _DE_08136508 @ =0x00000499\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ bx lr\n\
+ .align 2, 0\n\
+_DE_08136504: .4byte gSaveBlock2\n\
+_DE_08136508: .4byte 0x00000499\n\
+.syntax divided\n");
+}
+#endif
diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c
index eebcc1437..953871c8b 100644
--- a/src/de_rom_8040FE0.c
+++ b/src/de_rom_8040FE0.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "battle.h"
+#include "battle_tower.h"
#if GERMAN
@@ -59,7 +60,6 @@ u8 *de_sub_804100C(u8 gender) {
u8 de_sub_81364AC(void);
u8 get_trainer_class_name_index(void);
u8 de_sub_81364F8(void);
-u8 sub_8135FD8(void);
u8 *de_sub_8041024(s32 arg0, u32 arg1) {
u8 nameIndex, trainerClass, gender;
diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c
index 38ada0685..c07a23262 100644
--- a/src/engine/mystery_event_script.c
+++ b/src/engine/mystery_event_script.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "berry.h"
+#include "battle_tower.h"
#include "easy_chat.h"
#include "event_data.h"
#include "mail_data.h"
@@ -27,7 +28,6 @@
#endif
extern void party_compaction(void);
-extern void sub_813601C(void);
extern ScrCmdFunc gMysteryEventScriptCmdTable[];
extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[];