summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest_link_80C857C.s139
-rw-r--r--include/contest.h3
-rw-r--r--src/battle/contest_link_80C857C.c150
3 files changed, 152 insertions, 140 deletions
diff --git a/asm/contest_link_80C857C.s b/asm/contest_link_80C857C.s
index c6958462c..1ac60af96 100644
--- a/asm/contest_link_80C857C.s
+++ b/asm/contest_link_80C857C.s
@@ -5,145 +5,6 @@
.text
- thumb_func_start sub_80C8644
-sub_80C8644: @ 80C8644
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C8658 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _080C865C @ =sub_80C8660
- str r0, [r1]
- bx lr
- .align 2, 0
-_080C8658: .4byte gTasks
-_080C865C: .4byte sub_80C8660
- thumb_func_end sub_80C8644
-
- thumb_func_start sub_80C8660
-sub_80C8660: @ 80C8660
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080C8694 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080C868E
- bl GetMultiplayerId
- ldr r1, _080C8698 @ =gContestPlayerMonIndex
- strb r0, [r1]
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _080C868E
- ldr r1, _080C869C @ =gIsLinkContest
- movs r0, 0x1
- strb r0, [r1]
- adds r0, r4, 0
- bl SwitchTaskToFollowupFunc
-_080C868E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C8694: .4byte gReceivedRemoteLinkPlayers
-_080C8698: .4byte gContestPlayerMonIndex
-_080C869C: .4byte gIsLinkContest
- thumb_func_end sub_80C8660
-
- thumb_func_start sub_80C86A0
-sub_80C86A0: @ 80C86A0
- push {r4,r5,lr}
- adds r4, r0, 0
-.ifdef ENGLISH
- movs r5, 0x2
-.else
- movs r5, 0x5
-.endif
- ldrb r0, [r4]
- cmp r0, 0xFC
- bne _080C86B6
- ldrb r0, [r4, 0x1]
- cmp r0, 0x15
- bne _080C86B6
-.ifdef ENGLISH
- movs r0, 0x2
-.else
- movs r0, 0x5
-.endif
- b _080C872C
-_080C86B6:
- adds r0, r4, 0
- bl StringLength
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x5
- bhi _080C872A
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _080C872A
-_080C86CA:
- ldrb r1, [r4]
- adds r0, r1, 0
- adds r0, 0x45
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x33
- bls _080C871E
- adds r0, r1, 0
- adds r0, 0x5F
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x9
- bls _080C871E
- adds r0, r1, 0
- cmp r0, 0
- beq _080C871E
- cmp r0, 0xAD
- beq _080C871E
- cmp r0, 0xB8
- beq _080C871E
- cmp r0, 0xAB
- beq _080C871E
- cmp r0, 0xAC
- beq _080C871E
- cmp r0, 0xB5
- beq _080C871E
- cmp r0, 0xB6
- beq _080C871E
- cmp r0, 0xBA
- beq _080C871E
- cmp r0, 0xAE
- beq _080C871E
- cmp r0, 0xB0
- beq _080C871E
- cmp r0, 0xB1
- beq _080C871E
- cmp r0, 0xB2
- beq _080C871E
- cmp r0, 0xB3
- beq _080C871E
- cmp r0, 0xB1
- bne _080C8728
-_080C871E:
- adds r4, 0x1
- ldrb r0, [r4]
- cmp r0, 0xFF
- bne _080C86CA
- b _080C872A
-_080C8728:
- movs r5, 0x1
-_080C872A:
- adds r0, r5, 0
-_080C872C:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80C86A0
-
.ifdef ENGLISH
thumb_func_start sub_80C8734
sub_80C8734: @ 80C8734
diff --git a/include/contest.h b/include/contest.h
index 6b1f1f520..e8e68f0e6 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -271,4 +271,7 @@ struct UnknownContestStruct6
#define shared19338 ((struct UnknownContestStruct4 *)(gSharedMem + 0x19338))
#define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348))
+extern u8 gContestPlayerMonIndex;
+extern u8 gIsLinkContest;
+
#endif // GUARD_CONTEST_H
diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c
index e0b24b9e1..3360ecbb6 100644
--- a/src/battle/contest_link_80C857C.c
+++ b/src/battle/contest_link_80C857C.c
@@ -1,9 +1,13 @@
#include "global.h"
#include "ewram.h"
#include "task.h"
+#include "contest.h"
+#include "text.h"
+#include "string_util.h"
#include "link.h"
-void sub_80C8644(u8 taskId);
+static void sub_80C8644(u8 taskId);
+static void sub_80C8660(u8 taskId);
void sub_80C857C(const void *data, u16 size)
{
@@ -45,6 +49,150 @@ void sub_80C8604(u8 taskId)
gTasks[taskId].func = sub_80C8644;
}
+static void sub_80C8644(u8 taskId)
+{
+ gTasks[taskId].func = sub_80C8660;
+}
+
+static void sub_80C8660(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers)
+ {
+ gContestPlayerMonIndex = GetMultiplayerId();
+ if (GetLinkPlayerCount() == MAX_LINK_PLAYERS)
+ {
+ gIsLinkContest = TRUE;
+ SwitchTaskToFollowupFunc(taskId);
+ }
+ }
+}
+
+#ifdef NONMATCHING
+u8 sub_80C86A0(const u8 *string)
+{
+ u8 language = GAME_LANGUAGE;
+ if (string[0] == EXT_CTRL_CODE_BEGIN && string[1] == 0x15)
+ return language;
+ if (StringLength(string) > 5)
+ return language;
+ for (; *string != EOS; string++)
+ {
+ if (!((*string >= CHAR_A && *string <= CHAR_z) ||
+ (*string >= CHAR_0 + 0 && *string <= CHAR_0 + 9) ||
+ *string == CHAR_SPACE ||
+ *string == CHAR_PERIOD ||
+ *string == CHAR_COMMA ||
+ *string == 0xAB ||
+ *string == CHAR_QUESTION_MARK ||
+ *string == CHAR_MALE ||
+ *string == CHAR_FEMALE ||
+ *string == CHAR_SLASH ||
+ *string == CHAR_HYPHEN ||
+ *string == CHAR_ELLIPSIS ||
+ *string == 0xB1 ||
+ *string == 0xB2 ||
+ *string == 0xB3 ||
+ *string == 0xB1
+ ))
+ {
+ language = LANGUAGE_JAPANESE;
+ break;
+ }
+ }
+ return language;
+}
+#else
+__attribute__((naked)) u8 sub_80C86A0(const u8 *string)
+{
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tadds r4, r0, 0\n"
+ ".ifdef ENGLISH\n"
+ "\tmovs r5, 0x2\n"
+ ".else\n"
+ "\tmovs r5, 0x5\n"
+ ".endif\n"
+ "\tldrb r0, [r4]\n"
+ "\tcmp r0, 0xFC\n"
+ "\tbne _080C86B6\n"
+ "\tldrb r0, [r4, 0x1]\n"
+ "\tcmp r0, 0x15\n"
+ "\tbne _080C86B6\n"
+ ".ifdef ENGLISH\n"
+ "\tmovs r0, 0x2\n"
+ ".else\n"
+ "\tmovs r0, 0x5\n"
+ ".endif\n"
+ "\tb _080C872C\n"
+ "_080C86B6:\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl StringLength\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0x5\n"
+ "\tbhi _080C872A\n"
+ "\tldrb r0, [r4]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbeq _080C872A\n"
+ "_080C86CA:\n"
+ "\tldrb r1, [r4]\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0x45\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x33\n"
+ "\tbls _080C871E\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0x5F\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x9\n"
+ "\tbls _080C871E\n"
+ "\tadds r0, r1, 0\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xAD\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB8\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xAB\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xAC\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB5\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB6\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xBA\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xAE\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB0\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB1\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB2\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB3\n"
+ "\tbeq _080C871E\n"
+ "\tcmp r0, 0xB1\n"
+ "\tbne _080C8728\n"
+ "_080C871E:\n"
+ "\tadds r4, 0x1\n"
+ "\tldrb r0, [r4]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _080C86CA\n"
+ "\tb _080C872A\n"
+ "_080C8728:\n"
+ "\tmovs r5, 0x1\n"
+ "_080C872A:\n"
+ "\tadds r0, r5, 0\n"
+ "_080C872C:\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
asm(".section .text_de");
#if GERMAN