summaryrefslogtreecommitdiff
path: root/src/contest_effect.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/contest_effect.c')
-rw-r--r--src/contest_effect.c180
1 files changed, 36 insertions, 144 deletions
diff --git a/src/contest_effect.c b/src/contest_effect.c
index a5615851f..17779a0c6 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -158,10 +158,8 @@ static void ContestEffect_StartlePrevMons(void)
u8 a = shared192D0.contestant;
if (shared192D0.turnOrder[a] != 0) {
- int i;
- int j = 0;
-
- for (i = 0; i < 4; i++)
+ int i, j;
+ for (i = 0, j = 0; i < 4; i++)
if (shared192D0.turnOrder[a] > shared192D0.turnOrder[i])
shared192D0.jamQueue[j++] = i;
shared192D0.jamQueue[j] = 0xFF;
@@ -617,150 +615,40 @@ static void ContestEffect_QualityDependsOnTiming(void)
sContestantStatus[shared192D0.contestant].appeal2 = appeal;
}
-#ifdef NONMATCHING
-// Not even close, send help
-// Works well if it’s the same type as the one before.
static void ContestEffect_BetterIfSameType(void)
{
- s8 r4;
- s8 r2;
+ s8 turnOrder = shared192D0.turnOrder[shared192D0.contestant];
+ s8 i = turnOrder - 1, j;
+ u16 move;
- for (r4 = shared192D0.turnOrder[shared192D0.contestant]; r4 > 0; r4--)
+ if (turnOrder == 0)
+ return;
+
+ while (1)
{
- for (r2 = 0; r2 < 4; r2++)
+ for (j = 0; j < 4; j++)
{
- if (shared192D0.turnOrder[r2] == r4 - 1)
+ if (shared192D0.turnOrder[j] == i)
break;
}
- if (!(sContestantStatus[r2].noMoreTurns || sContestantStatus[r2].nervous || sContestantStatus[r2].numTurnsSkipped))
+ if (sContestantStatus[j].noMoreTurns || sContestantStatus[j].nervous || sContestantStatus[j].numTurnsSkipped)
+ {
+ if (--i < 0)
+ return;
+ }
+ else
{
- u16 move = sContestantStatus[shared192D0.contestant].currMove;
-
- if (gContestMoves[move].contestCategory == gContestMoves[sContestantStatus[r2].currMove].contestCategory)
- {
- sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
- }
break;
}
}
+
+ move = sContestantStatus[shared192D0.contestant].currMove;
+ if (gContestMoves[move].contestCategory == gContestMoves[sContestantStatus[j].currMove].contestCategory)
+ {
+ sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
+ SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
+ }
}
-#else
-NAKED void ContestEffect_BetterIfSameType(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 SetContestantEffectStringID\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
// Works well if different in type than the one before.
static void ContestEffect_BetterIfDiffType(void)
@@ -1113,16 +1001,20 @@ static bool8 WasAtLeastOneOpponentJammed(void)
shared192D0.jam2 = 10;
SetContestantEffectStringID(contestant, CONTEST_STRING_LITTLE_DISTRACTED);
}
- else if ((shared192D0.jam2 -= sContestantStatus[contestant].jamReduction) <= 0)
- {
- shared192D0.jam2 = 0;
- SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED);
- }
else
{
- JamContestant(contestant, shared192D0.jam2);
- SetStartledString(contestant, shared192D0.jam2);
- jamBuffer[contestant] = shared192D0.jam2;
+ shared192D0.jam2 -= sContestantStatus[contestant].jamReduction;
+ if (shared192D0.jam2 <= 0)
+ {
+ shared192D0.jam2 = 0;
+ SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED);
+ }
+ else
+ {
+ JamContestant(contestant, shared192D0.jam2);
+ SetStartledString(contestant, shared192D0.jam2);
+ jamBuffer[contestant] = shared192D0.jam2;
+ }
}
}
}