summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <YamaArashi@users.noreply.github.com>2017-01-04 11:54:29 -0800
committerGitHub <noreply@github.com>2017-01-04 11:54:29 -0800
commit3c1109d03f5e4581336ee870ed710567498e256f (patch)
treeba4e186c112f5a87cb82316a70f1b92fe355066f
parent355428ee31698073a93c335a6d9db47936c5ffbb (diff)
parent052a03361025b4da5edb3405d8d3070214e3ce68 (diff)
Merge pull request #157 from marijnvdwerf/decompile/sub_800DC24
Decompile sub_800DC24
-rw-r--r--asm/rom_800D42C.s242
-rw-r--r--data/text/battle_strings.inc9
-rw-r--r--include/link.h16
-rw-r--r--ld_script.txt2
-rw-r--r--src/rom_800D42C.c96
5 files changed, 110 insertions, 255 deletions
diff --git a/asm/rom_800D42C.s b/asm/rom_800D42C.s
index 7a04ff5e9..fb917fd7e 100644
--- a/asm/rom_800D42C.s
+++ b/asm/rom_800D42C.s
@@ -984,247 +984,7 @@ _0800DC1C: .4byte gTasks
_0800DC20: .4byte 0x00006001
thumb_func_end sub_800DAF8
- thumb_func_start sub_800DC24
-sub_800DC24: @ 800DC24
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, _0800DC40 @ =gUnknown_02024D26
- ldrb r2, [r0]
- cmp r2, 0x3
- bne _0800DC4C
- ldr r4, _0800DC44 @ =gUnknown_03004210
- ldr r1, _0800DC48 @ =gUnknown_08400E57
- movs r0, 0x2
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0xA0
- movs r3, 0xD
- b _0800DDCA
- .align 2, 0
-_0800DC40: .4byte gUnknown_02024D26
-_0800DC44: .4byte gUnknown_03004210
-_0800DC48: .4byte gUnknown_08400E57
-_0800DC4C:
- ldr r0, _0800DC80 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0800DD38
- cmp r2, 0x1
- bne _0800DCCC
- ldr r2, _0800DC84 @ =gLinkPlayers
- ldr r0, _0800DC88 @ =0x02000000
- ldr r1, _0800DC8C @ =0x000160cb
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x18]
- cmp r0, 0x1
- beq _0800DC9C
- cmp r0, 0x1
- bgt _0800DC90
- cmp r0, 0
- bne _0800DC7E
- b _0800DDA8
-_0800DC7E:
- b _0800DE1C
- .align 2, 0
-_0800DC80: .4byte gBattleTypeFlags
-_0800DC84: .4byte gLinkPlayers
-_0800DC88: .4byte 0x02000000
-_0800DC8C: .4byte 0x000160cb
-_0800DC90:
- cmp r0, 0x2
- bne _0800DC96
- b _0800DDA8
-_0800DC96:
- cmp r0, 0x3
- beq _0800DC9C
- b _0800DE1C
-_0800DC9C:
- ldr r4, _0800DCC0 @ =gUnknown_03004210
- ldr r1, _0800DCC4 @ =gUnknown_08400E48
- movs r5, 0x2
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA0
- movs r3, 0x15
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _0800DCC8 @ =gUnknown_08400E4F
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA8
- movs r3, 0x6
- b _0800DDCA
- .align 2, 0
-_0800DCC0: .4byte gUnknown_03004210
-_0800DCC4: .4byte gUnknown_08400E48
-_0800DCC8: .4byte gUnknown_08400E4F
-_0800DCCC:
- ldr r2, _0800DCF0 @ =gLinkPlayers
- ldr r0, _0800DCF4 @ =0x02000000
- ldr r1, _0800DCF8 @ =0x000160cb
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x18]
- cmp r0, 0x1
- beq _0800DDA8
- cmp r0, 0x1
- bgt _0800DCFC
- cmp r0, 0
- beq _0800DD08
- b _0800DE1C
- .align 2, 0
-_0800DCF0: .4byte gLinkPlayers
-_0800DCF4: .4byte 0x02000000
-_0800DCF8: .4byte 0x000160cb
-_0800DCFC:
- cmp r0, 0x2
- beq _0800DD08
- cmp r0, 0x3
- beq _0800DD06
- b _0800DE1C
-_0800DD06:
- b _0800DDA8
-_0800DD08:
- ldr r4, _0800DD2C @ =gUnknown_03004210
- ldr r1, _0800DD30 @ =gUnknown_08400E48
- movs r5, 0x2
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA0
- movs r3, 0x15
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _0800DD34 @ =gUnknown_08400E4F
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA8
- movs r3, 0x6
- b _0800DDCA
- .align 2, 0
-_0800DD2C: .4byte gUnknown_03004210
-_0800DD30: .4byte gUnknown_08400E48
-_0800DD34: .4byte gUnknown_08400E4F
-_0800DD38:
- cmp r2, 0x1
- bne _0800DD90
- ldr r2, _0800DD78 @ =gLinkPlayers
- ldr r0, _0800DD7C @ =0x02000000
- ldr r1, _0800DD80 @ =0x000160cb
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x18]
- cmp r0, 0
- beq _0800DDA8
- ldr r4, _0800DD84 @ =gUnknown_03004210
- ldr r1, _0800DD88 @ =gUnknown_08400E48
- movs r5, 0x2
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA0
- movs r3, 0x15
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _0800DD8C @ =gUnknown_08400E4F
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA8
- movs r3, 0x6
- b _0800DDCA
- .align 2, 0
-_0800DD78: .4byte gLinkPlayers
-_0800DD7C: .4byte 0x02000000
-_0800DD80: .4byte 0x000160cb
-_0800DD84: .4byte gUnknown_03004210
-_0800DD88: .4byte gUnknown_08400E48
-_0800DD8C: .4byte gUnknown_08400E4F
-_0800DD90:
- ldr r2, _0800DDD8 @ =gLinkPlayers
- ldr r0, _0800DDDC @ =0x02000000
- ldr r1, _0800DDE0 @ =0x000160cb
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x18]
- cmp r0, 0
- beq _0800DDF0
-_0800DDA8:
- ldr r4, _0800DDE4 @ =gUnknown_03004210
- ldr r1, _0800DDE8 @ =gUnknown_08400E48
- movs r5, 0x2
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA0
- movs r3, 0x6
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _0800DDEC @ =gUnknown_08400E4F
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA8
- movs r3, 0x15
-_0800DDCA:
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- b _0800DE1C
- .align 2, 0
-_0800DDD8: .4byte gLinkPlayers
-_0800DDDC: .4byte 0x02000000
-_0800DDE0: .4byte 0x000160cb
-_0800DDE4: .4byte gUnknown_03004210
-_0800DDE8: .4byte gUnknown_08400E48
-_0800DDEC: .4byte gUnknown_08400E4F
-_0800DDF0:
- ldr r4, _0800DE24 @ =gUnknown_03004210
- ldr r1, _0800DE28 @ =gUnknown_08400E48
- movs r5, 0x2
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA0
- movs r3, 0x15
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _0800DE2C @ =gUnknown_08400E4F
- str r5, [sp]
- adds r0, r4, 0
- movs r2, 0xA8
- movs r3, 0x6
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
-_0800DE1C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0800DE24: .4byte gUnknown_03004210
-_0800DE28: .4byte gUnknown_08400E48
-_0800DE2C: .4byte gUnknown_08400E4F
- thumb_func_end sub_800DC24
+ .section .text_800DC24
thumb_func_start sub_800DE30
sub_800DE30: @ 800DE30
diff --git a/data/text/battle_strings.inc b/data/text/battle_strings.inc
index 07628795d..4412b5008 100644
--- a/data/text/battle_strings.inc
+++ b/data/text/battle_strings.inc
@@ -1164,16 +1164,13 @@ gUnknown_08400E42:: @ 8400E42
BattleText_Wally:
.string "WALLY$"
-gUnknown_08400E48:: @ 8400E48
-BattleText_Win:
+BattleText_Win:: @ 8400E48
.string "{HIGHLIGHT TRANSPARENT}Win$"
-gUnknown_08400E4F:: @ 8400E4F
-BattleText_Loss:
+BattleText_Loss:: @ 8400E4F
.string "{HIGHLIGHT TRANSPARENT}Loss$"
-gUnknown_08400E57:: @ 8400E57
-BattleText_Tie:
+BattleText_Tie:: @ 8400E57
.string "{HIGHLIGHT TRANSPARENT}Tie$"
gUnknown_08400E5E:: @ 8400E5E
diff --git a/include/link.h b/include/link.h
index a5d30a473..49dff6547 100644
--- a/include/link.h
+++ b/include/link.h
@@ -62,14 +62,14 @@ enum
struct LinkPlayer
{
- u16 version;
- u16 lp_field_2;
- u32 trainerId;
- u8 name[11];
- u8 gender;
- u32 linkType;
- u16 lp_field_18;
- u16 language;
+ /* 0x00 */ u16 version;
+ /* 0x02 */ u16 lp_field_2;
+ /* 0x04 */ u32 trainerId;
+ /* 0x05 */ u8 name[11];
+ /* 0x10 */ u8 gender;
+ /* 0x14 */ u32 linkType;
+ /* 0x18 */ u16 lp_field_18;
+ /* 0x20 */ u16 language;
};
struct LinkPlayerBlock
diff --git a/ld_script.txt b/ld_script.txt
index 7ab8ac9ce..217afc056 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -49,6 +49,8 @@ SECTIONS {
asm/rom3.o(.text);
src/decompress.o(.text);
asm/rom_800D42C.o(.text);
+ src/rom_800D42C.o(.text);
+ asm/rom_800D42C.o(.text_800DC24);
src/pokemon_1.o(.text);
src/calculate_base_damage.o(.text);
src/pokemon_2.o(.text);
diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c
new file mode 100644
index 000000000..43819f991
--- /dev/null
+++ b/src/rom_800D42C.c
@@ -0,0 +1,96 @@
+#include "global.h"
+#include "battle.h"
+#include "link.h"
+#include "text.h"
+
+struct Unk2000000
+{
+ u8 filler0[0x160CB];
+ /* 0x160CB */ u8 linkPlayerIndex;
+};
+
+extern struct Unk2000000 unk_2000000;
+extern u16 gBattleTypeFlags;
+extern u8 gUnknown_02024D26;
+
+extern struct Window gUnknown_03004210;
+
+extern u8 BattleText_Win[];
+extern u8 BattleText_Loss[];
+extern u8 BattleText_Tie[];
+
+#define LEFT_MESSAGE_X 6
+#define RIGHT_MESSAGE_X 21
+#define CENTER_MESSAGE_X 13
+#define MESSAGE_Y 2
+
+#define PRINT_MESSAGE(text, tileDataStartOffset, x) \
+{ \
+ InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \
+ sub_8002F44(&gUnknown_03004210); \
+}
+
+#define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X)
+#define PRINT_MESSAGE_RIGHT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, RIGHT_MESSAGE_X)
+
+void sub_800DC24(void) {
+
+ if (gUnknown_02024D26 == 3) {
+ PRINT_MESSAGE(BattleText_Tie, 160, CENTER_MESSAGE_X);
+ return;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_40) {
+ // Double battle?
+
+ if (gUnknown_02024D26 == 1) {
+
+ // lp_field_18 = player position?
+ switch (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18) {
+ case 0:
+ case 2: PRINT_MESSAGE_LEFT(BattleText_Win, 160);
+ PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
+ return;
+
+ case 1:
+ case 3: PRINT_MESSAGE_RIGHT(BattleText_Win, 160)
+ PRINT_MESSAGE_LEFT(BattleText_Loss, 168)
+ return;
+ }
+ } else {
+
+ switch (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18) {
+ case 1:
+ case 3: PRINT_MESSAGE_LEFT(BattleText_Win, 160);
+ PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
+ return;
+
+ case 0:
+ case 2: PRINT_MESSAGE_RIGHT(BattleText_Win, 160);
+ PRINT_MESSAGE_LEFT(BattleText_Loss, 168);
+ return;
+ }
+ }
+
+ return;
+ }
+
+
+ if (gUnknown_02024D26 == 1) {
+ if (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18 != 0) {
+ PRINT_MESSAGE_RIGHT(BattleText_Win, 160);
+ PRINT_MESSAGE_LEFT(BattleText_Loss, 168);
+ } else {
+ PRINT_MESSAGE_LEFT(BattleText_Win, 160);
+ PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
+ }
+ } else {
+ if (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18 != 0) {
+ PRINT_MESSAGE_LEFT(BattleText_Win, 160);
+ PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
+ } else {
+ PRINT_MESSAGE_RIGHT(BattleText_Win, 160);
+ PRINT_MESSAGE_LEFT(BattleText_Loss, 168);
+ }
+ }
+}