summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest_effect.s115
-rw-r--r--src/contest_effect.c144
2 files changed, 144 insertions, 115 deletions
diff --git a/asm/contest_effect.s b/asm/contest_effect.s
index 3013759a1..6b65c85c8 100644
--- a/asm/contest_effect.s
+++ b/asm/contest_effect.s
@@ -5,121 +5,6 @@
.text
- thumb_func_start ContestEffect_35
-ContestEffect_35: @ 80B88CC
- push {r4-r7,lr}
- ldr r1, _080B8940 @ =gSharedMem + 0x192D0
- ldrb r0, [r1, 0x11]
- adds r0, r1
- movs r2, 0
- ldrsb r2, [r0, r2]
- subs r0, r2, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- mov r12, r1
- cmp r2, 0
- beq _080B8994
- ldrb r5, [r1]
- mov r6, r12
- subs r6, 0x70
-_080B88EA:
- movs r2, 0
- lsls r0, r4, 24
- asrs r1, r0, 24
- adds r4, r0, 0
- cmp r5, r1
- beq _080B8910
- ldr r3, _080B8940 @ =gSharedMem + 0x192D0
-_080B88F8:
- lsls r0, r2, 24
- movs r2, 0x80
- lsls r2, 17
- adds r0, r2
- lsrs r2, r0, 24
- asrs r0, 24
- cmp r0, 0x3
- bgt _080B8910
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, r1
- bne _080B88F8
-_080B8910:
- lsls r2, 24
- asrs r1, r2, 24
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r3, r0, r6
- ldrb r1, [r3, 0xB]
- movs r0, 0x80
- ands r0, r1
- adds r7, r2, 0
- cmp r0, 0
- bne _080B8932
- ldrb r1, [r3, 0xC]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _080B8944
-_080B8932:
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r4, r1
- lsrs r4, r0, 24
- cmp r0, 0
- blt _080B8994
- b _080B88EA
- .align 2, 0
-_080B8940: .4byte gSharedMem + 0x192D0
-_080B8944:
- mov r2, r12
- ldrb r1, [r2, 0x11]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- mov r3, r12
- subs r3, 0x70
- adds r5, r0, r3
- ldrh r0, [r5, 0x6]
- ldr r4, _080B899C @ =gContestMoves
- lsls r0, 3
- adds r6, r0, r4
- ldrb r2, [r6, 0x1]
- lsls r2, 29
- asrs r1, r7, 24
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x6]
- lsls r0, 3
- adds r0, r4
- ldrb r0, [r0, 0x1]
- lsls r0, 29
- cmp r2, r0
- bne _080B8994
- ldr r1, _080B89A0 @ =gContestEffects
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- lsls r0, 1
- ldrh r1, [r5, 0x2]
- adds r0, r1
- strh r0, [r5, 0x2]
- mov r2, r12
- ldrb r0, [r2, 0x11]
- movs r1, 0x1F
- bl SetContestantStatusUnk13
-_080B8994:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B899C: .4byte gContestMoves
-_080B89A0: .4byte gContestEffects
- thumb_func_end ContestEffect_35
-
thumb_func_start ContestEffect_36
ContestEffect_36: @ 80B89A4
push {r4-r7,lr}
diff --git a/src/contest_effect.c b/src/contest_effect.c
index 86eb78dac..83ac56a14 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -535,3 +535,147 @@ void ContestEffect_34(void)
}
curContestant->appeal2 = r4;
}
+
+#ifdef NONMATCHING
+// Not even close, send help
+void ContestEffect_35(void)
+{
+ s8 r4;
+
+ for (r4 = shared192D0.unk0[shared192D0.unk11] - 1; r4 >= 0; r4--)
+ {
+ s8 r2;
+ for (r2 = 0; r2 < 4; r2++)
+ {
+ if (shared192D0.unk0[r2] == r4)
+ break;
+ }
+ if (!(sContestantStatus[r2].unkB_7 || sContestantStatus[r2].unkC_0 || sContestantStatus[r2].unkC_1))
+ {
+ u16 move = curContestant->currMove;
+ const struct ContestMove *contestMove = gContestMoves + move;
+ if (contestMove->contestCategory == gContestMoves[sContestantStatus[r2].currMove].contestCategory)
+ {
+ curContestant->appeal2 += gContestEffects[contestMove->effect].appeal * 2;
+ SetContestantStatusUnk13(shared192D0.unk11, 31);
+ }
+ break;
+ }
+ }
+}
+#else
+__attribute__((naked)) void ContestEffect_35(void)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tldr r1, _080B8940 @ =gSharedMem + 0x192D0\n"
+ "\tldrb r0, [r1, 0x11]\n"
+ "\tadds r0, r1\n"
+ "\tmovs r2, 0\n"
+ "\tldrsb r2, [r0, r2]\n"
+ "\tsubs r0, r2, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tmov r12, r1\n"
+ "\tcmp r2, 0\n"
+ "\tbeq _080B8994\n"
+ "\tldrb r5, [r1]\n"
+ "\tmov r6, r12\n"
+ "\tsubs r6, 0x70\n"
+ "_080B88EA:\n"
+ "\tmovs r2, 0\n"
+ "\tlsls r0, r4, 24\n"
+ "\tasrs r1, r0, 24\n"
+ "\tadds r4, r0, 0\n"
+ "\tcmp r5, r1\n"
+ "\tbeq _080B8910\n"
+ "\tldr r3, _080B8940 @ =gSharedMem + 0x192D0\n"
+ "_080B88F8:\n"
+ "\tlsls r0, r2, 24\n"
+ "\tmovs r2, 0x80\n"
+ "\tlsls r2, 17\n"
+ "\tadds r0, r2\n"
+ "\tlsrs r2, r0, 24\n"
+ "\tasrs r0, 24\n"
+ "\tcmp r0, 0x3\n"
+ "\tbgt _080B8910\n"
+ "\tadds r0, r3\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, r1\n"
+ "\tbne _080B88F8\n"
+ "_080B8910:\n"
+ "\tlsls r2, 24\n"
+ "\tasrs r1, r2, 24\n"
+ "\tlsls r0, r1, 3\n"
+ "\tsubs r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r3, r0, r6\n"
+ "\tldrb r1, [r3, 0xB]\n"
+ "\tmovs r0, 0x80\n"
+ "\tands r0, r1\n"
+ "\tadds r7, r2, 0\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080B8932\n"
+ "\tldrb r1, [r3, 0xC]\n"
+ "\tmovs r0, 0x7\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080B8944\n"
+ "_080B8932:\n"
+ "\tmovs r1, 0xFF\n"
+ "\tlsls r1, 24\n"
+ "\tadds r0, r4, r1\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tblt _080B8994\n"
+ "\tb _080B88EA\n"
+ "\t.align 2, 0\n"
+ "_080B8940: .4byte gSharedMem + 0x192D0\n"
+ "_080B8944:\n"
+ "\tmov r2, r12\n"
+ "\tldrb r1, [r2, 0x11]\n"
+ "\tlsls r0, r1, 3\n"
+ "\tsubs r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tmov r3, r12\n"
+ "\tsubs r3, 0x70\n"
+ "\tadds r5, r0, r3\n"
+ "\tldrh r0, [r5, 0x6]\n"
+ "\tldr r4, _080B899C @ =gContestMoves\n"
+ "\tlsls r0, 3\n"
+ "\tadds r6, r0, r4\n"
+ "\tldrb r2, [r6, 0x1]\n"
+ "\tlsls r2, 29\n"
+ "\tasrs r1, r7, 24\n"
+ "\tlsls r0, r1, 3\n"
+ "\tsubs r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r3\n"
+ "\tldrh r0, [r0, 0x6]\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r4\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tlsls r0, 29\n"
+ "\tcmp r2, r0\n"
+ "\tbne _080B8994\n"
+ "\tldr r1, _080B89A0 @ =gContestEffects\n"
+ "\tldrb r0, [r6]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tlsls r0, 1\n"
+ "\tldrh r1, [r5, 0x2]\n"
+ "\tadds r0, r1\n"
+ "\tstrh r0, [r5, 0x2]\n"
+ "\tmov r2, r12\n"
+ "\tldrb r0, [r2, 0x11]\n"
+ "\tmovs r1, 0x1F\n"
+ "\tbl SetContestantStatusUnk13\n"
+ "_080B8994:\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_080B899C: .4byte gContestMoves\n"
+ "_080B89A0: .4byte gContestEffects");
+}
+#endif