summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest_effect.s218
-rw-r--r--include/contest.h3
-rw-r--r--ld_script.txt1
-rw-r--r--src/contest_effect.c100
4 files changed, 86 insertions, 236 deletions
diff --git a/asm/contest_effect.s b/asm/contest_effect.s
deleted file mode 100644
index 22d116663..000000000
--- a/asm/contest_effect.s
+++ /dev/null
@@ -1,218 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "include/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80B9120
-sub_80B9120: @ 80B9120
- push {r4-r7,lr}
- sub sp, 0xC
- mov r0, sp
- movs r1, 0
- movs r2, 0x8
- bl memset
- movs r7, 0
- ldr r1, _080B918C @ =gSharedMem + 0x192D0
- ldrb r0, [r1, 0x8]
- cmp r0, 0xFF
- beq _080B91D8
- adds r5, r1, 0
-_080B913A:
- adds r0, r5, 0
- adds r0, 0x8
- adds r0, r7, r0
- ldrb r4, [r0]
- adds r6, r4, 0
- adds r0, r4, 0
- str r1, [sp, 0x8]
- bl sub_80B90C0
- lsls r0, 24
- ldr r1, [sp, 0x8]
- cmp r0, 0
- beq _080B91C8
- ldrh r0, [r1, 0x4]
- strh r0, [r1, 0x6]
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- subs r1, 0x70
- adds r2, r0, r1
- ldrb r1, [r2, 0x10]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080B9174
- movs r1, 0x6
- ldrsh r0, [r5, r1]
- lsls r0, 1
- strh r0, [r5, 0x6]
-_080B9174:
- ldrb r0, [r2, 0x10]
- movs r3, 0x1
- ands r3, r0
- cmp r3, 0
- beq _080B9190
- movs r0, 0xA
- strh r0, [r5, 0x6]
- adds r0, r4, 0
- movs r1, 0x2F
- bl SetContestantStatusUnk13
- b _080B91C8
- .align 2, 0
-_080B918C: .4byte gSharedMem + 0x192D0
-_080B9190:
- ldrb r1, [r2, 0xF]
- ldrh r0, [r5, 0x6]
- subs r0, r1
- adds r1, r0, 0
- strh r0, [r5, 0x6]
- lsls r0, 16
- cmp r0, 0
- bgt _080B91AC
- strh r3, [r5, 0x6]
- adds r0, r4, 0
- movs r1, 0x2E
- bl SetContestantStatusUnk13
- b _080B91C8
-_080B91AC:
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl sub_80B9200
- ldrb r1, [r5, 0x6]
- adds r0, r6, 0
- bl sub_80B141C
- lsls r0, r6, 1
- mov r2, sp
- adds r1, r2, r0
- ldrh r0, [r5, 0x6]
- strh r0, [r1]
-_080B91C8:
- adds r7, 0x1
- ldr r1, _080B91E8 @ =gSharedMem + 0x192D0
- adds r0, r1, 0
- adds r0, 0x8
- adds r0, r7, r0
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _080B913A
-_080B91D8:
- movs r7, 0
- mov r1, sp
-_080B91DC:
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _080B91EC
- movs r0, 0x1
- b _080B91F6
- .align 2, 0
-_080B91E8: .4byte gSharedMem + 0x192D0
-_080B91EC:
- adds r1, 0x2
- adds r7, 0x1
- cmp r7, 0x3
- ble _080B91DC
- movs r0, 0
-_080B91F6:
- add sp, 0xC
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80B9120
-
- thumb_func_start sub_80B9200
-sub_80B9200: @ 80B9200
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, r0, 3
- subs r2, r0
- lsls r2, 2
- ldr r0, _080B9220 @ =gSharedMem + 0x19260
- adds r2, r0
- ldrh r0, [r2, 0x2]
- subs r0, r1
- strh r0, [r2, 0x2]
- ldrb r0, [r2, 0xE]
- adds r1, r0
- strb r1, [r2, 0xE]
- bx lr
- .align 2, 0
-_080B9220: .4byte gSharedMem + 0x19260
- thumb_func_end sub_80B9200
-
- thumb_func_start sub_80B9224
-sub_80B9224: @ 80B9224
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- asrs r4, r0, 16
- adds r0, r4, 0
- cmp r4, 0
- bge _080B9234
- negs r0, r4
-_080B9234:
- movs r1, 0xA
- bl __modsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r4, 0
- bge _080B9252
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0
- beq _080B925C
- adds r0, r4, 0
- subs r0, 0xA
- adds r0, r1, r0
- b _080B9258
-_080B9252:
- lsls r0, 16
- asrs r0, 16
- subs r0, r4, r0
-_080B9258:
- lsls r0, 16
- lsrs r5, r0, 16
-_080B925C:
- lsls r0, r5, 16
- asrs r0, 16
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B9224
-
- thumb_func_start sub_80B9268
-sub_80B9268: @ 80B9268
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- asrs r4, r0, 16
- adds r0, r4, 0
- cmp r4, 0
- bge _080B9278
- negs r0, r4
-_080B9278:
- movs r1, 0xA
- bl __modsi3
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0
- beq _080B9290
- adds r0, r4, 0
- adds r0, 0xA
- subs r0, r1
- lsls r0, 16
- lsrs r5, r0, 16
-_080B9290:
- lsls r0, r5, 16
- asrs r0, 16
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B9268
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/contest.h b/include/contest.h
index 2bcf32bef..4fef98f6e 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -226,7 +226,7 @@ struct UnknownContestStruct7
{
u8 unk0[4];
s16 unk4;
- u16 unk6;
+ s16 unk6;
u8 unk8[5];
u8 unkD[4];
u8 unk11;
@@ -284,5 +284,6 @@ void SetContestantStatusUnk14(u8 a, u8 b);
void sub_80B157C(u8 p);
bool8 Contest_IsMonsTurnDisabled(u8 a);
bool8 sub_80B214C(u8 a);
+void sub_80B141C(u8 a, u8 b);
#endif // GUARD_CONTEST_H
diff --git a/ld_script.txt b/ld_script.txt
index 2eae4d81c..3e3cb622f 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -161,7 +161,6 @@ SECTIONS {
src/naming_screen.o(.text);
src/money.o(.text);
src/contest_effect.o(.text);
- asm/contest_effect.o(.text);
src/record_mixing.o(.text);
src/debug/sound_check_menu.o(.text);
src/secret_base.o(.text);
diff --git a/src/contest_effect.c b/src/contest_effect.c
index e28334b12..ae9be3aaf 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -3,11 +3,14 @@
#include "random.h"
#include "contest.h"
-void sub_80B9038(u8);
-bool8 sub_80B90C0(u8);
-u8 sub_80B9120(void);
-s16 sub_80B9224(s16);
-s16 sub_80B9268(s16);
+static void sub_80B9038(u8);
+static bool8 sub_80B90C0(u8);
+static u8 sub_80B9120(void);
+static void sub_80B9200(u8, u8);
+static s16 RoundTowardsZero(s16);
+static s16 RoundUp(s16);
+
+#define abs(x) ((x) >= 0 ? (x) : -(x))
extern bool8 const gComboStarterLookupTable[];
@@ -497,7 +500,7 @@ void ContestEffect_31(void)
curContestant->appeal2 += r3 / 2;
SetContestantStatusUnk13(shared192D0.unk11, 17);
}
- sContestantStatus[shared192D0.unk11].appeal2 = sub_80B9224(sContestantStatus[shared192D0.unk11].appeal2);
+ sContestantStatus[shared192D0.unk11].appeal2 = RoundTowardsZero(sContestantStatus[shared192D0.unk11].appeal2);
}
void ContestEffect_32(void)
@@ -945,7 +948,7 @@ void ContestEffect_45(void)
if (sContestantStatus[i].appeal2 > 0)
{
shared192D0.unk4 = sContestantStatus[i].appeal2 / 2;
- shared192D0.unk4 = sub_80B9268(shared192D0.unk4);
+ shared192D0.unk4 = RoundUp(shared192D0.unk4);
}
else
shared192D0.unk4 = 10;
@@ -1004,7 +1007,7 @@ void ContestEffect_47(void)
}
}
-void sub_80B9038(u8 category)
+static void sub_80B9038(u8 category)
{
int i;
int r7 = 0;
@@ -1029,26 +1032,24 @@ void sub_80B9038(u8 category)
}
#ifdef NONMATCHING
-bool8 sub_80B90C0(u8 i)
+static bool8 sub_80B90C0(u8 i)
{
shared192D0.unkD[i] = 1;
if (sContestantStatus[i].unk10_1)
- SetContestantStatusUnk13(i, 45);
- else if (sContestantStatus[i].unk12 == 0)
{
- if (sContestantStatus[i].unkB_7 || sContestantStatus[i].unkC_1)
- return FALSE;
- return TRUE;
+ SetContestantStatusUnk13(i, 45);
}
- else
+ else if (sContestantStatus[i].unk12 != 0)
{
sContestantStatus[i].unk12--;
SetContestantStatusUnk13(i, 44);
}
+ else if (!sContestantStatus[i].unkB_7 && sContestantStatus[i].unkC_1 == 0)
+ return TRUE;
return FALSE;
}
#else
-__attribute__((naked)) bool8 sub_80B90C0(u8 i)
+static __attribute__((naked)) bool8 sub_80B90C0(u8 i)
{
asm_unified("\tpush {lr}\n"
"\tlsls r0, 24\n"
@@ -1104,3 +1105,70 @@ __attribute__((naked)) bool8 sub_80B90C0(u8 i)
"\tbx r1");
}
#endif
+
+static bool8 sub_80B9120(void)
+{
+ s16 sp00[4] = {0};
+ int i;
+
+ for (i = 0; shared192D0.unk8[i] != 0xFF; i++)
+ {
+ u8 r4 = shared192D0.unk8[i];
+ if (sub_80B90C0(r4))
+ {
+ shared192D0.unk6 = shared192D0.unk4;
+ if (sContestantStatus[r4].unk10_2)
+ shared192D0.unk6 *= 2;
+ if (sContestantStatus[r4].unk10_0)
+ {
+ shared192D0.unk6 = 10;
+ SetContestantStatusUnk13(r4, 47);
+ }
+ else if ((shared192D0.unk6 -= sContestantStatus[r4].unkF) <= 0)
+ {
+ shared192D0.unk6 = 0;
+ SetContestantStatusUnk13(r4, 46);
+ }
+ else
+ {
+ sub_80B9200(r4, shared192D0.unk6);
+ sub_80B141C(r4, shared192D0.unk6);
+ sp00[r4] = shared192D0.unk6;
+ }
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ if (sp00[i] != 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_80B9200(u8 i, u8 jam)
+{
+ sContestantStatus[i].appeal2 -= jam;
+ sContestantStatus[i].unkE += jam;
+}
+
+static s16 RoundTowardsZero(s16 score)
+{
+ s16 r1 = abs(score) % 10;
+ if (score < 0)
+ {
+ if (r1 != 0)
+ score -= 10 - r1;
+ }
+ else
+ score -= r1;
+ return score;
+}
+
+static s16 RoundUp(s16 score)
+{
+ s16 r1 = abs(score) % 10;
+ if (r1 != 0)
+ score += 10 - r1;
+ return score;
+}