summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/contest_link_80F57C4.c136
1 files changed, 132 insertions, 4 deletions
diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c
index 381fb34fa..c72fc9ba3 100644
--- a/src/contest_link_80F57C4.c
+++ b/src/contest_link_80F57C4.c
@@ -110,13 +110,14 @@ static void sub_80F6EF4(u16);
static void sub_80F60F0(u8);
static void sub_80F616C(u8);
static void sub_80F6204(u8);
-void sub_80F73DC(u8);
-void sub_80F74BC(u8);
+static void sub_80F73DC(u8);
+static void sub_80F74BC(u8);
+static void sub_80F753C(u8);
void sub_80F77E0(u8, u8);
static void sub_80F6404(u8);
-void sub_80F75A8(struct Sprite *);
+static void sub_80F75A8(struct Sprite *);
void sub_80F7670(u8);
-void sub_80F7620(struct Sprite *);
+static void sub_80F7620(struct Sprite *);
static void sub_80F66B4(u8);
static void sub_80F671C(u8);
static void sub_80F677C(u8);
@@ -1439,3 +1440,130 @@ u8 sub_80F7310(u8 monIndex, u8 arg1)
return var1;
}
+
+s8 sub_80F7364(u8 arg0, u8 arg1)
+{
+ u32 r4;
+ u32 r2;
+ s16 val;
+ s8 ret;
+
+ val = gUnknown_02039F18[arg0];
+ if (val < 0)
+ r4 = -val << 16;
+ else
+ r4 = val << 16;
+
+ r2 = r4 / 80;
+ if (r2 & 0xFFFF)
+ r2 += 0x10000;
+
+ r2 >>= 16;
+ if (r2 == 0 && r4 != 0)
+ r2 = 1;
+
+ if (arg1 != 0 && r2 > 10)
+ r2 = 10;
+
+ if (gUnknown_02039F18[arg0] < 0)
+ ret = -r2;
+ else
+ ret = r2;
+
+ return ret;
+}
+
+static void sub_80F73DC(u8 taskId)
+{
+ u16 firstTileNum;
+
+ if (gTasks[taskId].data[10] == 0)
+ {
+ gTasks[taskId].data[11] = (3 - gTasks[taskId].data[0]) * 40;
+ gTasks[taskId].data[10]++;
+ }
+ else if (gTasks[taskId].data[10] == 1)
+ {
+ if (--gTasks[taskId].data[11] == -1)
+ {
+ firstTileNum = gTasks[taskId].data[0] * 2 + 0x5043;
+ WriteSequenceToBgTilemapBuffer(2, firstTileNum, 1, gTasks[taskId].data[1] * 3 + 5, 2, 1, 17, 1);
+ WriteSequenceToBgTilemapBuffer(2, firstTileNum + 0x10, 1, gTasks[taskId].data[1] * 3 + 6, 2, 1, 17, 1);
+ gUnknown_0203A034->unk0->unk5++;
+ DestroyTask(taskId);
+ PlaySE(SE_JYUNI);
+ }
+ }
+}
+
+static void sub_80F74BC(u8 taskId)
+{
+ int i;
+ for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ ;
+
+ CopyToBgTilemapBufferRect_ChangePalette(2, i * 0xC0 + 0x100 + gUnknown_0203A034->unkC[2], 0, i * 3 + 4, 32, 3, 9);
+ gTasks[taskId].data[10] = i;
+ gTasks[taskId].data[12] = 1;
+ gTasks[taskId].func = sub_80F753C;
+ gUnknown_0203A034->unk0->unk3 = taskId;
+}
+
+static void sub_80F753C(u8 taskId)
+{
+ if (++gTasks[taskId].data[11] == 1)
+ {
+ gTasks[taskId].data[11] = 0;
+ BlendPalette(0x91, 1, gTasks[taskId].data[12], RGB(13, 28, 27));
+ if (gTasks[taskId].data[13] == 0)
+ {
+ if (++gTasks[taskId].data[12] == 16)
+ gTasks[taskId].data[13] = 1;
+ }
+ else
+ {
+ if (--gTasks[taskId].data[12] == 0)
+ gTasks[taskId].data[13] = 0;
+ }
+ }
+}
+
+static void sub_80F75A8(struct Sprite *sprite)
+{
+ if (sprite->data[0] < 10)
+ {
+ if (++sprite->data[0] == 10)
+ {
+ PlayCry1(sprite->data[1], 0);
+ sprite->data[1] = 0;
+ }
+ }
+ else
+ {
+ s16 delta = (u16)sprite->data[1] + 0x600;
+ sprite->pos1.x -= delta >> 8;
+ sprite->data[1] = (sprite->data[1] + 0x600) & 0xFF;
+ if (sprite->pos1.x < 120)
+ sprite->pos1.x = 120;
+
+ if (sprite->pos1.x == 120)
+ {
+ sprite->callback = SpriteCallbackDummy;
+ sprite->data[1] = 0;
+ gUnknown_0203A034->unk0->unk6 = 1;
+ }
+ }
+}
+
+static void sub_80F7620(struct Sprite *sprite)
+{
+ s16 delta = (u16)sprite->data[1] + 0x600;
+ sprite->pos1.x -= delta >> 8;
+ sprite->data[1] = (sprite->data[1] + 0x600) & 0xFF;
+ if (sprite->pos1.x < -32)
+ {
+ sprite->callback = SpriteCallbackDummy;
+ sprite->invisible = 1;
+ gUnknown_0203A034->unk0->unk6 = 2;
+ }
+}